summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--COPYING341
-rw-r--r--Makefile84
-rw-r--r--VERSION1
-rw-r--r--addblack.c185
-rwxr-xr-xbin/2hl74
-rwxr-xr-xbin/adddir73
-rwxr-xr-xbin/help2txt222
-rwxr-xr-xbin/html2utf818
-rwxr-xr-xbin/keymapchars37
-rwxr-xr-xbin/keytab93
-rwxr-xr-xbin/mk_keymap16
-rwxr-xr-xbin/trace_context117
-rwxr-xr-xbin/unpack_bootlogo60
-rw-r--r--bin2c.c37
-rw-r--r--bincode.asm17258
-rw-r--r--changelog483
-rw-r--r--debian/changelog309
-rw-r--r--debian/compat (renamed from compat)0
-rw-r--r--debian/control (renamed from control)0
-rw-r--r--debian/copyright (renamed from copyright)0
-rw-r--r--debian/gfxboot-dev.docs (renamed from gfxboot-dev.docs)0
-rw-r--r--debian/gfxboot-dev.install (renamed from gfxboot-dev.install)0
-rw-r--r--debian/gfxboot-dev.links (renamed from gfxboot-dev.links)0
-rw-r--r--debian/gfxboot.install (renamed from gfxboot.install)0
-rw-r--r--debian/patches/0001-asprintf.patch (renamed from patches/0001-asprintf.patch)0
-rw-r--r--debian/patches/0002-ctype.patch (renamed from patches/0002-ctype.patch)0
-rw-r--r--debian/patches/0003-bdf.patch (renamed from patches/0003-bdf.patch)0
-rw-r--r--debian/patches/0004-link-order.patch (renamed from patches/0004-link-order.patch)0
-rw-r--r--debian/patches/0005-buildflags.patch (renamed from patches/0005-buildflags.patch)0
-rw-r--r--debian/patches/0006-syslinux-path.patch (renamed from patches/0006-syslinux-path.patch)0
-rw-r--r--debian/patches/0007-ttf-dejavu.patch (renamed from patches/0007-ttf-dejavu.patch)0
-rw-r--r--debian/patches/0008-adddir.patch (renamed from patches/0008-adddir.patch)0
-rw-r--r--debian/patches/series (renamed from patches/series)0
-rwxr-xr-xdebian/rules (renamed from rules)0
-rw-r--r--debian/source/format (renamed from source/format)0
-rw-r--r--debian/source/options (renamed from source/options)0
-rw-r--r--debian/watch (renamed from watch)0
-rw-r--r--doc/Makefile24
-rw-r--r--doc/gfxboot.8189
-rw-r--r--doc/gfxboot.xml259
-rwxr-xr-xdoc/mkdoc202
-rwxr-xr-xgfxboot3056
-rw-r--r--gfxboot-compile.c1983
-rw-r--r--gfxboot-font.c1511
-rwxr-xr-xgfxtest192
-rw-r--r--jpeg.S2829
-rw-r--r--jpeg.inc1
-rw-r--r--kroete.inc95
-rwxr-xr-xmk_vocabulary155
-rw-r--r--modplay.inc1251
-rw-r--r--modplay_defines.inc92
-rw-r--r--patches/gfxboot_c32.diff1080
-rw-r--r--patches/grub-0.97.diff1006
-rw-r--r--patches/lilo-22.7.diff1133
-rw-r--r--patches/syslinux-3.63.diff2352
-rw-r--r--patches/syslinux-3.82/01_isolinux_mount_chdir.diff175
-rw-r--r--patches/syslinux-3.82/02_comboot_hooks.diff117
-rw-r--r--patches/syslinux-3.82/03_comboot_ne_real_mode_seg.diff44
-rw-r--r--patches/syslinux-3.82/04_new_quiet_flag.diff43
-rw-r--r--patches/syslinux-3.82/05_variable_kernel_address.diff42
-rw-r--r--patches/syslinux-3.82/06_comboot_new_api.diff189
-rw-r--r--patches/syslinux-3.82/07_no_append.diff45
-rw-r--r--patches/syslinux-3.82/08_kernel_size.diff36
-rw-r--r--patches/syslinux-3.82/09_doc.diff43
-rw-r--r--patches/syslinux-3.82/10_gfxboot_c.diff2099
-rw-r--r--patches/syslinux-3.83/01_isolinux_mount_chdir.diff175
-rw-r--r--patches/syslinux-3.83/02_comboot_hooks.diff117
-rw-r--r--patches/syslinux-3.83/03_comboot_ne_real_mode_seg.diff44
-rw-r--r--patches/syslinux-3.83/04_new_quiet_flag.diff43
-rw-r--r--patches/syslinux-3.83/05_variable_kernel_address.diff42
-rw-r--r--patches/syslinux-3.83/06_comboot_new_api.diff189
-rw-r--r--patches/syslinux-3.83/07_no_append.diff45
-rw-r--r--patches/syslinux-3.83/08_kernel_size.diff36
-rw-r--r--patches/syslinux-3.83/09_doc.diff43
-rw-r--r--patches/syslinux-3.83/10_gfxboot_c.diff2099
-rw-r--r--patches/syslinux-3.86/01_isolinux_mount_chdir.diff175
-rw-r--r--patches/syslinux-3.86/02_comboot_new_api.diff70
-rw-r--r--patches/syslinux-3.86/03_doc.diff25
-rw-r--r--patches/syslinux-3.86/04_no_gfxboot_com.diff13
-rw-r--r--test/c32/gfxtest.config15
-rw-r--r--test/c32_pxe/gfxtest.config15
-rw-r--r--test/cdrom/gfxtest.config15
-rw-r--r--test/ddc/ddcbin0 -> 128 bytes
-rw-r--r--test/ddc/gfxtest.config15
-rw-r--r--test/grub/gfxtest.config15
-rw-r--r--test/lilo/gfxtest.config15
-rw-r--r--test/pxe/gfxtest.config15
-rw-r--r--test/syslinux/gfxtest.config15
l---------themes/KDE/Makefile1
-rw-r--r--themes/KDE/config2
-rw-r--r--themes/KDE/data-boot/back.jpgbin0 -> 27524 bytes
-rw-r--r--themes/KDE/data-install/back.jpgbin0 -> 27524 bytes
-rw-r--r--themes/KDE/data-install/welcome.jpgbin0 -> 46838 bytes
l---------themes/SLED/Makefile1
-rw-r--r--themes/SLED/config2
-rw-r--r--themes/SLED/data-boot/back.jpgbin0 -> 43554 bytes
-rw-r--r--themes/SLED/data-install/back.jpgbin0 -> 43554 bytes
-rw-r--r--themes/SLED/data-install/text.jpgbin0 -> 7983 bytes
-rw-r--r--themes/SLED/data-install/welcome.jpgbin0 -> 62683 bytes
l---------themes/SLES/Makefile1
-rw-r--r--themes/SLES/config2
-rw-r--r--themes/SLES/data-boot/back.jpgbin0 -> 43221 bytes
-rw-r--r--themes/SLES/data-install/back.jpgbin0 -> 43221 bytes
-rw-r--r--themes/SLES/data-install/text.jpgbin0 -> 7983 bytes
-rw-r--r--themes/SLES/data-install/welcome.jpgbin0 -> 62639 bytes
-rw-r--r--themes/example_01/Makefile21
-rw-r--r--themes/example_01/example_01.bc108
-rw-r--r--themes/example_02/Makefile25
-rw-r--r--themes/example_02/example_02.bc83
-rw-r--r--themes/example_03/Makefile25
-rw-r--r--themes/example_03/clouds.jpgbin0 -> 68137 bytes
-rw-r--r--themes/example_03/example_03.bc133
-rw-r--r--themes/example_04/Makefile25
-rw-r--r--themes/example_04/clouds.jpgbin0 -> 68137 bytes
-rw-r--r--themes/example_04/example_04.bc226
-rw-r--r--themes/example_05/Makefile25
-rw-r--r--themes/example_05/clouds.jpgbin0 -> 62362 bytes
-rw-r--r--themes/example_05/example_05.bc326
-rw-r--r--themes/example_06/Makefile29
-rw-r--r--themes/example_06/clouds.jpgbin0 -> 62362 bytes
-rw-r--r--themes/example_06/example_06.bc387
-rw-r--r--themes/example_07/Makefile29
-rw-r--r--themes/example_07/clouds.jpgbin0 -> 62362 bytes
-rw-r--r--themes/example_07/example_07.bc411
-rw-r--r--themes/openSUSE/Makefile87
-rw-r--r--themes/openSUSE/config2
-rw-r--r--themes/openSUSE/data-boot/back.jpgbin0 -> 146149 bytes
-rw-r--r--themes/openSUSE/data-boot/languages1
-rw-r--r--themes/openSUSE/data-boot/pabout.txt6
-rw-r--r--themes/openSUSE/data-boot/panim.jpgbin0 -> 39431 bytes
-rw-r--r--themes/openSUSE/data-boot/panim_a.jpgbin0 -> 29857 bytes
-rw-r--r--themes/openSUSE/data-boot/pback.jpgbin0 -> 87451 bytes
-rw-r--r--themes/openSUSE/data-boot/phead.jpgbin0 -> 2124 bytes
-rw-r--r--themes/openSUSE/data-boot/timer_a.jpgbin0 -> 1719 bytes
-rw-r--r--themes/openSUSE/data-install/back.jpgbin0 -> 146250 bytes
-rw-r--r--themes/openSUSE/data-install/en.tlkbin0 -> 2634128 bytes
-rw-r--r--themes/openSUSE/data-install/hapysuse.modbin0 -> 9204 bytes
-rw-r--r--themes/openSUSE/data-install/kroete.datbin0 -> 16384 bytes
-rw-r--r--themes/openSUSE/data-install/languages62
-rw-r--r--themes/openSUSE/data-install/pabout.txt6
-rw-r--r--themes/openSUSE/data-install/panim.jpgbin0 -> 39431 bytes
-rw-r--r--themes/openSUSE/data-install/panim_a.jpgbin0 -> 29857 bytes
-rw-r--r--themes/openSUSE/data-install/pback.jpgbin0 -> 87451 bytes
-rw-r--r--themes/openSUSE/data-install/phead.jpgbin0 -> 2124 bytes
-rw-r--r--themes/openSUSE/data-install/text.jpgbin0 -> 7446 bytes
-rw-r--r--themes/openSUSE/data-install/timer_a.jpgbin0 -> 1719 bytes
-rw-r--r--themes/openSUSE/data-install/welcome.jpgbin0 -> 79834 bytes
-rw-r--r--themes/openSUSE/fonts/16x16.fntbin0 -> 129384 bytes
-rw-r--r--themes/openSUSE/fonts/16x16.fnt.log54654
-rw-r--r--themes/openSUSE/fonts/Makefile41
-rw-r--r--themes/openSUSE/help-boot/Makefile20
-rw-r--r--themes/openSUSE/help-boot/af/navi.html1
-rw-r--r--themes/openSUSE/help-boot/af/opt.html12
-rw-r--r--themes/openSUSE/help-boot/af/opt::help.html25
-rw-r--r--themes/openSUSE/help-boot/af/opt::keytable.html7
-rw-r--r--themes/openSUSE/help-boot/af/opt::o_acpi.html23
-rw-r--r--themes/openSUSE/help-boot/af/opt::o_apm.html21
-rw-r--r--themes/openSUSE/help-boot/af/opt::o_ide.html12
-rw-r--r--themes/openSUSE/help-boot/af/opt::o_splash.html12
-rw-r--r--themes/openSUSE/help-boot/af/opt::profile.html8
-rw-r--r--themes/openSUSE/help-boot/ar/navi.html1
-rw-r--r--themes/openSUSE/help-boot/ar/opt.html12
-rw-r--r--themes/openSUSE/help-boot/ar/opt::help.html25
-rw-r--r--themes/openSUSE/help-boot/ar/opt::keytable.html7
-rw-r--r--themes/openSUSE/help-boot/ar/opt::o_acpi.html23
-rw-r--r--themes/openSUSE/help-boot/ar/opt::o_apm.html21
-rw-r--r--themes/openSUSE/help-boot/ar/opt::o_ide.html12
-rw-r--r--themes/openSUSE/help-boot/ar/opt::o_splash.html12
-rw-r--r--themes/openSUSE/help-boot/ar/opt::profile.html8
-rw-r--r--themes/openSUSE/help-boot/bg/navi.html3
-rw-r--r--themes/openSUSE/help-boot/bg/opt.html12
-rw-r--r--themes/openSUSE/help-boot/bg/opt::help.html25
-rw-r--r--themes/openSUSE/help-boot/bg/opt::keytable.html7
-rw-r--r--themes/openSUSE/help-boot/bg/opt::o_acpi.html23
-rw-r--r--themes/openSUSE/help-boot/bg/opt::o_apm.html21
-rw-r--r--themes/openSUSE/help-boot/bg/opt::o_ide.html12
-rw-r--r--themes/openSUSE/help-boot/bg/opt::o_splash.html12
-rw-r--r--themes/openSUSE/help-boot/bg/opt::profile.html8
-rw-r--r--themes/openSUSE/help-boot/ca/navi.html1
-rw-r--r--themes/openSUSE/help-boot/ca/opt.html12
-rw-r--r--themes/openSUSE/help-boot/ca/opt::help.html25
-rw-r--r--themes/openSUSE/help-boot/ca/opt::keytable.html7
-rw-r--r--themes/openSUSE/help-boot/ca/opt::o_acpi.html23
-rw-r--r--themes/openSUSE/help-boot/ca/opt::o_apm.html21
-rw-r--r--themes/openSUSE/help-boot/ca/opt::o_ide.html12
-rw-r--r--themes/openSUSE/help-boot/ca/opt::o_splash.html12
-rw-r--r--themes/openSUSE/help-boot/ca/opt::profile.html8
-rw-r--r--themes/openSUSE/help-boot/cs/navi.html1
-rw-r--r--themes/openSUSE/help-boot/cs/opt.html12
-rw-r--r--themes/openSUSE/help-boot/cs/opt::help.html7
-rw-r--r--themes/openSUSE/help-boot/cs/opt::keytable.html5
-rw-r--r--themes/openSUSE/help-boot/cs/opt::o_acpi.html7
-rw-r--r--themes/openSUSE/help-boot/cs/opt::o_apm.html7
-rw-r--r--themes/openSUSE/help-boot/cs/opt::o_ide.html5
-rw-r--r--themes/openSUSE/help-boot/cs/opt::o_splash.html5
-rw-r--r--themes/openSUSE/help-boot/cs/opt::profile.html5
-rw-r--r--themes/openSUSE/help-boot/da/navi.html1
-rw-r--r--themes/openSUSE/help-boot/da/opt.html12
-rw-r--r--themes/openSUSE/help-boot/da/opt::help.html7
-rw-r--r--themes/openSUSE/help-boot/da/opt::keytable.html5
-rw-r--r--themes/openSUSE/help-boot/da/opt::o_acpi.html7
-rw-r--r--themes/openSUSE/help-boot/da/opt::o_apm.html7
-rw-r--r--themes/openSUSE/help-boot/da/opt::o_ide.html5
-rw-r--r--themes/openSUSE/help-boot/da/opt::o_splash.html5
-rw-r--r--themes/openSUSE/help-boot/da/opt::profile.html5
-rw-r--r--themes/openSUSE/help-boot/de/navi.html1
-rw-r--r--themes/openSUSE/help-boot/de/opt.html12
-rw-r--r--themes/openSUSE/help-boot/de/opt::help.html7
-rw-r--r--themes/openSUSE/help-boot/de/opt::keytable.html5
-rw-r--r--themes/openSUSE/help-boot/de/opt::o_acpi.html7
-rw-r--r--themes/openSUSE/help-boot/de/opt::o_apm.html7
-rw-r--r--themes/openSUSE/help-boot/de/opt::o_ide.html5
-rw-r--r--themes/openSUSE/help-boot/de/opt::o_splash.html5
-rw-r--r--themes/openSUSE/help-boot/de/opt::profile.html5
-rw-r--r--themes/openSUSE/help-boot/el/navi.html1
-rw-r--r--themes/openSUSE/help-boot/el/opt.html12
-rw-r--r--themes/openSUSE/help-boot/el/opt::help.html25
-rw-r--r--themes/openSUSE/help-boot/el/opt::keytable.html7
-rw-r--r--themes/openSUSE/help-boot/el/opt::o_acpi.html23
-rw-r--r--themes/openSUSE/help-boot/el/opt::o_apm.html21
-rw-r--r--themes/openSUSE/help-boot/el/opt::o_ide.html12
-rw-r--r--themes/openSUSE/help-boot/el/opt::o_splash.html12
-rw-r--r--themes/openSUSE/help-boot/el/opt::profile.html8
-rw-r--r--themes/openSUSE/help-boot/en/navi.html3
-rw-r--r--themes/openSUSE/help-boot/en/opt.html12
-rw-r--r--themes/openSUSE/help-boot/en/opt::help.html25
-rw-r--r--themes/openSUSE/help-boot/en/opt::keytable.html7
-rw-r--r--themes/openSUSE/help-boot/en/opt::o_acpi.html23
-rw-r--r--themes/openSUSE/help-boot/en/opt::o_apm.html21
-rw-r--r--themes/openSUSE/help-boot/en/opt::o_ide.html12
-rw-r--r--themes/openSUSE/help-boot/en/opt::o_splash.html12
-rw-r--r--themes/openSUSE/help-boot/en/opt::profile.html8
-rw-r--r--themes/openSUSE/help-boot/es/navi.html1
-rw-r--r--themes/openSUSE/help-boot/es/opt.html12
-rw-r--r--themes/openSUSE/help-boot/es/opt::help.html7
-rw-r--r--themes/openSUSE/help-boot/es/opt::keytable.html5
-rw-r--r--themes/openSUSE/help-boot/es/opt::o_acpi.html7
-rw-r--r--themes/openSUSE/help-boot/es/opt::o_apm.html7
-rw-r--r--themes/openSUSE/help-boot/es/opt::o_ide.html5
-rw-r--r--themes/openSUSE/help-boot/es/opt::o_splash.html5
-rw-r--r--themes/openSUSE/help-boot/es/opt::profile.html5
-rw-r--r--themes/openSUSE/help-boot/et/navi.html1
-rw-r--r--themes/openSUSE/help-boot/et/opt.html12
-rw-r--r--themes/openSUSE/help-boot/et/opt::help.html25
-rw-r--r--themes/openSUSE/help-boot/et/opt::keytable.html7
-rw-r--r--themes/openSUSE/help-boot/et/opt::o_acpi.html23
-rw-r--r--themes/openSUSE/help-boot/et/opt::o_apm.html21
-rw-r--r--themes/openSUSE/help-boot/et/opt::o_ide.html12
-rw-r--r--themes/openSUSE/help-boot/et/opt::o_splash.html12
-rw-r--r--themes/openSUSE/help-boot/et/opt::profile.html8
-rw-r--r--themes/openSUSE/help-boot/fi/navi.html1
-rw-r--r--themes/openSUSE/help-boot/fi/opt.html12
-rw-r--r--themes/openSUSE/help-boot/fi/opt::help.html7
-rw-r--r--themes/openSUSE/help-boot/fi/opt::keytable.html5
-rw-r--r--themes/openSUSE/help-boot/fi/opt::o_acpi.html7
-rw-r--r--themes/openSUSE/help-boot/fi/opt::o_apm.html7
-rw-r--r--themes/openSUSE/help-boot/fi/opt::o_ide.html5
-rw-r--r--themes/openSUSE/help-boot/fi/opt::o_splash.html5
-rw-r--r--themes/openSUSE/help-boot/fi/opt::profile.html5
-rw-r--r--themes/openSUSE/help-boot/fr/navi.html1
-rw-r--r--themes/openSUSE/help-boot/fr/opt.html12
-rw-r--r--themes/openSUSE/help-boot/fr/opt::help.html7
-rw-r--r--themes/openSUSE/help-boot/fr/opt::keytable.html5
-rw-r--r--themes/openSUSE/help-boot/fr/opt::o_acpi.html7
-rw-r--r--themes/openSUSE/help-boot/fr/opt::o_apm.html7
-rw-r--r--themes/openSUSE/help-boot/fr/opt::o_ide.html5
-rw-r--r--themes/openSUSE/help-boot/fr/opt::o_splash.html5
-rw-r--r--themes/openSUSE/help-boot/fr/opt::profile.html5
-rw-r--r--themes/openSUSE/help-boot/gl/navi.html1
-rw-r--r--themes/openSUSE/help-boot/gl/opt.html12
-rw-r--r--themes/openSUSE/help-boot/gl/opt::help.html7
-rw-r--r--themes/openSUSE/help-boot/gl/opt::keytable.html5
-rw-r--r--themes/openSUSE/help-boot/gl/opt::o_acpi.html7
-rw-r--r--themes/openSUSE/help-boot/gl/opt::o_apm.html7
-rw-r--r--themes/openSUSE/help-boot/gl/opt::o_ide.html5
-rw-r--r--themes/openSUSE/help-boot/gl/opt::o_splash.html5
-rw-r--r--themes/openSUSE/help-boot/gl/opt::profile.html5
-rw-r--r--themes/openSUSE/help-boot/gu/navi.html1
-rw-r--r--themes/openSUSE/help-boot/gu/opt.html12
-rw-r--r--themes/openSUSE/help-boot/gu/opt::help.html25
-rw-r--r--themes/openSUSE/help-boot/gu/opt::keytable.html7
-rw-r--r--themes/openSUSE/help-boot/gu/opt::o_acpi.html23
-rw-r--r--themes/openSUSE/help-boot/gu/opt::o_apm.html21
-rw-r--r--themes/openSUSE/help-boot/gu/opt::o_ide.html12
-rw-r--r--themes/openSUSE/help-boot/gu/opt::o_splash.html12
-rw-r--r--themes/openSUSE/help-boot/gu/opt::profile.html8
-rw-r--r--themes/openSUSE/help-boot/hi/navi.html1
-rw-r--r--themes/openSUSE/help-boot/hi/opt.html12
-rw-r--r--themes/openSUSE/help-boot/hi/opt::help.html25
-rw-r--r--themes/openSUSE/help-boot/hi/opt::keytable.html7
-rw-r--r--themes/openSUSE/help-boot/hi/opt::o_acpi.html23
-rw-r--r--themes/openSUSE/help-boot/hi/opt::o_apm.html21
-rw-r--r--themes/openSUSE/help-boot/hi/opt::o_ide.html12
-rw-r--r--themes/openSUSE/help-boot/hi/opt::o_splash.html12
-rw-r--r--themes/openSUSE/help-boot/hi/opt::profile.html8
-rw-r--r--themes/openSUSE/help-boot/hr/navi.html1
-rw-r--r--themes/openSUSE/help-boot/hr/opt.html12
-rw-r--r--themes/openSUSE/help-boot/hr/opt::help.html7
-rw-r--r--themes/openSUSE/help-boot/hr/opt::keytable.html5
-rw-r--r--themes/openSUSE/help-boot/hr/opt::o_acpi.html7
-rw-r--r--themes/openSUSE/help-boot/hr/opt::o_apm.html7
-rw-r--r--themes/openSUSE/help-boot/hr/opt::o_ide.html5
-rw-r--r--themes/openSUSE/help-boot/hr/opt::o_splash.html5
-rw-r--r--themes/openSUSE/help-boot/hr/opt::profile.html5
-rw-r--r--themes/openSUSE/help-boot/hu/navi.html1
-rw-r--r--themes/openSUSE/help-boot/hu/opt.html12
-rw-r--r--themes/openSUSE/help-boot/hu/opt::help.html7
-rw-r--r--themes/openSUSE/help-boot/hu/opt::keytable.html5
-rw-r--r--themes/openSUSE/help-boot/hu/opt::o_acpi.html7
-rw-r--r--themes/openSUSE/help-boot/hu/opt::o_apm.html7
-rw-r--r--themes/openSUSE/help-boot/hu/opt::o_ide.html5
-rw-r--r--themes/openSUSE/help-boot/hu/opt::o_splash.html5
-rw-r--r--themes/openSUSE/help-boot/hu/opt::profile.html5
-rw-r--r--themes/openSUSE/help-boot/it/navi.html1
-rw-r--r--themes/openSUSE/help-boot/it/opt.html12
-rw-r--r--themes/openSUSE/help-boot/it/opt::help.html7
-rw-r--r--themes/openSUSE/help-boot/it/opt::keytable.html5
-rw-r--r--themes/openSUSE/help-boot/it/opt::o_acpi.html7
-rw-r--r--themes/openSUSE/help-boot/it/opt::o_apm.html7
-rw-r--r--themes/openSUSE/help-boot/it/opt::o_ide.html5
-rw-r--r--themes/openSUSE/help-boot/it/opt::o_splash.html5
-rw-r--r--themes/openSUSE/help-boot/it/opt::profile.html5
-rw-r--r--themes/openSUSE/help-boot/ja/navi.html1
-rw-r--r--themes/openSUSE/help-boot/ja/opt.html12
-rw-r--r--themes/openSUSE/help-boot/ja/opt::help.html7
-rw-r--r--themes/openSUSE/help-boot/ja/opt::keytable.html5
-rw-r--r--themes/openSUSE/help-boot/ja/opt::o_acpi.html7
-rw-r--r--themes/openSUSE/help-boot/ja/opt::o_apm.html7
-rw-r--r--themes/openSUSE/help-boot/ja/opt::o_ide.html5
-rw-r--r--themes/openSUSE/help-boot/ja/opt::o_splash.html5
-rw-r--r--themes/openSUSE/help-boot/ja/opt::profile.html5
-rw-r--r--themes/openSUSE/help-boot/ko/navi.html1
-rw-r--r--themes/openSUSE/help-boot/ko/opt.html12
-rw-r--r--themes/openSUSE/help-boot/ko/opt::help.html7
-rw-r--r--themes/openSUSE/help-boot/ko/opt::keytable.html5
-rw-r--r--themes/openSUSE/help-boot/ko/opt::o_acpi.html7
-rw-r--r--themes/openSUSE/help-boot/ko/opt::o_apm.html7
-rw-r--r--themes/openSUSE/help-boot/ko/opt::o_ide.html5
-rw-r--r--themes/openSUSE/help-boot/ko/opt::o_splash.html5
-rw-r--r--themes/openSUSE/help-boot/ko/opt::profile.html5
-rw-r--r--themes/openSUSE/help-boot/ky/navi.html1
-rw-r--r--themes/openSUSE/help-boot/ky/opt.html12
-rw-r--r--themes/openSUSE/help-boot/ky/opt::help.html7
-rw-r--r--themes/openSUSE/help-boot/ky/opt::keytable.html5
-rw-r--r--themes/openSUSE/help-boot/ky/opt::o_acpi.html7
-rw-r--r--themes/openSUSE/help-boot/ky/opt::o_apm.html7
-rw-r--r--themes/openSUSE/help-boot/ky/opt::o_ide.html5
-rw-r--r--themes/openSUSE/help-boot/ky/opt::o_splash.html5
-rw-r--r--themes/openSUSE/help-boot/ky/opt::profile.html5
-rw-r--r--themes/openSUSE/help-boot/lt/navi.html1
-rw-r--r--themes/openSUSE/help-boot/lt/opt.html12
-rw-r--r--themes/openSUSE/help-boot/lt/opt::help.html7
-rw-r--r--themes/openSUSE/help-boot/lt/opt::keytable.html5
-rw-r--r--themes/openSUSE/help-boot/lt/opt::o_acpi.html7
-rw-r--r--themes/openSUSE/help-boot/lt/opt::o_apm.html7
-rw-r--r--themes/openSUSE/help-boot/lt/opt::o_ide.html5
-rw-r--r--themes/openSUSE/help-boot/lt/opt::o_splash.html5
-rw-r--r--themes/openSUSE/help-boot/lt/opt::profile.html5
-rw-r--r--themes/openSUSE/help-boot/mr/navi.html1
-rw-r--r--themes/openSUSE/help-boot/mr/opt.html12
-rw-r--r--themes/openSUSE/help-boot/mr/opt::help.html25
-rw-r--r--themes/openSUSE/help-boot/mr/opt::keytable.html7
-rw-r--r--themes/openSUSE/help-boot/mr/opt::o_acpi.html23
-rw-r--r--themes/openSUSE/help-boot/mr/opt::o_apm.html21
-rw-r--r--themes/openSUSE/help-boot/mr/opt::o_ide.html12
-rw-r--r--themes/openSUSE/help-boot/mr/opt::o_splash.html12
-rw-r--r--themes/openSUSE/help-boot/mr/opt::profile.html8
-rw-r--r--themes/openSUSE/help-boot/nb/navi.html1
-rw-r--r--themes/openSUSE/help-boot/nb/opt.html12
-rw-r--r--themes/openSUSE/help-boot/nb/opt::help.html7
-rw-r--r--themes/openSUSE/help-boot/nb/opt::keytable.html5
-rw-r--r--themes/openSUSE/help-boot/nb/opt::o_acpi.html7
-rw-r--r--themes/openSUSE/help-boot/nb/opt::o_apm.html7
-rw-r--r--themes/openSUSE/help-boot/nb/opt::o_ide.html5
-rw-r--r--themes/openSUSE/help-boot/nb/opt::o_splash.html5
-rw-r--r--themes/openSUSE/help-boot/nb/opt::profile.html5
-rw-r--r--themes/openSUSE/help-boot/nl/navi.html1
-rw-r--r--themes/openSUSE/help-boot/nl/opt.html12
-rw-r--r--themes/openSUSE/help-boot/nl/opt::help.html7
-rw-r--r--themes/openSUSE/help-boot/nl/opt::keytable.html5
-rw-r--r--themes/openSUSE/help-boot/nl/opt::o_acpi.html7
-rw-r--r--themes/openSUSE/help-boot/nl/opt::o_apm.html7
-rw-r--r--themes/openSUSE/help-boot/nl/opt::o_ide.html5
-rw-r--r--themes/openSUSE/help-boot/nl/opt::o_splash.html5
-rw-r--r--themes/openSUSE/help-boot/nl/opt::profile.html5
-rw-r--r--themes/openSUSE/help-boot/pa/navi.html1
-rw-r--r--themes/openSUSE/help-boot/pa/opt.html12
-rw-r--r--themes/openSUSE/help-boot/pa/opt::help.html12
-rw-r--r--themes/openSUSE/help-boot/pa/opt::keytable.html5
-rw-r--r--themes/openSUSE/help-boot/pa/opt::o_acpi.html20
-rw-r--r--themes/openSUSE/help-boot/pa/opt::o_apm.html18
-rw-r--r--themes/openSUSE/help-boot/pa/opt::o_ide.html12
-rw-r--r--themes/openSUSE/help-boot/pa/opt::o_splash.html12
-rw-r--r--themes/openSUSE/help-boot/pa/opt::profile.html8
-rw-r--r--themes/openSUSE/help-boot/pl/navi.html3
-rw-r--r--themes/openSUSE/help-boot/pl/opt.html12
-rw-r--r--themes/openSUSE/help-boot/pl/opt::help.html25
-rw-r--r--themes/openSUSE/help-boot/pl/opt::keytable.html7
-rw-r--r--themes/openSUSE/help-boot/pl/opt::o_acpi.html23
-rw-r--r--themes/openSUSE/help-boot/pl/opt::o_apm.html21
-rw-r--r--themes/openSUSE/help-boot/pl/opt::o_ide.html12
-rw-r--r--themes/openSUSE/help-boot/pl/opt::o_splash.html12
-rw-r--r--themes/openSUSE/help-boot/pl/opt::profile.html8
-rw-r--r--themes/openSUSE/help-boot/pt/navi.html1
-rw-r--r--themes/openSUSE/help-boot/pt/opt.html12
-rw-r--r--themes/openSUSE/help-boot/pt/opt::help.html25
-rw-r--r--themes/openSUSE/help-boot/pt/opt::keytable.html7
-rw-r--r--themes/openSUSE/help-boot/pt/opt::o_acpi.html23
-rw-r--r--themes/openSUSE/help-boot/pt/opt::o_apm.html21
-rw-r--r--themes/openSUSE/help-boot/pt/opt::o_ide.html12
-rw-r--r--themes/openSUSE/help-boot/pt/opt::o_splash.html12
-rw-r--r--themes/openSUSE/help-boot/pt/opt::profile.html8
-rw-r--r--themes/openSUSE/help-boot/pt_BR/navi.html1
-rw-r--r--themes/openSUSE/help-boot/pt_BR/opt.html12
-rw-r--r--themes/openSUSE/help-boot/pt_BR/opt::help.html7
-rw-r--r--themes/openSUSE/help-boot/pt_BR/opt::keytable.html5
-rw-r--r--themes/openSUSE/help-boot/pt_BR/opt::o_acpi.html7
-rw-r--r--themes/openSUSE/help-boot/pt_BR/opt::o_apm.html7
-rw-r--r--themes/openSUSE/help-boot/pt_BR/opt::o_ide.html5
-rw-r--r--themes/openSUSE/help-boot/pt_BR/opt::o_splash.html5
-rw-r--r--themes/openSUSE/help-boot/pt_BR/opt::profile.html5
-rw-r--r--themes/openSUSE/help-boot/ro/navi.html1
-rw-r--r--themes/openSUSE/help-boot/ro/opt.html12
-rw-r--r--themes/openSUSE/help-boot/ro/opt::help.html7
-rw-r--r--themes/openSUSE/help-boot/ro/opt::keytable.html5
-rw-r--r--themes/openSUSE/help-boot/ro/opt::o_acpi.html7
-rw-r--r--themes/openSUSE/help-boot/ro/opt::o_apm.html7
-rw-r--r--themes/openSUSE/help-boot/ro/opt::o_ide.html5
-rw-r--r--themes/openSUSE/help-boot/ro/opt::o_splash.html5
-rw-r--r--themes/openSUSE/help-boot/ro/opt::profile.html5
-rw-r--r--themes/openSUSE/help-boot/ru/navi.html1
-rw-r--r--themes/openSUSE/help-boot/ru/opt.html12
-rw-r--r--themes/openSUSE/help-boot/ru/opt::help.html7
-rw-r--r--themes/openSUSE/help-boot/ru/opt::keytable.html5
-rw-r--r--themes/openSUSE/help-boot/ru/opt::o_acpi.html7
-rw-r--r--themes/openSUSE/help-boot/ru/opt::o_apm.html7
-rw-r--r--themes/openSUSE/help-boot/ru/opt::o_ide.html5
-rw-r--r--themes/openSUSE/help-boot/ru/opt::o_splash.html5
-rw-r--r--themes/openSUSE/help-boot/ru/opt::profile.html5
-rw-r--r--themes/openSUSE/help-boot/sk/navi.html3
-rw-r--r--themes/openSUSE/help-boot/sk/opt.html12
-rw-r--r--themes/openSUSE/help-boot/sk/opt::help.html25
-rw-r--r--themes/openSUSE/help-boot/sk/opt::keytable.html7
-rw-r--r--themes/openSUSE/help-boot/sk/opt::o_acpi.html23
-rw-r--r--themes/openSUSE/help-boot/sk/opt::o_apm.html21
-rw-r--r--themes/openSUSE/help-boot/sk/opt::o_ide.html12
-rw-r--r--themes/openSUSE/help-boot/sk/opt::o_splash.html12
-rw-r--r--themes/openSUSE/help-boot/sk/opt::profile.html8
-rw-r--r--themes/openSUSE/help-boot/sv/navi.html1
-rw-r--r--themes/openSUSE/help-boot/sv/opt.html12
-rw-r--r--themes/openSUSE/help-boot/sv/opt::help.html7
-rw-r--r--themes/openSUSE/help-boot/sv/opt::keytable.html5
-rw-r--r--themes/openSUSE/help-boot/sv/opt::o_acpi.html7
-rw-r--r--themes/openSUSE/help-boot/sv/opt::o_apm.html7
-rw-r--r--themes/openSUSE/help-boot/sv/opt::o_ide.html5
-rw-r--r--themes/openSUSE/help-boot/sv/opt::o_splash.html5
-rw-r--r--themes/openSUSE/help-boot/sv/opt::profile.html5
-rw-r--r--themes/openSUSE/help-boot/th/navi.html1
-rw-r--r--themes/openSUSE/help-boot/th/opt.html12
-rw-r--r--themes/openSUSE/help-boot/th/opt::help.html7
-rw-r--r--themes/openSUSE/help-boot/th/opt::keytable.html5
-rw-r--r--themes/openSUSE/help-boot/th/opt::o_acpi.html7
-rw-r--r--themes/openSUSE/help-boot/th/opt::o_apm.html7
-rw-r--r--themes/openSUSE/help-boot/th/opt::o_ide.html5
-rw-r--r--themes/openSUSE/help-boot/th/opt::o_splash.html5
-rw-r--r--themes/openSUSE/help-boot/th/opt::profile.html5
-rw-r--r--themes/openSUSE/help-boot/uk/navi.html1
-rw-r--r--themes/openSUSE/help-boot/uk/opt.html12
-rw-r--r--themes/openSUSE/help-boot/uk/opt::help.html7
-rw-r--r--themes/openSUSE/help-boot/uk/opt::keytable.html5
-rw-r--r--themes/openSUSE/help-boot/uk/opt::o_acpi.html7
-rw-r--r--themes/openSUSE/help-boot/uk/opt::o_apm.html7
-rw-r--r--themes/openSUSE/help-boot/uk/opt::o_ide.html5
-rw-r--r--themes/openSUSE/help-boot/uk/opt::o_splash.html5
-rw-r--r--themes/openSUSE/help-boot/uk/opt::profile.html5
-rw-r--r--themes/openSUSE/help-boot/wa/navi.html1
-rw-r--r--themes/openSUSE/help-boot/wa/opt.html12
-rw-r--r--themes/openSUSE/help-boot/wa/opt::help.html12
-rw-r--r--themes/openSUSE/help-boot/wa/opt::keytable.html5
-rw-r--r--themes/openSUSE/help-boot/wa/opt::o_acpi.html20
-rw-r--r--themes/openSUSE/help-boot/wa/opt::o_apm.html18
-rw-r--r--themes/openSUSE/help-boot/wa/opt::o_ide.html5
-rw-r--r--themes/openSUSE/help-boot/wa/opt::o_splash.html5
-rw-r--r--themes/openSUSE/help-boot/wa/opt::profile.html5
-rw-r--r--themes/openSUSE/help-boot/xh/navi.html1
-rw-r--r--themes/openSUSE/help-boot/xh/opt.html12
-rw-r--r--themes/openSUSE/help-boot/xh/opt::help.html25
-rw-r--r--themes/openSUSE/help-boot/xh/opt::keytable.html7
-rw-r--r--themes/openSUSE/help-boot/xh/opt::o_acpi.html23
-rw-r--r--themes/openSUSE/help-boot/xh/opt::o_apm.html21
-rw-r--r--themes/openSUSE/help-boot/xh/opt::o_ide.html12
-rw-r--r--themes/openSUSE/help-boot/xh/opt::o_splash.html12
-rw-r--r--themes/openSUSE/help-boot/xh/opt::profile.html8
-rw-r--r--themes/openSUSE/help-boot/zh_CN/navi.html1
-rw-r--r--themes/openSUSE/help-boot/zh_CN/opt.html12
-rw-r--r--themes/openSUSE/help-boot/zh_CN/opt::help.html7
-rw-r--r--themes/openSUSE/help-boot/zh_CN/opt::keytable.html5
-rw-r--r--themes/openSUSE/help-boot/zh_CN/opt::o_acpi.html7
-rw-r--r--themes/openSUSE/help-boot/zh_CN/opt::o_apm.html7
-rw-r--r--themes/openSUSE/help-boot/zh_CN/opt::o_ide.html5
-rw-r--r--themes/openSUSE/help-boot/zh_CN/opt::o_splash.html5
-rw-r--r--themes/openSUSE/help-boot/zh_CN/opt::profile.html5
-rw-r--r--themes/openSUSE/help-boot/zh_TW/navi.html1
-rw-r--r--themes/openSUSE/help-boot/zh_TW/opt.html12
-rw-r--r--themes/openSUSE/help-boot/zh_TW/opt::help.html7
-rw-r--r--themes/openSUSE/help-boot/zh_TW/opt::keytable.html5
-rw-r--r--themes/openSUSE/help-boot/zh_TW/opt::o_acpi.html7
-rw-r--r--themes/openSUSE/help-boot/zh_TW/opt::o_apm.html7
-rw-r--r--themes/openSUSE/help-boot/zh_TW/opt::o_ide.html5
-rw-r--r--themes/openSUSE/help-boot/zh_TW/opt::o_splash.html5
-rw-r--r--themes/openSUSE/help-boot/zh_TW/opt::profile.html5
-rw-r--r--themes/openSUSE/help-install/Makefile20
-rw-r--r--themes/openSUSE/help-install/af/main.html103
-rw-r--r--themes/openSUSE/help-install/af/main::bits.html7
-rw-r--r--themes/openSUSE/help-install/af/main::driverupdate.html14
-rw-r--r--themes/openSUSE/help-install/af/main::failsafe.html11
-rw-r--r--themes/openSUSE/help-install/af/main::firmware.html9
-rw-r--r--themes/openSUSE/help-install/af/main::harddisk.html16
-rw-r--r--themes/openSUSE/help-install/af/main::help.html25
-rw-r--r--themes/openSUSE/help-install/af/main::install_src.html12
-rw-r--r--themes/openSUSE/help-install/af/main::keytable.html7
-rw-r--r--themes/openSUSE/help-install/af/main::linux.html10
-rw-r--r--themes/openSUSE/help-install/af/main::memtest.html14
-rw-r--r--themes/openSUSE/help-install/af/main::noacpi.html24
-rw-r--r--themes/openSUSE/help-install/af/main::nolapic.html14
-rw-r--r--themes/openSUSE/help-install/af/main::opt.html28
-rw-r--r--themes/openSUSE/help-install/af/main::opt::network.html35
-rw-r--r--themes/openSUSE/help-install/af/main::opt::o_acpi.html23
-rw-r--r--themes/openSUSE/help-install/af/main::opt::o_apm.html21
-rw-r--r--themes/openSUSE/help-install/af/main::opt::o_ide.html12
-rw-r--r--themes/openSUSE/help-install/af/main::opt::o_install.html30
-rw-r--r--themes/openSUSE/help-install/af/main::opt::o_splash.html12
-rw-r--r--themes/openSUSE/help-install/af/main::opt::o_vnc.html18
-rw-r--r--themes/openSUSE/help-install/af/main::rescue.html10
-rw-r--r--themes/openSUSE/help-install/af/main::videomode.html18
-rw-r--r--themes/openSUSE/help-install/af/navi.html1
-rw-r--r--themes/openSUSE/help-install/ar/main.html103
-rw-r--r--themes/openSUSE/help-install/ar/main::bits.html7
-rw-r--r--themes/openSUSE/help-install/ar/main::driverupdate.html14
-rw-r--r--themes/openSUSE/help-install/ar/main::failsafe.html11
-rw-r--r--themes/openSUSE/help-install/ar/main::firmware.html9
-rw-r--r--themes/openSUSE/help-install/ar/main::harddisk.html16
-rw-r--r--themes/openSUSE/help-install/ar/main::help.html25
-rw-r--r--themes/openSUSE/help-install/ar/main::install_src.html12
-rw-r--r--themes/openSUSE/help-install/ar/main::keytable.html7
-rw-r--r--themes/openSUSE/help-install/ar/main::linux.html10
-rw-r--r--themes/openSUSE/help-install/ar/main::memtest.html14
-rw-r--r--themes/openSUSE/help-install/ar/main::noacpi.html24
-rw-r--r--themes/openSUSE/help-install/ar/main::nolapic.html14
-rw-r--r--themes/openSUSE/help-install/ar/main::opt.html28
-rw-r--r--themes/openSUSE/help-install/ar/main::opt::network.html35
-rw-r--r--themes/openSUSE/help-install/ar/main::opt::o_acpi.html23
-rw-r--r--themes/openSUSE/help-install/ar/main::opt::o_apm.html21
-rw-r--r--themes/openSUSE/help-install/ar/main::opt::o_ide.html12
-rw-r--r--themes/openSUSE/help-install/ar/main::opt::o_install.html30
-rw-r--r--themes/openSUSE/help-install/ar/main::opt::o_splash.html12
-rw-r--r--themes/openSUSE/help-install/ar/main::opt::o_vnc.html18
-rw-r--r--themes/openSUSE/help-install/ar/main::rescue.html10
-rw-r--r--themes/openSUSE/help-install/ar/main::videomode.html18
-rw-r--r--themes/openSUSE/help-install/ar/navi.html1
-rw-r--r--themes/openSUSE/help-install/ca/main.html103
-rw-r--r--themes/openSUSE/help-install/ca/main::bits.html7
-rw-r--r--themes/openSUSE/help-install/ca/main::driverupdate.html14
-rw-r--r--themes/openSUSE/help-install/ca/main::failsafe.html11
-rw-r--r--themes/openSUSE/help-install/ca/main::firmware.html9
-rw-r--r--themes/openSUSE/help-install/ca/main::harddisk.html16
-rw-r--r--themes/openSUSE/help-install/ca/main::help.html25
-rw-r--r--themes/openSUSE/help-install/ca/main::install_src.html12
-rw-r--r--themes/openSUSE/help-install/ca/main::keytable.html7
-rw-r--r--themes/openSUSE/help-install/ca/main::linux.html10
-rw-r--r--themes/openSUSE/help-install/ca/main::memtest.html14
-rw-r--r--themes/openSUSE/help-install/ca/main::noacpi.html24
-rw-r--r--themes/openSUSE/help-install/ca/main::nolapic.html14
-rw-r--r--themes/openSUSE/help-install/ca/main::opt.html28
-rw-r--r--themes/openSUSE/help-install/ca/main::opt::network.html35
-rw-r--r--themes/openSUSE/help-install/ca/main::opt::o_acpi.html23
-rw-r--r--themes/openSUSE/help-install/ca/main::opt::o_apm.html21
-rw-r--r--themes/openSUSE/help-install/ca/main::opt::o_ide.html12
-rw-r--r--themes/openSUSE/help-install/ca/main::opt::o_install.html30
-rw-r--r--themes/openSUSE/help-install/ca/main::opt::o_splash.html12
-rw-r--r--themes/openSUSE/help-install/ca/main::opt::o_vnc.html18
-rw-r--r--themes/openSUSE/help-install/ca/main::rescue.html10
-rw-r--r--themes/openSUSE/help-install/ca/main::videomode.html18
-rw-r--r--themes/openSUSE/help-install/ca/navi.html1
-rw-r--r--themes/openSUSE/help-install/cs/main.html35
-rw-r--r--themes/openSUSE/help-install/cs/main::bits.html5
-rw-r--r--themes/openSUSE/help-install/cs/main::driverupdate.html7
-rw-r--r--themes/openSUSE/help-install/cs/main::failsafe.html5
-rw-r--r--themes/openSUSE/help-install/cs/main::firmware.html5
-rw-r--r--themes/openSUSE/help-install/cs/main::harddisk.html7
-rw-r--r--themes/openSUSE/help-install/cs/main::help.html7
-rw-r--r--themes/openSUSE/help-install/cs/main::install_src.html7
-rw-r--r--themes/openSUSE/help-install/cs/main::keytable.html5
-rw-r--r--themes/openSUSE/help-install/cs/main::linux.html5
-rw-r--r--themes/openSUSE/help-install/cs/main::memtest.html7
-rw-r--r--themes/openSUSE/help-install/cs/main::noacpi.html9
-rw-r--r--themes/openSUSE/help-install/cs/main::nolapic.html7
-rw-r--r--themes/openSUSE/help-install/cs/main::opt.html9
-rw-r--r--themes/openSUSE/help-install/cs/main::opt::network.html13
-rw-r--r--themes/openSUSE/help-install/cs/main::opt::o_acpi.html7
-rw-r--r--themes/openSUSE/help-install/cs/main::opt::o_apm.html7
-rw-r--r--themes/openSUSE/help-install/cs/main::opt::o_ide.html5
-rw-r--r--themes/openSUSE/help-install/cs/main::opt::o_install.html9
-rw-r--r--themes/openSUSE/help-install/cs/main::opt::o_splash.html5
-rw-r--r--themes/openSUSE/help-install/cs/main::opt::o_vnc.html9
-rw-r--r--themes/openSUSE/help-install/cs/main::rescue.html5
-rw-r--r--themes/openSUSE/help-install/cs/main::videomode.html9
-rw-r--r--themes/openSUSE/help-install/cs/navi.html1
-rw-r--r--themes/openSUSE/help-install/da/main.html35
-rw-r--r--themes/openSUSE/help-install/da/main::bits.html5
-rw-r--r--themes/openSUSE/help-install/da/main::driverupdate.html7
-rw-r--r--themes/openSUSE/help-install/da/main::failsafe.html5
-rw-r--r--themes/openSUSE/help-install/da/main::firmware.html5
-rw-r--r--themes/openSUSE/help-install/da/main::harddisk.html7
-rw-r--r--themes/openSUSE/help-install/da/main::help.html7
-rw-r--r--themes/openSUSE/help-install/da/main::install_src.html7
-rw-r--r--themes/openSUSE/help-install/da/main::keytable.html5
-rw-r--r--themes/openSUSE/help-install/da/main::linux.html5
-rw-r--r--themes/openSUSE/help-install/da/main::memtest.html7
-rw-r--r--themes/openSUSE/help-install/da/main::noacpi.html9
-rw-r--r--themes/openSUSE/help-install/da/main::nolapic.html7
-rw-r--r--themes/openSUSE/help-install/da/main::opt.html9
-rw-r--r--themes/openSUSE/help-install/da/main::opt::network.html13
-rw-r--r--themes/openSUSE/help-install/da/main::opt::o_acpi.html7
-rw-r--r--themes/openSUSE/help-install/da/main::opt::o_apm.html7
-rw-r--r--themes/openSUSE/help-install/da/main::opt::o_ide.html5
-rw-r--r--themes/openSUSE/help-install/da/main::opt::o_install.html9
-rw-r--r--themes/openSUSE/help-install/da/main::opt::o_splash.html5
-rw-r--r--themes/openSUSE/help-install/da/main::opt::o_vnc.html9
-rw-r--r--themes/openSUSE/help-install/da/main::rescue.html5
-rw-r--r--themes/openSUSE/help-install/da/main::videomode.html9
-rw-r--r--themes/openSUSE/help-install/da/navi.html1
-rw-r--r--themes/openSUSE/help-install/de/main.html35
-rw-r--r--themes/openSUSE/help-install/de/main::bits.html5
-rw-r--r--themes/openSUSE/help-install/de/main::driverupdate.html7
-rw-r--r--themes/openSUSE/help-install/de/main::failsafe.html5
-rw-r--r--themes/openSUSE/help-install/de/main::firmware.html5
-rw-r--r--themes/openSUSE/help-install/de/main::harddisk.html7
-rw-r--r--themes/openSUSE/help-install/de/main::help.html7
-rw-r--r--themes/openSUSE/help-install/de/main::install_src.html7
-rw-r--r--themes/openSUSE/help-install/de/main::keytable.html5
-rw-r--r--themes/openSUSE/help-install/de/main::linux.html5
-rw-r--r--themes/openSUSE/help-install/de/main::memtest.html7
-rw-r--r--themes/openSUSE/help-install/de/main::noacpi.html9
-rw-r--r--themes/openSUSE/help-install/de/main::nolapic.html7
-rw-r--r--themes/openSUSE/help-install/de/main::opt.html9
-rw-r--r--themes/openSUSE/help-install/de/main::opt::network.html13
-rw-r--r--themes/openSUSE/help-install/de/main::opt::o_acpi.html7
-rw-r--r--themes/openSUSE/help-install/de/main::opt::o_apm.html7
-rw-r--r--themes/openSUSE/help-install/de/main::opt::o_ide.html5
-rw-r--r--themes/openSUSE/help-install/de/main::opt::o_install.html9
-rw-r--r--themes/openSUSE/help-install/de/main::opt::o_splash.html5
-rw-r--r--themes/openSUSE/help-install/de/main::opt::o_vnc.html9
-rw-r--r--themes/openSUSE/help-install/de/main::rescue.html5
-rw-r--r--themes/openSUSE/help-install/de/main::videomode.html9
-rw-r--r--themes/openSUSE/help-install/de/navi.html1
-rw-r--r--themes/openSUSE/help-install/el/main.html103
-rw-r--r--themes/openSUSE/help-install/el/main::bits.html7
-rw-r--r--themes/openSUSE/help-install/el/main::driverupdate.html14
-rw-r--r--themes/openSUSE/help-install/el/main::failsafe.html11
-rw-r--r--themes/openSUSE/help-install/el/main::firmware.html9
-rw-r--r--themes/openSUSE/help-install/el/main::harddisk.html16
-rw-r--r--themes/openSUSE/help-install/el/main::help.html25
-rw-r--r--themes/openSUSE/help-install/el/main::install_src.html12
-rw-r--r--themes/openSUSE/help-install/el/main::keytable.html7
-rw-r--r--themes/openSUSE/help-install/el/main::linux.html10
-rw-r--r--themes/openSUSE/help-install/el/main::memtest.html14
-rw-r--r--themes/openSUSE/help-install/el/main::noacpi.html24
-rw-r--r--themes/openSUSE/help-install/el/main::nolapic.html14
-rw-r--r--themes/openSUSE/help-install/el/main::opt.html28
-rw-r--r--themes/openSUSE/help-install/el/main::opt::network.html35
-rw-r--r--themes/openSUSE/help-install/el/main::opt::o_acpi.html23
-rw-r--r--themes/openSUSE/help-install/el/main::opt::o_apm.html21
-rw-r--r--themes/openSUSE/help-install/el/main::opt::o_ide.html12
-rw-r--r--themes/openSUSE/help-install/el/main::opt::o_install.html30
-rw-r--r--themes/openSUSE/help-install/el/main::opt::o_splash.html12
-rw-r--r--themes/openSUSE/help-install/el/main::opt::o_vnc.html18
-rw-r--r--themes/openSUSE/help-install/el/main::rescue.html10
-rw-r--r--themes/openSUSE/help-install/el/main::videomode.html18
-rw-r--r--themes/openSUSE/help-install/el/navi.html1
-rw-r--r--themes/openSUSE/help-install/en/main.html103
-rw-r--r--themes/openSUSE/help-install/en/main::bits.html7
-rw-r--r--themes/openSUSE/help-install/en/main::driverupdate.html14
-rw-r--r--themes/openSUSE/help-install/en/main::failsafe.html11
-rw-r--r--themes/openSUSE/help-install/en/main::firmware.html9
-rw-r--r--themes/openSUSE/help-install/en/main::harddisk.html16
-rw-r--r--themes/openSUSE/help-install/en/main::help.html25
-rw-r--r--themes/openSUSE/help-install/en/main::install_src.html12
-rw-r--r--themes/openSUSE/help-install/en/main::keytable.html7
-rw-r--r--themes/openSUSE/help-install/en/main::linux.html10
-rw-r--r--themes/openSUSE/help-install/en/main::memtest.html14
-rw-r--r--themes/openSUSE/help-install/en/main::noacpi.html24
-rw-r--r--themes/openSUSE/help-install/en/main::nolapic.html14
-rw-r--r--themes/openSUSE/help-install/en/main::opt.html28
-rw-r--r--themes/openSUSE/help-install/en/main::opt::network.html35
-rw-r--r--themes/openSUSE/help-install/en/main::opt::o_acpi.html23
-rw-r--r--themes/openSUSE/help-install/en/main::opt::o_apm.html21
-rw-r--r--themes/openSUSE/help-install/en/main::opt::o_ide.html12
-rw-r--r--themes/openSUSE/help-install/en/main::opt::o_install.html30
-rw-r--r--themes/openSUSE/help-install/en/main::opt::o_splash.html12
-rw-r--r--themes/openSUSE/help-install/en/main::opt::o_vnc.html18
-rw-r--r--themes/openSUSE/help-install/en/main::rescue.html10
-rw-r--r--themes/openSUSE/help-install/en/main::videomode.html18
-rw-r--r--themes/openSUSE/help-install/en/navi.html3
-rw-r--r--themes/openSUSE/help-install/es/main.html35
-rw-r--r--themes/openSUSE/help-install/es/main::bits.html5
-rw-r--r--themes/openSUSE/help-install/es/main::driverupdate.html7
-rw-r--r--themes/openSUSE/help-install/es/main::failsafe.html5
-rw-r--r--themes/openSUSE/help-install/es/main::firmware.html5
-rw-r--r--themes/openSUSE/help-install/es/main::harddisk.html7
-rw-r--r--themes/openSUSE/help-install/es/main::help.html7
-rw-r--r--themes/openSUSE/help-install/es/main::install_src.html7
-rw-r--r--themes/openSUSE/help-install/es/main::keytable.html5
-rw-r--r--themes/openSUSE/help-install/es/main::linux.html5
-rw-r--r--themes/openSUSE/help-install/es/main::memtest.html7
-rw-r--r--themes/openSUSE/help-install/es/main::noacpi.html9
-rw-r--r--themes/openSUSE/help-install/es/main::nolapic.html7
-rw-r--r--themes/openSUSE/help-install/es/main::opt.html9
-rw-r--r--themes/openSUSE/help-install/es/main::opt::network.html13
-rw-r--r--themes/openSUSE/help-install/es/main::opt::o_acpi.html7
-rw-r--r--themes/openSUSE/help-install/es/main::opt::o_apm.html7
-rw-r--r--themes/openSUSE/help-install/es/main::opt::o_ide.html5
-rw-r--r--themes/openSUSE/help-install/es/main::opt::o_install.html9
-rw-r--r--themes/openSUSE/help-install/es/main::opt::o_splash.html5
-rw-r--r--themes/openSUSE/help-install/es/main::opt::o_vnc.html9
-rw-r--r--themes/openSUSE/help-install/es/main::rescue.html5
-rw-r--r--themes/openSUSE/help-install/es/main::videomode.html9
-rw-r--r--themes/openSUSE/help-install/es/navi.html1
-rw-r--r--themes/openSUSE/help-install/et/main.html103
-rw-r--r--themes/openSUSE/help-install/et/main::bits.html7
-rw-r--r--themes/openSUSE/help-install/et/main::driverupdate.html14
-rw-r--r--themes/openSUSE/help-install/et/main::failsafe.html11
-rw-r--r--themes/openSUSE/help-install/et/main::firmware.html9
-rw-r--r--themes/openSUSE/help-install/et/main::harddisk.html16
-rw-r--r--themes/openSUSE/help-install/et/main::help.html25
-rw-r--r--themes/openSUSE/help-install/et/main::install_src.html12
-rw-r--r--themes/openSUSE/help-install/et/main::keytable.html7
-rw-r--r--themes/openSUSE/help-install/et/main::linux.html10
-rw-r--r--themes/openSUSE/help-install/et/main::memtest.html14
-rw-r--r--themes/openSUSE/help-install/et/main::noacpi.html24
-rw-r--r--themes/openSUSE/help-install/et/main::nolapic.html14
-rw-r--r--themes/openSUSE/help-install/et/main::opt.html28
-rw-r--r--themes/openSUSE/help-install/et/main::opt::network.html35
-rw-r--r--themes/openSUSE/help-install/et/main::opt::o_acpi.html23
-rw-r--r--themes/openSUSE/help-install/et/main::opt::o_apm.html21
-rw-r--r--themes/openSUSE/help-install/et/main::opt::o_ide.html12
-rw-r--r--themes/openSUSE/help-install/et/main::opt::o_install.html30
-rw-r--r--themes/openSUSE/help-install/et/main::opt::o_splash.html12
-rw-r--r--themes/openSUSE/help-install/et/main::opt::o_vnc.html18
-rw-r--r--themes/openSUSE/help-install/et/main::rescue.html10
-rw-r--r--themes/openSUSE/help-install/et/main::videomode.html18
-rw-r--r--themes/openSUSE/help-install/et/navi.html1
-rw-r--r--themes/openSUSE/help-install/fi/main.html35
-rw-r--r--themes/openSUSE/help-install/fi/main::bits.html5
-rw-r--r--themes/openSUSE/help-install/fi/main::driverupdate.html7
-rw-r--r--themes/openSUSE/help-install/fi/main::failsafe.html5
-rw-r--r--themes/openSUSE/help-install/fi/main::firmware.html5
-rw-r--r--themes/openSUSE/help-install/fi/main::harddisk.html7
-rw-r--r--themes/openSUSE/help-install/fi/main::help.html7
-rw-r--r--themes/openSUSE/help-install/fi/main::install_src.html7
-rw-r--r--themes/openSUSE/help-install/fi/main::keytable.html5
-rw-r--r--themes/openSUSE/help-install/fi/main::linux.html5
-rw-r--r--themes/openSUSE/help-install/fi/main::memtest.html7
-rw-r--r--themes/openSUSE/help-install/fi/main::noacpi.html9
-rw-r--r--themes/openSUSE/help-install/fi/main::nolapic.html7
-rw-r--r--themes/openSUSE/help-install/fi/main::opt.html9
-rw-r--r--themes/openSUSE/help-install/fi/main::opt::network.html13
-rw-r--r--themes/openSUSE/help-install/fi/main::opt::o_acpi.html7
-rw-r--r--themes/openSUSE/help-install/fi/main::opt::o_apm.html7
-rw-r--r--themes/openSUSE/help-install/fi/main::opt::o_ide.html5
-rw-r--r--themes/openSUSE/help-install/fi/main::opt::o_install.html9
-rw-r--r--themes/openSUSE/help-install/fi/main::opt::o_splash.html5
-rw-r--r--themes/openSUSE/help-install/fi/main::opt::o_vnc.html9
-rw-r--r--themes/openSUSE/help-install/fi/main::rescue.html5
-rw-r--r--themes/openSUSE/help-install/fi/main::videomode.html9
-rw-r--r--themes/openSUSE/help-install/fi/navi.html1
-rw-r--r--themes/openSUSE/help-install/fr/main.html35
-rw-r--r--themes/openSUSE/help-install/fr/main::bits.html5
-rw-r--r--themes/openSUSE/help-install/fr/main::driverupdate.html7
-rw-r--r--themes/openSUSE/help-install/fr/main::failsafe.html5
-rw-r--r--themes/openSUSE/help-install/fr/main::firmware.html5
-rw-r--r--themes/openSUSE/help-install/fr/main::harddisk.html7
-rw-r--r--themes/openSUSE/help-install/fr/main::help.html7
-rw-r--r--themes/openSUSE/help-install/fr/main::install_src.html7
-rw-r--r--themes/openSUSE/help-install/fr/main::keytable.html5
-rw-r--r--themes/openSUSE/help-install/fr/main::linux.html5
-rw-r--r--themes/openSUSE/help-install/fr/main::memtest.html7
-rw-r--r--themes/openSUSE/help-install/fr/main::noacpi.html9
-rw-r--r--themes/openSUSE/help-install/fr/main::nolapic.html7
-rw-r--r--themes/openSUSE/help-install/fr/main::opt.html9
-rw-r--r--themes/openSUSE/help-install/fr/main::opt::network.html13
-rw-r--r--themes/openSUSE/help-install/fr/main::opt::o_acpi.html7
-rw-r--r--themes/openSUSE/help-install/fr/main::opt::o_apm.html7
-rw-r--r--themes/openSUSE/help-install/fr/main::opt::o_ide.html5
-rw-r--r--themes/openSUSE/help-install/fr/main::opt::o_install.html9
-rw-r--r--themes/openSUSE/help-install/fr/main::opt::o_splash.html5
-rw-r--r--themes/openSUSE/help-install/fr/main::opt::o_vnc.html9
-rw-r--r--themes/openSUSE/help-install/fr/main::rescue.html5
-rw-r--r--themes/openSUSE/help-install/fr/main::videomode.html9
-rw-r--r--themes/openSUSE/help-install/fr/navi.html1
-rw-r--r--themes/openSUSE/help-install/gl/main.html35
-rw-r--r--themes/openSUSE/help-install/gl/main::bits.html5
-rw-r--r--themes/openSUSE/help-install/gl/main::driverupdate.html7
-rw-r--r--themes/openSUSE/help-install/gl/main::failsafe.html5
-rw-r--r--themes/openSUSE/help-install/gl/main::firmware.html5
-rw-r--r--themes/openSUSE/help-install/gl/main::harddisk.html7
-rw-r--r--themes/openSUSE/help-install/gl/main::help.html7
-rw-r--r--themes/openSUSE/help-install/gl/main::install_src.html7
-rw-r--r--themes/openSUSE/help-install/gl/main::keytable.html5
-rw-r--r--themes/openSUSE/help-install/gl/main::linux.html5
-rw-r--r--themes/openSUSE/help-install/gl/main::memtest.html7
-rw-r--r--themes/openSUSE/help-install/gl/main::noacpi.html9
-rw-r--r--themes/openSUSE/help-install/gl/main::nolapic.html7
-rw-r--r--themes/openSUSE/help-install/gl/main::opt.html9
-rw-r--r--themes/openSUSE/help-install/gl/main::opt::network.html13
-rw-r--r--themes/openSUSE/help-install/gl/main::opt::o_acpi.html7
-rw-r--r--themes/openSUSE/help-install/gl/main::opt::o_apm.html7
-rw-r--r--themes/openSUSE/help-install/gl/main::opt::o_ide.html5
-rw-r--r--themes/openSUSE/help-install/gl/main::opt::o_install.html9
-rw-r--r--themes/openSUSE/help-install/gl/main::opt::o_splash.html5
-rw-r--r--themes/openSUSE/help-install/gl/main::opt::o_vnc.html9
-rw-r--r--themes/openSUSE/help-install/gl/main::rescue.html5
-rw-r--r--themes/openSUSE/help-install/gl/main::videomode.html9
-rw-r--r--themes/openSUSE/help-install/gl/navi.html1
-rw-r--r--themes/openSUSE/help-install/gu/main.html103
-rw-r--r--themes/openSUSE/help-install/gu/main::bits.html7
-rw-r--r--themes/openSUSE/help-install/gu/main::driverupdate.html14
-rw-r--r--themes/openSUSE/help-install/gu/main::failsafe.html11
-rw-r--r--themes/openSUSE/help-install/gu/main::firmware.html9
-rw-r--r--themes/openSUSE/help-install/gu/main::harddisk.html16
-rw-r--r--themes/openSUSE/help-install/gu/main::help.html25
-rw-r--r--themes/openSUSE/help-install/gu/main::install_src.html12
-rw-r--r--themes/openSUSE/help-install/gu/main::keytable.html7
-rw-r--r--themes/openSUSE/help-install/gu/main::linux.html10
-rw-r--r--themes/openSUSE/help-install/gu/main::memtest.html14
-rw-r--r--themes/openSUSE/help-install/gu/main::noacpi.html24
-rw-r--r--themes/openSUSE/help-install/gu/main::nolapic.html14
-rw-r--r--themes/openSUSE/help-install/gu/main::opt.html28
-rw-r--r--themes/openSUSE/help-install/gu/main::opt::network.html35
-rw-r--r--themes/openSUSE/help-install/gu/main::opt::o_acpi.html23
-rw-r--r--themes/openSUSE/help-install/gu/main::opt::o_apm.html21
-rw-r--r--themes/openSUSE/help-install/gu/main::opt::o_ide.html12
-rw-r--r--themes/openSUSE/help-install/gu/main::opt::o_install.html30
-rw-r--r--themes/openSUSE/help-install/gu/main::opt::o_splash.html12
-rw-r--r--themes/openSUSE/help-install/gu/main::opt::o_vnc.html18
-rw-r--r--themes/openSUSE/help-install/gu/main::rescue.html10
-rw-r--r--themes/openSUSE/help-install/gu/main::videomode.html18
-rw-r--r--themes/openSUSE/help-install/gu/navi.html1
-rw-r--r--themes/openSUSE/help-install/hr/main.html103
-rw-r--r--themes/openSUSE/help-install/hr/main::bits.html7
-rw-r--r--themes/openSUSE/help-install/hr/main::driverupdate.html14
-rw-r--r--themes/openSUSE/help-install/hr/main::failsafe.html11
-rw-r--r--themes/openSUSE/help-install/hr/main::firmware.html9
-rw-r--r--themes/openSUSE/help-install/hr/main::harddisk.html16
-rw-r--r--themes/openSUSE/help-install/hr/main::help.html25
-rw-r--r--themes/openSUSE/help-install/hr/main::install_src.html12
-rw-r--r--themes/openSUSE/help-install/hr/main::keytable.html7
-rw-r--r--themes/openSUSE/help-install/hr/main::linux.html10
-rw-r--r--themes/openSUSE/help-install/hr/main::memtest.html14
-rw-r--r--themes/openSUSE/help-install/hr/main::noacpi.html24
-rw-r--r--themes/openSUSE/help-install/hr/main::nolapic.html14
-rw-r--r--themes/openSUSE/help-install/hr/main::opt.html28
-rw-r--r--themes/openSUSE/help-install/hr/main::opt::network.html35
-rw-r--r--themes/openSUSE/help-install/hr/main::opt::o_acpi.html23
-rw-r--r--themes/openSUSE/help-install/hr/main::opt::o_apm.html21
-rw-r--r--themes/openSUSE/help-install/hr/main::opt::o_ide.html12
-rw-r--r--themes/openSUSE/help-install/hr/main::opt::o_install.html30
-rw-r--r--themes/openSUSE/help-install/hr/main::opt::o_splash.html12
-rw-r--r--themes/openSUSE/help-install/hr/main::opt::o_vnc.html18
-rw-r--r--themes/openSUSE/help-install/hr/main::rescue.html10
-rw-r--r--themes/openSUSE/help-install/hr/main::videomode.html18
-rw-r--r--themes/openSUSE/help-install/hr/navi.html1
-rw-r--r--themes/openSUSE/help-install/hu/main.html35
-rw-r--r--themes/openSUSE/help-install/hu/main::bits.html5
-rw-r--r--themes/openSUSE/help-install/hu/main::driverupdate.html7
-rw-r--r--themes/openSUSE/help-install/hu/main::failsafe.html5
-rw-r--r--themes/openSUSE/help-install/hu/main::firmware.html5
-rw-r--r--themes/openSUSE/help-install/hu/main::harddisk.html7
-rw-r--r--themes/openSUSE/help-install/hu/main::help.html7
-rw-r--r--themes/openSUSE/help-install/hu/main::install_src.html7
-rw-r--r--themes/openSUSE/help-install/hu/main::keytable.html5
-rw-r--r--themes/openSUSE/help-install/hu/main::linux.html5
-rw-r--r--themes/openSUSE/help-install/hu/main::memtest.html7
-rw-r--r--themes/openSUSE/help-install/hu/main::noacpi.html9
-rw-r--r--themes/openSUSE/help-install/hu/main::nolapic.html7
-rw-r--r--themes/openSUSE/help-install/hu/main::opt.html9
-rw-r--r--themes/openSUSE/help-install/hu/main::opt::network.html13
-rw-r--r--themes/openSUSE/help-install/hu/main::opt::o_acpi.html7
-rw-r--r--themes/openSUSE/help-install/hu/main::opt::o_apm.html7
-rw-r--r--themes/openSUSE/help-install/hu/main::opt::o_ide.html5
-rw-r--r--themes/openSUSE/help-install/hu/main::opt::o_install.html9
-rw-r--r--themes/openSUSE/help-install/hu/main::opt::o_splash.html5
-rw-r--r--themes/openSUSE/help-install/hu/main::opt::o_vnc.html9
-rw-r--r--themes/openSUSE/help-install/hu/main::rescue.html5
-rw-r--r--themes/openSUSE/help-install/hu/main::videomode.html9
-rw-r--r--themes/openSUSE/help-install/hu/navi.html1
-rw-r--r--themes/openSUSE/help-install/it/main.html35
-rw-r--r--themes/openSUSE/help-install/it/main::bits.html5
-rw-r--r--themes/openSUSE/help-install/it/main::driverupdate.html7
-rw-r--r--themes/openSUSE/help-install/it/main::failsafe.html5
-rw-r--r--themes/openSUSE/help-install/it/main::firmware.html5
-rw-r--r--themes/openSUSE/help-install/it/main::harddisk.html7
-rw-r--r--themes/openSUSE/help-install/it/main::help.html7
-rw-r--r--themes/openSUSE/help-install/it/main::install_src.html7
-rw-r--r--themes/openSUSE/help-install/it/main::keytable.html5
-rw-r--r--themes/openSUSE/help-install/it/main::linux.html5
-rw-r--r--themes/openSUSE/help-install/it/main::memtest.html7
-rw-r--r--themes/openSUSE/help-install/it/main::noacpi.html9
-rw-r--r--themes/openSUSE/help-install/it/main::nolapic.html7
-rw-r--r--themes/openSUSE/help-install/it/main::opt.html9
-rw-r--r--themes/openSUSE/help-install/it/main::opt::network.html13
-rw-r--r--themes/openSUSE/help-install/it/main::opt::o_acpi.html7
-rw-r--r--themes/openSUSE/help-install/it/main::opt::o_apm.html7
-rw-r--r--themes/openSUSE/help-install/it/main::opt::o_ide.html5
-rw-r--r--themes/openSUSE/help-install/it/main::opt::o_install.html9
-rw-r--r--themes/openSUSE/help-install/it/main::opt::o_splash.html5
-rw-r--r--themes/openSUSE/help-install/it/main::opt::o_vnc.html9
-rw-r--r--themes/openSUSE/help-install/it/main::rescue.html5
-rw-r--r--themes/openSUSE/help-install/it/main::videomode.html9
-rw-r--r--themes/openSUSE/help-install/it/navi.html1
-rw-r--r--themes/openSUSE/help-install/ja/main.html35
-rw-r--r--themes/openSUSE/help-install/ja/main::bits.html5
-rw-r--r--themes/openSUSE/help-install/ja/main::driverupdate.html7
-rw-r--r--themes/openSUSE/help-install/ja/main::failsafe.html5
-rw-r--r--themes/openSUSE/help-install/ja/main::firmware.html5
-rw-r--r--themes/openSUSE/help-install/ja/main::harddisk.html7
-rw-r--r--themes/openSUSE/help-install/ja/main::help.html7
-rw-r--r--themes/openSUSE/help-install/ja/main::install_src.html7
-rw-r--r--themes/openSUSE/help-install/ja/main::keytable.html5
-rw-r--r--themes/openSUSE/help-install/ja/main::linux.html5
-rw-r--r--themes/openSUSE/help-install/ja/main::memtest.html7
-rw-r--r--themes/openSUSE/help-install/ja/main::noacpi.html9
-rw-r--r--themes/openSUSE/help-install/ja/main::nolapic.html7
-rw-r--r--themes/openSUSE/help-install/ja/main::opt.html9
-rw-r--r--themes/openSUSE/help-install/ja/main::opt::network.html13
-rw-r--r--themes/openSUSE/help-install/ja/main::opt::o_acpi.html7
-rw-r--r--themes/openSUSE/help-install/ja/main::opt::o_apm.html7
-rw-r--r--themes/openSUSE/help-install/ja/main::opt::o_ide.html5
-rw-r--r--themes/openSUSE/help-install/ja/main::opt::o_install.html9
-rw-r--r--themes/openSUSE/help-install/ja/main::opt::o_splash.html5
-rw-r--r--themes/openSUSE/help-install/ja/main::opt::o_vnc.html9
-rw-r--r--themes/openSUSE/help-install/ja/main::rescue.html5
-rw-r--r--themes/openSUSE/help-install/ja/main::videomode.html9
-rw-r--r--themes/openSUSE/help-install/ja/navi.html1
-rw-r--r--themes/openSUSE/help-install/ko/main.html35
-rw-r--r--themes/openSUSE/help-install/ko/main::bits.html5
-rw-r--r--themes/openSUSE/help-install/ko/main::driverupdate.html7
-rw-r--r--themes/openSUSE/help-install/ko/main::failsafe.html5
-rw-r--r--themes/openSUSE/help-install/ko/main::firmware.html5
-rw-r--r--themes/openSUSE/help-install/ko/main::harddisk.html7
-rw-r--r--themes/openSUSE/help-install/ko/main::help.html7
-rw-r--r--themes/openSUSE/help-install/ko/main::install_src.html7
-rw-r--r--themes/openSUSE/help-install/ko/main::keytable.html5
-rw-r--r--themes/openSUSE/help-install/ko/main::linux.html5
-rw-r--r--themes/openSUSE/help-install/ko/main::memtest.html7
-rw-r--r--themes/openSUSE/help-install/ko/main::noacpi.html9
-rw-r--r--themes/openSUSE/help-install/ko/main::nolapic.html7
-rw-r--r--themes/openSUSE/help-install/ko/main::opt.html9
-rw-r--r--themes/openSUSE/help-install/ko/main::opt::network.html13
-rw-r--r--themes/openSUSE/help-install/ko/main::opt::o_acpi.html7
-rw-r--r--themes/openSUSE/help-install/ko/main::opt::o_apm.html7
-rw-r--r--themes/openSUSE/help-install/ko/main::opt::o_ide.html5
-rw-r--r--themes/openSUSE/help-install/ko/main::opt::o_install.html9
-rw-r--r--themes/openSUSE/help-install/ko/main::opt::o_splash.html5
-rw-r--r--themes/openSUSE/help-install/ko/main::opt::o_vnc.html9
-rw-r--r--themes/openSUSE/help-install/ko/main::rescue.html5
-rw-r--r--themes/openSUSE/help-install/ko/main::videomode.html9
-rw-r--r--themes/openSUSE/help-install/ko/navi.html1
-rw-r--r--themes/openSUSE/help-install/ky/main.html35
-rw-r--r--themes/openSUSE/help-install/ky/main::bits.html5
-rw-r--r--themes/openSUSE/help-install/ky/main::driverupdate.html7
-rw-r--r--themes/openSUSE/help-install/ky/main::failsafe.html5
-rw-r--r--themes/openSUSE/help-install/ky/main::firmware.html5
-rw-r--r--themes/openSUSE/help-install/ky/main::harddisk.html7
-rw-r--r--themes/openSUSE/help-install/ky/main::help.html7
-rw-r--r--themes/openSUSE/help-install/ky/main::install_src.html7
-rw-r--r--themes/openSUSE/help-install/ky/main::keytable.html5
-rw-r--r--themes/openSUSE/help-install/ky/main::linux.html5
-rw-r--r--themes/openSUSE/help-install/ky/main::memtest.html7
-rw-r--r--themes/openSUSE/help-install/ky/main::noacpi.html9
-rw-r--r--themes/openSUSE/help-install/ky/main::nolapic.html7
-rw-r--r--themes/openSUSE/help-install/ky/main::opt.html9
-rw-r--r--themes/openSUSE/help-install/ky/main::opt::network.html13
-rw-r--r--themes/openSUSE/help-install/ky/main::opt::o_acpi.html7
-rw-r--r--themes/openSUSE/help-install/ky/main::opt::o_apm.html7
-rw-r--r--themes/openSUSE/help-install/ky/main::opt::o_ide.html5
-rw-r--r--themes/openSUSE/help-install/ky/main::opt::o_install.html9
-rw-r--r--themes/openSUSE/help-install/ky/main::opt::o_splash.html5
-rw-r--r--themes/openSUSE/help-install/ky/main::opt::o_vnc.html9
-rw-r--r--themes/openSUSE/help-install/ky/main::rescue.html5
-rw-r--r--themes/openSUSE/help-install/ky/main::videomode.html9
-rw-r--r--themes/openSUSE/help-install/ky/navi.html1
-rw-r--r--themes/openSUSE/help-install/lt/main.html35
-rw-r--r--themes/openSUSE/help-install/lt/main::bits.html5
-rw-r--r--themes/openSUSE/help-install/lt/main::driverupdate.html7
-rw-r--r--themes/openSUSE/help-install/lt/main::failsafe.html5
-rw-r--r--themes/openSUSE/help-install/lt/main::firmware.html5
-rw-r--r--themes/openSUSE/help-install/lt/main::harddisk.html7
-rw-r--r--themes/openSUSE/help-install/lt/main::help.html7
-rw-r--r--themes/openSUSE/help-install/lt/main::install_src.html7
-rw-r--r--themes/openSUSE/help-install/lt/main::keytable.html5
-rw-r--r--themes/openSUSE/help-install/lt/main::linux.html5
-rw-r--r--themes/openSUSE/help-install/lt/main::memtest.html7
-rw-r--r--themes/openSUSE/help-install/lt/main::noacpi.html9
-rw-r--r--themes/openSUSE/help-install/lt/main::nolapic.html7
-rw-r--r--themes/openSUSE/help-install/lt/main::opt.html9
-rw-r--r--themes/openSUSE/help-install/lt/main::opt::network.html13
-rw-r--r--themes/openSUSE/help-install/lt/main::opt::o_acpi.html7
-rw-r--r--themes/openSUSE/help-install/lt/main::opt::o_apm.html7
-rw-r--r--themes/openSUSE/help-install/lt/main::opt::o_ide.html5
-rw-r--r--themes/openSUSE/help-install/lt/main::opt::o_install.html9
-rw-r--r--themes/openSUSE/help-install/lt/main::opt::o_splash.html5
-rw-r--r--themes/openSUSE/help-install/lt/main::opt::o_vnc.html9
-rw-r--r--themes/openSUSE/help-install/lt/main::rescue.html5
-rw-r--r--themes/openSUSE/help-install/lt/main::videomode.html9
-rw-r--r--themes/openSUSE/help-install/lt/navi.html1
-rw-r--r--themes/openSUSE/help-install/mr/main.html103
-rw-r--r--themes/openSUSE/help-install/mr/main::bits.html7
-rw-r--r--themes/openSUSE/help-install/mr/main::driverupdate.html14
-rw-r--r--themes/openSUSE/help-install/mr/main::failsafe.html11
-rw-r--r--themes/openSUSE/help-install/mr/main::firmware.html9
-rw-r--r--themes/openSUSE/help-install/mr/main::harddisk.html16
-rw-r--r--themes/openSUSE/help-install/mr/main::help.html25
-rw-r--r--themes/openSUSE/help-install/mr/main::install_src.html12
-rw-r--r--themes/openSUSE/help-install/mr/main::keytable.html7
-rw-r--r--themes/openSUSE/help-install/mr/main::linux.html10
-rw-r--r--themes/openSUSE/help-install/mr/main::memtest.html14
-rw-r--r--themes/openSUSE/help-install/mr/main::noacpi.html24
-rw-r--r--themes/openSUSE/help-install/mr/main::nolapic.html14
-rw-r--r--themes/openSUSE/help-install/mr/main::opt.html28
-rw-r--r--themes/openSUSE/help-install/mr/main::opt::network.html35
-rw-r--r--themes/openSUSE/help-install/mr/main::opt::o_acpi.html23
-rw-r--r--themes/openSUSE/help-install/mr/main::opt::o_apm.html21
-rw-r--r--themes/openSUSE/help-install/mr/main::opt::o_ide.html12
-rw-r--r--themes/openSUSE/help-install/mr/main::opt::o_install.html30
-rw-r--r--themes/openSUSE/help-install/mr/main::opt::o_splash.html12
-rw-r--r--themes/openSUSE/help-install/mr/main::opt::o_vnc.html18
-rw-r--r--themes/openSUSE/help-install/mr/main::rescue.html10
-rw-r--r--themes/openSUSE/help-install/mr/main::videomode.html18
-rw-r--r--themes/openSUSE/help-install/mr/navi.html1
-rw-r--r--themes/openSUSE/help-install/nb/main.html35
-rw-r--r--themes/openSUSE/help-install/nb/main::bits.html5
-rw-r--r--themes/openSUSE/help-install/nb/main::driverupdate.html7
-rw-r--r--themes/openSUSE/help-install/nb/main::failsafe.html5
-rw-r--r--themes/openSUSE/help-install/nb/main::firmware.html5
-rw-r--r--themes/openSUSE/help-install/nb/main::harddisk.html7
-rw-r--r--themes/openSUSE/help-install/nb/main::help.html7
-rw-r--r--themes/openSUSE/help-install/nb/main::install_src.html7
-rw-r--r--themes/openSUSE/help-install/nb/main::keytable.html5
-rw-r--r--themes/openSUSE/help-install/nb/main::linux.html5
-rw-r--r--themes/openSUSE/help-install/nb/main::memtest.html7
-rw-r--r--themes/openSUSE/help-install/nb/main::noacpi.html9
-rw-r--r--themes/openSUSE/help-install/nb/main::nolapic.html7
-rw-r--r--themes/openSUSE/help-install/nb/main::opt.html9
-rw-r--r--themes/openSUSE/help-install/nb/main::opt::network.html13
-rw-r--r--themes/openSUSE/help-install/nb/main::opt::o_acpi.html7
-rw-r--r--themes/openSUSE/help-install/nb/main::opt::o_apm.html7
-rw-r--r--themes/openSUSE/help-install/nb/main::opt::o_ide.html5
-rw-r--r--themes/openSUSE/help-install/nb/main::opt::o_install.html9
-rw-r--r--themes/openSUSE/help-install/nb/main::opt::o_splash.html5
-rw-r--r--themes/openSUSE/help-install/nb/main::opt::o_vnc.html9
-rw-r--r--themes/openSUSE/help-install/nb/main::rescue.html5
-rw-r--r--themes/openSUSE/help-install/nb/main::videomode.html9
-rw-r--r--themes/openSUSE/help-install/nb/navi.html1
-rw-r--r--themes/openSUSE/help-install/nl/main.html35
-rw-r--r--themes/openSUSE/help-install/nl/main::bits.html5
-rw-r--r--themes/openSUSE/help-install/nl/main::driverupdate.html7
-rw-r--r--themes/openSUSE/help-install/nl/main::failsafe.html5
-rw-r--r--themes/openSUSE/help-install/nl/main::firmware.html5
-rw-r--r--themes/openSUSE/help-install/nl/main::harddisk.html7
-rw-r--r--themes/openSUSE/help-install/nl/main::help.html7
-rw-r--r--themes/openSUSE/help-install/nl/main::install_src.html7
-rw-r--r--themes/openSUSE/help-install/nl/main::keytable.html5
-rw-r--r--themes/openSUSE/help-install/nl/main::linux.html5
-rw-r--r--themes/openSUSE/help-install/nl/main::memtest.html7
-rw-r--r--themes/openSUSE/help-install/nl/main::noacpi.html9
-rw-r--r--themes/openSUSE/help-install/nl/main::nolapic.html7
-rw-r--r--themes/openSUSE/help-install/nl/main::opt.html9
-rw-r--r--themes/openSUSE/help-install/nl/main::opt::network.html13
-rw-r--r--themes/openSUSE/help-install/nl/main::opt::o_acpi.html7
-rw-r--r--themes/openSUSE/help-install/nl/main::opt::o_apm.html7
-rw-r--r--themes/openSUSE/help-install/nl/main::opt::o_ide.html5
-rw-r--r--themes/openSUSE/help-install/nl/main::opt::o_install.html9
-rw-r--r--themes/openSUSE/help-install/nl/main::opt::o_splash.html5
-rw-r--r--themes/openSUSE/help-install/nl/main::opt::o_vnc.html9
-rw-r--r--themes/openSUSE/help-install/nl/main::rescue.html5
-rw-r--r--themes/openSUSE/help-install/nl/main::videomode.html9
-rw-r--r--themes/openSUSE/help-install/nl/navi.html1
-rw-r--r--themes/openSUSE/help-install/pa/main.html60
-rw-r--r--themes/openSUSE/help-install/pa/main::bits.html5
-rw-r--r--themes/openSUSE/help-install/pa/main::driverupdate.html14
-rw-r--r--themes/openSUSE/help-install/pa/main::failsafe.html11
-rw-r--r--themes/openSUSE/help-install/pa/main::firmware.html9
-rw-r--r--themes/openSUSE/help-install/pa/main::harddisk.html13
-rw-r--r--themes/openSUSE/help-install/pa/main::help.html12
-rw-r--r--themes/openSUSE/help-install/pa/main::install_src.html7
-rw-r--r--themes/openSUSE/help-install/pa/main::keytable.html5
-rw-r--r--themes/openSUSE/help-install/pa/main::linux.html10
-rw-r--r--themes/openSUSE/help-install/pa/main::memtest.html11
-rw-r--r--themes/openSUSE/help-install/pa/main::noacpi.html24
-rw-r--r--themes/openSUSE/help-install/pa/main::nolapic.html11
-rw-r--r--themes/openSUSE/help-install/pa/main::opt.html9
-rw-r--r--themes/openSUSE/help-install/pa/main::opt::network.html22
-rw-r--r--themes/openSUSE/help-install/pa/main::opt::o_acpi.html20
-rw-r--r--themes/openSUSE/help-install/pa/main::opt::o_apm.html18
-rw-r--r--themes/openSUSE/help-install/pa/main::opt::o_ide.html12
-rw-r--r--themes/openSUSE/help-install/pa/main::opt::o_install.html30
-rw-r--r--themes/openSUSE/help-install/pa/main::opt::o_splash.html5
-rw-r--r--themes/openSUSE/help-install/pa/main::opt::o_vnc.html15
-rw-r--r--themes/openSUSE/help-install/pa/main::rescue.html10
-rw-r--r--themes/openSUSE/help-install/pa/main::videomode.html9
-rw-r--r--themes/openSUSE/help-install/pa/navi.html1
-rw-r--r--themes/openSUSE/help-install/pl/main.html103
-rw-r--r--themes/openSUSE/help-install/pl/main::bits.html7
-rw-r--r--themes/openSUSE/help-install/pl/main::driverupdate.html14
-rw-r--r--themes/openSUSE/help-install/pl/main::failsafe.html11
-rw-r--r--themes/openSUSE/help-install/pl/main::firmware.html9
-rw-r--r--themes/openSUSE/help-install/pl/main::harddisk.html16
-rw-r--r--themes/openSUSE/help-install/pl/main::help.html25
-rw-r--r--themes/openSUSE/help-install/pl/main::install_src.html12
-rw-r--r--themes/openSUSE/help-install/pl/main::keytable.html7
-rw-r--r--themes/openSUSE/help-install/pl/main::linux.html10
-rw-r--r--themes/openSUSE/help-install/pl/main::memtest.html14
-rw-r--r--themes/openSUSE/help-install/pl/main::noacpi.html24
-rw-r--r--themes/openSUSE/help-install/pl/main::nolapic.html14
-rw-r--r--themes/openSUSE/help-install/pl/main::opt.html28
-rw-r--r--themes/openSUSE/help-install/pl/main::opt::network.html35
-rw-r--r--themes/openSUSE/help-install/pl/main::opt::o_acpi.html23
-rw-r--r--themes/openSUSE/help-install/pl/main::opt::o_apm.html21
-rw-r--r--themes/openSUSE/help-install/pl/main::opt::o_ide.html12
-rw-r--r--themes/openSUSE/help-install/pl/main::opt::o_install.html30
-rw-r--r--themes/openSUSE/help-install/pl/main::opt::o_splash.html12
-rw-r--r--themes/openSUSE/help-install/pl/main::opt::o_vnc.html18
-rw-r--r--themes/openSUSE/help-install/pl/main::rescue.html10
-rw-r--r--themes/openSUSE/help-install/pl/main::videomode.html18
-rw-r--r--themes/openSUSE/help-install/pl/navi.html1
-rw-r--r--themes/openSUSE/help-install/pt/main.html101
-rw-r--r--themes/openSUSE/help-install/pt/main::bits.html7
-rw-r--r--themes/openSUSE/help-install/pt/main::driverupdate.html14
-rw-r--r--themes/openSUSE/help-install/pt/main::failsafe.html11
-rw-r--r--themes/openSUSE/help-install/pt/main::firmware.html9
-rw-r--r--themes/openSUSE/help-install/pt/main::harddisk.html16
-rw-r--r--themes/openSUSE/help-install/pt/main::help.html25
-rw-r--r--themes/openSUSE/help-install/pt/main::install_src.html12
-rw-r--r--themes/openSUSE/help-install/pt/main::keytable.html7
-rw-r--r--themes/openSUSE/help-install/pt/main::linux.html10
-rw-r--r--themes/openSUSE/help-install/pt/main::memtest.html14
-rw-r--r--themes/openSUSE/help-install/pt/main::noacpi.html24
-rw-r--r--themes/openSUSE/help-install/pt/main::nolapic.html14
-rw-r--r--themes/openSUSE/help-install/pt/main::opt.html28
-rw-r--r--themes/openSUSE/help-install/pt/main::opt::network.html35
-rw-r--r--themes/openSUSE/help-install/pt/main::opt::o_acpi.html23
-rw-r--r--themes/openSUSE/help-install/pt/main::opt::o_apm.html21
-rw-r--r--themes/openSUSE/help-install/pt/main::opt::o_ide.html12
-rw-r--r--themes/openSUSE/help-install/pt/main::opt::o_install.html30
-rw-r--r--themes/openSUSE/help-install/pt/main::opt::o_splash.html12
-rw-r--r--themes/openSUSE/help-install/pt/main::opt::o_vnc.html18
-rw-r--r--themes/openSUSE/help-install/pt/main::rescue.html10
-rw-r--r--themes/openSUSE/help-install/pt/main::videomode.html18
-rw-r--r--themes/openSUSE/help-install/pt/navi.html1
-rw-r--r--themes/openSUSE/help-install/pt_BR/main.html35
-rw-r--r--themes/openSUSE/help-install/pt_BR/main::bits.html5
-rw-r--r--themes/openSUSE/help-install/pt_BR/main::driverupdate.html7
-rw-r--r--themes/openSUSE/help-install/pt_BR/main::failsafe.html5
-rw-r--r--themes/openSUSE/help-install/pt_BR/main::firmware.html5
-rw-r--r--themes/openSUSE/help-install/pt_BR/main::harddisk.html7
-rw-r--r--themes/openSUSE/help-install/pt_BR/main::help.html7
-rw-r--r--themes/openSUSE/help-install/pt_BR/main::install_src.html7
-rw-r--r--themes/openSUSE/help-install/pt_BR/main::keytable.html5
-rw-r--r--themes/openSUSE/help-install/pt_BR/main::linux.html5
-rw-r--r--themes/openSUSE/help-install/pt_BR/main::memtest.html7
-rw-r--r--themes/openSUSE/help-install/pt_BR/main::noacpi.html9
-rw-r--r--themes/openSUSE/help-install/pt_BR/main::nolapic.html7
-rw-r--r--themes/openSUSE/help-install/pt_BR/main::opt.html9
-rw-r--r--themes/openSUSE/help-install/pt_BR/main::opt::network.html13
-rw-r--r--themes/openSUSE/help-install/pt_BR/main::opt::o_acpi.html7
-rw-r--r--themes/openSUSE/help-install/pt_BR/main::opt::o_apm.html7
-rw-r--r--themes/openSUSE/help-install/pt_BR/main::opt::o_ide.html5
-rw-r--r--themes/openSUSE/help-install/pt_BR/main::opt::o_install.html9
-rw-r--r--themes/openSUSE/help-install/pt_BR/main::opt::o_splash.html5
-rw-r--r--themes/openSUSE/help-install/pt_BR/main::opt::o_vnc.html9
-rw-r--r--themes/openSUSE/help-install/pt_BR/main::rescue.html5
-rw-r--r--themes/openSUSE/help-install/pt_BR/main::videomode.html9
-rw-r--r--themes/openSUSE/help-install/pt_BR/navi.html1
-rw-r--r--themes/openSUSE/help-install/ro/main.html35
-rw-r--r--themes/openSUSE/help-install/ro/main::bits.html5
-rw-r--r--themes/openSUSE/help-install/ro/main::driverupdate.html7
-rw-r--r--themes/openSUSE/help-install/ro/main::failsafe.html5
-rw-r--r--themes/openSUSE/help-install/ro/main::firmware.html5
-rw-r--r--themes/openSUSE/help-install/ro/main::harddisk.html7
-rw-r--r--themes/openSUSE/help-install/ro/main::help.html7
-rw-r--r--themes/openSUSE/help-install/ro/main::install_src.html7
-rw-r--r--themes/openSUSE/help-install/ro/main::keytable.html5
-rw-r--r--themes/openSUSE/help-install/ro/main::linux.html5
-rw-r--r--themes/openSUSE/help-install/ro/main::memtest.html7
-rw-r--r--themes/openSUSE/help-install/ro/main::noacpi.html9
-rw-r--r--themes/openSUSE/help-install/ro/main::nolapic.html7
-rw-r--r--themes/openSUSE/help-install/ro/main::opt.html9
-rw-r--r--themes/openSUSE/help-install/ro/main::opt::network.html13
-rw-r--r--themes/openSUSE/help-install/ro/main::opt::o_acpi.html7
-rw-r--r--themes/openSUSE/help-install/ro/main::opt::o_apm.html7
-rw-r--r--themes/openSUSE/help-install/ro/main::opt::o_ide.html5
-rw-r--r--themes/openSUSE/help-install/ro/main::opt::o_install.html9
-rw-r--r--themes/openSUSE/help-install/ro/main::opt::o_splash.html5
-rw-r--r--themes/openSUSE/help-install/ro/main::opt::o_vnc.html9
-rw-r--r--themes/openSUSE/help-install/ro/main::rescue.html5
-rw-r--r--themes/openSUSE/help-install/ro/main::videomode.html9
-rw-r--r--themes/openSUSE/help-install/ro/navi.html1
-rw-r--r--themes/openSUSE/help-install/ru/main.html35
-rw-r--r--themes/openSUSE/help-install/ru/main::bits.html5
-rw-r--r--themes/openSUSE/help-install/ru/main::driverupdate.html7
-rw-r--r--themes/openSUSE/help-install/ru/main::failsafe.html5
-rw-r--r--themes/openSUSE/help-install/ru/main::firmware.html5
-rw-r--r--themes/openSUSE/help-install/ru/main::harddisk.html7
-rw-r--r--themes/openSUSE/help-install/ru/main::help.html7
-rw-r--r--themes/openSUSE/help-install/ru/main::install_src.html7
-rw-r--r--themes/openSUSE/help-install/ru/main::keytable.html5
-rw-r--r--themes/openSUSE/help-install/ru/main::linux.html5
-rw-r--r--themes/openSUSE/help-install/ru/main::memtest.html7
-rw-r--r--themes/openSUSE/help-install/ru/main::noacpi.html9
-rw-r--r--themes/openSUSE/help-install/ru/main::nolapic.html7
-rw-r--r--themes/openSUSE/help-install/ru/main::opt.html9
-rw-r--r--themes/openSUSE/help-install/ru/main::opt::network.html13
-rw-r--r--themes/openSUSE/help-install/ru/main::opt::o_acpi.html7
-rw-r--r--themes/openSUSE/help-install/ru/main::opt::o_apm.html7
-rw-r--r--themes/openSUSE/help-install/ru/main::opt::o_ide.html5
-rw-r--r--themes/openSUSE/help-install/ru/main::opt::o_install.html9
-rw-r--r--themes/openSUSE/help-install/ru/main::opt::o_splash.html5
-rw-r--r--themes/openSUSE/help-install/ru/main::opt::o_vnc.html9
-rw-r--r--themes/openSUSE/help-install/ru/main::rescue.html5
-rw-r--r--themes/openSUSE/help-install/ru/main::videomode.html9
-rw-r--r--themes/openSUSE/help-install/ru/navi.html1
-rw-r--r--themes/openSUSE/help-install/sk/main.html103
-rw-r--r--themes/openSUSE/help-install/sk/main::bits.html7
-rw-r--r--themes/openSUSE/help-install/sk/main::driverupdate.html14
-rw-r--r--themes/openSUSE/help-install/sk/main::failsafe.html11
-rw-r--r--themes/openSUSE/help-install/sk/main::firmware.html9
-rw-r--r--themes/openSUSE/help-install/sk/main::harddisk.html16
-rw-r--r--themes/openSUSE/help-install/sk/main::help.html25
-rw-r--r--themes/openSUSE/help-install/sk/main::install_src.html12
-rw-r--r--themes/openSUSE/help-install/sk/main::keytable.html7
-rw-r--r--themes/openSUSE/help-install/sk/main::linux.html10
-rw-r--r--themes/openSUSE/help-install/sk/main::memtest.html14
-rw-r--r--themes/openSUSE/help-install/sk/main::noacpi.html24
-rw-r--r--themes/openSUSE/help-install/sk/main::nolapic.html14
-rw-r--r--themes/openSUSE/help-install/sk/main::opt.html28
-rw-r--r--themes/openSUSE/help-install/sk/main::opt::network.html35
-rw-r--r--themes/openSUSE/help-install/sk/main::opt::o_acpi.html23
-rw-r--r--themes/openSUSE/help-install/sk/main::opt::o_apm.html21
-rw-r--r--themes/openSUSE/help-install/sk/main::opt::o_ide.html12
-rw-r--r--themes/openSUSE/help-install/sk/main::opt::o_install.html30
-rw-r--r--themes/openSUSE/help-install/sk/main::opt::o_splash.html12
-rw-r--r--themes/openSUSE/help-install/sk/main::opt::o_vnc.html18
-rw-r--r--themes/openSUSE/help-install/sk/main::rescue.html10
-rw-r--r--themes/openSUSE/help-install/sk/main::videomode.html18
-rw-r--r--themes/openSUSE/help-install/sk/navi.html3
-rw-r--r--themes/openSUSE/help-install/sv/main.html35
-rw-r--r--themes/openSUSE/help-install/sv/main::bits.html5
-rw-r--r--themes/openSUSE/help-install/sv/main::driverupdate.html7
-rw-r--r--themes/openSUSE/help-install/sv/main::failsafe.html5
-rw-r--r--themes/openSUSE/help-install/sv/main::firmware.html5
-rw-r--r--themes/openSUSE/help-install/sv/main::harddisk.html7
-rw-r--r--themes/openSUSE/help-install/sv/main::help.html7
-rw-r--r--themes/openSUSE/help-install/sv/main::install_src.html7
-rw-r--r--themes/openSUSE/help-install/sv/main::keytable.html5
-rw-r--r--themes/openSUSE/help-install/sv/main::linux.html5
-rw-r--r--themes/openSUSE/help-install/sv/main::memtest.html7
-rw-r--r--themes/openSUSE/help-install/sv/main::noacpi.html9
-rw-r--r--themes/openSUSE/help-install/sv/main::nolapic.html7
-rw-r--r--themes/openSUSE/help-install/sv/main::opt.html9
-rw-r--r--themes/openSUSE/help-install/sv/main::opt::network.html13
-rw-r--r--themes/openSUSE/help-install/sv/main::opt::o_acpi.html7
-rw-r--r--themes/openSUSE/help-install/sv/main::opt::o_apm.html7
-rw-r--r--themes/openSUSE/help-install/sv/main::opt::o_ide.html5
-rw-r--r--themes/openSUSE/help-install/sv/main::opt::o_install.html9
-rw-r--r--themes/openSUSE/help-install/sv/main::opt::o_splash.html5
-rw-r--r--themes/openSUSE/help-install/sv/main::opt::o_vnc.html9
-rw-r--r--themes/openSUSE/help-install/sv/main::rescue.html5
-rw-r--r--themes/openSUSE/help-install/sv/main::videomode.html9
-rw-r--r--themes/openSUSE/help-install/sv/navi.html1
-rw-r--r--themes/openSUSE/help-install/th/main.html35
-rw-r--r--themes/openSUSE/help-install/th/main::bits.html5
-rw-r--r--themes/openSUSE/help-install/th/main::driverupdate.html7
-rw-r--r--themes/openSUSE/help-install/th/main::failsafe.html5
-rw-r--r--themes/openSUSE/help-install/th/main::firmware.html5
-rw-r--r--themes/openSUSE/help-install/th/main::harddisk.html7
-rw-r--r--themes/openSUSE/help-install/th/main::help.html7
-rw-r--r--themes/openSUSE/help-install/th/main::install_src.html7
-rw-r--r--themes/openSUSE/help-install/th/main::keytable.html5
-rw-r--r--themes/openSUSE/help-install/th/main::linux.html5
-rw-r--r--themes/openSUSE/help-install/th/main::memtest.html7
-rw-r--r--themes/openSUSE/help-install/th/main::noacpi.html9
-rw-r--r--themes/openSUSE/help-install/th/main::nolapic.html7
-rw-r--r--themes/openSUSE/help-install/th/main::opt.html9
-rw-r--r--themes/openSUSE/help-install/th/main::opt::network.html13
-rw-r--r--themes/openSUSE/help-install/th/main::opt::o_acpi.html7
-rw-r--r--themes/openSUSE/help-install/th/main::opt::o_apm.html7
-rw-r--r--themes/openSUSE/help-install/th/main::opt::o_ide.html5
-rw-r--r--themes/openSUSE/help-install/th/main::opt::o_install.html9
-rw-r--r--themes/openSUSE/help-install/th/main::opt::o_splash.html5
-rw-r--r--themes/openSUSE/help-install/th/main::opt::o_vnc.html9
-rw-r--r--themes/openSUSE/help-install/th/main::rescue.html5
-rw-r--r--themes/openSUSE/help-install/th/main::videomode.html9
-rw-r--r--themes/openSUSE/help-install/th/navi.html1
-rw-r--r--themes/openSUSE/help-install/uk/main.html35
-rw-r--r--themes/openSUSE/help-install/uk/main::bits.html5
-rw-r--r--themes/openSUSE/help-install/uk/main::driverupdate.html7
-rw-r--r--themes/openSUSE/help-install/uk/main::failsafe.html5
-rw-r--r--themes/openSUSE/help-install/uk/main::firmware.html5
-rw-r--r--themes/openSUSE/help-install/uk/main::harddisk.html7
-rw-r--r--themes/openSUSE/help-install/uk/main::help.html7
-rw-r--r--themes/openSUSE/help-install/uk/main::install_src.html7
-rw-r--r--themes/openSUSE/help-install/uk/main::keytable.html5
-rw-r--r--themes/openSUSE/help-install/uk/main::linux.html5
-rw-r--r--themes/openSUSE/help-install/uk/main::memtest.html7
-rw-r--r--themes/openSUSE/help-install/uk/main::noacpi.html9
-rw-r--r--themes/openSUSE/help-install/uk/main::nolapic.html7
-rw-r--r--themes/openSUSE/help-install/uk/main::opt.html9
-rw-r--r--themes/openSUSE/help-install/uk/main::opt::network.html13
-rw-r--r--themes/openSUSE/help-install/uk/main::opt::o_acpi.html7
-rw-r--r--themes/openSUSE/help-install/uk/main::opt::o_apm.html7
-rw-r--r--themes/openSUSE/help-install/uk/main::opt::o_ide.html5
-rw-r--r--themes/openSUSE/help-install/uk/main::opt::o_install.html9
-rw-r--r--themes/openSUSE/help-install/uk/main::opt::o_splash.html5
-rw-r--r--themes/openSUSE/help-install/uk/main::opt::o_vnc.html9
-rw-r--r--themes/openSUSE/help-install/uk/main::rescue.html5
-rw-r--r--themes/openSUSE/help-install/uk/main::videomode.html9
-rw-r--r--themes/openSUSE/help-install/uk/navi.html1
-rw-r--r--themes/openSUSE/help-install/xh/main.html103
-rw-r--r--themes/openSUSE/help-install/xh/main::bits.html7
-rw-r--r--themes/openSUSE/help-install/xh/main::driverupdate.html14
-rw-r--r--themes/openSUSE/help-install/xh/main::failsafe.html11
-rw-r--r--themes/openSUSE/help-install/xh/main::firmware.html9
-rw-r--r--themes/openSUSE/help-install/xh/main::harddisk.html16
-rw-r--r--themes/openSUSE/help-install/xh/main::help.html25
-rw-r--r--themes/openSUSE/help-install/xh/main::install_src.html12
-rw-r--r--themes/openSUSE/help-install/xh/main::keytable.html7
-rw-r--r--themes/openSUSE/help-install/xh/main::linux.html10
-rw-r--r--themes/openSUSE/help-install/xh/main::memtest.html14
-rw-r--r--themes/openSUSE/help-install/xh/main::noacpi.html24
-rw-r--r--themes/openSUSE/help-install/xh/main::nolapic.html14
-rw-r--r--themes/openSUSE/help-install/xh/main::opt.html28
-rw-r--r--themes/openSUSE/help-install/xh/main::opt::network.html35
-rw-r--r--themes/openSUSE/help-install/xh/main::opt::o_acpi.html23
-rw-r--r--themes/openSUSE/help-install/xh/main::opt::o_apm.html21
-rw-r--r--themes/openSUSE/help-install/xh/main::opt::o_ide.html12
-rw-r--r--themes/openSUSE/help-install/xh/main::opt::o_install.html30
-rw-r--r--themes/openSUSE/help-install/xh/main::opt::o_splash.html12
-rw-r--r--themes/openSUSE/help-install/xh/main::opt::o_vnc.html18
-rw-r--r--themes/openSUSE/help-install/xh/main::rescue.html10
-rw-r--r--themes/openSUSE/help-install/xh/main::videomode.html18
-rw-r--r--themes/openSUSE/help-install/xh/navi.html1
-rw-r--r--themes/openSUSE/help-install/zh_CN/main.html86
-rw-r--r--themes/openSUSE/help-install/zh_CN/main::bits.html7
-rw-r--r--themes/openSUSE/help-install/zh_CN/main::driverupdate.html14
-rw-r--r--themes/openSUSE/help-install/zh_CN/main::failsafe.html11
-rw-r--r--themes/openSUSE/help-install/zh_CN/main::firmware.html9
-rw-r--r--themes/openSUSE/help-install/zh_CN/main::harddisk.html16
-rw-r--r--themes/openSUSE/help-install/zh_CN/main::help.html12
-rw-r--r--themes/openSUSE/help-install/zh_CN/main::install_src.html7
-rw-r--r--themes/openSUSE/help-install/zh_CN/main::keytable.html5
-rw-r--r--themes/openSUSE/help-install/zh_CN/main::linux.html10
-rw-r--r--themes/openSUSE/help-install/zh_CN/main::memtest.html14
-rw-r--r--themes/openSUSE/help-install/zh_CN/main::noacpi.html24
-rw-r--r--themes/openSUSE/help-install/zh_CN/main::nolapic.html14
-rw-r--r--themes/openSUSE/help-install/zh_CN/main::opt.html28
-rw-r--r--themes/openSUSE/help-install/zh_CN/main::opt::network.html35
-rw-r--r--themes/openSUSE/help-install/zh_CN/main::opt::o_acpi.html23
-rw-r--r--themes/openSUSE/help-install/zh_CN/main::opt::o_apm.html21
-rw-r--r--themes/openSUSE/help-install/zh_CN/main::opt::o_ide.html12
-rw-r--r--themes/openSUSE/help-install/zh_CN/main::opt::o_install.html30
-rw-r--r--themes/openSUSE/help-install/zh_CN/main::opt::o_splash.html12
-rw-r--r--themes/openSUSE/help-install/zh_CN/main::opt::o_vnc.html18
-rw-r--r--themes/openSUSE/help-install/zh_CN/main::rescue.html10
-rw-r--r--themes/openSUSE/help-install/zh_CN/main::videomode.html18
-rw-r--r--themes/openSUSE/help-install/zh_CN/navi.html1
-rw-r--r--themes/openSUSE/help-install/zh_TW/main.html35
-rw-r--r--themes/openSUSE/help-install/zh_TW/main::bits.html5
-rw-r--r--themes/openSUSE/help-install/zh_TW/main::driverupdate.html7
-rw-r--r--themes/openSUSE/help-install/zh_TW/main::failsafe.html5
-rw-r--r--themes/openSUSE/help-install/zh_TW/main::firmware.html5
-rw-r--r--themes/openSUSE/help-install/zh_TW/main::harddisk.html7
-rw-r--r--themes/openSUSE/help-install/zh_TW/main::help.html7
-rw-r--r--themes/openSUSE/help-install/zh_TW/main::install_src.html7
-rw-r--r--themes/openSUSE/help-install/zh_TW/main::keytable.html5
-rw-r--r--themes/openSUSE/help-install/zh_TW/main::linux.html5
-rw-r--r--themes/openSUSE/help-install/zh_TW/main::memtest.html7
-rw-r--r--themes/openSUSE/help-install/zh_TW/main::noacpi.html9
-rw-r--r--themes/openSUSE/help-install/zh_TW/main::nolapic.html7
-rw-r--r--themes/openSUSE/help-install/zh_TW/main::opt.html9
-rw-r--r--themes/openSUSE/help-install/zh_TW/main::opt::network.html13
-rw-r--r--themes/openSUSE/help-install/zh_TW/main::opt::o_acpi.html7
-rw-r--r--themes/openSUSE/help-install/zh_TW/main::opt::o_apm.html7
-rw-r--r--themes/openSUSE/help-install/zh_TW/main::opt::o_ide.html5
-rw-r--r--themes/openSUSE/help-install/zh_TW/main::opt::o_install.html9
-rw-r--r--themes/openSUSE/help-install/zh_TW/main::opt::o_splash.html5
-rw-r--r--themes/openSUSE/help-install/zh_TW/main::opt::o_vnc.html9
-rw-r--r--themes/openSUSE/help-install/zh_TW/main::rescue.html5
-rw-r--r--themes/openSUSE/help-install/zh_TW/main::videomode.html9
-rw-r--r--themes/openSUSE/help-install/zh_TW/navi.html1
-rw-r--r--themes/openSUSE/keymaps/keymap.Pl02.inc16
-rw-r--r--themes/openSUSE/keymaps/keymap.be-latin1.inc30
-rw-r--r--themes/openSUSE/keymaps/keymap.br-abnt2.inc22
-rw-r--r--themes/openSUSE/keymaps/keymap.cf.inc28
-rw-r--r--themes/openSUSE/keymaps/keymap.cn-latin1.inc41
-rw-r--r--themes/openSUSE/keymaps/keymap.croat.inc38
-rw-r--r--themes/openSUSE/keymaps/keymap.cz-lat2-us.inc25
-rw-r--r--themes/openSUSE/keymaps/keymap.cz-us-qwertz.inc26
-rw-r--r--themes/openSUSE/keymaps/keymap.de-latin1-nodeadkeys.inc27
-rw-r--r--themes/openSUSE/keymaps/keymap.dk.inc24
-rw-r--r--themes/openSUSE/keymaps/keymap.dvorak.inc37
-rw-r--r--themes/openSUSE/keymaps/keymap.es.inc25
-rw-r--r--themes/openSUSE/keymaps/keymap.et.inc25
-rw-r--r--themes/openSUSE/keymaps/keymap.fi-latin1.inc31
-rw-r--r--themes/openSUSE/keymaps/keymap.fr-latin1.inc29
-rw-r--r--themes/openSUSE/keymaps/keymap.fr_CH-latin1.inc27
-rw-r--r--themes/openSUSE/keymaps/keymap.gr.inc5
-rw-r--r--themes/openSUSE/keymaps/keymap.hu.inc42
-rw-r--r--themes/openSUSE/keymaps/keymap.is-latin1.inc26
-rw-r--r--themes/openSUSE/keymaps/keymap.it.inc23
-rw-r--r--themes/openSUSE/keymaps/keymap.jp106.inc23
-rw-r--r--themes/openSUSE/keymaps/keymap.la-latin1.inc22
-rw-r--r--themes/openSUSE/keymaps/keymap.lt.baltic.inc16
-rw-r--r--themes/openSUSE/keymaps/keymap.nl.inc29
-rw-r--r--themes/openSUSE/keymaps/keymap.no-latin1.inc43
-rw-r--r--themes/openSUSE/keymaps/keymap.pt-latin1.inc24
-rw-r--r--themes/openSUSE/keymaps/keymap.ruwin_alt-UTF-8.inc46
-rw-r--r--themes/openSUSE/keymaps/keymap.sg-latin1.inc27
-rw-r--r--themes/openSUSE/keymaps/keymap.sk-qwerty.inc25
-rw-r--r--themes/openSUSE/keymaps/keymap.sk-qwertz.inc27
-rw-r--r--themes/openSUSE/keymaps/keymap.slovene.inc38
-rw-r--r--themes/openSUSE/keymaps/keymap.sr-cy.inc43
-rw-r--r--themes/openSUSE/keymaps/keymap.sv-latin1.inc23
-rw-r--r--themes/openSUSE/keymaps/keymap.tj.inc46
-rw-r--r--themes/openSUSE/keymaps/keymap.trq.inc30
-rw-r--r--themes/openSUSE/keymaps/keymap.ua.inc6
-rw-r--r--themes/openSUSE/keymaps/keymap.uk.inc10
-rw-r--r--themes/openSUSE/penguin_src/Makefile12
-rw-r--r--themes/openSUSE/penguin_src/panim.pngbin0 -> 35714 bytes
-rw-r--r--themes/openSUSE/penguin_src/pback.pngbin0 -> 122303 bytes
-rwxr-xr-xthemes/openSUSE/penguin_src/penguins.xcfbin0 -> 1467453 bytes
-rw-r--r--themes/openSUSE/po/Makefile19
-rw-r--r--themes/openSUSE/po/README24
-rw-r--r--themes/openSUSE/po/af.po440
-rw-r--r--themes/openSUSE/po/ar.po440
-rw-r--r--themes/openSUSE/po/bg.po447
-rwxr-xr-xthemes/openSUSE/po/bin/add_text56
-rw-r--r--themes/openSUSE/po/bin/arabic.txt1040
-rwxr-xr-xthemes/openSUSE/po/bin/fixpot27
-rwxr-xr-xthemes/openSUSE/po/bin/po2txt281
-rwxr-xr-xthemes/openSUSE/po/bin/rm_text63
-rw-r--r--themes/openSUSE/po/bn.po_disabled422
-rw-r--r--themes/openSUSE/po/bootloader.pot425
-rw-r--r--themes/openSUSE/po/ca.po441
-rw-r--r--themes/openSUSE/po/cs.po444
-rw-r--r--themes/openSUSE/po/da.po445
-rw-r--r--themes/openSUSE/po/de.po447
-rw-r--r--themes/openSUSE/po/el.po443
-rw-r--r--themes/openSUSE/po/es.po449
-rw-r--r--themes/openSUSE/po/et.po441
-rw-r--r--themes/openSUSE/po/fi.po447
-rw-r--r--themes/openSUSE/po/fr.po450
-rw-r--r--themes/openSUSE/po/gl.po444
-rw-r--r--themes/openSUSE/po/gu.po441
-rw-r--r--themes/openSUSE/po/hi.po441
-rw-r--r--themes/openSUSE/po/hr.po442
-rw-r--r--themes/openSUSE/po/hu.po451
-rw-r--r--themes/openSUSE/po/id.po442
-rw-r--r--themes/openSUSE/po/it.po448
-rw-r--r--themes/openSUSE/po/ja.po441
-rw-r--r--themes/openSUSE/po/ka.po440
-rw-r--r--themes/openSUSE/po/ko.po446
-rw-r--r--themes/openSUSE/po/ky.po441
-rw-r--r--themes/openSUSE/po/lt.po443
-rw-r--r--themes/openSUSE/po/mr.po442
-rw-r--r--themes/openSUSE/po/nb.po447
-rw-r--r--themes/openSUSE/po/nl.po447
-rw-r--r--themes/openSUSE/po/pa.po452
-rw-r--r--themes/openSUSE/po/pl.po443
-rw-r--r--themes/openSUSE/po/pt.po444
-rw-r--r--themes/openSUSE/po/pt_BR.po446
-rw-r--r--themes/openSUSE/po/ro.po445
-rw-r--r--themes/openSUSE/po/ru.po448
-rw-r--r--themes/openSUSE/po/sk.po448
-rw-r--r--themes/openSUSE/po/sl.po450
-rw-r--r--themes/openSUSE/po/sr.po440
-rw-r--r--themes/openSUSE/po/sv.po442
-rw-r--r--themes/openSUSE/po/ta.po441
-rw-r--r--themes/openSUSE/po/tg.po427
-rw-r--r--themes/openSUSE/po/th.po444
-rw-r--r--themes/openSUSE/po/tr.po441
-rw-r--r--themes/openSUSE/po/uk.po445
-rw-r--r--themes/openSUSE/po/wa.po443
-rw-r--r--themes/openSUSE/po/xh.po438
-rw-r--r--themes/openSUSE/po/zh_CN.po439
-rw-r--r--themes/openSUSE/po/zh_TW.po442
-rw-r--r--themes/openSUSE/po/zu.po438
-rw-r--r--themes/openSUSE/src/Makefile16
-rw-r--r--themes/openSUSE/src/bsplash.inc295
-rw-r--r--themes/openSUSE/src/button.inc116
-rw-r--r--themes/openSUSE/src/common.inc1778
-rw-r--r--themes/openSUSE/src/dia_about.inc77
-rw-r--r--themes/openSUSE/src/dia_bits.inc101
-rw-r--r--themes/openSUSE/src/dia_dud.inc165
-rw-r--r--themes/openSUSE/src/dia_help.inc46
-rw-r--r--themes/openSUSE/src/dia_install.inc443
-rw-r--r--themes/openSUSE/src/dia_kernelopts.inc94
-rw-r--r--themes/openSUSE/src/dia_keymap.inc105
-rw-r--r--themes/openSUSE/src/dia_lang.inc313
-rw-r--r--themes/openSUSE/src/dia_net.inc135
-rw-r--r--themes/openSUSE/src/dia_otheropts.inc111
-rw-r--r--themes/openSUSE/src/dia_profile.inc137
-rw-r--r--themes/openSUSE/src/dia_restore.inc60
-rw-r--r--themes/openSUSE/src/dia_video.inc336
-rw-r--r--themes/openSUSE/src/gfxboot.cfg220
-rw-r--r--themes/openSUSE/src/help.inc684
-rw-r--r--themes/openSUSE/src/keytables.inc99
-rw-r--r--themes/openSUSE/src/locale.inc310
-rw-r--r--themes/openSUSE/src/main.bc33
-rw-r--r--themes/openSUSE/src/menu.inc494
-rw-r--r--themes/openSUSE/src/panel.inc212
-rw-r--r--themes/openSUSE/src/penguin.inc351
-rw-r--r--themes/openSUSE/src/serial.inc519
-rw-r--r--themes/openSUSE/src/speech.inc97
-rw-r--r--themes/openSUSE/src/system.inc1400
-rw-r--r--themes/openSUSE/src/timeout.inc149
-rw-r--r--themes/openSUSE/src/window.inc715
-rw-r--r--themes/openSUSE/src/xmenu.inc434
-rw-r--r--themes/openSUSE/talk/Makefile10
-rw-r--r--themes/openSUSE/talk/en.tlkbin0 -> 2635307 bytes
-rwxr-xr-xthemes/openSUSE/talk/po2talk191
-rw-r--r--themes/openSUSE/talk/sc.c229
-rw-r--r--themes/openSUSE/talk/talk.po806
l---------themes/upstream/Makefile1
-rw-r--r--themes/upstream/config2
-rw-r--r--themes/upstream/data-boot/back.jpgbin0 -> 39732 bytes
-rw-r--r--themes/upstream/data-install/back.jpgbin0 -> 39732 bytes
-rw-r--r--themes/upstream/data-install/welcome.jpgbin0 -> 39732 bytes
1538 files changed, 149188 insertions, 289 deletions
diff --git a/COPYING b/COPYING
new file mode 100644
index 0000000..1609d96
--- /dev/null
+++ b/COPYING
@@ -0,0 +1,341 @@
+----------------------------------------------------------------------
+
+ GNU GENERAL PUBLIC LICENSE
+ Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+ 675 Mass Ave, Cambridge, MA 02139, 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.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) 19yy <name of author>
+
+ 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., 675 Mass Ave, Cambridge, MA 02139, 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) 19yy 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.
+
+ <signature of Ty Coon>, 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/Makefile b/Makefile
new file mode 100644
index 0000000..97b60d7
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,84 @@
+CC = gcc
+CFLAGS = -g -Wall -Wno-pointer-sign -O2 -fomit-frame-pointer
+
+GIT2LOG := $(shell if [ -x ./git2log ] ; then echo ./git2log --update ; else echo true ; fi)
+GITDEPS := $(shell [ -d .git ] && echo .git/HEAD .git/refs/heads .git/refs/tags)
+
+VERSION := $(shell $(GIT2LOG) --version VERSION ; cat VERSION)
+
+# THEMES = $(wildcard themes/*)
+THEMES = themes/upstream themes/openSUSE themes/SLES themes/SLED themes/KDE
+
+.PHONY: all clean distclean doc install installsrc themes
+
+all: changelog bin2c gfxboot-compile bincode gfxboot-font addblack
+
+changelog: $(GITDEPS)
+ $(GIT2LOG) --changelog changelog
+
+gfxboot-font: gfxboot-font.c
+ $(CC) $(CFLAGS) -I /usr/include/freetype2 -lfreetype $< -o $@
+
+gfxboot-compile: gfxboot-compile.c vocabulary.h bincode.h
+ $(CC) $(CFLAGS) $< -o $@
+
+addblack: addblack.c
+ $(CC) $(CFLAGS) $< -o $@
+
+bincode.o: bincode.asm vocabulary.inc modplay_defines.inc modplay.inc kroete.inc
+ bin/trace_context bincode.asm
+ nasm -f elf -O99 -o $@ -l bincode.lst $<
+
+bincode: bincode.o jpeg.o
+ ld -m elf_i386 --section-start .text=0 --oformat binary -Map bincode.map -o $@ $^
+
+bincode.h: bincode bin2c
+ ./bin2c bincode >bincode.h
+
+bin2c: bin2c.c
+ $(CC) $(CFLAGS) $< -o $@
+
+vocabulary.inc: mk_vocabulary
+ ./mk_vocabulary -a >$@
+
+vocabulary.h: mk_vocabulary
+ ./mk_vocabulary -c >$@
+
+jpeg.o: jpeg.S
+ as --32 -ahlsn=jpeg.lst -o $@ $<
+
+install: all
+ install -d -m 755 $(DESTDIR)/usr/sbin
+ perl -p -e 's/<VERSION>/$(VERSION)/' gfxboot >gfxboot~
+ install -m 755 gfxboot~ $(DESTDIR)/usr/sbin/gfxboot
+ install -m 755 gfxtest $(DESTDIR)/usr/sbin
+ install -m 755 gfxboot-compile gfxboot-font $(DESTDIR)/usr/sbin
+ @for i in $(THEMES) ; do \
+ install -d -m 755 $(DESTDIR)/etc/bootsplash/$$i/{bootloader,cdrom} ; \
+ cp $$i/bootlogo $(DESTDIR)/etc/bootsplash/$$i/cdrom ; \
+ bin/unpack_bootlogo $(DESTDIR)/etc/bootsplash/$$i/cdrom ; \
+ install -m 644 $$i/{message,po/*.tr,help-boot/*.hlp} $(DESTDIR)/etc/bootsplash/$$i/bootloader ; \
+ bin/2hl --link --quiet $(DESTDIR)/etc/bootsplash/$$i/* ; \
+ done
+
+installsrc:
+ install -d -m 755 $(DESTDIR)/usr/share/gfxboot/themes
+ @for i in $(THEMES) ; do \
+ cp -a $$i $(DESTDIR)/usr/share/gfxboot/themes ; \
+ done
+ cp -a themes/example* $(DESTDIR)/usr/share/gfxboot/themes
+ cp -a bin test $(DESTDIR)/usr/share/gfxboot
+
+clean: themes doc
+ @rm -f gfxboot-compile bincode gfxboot-font addblack bincode.h bin2c *.lst *.map vocabulary.inc vocabulary.h *.o *~
+ @rm -rf tmp
+
+distclean: clean
+ @for i in themes/example* ; do make -C $$i clean || break ; done
+
+themes:
+ @for i in $(THEMES) ; do make -C $$i $(MAKECMDGOALS) || break ; done
+
+doc:
+ make -C doc $(MAKECMDGOALS)
+
diff --git a/VERSION b/VERSION
new file mode 100644
index 0000000..6cedcff
--- /dev/null
+++ b/VERSION
@@ -0,0 +1 @@
+4.5.2
diff --git a/addblack.c b/addblack.c
new file mode 100644
index 0000000..3ce267c
--- /dev/null
+++ b/addblack.c
@@ -0,0 +1,185 @@
+/*
+ * add black as color #0 to a pcx file
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <inttypes.h>
+#include <ctype.h>
+
+typedef struct {
+ unsigned size;
+ unsigned char *data;
+ unsigned real_size;
+} file_data_t;
+
+void help(void);
+file_data_t read_file(char *name);
+int is_pcx(file_data_t *fd);
+int is_black(file_data_t *fd);
+void write_data(file_data_t *fd, char *name);
+void add_data(file_data_t *d, void *buffer, unsigned size);
+void add_black(file_data_t *new, file_data_t *old);
+
+file_data_t pcx_old = {};
+file_data_t pcx_new = {};
+
+int main(int argc, char **argv)
+{
+ if(argc != 3) return 1;
+
+ pcx_old = read_file(argv[1]);
+
+ if(!is_pcx(&pcx_old)) return 2;
+
+ if(is_black(&pcx_old)) {
+ fprintf(stderr, "color 0 is black\n");
+ return 0;
+ }
+
+ add_black(&pcx_new, &pcx_old);
+
+ write_data(&pcx_new, argv[2]);
+
+ return 0;
+}
+
+
+file_data_t read_file(char *name)
+{
+ file_data_t fd = { };
+ FILE *f;
+
+ if(!name) return fd;
+
+ f = fopen(name, "r");
+ if(!f) { perror(name); return fd; }
+
+ if(fseek(f, 0, SEEK_END)) {
+ perror(name);
+ exit(30);
+ }
+
+ fd.size = fd.real_size = ftell(f);
+
+ if(fseek(f, 0, SEEK_SET)) {
+ perror(name);
+ exit(30);
+ }
+
+ if(fd.size) {
+ fd.data = malloc(fd.size);
+ if(!fd.data) {
+ fprintf(stderr, "malloc failed\n");
+ exit(30);
+ }
+ }
+
+ if(fread(fd.data, 1, fd.size, f) != fd.size) {
+ perror(name);
+ exit(30);
+ }
+
+ fclose(f);
+
+ return fd;
+}
+
+
+int is_pcx(file_data_t *fd)
+{
+ if(!fd->data || fd->size < 0x381) return 0;
+ if(
+ fd->data[0] != 10 ||
+ fd->data[1] != 5 ||
+ fd->data[2] != 1 ||
+ fd->data[3] != 8 ||
+ fd->data[fd->size - 0x301] != 12
+ ) return 0;
+
+ return 1;
+}
+
+
+int is_black(file_data_t *fd)
+{
+ return !(fd->data[fd->size - 0x300] || fd->data[fd->size - 0x300 + 1] || fd->data[fd->size - 0x300 + 2]);
+}
+
+
+void write_data(file_data_t *fd, char *name)
+{
+ FILE *f;
+
+ if(!fd->size) return;
+
+ f = strcmp(name, "-") ? fopen(name, "w") : stdout;
+
+ if(!f) {
+ perror(name);
+ return;
+ }
+
+ if(fwrite(fd->data, fd->size, 1, f) != 1) {
+ perror(name); exit(3);
+ }
+
+ fclose(f);
+}
+
+
+void add_data(file_data_t *d, void *buffer, unsigned size)
+{
+ if(!size || !d || !buffer) return;
+
+ if(d->size + size > d->real_size) {
+ d->real_size = d->size + size + 0x1000;
+ d->data = realloc(d->data, d->real_size);
+ if(!d->data) d->real_size = 0;
+ }
+
+ if(d->size + size <= d->real_size) {
+ memcpy(d->data + d->size, buffer, size);
+ d->size += size;
+ }
+ else {
+ fprintf(stderr, "Oops, out of memory? Aborted.\n");
+ exit(10);
+ }
+}
+
+
+void add_black(file_data_t *new, file_data_t *old)
+{
+ int i, size;
+ unsigned char black[4] = { 12, 0, 0, 0 };
+ unsigned char *src = old->data + 0x80;
+ unsigned char c[1];
+
+ add_data(new, old->data, 0x80);
+ size = old->size - 0x381;
+
+ for(i = 0; i < size; i++) {
+ if(src[i] < 0xbf) {
+ *c = src[i] + 1;
+ add_data(new, c, 1);
+ }
+ else if(src[i] == 0xbf) {
+ *c = 0xc1;
+ add_data(new, c, 1);
+ *c = 0xc0;
+ add_data(new, c, 1);
+ }
+ else {
+ add_data(new, src + i, 1);
+ i++;
+ *c = src[i] + 1;
+ add_data(new, c, 1);
+ }
+ }
+
+ add_data(new, black, 4);
+ add_data(new, old->data + old->size - 0x300, 0x300 - 3);
+}
+
diff --git a/bin/2hl b/bin/2hl
new file mode 100755
index 0000000..d6f65c4
--- /dev/null
+++ b/bin/2hl
@@ -0,0 +1,74 @@
+#! /usr/bin/perl
+
+# replace identical files with hard links
+
+use Getopt::Long;
+use File::stat;
+
+$md5_0 = "d41d8cd98f00b204e9800998ecf8427e";
+
+$opt_link = 0;
+$opt_quiet = 0;
+
+GetOptions(
+ link => \$opt_link,
+ quiet => \$opt_quiet,
+);
+
+for $dir (@ARGV) {
+ for (`find '$dir' -type f -print0 | xargs -0r md5sum`) {
+ chomp;
+ if(/^(\S+) (.*)/) {
+ $m = $1;
+ $f = $2;
+ push @{$md5{$m}}, $f;
+ }
+ }
+}
+
+$total_size = 0;
+$empty_files = 0;
+
+for $m (sort keys %md5) {
+ if(@{$md5{$m}} > 1) {
+ $size = 0;
+ $cnt = 0;
+ undef %ino;
+ undef @buf;
+ for $f (@{$md5{$m}}) {
+ $sb = stat $f;
+ die "oops: stat failed on \"$f\"\n" unless defined $sb;
+ $size = $sb->size;
+ $cnt++ unless $ino{$sb->ino};
+ $ino{$sb->ino} = 1;
+ push @buf, sprintf(" %04o %04d:%04d %5d %6d \"%s\"\n",
+ $sb->mode & 07777, $sb->uid, $sb->gid, $sb->ino, $sb->size, $f);
+ }
+ if(!$opt_quiet) {
+ printf "%s: %d (%d)\n", $m, ($cnt - 1) * $size, $cnt - 1;
+ print @buf;
+ }
+
+ $total_size += ($cnt - 1) * $size;
+
+ if($opt_link && $m ne $md5_0) {
+ $ref = undef;
+ for $f (@{$md5{$m}}) {
+ if($ref) {
+ unlink $f;
+ link $ref, $f;
+ }
+ else {
+ $ref = $f;
+ }
+ }
+ }
+ }
+}
+
+$empty_files = @{$md5{$md5_0}};
+
+print "\n" unless $opt_quiet;
+printf "total saved size: %d\n", $total_size;
+printf " empty files: %d\n", $empty_files;
+
diff --git a/bin/adddir b/bin/adddir
new file mode 100755
index 0000000..530d926
--- /dev/null
+++ b/bin/adddir
@@ -0,0 +1,73 @@
+#! /bin/bash
+
+#
+# Symlink all files in a tree that are missing.
+#
+
+function read_dir {
+ local i
+
+ for i in `( cd "$1" && echo * )` ; do
+ [ -e "$1/$i" -o -L "$1/$i" ] && echo "$i"
+ done
+}
+
+
+function add_dir {
+ local src dst tmp i
+
+ src="$1"
+ dst="$2"
+
+ # echo "adddir $src $dst"
+
+ for i in `read_dir $src` ; do
+ if [ -d "$src/$i" -a ! -L "$src/$i" ]; then
+ # add directory
+ # echo " add dir $src/$i as $dst/$i"
+ if [ ! -d "$dst/$i" ] ; then
+ rm -f "$dst/$i"
+ mkdir "$dst/$i"
+ fi
+ if [ -L "$dst/$i" ] ; then
+ tmp=`mktemp -d "$dst/adddir.XXXXXX"` || exit 2
+ chown --dereference --reference "$dst/$i" "$tmp" 2>/dev/null
+ chmod --reference "$dst/$i" "$tmp"
+ add_dir "`readlink $dst/$i`" "$tmp"
+ rm -f "$dst/$i"
+ mv "$tmp" "$dst/$i"
+ fi
+ add_dir "$src/$i" "$dst/$i"
+ else
+ if [ ! -e "$dst/$i" ] ; then
+ # add non-directory
+ # echo " add file $src/$i as $dst/$i"
+ if [ -d "$dst/$i" -a ! -L "$dst/$i" ] ; then
+ rm -rf "$dst/$i"
+ else
+ rm -f "$dst/$i"
+ fi
+ if [ -f "$src/$i" -a ! -L "$src/$i" ] ; then
+ ln -s "`( cd $src ; pwd )`/$i" "$dst/$i"
+ else
+ cp -a "$src/$i" "$dst/$i"
+ fi
+ fi
+ fi
+ done
+}
+
+
+src="$1"
+dst="$2"
+
+if [ ! \( -d "$src" -a -d "$dst" \) ] ; then
+ echo "Usage: adddir src_dir dst_dir"
+ echo "Adds (symlinks) everything that is in src_dir to dst_dir."
+ echo "Note: spaces in filenames are evil."
+ exit 1
+fi
+
+
+add_dir "$src" "$dst"
+
diff --git a/bin/help2txt b/bin/help2txt
new file mode 100755
index 0000000..6bfb438
--- /dev/null
+++ b/bin/help2txt
@@ -0,0 +1,222 @@
+#! /usr/bin/perl
+
+use Getopt::Long;
+use HTML::Parser;
+
+sub text_handler;
+sub comment_handler;
+sub default_handler;
+sub start_handler;
+sub end_handler;
+sub body_start;
+sub find_tag;
+sub nospaces;
+
+$opt_product = "openSUSE";
+
+%help_key_rename = (
+ 'F2' => 'F3',
+ 'F3' => 'F4',
+ 'F4' => 'F2',
+);
+
+GetOptions(
+ 'product=s' => \$opt_product
+);
+
+$p = HTML::Parser->new(api_version => 3);
+
+# $p->utf8_mode(1);
+$p->unbroken_text(1);
+
+$p->handler(default => "" );
+$p->handler(start => \&body_start, "self,tagname,line");
+
+$p->parse_file(shift);
+
+# print "help type = \"$helptype\"\n";
+
+
+$t .= $_->[1] for @t;
+
+$t =~ s/ +/ /sg;
+$t =~ s/\n /\n/sg;
+$t =~ s/ \n/\n/sg;
+$t =~ s/(\x14.*?\x10)\s*/$1/sg;
+$t =~ s/\s*(\x04|$)/$1/sg;
+$t =~ s/(&product;|\@product\@)/$opt_product/g;
+
+# FIXME: we need a better solution
+$t =~ s/(\bF[234]\b)/$help_key_rename{$1}/sg if $helptype eq 'install';
+
+print $t, "\x00";
+
+
+if($helptype eq 'boot') {
+ $ref{help}++;
+ $ref{keytable}++;
+ $ref{profile}++;
+}
+
+if($helptype eq 'install') {
+ $ref{bits}++;
+}
+
+for (keys %label) {
+ if(!$ref{$_}) {
+ $err = 1;
+ print STDERR "\"$_\" never referenced\n"
+ }
+}
+
+for (keys %ref) {
+ if(!$label{$_}) {
+ $err = 1;
+ print STDERR "\"$_\" never defined\n"
+ }
+}
+
+warn "*** inconsistencies detected ***\n" if $err;
+
+
+
+sub text_handler
+{
+ local $_;
+
+ $_ = shift;
+ s/\s+/ /g;
+
+ push @t, [ "", $_ ];
+}
+
+
+sub comment_handler
+{
+ $helptype = $1 if $_[0] =~ /\bhelp=([a-z]+)/;
+}
+
+
+sub default_handler
+{
+ my $line = shift;
+
+ die "oops at line $line\n";
+}
+
+
+sub body_start
+{
+ my ($self, $tag) = @_;
+
+ if($tag eq "body") {
+ $self->handler(text => \&text_handler, "text");
+ $self->handler(comment => \&comment_handler, "text" );
+ $self->handler(default => \&default_handler, "line" );
+ $self->handler(start => \&start_handler, "self,tagname,attr,line");
+ $self->handler(end => \&end_handler, "self,tagname,line");
+ }
+}
+
+
+sub start_handler
+{
+ my ($self, $tag, $attr, $line) = @_;
+ my $l;
+
+ return if $tag eq "hr";
+ return if $tag eq "h3";
+
+ if($tag eq "br") {
+ push @t, [ "", "\n" ];
+ }
+ elsif($tag eq "em") {
+ push @t, [ "em" ];
+ }
+ elsif($tag eq "a") {
+ $l = $attr->{href};
+ $l =~ s/^#//;
+ push @t, [ "a", undef, $attr->{name}, $l ];
+ }
+ else {
+ die "line $line: unsupported tag $tag\n";
+ }
+}
+
+
+sub end_handler
+{
+ my ($self, $tag, $line) = @_;
+ my ($i, $j);
+
+ return if $tag eq "h3";
+
+ if($tag eq "body") {
+ $self->handler(text => "");
+ $self->handler(comment => "" );
+ $self->handler(default => "" );
+ $self->handler(start => "");
+ $self->handler(end => "");
+
+ return;
+ }
+
+ $i = find_tag $tag, $line;
+ die "line $line: no matching opening tag for $tag found\n" unless $i;
+
+ if($tag eq "em") {
+ $i = pop @t;
+ pop @t;
+ push @t, [ "", "\x11$i->[1]\x10" ];
+ }
+ elsif($tag eq "a") {
+ $i = pop @t;
+ $j = pop @t;
+ if($j->[2]) {
+ # name
+ die "line $line: label $j->[2] too long (max. 32)\n" if length($j->[2]) > 32;
+ die "line $line: label $j->[2] already exists\n" if $label{$j->[2]};
+ $label{$j->[2]} = 1;
+ push @t, [ "", "\x04\x12$j->[2]\x14$i->[1]\x10" ];
+ }
+ elsif($j->[3]) {
+ # href
+ die "line $line: label $j->[3] too long (max. 32)\n" if length($j->[3]) > 32;
+ $ref{$j->[3]}++;
+ push @t, [ "", "\x12$j->[3]\x13" . nospaces($i->[1]) . "\x10" ];
+ }
+ else {
+ die "line $line: strange tag $tag\n";
+ }
+ }
+ else {
+ die "line $line: unexpected tag $tag\n";
+ }
+
+}
+
+
+sub find_tag
+{
+ my $i = @t - 1;
+
+ return undef if $i < 1;
+
+ return 1 if $t[$i][0] eq "" && $t[$i-1][0] eq $_[0];
+
+ die "line $_[1]: nested tags not supported\n";
+}
+
+
+# \x1f looks like a space but is not a space. This is useful
+# to prevent automatic line breaks.
+sub nospaces
+{
+ local $_;
+
+ $_ = shift;
+ s/\s/\x1f/g;
+
+ return $_;
+}
+
diff --git a/bin/html2utf8 b/bin/html2utf8
new file mode 100755
index 0000000..a5f927e
--- /dev/null
+++ b/bin/html2utf8
@@ -0,0 +1,18 @@
+#! /usr/bin/perl -i
+
+use Encode;
+use HTML::PullParser;
+
+sub enc_ent;
+
+
+while(<>) {
+ s/(&[^;]+;)/enc_ent($1)/ge;
+ print
+}
+
+
+sub enc_ent
+{
+ encode_utf8(HTML::PullParser->new(doc => \$_[0], text => 'dtext')->get_token->[0]);
+}
diff --git a/bin/keymapchars b/bin/keymapchars
new file mode 100755
index 0000000..04f3828
--- /dev/null
+++ b/bin/keymapchars
@@ -0,0 +1,37 @@
+#! /usr/bin/perl
+
+while(<>) {
+ if(/^\s*\[\s*\S+\s*(\S+)\s*(\S+)\s*(\S+)\s*\]/) {
+ $k{hex $1} = 1;
+ $k{hex $2} = 1;
+ $k{hex $3} = 1;
+ }
+}
+
+delete $k{0};
+
+@f = sort { $a <=> $b } (keys %k);
+
+print "-a ";
+
+for (@f) {
+ if(!defined($i)) {
+ printf "0x%02x", $_;
+ $sep = ',';
+ }
+ elsif($_ == $i + 1) {
+ $sep = '-';
+ }
+ else {
+ printf "-0x%02x", $i if $sep eq '-';
+ printf ",0x%02x", $_;
+ $sep = ',';
+ }
+
+ $i = $_;
+}
+
+printf "-0x%02x", $i if $sep eq '-';
+
+print "\n";
+
diff --git a/bin/keytab b/bin/keytab
new file mode 100755
index 0000000..9ab2cbf
--- /dev/null
+++ b/bin/keytab
@@ -0,0 +1,93 @@
+#! /usr/bin/perl
+
+use Encode;
+use Getopt::Long;
+
+sub get_table;
+sub do_enc;
+
+$opt_all = 0;
+$opt_enc = undef;
+$opt_uni = 0;
+
+GetOptions(
+ 'all' => \$opt_all,
+ 'enc=s' => \$opt_enc,
+ 'uni' => \$opt_uni,
+);
+
+$keytable = shift;
+
+@us_map{get_table "us"} = () unless $opt_all;
+@map = get_table $keytable;
+
+for (keys %us_map) {
+ delete $us_map{$_} if /\[\s*0x56/;
+}
+
+
+print "/keymap.$keytable [\n";
+for (@map) {
+ print $_ unless exists $us_map{$_};
+}
+print "] def\n";
+
+
+sub get_table
+{
+ local $_;
+ my ($kt, $map_idx, @map, @psmap, $x, $n, $s, $a);
+
+ $kt = shift;
+
+ open F, "loadkeys" . ($opt_uni ? " -u" : "") . " -m $kt |";
+ while(<F>) {
+ $map_idx = 0 if /u_short/;
+ if(/u_short\s+plain_map\[/) { $map_idx = 1; $key_idx = 0 }
+ if(/u_short\s+shift_map\[/) { $map_idx = 2; $key_idx = 0 }
+ if(/u_short\s+altgr_map\[/) { $map_idx = 3; $key_idx = 0 }
+ if($map_idx) {
+ if($opt_uni) {
+ while(/(0x[0-9a-f]{4}),/g) {
+ $x = $1;
+ $map[$key_idx][0] = $key_idx;
+ $map[$key_idx][$map_idx] = hex($x) if $x !~ /0xf/;
+ $map[$key_idx][$map_idx] = hex($x) & 0xff if $x =~ /0xf[0b]/;
+ $key_idx++;
+ }
+ }
+ else {
+ while(/(0xf\S{3}),/g) {
+ $x = $1;
+ $map[$key_idx][0] = $key_idx;
+ $map[$key_idx][$map_idx] = hex($x) & 0xff if $x =~ /0xf[0b]/;
+ $key_idx++;
+ }
+ }
+ }
+ }
+ close F;
+
+ for (@map) {
+ ($n, $s, $a) = ($_->[1], $_->[2], $_->[3]);
+ $a = 0 if $a == $n || $a == $s;
+ if($n || $s || $a) {
+ push @psmap, sprintf(" [ 0x%02x 0x%02x 0x%02x 0x%02x ]\n", $_->[0], do_enc($n), do_enc($s), do_enc($a));
+ }
+ }
+
+ @psmap;
+}
+
+
+sub do_enc
+{
+ my ($c);
+
+ $c = shift;
+
+ return $c unless $opt_enc;
+
+ return unpack("V", encode("utf32le", decode($opt_enc, chr($c))));
+}
+
diff --git a/bin/mk_keymap b/bin/mk_keymap
new file mode 100755
index 0000000..0814218
--- /dev/null
+++ b/bin/mk_keymap
@@ -0,0 +1,16 @@
+#! /bin/sh
+
+# create keymap files
+# usage: mk_keymap keymap
+
+m=$1
+enc=$2
+
+./bin/keytab --uni $m >keymap.$m.inc
+
+if [ -n "$enc" ] ; then
+ ./bin/keytab --enc=$enc $m >keymap.$m.inc_
+
+ cmp -s keymap.$m.inc_ keymap.$m.inc && rm keymap.$m.inc_
+fi
+
diff --git a/bin/trace_context b/bin/trace_context
new file mode 100755
index 0000000..c73861e
--- /dev/null
+++ b/bin/trace_context
@@ -0,0 +1,117 @@
+#! /usr/bin/perl
+
+#
+# trace 16/32 bit context switches and warn if we messed things up
+#
+
+use Getopt::Long;
+
+$opt_verbose = 0;
+
+GetOptions(
+ 'verbose|v' => \$opt_verbose
+);
+
+$ctx = 16;
+$line = 0;
+
+$err = 0;
+
+while(<>) {
+ chomp;
+
+ $line++;
+
+ $macro = 1 if /^\s*%macro/;
+ $macro = 0 if /^\s*%endmacro/;
+
+ s/\s*;.*$//;
+
+ $_ = "" if $macro || /^\s*%endmacro/;
+
+ push @line, [ $ctx, $_, $line ];
+
+ $ctx_cnt{$ctx}++;
+
+ if(!$macro) {
+ if(/^\s*(\S+):/) {
+ $label{$1}{ctx} = $ctx;
+ $label{$1}{line} = $line;
+ }
+
+ $ctx = $2 if /^\s*(switch_to_)?bits\s+(16|32)\s*$/;
+ $ctx = 32 if /^\s*pm_enter\s*$/;
+ $ctx = 16 if /^\s*pm_leave\s*$/;
+ $ctx = 32 if /^\s*gfx_enter\s*$/;
+ $ctx = 16 if /^\s*gfx_leave\s*$/;
+ }
+}
+
+$macro = 0;
+
+for $l (@line) {
+ $_ = $l->[1];
+
+ if(/^\s*(\S+:)?\s*(call|j[a-z]+)(\s+far)?\s+(\S+)/) {
+ $op = $2;
+ $dst = $4;
+ next if $dst eq '$';
+ if($label{$dst}) {
+ if($label{$dst}{ctx} != $l->[0]) {
+ printf "%5d: wrong context (%d -> %d): %s\n", $l->[2], $l->[0], $label{$dst}{ctx}, $_;
+ $err = 1;
+ }
+ }
+ else {
+ printf "%5d: no target: %s\n", $l->[2], $_ if $opt_verbose;
+ }
+
+ next;
+ }
+
+ if(/^\s*(\S+:)?\s*([rp]m32_call)\s+(\S+)/) {
+ $op = $2;
+ $dst = $3;
+
+ ($c0, $c1) = $op eq 'pm32_call' ? (16, 32) : (32, 16);
+
+ if($label{$dst}) {
+ if($label{$dst}{ctx} != $c1 || $l->[0] != $c0) {
+ printf "%5d: wrong context (%d -> %d): %s\n", $l->[2], $l->[0], $label{$dst}{ctx}, $_;
+ $err = 1
+ }
+ }
+ else {
+ printf "%5d: no target: %s\n", $l->[2], $_ if $opt_verbose;
+ }
+
+ next;
+ }
+
+
+ if(/^\s*(\S+:)?\s*(pm_enter|pm_leave)\s*$/) {
+ $op = $2;
+
+ $c = $op eq 'pm_enter' ? 16 : 32;
+
+ if($l->[0] != $c) {
+ printf "%5d: wrong context (%d): %s\n", $l->[2], $l->[0], $_;
+ $err = 1
+ }
+
+ next;
+ }
+
+}
+
+for (sort keys %label) {
+ if(/^prim_/ && $label{$_}{ctx} != 32) {
+ printf "%s: wrong context (16)\n", $_;
+ $err = 1;
+ }
+}
+
+printf " 32 bit: %d (of %d)\n", $ctx_cnt{32}, scalar(@line);
+
+exit $err;
+
diff --git a/bin/unpack_bootlogo b/bin/unpack_bootlogo
new file mode 100755
index 0000000..ec83d0b
--- /dev/null
+++ b/bin/unpack_bootlogo
@@ -0,0 +1,60 @@
+#! /usr/bin/perl
+
+sub unpack_bootlogo;
+
+$src = shift;
+$xdir = shift;
+
+unpack_bootlogo $src, $xdir;
+
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+sub unpack_bootlogo
+{
+ my ($dir, $tmp, $files, @files, @ext);
+ local $_;
+
+ $dir = shift;
+ $tmp = "$dir/bootlogo.unpacked";
+
+ mkdir "$tmp", 0755;
+ mkdir "$dir/$xdir", 0755 if $xdir;
+
+ @files = `cpio --quiet -t <$dir/bootlogo`;
+
+ system "cd $tmp; cpio --quiet -i <../bootlogo";
+
+ for (@files) {
+ chomp;
+ if(-k("$tmp/$_") && ! -l("$tmp/$_")) {
+ push @ext, $_;
+ undef $_;
+ }
+ }
+
+ if($xdir) {
+ rename "$dir/gfxboot.cfg", "$dir/$xdir/gfxboot.cfg.tmp" if -f "$dir/gfxboot.cfg";
+ system "chmod -t $tmp/$_ ; mv $tmp/$_ $dir/$xdir ; ln -s $xdir/$_ $tmp/$_" for @ext;
+ if(-f "$dir/$xdir/gfxboot.cfg.tmp") {
+ system "cat $dir/$xdir/gfxboot.cfg.tmp >>$dir/$xdir/gfxboot.cfg";
+ unlink "$dir/$xdir/gfxboot.cfg.tmp";
+ }
+ }
+ else {
+ rename "$dir/gfxboot.cfg", "$dir/gfxboot.cfg.tmp" if -f "$dir/gfxboot.cfg";
+ system "chmod -t $tmp/$_ ; mv $tmp/$_ $dir" for @ext;
+ if(-f "$dir/gfxboot.cfg.tmp") {
+ system "cat $dir/gfxboot.cfg.tmp >>$dir/gfxboot.cfg";
+ unlink "$dir/gfxboot.cfg.tmp";
+ }
+ }
+
+ open P, "| cd $tmp; cpio --quiet -o >../bootlogo";
+ print P "$_\n" for grep $_, @files;
+ if($xdir) { print P "$_\n" for @ext }
+ close P;
+
+ system "rm -rf $tmp";
+
+ return ( 'bootlogo', @ext );
+}
+
diff --git a/bin2c.c b/bin2c.c
new file mode 100644
index 0000000..86b836a
--- /dev/null
+++ b/bin2c.c
@@ -0,0 +1,37 @@
+#include <stdio.h>
+#include <stdlib.h>
+
+int main(int argc, char **argv)
+{
+ int i, j = 0;
+ FILE *f;
+
+ if(argc > 1) {
+ if(!(f = fopen(argv[1], "r"))) {
+ perror(argv[1]);
+ return 1;
+ }
+ }
+ else {
+ fprintf(stderr, "usage: bin2c file\n");
+ return 2;
+ }
+
+ printf("unsigned char %s_data[] = {\n", argv[1]);
+
+ while((i = fgetc(f)) != EOF) {
+ i = i & 0xff;
+ if(!j++) {
+ printf(" ");
+ }
+ else {
+ printf(",%s", (j & 7) != 1 ? "" : "\n ");
+ }
+ printf(" 0x%02x", i);
+ }
+
+ printf("\n};\n");
+
+ return 0;
+}
+
diff --git a/bincode.asm b/bincode.asm
new file mode 100644
index 0000000..ca96944
--- /dev/null
+++ b/bincode.asm
@@ -0,0 +1,17258 @@
+ bits 32
+
+ extern jpeg_get_size
+ extern jpeg_decode
+
+ global _start
+
+%define debug 1
+
+%include "vocabulary.inc"
+%include "modplay_defines.inc"
+%include "jpeg.inc"
+
+
+; some type definitions from mkbootmsg.c
+; struct file_header_t
+fh_magic_id equ 0
+fh_version equ 4
+fh_res_1 equ 5
+fh_res_2 equ 6
+fh_res_3 equ 7
+fh_bincode equ 8
+fh_bincode_size equ 12
+fh_bincode_crc equ 16
+fh_dict equ 20
+fh_code equ 24
+fh_code_size equ 28
+sizeof_file_header_t equ 32
+
+
+; font file header definition
+foh.magic equ 0
+foh.entries equ 4
+foh.height equ 8
+foh.baseline equ 9
+foh.line_height equ 10
+foh.size equ 11
+
+
+; char bitmap definitions
+; must match values in mkblfont.c
+cbm_gray_bits equ 4
+cbm_gray_bit_count equ 3
+
+cbm_max_gray equ (1 << cbm_gray_bits) - 3
+cbm_rep_black equ cbm_max_gray + 1
+cbm_rep_white equ cbm_max_gray + 2
+
+
+; struct playlist
+pl_file equ 0 ; actually file index + 1
+pl_loop equ 1
+pl_res1 equ 2
+pl_res2 equ 3
+pl_start equ 4
+pl_current equ 8
+pl_end equ 12
+sizeof_playlist equ 16
+playlist_entries equ 4
+
+
+; struct link
+li.label equ 0
+li.text equ 4
+li.x equ 8
+li.row equ 10
+li.size equ 12 ; search for 'li.size'!
+link_entries equ 64
+
+
+; sysconfig data (64 bytes [sc.size])
+sc.bootloader equ 0
+sc.sector_shift equ 1
+sc.media_type equ 2
+sc.failsafe equ 3
+sc.sysconfig_size equ 4
+sc.boot_drive equ 5
+sc.callback equ 6
+sc.bootloader_seg equ 8
+sc.serial_port equ 10
+sc.user_info_0 equ 12
+sc.user_info_1 equ 16
+sc.bios_mem_size equ 20
+sc.xmem_0 equ 24
+sc.xmem_1 equ 26
+sc.xmem_2 equ 28
+sc.xmem_3 equ 30
+sc.file equ 32
+sc.archive_start equ 36
+sc.archive_end equ 40
+sc.mem0_start equ 44
+sc.mem0_end equ 48
+sc.xmem_start equ 52
+sc.xmem_end equ 56
+sc.features equ 60
+sc.reserved_1 equ 62
+sc.cwd equ 64
+sc.size equ 68
+sc.size_64 equ 64 ; supports xmem_* & feature flags
+sc.size_68 equ 68 ; supports cwd
+
+
+; enum_type_t
+t_none equ 0
+t_int equ 1
+t_unsigned equ 2
+t_bool equ 3
+t_string equ 4
+t_code equ 5
+t_ret equ 6
+t_prim equ 7
+t_sec equ 8
+t_dict_idx equ 9
+t_array equ 10
+t_end equ 11
+t_ptr equ 12
+
+t_if equ t_code + 10h
+t_loop equ t_code + 20h
+t_repeat equ t_code + 30h
+t_for equ t_code + 40h
+t_forall equ t_code + 50h
+t_exit equ t_code + 60h
+
+
+param_stack_size equ 1000
+ret_stack_size equ 1000
+
+
+; various error codes
+pserr_ok equ 0
+pserr_nocode equ 1
+pserr_invalid_opcode equ 2
+pserr_pstack_underflow equ 3
+pserr_pstack_overflow equ 4
+pserr_rstack_underflow equ 5
+pserr_rstack_overflow equ 6
+pserr_invalid_dict equ 7
+pserr_wrong_arg_types equ 8
+pserr_div_by_zero equ 9
+pserr_invalid_rstack_entry equ 0ah
+pserr_invalid_range equ 0bh
+pserr_invalid_exit equ 0ch
+pserr_invalid_image_size equ 0dh
+pserr_no_memory equ 0eh
+pserr_invalid_data equ 0fh
+pserr_nop equ 10h
+pserr_invalid_function equ 11h
+pserr_invalid_dict_entry equ 200h
+pserr_invalid_prim equ 201h
+
+keyBS equ 08h
+keyLeft equ 4bh ; scan code
+keyRight equ 4dh ; scan code
+keyHome equ 47h ; scan code
+keyEnd equ 4fh ; scan code
+keyDel equ 53h ; scan code
+
+max_text_rows equ 128
+
+mhead.memsize equ 0
+mhead.ip equ 4
+mhead.used equ 8 ; bit 7
+mhead.rem equ 8 ; bit 0..6
+mhead.size equ 9
+
+ section .text
+
+_start:
+
+; jmp table to interface functions
+jt_init dw gfx_init
+jt_done dw gfx_done
+jt_input dw gfx_input
+jt_menu_init dw gfx_menu_init
+jt_infobox_init dw gfx_infobox_init
+jt_infobox_done dw gfx_infobox_done
+jt_progress_init dw gfx_progress_init
+jt_progress_done dw gfx_progress_done
+jt_progress_update dw gfx_progress_update
+jt_progress_limit dw gfx_progress_limit
+jt_password_init dw gfx_password_init
+jt_password_done dw gfx_password_done
+
+ align 4, db 0
+file.start dd 0 ; the file we are in
+
+archive.start dd 0 ; archive start address (0 -> none)
+archive.end dd 0 ; archive end
+
+mem0.start dd 0 ; free low memory area start
+mem0.end dd 0 ; dto, end
+
+malloc.areas equ 5
+malloc.start dd 0
+malloc.end dd 0
+ ; start, end pairs
+malloc.area times malloc.areas * 2 dd 0
+
+vbe_buffer dd 0 ; (lin) buffer for vbe calls
+vbe_mode_list dd 0 ; (lin) list with (up to 100h) vbe modes
+vbe_info_buffer dd 0 ; (lin) buffer for vbe gfx card info
+infobox_buffer dd 0 ; (lin) temp buffer for InfoBox messages
+
+local_stack dd 0 ; ofs local stack (8k)
+local_stack.ofs equ local_stack
+local_stack.seg dw 0 ; dto, seg
+old_stack dd 0 ; store old esp value
+old_stack.ofs equ old_stack
+old_stack.seg dw 0 ; dto, ss
+stack.size dd 0 ; in bytes
+tmp_stack_val dw 0 ; needed for stack switching
+
+pscode_start dd 0 ; (lin)
+pscode_size dd 0
+pscode_instr dd 0 ; (lin) current instruction (rel. to pscode_start)
+pscode_next_instr dd 0 ; (lin) next instruction
+; for debugging only
+pscode_next_break dd 0 ; (lin) break at this instruction
+pscode_eval dd 0 ; opcode from exec instruction
+pscode_error_arg_0 dd 0
+pscode_error_arg_1 dd 0
+pscode_arg dd 0 ; current arg
+pscode_error dw 0 ; error code (if any)
+pscode_type db 0 ; current instr type
+
+ align 4, db 0
+dict dd 0 ; lin
+dict.size dd 0 ; dict entries
+
+boot.base dd 0 ; bootloader segment
+boot.sysconfig dd 0 ; bootloader parameter block
+boot.callback dd 0 ; seg:ofs
+
+pstack dd 0 ; data stack
+pstack.size dd 0 ; entries
+pstack.ptr dd 0 ; index of current tos
+rstack dd 0 ; code stack
+rstack.size dd 0 ; entries
+rstack.ptr dd 0 ; index of current tos
+
+image dd 0 ; (lin) current image
+image_width dw 0
+image_height dw 0
+image_type db 0 ; 0:no image, 1: pcx, 2:jpeg
+
+pcx_line_starts dd 0 ; (lin) table of line starts
+jpg_static_buf dd 0 ; (lin) tmp data for jpeg decoder
+
+screen_width dw 0
+screen_height dw 0
+screen_vheight dw 0
+screen_mem dw 0 ; mem in 64k
+screen_line_len dd 0
+
+setpixel dd setpixel_8 ; function that sets one pixel
+setpixel_a dd setpixel_a_8 ; function that sets one pixel
+setpixel_t dd setpixel_8 ; function that sets one pixel
+setpixel_ta dd setpixel_a_8 ; function that sets one pixel
+getpixel dd getpixel_8 ; function that gets one pixel
+
+
+transp dd 0 ; transparency
+
+ align 4, db 0
+; current font description
+font dd 0 ; (lin)
+font.entries dd 0 ; chars in font
+font.height dw 0
+font.baseline dw 0
+font.line_height dw 0
+font.properties db 0 ; bit 0: pw mode (show '*')
+font.res1 db 0 ; alignment
+
+; console font
+cfont.lin dd 0 ; console font bitmap
+cfont_height dd 0
+con_x dw 0 ; cursor pos in pixel
+con_y dw 0 ; cursor pos in pixel, *must* follow con_x
+
+
+; current char description
+chr.buf dd 0 ; buffer for antialiased fonts
+chr.buf_len dd 0
+chr.pixel_buf dd 0
+chr.data dd 0 ; encoded char data
+chr.bitmap dd 0 ; start of encoded bitmap; bit offset rel to chr.data
+chr.bitmap_width dw 0
+chr.bitmap_height dw 0
+chr.x_ofs dw 0
+chr.y_ofs dw 0 ; rel. to baseline
+chr.x_advance dw 0
+chr.type db 0 ; 0 = bitmap, 1: gray scale
+
+chr.gray_values:
+%assign i 0
+%rep cbm_max_gray + 1
+ db (i * 255)/cbm_max_gray
+%assign i i + 1
+%endrep
+
+utf8_buf times 8 db 0
+
+; pointer to currently active palette (3*100h bytes)
+gfx_pal dd 0 ; (lin)
+; pointer to tmp area (3*100h bytes)
+gfx_pal_tmp dd 0 ; (lin)
+; number of fixed pal values
+pals dw 0
+
+; the current gfx mode
+gfx_mode dw 3
+; != 0 if we're using a vbe mode (hi byte of gfx_mode)
+vbe_active equ gfx_mode + 1
+pixel_bits db 0 ; pixel size (8 or 16)
+color_bits db 0 ; color bits (8, 15 or 16)
+pixel_bytes dd 0 ; pixel size in bytes
+
+; segment address of writeable window
+window_seg_w dw 0
+; segment address of readable window (= gfx_window_seg_w if 0)
+window_seg_r dw 0
+; ganularity units per window
+window_inc db 0
+; currently mapped window
+mapped_window db 0
+
+; cursor position
+gfx_cur equ $ ; both x & y
+gfx_cur_x dw 0
+gfx_cur_y dw 0 ; must follow gfx_cur_x
+gfx_width dw 0
+gfx_height dw 0
+line_wrap dd 0
+gfx_indent dw 0
+
+; clip region (incl)
+clip_l dw 0 ; left, incl
+clip_r dw 0 ; right, excl
+clip_t dw 0 ; top, incl
+clip_b dw 0 ; bottom, excl
+
+line_x0 dd 0
+line_y0 dd 0
+line_x1 dd 0
+line_y1 dd 0
+line_tmp dd 0
+line_tmp2 dd 0
+
+ align 4, db 0
+gfx_color dd 0 ; current color
+gfx_color0 dd 0 ; color #0 (normal color))
+gfx_color1 dd 0 ; color #1 (highlight color)
+gfx_color2 dd 0 ; color #2 (link color)
+gfx_color3 dd 0 ; color #3 (selected link color)
+gfx_color_rgb dd 0 ; current color (rgb)
+transparent_color dd -1
+char_eot dd 0 ; 'end of text' char
+last_label dd 0 ; lin
+page_title dd 0 ; lin
+max_rows dd 0 ; max. number of text rows
+cur_row dd 0 ; current text row (0 based)
+cur_row2 dd 0 ; dto, only during formatting
+start_row dd 0 ; start row for text output
+cur_link dd 0 ; link count
+sel_link dd 0 ; selected link
+txt_state db 0 ; bit 0: 1 = skip text
+ ; bit 1: 1 = text formatting only
+textmode_color db 7 ; fg color for text (debug) output
+keep_mode db 0 ; keep video mode in gfx_done
+
+ align 4, db 0
+
+idle.draw_buffer dd 0 ; some drawing buffer
+idle.data1 dd 0 ; some data
+idle.data2 dd 0 ; some more data
+idle.run db 0 ; run idle loop
+idle.invalid db 0 ; idle loop has been left
+
+ align 4, db 0
+fname.tmp dd 0 ; tmp buffer for fname processing
+fname.abs dd 0 ; tmp buffer for abs fname processing
+fname.cwd dd 0 ; current working dir
+fname.sys_cwd dd 0 ; real cwd (bootloader's view)
+fname.size equ 256 ; buffer size of fname.*
+
+ align 4, db 0
+row_text times max_text_rows dd 0
+ind_text times max_text_rows dw 0
+
+ ; note: link_list relies on row_start
+link_list times li.size * link_entries db 0
+
+ ; max label size: 32
+label_buf times 35 db 0
+
+; buffer for number conversions
+; must be large enough for ps_status_info()
+num_buf times 23h db 0
+num_buf_end db 0
+
+; temp data for printf
+tmp_write_data times 10h dd 0
+tmp_write_num dd 0
+tmp_write_sig db 0
+tmp_write_cnt db 0
+tmp_write_pad db 0
+
+pf_gfx db 0
+pf_gfx_raw_char db 0
+pf_gfx_err dw 0
+ align 4, db 0
+pf_gfx_buf dd 0
+pf_gfx_max dd 0
+pf_gfx_cnt dd 0
+
+input_notimeout db 0
+ align 4, db 0
+input_timeout_start dd 0
+input_timeout dd 0
+
+progress_max dd 0
+progress_current dd 0
+
+edit_x dw 0
+edit_y dw 0
+edit_width dw 0
+edit_height dw 0
+edit_bg dd 0 ; (lin)
+edit_buf dd 0 ; (lin)
+edit_buf_len dw 0
+edit_buf_ptr dw 0
+edit_flags dd 0 ; bit 0: cursor visible
+ ; bit 1: complete redraw needed
+edit_saved_cursor dd 0 ; (lin)
+edit_cursor dw 0 ; cursor pos in pixel
+edit_shift dw 0
+edit_y_ofs dw 0
+edit_length dw 0 ; string length in pixel
+
+kbd_status dw 0
+
+sl.port equ 0
+sl.baud equ 2
+sl.scancode equ 4
+sl.status equ 5 ; bits:
+ ; 0: valid config
+ ; 1: input received
+ ; 2: baud autodetect
+sl.recv_mask equ 6 ; for autodetect
+sl.recv_cnt equ 7 ; dto.
+sl.baud_idx equ 8 ; dto.
+sl.size equ 9
+
+ ; 5 serial lines
+serial.lines.max equ 5
+serial.lines times serial.lines.max * sl.size db 0
+
+serial.port_noinit dw 0 ; port that was setup by bootloader
+serial.key dd 0 ; serial input
+
+ ; baud divisors
+serial.baud_tab db 1, 3, 6, 12, 0
+
+sound_buf_size equ 4*1024
+sound_buf_mask equ sound_buf_size - 1
+
+
+ align 4, db 0
+sound_unpack_buf dd 0 ; buffer for unpacked sound samples
+sound_unpack_buf_size dd 0
+cnt0_acc dw 0
+cnt0_start_val dw 0
+sound_old_int8 dd 0
+sound_vol db 0
+sound_ok db 0
+sound_int_active db 0
+sound_playing db 0 ; bits 0-3: mod, 4-7: wav
+sound_scale db 0
+sound_sample dd 0
+sound_buf dd 0 ; (seg:ofs)
+sound_buf.lin dd 0 ; buffer for sound player
+sound_start dd 0 ; rel. to sound_buf
+sound_end dd 0 ; rel. to sound_buf
+playlist times playlist_entries * sizeof_playlist db 0
+mod_buf dd 0 ; buffer for mod player
+int8_count dd 0
+wav_current dd 0 ; pointer to currently played way file
+wav_end dd 0 ; stop here
+wav_next dd 0 ; next sound sample
+wav_type db 0
+need_sound_update db 0
+
+ align 4, db 0
+
+ddc_external dd 0
+
+; temporary vars
+tmp_var_0 dd 0
+tmp_var_1 dd 0
+tmp_var_2 dd 0
+tmp_var_3 dd 0
+
+ ; display size list
+display_res.cnt dw 0
+display_res times 16 dw 0, 0
+display_res_pref dw 0, 0
+
+ align 2
+pm_idt dw 7ffh ; idt for pm
+.base dd 0
+rm_idt dw 0ffffh ; idt for real mode
+.base dd 0
+pm_gdt dw gdt_size-1 ; gdt for pm
+.base dd 0
+
+; real mode segment values
+rm_seg:
+.ss dw 0
+.cs dw 0
+.ds dw 0
+.es dw 0
+.fs dw 0
+.gs dw 0
+
+ align 4
+
+prog.base dd 0 ; our base address
+
+gdt dd 0, 0 ; null descriptor
+.4gb_d32 dd 0000ffffh, 00cf9300h ; 4GB segment, data, use32
+.4gb_c32 dd 0000ffffh, 00cf9b00h ; 4GB segment, code, use32
+ ; see gdt_init
+.prog_c32 dd 00000000h, 00409b00h ; our program as code, use32
+.prog_d16 dd 00000000h, 00009300h ; dto, data, use16
+.prog_c16 dd 00000000h, 00009b00h ; dto, code, use16
+.data_d16 dd 00000000h, 00009300h ; 64k segment, data, use16
+
+.screen_r16 dd 00000000h, 00009300h ; 64k screen, data, use16
+.screen_w16 dd 00000000h, 00009300h ; 64k screen, data, use16
+.tss dd 00000067h, 00008900h ; 104 byte minimal tss
+gdt_size equ $-gdt
+
+; gdt for pm switch
+pm_seg.4gb_d32 equ 8 ; covers all 4GB, default ss, es, fs, gs
+pm_seg.4gb_c32 equ 10h ; dto, but executable (for e.g., idt)
+pm_seg.prog_c32 equ 18h ; default cs, use32
+pm_seg.prog_d16 equ 20h ; default ds
+pm_seg.prog_c16 equ 28h ; default cs, use16
+pm_seg.data_d16 equ 30h ; free to use
+pm_seg.screen_r16 equ 38h ; graphics window, for reading
+pm_seg.screen_w16 equ 40h ; graphics window, for writing
+pm_seg.tss equ 48h ; tss
+
+%if debug
+; debug texts
+dmsg_01 db 10, 'Press a key to continue...', 0
+dmsg_02 db ' mem area %d: 0x%08x - 0x%08x', 10, 0
+dmsg_03 db '%4u: addr 0x%08x, size 0x%08x+%u, ip 0x%04x, %s', 10, 0
+dmsg_03a db ' ', 10, 0
+dmsg_04 db 'oops: block at 0x%08x: size 0x%08x is too small', 10, 0
+dmsg_04a db 'oops: 0x%08x > 0x%08x', 10, 0
+dmsg_06 db 'addr 0x%08x', 10, 0
+dmsg_07 db 'free', 0
+dmsg_08 db 'used', 0
+dmsg_09 db 'current dictionary', 10, 0
+dmsg_10 db ' %2u: type %u, val 0x%x', 10, 0
+
+%endif
+
+single_step db 0
+show_debug_info db 0
+dtrace_count db 0
+
+fms_cpio_swab db 0
+
+hello db 10, 'Initializing gfx code...', 10
+msg_0 db 0
+
+msg_10 db 0b3h, 'ip %4x: %8x.%x ', 0b3h, 10, 0
+msg_11 db 0b3h, '%2x: %8x.%2x', 0
+msg_12 db 0b3h, ' : ', 0
+msg_13 db 0dah, 0c4h, 0c4h, 0c4h, 0c4h, 'data'
+ times 7 db 0c4h
+ db 0c2h, 0c4h, 0c4h, 0c4h, 0c4h, 'prog'
+ times 7 db 0c4h
+ db 0bfh, 10, 0
+msg_14 db 0c3h
+ times 15 db 0c4h
+ db 0c1h
+ times 15 db 0c4h
+ db 0b4h, 10, 0
+msg_15 db 0c0h
+ times 31 db 0c4h
+ db 0d9h, 10, 0
+msg_16 db 0b3h, 10, 0
+msg_17 db 0b3h, 'err %3x ', 0b3h, 10, 0
+msg_18 db 0b3h, 'err %3x: %8x ', 0b3h, 10, 0
+msg_19 db 0b3h, 'err %3x: %8x %8x ', 0b3h, 10, 0
+msg_20 db 0b3h, 'ip %4x: %8x.%x %8x.%x ', 0b3h, 10, 0
+msg_21 db 0b3h, '%S', 0b3h, 10, 0
+
+ align 2, db 0
+ ; prim_function entries
+ prim_jump_table
+
+; menu entry descriptor
+menu_entries equ 0
+menu_default equ 2 ; seg:ofs
+menu_ent_list equ 6 ; seg:ofs
+menu_ent_size equ 10
+menu_arg_list equ 12 ; seg:ofs
+menu_arg_size equ 16
+sizeof_menu_desc equ 18
+
+; framebuffer mode list
+fb_mode equ 0 ; word
+fb_width equ 2 ; word
+fb_height equ 4 ; word, must follow fb_width
+fb_bits equ 6 ; byte
+fb_ok equ 7 ; monitor supports it
+sizeof_fb_entry equ 8
+
+; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+;
+; Some macros.
+;
+%macro pf_arg_uchar 2
+ and dword [tmp_write_data + %1 * 4],byte 0
+ mov [tmp_write_data + %1 * 4],%2
+%endmacro
+
+
+%macro pf_arg_ushort 2
+ and word [tmp_write_data + %1 * 4 + 2],byte 0
+ mov [tmp_write_data + %1 * 4],%2
+%endmacro
+
+
+%macro pf_arg_uint 2
+ mov [tmp_write_data + %1 * 4],%2
+%endmacro
+
+
+%macro pf_arg_char 2
+ push eax
+ movsx eax,%2
+ mov [tmp_write_data + %1 * 4],eax
+ pop eax
+%endmacro
+
+
+%macro pf_arg_short 2
+ push eax
+ movsx eax,%2
+ mov [tmp_write_data + %1 * 4],eax
+ pop eax
+%endmacro
+
+
+%macro pf_arg_int 2
+ mov [tmp_write_data + %1 * 4],%2
+%endmacro
+
+
+%macro pm_enter 0
+%%j_pm_1:
+ call switch_to_pm
+%%j_pm_2:
+ %if %%j_pm_2 - %%j_pm_1 != 3
+ %error "pm_enter: not in 16 bit mode"
+ %endif
+
+ bits 32
+%endmacro
+
+
+%macro pm_leave 0
+%%j_pm_1:
+ call switch_to_rm
+%%j_pm_2:
+ %if %%j_pm_2 - %%j_pm_1 != 5
+ %error "pm_leave: not in 32 bit mode"
+ %endif
+
+ bits 16
+%endmacro
+
+
+%macro gfx_enter 0
+ call _gfx_enter
+ bits 32
+%endmacro
+
+
+%macro gfx_leave 0
+ call _gfx_leave
+ bits 16
+%endmacro
+
+
+%macro rm32_call 1
+ pm_leave
+ call %1
+ pm_enter
+%endmacro
+
+
+%macro pm32_call 1
+ pm_enter
+ call %1
+ pm_leave
+%endmacro
+
+
+%macro wait32 0
+ pushf
+ push ecx
+ push eax
+ mov ecx,10000000
+%%wait32_10:
+ in al,80h
+ loop %%wait32_10
+ pop eax
+ pop ecx
+ popf
+%endmacro
+
+
+%macro is_dotdot 1
+ cmp dword [%1],'/../'
+ jz %%idd_90
+ cmp dword [%1],'/..'
+%%idd_90:
+%endmacro
+
+
+; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+;
+; Interface functions.
+;
+; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+; Setup internal data structures.
+;
+; esi sysconfig data
+;
+; return:
+; CF error
+;
+
+ bits 16
+
+gfx_init:
+ ; don't change stack layout - see gfx_enter
+ push fs
+ push es
+ push ds
+
+ push cs
+ pop ds
+
+ cld
+
+ mov [boot.sysconfig],esi
+
+ ; setup gdt, to get pm-switching going
+ call gdt_init
+
+ ; we can run in protected mode but can't handle ints until
+ ; after pm_init
+ cli
+
+ xor ecx,ecx
+ dec cx
+
+ pm_enter
+
+ ; some via cpus have problems with pm switching (bug #231104), so:
+ ; checking whether pm switch really worked...
+ inc ecx
+ jnz gfx_init_10
+
+ ; ... apparently not; try to get out
+ cmc
+ jnc $+2
+ cmc
+ jnc $+2
+ jz $+2
+
+ pm_leave
+
+ cmc
+ jnc $+2
+ cmc
+ jnc $+2
+ jz $+2
+
+ stc
+
+ pop ds
+ pop es
+ pop fs
+
+ sti
+
+ retf
+
+ bits 32
+
+gfx_init_10:
+ mov esi,[boot.sysconfig]
+ movzx eax,word [es:esi+sc.bootloader_seg]
+ shl eax,4
+ mov [boot.base],eax
+
+ push dword [es:esi+sc.file]
+ pop dword [file.start]
+ push dword [es:esi+sc.archive_start]
+ pop dword [archive.start]
+ push dword [es:esi+sc.archive_end]
+ pop dword [archive.end]
+ push dword [es:esi+sc.mem0_start]
+ pop dword [mem0.start]
+ push dword [es:esi+sc.mem0_end]
+ pop dword [mem0.end]
+ mov ax,[es:esi+sc.serial_port]
+ mov [serial.port_noinit],ax
+
+ mov eax,[es:esi+sc.callback]
+ or ax,ax ; check only offset
+ jz gfx_init_20
+ mov [boot.callback],eax
+gfx_init_20:
+
+ ; init malloc memory chain
+
+ push dword [mem0.start]
+ pop dword [malloc.area]
+ push dword [mem0.end]
+ pop dword [malloc.area+4]
+
+ mov ebx,[boot.sysconfig]
+ cmp byte [es:ebx+sc.sysconfig_size],sc.size_64
+ jb gfx_init_28
+ ; pass back feature flags
+ mov word [es:ebx+sc.features],3
+ ; only one xmem area
+ mov eax,[es:ebx+sc.xmem_start]
+ mov edx,[es:ebx+sc.xmem_end]
+ cmp edx,eax
+ jbe gfx_init_28
+ ; ok, use only this one
+ mov [malloc.area+8],eax
+ mov [malloc.area+8+4],edx
+ jmp gfx_init_40
+
+gfx_init_28:
+ ; old way to specify extended mem areas
+ mov esi,malloc.area+8
+ mov ecx,malloc.areas-1 ; extended mem areas
+gfx_init_30:
+ movzx eax,word [es:ebx+sc.xmem_0] ; extended mem area pointer
+ or eax,eax
+ jz gfx_init_40
+ mov edx,eax
+ and dl,~0fh
+ shl edx,16
+
+ and eax,0fh
+ shl eax,20
+ add eax,edx
+ mov [esi+4],eax
+
+ ; magic: if archive was loaded in high memory, exclude it
+ cmp edx,[archive.start]
+ jnz gfx_init_35
+ mov edx,[archive.end]
+gfx_init_35:
+ mov [esi],edx
+
+ add esi,8
+ add ebx,2
+ dec ecx
+ jnz gfx_init_30
+
+gfx_init_40:
+ call malloc_init
+
+ ; setup full pm interface
+ ; can't do it earlier - we need malloc
+ call pm_init
+
+ ; allocate 8k local stack
+
+ mov eax,8 << 10
+ mov [stack.size],eax
+ add eax,3
+ call calloc
+ ; dword align
+ add eax,3
+ and eax,~3
+ jnz gfx_init_50
+ cmp eax,100000h ; must be low memory
+ jb gfx_init_50
+ ; malloc failed - keep stack
+ push word [rm_seg.ss]
+ pop word [local_stack.seg]
+ mov eax,esp
+ mov [local_stack.ofs],eax
+ jmp gfx_init_51
+gfx_init_50:
+ mov edx,eax
+ and eax,0fh
+ add eax,[stack.size]
+ mov [local_stack.ofs],eax
+ shr edx,4
+ mov [local_stack.seg],dx
+
+gfx_init_51:
+
+ ; now we really start...
+ pm_leave
+
+ sti
+ call use_local_stack
+
+ pm_enter
+
+ mov esi,hello
+ call printf
+
+ ; get initial keyboard state
+ push word [es:417h]
+ pop word [kbd_status]
+
+ mov eax,[boot.sysconfig]
+ mov al,[es:eax+sc.failsafe]
+ test al,1
+ jz gfx_init_58
+
+ xor ebx,ebx
+
+gfx_init_55:
+ pf_arg_uchar 0,bl
+ mov eax,[malloc.area+8*ebx]
+ pf_arg_uint 1,eax
+ mov eax,[malloc.area+8*ebx+4]
+ pf_arg_uint 2,eax
+
+ or eax,eax
+ jz gfx_init_57
+
+ push ebx
+ mov esi,dmsg_02
+ call printf
+ pop ebx
+
+ inc ebx
+ cmp ebx,malloc.areas
+ jb gfx_init_55
+
+gfx_init_57:
+
+ mov esi,dmsg_01
+ call printf
+ call get_key
+
+gfx_init_58:
+
+ ; alloc memory for palette data
+ call pal_init
+ jc gfx_init_90
+
+ mov eax,200h
+ call calloc
+ cmp eax,1
+ jc gfx_init_90
+ mov [vbe_buffer],eax
+
+ mov eax,100h
+ call calloc
+ cmp eax,1
+ jc gfx_init_90
+ mov [vbe_info_buffer],eax
+
+ mov eax,sound_buf_size
+ call calloc
+ cmp eax,1
+ jc gfx_init_90
+ mov [sound_buf.lin],eax
+ mov edx,eax
+ and eax,~0fh
+ shl eax,12
+ and edx,0fh
+ mov ax,dx
+ mov [sound_buf],eax
+
+ ; those must be low memory addresses:
+ mov eax,[gfx_pal_tmp]
+ or eax,[vbe_buffer]
+ or eax,[vbe_info_buffer]
+ or eax,[sound_buf.lin]
+ cmp eax,100000h
+ cmc
+ jc gfx_init_90
+
+ call dict_init
+ jc gfx_init_90
+
+ call stack_init
+ jc gfx_init_90
+
+ mov eax,[file.start]
+ mov esi,eax
+ add eax,[es:esi+fh_code]
+ mov [pscode_start],eax
+ mov eax,[es:esi+fh_code_size]
+ mov [pscode_size],eax
+
+ ; now the ps interpreter is ready to run
+
+ ; jpg decoding buffer
+ call jpg_setup
+ jc gfx_init_90
+
+ mov eax,100h
+ call calloc
+ cmp eax,1
+ jc gfx_init_90
+ mov [infobox_buffer],eax
+
+ mov eax,200h
+ call calloc
+ cmp eax,1
+ jc gfx_init_90
+ mov [vbe_mode_list],eax
+
+ mov eax,fname.size * 4
+ call calloc
+ cmp eax,1
+ jc gfx_init_90
+ mov [fname.tmp],eax
+ add eax,fname.size
+ mov [fname.abs],eax
+ add eax,fname.size
+ mov [fname.cwd],eax
+ add eax,fname.size
+ mov [fname.sys_cwd],eax
+
+ ; fill list
+ call get_vbe_modes
+
+ ; get console font
+ call cfont_init
+
+ ; get cwd
+ call get_sys_cwd
+ call chdir
+ ; copy canonical path back to sys_cwd
+ mov esi,[fname.cwd]
+ mov edi,[fname.sys_cwd]
+ mov ecx,fname.size
+ es rep movsb
+
+ ; store pointer to fname.cwd in config area
+
+ mov eax,[boot.sysconfig]
+ cmp byte [es:eax+sc.sysconfig_size],sc.size_68
+ jb gfx_init_585
+ mov edx,[fname.cwd]
+ mov [es:eax+sc.cwd],edx
+gfx_init_585:
+
+ ; ok, we've done it, now continue the setup
+
+ mov eax,[boot.sysconfig]
+ mov al,[es:eax+sc.failsafe]
+ test al,1
+ jz gfx_init_59
+
+ call dump_malloc
+ mov esi,dmsg_01
+ call printf
+ call get_key
+
+gfx_init_59:
+
+ ; run global code
+ xor eax,eax
+ mov [pstack.ptr],eax
+ mov [rstack.ptr],eax
+ call run_pscode
+ jc gfx_init_60
+
+ ; check for true/false on stack
+ ; (empty stack == true)
+
+ xor ecx,ecx
+ call get_pstack_tos
+ cmc
+ jnc gfx_init_90
+ cmp dl,t_bool
+ jnz gfx_init_70
+ cmp eax,1
+ jz gfx_init_90
+ jmp gfx_init_70
+
+gfx_init_60:
+ call ps_status_info
+ call get_key
+gfx_init_70:
+ call gfx_done_pm
+ stc
+
+gfx_init_90:
+ gfx_leave ; does not return
+
+
+; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+; Finish gfx code.
+;
+
+ bits 16
+
+gfx_done:
+ gfx_enter
+
+ call gfx_done_pm
+
+ gfx_leave ; does not return
+
+
+; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+ bits 32
+
+gfx_done_pm:
+ call sound_done
+
+ cmp byte [keep_mode],0
+ jnz gfx_done_pm_90
+ mov ax,3
+ int 10h
+gfx_done_pm_90:
+ ret
+
+
+; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+; Input a text line.
+;
+; edi buffer (0: no buffer)
+; ecx buffer size
+; eax timeout value (0: no timeout)
+;
+; return:
+; eax action (1, 2: textmode, boot)
+; ebx selected menu entry (-1: none)
+;
+
+ bits 16
+
+gfx_input:
+ gfx_enter
+
+ push edi
+ push ecx
+
+ cmp byte [input_notimeout],0
+ jnz gfx_input_10
+ mov [input_timeout],eax
+ mov [input_timeout_start],eax
+gfx_input_10:
+
+ call clear_kbd_queue
+
+gfx_input_20:
+ call get_key_to
+ and dword [input_timeout],0 ; disable timeout
+
+ push eax
+ mov ecx,cb_KeyEvent
+ call get_dict_entry
+ pop ecx
+ jc gfx_input_90
+
+ cmp dl,t_code
+ stc
+ jnz gfx_input_90
+
+ push eax
+ mov eax,ecx
+ mov dword [pstack.ptr],1
+ mov dl,t_int
+ xor ecx,ecx
+ call set_pstack_tos
+ mov dword [rstack.ptr],1
+ xor ecx,ecx
+ mov dl,t_code
+ stc
+ sbb eax,eax
+ call set_rstack_tos
+ pop eax
+
+ call run_pscode
+ jnc gfx_input_50
+
+ call ps_status_info
+ call get_key
+ stc
+ jmp gfx_input_90
+
+gfx_input_50:
+ mov ecx,2
+ call get_pstack_tos
+ jc gfx_input_90
+ cmp dl,t_string
+ stc
+ jnz gfx_input_90
+
+ pop ecx
+ pop edi
+ push edi
+ push ecx
+
+ or edi,edi
+ jz gfx_input_70
+ or ecx,ecx
+ jz gfx_input_70
+
+ mov esi,eax
+gfx_input_60:
+ es lodsb
+ stosb
+ or al,al
+ loopnz gfx_input_60
+ mov byte [es:edi-1],0
+
+gfx_input_70:
+ mov ecx,1
+ call get_pstack_tos
+ jc gfx_input_90
+ cmp dl,t_int
+ stc
+ jnz gfx_input_90
+
+ xor ecx,ecx
+ push eax
+ call get_pstack_tos
+ pop ebx
+ jc gfx_input_90
+ cmp dl,t_int
+ stc
+ jnz gfx_input_90
+
+ or eax,eax
+ jz gfx_input_20
+
+gfx_input_90:
+
+ pop ecx
+ pop edi
+
+ gfx_leave ; does not return
+
+
+; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+; Setup boot menu entries.
+;
+; esi menu description
+;
+
+ bits 16
+
+gfx_menu_init:
+ gfx_enter
+
+ push esi
+ movzx eax,word [es:esi+menu_entries]
+ push eax
+ lea eax,[eax+4*eax+2]
+ push eax
+ call calloc
+ mov [tmp_var_2],eax
+ pop eax
+ call calloc
+ mov [tmp_var_1],eax
+ pop ecx
+ pop esi
+ or eax,eax
+ jz gfx_menu_init_90
+ cmp dword [tmp_var_2],0
+ jz gfx_menu_init_90
+
+ push ecx
+
+ mov ebx,[tmp_var_1]
+ mov [es:ebx],cx
+ add ebx,2
+ movzx eax,word [es:esi+menu_ent_list]
+ movzx edi,word [es:esi+menu_ent_list+2]
+ shl edi,4
+ add edi,eax
+ cmp esi,1 << 20
+ jb .low_mem
+ mov edi,[es:esi+menu_ent_list]
+.low_mem:
+ or ecx,ecx
+ jz gfx_menu_init_45
+gfx_menu_init_40:
+ mov byte [es:ebx],t_string
+ mov [es:ebx+1],edi
+ add ebx,5
+ movzx eax,word [es:esi+menu_ent_size]
+ add edi,eax
+ loop gfx_menu_init_40
+gfx_menu_init_45:
+
+ pop ecx
+
+ mov ebx,[tmp_var_2]
+ mov [es:ebx],cx
+ add ebx,2
+
+ movzx eax,word [es:esi+menu_arg_list]
+ movzx edi,word [es:esi+menu_arg_list+2]
+ shl edi,4
+ add edi,eax
+ cmp esi,1 << 20
+ jb .low_mem
+ mov edi,[es:esi+menu_arg_list]
+.low_mem:
+ or ecx,ecx
+ jz gfx_menu_init_55
+gfx_menu_init_50:
+ mov byte [es:ebx],t_string
+ mov [es:ebx+1],edi
+ add ebx,5
+ movzx eax,word [es:esi+menu_arg_size]
+ add edi,eax
+ loop gfx_menu_init_50
+gfx_menu_init_55:
+
+ movzx eax,word [es:esi+menu_default]
+ movzx edi,word [es:esi+menu_default+2]
+ shl edi,4
+ add eax,edi
+ cmp esi,1 << 20
+ jb .low_mem
+ mov eax,[es:esi+menu_default]
+.low_mem:
+ mov [tmp_var_3],eax
+
+ mov ecx,cb_MenuInit
+ call get_dict_entry
+ jc gfx_menu_init_90
+
+ cmp dl,t_code
+ stc
+ jnz gfx_menu_init_90
+
+ push eax
+
+ mov dword [pstack.ptr],3
+
+ mov eax,[tmp_var_1]
+ mov dl,t_array
+ mov ecx,2
+ call set_pstack_tos
+
+ mov eax,[tmp_var_2]
+ mov dl,t_array
+ mov ecx,1
+ call set_pstack_tos
+
+ mov eax,[tmp_var_3]
+ mov dl,t_string
+ xor ecx,ecx
+ call set_pstack_tos
+
+ mov dword [rstack.ptr],1
+ xor ecx,ecx
+ mov dl,t_code
+ stc
+ sbb eax,eax
+ call set_rstack_tos
+
+ pop eax
+
+ call run_pscode
+ jnc gfx_menu_init_90
+
+ call ps_status_info
+ call get_key
+ stc
+
+gfx_menu_init_90:
+
+ gfx_leave ; does not return
+
+
+; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+; Show info box.
+;
+; esi info text 1
+; edi info text 2 (0: no text 2)
+; al 0/1 info/error
+;
+
+ bits 16
+
+gfx_infobox_init:
+ gfx_enter
+
+ push eax
+
+ mov ecx,100h-1
+ mov ebx,[infobox_buffer]
+
+ or esi,esi
+ jnz gfx_infobox_init_20
+ inc ebx
+ jmp gfx_infobox_init_40
+gfx_infobox_init_20:
+ es lodsb
+ mov [es:ebx],al
+ inc ebx
+ or al,al
+ loopnz gfx_infobox_init_20
+ or ecx,ecx
+ jz gfx_infobox_init_40
+
+ mov esi,edi
+ or esi,esi
+ jz gfx_infobox_init_40
+ inc ecx
+ dec ebx
+gfx_infobox_init_25:
+ es lodsb
+ mov [es:ebx],al
+ inc ebx
+ or al,al
+ loopnz gfx_infobox_init_25
+gfx_infobox_init_40:
+ mov byte [es:ebx-1],0
+
+ mov ecx,cb_InfoBoxInit
+ call get_dict_entry
+
+ pop ebx
+
+ jc gfx_infobox_init_90
+
+ cmp dl,t_code
+ stc
+ jnz gfx_infobox_init_90
+
+ push eax
+
+ mov dword [pstack.ptr],2
+
+ movzx eax,bl
+ mov dl,t_int
+ xor ecx,ecx
+ call set_pstack_tos
+
+ mov eax,[infobox_buffer]
+ mov dl,t_string
+ mov ecx,1
+ call set_pstack_tos
+
+ mov dword [rstack.ptr],1
+ xor ecx,ecx
+ mov dl,t_code
+ stc
+ sbb eax,eax
+ call set_rstack_tos
+
+ pop eax
+ call run_pscode
+ jnc gfx_infobox_init_90
+
+ call ps_status_info
+ call get_key
+ stc
+
+gfx_infobox_init_90:
+
+ gfx_leave ; does not return
+
+
+; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+; Close info box.
+;
+
+ bits 16
+
+gfx_infobox_done:
+ gfx_enter
+
+ mov ecx,cb_InfoBoxDone
+ call get_dict_entry
+ jc gfx_infobox_done_90
+
+ cmp dl,t_code
+ stc
+ jnz gfx_infobox_done_90
+
+ push eax
+ mov dword [pstack.ptr],0
+ mov dword [rstack.ptr],1
+ xor ecx,ecx
+ mov dl,t_code
+ stc
+ sbb eax,eax
+ call set_rstack_tos
+
+ pop eax
+ call run_pscode
+ jnc gfx_infobox_done_90
+
+ call ps_status_info
+ call get_key
+ stc
+
+gfx_infobox_done_90:
+
+ gfx_leave ; does not return
+
+
+; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+; Setup progress bar window.
+;
+; eax max
+; esi kernel name
+;
+
+ bits 16
+
+gfx_progress_init:
+ gfx_enter
+
+ mov [progress_max],eax
+ and dword [progress_current],0
+
+ mov ecx,cb_ProgressInit
+ push esi
+ call get_dict_entry
+ pop esi
+ jc gfx_progress_init_90
+
+ cmp dl,t_code
+ stc
+ jnz gfx_progress_init_90
+
+ push eax
+ mov dword [pstack.ptr],1
+
+ mov eax,esi
+ mov dl,t_string
+ xor ecx,ecx
+ call set_pstack_tos
+
+ mov dword [rstack.ptr],1
+ xor ecx,ecx
+ mov dl,t_code
+ stc
+ sbb eax,eax
+ call set_rstack_tos
+
+ pop eax
+ call run_pscode
+ jnc gfx_progress_init_90
+
+ call ps_status_info
+ call get_key
+ stc
+
+gfx_progress_init_90:
+
+ gfx_leave ; does not return
+
+
+; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+; Close progress bar window.
+;
+
+ bits 16
+
+gfx_progress_done:
+ gfx_enter
+
+ mov ecx,cb_ProgressDone
+ call get_dict_entry
+ jc gfx_progress_done_90
+
+ cmp dl,t_code
+ stc
+ jnz gfx_progress_done_90
+
+ push eax
+ mov dword [pstack.ptr],0
+ mov dword [rstack.ptr],1
+ xor ecx,ecx
+ mov dl,t_code
+ stc
+ sbb eax,eax
+ call set_rstack_tos
+
+ pop eax
+ call run_pscode
+ jnc gfx_progress_done_90
+
+ call ps_status_info
+ call get_key
+ stc
+
+gfx_progress_done_90:
+
+ gfx_leave ; does not return
+
+
+; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+; Advance progress bar.
+;
+
+ bits 16
+
+gfx_progress_update:
+ gfx_enter
+
+ add [progress_current],eax
+
+ mov ecx,cb_ProgressUpdate
+ call get_dict_entry
+ jc gfx_progress_update_90
+
+ cmp dl,t_code
+ stc
+ jnz gfx_progress_update_90
+
+ push eax
+ mov dword [pstack.ptr],2
+
+ mov eax,[progress_current]
+ mov dl,t_int
+ xor ecx,ecx
+ call set_pstack_tos
+
+ mov eax,[progress_max]
+ mov dl,t_int
+ mov ecx,1
+ call set_pstack_tos
+
+ mov dword [rstack.ptr],1
+ xor ecx,ecx
+ mov dl,t_code
+ stc
+ sbb eax,eax
+ call set_rstack_tos
+
+ pop eax
+ call run_pscode
+ jnc gfx_progress_update_90
+
+ call ps_status_info
+ call get_key
+ stc
+
+gfx_progress_update_90:
+
+ gfx_leave ; does not return
+
+
+; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+; Set progress bar values.
+;
+
+ bits 16
+
+gfx_progress_limit:
+ gfx_enter
+
+ mov [progress_max],eax
+ mov [progress_current],edx
+
+ gfx_leave ; does not return
+
+
+; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+; Setup password window.
+;
+; esi password
+; edi image name
+;
+
+ bits 16
+
+gfx_password_init:
+ gfx_enter
+
+ mov ecx,cb_PasswordInit
+ push esi
+ push edi
+ call get_dict_entry
+ pop edi
+ pop esi
+ jc gfx_password_init_90
+
+ cmp dl,t_code
+ stc
+ jnz gfx_password_init_90
+
+ push eax
+
+ mov dword [pstack.ptr],2
+
+ mov eax,esi
+ mov dl,t_string
+ xor ecx,ecx
+ push edi
+ call set_pstack_tos
+ pop edi
+
+ mov eax,edi
+ mov dl,t_string
+ mov ecx,1
+ call set_pstack_tos
+
+ mov dword [rstack.ptr],1
+ xor ecx,ecx
+ mov dl,t_code
+ stc
+ sbb eax,eax
+ call set_rstack_tos
+
+ pop eax
+ call run_pscode
+ jnc gfx_password_init_90
+
+gfx_password_init_80:
+ call ps_status_info
+ call get_key
+ stc
+
+gfx_password_init_90:
+
+ gfx_leave ; does not return
+
+
+; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+; Close password window.
+;
+; esi password
+;
+
+ bits 16
+
+gfx_password_done:
+ gfx_enter
+
+ mov ecx,cb_PasswordDone
+ push esi
+ call get_dict_entry
+ pop esi
+ jc gfx_password_done_90
+
+ cmp dl,t_code
+ stc
+ jnz gfx_password_done_90
+
+ push eax
+
+ mov dword [pstack.ptr],1
+
+ mov eax,esi
+ mov dl,t_string
+ xor ecx,ecx
+ call set_pstack_tos
+
+ mov dword [rstack.ptr],1
+ xor ecx,ecx
+ mov dl,t_code
+ stc
+ sbb eax,eax
+ call set_rstack_tos
+
+ pop eax
+ call run_pscode
+ jc gfx_password_done_80
+
+ xor ecx,ecx
+ call get_pstack_tos
+ jc gfx_password_done_90
+ cmp dl,t_bool
+ stc
+ jnz gfx_password_done_90
+
+ cmp eax,1
+ jmp gfx_password_done_90
+
+gfx_password_done_80:
+ call ps_status_info
+ call get_key
+ stc
+
+gfx_password_done_90:
+
+ gfx_leave ; does not return
+
+
+; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+; Save segment regs, use our own stack, and switch to pm.
+;
+
+ bits 16
+
+_gfx_enter:
+ pop word [cs:tmp_var_0]
+
+ push fs
+ push es
+ push ds
+
+ push cs
+ pop ds
+ cld
+
+ ; better explicitly turn on ints
+ sti
+
+ call use_local_stack
+
+ pm_enter
+
+ jmp word [tmp_var_0]
+
+
+; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+; Switch to rm, switch back to boot loader stack, restore segment regs and leave.
+;
+; Note: function does not return.
+;
+
+ bits 32
+
+_gfx_leave:
+ pm_leave
+
+ call use_old_stack
+
+ pop ds
+ pop es
+ pop fs
+ retf
+
+
+; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+; Run boot loader function.
+;
+; al function number
+;
+; return:
+; al error code (0 = ok)
+;
+
+ bits 32
+
+gfx_cb:
+ cmp dword [boot.callback],0
+ jz gfx_cb_80
+ pm_leave
+ push ds
+ call far [boot.callback]
+ pop ds
+ pm_enter
+ jmp gfx_cb_90
+gfx_cb_80:
+ mov al,0ffh
+gfx_cb_90:
+ ret
+
+
+; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+;
+; Internal functions.
+;
+; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+
+; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+;
+
+ bits 32
+
+timeout:
+ mov ecx,cb_Timeout
+ call get_dict_entry
+ jc timeout_90
+
+ cmp dl,t_code
+ stc
+ jnz timeout_90
+
+ push eax
+ mov dword [pstack.ptr],2
+
+ mov ecx,1
+ mov dl,t_int
+ mov eax,[input_timeout_start]
+ call set_pstack_tos
+
+ xor ecx,ecx
+ mov dl,t_int
+ mov eax,[input_timeout]
+ call set_pstack_tos
+
+ mov dword [rstack.ptr],1
+ xor ecx,ecx
+ mov dl,t_code
+ stc
+ sbb eax,eax
+ call set_rstack_tos
+
+ pop eax
+ call run_pscode
+ jnc timeout_90
+
+ call ps_status_info
+ call get_key
+ stc
+
+timeout_90:
+ ret
+
+
+; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+; Run 'Timer' callback function.
+;
+; eax time
+;
+
+ bits 32
+
+timer:
+ mov ecx,cb_Timer
+ push eax
+ call get_dict_entry
+ pop ebx
+ jc timer_90
+
+ cmp dl,t_code
+ stc
+ jnz timer_90
+
+ push eax
+ mov dword [pstack.ptr],1
+
+ xor ecx,ecx
+ mov dl,t_int
+ mov eax,ebx
+ call set_pstack_tos
+
+ mov dword [rstack.ptr],1
+ xor ecx,ecx
+ mov dl,t_code
+ stc
+ sbb eax,eax
+ call set_rstack_tos
+
+ pop eax
+ call run_pscode
+ jnc timer_90
+
+ call ps_status_info
+ call get_key
+ stc
+
+timer_90:
+ ret
+
+
+; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+; Initialize parameter & return stack.
+;
+; return:
+; CF error
+;
+
+ bits 32
+
+stack_init:
+ mov dword [pstack.size],param_stack_size
+ and dword [pstack.ptr],0
+ mov eax,param_stack_size * 5
+ call calloc
+ cmp eax,1
+ jc stack_init_90
+ mov [pstack],eax
+
+ mov dword [rstack.size],ret_stack_size
+ and dword [rstack.ptr],0
+ mov eax,ret_stack_size * 5
+ call calloc
+ cmp eax,1
+ jc stack_init_90
+ mov [rstack],eax
+
+stack_init_90:
+ ret
+
+
+; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+; Rotate pstack up (ecx-1'th element becomes tos).
+;
+; ecx values to rotate (counted from tos)
+;
+; return:
+; CF error
+;
+
+ bits 32
+
+rot_pstack_up:
+ or ecx,ecx
+ jz rot_pstack_up_90
+ mov edi,[pstack]
+ mov eax,[pstack.ptr]
+ sub eax,ecx
+ jb rot_pstack_up_90
+ cmp ecx,1
+ jz rot_pstack_up_90
+ add edi,eax
+ shl eax,2
+ add edi,eax
+ dec ecx
+ mov eax,ecx
+ shl eax,2
+ add ecx,eax
+ mov ebx,[es:edi]
+ mov dl,[es:edi+4]
+ lea esi,[edi+5]
+ es rep movsb
+ mov [es:edi],ebx
+ mov [es:edi+4],dl
+ clc
+rot_pstack_up_90:
+ ret
+
+
+; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+; Rotate pstack down (1st element becomes tos).
+;
+; ecx values to rotate (counted from tos)
+;
+; return:
+; CF error
+;
+
+ bits 32
+
+rot_pstack_down:
+ or ecx,ecx
+ jz rot_pstack_down_90
+ mov edi,[pstack]
+ mov eax,[pstack.ptr]
+ cmp eax,ecx
+ jb rot_pstack_down_90
+ cmp ecx,1
+ jz rot_pstack_down_90
+ add edi,eax
+ shl eax,2
+ add edi,eax
+ dec edi
+ lea esi,[edi-5]
+ dec ecx
+ mov eax,ecx
+ shl eax,2
+ add ecx,eax
+ mov ebx,[es:esi+1]
+ mov dl,[es:esi+5]
+ std
+ es rep movsb
+ cld
+ mov [es:esi+1],ebx
+ mov [es:esi+5],dl
+ clc
+rot_pstack_down_90:
+ ret
+
+
+; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+; Read pstack entry.
+;
+; ecx index
+;
+; return:
+; eax value
+; dl type
+; ecx index
+; CF error
+;
+
+ bits 32
+
+get_pstack_entry:
+ xor eax,eax
+ mov dl,al
+ cmp [pstack.size],ecx
+ jb get_pstack_entry_90
+ lea ebx,[ecx+ecx*4]
+ add ebx,[pstack]
+ mov dl,[es:ebx]
+ mov eax,[es:ebx+1]
+ clc
+get_pstack_entry_90:
+ ret
+
+
+; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+; Write pstack entry.
+;
+; ecx index
+; eax value
+; dl type
+;
+; return:
+; ecx index
+; CF error
+;
+
+ bits 32
+
+set_pstack_entry:
+ cmp [pstack.size],ecx
+ jb set_pstack_entry_90
+ lea ebx,[ecx+ecx*4]
+ add ebx,[pstack]
+ mov [es:ebx],dl
+ mov [es:ebx+1],eax
+ clc
+set_pstack_entry_90:
+ ret
+
+
+; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+; Read pstack tos (no pop).
+;
+; ecx index (rel. to tos, 0 = tos)
+;
+; return:
+; eax value
+; dl type
+; ecx index (absolute)
+; CF error
+;
+
+ bits 32
+
+get_pstack_tos:
+ mov eax,[pstack.ptr]
+ sub eax,1
+ jc get_pstack_tos_90
+ sub eax,ecx
+ jc get_pstack_tos_90
+ xchg eax,ecx
+ call get_pstack_entry
+get_pstack_tos_90:
+ ret
+
+
+; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+; Write pstack tos (no push).
+;
+; ecx index (rel. to tos, 0 = tos)
+; eax value
+; dl type
+;
+; return:
+; ecx index (absolute)
+; CF error
+;
+
+ bits 32
+
+set_pstack_tos:
+ mov ebx,[pstack.ptr]
+ sub ebx,1
+ jc set_pstack_tos_90
+ sub ebx,ecx
+ jc set_pstack_tos_90
+ xchg ebx,ecx
+ call set_pstack_entry
+set_pstack_tos_90:
+ ret
+
+
+; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+; Read rstack entry.
+;
+; ecx index
+;
+; return:
+; eax value
+; dl type
+; ecx index
+; CF error
+;
+
+ bits 32
+
+get_rstack_entry:
+ xor eax,eax
+ mov dl,al
+ cmp [rstack.size],ecx
+ jb get_rstack_entry_90
+ lea ebx,[ecx+ecx*4]
+ add ebx,[rstack]
+ mov dl,[es:ebx]
+ mov eax,[es:ebx+1]
+ clc
+get_rstack_entry_90:
+ ret
+
+
+; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+; Write rstack entry.
+;
+; ecx index
+; eax value
+; dl type
+;
+; return:
+; ecx index
+; CF error
+;
+
+ bits 32
+
+set_rstack_entry:
+ cmp [rstack.size],ecx
+ jb set_rstack_entry_90
+ lea ebx,[ecx+ecx*4]
+ add ebx,[rstack]
+ mov [es:ebx],dl
+ mov [es:ebx+1],eax
+ clc
+set_rstack_entry_90:
+ ret
+
+
+; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+; Read rstack tos (no pop).
+;
+; ecx index (rel. to tos, 0 = tos)
+;
+; return:
+; eax value
+; dl type
+; ecx index (absolute)
+; CF error
+;
+
+ bits 32
+
+get_rstack_tos:
+ mov eax,[rstack.ptr]
+ sub eax,1
+ jc get_rstack_tos_90
+ sub eax,ecx
+ jc get_rstack_tos_90
+ xchg eax,ecx
+ call get_rstack_entry
+get_rstack_tos_90:
+ ret
+
+
+; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+; Write rstack tos (no push).
+;
+; ecx index (rel. to tos, 0 = tos)
+; eax value
+; dl type
+;
+; return:
+; ecx index (absolute)
+; CF error
+;
+
+ bits 32
+
+set_rstack_tos:
+ mov ebx,[rstack.ptr]
+ sub ebx,1
+ jc set_rstack_tos_90
+ sub ebx,ecx
+ jc set_rstack_tos_90
+ xchg ebx,ecx
+ call set_rstack_entry
+set_rstack_tos_90:
+ ret
+
+
+; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+; Setup initial dictionary.
+;
+; return:
+; CF error
+;
+
+ bits 32
+
+dict_init:
+ mov eax,[file.start]
+
+ mov ecx,[es:eax+fh_dict]
+ cmp ecx,1
+ jc dict_init_90
+ add eax,ecx
+
+ mov esi,eax
+
+ xor eax,eax
+ es lodsw
+ mov [dict.size],ax
+
+ ; p_none is not part of the default dict
+ cmp ax,cb_functions + prim_functions - 1
+ jb dict_init_90
+
+ lea eax,[eax+eax*4]
+
+ push esi
+ call calloc
+ pop esi
+ cmp eax,1
+ jc dict_init_90
+ mov [dict],eax
+
+ ; add default functions
+
+ add eax,cb_functions * 5
+ xor ecx,ecx
+ inc ecx
+dict_init_20:
+ mov byte [es:eax],t_prim
+ mov [es:eax+1],ecx
+ add eax,5
+ inc ecx
+ cmp ecx,prim_functions
+ jb dict_init_20
+
+ ; add user defined things
+
+ xor eax,eax
+ es lodsw
+ or eax,eax
+ jz dict_init_80
+ cmp [dict.size],eax
+ jb dict_init_90
+
+ mov ebx,[dict]
+
+ xchg eax,ecx
+dict_init_50:
+ xor eax,eax
+ es lodsw
+ cmp eax,[dict.size]
+ cmc
+ jc dict_init_90
+ lea edi,[eax+eax*4]
+ es lodsb
+ mov [fs:ebx+edi],al
+ es lodsd
+ mov [fs:ebx+edi+1],eax
+ dec ecx
+ jnz dict_init_50
+
+dict_init_80:
+ clc
+dict_init_90:
+ ret
+
+
+; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+; Dump dictionary to console.
+;
+; Currently unused.
+;
+%if 0
+
+ bits 32
+
+dump_dict:
+ mov esi,dmsg_09
+ call printf
+
+ xor ecx,ecx
+dump_dict_20:
+ call get_dict_entry
+ jc dump_dict_90
+ pf_arg_uint 0,ecx
+ pf_arg_uchar 1,dl
+ pf_arg_uint 2,eax
+ mov esi,dmsg_10
+ pusha
+ call printf
+ popa
+
+ inc ecx
+ cmp ecx,[dict.size]
+ jb dump_dict_20
+dump_dict_90:
+ ret
+
+%endif
+
+
+; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+; Read a dictionary entry.
+;
+; ecx index
+;
+; return:
+; eax value
+; dl type
+; ecx index
+; CF error
+;
+
+ bits 32
+
+get_dict_entry:
+ xor eax,eax
+ mov dl,al
+ cmp [dict.size],ecx
+ jb get_dict_entry_90
+ lea eax,[ecx+4*ecx] ; dict entry size = 5
+ add eax,[dict]
+ mov dl,[es:eax]
+ mov eax,[es:eax+1]
+get_dict_entry_90:
+ ret
+
+
+; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+; Write a dictionary entry.
+;
+; ecx index
+; eax value
+; dl type
+;
+; return:
+; ecx index
+; CF error
+;
+
+ bits 32
+
+set_dict_entry:
+ cmp [dict.size],ecx
+ jb set_dict_entry_90
+ lea ebx,[ecx+4*ecx]
+ add ebx,[dict]
+ mov [es:ebx],dl
+ mov [es:ebx+1],eax
+set_dict_entry_90:
+ ret
+
+
+; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+; Init malloc areas.
+;
+; idt is not ready yet - hence the cli.
+;
+
+ bits 32
+
+malloc_init:
+ xor ebx,ebx
+malloc_init_10:
+ mov eax,[malloc.area + bx]
+ mov edx,[malloc.area + bx + 4]
+ cmp eax,edx
+ jz malloc_init_70
+
+ cmp edx,eax
+ jnb malloc_init_30
+
+malloc_init_20:
+ ; we can't access it
+ xor eax,eax
+ mov [malloc.area + bx],eax
+ mov [malloc.area + bx + 4],eax
+ jmp malloc_init_70
+
+malloc_init_30:
+ mov esi,eax
+
+ sub edx,eax
+ xor eax,eax
+ mov [es:esi + mhead.memsize],edx
+ mov [es:esi + mhead.ip],eax
+ mov [es:esi + mhead.used],al
+
+ ; just check we can really write there
+ cmp [es:esi + mhead.memsize],edx
+ jnz malloc_init_20
+malloc_init_70:
+ add bx,8
+ cmp bx,malloc.areas * 8
+ jb malloc_init_10
+ ret
+
+
+; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+; Get some memory.
+;
+; eax memory size
+;
+; return:
+; eax linear address (0 if the request failed)
+; memory is initialized with 0
+;
+
+ bits 32
+
+calloc:
+ push eax
+ call malloc
+ pop ecx
+calloc_10:
+ or eax,eax
+ jz calloc_90
+ push eax
+ mov edi,eax
+ xor al,al
+ rep stosb
+ pop eax
+calloc_90:
+ ret
+
+
+; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+; Get some memory (taken from extended memory, if possible).
+;
+; eax memory size
+;
+; return:
+; eax linear address (0 if the request failed)
+; memory is initialized with 0
+;
+
+ bits 32
+
+xcalloc:
+ mov bx,8 ; start with mem area 1
+
+ push eax
+ call malloc_10
+ pop ecx
+
+ or eax,eax
+ jnz calloc_10
+
+ mov eax,ecx
+ jmp calloc
+
+
+; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+; Get some memory.
+;
+; eax memory size
+;
+; return:
+; eax linear address (0 if request failed)
+;
+
+ bits 32
+
+malloc:
+ xor bx,bx
+
+malloc_10:
+ mov ecx,[malloc.area + bx]
+ mov edx,[malloc.area + 4 + bx]
+
+ mov [malloc.start],ecx
+ mov [malloc.end],edx
+
+ cmp edx,ecx
+ jz malloc_70
+
+ push ebx
+ push eax
+ call _malloc
+ pop edx
+ pop ebx
+
+ or eax,eax
+ jnz malloc_90
+
+ mov eax,edx
+
+malloc_70:
+ add bx,8
+ cmp bx,malloc.areas * 8
+ jb malloc_10
+
+ xor eax,eax
+
+malloc_90:
+ ret
+
+_malloc:
+ xor ebp,ebp
+ or eax,eax
+ jz _malloc_90
+ add eax,mhead.size
+ mov ebx,[malloc.start]
+
+_malloc_20:
+ mov esi,ebx
+ mov ecx,[es:esi + mhead.memsize]
+ test byte [es:esi + mhead.used],80h
+ jnz _malloc_70
+ cmp ecx,eax
+ jb _malloc_70
+ ; mark as occupied
+ mov byte [es:esi + mhead.used],80h
+ push dword [pscode_instr]
+ pop dword [es:esi + mhead.ip]
+ lea ebp,[ebx + mhead.size]
+ mov edx,ecx
+ sub edx,eax
+ cmp edx,mhead.size
+ ja _malloc_60
+
+ add [es:esi + mhead.rem],dl
+
+ jmp _malloc_90
+
+_malloc_60:
+ mov [es:esi + mhead.memsize],eax
+ add ebx,eax
+ mov esi,ebx
+ mov [es:esi + mhead.memsize],edx
+ xor edx,edx
+ mov byte [es:esi + mhead.used],dl
+ mov [es:esi + mhead.ip],edx
+
+ jmp _malloc_90
+_malloc_70:
+ add ebx,ecx
+ cmp ebx,[malloc.end]
+ jb _malloc_20
+_malloc_90:
+ xchg ebp,eax
+ ret
+
+
+; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+; Free memory.
+;
+; eax linear address
+;
+
+ bits 32
+
+free:
+ xor bx,bx
+
+free_10:
+ mov ecx,[malloc.area + bx]
+ mov edx,[malloc.area + 4 + bx]
+
+ cmp eax,ecx
+ jb free_70
+ cmp eax,edx
+ jae free_70
+
+ mov [malloc.start],ecx
+ mov [malloc.end],edx
+
+ jmp _free
+
+free_70:
+ add bx,8
+ cmp bx,malloc.areas * 8
+ jb free_10
+free_90:
+ ret
+
+
+_free:
+ or eax,eax
+ jz _free_90
+
+ sub eax,mhead.size
+
+ mov ebx,[malloc.start]
+ mov ecx,ebx
+_free_10:
+ cmp eax,ebx
+ jnz _free_70
+
+ test byte [es:ebx + mhead.used],80h
+ jz _free_90
+
+ cmp ecx,ebx ; first block?
+ jz _free_30
+
+ test byte [es:ecx + mhead.used],80h
+ jnz _free_30 ; prev block is used
+
+ ; prev block is free -> join them
+ mov edx,[es:ecx + mhead.memsize]
+
+ add edx,[es:ebx + mhead.memsize]
+
+ mov [es:ecx + mhead.memsize],edx
+ mov ebx,ecx
+
+_free_30:
+ mov edx,ebx
+ mov byte [es:ebx + mhead.used],0 ; mark block as free
+ add edx,[es:ebx + mhead.memsize]
+ cmp edx,[malloc.end] ; last block?
+ jae _free_90
+
+ test byte [es:edx + mhead.used],80h
+ jnz _free_90 ; next block is used
+
+ ; next block is free -> join them
+ mov edx,[es:edx + mhead.memsize]
+
+ add [es:ebx + mhead.memsize],edx
+ jmp _free_90
+
+_free_70:
+ mov ecx,ebx
+ add ebx,[es:ebx + mhead.memsize]
+ cmp ebx,[malloc.end]
+ jb _free_10
+_free_90:
+ ret
+
+
+; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+; Adjust memory size.
+;
+; eax linear address
+; ecx new size (ecx = 0 -> free)
+;
+
+ bits 32
+
+realloc:
+ or ecx,ecx
+ jz free
+
+ xor bx,bx
+
+realloc10:
+ mov ebp,[malloc.area + bx]
+ mov edx,[malloc.area + 4 + bx]
+
+ cmp eax,ebp
+ jb realloc70
+ cmp eax,edx
+ jae realloc70
+
+ mov [malloc.start],ebp
+ mov [malloc.end],edx
+
+ jmp _realloc
+
+realloc70:
+ add bx,8
+ cmp bx,malloc.areas * 8
+ jb realloc10
+realloc_90:
+ ret
+
+
+_realloc:
+ or eax,eax
+ jz _realloc_90
+
+ mov ebp,ecx
+ add ebp,mhead.size ; new size
+ sub eax,mhead.size
+
+ mov ebx,[malloc.start]
+_realloc_10:
+ cmp eax,ebx
+ jnz _realloc_70
+
+ test byte [es:ebx + mhead.used],80h
+ jz _realloc_90
+
+ cmp ebp,[es:ebx + mhead.memsize]
+ ja _realloc_90 ; we can only decrease
+
+ mov ecx,ebx
+ add ecx,[es:ebx + mhead.memsize]
+
+ cmp ecx,[malloc.end]
+ jae _realloc_30
+
+ test byte [es:ecx + mhead.used],80h
+ jnz _realloc_30
+
+ ; free block follows, just resize
+ add ecx,[es:ecx + mhead.memsize]
+
+ jmp _realloc_40
+
+_realloc_30:
+ ; used block or end: split
+ mov eax,[es:ebx + mhead.memsize]
+ sub eax,ebp
+ cmp eax,mhead.size
+ ja _realloc_40
+ ; adjust excess count
+ or al,80h
+ mov [es:ebx + mhead.rem],al
+ jmp _realloc_90
+
+_realloc_40:
+ ; insert new free block
+
+ mov [es:ebx + mhead.memsize],ebp
+ mov byte [es:ebx + mhead.rem],80h
+
+ add ebx,ebp
+ sub ecx,ebx
+ mov [es:ebx + mhead.memsize],ecx
+ mov dword [es:ebx + mhead.ip],0
+ mov byte [es:ebx + mhead.rem],0
+ jmp _realloc_90
+
+_realloc_70:
+ add ebx,[es:ebx + mhead.memsize]
+ cmp ebx,[malloc.end]
+ jb _realloc_10
+_realloc_90:
+ ret
+
+
+; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+; Dump memory chain.
+;
+
+ bits 32
+
+dump_malloc:
+ pushad
+
+ xor edx,edx
+ call con_xy
+
+ xor ebx,ebx
+ xor ebp,ebp
+
+dump_malloc_10:
+ mov ecx,[malloc.area + bx]
+ mov edx,[malloc.area + 4 + bx]
+
+ mov [malloc.start],ecx
+ mov [malloc.end],edx
+
+ cmp ecx,edx
+ jz dump_malloc_70
+
+ push ebx
+ call _dump_malloc
+ pop ebx
+
+dump_malloc_70:
+ add ebx,8
+ cmp ebx,malloc.areas * 8
+ jb dump_malloc_10
+dump_malloc_90:
+ mov esi,dmsg_03a
+ call printf
+
+ popad
+ ret
+
+_dump_malloc:
+ mov ebx,[malloc.start]
+
+_dump_malloc_30:
+ mov esi,ebx
+ mov ecx,[es:esi + mhead.memsize]
+
+ pushad
+ mov ax,dmsg_07
+ test byte [es:esi + mhead.used],80h
+ jz _dump_malloc_40
+ mov ax,dmsg_08
+_dump_malloc_40:
+ pf_arg_ushort 5,ax
+ pf_arg_ushort 0,bp
+ sub ecx,mhead.size
+ movzx eax,byte [es:esi + mhead.rem]
+ and al,7fh
+ sub ecx,eax
+ pf_arg_uint 1,ebx
+ pf_arg_uint 2,ecx
+ pf_arg_uchar 3,al
+ mov eax,[es:esi + mhead.ip]
+ pf_arg_uint 4,eax
+ mov esi,dmsg_03
+
+ call printf
+ popad
+
+ inc ebp
+ test ebp,01fh
+ jnz _dump_malloc_60
+ pushad
+ call get_key
+ xor edx,edx
+ call con_xy
+ popad
+_dump_malloc_60:
+
+ mov esi,dmsg_04
+ cmp ecx,mhead.size
+ jbe _dump_malloc_70
+
+ add ebx,ecx
+ cmp ebx,[malloc.end]
+ jz _dump_malloc_90
+ jb _dump_malloc_30
+
+ mov ecx,[malloc.end]
+ mov esi,dmsg_04a
+
+_dump_malloc_70:
+ pf_arg_uint 0,ebx
+ pf_arg_uint 1,ecx
+
+ push ebp
+ call printf
+ pop ebp
+_dump_malloc_90:
+ ret
+
+
+; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+; Get size of largest free block.
+;
+; return:
+; eax size of largest free block
+;
+
+maxmemsize:
+ xor eax,eax
+ xor edx,edx
+
+maxmemsize_10:
+ push eax
+ push edx
+ call memsize
+ pop edx
+ pop eax
+
+ cmp edi,edx
+ jb maxmemsize_20
+ mov edx,edi
+maxmemsize_20:
+ inc eax
+ cmp eax,4
+ jb maxmemsize_10
+
+ xchg eax,edx
+
+ ret
+
+
+; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+; Get memory size.
+;
+; eax memory area (0 ... malloc.areas - 1)
+;
+; return:
+; ebp total free memory
+; edi largest free block
+;
+
+ bits 32
+
+memsize:
+ xor ebp,ebp
+ xor edi,edi
+
+ cmp eax,malloc.areas
+ jae memsize_90
+
+ imul bx,ax,8
+
+ mov ecx,[malloc.area + bx]
+ mov edx,[malloc.area + 4 + bx]
+
+ mov [malloc.start],ecx
+ mov [malloc.end],edx
+
+ cmp ecx,edx
+ jz memsize_90
+
+ call _memsize
+
+memsize_90:
+ ret
+
+
+_memsize:
+ mov ebx,[malloc.start]
+_memsize_30:
+ mov ecx,[es:ebx + mhead.memsize]
+ cmp ecx,mhead.size
+ jb _memsize_90
+
+ test byte [es:ebx + mhead.used],80h
+ jnz _memsize_50
+
+ mov eax,ecx
+ sub eax,mhead.size
+ add ebp,eax
+ cmp eax,edi
+ jb _memsize_50
+ mov edi,eax
+_memsize_50:
+ add ebx,ecx
+ cmp ebx,[malloc.end]
+ jb _memsize_30
+_memsize_90:
+ ret
+
+
+; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+; Calculate size of memory block.
+;
+; eax address
+;
+; return:
+; eax size
+;
+
+ bits 32
+
+find_mem_size:
+ call fms_code
+ jnc find_mem_size_90
+
+ call fms_malloc
+ jnc find_mem_size_90
+
+ call fms_file
+ jnc find_mem_size_90
+
+ ; some other area
+
+ xor eax,eax
+
+find_mem_size_90:
+ ret
+
+
+; string constants in ps code
+fms_code:
+ mov edx,[pscode_start]
+ cmp eax,edx
+ jc fms_code_90
+ add edx,[pscode_size]
+ cmp eax,edx
+ cmc
+ jc fms_code_90
+
+ mov edi,eax
+ xor ecx,ecx
+ dec ecx
+ sub ecx,edi
+ mov edx,ecx
+ xor eax,eax
+ repnz scasb
+ jnz fms_code_80
+ sub edx,ecx
+ mov eax,edx
+fms_code_80:
+ clc
+fms_code_90:
+ ret
+
+
+; check malloc areas
+fms_malloc:
+ xor ebx,ebx
+fms_malloc_10:
+ mov ecx,[malloc.area + bx]
+ mov edx,[malloc.area + 4 + bx]
+
+ cmp eax,ecx
+ jb fms_malloc_20
+ cmp eax,edx
+ jae fms_malloc_20
+
+ mov [malloc.start],ecx
+ mov [malloc.end],edx
+
+ jmp fms_malloc_30
+fms_malloc_20:
+ add ebx,8
+ cmp ebx,malloc.areas * 8
+ jb fms_malloc_10
+
+ stc
+
+ jmp fms_malloc_90
+
+fms_malloc_30:
+
+ cmp eax,[malloc.start]
+ jc fms_malloc_90
+ cmp eax,[malloc.end]
+ cmc
+ jc fms_malloc_90
+
+ mov ebx,[malloc.start]
+
+fms_malloc_40:
+ mov ecx,[es:ebx + mhead.memsize]
+ lea edx,[ebx+ecx]
+
+ cmp eax,edx
+ jae fms_malloc_50
+
+ test byte [es:ebx + mhead.used],80h
+ jz fms_malloc_70 ; free
+
+ sub eax,ebx
+ cmp eax,mhead.size
+ jb fms_malloc_70 ; within header
+
+ mov dl,[es:ebx + mhead.rem]
+ and edx,7fh
+
+ add eax,edx
+ sub ecx,eax
+ jb fms_malloc_70 ; in reserved area
+ xchg eax,ecx
+ jmp fms_malloc_90
+
+fms_malloc_50:
+ mov ebx,edx
+ cmp ebx,[malloc.end]
+ jb fms_malloc_40
+
+fms_malloc_70:
+ xor eax,eax
+fms_malloc_90:
+ ret
+
+
+; some file in cpio archive
+fms_file:
+ mov ebx,[archive.start]
+ or ebx,ebx
+ stc
+ jz fms_file_90
+ cmp eax,ebx
+ jc fms_file_90
+ cmp eax,[archive.end]
+ cmc
+ jc fms_file_90
+
+fms_file_10:
+ mov ecx,[archive.end]
+ sub ecx,26
+ cmp ebx,ecx
+ jae fms_file_80
+
+ mov byte [fms_cpio_swab],0
+ cmp word [es:ebx],71c7h
+ jz fms_file_20 ; normal cpio record
+ cmp word [es:ebx],0c771h ; maybe byte-swapped?
+ jnz fms_file_80 ; no cpio record
+ mov byte [fms_cpio_swab],1
+
+fms_file_20:
+ push eax
+ mov ax,[es:ebx+20] ; file name size
+ call cpio_swab
+ movzx ecx,ax
+ pop eax
+ inc ecx
+ and ecx,~1 ; align
+
+ lea ecx,[ecx+ebx+26] ; data start
+
+ cmp eax,ecx
+ jb fms_file_80 ; within header area
+
+ push eax
+ mov eax,[es:ebx+22] ; data size
+ call cpio_swab
+ rol eax,16 ; strange word order
+ call cpio_swab
+ mov edx,eax
+ pop eax
+
+ mov ebx,edx
+ inc ebx
+ and ebx,~1 ; align
+ add ebx,ecx ; next record
+
+ add ecx,edx
+
+ cmp eax,ebx
+ jae fms_file_10
+
+ sub ecx,eax
+ xchg eax,ecx
+
+ jnc fms_file_90 ; not within alignment area
+fms_file_80:
+ xor eax,eax
+fms_file_90:
+ ret
+
+
+; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+; Byte-swap cpio data if appropriate.
+;
+; ax: word to swap
+;
+; return:
+; ax: swapped if [fms_cpio_swab], otherwise same as input
+;
+
+ bits 32
+
+cpio_swab:
+ cmp byte [fms_cpio_swab],0
+ jz cpio_swab_90
+ xchg ah,al
+cpio_swab_90:
+ ret
+
+
+; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+; Find (and load) file.
+;
+; eax file name
+;
+; return:
+; eax file start
+; bl 0/1: file/symlink
+;
+; Note: use find_mem_size to find out file size.
+;
+
+ bits 32
+
+find_file:
+ mov esi,eax
+ mov al,0
+ mov ebp,[archive.start]
+ or ebp,ebp
+ jz find_file_80
+find_file_20:
+ mov ebx,ebp
+
+ mov byte [fms_cpio_swab],0
+ cmp word [es:ebx],71c7h ; little-endian archive
+ jz find_file_30
+ cmp word [es:ebx],0c771h ; big-endian
+ jnz find_file_80
+ mov byte [fms_cpio_swab],1
+find_file_30:
+ mov al,[es:ebx+7]
+ and al,0f0h
+ cmp al,0a0h
+ setz al
+ push eax
+ mov ax,[es:ebx+20] ; file name size (incl. final 0)
+ call cpio_swab
+ movzx ecx,ax
+ pop eax
+ mov edx,ecx
+ inc edx
+ and edx,~1 ; align
+ lea edi,[ebx+26]
+ lea ebp,[ebx+edx+26] ; points to data start
+ or ecx,ecx
+ jz find_file_50
+ push esi
+ es rep cmpsb
+ pop esi
+ jnz find_file_50
+ mov bl,al
+ mov eax,ebp
+ jmp find_file_90
+find_file_50:
+ push eax
+ mov eax,[es:ebx+22] ; data size
+ call cpio_swab
+ rol eax,16 ; strange word order
+ call cpio_swab
+ mov ecx,eax
+ pop eax
+
+ inc ecx
+ and ecx,~1 ; align
+ add ebp,ecx
+ mov ecx,ebp
+ add ecx,26
+ cmp ecx,[archive.end]
+ jb find_file_20
+find_file_80:
+ xor eax,eax
+ mov bl,al
+find_file_90:
+ ret
+
+
+; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+; Set graphics mode.
+;
+; [gfx_mode] graphics mode (either vbe or normal mode number)
+; [vbe_buffer] buffer for vbe info
+;
+; return:
+; CF error
+;
+
+ bits 32
+
+set_mode:
+ mov ax,[gfx_mode]
+ test ah,ah
+ jnz set_mode_20
+ int 10h
+ mov word [window_seg_w],0a000h
+ and word [window_seg_r],0
+ mov byte [mapped_window],0
+
+ mov al,[gfx_mode]
+ cmp al,13h
+ jnz set_mode_10
+ ; 320x200, 8 bit
+ mov word [screen_width],320
+ mov word [screen_height],200
+ mov word [screen_vheight],200
+ mov dword [screen_line_len],320
+ mov byte [pixel_bits],8
+ mov byte [pixel_bytes],1
+ call mode_init
+set_mode_10:
+ clc
+ jmp set_mode_90
+set_mode_20:
+ mov ebx,[vbe_buffer]
+ mov dword [es:ebx],32454256h ; 'VBE2'
+
+ mov eax,ebx
+ shr eax,4
+ mov [rm_seg.es],ax
+ mov edi,ebx
+ and edi,0fh
+
+ mov ax,4f00h
+ push ebx
+ int 10h
+ pop ebx
+ cmp ax,4fh
+ jnz set_mode_80
+ mov ax,4f01h
+ mov cx,[gfx_mode]
+ push ebx
+ int 10h
+ pop edi
+ cmp ax,4fh
+ jnz set_mode_80
+
+ movzx eax,word [es:edi+10h]
+ mov [screen_line_len],eax
+
+ push word [es:edi+12h]
+ pop word [screen_width]
+ push word [es:edi+14h]
+ pop word [screen_height]
+
+ movzx eax,byte [es:edi+1dh]
+ inc eax
+ movzx ecx,word [screen_height]
+ mul ecx
+ cmp eax,7fffh
+ jbe set_mode_25
+ mov eax,7fffh
+set_mode_25:
+ mov [screen_vheight],ax
+
+ mov al,[es:edi+1bh] ; color mode (aka memory model)
+ mov ah,[es:edi+19h] ; color depth
+ mov dh,ah
+ cmp al,6 ; direct color
+ jnz set_mode_30
+ mov dh,[es:edi+1fh] ; red
+ add dh,[es:edi+21h] ; green
+ add dh,[es:edi+23h] ; blue
+ jmp set_mode_40
+set_mode_30:
+ cmp al,4 ; PL 8
+ mov ah,8
+ mov dh,ah
+ jz set_mode_40
+ mov ah,0
+set_mode_40:
+ cmp ah,8
+ jz set_mode_45
+ cmp ah,16
+ jz set_mode_45
+ cmp ah,32
+ jnz set_mode_80
+set_mode_45:
+
+ mov [pixel_bits],ah
+ shr ah,3
+ mov [pixel_bytes],ah
+ mov [color_bits],dh
+
+ ; we check if win A is readable _and_ writable; if not, we want
+ ; at least a writable win A and a readable win B
+ ; other, even more silly variations are not supported
+
+ mov ax,[es:edi+8] ; win seg A
+ mov bx,[es:edi+10] ; win seg B
+
+ or ax,ax
+ jz set_mode_80
+ mov [window_seg_w],ax
+ and word [window_seg_r],byte 0
+ mov dx,[es:edi+2] ; win A/B attributes
+ and dx,707h
+ cmp dl,7
+ jz set_mode_50 ; win A is rw
+
+ or bx,bx
+ jz set_mode_80
+ mov [window_seg_r],bx
+ mov cx,dx
+ and dx,305h
+ cmp dx,305h
+ jz set_mode_50 ; win A is w, win B is r
+
+ and cx,503h
+ cmp cx,503h
+ jnz set_mode_80
+ ; win A is r, win B is w
+ mov [window_seg_r],ax
+ mov [window_seg_w],bx
+set_mode_50:
+ mov ax,[es:edi+6] ; win size (in kb)
+ cmp ax,64
+ jb set_mode_80 ; at least 64k
+ xor edx,edx
+ mov bx,[es:edi+4] ; granularity (in kb)
+ or bx,bx
+ jz set_mode_80
+ div bx
+ or dx,dx
+ jnz set_mode_80
+ or ax,ax
+ jz set_mode_80
+ mov [window_inc],al
+ mov byte [mapped_window],0ffh
+ mov ax,4f02h
+ mov bx,[gfx_mode]
+ int 10h
+ cmp ax,4fh
+ jnz set_mode_80
+ mov al,0
+ call set_win
+
+ call mode_init
+
+ clc
+
+ jmp set_mode_90
+set_mode_80:
+ and word [gfx_mode],0
+ stc
+set_mode_90:
+ ret
+
+mode_init:
+ ; graphics window selectors
+
+ movzx eax,word [window_seg_w]
+ shl eax,4
+ mov si,pm_seg.screen_w16
+ call set_gdt_base_pm
+
+ movzx ecx,word [window_seg_r]
+ shl ecx,4
+ jz mode_init_05
+ mov eax,ecx
+mode_init_05:
+ mov si,pm_seg.screen_r16
+ call set_gdt_base_pm
+
+ ; pixel get/set functions
+
+ mov dword [setpixel],setpixel_8
+ mov dword [setpixel_a],setpixel_a_8
+ mov dword [setpixel_t],setpixel_8
+ mov dword [setpixel_ta],setpixel_a_8
+ mov dword [getpixel],getpixel_8
+ cmp byte [pixel_bits],8
+ jz mode_init_90
+ cmp byte [pixel_bits],16
+ jnz mode_init_50
+ mov dword [setpixel],setpixel_16
+ mov dword [setpixel_a],setpixel_a_16
+ mov dword [setpixel_t],setpixel_t_16
+ mov dword [setpixel_ta],setpixel_ta_16
+ mov dword [getpixel],getpixel_16
+ jmp mode_init_90
+mode_init_50:
+ cmp byte [pixel_bits],32
+ jnz mode_init_90
+ mov dword [setpixel],setpixel_32
+ mov dword [setpixel_a],setpixel_a_32
+ mov dword [setpixel_t],setpixel_t_32
+ mov dword [setpixel_ta],setpixel_ta_32
+ mov dword [getpixel],getpixel_32
+mode_init_90:
+ ret
+
+
+; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+; Get VBE mode list.
+;
+; [vbe_buffer] buffer for vbe info
+;
+; return:
+; [vbe_mode_list] mode list, last entry is 0xffff
+; [screen_mem] video memory size
+;
+
+ bits 32
+
+get_vbe_modes:
+ mov ebx,[vbe_mode_list]
+ cmp word [es:ebx],0
+ jnz get_vbe_modes_90
+
+ mov edx,[vbe_buffer]
+ mov dword [es:edx],32454256h ; 'VBE2'
+
+ mov eax,edx
+ shr eax,4
+ mov [rm_seg.es],ax
+ mov edi,edx
+ and edi,0fh
+
+ mov ax,4f00h
+ push ebx
+ push edx
+ int 10h
+ pop edx
+ pop ebx
+
+ mov edi,ebx
+
+ cmp ax,4fh
+ jnz get_vbe_modes_20
+
+ push word [es:edx+12h]
+ pop word [screen_mem]
+
+ movzx esi,word [es:edx+0eh]
+ movzx eax,word [es:edx+0eh+2]
+ shl eax,4
+ add esi,eax
+
+ mov ecx,0ffh
+get_vbe_modes_10:
+ es lodsw
+ stosw
+ cmp ax,0ffffh
+ jz get_vbe_modes_30
+ dec ecx
+ jnz get_vbe_modes_10
+get_vbe_modes_20:
+ mov word [es:edi],0ffffh
+get_vbe_modes_30:
+ cmp word [es:ebx],0
+ jnz get_vbe_modes_90
+ ; make sure it's not 0; mode 1 is the same as mode 0
+ inc word [es:esi]
+
+get_vbe_modes_90:
+ ret
+
+
+; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+; Write text to console.
+;
+; esi format string
+; [pf_gfx] use ds:esi (0) or es:esi (1)
+;
+
+ bits 32
+
+printf:
+ mov byte [tmp_write_cnt],0
+printf_10:
+ call pf_next_char
+ or eax,eax
+ jz printf_90
+ cmp al,'%'
+ jnz printf_70
+ mov byte [tmp_write_pad],' '
+ call pf_next_char
+ dec esi
+ cmp al,'0'
+ jnz printf_20
+ mov [tmp_write_pad],al
+printf_20:
+ call get_number
+ mov [tmp_write_num],ecx
+ call pf_next_char
+ or eax,eax
+ jz printf_90
+ cmp al,'%'
+ jz printf_70
+
+ cmp al,'S'
+ jnz printf_23
+ mov byte [pf_gfx_raw_char],1
+ jmp printf_24
+printf_23:
+ cmp al,'s'
+ jnz printf_30
+printf_24:
+ push esi
+
+ call pf_next_arg
+ mov esi,eax
+ call write_str
+
+ sub ecx,[tmp_write_num]
+ neg ecx
+ mov al,' '
+ call write_chars
+
+ pop esi
+
+ mov byte [pf_gfx_raw_char],0
+ jmp printf_10
+
+printf_30:
+ cmp al,'u'
+ jnz printf_35
+
+ mov dx,10
+printf_31:
+ push esi
+
+ call pf_next_arg
+ or dh,dh
+ jz printf_34
+ test eax,eax
+ jns printf_34
+ neg eax
+ push eax
+ mov al,'-'
+ call write_char
+ pop eax
+printf_34:
+ mov cl,[tmp_write_num]
+ mov ch,[tmp_write_pad]
+ call number
+ cmp byte [pf_gfx],0
+ jz printf_345
+ add esi,[prog.base]
+printf_345:
+ call write_str
+printf_347:
+ pop esi
+
+ jmp printf_10
+
+printf_35:
+ cmp al,'x'
+ jnz printf_36
+
+printf_35a:
+ mov dx,10h
+ jmp printf_31
+
+printf_36:
+ cmp al,'d'
+ jnz printf_37
+printf_36a:
+ mov dx,10ah
+ jmp printf_31
+
+printf_37:
+ cmp al,'i'
+ jz printf_36a
+
+ cmp al,'p'
+ jnz printf_40
+ mov al,'0'
+ call write_char
+ mov al,'x'
+ call write_char
+ jmp printf_35a
+
+printf_40:
+ cmp al,'c'
+ jnz printf_45
+
+ push esi
+ call pf_next_arg
+ call write_char
+ pop esi
+ jmp printf_10
+printf_45:
+
+ ; more ...
+
+
+printf_70:
+ call write_char
+ jmp printf_10
+printf_90:
+ ret
+
+
+; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+; Get next char for printf.
+;
+; esi string
+; [pf_gfx] use ds:esi (0) or es:esi (1)
+;
+; return:
+; eax char
+; esi points to next char
+;
+
+ bits 32
+
+pf_next_char:
+ xor eax,eax
+ cmp byte [pf_gfx],0
+ jz pf_next_char_50
+ es ; ok, this _is_ evil code...
+pf_next_char_50:
+ lodsb
+ ret
+
+
+; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+; Get next printf arg.
+;
+; [pf_gfx] get arg from [tmp_write_data] (0) or pstack (1)
+;
+; return:
+; eax arg
+;
+; changes no regs
+;
+
+ bits 32
+
+pf_next_arg:
+ cmp byte [pf_gfx],0
+ jz pf_next_arg_50
+ pusha
+ xor ecx,ecx
+ call get_pstack_tos
+ mov [tmp_write_data],eax
+ jnc pf_next_arg_20
+ and dword [tmp_write_data],0
+ cmp word [pf_gfx_err],0
+ jnz pf_next_arg_20
+ mov word [pf_gfx_err],pserr_pstack_underflow
+ jmp pf_next_arg_30
+pf_next_arg_20:
+ dec dword [pstack.ptr]
+pf_next_arg_30:
+ popa
+ mov eax,[tmp_write_data]
+ jmp pf_next_arg_90
+pf_next_arg_50:
+ movzx eax,byte [tmp_write_cnt]
+ inc byte [tmp_write_cnt]
+ mov eax,[tmp_write_data+4*eax]
+pf_next_arg_90:
+ ret
+
+
+; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+; Write string.
+;
+; esi text
+; [pf_gfx] use ds:esi (0) or es:esi (1)
+;
+; return:
+; ecx length
+;
+
+ bits 32
+
+write_str:
+ xor ecx,ecx
+write_str_10:
+ call pf_next_char
+ cmp byte [pf_gfx],0
+ jz write_str_40
+ call is_eot
+ jmp write_str_50
+write_str_40:
+ or eax,eax
+write_str_50:
+ jz write_str_90
+ call write_char
+ inc ecx
+ jmp write_str_10
+write_str_90:
+ ret
+
+
+; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+; Write char multiple times.
+;
+; al char
+; ecx count (does nothing if count <= 0)
+; [pf_gfx] write to console (0) or [pf_gfx_buf] (1)
+;
+
+ bits 32
+
+write_chars:
+ cmp ecx,0
+ jle write_chars_90
+ call write_char
+ dec ecx
+ jmp write_chars
+write_chars_90:
+ ret
+
+
+; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+; Write single char.
+;
+; al char
+; [pf_gfx] write to console (0) or [pf_gfx_buf] (1)
+;
+; Changes no regs.
+;
+
+ bits 32
+
+write_char:
+ pusha
+ cmp byte [pf_gfx],0
+ jz write_char_50
+ mov ebx,[pf_gfx_cnt]
+ inc ebx
+ cmp ebx,[pf_gfx_max]
+ jae write_char_90 ; leave room for final 0!
+ mov [pf_gfx_cnt],ebx
+ add ebx,[pf_gfx_buf]
+ dec ebx
+ mov ah,0
+ mov [es:ebx],ax
+ jmp write_char_90
+write_char_50:
+ cmp byte [pf_gfx_raw_char],0
+ jnz write_char_60
+ cmp al,0ah
+ jnz write_char_60
+ push eax
+ mov al,0dh
+ call write_cons_char
+ pop eax
+write_char_60:
+ call write_cons_char
+write_char_90:
+ popa
+ ret
+
+
+; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+; Write char on text console.
+;
+; al char
+;
+
+ bits 32
+
+write_cons_char:
+ ; vesa mode?
+ cmp byte [gfx_mode+1],0
+ jnz write_cons_char_20
+ mov bx,7
+ cmp byte [pf_gfx_raw_char],0
+ jz write_cons_char_10
+ mov ah,0ah
+ mov cx,1
+ int 10h
+ mov ah,3
+ int 10h
+ inc dl
+ mov ah,2
+ int 10h
+ jmp write_cons_char_90
+write_cons_char_10:
+ mov ah,0eh
+ int 10h
+ jmp write_cons_char_90
+write_cons_char_20:
+ cmp byte [pf_gfx_raw_char],0
+ jnz write_cons_char_40
+ cmp al,0ah
+ jnz write_cons_char_30
+ mov cx,[cfont_height]
+ add [con_y],cx
+ jmp write_cons_char_90
+write_cons_char_30:
+ cmp al,0dh
+ jnz write_cons_char_40
+ and word [con_x],0
+ jmp write_cons_char_90
+write_cons_char_40:
+ stc
+ sbb ebx,ebx ; -1
+ cmp byte [pixel_bits],8
+ ja write_cons_char_50
+ mov bl,[textmode_color]
+write_cons_char_50:
+ call con_char_xy
+write_cons_char_90:
+ ret
+
+
+; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+; Convert string to number.
+;
+; esi string
+; [pf_gfx] use ds:esi (0) or es:esi (1)
+;
+; return:
+; ecx number
+; esi points past number
+; CF not a number
+;
+
+ bits 32
+
+get_number:
+
+ xor ecx,ecx
+ mov ah,1
+get_number_10:
+ call pf_next_char
+ or al,al
+ jz get_number_90
+ sub al,'0'
+ jb get_number_90
+ cmp al,9
+ ja get_number_90
+ movzx eax,al
+ imul ecx,ecx,10
+ add ecx,eax
+ jmp get_number_10
+get_number_90:
+ dec esi
+ shr ah,1
+ ret
+
+
+; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+; Convert a number to string.
+;
+; eax number
+; cl field size
+; ch padding char
+; dl base
+;
+; return:
+; ds:esi string
+;
+; Note: esi is relative to [prog.base], not 0!
+;
+
+ bits 32
+
+number:
+ mov edi,num_buf
+ add edi,[prog.base]
+ push eax
+ push ecx
+ mov al,ch
+ mov ecx,num_buf_end - num_buf
+ rep stosb
+ pop ecx
+ pop eax
+ movzx ecx,cl
+ movzx ebx,dl
+ sub edi,[prog.base]
+number_10:
+ xor edx,edx
+ div ebx
+ cmp dl,9
+ jbe number_20
+ add dl,27h
+number_20:
+ add dl,'0'
+ dec edi
+ mov [edi],dl
+ or eax,eax
+ jz number_30
+ cmp edi,num_buf
+ ja number_10
+number_30:
+ mov esi,edi
+ or ecx,ecx
+ jz number_90
+ cmp ecx,num_buf_end - num_buf
+ jae number_90
+ mov esi,num_buf_end
+ sub esi,ecx
+number_90:
+ ret
+
+
+; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+; Print status/debug info window on console.
+;
+
+ bits 32
+
+ps_status_info:
+ xor edx,edx
+ call con_xy
+
+ mov esi,msg_13
+ call printf
+
+ mov ecx,7
+ps_status_info_10:
+ push ecx
+
+ call get_pstack_tos
+ jc ps_status_info_20
+ pf_arg_uint 0,ecx
+ pf_arg_uchar 2,dl
+ pf_arg_uint 1,eax
+ mov esi,msg_11
+ jmp ps_status_info_30
+ps_status_info_20:
+ mov esi,msg_12
+ps_status_info_30:
+ call printf
+
+ pop ecx
+ push ecx
+
+ call get_rstack_tos
+ jc ps_status_info_40
+ pf_arg_uint 0,ecx
+ pf_arg_uchar 2,dl
+ pf_arg_uint 1,eax
+ mov esi,msg_11
+ jmp ps_status_info_50
+ps_status_info_40:
+ mov esi,msg_12
+ps_status_info_50:
+ call printf
+
+ mov esi,msg_16
+ call printf
+
+ pop ecx
+ dec ecx
+ jge ps_status_info_10
+
+ mov esi,msg_14
+ call printf
+
+ mov eax,[pscode_error_arg_0]
+ pf_arg_uint 1,eax
+ mov eax,[pscode_error_arg_1]
+ pf_arg_uint 2,eax
+ mov ax,[pscode_error]
+ pf_arg_ushort 0,ax
+ mov esi,msg_17
+ cmp ax,100h
+ jb ps_status_info_60
+ mov esi,msg_18
+ cmp ax,200h
+ jb ps_status_info_60
+ mov esi,msg_19
+ps_status_info_60:
+ call printf
+
+ mov eax,[pscode_instr]
+ pf_arg_uint 0,eax
+ mov eax,[pscode_arg]
+ pf_arg_uint 1,eax
+ mov eax,[pscode_error_arg_0]
+ pf_arg_uint 3,eax
+ mov eax,[pscode_error_arg_1]
+ pf_arg_uint 4,eax
+ mov al,[pscode_type]
+ pf_arg_uchar 2,al
+
+ mov esi,msg_10
+ cmp al,t_sec
+ jnz ps_status_info_70
+ mov esi,msg_20
+ps_status_info_70:
+ call printf
+
+ xor ecx,ecx
+ call get_pstack_tos
+ jnc ps_status_info_71
+ mov dl,t_none
+ xor eax,eax
+ps_status_info_71:
+ mov ebp,[prog.base]
+ push eax
+ mov al,' '
+ lea edi,[num_buf+ebp]
+ mov ecx,1fh ; watch num_buf_end
+ rep stosb
+ mov [es:edi],cl
+ pop eax
+
+ cmp dl,t_string
+ jnz ps_status_info_79
+
+ mov esi,eax
+
+ lea edi,[num_buf+ebp]
+ mov al,0afh
+ stosb
+ps_status_info_72:
+ es lodsb
+ or al,al
+ jz ps_status_info_73
+ stosb
+ cmp byte [es:edi+1],0
+ jnz ps_status_info_72
+ cmp byte [es:esi],0
+ jnz ps_status_info_74
+ps_status_info_73:
+ mov al,0aeh
+ jmp ps_status_info_75
+ps_status_info_74:
+ mov al,0afh
+ps_status_info_75:
+ stosb
+
+ps_status_info_79:
+ mov esi,num_buf
+ pf_arg_uint 0,esi
+ mov esi,msg_21
+ call printf
+
+ps_status_info_80:
+ mov esi,msg_15
+ call printf
+
+ ret
+
+
+; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+; Read a key (blocking).
+;
+; return:
+; eax key
+;
+
+ bits 32
+
+get_key:
+ xor eax,eax
+ xchg eax,[serial.key]
+ or eax,eax
+ jnz get_key_90
+get_key_30:
+ mov ah,10h
+ int 16h
+get_key_80:
+ and eax,0ffffh
+ mov ecx,[es:417h-2]
+ xor cx,cx
+ add eax,ecx
+get_key_90:
+ ret
+
+
+; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+; Read a key, return 0 if timed out
+;
+; return:
+; eax key (or 0)
+;
+
+ bits 32
+
+get_key_to:
+ call get_time
+ xchg eax,edx
+get_key_to_20:
+ mov ah,11h
+ int 16h
+ jnz get_key_to_60
+ cmp byte [idle.run],0
+ jz get_key_to_25
+ call idle
+get_key_to_25:
+ mov ax,[es:417h]
+ cmp ax,[kbd_status]
+ mov [kbd_status],ax
+ jz get_key_to_30
+ xor ax,ax
+ jmp get_key_to_60
+
+get_key_to_30:
+ mov esi,serial.lines
+get_key_to_35:
+ test byte [esi+sl.status],1
+ jz get_key_to_40
+
+ call serial_get_byte
+ jnz get_key_to_60
+
+get_key_to_40:
+ add esi,sl.size
+ cmp esi,serial.lines + serial.lines.max * sl.size
+ jb get_key_to_35
+
+get_key_to_50:
+ call get_time
+ cmp edx,eax
+ jz get_key_to_20
+
+ push eax
+ call timer
+ pop edx
+
+ mov eax,[input_timeout]
+ or eax,eax
+ jz get_key_to_20
+
+ dec dword [input_timeout]
+ pushf
+ push edx
+ call timeout
+ pop edx
+ popf
+ jnz get_key_to_20
+
+ xor eax,eax
+ jmp get_key_to_90
+
+get_key_to_60:
+ pushf
+ cmp dword [input_timeout],0
+ jz get_key_to_70
+ and dword [input_timeout],0
+ call timeout
+get_key_to_70:
+ popf
+ jnz get_key_to_80
+ mov ax,[kbd_status]
+ shl eax,16
+ mov ah,0ffh
+ jmp get_key_to_90
+get_key_to_80:
+ call get_key
+get_key_to_90:
+ mov byte [idle.invalid],1
+ ret
+
+
+; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+; Read serial line input.
+;
+; [esi] serial info struct
+;
+; return:
+; ZF 0: ok, key in [serial.key]
+; 1: no key
+;
+
+serial_get_byte:
+ pusha
+ mov dx,[esi+sl.port]
+ add dx,5
+ in al,dx
+ test al,1
+ jz serial_gb_80
+ mov ah,al
+ sub dx,5
+ in al,dx
+ test byte [esi+sl.status],4 ; autodetect?
+ jz serial_gb_70 ; no
+ mov bl,[esi+sl.recv_cnt]
+ inc bl
+ mov [esi+sl.recv_cnt],bl
+ mov bh,[esi+sl.recv_mask]
+ test ax,1880h
+ jz serial_gb_50
+ stc
+serial_gb_50:
+ adc bh,bh
+ mov [esi+sl.recv_mask],bh
+
+ cmp bl,1
+ ja serial_gb_62
+ ; 1 char
+ ; if ok, return it, else skip
+ test bh,1
+ jz serial_gb_70
+ jmp serial_gb_80
+serial_gb_62:
+ cmp bl,2
+ ja serial_gb_63
+ ; 2 chars
+ ; if last 2 were ok, return it, else skip
+ test bh,3
+ jz serial_gb_70
+ jmp serial_gb_80
+serial_gb_63:
+ cmp bl,3
+ ja serial_gb_64
+ ; 3 chars
+ ; if last 2 were ok, return it
+ ; if last 2 broken: choose new freq
+ test bh,3
+ jz serial_gb_70
+ and bh,3
+ cmp bh,3
+ jnz serial_gb_80
+ call serial_new_baud
+ jmp serial_gb_80
+serial_gb_64:
+ cmp bl,4
+ ja serial_gb_65
+ ; 4 chars
+ ; if last 2 were ok, return it
+ ; if last 2 broken: choose new freq
+ test bh,3
+ jz serial_gb_70
+ and bh,3
+ cmp bh,3
+ jnz serial_gb_80
+ call serial_new_baud
+ jmp serial_gb_80
+serial_gb_65:
+ ; 5 chars & more
+ ; if last 4 ok, return it & turn off autodetect
+ ; if last 2 were ok, return it
+ ; if last 2 broken: choose new freq
+ test bh,0fh
+ jnz serial_gb_66
+ and byte [esi+sl.status],~4
+serial_gb_66:
+ test bh,3
+ jz serial_gb_70
+ and bh,3
+ cmp bh,3
+ jnz serial_gb_80
+ call serial_new_baud
+ jmp serial_gb_80
+
+serial_gb_70:
+ and eax,0ffh
+ mov ah,[esi+sl.scancode]
+ mov [serial.key],eax
+ ; ZF = 0
+ or byte [esi+sl.status],2
+ jmp serial_gb_90
+serial_gb_80:
+ ; ZF = 1
+ xor ax,ax
+serial_gb_90:
+ popa
+ ret
+
+
+serial_new_baud:
+ movzx ebx,byte [esi+sl.baud_idx]
+ inc ebx
+ mov al,[serial.baud_tab+ebx]
+ or al,al
+ jnz serial_nb_20
+ xor ebx,ebx
+ mov al,[serial.baud_tab]
+serial_nb_20:
+ mov [esi+sl.baud_idx],bl
+ mov [esi+sl.baud],al
+
+ mov dx,[esi+sl.port]
+ add dx,3
+ mov al,83h
+ call slow_out
+ sub dx,3
+ mov al,[esi+sl.baud]
+ call slow_out
+ inc dx
+ mov al,[esi+sl.baud+1]
+ call slow_out
+ mov al,03h
+ add dx,2
+ call slow_out
+
+ xor eax,eax
+ mov [esi+sl.recv_mask],al
+ mov [esi+sl.recv_cnt],al
+
+serial_nb_80:
+ mov dx,[esi+sl.port]
+ add dx,5
+ in al,dx
+ test al,1
+ jz serial_nb_90
+ sub dx,5
+ in al,dx
+ jmp serial_nb_80
+
+serial_nb_90:
+ ret
+
+; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+; Clear keyboard input buffer.
+;
+
+ bits 32
+
+clear_kbd_queue:
+ mov ah,11h
+ int 16h
+ jz clear_kbd_queue_90
+ mov ah,10h
+ int 16h
+ jmp clear_kbd_queue
+clear_kbd_queue_90:
+ ret
+
+
+; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+; Setup serial lines.
+;
+
+ bits 32
+
+serial_setup:
+ mov esi,serial.lines
+
+ ; add bootloader configured port to end of our list
+ mov ax,[serial.port_noinit]
+ or ax,ax
+ jz serial_setup_10
+ mov [esi + (serial.lines.max - 1) * sl.size + sl.port],ax
+ mov byte [esi + (serial.lines.max - 1) * sl.size + sl.scancode],0xf0 + serial.lines.max - 1
+ mov byte [esi + (serial.lines.max - 1) * sl.size + sl.status],1
+
+ ; ensure every port is listed only once
+
+serial_setup_10:
+ test byte [esi+sl.status],1
+ jz serial_setup_40
+ mov ax,[esi+sl.port]
+ lea edi,[esi+sl.size]
+serial_setup_20:
+ test byte [edi+sl.status],1
+ jz serial_setup_30
+ cmp ax,[edi+sl.port]
+ jnz serial_setup_30
+ mov byte [edi+sl.status],0
+serial_setup_30:
+ add edi,sl.size
+ cmp edi,serial.lines + serial.lines.max * sl.size
+ jb serial_setup_20
+
+serial_setup_40:
+ add esi,sl.size
+ cmp esi,serial.lines + (serial.lines.max - 1) * sl.size
+ jb serial_setup_10
+
+ ; set them up
+
+ mov esi,serial.lines
+serial_setup_50:
+ test byte [esi+sl.status],1
+ jz serial_setup_70
+
+ mov ax,[esi+sl.port]
+ cmp ax,[serial.port_noinit]
+ jz serial_setup_70
+
+ ; serial port init taken from syslinux
+ lea edx,[eax+3] ; DX -> LCR
+ mov al,83h ; Enable DLAB
+ call slow_out
+ sub dx,3 ; DX -> LS
+ mov al,[esi+sl.baud] ; Divisor, low
+ call slow_out
+ inc dx ; DX -> MS
+ mov al,[esi+sl.baud+1] ; Divisor, high
+ call slow_out
+ mov al,03h ; Disable DLAB
+ inc dx ; DX -> LCR
+ inc dx
+ call slow_out
+ in al,dx ; Read back LCR (detect missing hw)
+ cmp al,03h ; If nothing here we'll read 00 or FF
+ jz serial_setup_60
+ mov byte [esi+sl.status],0
+ jmp serial_setup_70
+serial_setup_60:
+ dec dx
+ dec dx ; DX -> IER
+ xor al,al ; IRQ disable
+ call slow_out
+ inc dx ; DX -> FCR/IIR
+ mov al,01h
+ call slow_out ; Enable FIFOs if present
+ in al,dx
+ cmp al,0C0h ; FIFOs enabled and usable?
+ jae serial_setup_70
+ xor ax,ax ; Disable FIFO if unusable
+ call slow_out
+
+serial_setup_70:
+ add esi,sl.size
+ cmp esi,serial.lines + (serial.lines.max - 1) * sl.size
+ jb serial_setup_50
+
+serial_setup_90:
+ ret
+
+
+slow_out:
+ out dx,al
+
+ out 80h,al
+ out 80h,al
+ ret
+
+
+; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+; Setup serial lines.
+;
+; eax char
+;
+
+ bits 32
+
+serial_putc:
+ mov ebx,eax
+ mov ah,al
+ mov esi,serial.lines
+ shr ebx,24
+serial_putc_20:
+ test byte [esi+sl.status],2
+ jz serial_putc_70
+
+ or bl,bl
+ jz serial_putc_30
+ cmp bl,[esi+sl.scancode]
+ jnz serial_putc_70
+serial_putc_30:
+ mov dx,[esi+sl.port]
+
+ add dx,5
+ mov edi,[es:46ch]
+ add edi,3
+serial_putc_50:
+ ; wait until output reg ready (about 1/10s)
+ cmp edi,[es:46ch]
+ jb serial_putc_70
+
+ in al,dx
+ test al,20h
+ jz serial_putc_50
+ sub dx,5
+ mov al,ah
+ call slow_out
+
+serial_putc_70:
+ add esi,sl.size
+ cmp esi,serial.lines + serial.lines.max * sl.size
+ jb serial_putc_20
+
+serial_putc_90:
+ ret
+
+
+; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+; Get system time.
+;
+; return:
+; eax clock ticks since midnight (18.2/s)
+;
+
+ bits 32
+
+get_time:
+ push ecx
+ push edx
+ xor eax,eax
+ int 1ah
+ push cx
+ push dx
+ pop eax
+ pop edx
+ pop ecx
+ ret
+
+
+; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+; Convert 8 bit bcd to binary.
+;
+; al bcd
+;
+; return
+; ax binary
+;
+
+ bits 32
+
+bcd2bin:
+ push edx
+ mov dl,al
+ shr al,4
+ and dl,0fh
+ mov ah,10
+ mul ah
+ add al,dl
+ pop edx
+ ret
+
+
+; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+; Get date.
+;
+; return:
+; eax date (year:16, month:8, day:8)
+;
+
+ bits 32
+
+get_date:
+ clc
+ mov ah,4
+ int 1ah
+ jnc get_date_10
+ xor edx,edx
+ xor ecx,ecx
+get_date_10:
+ mov al,ch
+ call bcd2bin
+ imul bx,ax,100
+ mov al,cl
+ call bcd2bin
+ add bx,ax
+ shl ebx,16
+ mov al,dh
+ call bcd2bin
+ mov bh,al
+ mov al,dl
+ call bcd2bin
+ add bx,ax
+ mov eax,ebx
+ ret
+
+
+; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+; Set console cursor position.
+;
+; dh row
+; dl column
+;
+; return:
+;
+
+ bits 32
+
+con_xy:
+ mov bh,0
+ mov ah,2
+ int 10h
+ and dword [con_x],0
+ ret
+
+
+; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+; Idle task.
+;
+; Run when we are waiting for keyboard input.
+;
+
+ bits 32
+
+idle:
+ pusha
+
+ mov edi,[idle.draw_buffer]
+ or edi,edi
+ jz idle_90
+
+ push dword [gfx_cur]
+
+ mov ax,[screen_width]
+ sub ax,kroete.width
+ shr ax,1
+ mov [gfx_cur_x],ax
+
+ mov ax,[screen_height]
+ sub ax,kroete.height
+ shr ax,1
+ mov [gfx_cur_y],ax
+
+ cmp byte [idle.invalid],0
+ jz idle_10
+ push edi
+ mov dx,[es:edi]
+ mov cx,[es:edi+2]
+ add edi,4
+ call save_bg
+ pop edi
+ mov byte [idle.invalid],0
+idle_10:
+
+ mov esi,[idle.data1]
+ push edi
+ call kroete
+ pop edi
+
+ mov dx,[es:edi]
+ mov cx,[es:edi+2]
+ add edi,4
+ mov bx,dx
+ imul bx,[pixel_bytes]
+ call restore_bg
+
+idle_90:
+ pop dword [gfx_cur]
+
+ popa
+ ret
+
+
+; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+; Execute bytecode.
+;
+; eax start address, relative to [pscode_start]
+;
+; return:
+; CF error
+;
+
+ bits 32
+
+run_pscode:
+ mov [pscode_instr],eax
+ mov [pscode_next_instr],eax
+ mov dword [pscode_next_break],-1
+ and word [pscode_error],byte 0
+ mov dword [pscode_eval],-1
+
+ cmp [pscode_size],eax
+ mov bp,pserr_nocode
+ jb run_pscode_90
+run_pscode_10:
+ mov eax,[pscode_next_instr]
+ mov [pscode_instr],eax
+ cmp eax,-1 ; -1 is special: stop there
+ mov bp,pserr_ok
+ jz run_pscode_90
+ mov ecx,-1
+ xchg ecx,[pscode_eval]
+ cmp ecx,[pscode_eval]
+ jz run_pscode_15
+ ; run opcode from exec instruction
+ mov ebx,eax
+ mov dl,t_sec
+ mov eax,ecx
+ jmp run_pscode_455
+run_pscode_15:
+ mov ebx,eax
+ add eax,[pscode_start]
+ mov esi,eax
+ es lodsb
+ xor ecx,ecx
+ mov cl,al
+ and al,0fh
+ shr cl,4
+ mov ah,cl
+
+ and cl,7
+ xor edx,edx
+
+ cmp cl,0
+ jz run_pscode_20
+
+ mov dl,[es:esi]
+ cmp cl,1
+ jz run_pscode_20
+
+ mov dx,[es:esi]
+ cmp cl,2
+ jz run_pscode_20
+
+ mov edx,[es:esi]
+ and edx,0ffffffh
+ cmp cl,3
+ jz run_pscode_20
+
+ mov edx,[es:esi]
+run_pscode_20:
+ stc
+ adc ebx,ecx ; ebx+ecx+1
+ mov edi,ebx
+ add edi,[pscode_start]
+
+ test ah,8
+ jz run_pscode_30
+ add ebx,edx
+run_pscode_30:
+ cmp [pscode_size],ebx
+ mov bp,pserr_nocode
+ jb run_pscode_90
+
+ ; fix up signed integer
+ cmp al,t_int
+ jnz run_pscode_40
+ cmp ah,0
+ jz run_pscode_40
+ cmp ah,4
+ jae run_pscode_40
+ shl ah,3
+ mov cl,20h
+ sub cl,ah
+ shl edx,cl
+ sar edx,cl
+run_pscode_40:
+
+ cmp al,t_string
+ jnz run_pscode_45
+ mov edx,edi
+run_pscode_45:
+ xchg eax,edx
+
+run_pscode_455:
+
+ ; dl: opcode
+ ; eax: instr arg
+ ; ebx: next instruction
+
+ ; remember them
+ mov [pscode_type],dl
+ mov [pscode_arg],eax
+ mov [pscode_next_instr],ebx
+
+ cmp dl,t_sec
+ jnz run_pscode_46
+
+ ; look it up in the dictionary, then continue
+ mov ecx,eax
+ call get_dict_entry
+ mov bp,pserr_invalid_dict
+ jc run_pscode_90
+
+ movzx edx,dl
+ mov [pscode_error_arg_0],eax
+ mov [pscode_error_arg_1],edx
+
+run_pscode_46:
+ pusha
+ cmp byte [show_debug_info],0
+ jz run_pscode_47
+ call ps_status_info
+run_pscode_47:
+ mov eax,[pscode_next_break]
+ cmp eax,[pscode_instr]
+ jz run_pscode_475
+ cmp byte [single_step],0
+ jz run_pscode_48
+run_pscode_475:
+ mov byte [single_step],1
+ call get_key
+ cmp ah,1 ; ESC
+ jnz run_pscode_477
+ mov byte [single_step],0
+ mov byte [show_debug_info],0
+ jmp run_pscode_48
+run_pscode_477:
+ cmp ah,0fh ; Tab
+ jnz run_pscode_48
+ mov byte [single_step],0
+ mov eax,[pscode_next_instr]
+ mov [pscode_next_break],eax
+run_pscode_48:
+ popa
+
+ ; actually do something
+ cmp dl,t_none
+ jz run_pscode_50
+ cmp dl,t_int
+ jz run_pscode_50
+ cmp dl,t_unsigned
+ jz run_pscode_50
+ cmp dl,t_bool
+ jz run_pscode_50
+ cmp dl,t_string
+ jz run_pscode_50
+ cmp dl,t_dict_idx
+ jz run_pscode_50
+ cmp dl,t_ptr
+ jz run_pscode_50
+ cmp dl,t_array
+ jnz run_pscode_52
+run_pscode_50:
+ ; t_none, t_int, t_bool, t_unsigned, t_string, t_code, t_dict_idx, t_array, t_ptr
+
+ cmp dl,t_unsigned
+ jnz run_pscode_51
+ mov dl,t_int ; always use t_int
+run_pscode_51:
+ mov ecx,[pstack.ptr]
+ cmp ecx,[pstack.size]
+ mov bp,pserr_pstack_overflow
+ jae run_pscode_80
+ inc dword [pstack.ptr]
+
+ xor ecx,ecx
+ call set_pstack_tos
+ jc run_pscode_90
+ jmp run_pscode_10
+
+run_pscode_52:
+ cmp dl,t_prim
+ jnz run_pscode_53
+
+ cmp eax,prim_functions
+ mov bp,pserr_invalid_prim
+ jae run_pscode_80
+ movzx eax,word [jt_p_none+2*eax]
+ or eax,eax ; implemented?
+ jz run_pscode_80
+ call eax
+ jc run_pscode_90
+ jmp run_pscode_10
+
+run_pscode_53:
+ cmp dl,t_code
+ jnz run_pscode_54
+
+ ; branch
+ xchg eax,[pscode_next_instr]
+
+ ; Check if we should just leave a mark on the
+ ; pstack or actually execute the code.
+ ; Maybe 2 different types (say: t_code, t_mark) would be better?
+ cmp byte [pscode_type],t_sec
+ jnz run_pscode_50
+
+ mov ecx,[rstack.ptr]
+ cmp ecx,[rstack.size]
+ mov bp,pserr_rstack_overflow
+ jae run_pscode_80
+ inc dword [rstack.ptr]
+
+ xor ecx,ecx
+ call set_rstack_tos
+ jc run_pscode_90
+ jmp run_pscode_10
+
+run_pscode_54:
+ cmp dl,t_ret
+ jnz run_pscode_70
+
+ xor ecx,ecx
+ call get_rstack_tos
+ jnc run_pscode_55
+ mov bp,pserr_rstack_underflow
+ jc run_pscode_90
+; ; treat this case as 'end'
+; mov bp,pserr_ok
+; clc
+; jmp run_pscode_90
+run_pscode_55:
+ mov bp,pserr_invalid_rstack_entry
+ cmp dl,t_code
+ jz run_pscode_68
+ cmp dl,t_if ; if
+ jz run_pscode_68
+ cmp dl,t_loop ; loop
+ jz run_pscode_69
+ cmp dl,t_repeat ; repeat
+ jz run_pscode_65
+ cmp dl,t_for ; for
+ jz run_pscode_62
+ cmp dl,t_forall ; forall
+ jnz run_pscode_80
+
+ ; forall
+ cmp dword [rstack.ptr],5
+ mov bp,pserr_rstack_underflow
+ jc run_pscode_90
+
+ mov ecx,1
+ call get_rstack_tos ; count
+ cmp dl,t_int
+ jnz run_pscode_66
+
+ mov ecx,2
+ push eax
+ call get_rstack_tos ; length
+ pop esi
+ cmp dl,t_int
+ jnz run_pscode_66
+
+ mov ecx,3
+ push eax
+ push esi
+ call get_rstack_tos ; string/array
+ pop esi
+ pop ecx
+ cmp dl,t_array
+ jz run_pscode_57
+ cmp dl,t_string
+ jz run_pscode_57
+ cmp dl,t_ptr
+ jnz run_pscode_66
+
+run_pscode_57:
+ ; dl,eax: string/array
+ ; esi: count
+ ; ecx: length
+
+ inc esi
+ cmp esi,ecx
+ jae run_pscode_64
+
+ push edx
+ mov ecx,1
+ mov dl,t_int
+ push eax
+ push esi
+ mov eax,esi
+ call set_rstack_tos
+ pop eax
+ pop ecx
+ pop edx
+
+ xchg dl,dh
+ call p_get
+ mov bp,pserr_invalid_range
+ jc run_pscode_80
+
+ mov ecx,[pstack.ptr]
+ cmp ecx,[pstack.size]
+ jae run_pscode_80
+ inc dword [pstack.ptr]
+ xor ecx,ecx
+ call set_pstack_tos
+ jc run_pscode_90
+
+ xor ecx,ecx
+ call get_rstack_tos
+ jmp run_pscode_69
+
+
+run_pscode_62:
+ ; for
+ cmp dword [rstack.ptr],5
+ mov bp,pserr_rstack_underflow
+ jc run_pscode_90
+
+ mov ecx,2
+ call get_rstack_tos ; step
+ cmp dl,t_int
+ jnz run_pscode_66
+ mov ecx,1
+ push eax
+ call get_rstack_tos ; limit
+ pop esi
+ cmp dl,t_int
+ jnz run_pscode_66
+ push eax
+ mov ecx,3
+ push esi
+ call get_rstack_tos ; counter
+ pop esi
+ cmp dl,t_int
+ pop ecx
+ jnz run_pscode_66
+ add eax,esi
+ or esi,esi
+ push eax
+ js run_pscode_63
+ xchg eax,ecx
+run_pscode_63:
+ cmp eax,ecx
+ pop eax
+ jl run_pscode_64
+
+ mov ecx,3
+ push eax
+ call set_rstack_tos
+ pop eax
+ mov ecx,[pstack.ptr]
+ cmp ecx,[pstack.size]
+ jae run_pscode_80
+ inc dword [pstack.ptr]
+ xor ecx,ecx
+ mov dl,t_int
+ call set_pstack_tos
+ jc run_pscode_90
+ xor ecx,ecx
+ call get_rstack_tos
+ jmp run_pscode_69
+run_pscode_64:
+ mov ecx,4
+ call get_rstack_tos
+ sub dword [rstack.ptr],5
+ jmp run_pscode_69
+
+
+run_pscode_65:
+ ; repeat
+ cmp dword [rstack.ptr],3
+ mov bp,pserr_rstack_underflow
+ jc run_pscode_90
+ push eax
+ mov ecx,1
+ call get_rstack_tos
+ pop ebx
+ cmp dl,t_int
+run_pscode_66:
+ mov bp,pserr_invalid_rstack_entry
+ jnz run_pscode_80
+ dec eax
+ jz run_pscode_67
+ mov ecx,1
+ push ebx
+ call set_rstack_tos
+ pop eax
+ jmp run_pscode_69
+run_pscode_67:
+ mov ecx,2
+ call get_rstack_tos
+ sub dword [rstack.ptr],2
+
+run_pscode_68:
+ dec dword [rstack.ptr]
+run_pscode_69:
+ mov [pscode_next_instr],eax
+
+ jmp run_pscode_10
+
+run_pscode_70:
+
+%if 0
+; Using undefined values has been legalized.
+; See run_pscode_51 above...
+;
+ cmp dl,t_none
+ mov bp,pserr_nop
+ jz run_pscode_80
+%endif
+
+ cmp dl,t_sec
+ mov bp,pserr_invalid_dict_entry
+ jz run_pscode_80
+
+ cmp dl,t_end
+ mov bp,pserr_ok
+ jz run_pscode_90
+
+ ; illegal opcode
+ mov bp,pserr_invalid_opcode
+run_pscode_80:
+ stc
+run_pscode_90:
+ mov [pscode_error],bp
+ ret
+
+
+; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+; Get one argument from stack.
+;
+; dl tos type
+;
+; return:
+; eax tos
+; dl actual tos types (even if CF is set)
+; CF error
+;
+
+ bits 32
+
+get_1arg:
+ xor eax,eax
+ cmp dword [pstack.ptr],1
+ mov bp,pserr_pstack_underflow
+ jc get_1arg_90
+ push edx
+ xor ecx,ecx
+ call get_pstack_tos
+ pop ebx
+ ; ignore type check if t_none was requested
+ cmp bl,t_none
+ jz get_1arg_90
+ cmp bl,dl
+ jz get_1arg_90
+ mov bp,pserr_wrong_arg_types
+ stc
+get_1arg_90:
+ ret
+
+
+; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+; Get two arguments from stack.
+;
+; dl tos type
+; dh tos + 1 type
+; return:
+; eax tos
+; ecx tos + 1
+; dx actual tos types (even if CF is set)
+; CF error
+;
+
+ bits 32
+
+get_2args:
+ xor eax,eax
+ xor ecx,ecx
+ mov ebx,edx
+ xor edx,edx
+ cmp dword [pstack.ptr],2
+ mov bp,pserr_pstack_underflow
+ jc get_2args_90
+ push ebx
+ inc ecx
+ call get_pstack_tos
+ push edx
+ push eax
+ xor ecx,ecx
+ call get_pstack_tos
+ pop ecx
+ pop ebx
+ mov dh,bl
+ pop ebx
+
+ ; ignore type check if t_none was requested
+ cmp bh,t_none
+ jnz get_2args_50
+ mov bh,dh
+get_2args_50:
+ cmp bl,t_none
+ jnz get_2args_60
+ mov bl,dl
+get_2args_60:
+ cmp bx,dx
+ jz get_2args_90
+ mov bp,pserr_wrong_arg_types
+get_2args_80:
+ stc
+get_2args_90:
+ ret
+
+
+; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+; Get array/string/ptr element.
+;
+; dh, ecx obj
+; eax index
+;
+; return:
+; dl, eax element
+; CF 0/1 ok/not ok
+;
+
+ bits 32
+
+p_get:
+ cmp dh,t_array
+ jz p_get_50
+ cmp dh,t_string
+ jz p_get_10
+ cmp dh,t_ptr
+ stc
+ jnz p_get_90
+p_get_10:
+ mov dl,t_int
+ movzx eax,byte [es:eax+ecx]
+ jmp p_get_80
+p_get_50:
+ mov bp,pserr_invalid_range
+ movzx ebx,word [es:ecx]
+ cmp eax,ebx
+ cmc
+ jc p_get_90
+
+ lea eax,[eax+4*eax]
+
+ mov dl,[es:ecx+eax+2]
+ mov eax,[es:ecx+eax+3]
+p_get_80:
+ clc
+p_get_90:
+ ret
+
+
+; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+;
+; Our primary functions.
+;
+
+
+;; { - start code definition
+;
+; group: code
+;
+; ( -- code1 )
+;
+; code1: code start marker
+;
+; After @{, no code is executed until a matching @} is found.
+;
+; example
+; /++ { 1 add } def % define increment function '++'
+;
+
+
+;; } - complete code definition
+;
+; group: code
+;
+; ( -- )
+;
+; Note: @{ and @} are taken care of already during conversion into bytecode. This means that
+; redefining them does not work as you would expect.
+;
+; example
+; /dec { 1 sub } def % define decrement function 'dec'
+;
+
+
+;; [ - start array
+;
+; group: arraydef
+;
+; ( -- mark1 )
+;
+; mark1: array start marker
+;
+; example
+; [ 1 2 3 ] % array with 3 elements
+;
+
+ bits 32
+
+prim_astart:
+ mov eax,[pstack.ptr]
+ inc eax
+ cmp [pstack.size],eax
+ mov bp,pserr_pstack_overflow
+ jb prim_astart_90
+ mov [pstack.ptr],eax
+ mov dl,t_prim
+ mov eax,(jt_p_astart - jt_p_none) / 2 ; we need just some mark
+ xor ecx,ecx
+ call set_pstack_tos
+prim_astart_90:
+ ret
+
+
+;; ] - complete array definition
+;
+; group: arraydef, mem
+;
+; ( mark1 obj1 ... objN -- array1 )
+;
+; mark1: array start marker
+;
+; obj1 ... objN: some objects
+; array1: N-dimensional array with obj1 ... objN
+;
+; Note: The array uses dynamically allocated memory which must be released using @free.
+;
+; example
+; /foo [ "some" "text" ] def % array with 2 elements
+; foo free % free memory
+;
+
+ bits 32
+
+prim_aend:
+ xor ecx,ecx
+prim_aend_10:
+ push ecx
+ call get_pstack_tos
+ pop ecx
+ mov bp,pserr_pstack_underflow
+ jc prim_aend_90
+ inc ecx
+ cmp dl,t_prim
+ jnz prim_aend_10
+ cmp eax,(jt_p_astart - jt_p_none) / 2
+ jnz prim_aend_10
+
+ dec ecx
+ lea eax,[ecx+4*ecx+2]
+
+ push ecx
+ call calloc
+ pop ecx
+
+ or eax,eax
+ mov bp,pserr_no_memory
+ stc
+ jz prim_aend_90
+
+ push ecx
+ push eax
+
+ mov edi,eax
+ mov [es:edi],cx
+ inc edi
+ inc edi
+
+prim_aend_40:
+ sub ecx,1
+ jc prim_aend_60
+
+ push edi
+ push ecx
+ call get_pstack_tos
+ pop ecx
+ pop edi
+
+ mov [es:edi],dl
+ mov [es:edi+1],eax
+ add edi,5
+ jmp prim_aend_40
+
+prim_aend_60:
+
+ pop eax
+ pop ecx
+ sub [pstack.ptr],ecx
+ mov dl,t_array
+ xor ecx,ecx
+ call set_pstack_tos
+prim_aend_90:
+ ret
+
+
+;; get - get array, string or memory element
+;
+; group: get/put
+;
+; ( array1 int1 -- obj1 )
+; ( string1 int2 -- int3 )
+; ( ptr1 int4 -- int5 )
+;
+; obj1: int1-th element of array1
+; int3: int2-th byte of string1
+; int5: int4-th byte of ptr1
+;
+; Note: Returns the n-th byte of string1, not the n-th utf8 char. Sizes of string1 or ptr1
+; are not checked.
+;
+; example
+; "abc" 1 get % 'b'
+;
+; [ 10 20 30 ] 2 get % 30
+;
+
+ bits 32
+
+prim_get:
+ mov dx,t_int + (t_array << 8)
+ call get_2args
+ jnc prim_get_10
+ cmp dx,t_int + (t_string << 8)
+ jz prim_get_10
+ cmp dx,t_int + (t_ptr << 8)
+ stc
+ jnz prim_get_90
+prim_get_10:
+ call p_get
+ jc prim_get_90
+
+ dec dword [pstack.ptr]
+ xor ecx,ecx
+ call set_pstack_tos
+prim_get_90:
+ ret
+
+
+;; put - set an array, string or memory element
+;
+; group: get/put
+;
+; ( array1 int1 obj1 -- )
+; ( string1 int2 int3 -- )
+; ( ptr1 int4 int5 -- )
+;
+; int1-th element of array1 = obj1
+;
+; int2-th byte of string1 = int3
+;
+; int4-th byte of ptr1 = int5
+;
+; Note: Sets the n-th byte of string1, not the n-th utf8 char. Sizes of string1 or ptr1
+; are not checked.
+;
+; example
+; /foo [ 10 20 30 ] def
+; foo 2 77 put % foo = [ 10 20 77 ]
+;
+; /foo 10 string def
+; foo 0 'a' put
+; foo 1 'b' put % foo = "ab"
+;
+; But don't do this:
+; "abc" 1 'X' put % modifies string constant "abc" to "aXc"!
+;
+
+ bits 32
+
+prim_put:
+ mov bp,pserr_pstack_underflow
+ cmp dword [pstack.ptr],3
+ jc prim_put_90
+
+ mov bp,pserr_wrong_arg_types
+ mov ecx,2
+ call get_pstack_tos
+ mov dh,0
+ push edx
+ push eax
+ mov dx,t_none + (t_int << 8)
+ call get_2args
+ pop ebx
+ pop ebp
+ shl edx,16
+ mov dx,bp
+ rol edx,8
+ cmp dx,t_int + (t_array << 8)
+ jz prim_put_50
+ cmp edx,t_int + (t_string << 8) + (t_int << 24)
+ jz prim_put_30
+ cmp edx,t_int + (t_ptr << 8) + (t_int << 24)
+ stc
+ mov bp,pserr_wrong_arg_types
+ jnz prim_put_90
+prim_put_30:
+ mov [es:ebx+ecx],al
+ jmp prim_put_80
+prim_put_50:
+ shr edx,24
+
+ movzx esi,word [es:ebx]
+ cmp ecx,esi
+ cmc
+ mov bp,pserr_invalid_range
+ jc prim_put_90
+
+ lea ecx,[ecx+4*ecx]
+
+ mov [es:ebx+ecx+2],dl
+ mov [es:ebx+ecx+3],eax
+
+prim_put_80:
+ sub dword [pstack.ptr],3
+prim_put_90:
+ ret
+
+
+;; length - array, string or memory size
+;
+; group: mem
+;
+; ( array1 -- int1 )
+; ( string1 -- int1 )
+; ( ptr1 -- int1 )
+;
+; int1: size of array1 or string1 or ptr1
+;
+; Returns the length of string1 in bytes, not the number of Unicode chars. If ptr1
+; doesn't point at the start of a memory area, @length returns the number of remaining
+; bytes.
+;
+; example
+; "abc" length % 3
+;
+; [ 0 1 ] length % 2
+;
+; /foo 10 malloc def
+; foo length % 10
+; foo 3 add length % 7
+;
+
+ bits 32
+
+prim_length:
+ mov dl,t_none
+ call get_1arg
+ jc prim_length_90
+ call get_length
+ jc prim_length_90
+ xor ecx,ecx
+ mov dl,t_int
+ call set_pstack_tos
+prim_length_90:
+ ret
+
+
+; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+;; array - create an empty array
+;
+; group: mem
+;
+; ( int1 -- array1 )
+;
+; int1: array dimension
+; array1: new array
+;
+; Note: Use @free to free array1.
+;
+; example
+; /foo 10 array def % create array with 10 elements
+; foo 4 123 put % foo[4] = 123
+; foo free % free foo
+;
+
+ bits 32
+
+prim_array:
+ mov dl,t_int
+ call get_1arg
+ jc prim_array_90
+ cmp eax,10000h
+ cmc
+ mov bp,pserr_invalid_range
+ jc prim_array_90
+ push eax
+ lea eax,[eax+4*eax+2]
+ call calloc
+ pop ecx
+ or eax,eax
+ stc
+ mov bp,pserr_no_memory
+ jz prim_array_90
+ mov [es:eax],cx
+ xor ecx,ecx
+ mov dl,t_array
+ call set_pstack_tos
+prim_array_90:
+ ret
+
+
+;; pop - remove TOS
+;
+; group: stackbasic
+;
+; ( obj1 -- )
+;
+; example
+; % status: true or false
+; "bad" status { pop "ok" } if % "bad" or "ok"
+;
+
+ bits 32
+
+prim_pop:
+ cmp dword [pstack.ptr],1
+ mov bp,pserr_pstack_underflow
+ jc prim_pop_90
+ dec dword [pstack.ptr]
+prim_pop_90:
+ ret
+
+
+;; dup - duplicate TOS
+;
+; group: stackbasic
+;
+; ( obj1 -- obj1 obj1 )
+;
+; example
+; key % key: some input value
+; dup 'a' eq { do_a } if % if key = 'a'
+; dup 'b' eq { do_b } if % if key = 'b'
+; dup 'c' eq { do_c } if % if key = 'c'
+; pop
+;
+
+ bits 32
+
+prim_dup:
+ mov ecx,[pstack.ptr]
+ cmp ecx,[pstack.size]
+ cmc
+ mov bp,pserr_pstack_overflow
+ jb prim_dup_90
+ xor ecx,ecx
+ call get_pstack_tos
+ mov bp,pserr_pstack_underflow
+ jc prim_dup_90
+ xor ecx,ecx
+ inc dword [pstack.ptr]
+ call set_pstack_tos
+prim_dup_90:
+ ret
+
+
+;; over - copy TOS-1
+;
+; group: stackbasic
+;
+; ( obj1 obj2 -- obj1 obj2 obj1 )
+;
+
+ bits 32
+
+prim_over:
+ mov ecx,[pstack.ptr]
+ cmp ecx,[pstack.size]
+ cmc
+ mov bp,pserr_pstack_overflow
+ jb prim_over_90
+ mov ecx,1
+ call get_pstack_tos
+ mov bp,pserr_pstack_underflow
+ jc prim_over_90
+ xor ecx,ecx
+ inc dword [pstack.ptr]
+ call set_pstack_tos
+prim_over_90:
+ ret
+
+
+;; index - copy stack element
+;
+; group: stackbasic
+;
+; ( objN ... obj1 int1 -- objN ... obj1 objM )
+;
+; objM: M = int1 + 1
+;
+; example
+; /dup { 0 index } def
+; /over { 1 index } def
+;
+
+ bits 32
+
+prim_index:
+ mov dl,t_int
+ call get_1arg
+ jc prim_index_90
+
+ mov edx,[pstack.ptr]
+ sub edx,2
+ jc prim_index_90
+ cmp edx,eax
+ mov bp,pserr_pstack_underflow
+ jc prim_index_90
+
+ lea ecx,[eax+1]
+ call get_pstack_tos
+ xor ecx,ecx
+ call set_pstack_tos
+prim_index_90:
+ ret
+
+
+;; exec - evaluate object
+;
+; group: control
+;
+; ( dict1 -- )
+; ( obj1 -- obj1 )
+;
+; If obj1 is a dictionary entry, it is looked up and evaluated. If not, the stack is
+; left unchanged.
+;
+; Note: Unlike Postscript, no cvx is necessary. And it works only with
+; dictionary references.
+;
+; example
+;
+; /foo [ /bar 100 "abc" ] def
+; foo 0 get % /bar
+; exec % run bar
+; foo 2 get % "abc"
+; exec % still "abc"
+;
+
+ bits 32
+
+prim_exec:
+ mov dl,t_none
+ call pr_setobj_or_none
+ cmp dl,t_dict_idx
+ jz prim_exec_50
+ jmp pr_getobj
+prim_exec_50:
+ mov [pscode_eval],eax
+ ret
+
+
+;; add - addition
+;
+; group: arith
+;
+; ( int1 int2 -- int3 )
+; ( string1 int4 -- string2 )
+; ( ptr1 int5 -- ptr2 )
+;
+; int3: int1 + int2
+; string2: substring of string1 at offset int4
+;
+; Note: Strings are treated as byte sequences, not Unicode chars. Sizes of string1 and ptr1 are not
+; checked.
+;
+; example
+; 1 2 add % 3
+;
+; "abc" 1 add % "bc"
+;
+
+ bits 32
+
+prim_add:
+ mov dx,t_int + (t_int << 8)
+ call get_2args
+ jnc prim_add_50
+ cmp dx,t_int + (t_string << 8)
+ jz prim_add_50
+ cmp dx,t_int + (t_ptr << 8)
+ jz prim_add_50
+ cmp dx,t_string + (t_int << 8)
+ jz prim_add_40
+ cmp dx,t_ptr + (t_int << 8)
+ stc
+ jnz prim_add_90
+prim_add_40:
+ xchg dl,dh
+prim_add_50:
+ add eax,ecx
+ dec dword [pstack.ptr]
+ xor ecx,ecx
+ mov dl,dh
+ call set_pstack_tos
+prim_add_90:
+ ret
+
+
+;; sub - subtraction
+;
+; group: arith
+;
+; ( int1 int2 -- int3 )
+; ( string1 int4 -- string2 )
+; ( ptr1 int5 -- ptr2 )
+; ( string3 string4 -- int6 )
+; ( ptr2 ptr3 -- int7 )
+;
+; int3: int1 - int2
+; string2: substring of string1 at offset -int4
+; int6: string3 - string4
+; int7: ptr2 - ptr3
+;
+; Note: Strings are treated as byte sequences, not Unicode chars. Boundaries of string1 and ptr1 are not
+; checked.
+;
+; example
+; 3 1 sub % 2
+;
+; "abcd" 3 add % "d"
+; 2 sub % "bcd"
+;
+
+ bits 32
+
+prim_sub:
+ mov dx,t_int + (t_int << 8)
+ call get_2args
+ jnc prim_sub_50
+ cmp dx,t_int + (t_string << 8)
+ jz prim_sub_50
+ cmp dx,t_int + (t_ptr << 8)
+ jz prim_sub_50
+ cmp dx,t_ptr + (t_ptr << 8)
+ jz prim_sub_40
+ cmp dx,t_string + (t_string << 8)
+ stc
+ jnz prim_sub_90
+prim_sub_40:
+ mov dh,t_int
+prim_sub_50:
+ xchg eax,ecx
+ sub eax,ecx
+ dec dword [pstack.ptr]
+ xor ecx,ecx
+ mov dl,dh
+ call set_pstack_tos
+prim_sub_90:
+ ret
+
+
+;; mul - multiplication
+;
+; group: arith
+;
+; ( int1 int2 -- int3 )
+;
+; int3: int1 * int2
+;
+; example
+; 2 3 mul % 6
+;
+
+ bits 32
+
+prim_mul:
+ mov dx,t_int + (t_int << 8)
+ call get_2args
+ jc prim_mul_90
+ imul ecx
+ dec dword [pstack.ptr]
+ xor ecx,ecx
+ mov dl,t_int
+ call set_pstack_tos
+prim_mul_90:
+ ret
+
+
+;; div - division
+;
+; group: arith
+;
+; ( int1 int2 -- int3 )
+;
+; int3: int1 / int2
+;
+; example
+; 17 3 div % 5
+;
+
+ bits 32
+
+prim_div:
+ mov dx,t_int + (t_int << 8)
+ call get_2args
+ jc prim_div_90
+ or eax,eax
+ stc
+ mov bp,pserr_div_by_zero
+ jz prim_div_90
+ xchg eax,ecx
+ cdq
+ idiv ecx
+ dec dword [pstack.ptr]
+ xor ecx,ecx
+ mov dl,t_int
+ call set_pstack_tos
+prim_div_90:
+ ret
+
+
+;; mod - remainder
+;
+; group: arith
+;
+; ( int1 int2 -- int3 )
+;
+; int3: int1 % int2
+;
+; example
+; 17 3 mod % 2
+;
+
+ bits 32
+
+prim_mod:
+ mov dx,t_int + (t_int << 8)
+ call get_2args
+ jc prim_mod_90
+ or eax,eax
+ stc
+ mov bp,pserr_div_by_zero
+ jz prim_div_90
+ xchg eax,ecx
+ cdq
+ idiv ecx
+ xchg eax,edx
+ dec dword [pstack.ptr]
+ xor ecx,ecx
+ mov dl,t_int
+ call set_pstack_tos
+prim_mod_90:
+ ret
+
+
+;; neg - negation
+;
+; group: arith
+;
+; ( int1 -- int2 )
+;
+; int2: -int1
+;
+; example
+; 5 neg % -5
+;
+
+ bits 32
+
+prim_neg:
+ mov dl,t_int
+ call get_1arg
+ jc prim_neg_90
+ neg eax
+ xor ecx,ecx
+ call set_pstack_tos
+prim_neg_90:
+ ret
+
+
+;; abs - absolute value
+;
+; group: arith
+;
+; ( int1 -- int2 )
+;
+; int2: |int1|
+;
+; example
+; -6 abs % 6
+;
+
+ bits 32
+
+prim_abs:
+ mov dl,t_int
+ call get_1arg
+ jc prim_abs_90
+ or eax,eax
+ jns prim_abs_50
+ neg eax
+prim_abs_50:
+ xor ecx,ecx
+ call set_pstack_tos
+prim_abs_90:
+ ret
+
+
+;; min - minimum
+;
+; group: arith
+;
+; ( int1 int2 -- int3 )
+;
+; int3: min(int1, int2)
+;
+; example
+; 4 11 min % 4
+;
+
+ bits 32
+
+prim_min:
+ mov dx,t_int + (t_int << 8)
+ call get_2args
+ jc prim_min_90
+ cmp eax,ecx
+ jle prim_min_50
+ xchg eax,ecx
+prim_min_50:
+ dec dword [pstack.ptr]
+ xor ecx,ecx
+ call set_pstack_tos
+prim_min_90:
+ ret
+
+
+;; max - maximum
+;
+; group: arith
+;
+; ( int1 int2 -- int3 )
+;
+; int3: max(int1, int2)
+;
+; example
+; 4 11 max % 11
+;
+
+ bits 32
+
+prim_max:
+ mov dx,t_int + (t_int << 8)
+ call get_2args
+ jc prim_max_90
+ cmp eax,ecx
+ jge prim_max_50
+ xchg eax,ecx
+prim_max_50:
+ dec dword [pstack.ptr]
+ xor ecx,ecx
+ call set_pstack_tos
+prim_max_90:
+ ret
+
+
+ bits 32
+
+plog_args:
+ mov dx,t_int + (t_int << 8)
+ call get_2args
+ jnc plog_args_90
+ cmp dx,t_int + (t_bool << 8)
+ jz plog_args_20
+ cmp dx,t_bool + (t_int << 8)
+ jz plog_args_20
+ cmp dx,t_bool + (t_bool << 8)
+ jz plog_args_20
+ stc
+ pop eax ; don't return
+ jmp plog_args_90
+plog_args_20:
+ mov dl,t_bool
+ or eax,eax
+ setnz al
+ movzx eax,al
+ or ecx,ecx
+ setnz cl
+ movzx ecx,cl
+plog_args_90:
+ ret
+
+
+;; and - logical or arithmetical 'and'
+;
+; group: arith
+;
+; ( int1 int2 -- int3 )
+; ( bool1 bool2 -- bool3 )
+;
+; int3: int1 &amp; int2
+; bool3: bool1 &amp;&amp; bool2
+;
+; Note: Mixing boolean and integer argument types is possible, in this case integers are
+; converted to boolean first.
+;
+; example
+; true false and % false
+;
+; 3 6 and % 2
+;
+; 10 true and % gives true, but please avoid this
+;
+
+ bits 32
+
+prim_and:
+ call plog_args
+ and eax,ecx
+prim_and_50:
+ dec dword [pstack.ptr]
+ xor ecx,ecx
+ call set_pstack_tos
+ ret
+
+
+;; or - logical or arithmetical 'or'
+;
+; group: arith
+;
+; ( int1 int2 -- int3 )
+; ( bool1 bool2 -- bool3 )
+;
+; int3: int1 | int2
+; bool3: bool || bool2
+;
+; Note: Mixing boolean and integer argument types is possible, in this case integers are
+; converted to boolean first.
+;
+; example
+; true false or % true
+;
+; 3 6 or % 7
+;
+; 10 true or % gives true, but please avoid this
+;
+
+ bits 32
+
+prim_or:
+ call plog_args
+ or eax,ecx
+ jmp prim_and_50
+
+
+;; xor - logical or arithmetical exclusive 'or'
+;
+; group: arith
+;
+; ( int1 int2 -- int3 )
+; ( bool1 bool2 -- bool3 )
+;
+; int3: int1 ^ int2
+; bool3: bool ^^ bool2
+;
+; Note: Mixing boolean and integer argument types is possible, in this case integers are
+; converted to boolean first.
+;
+; example
+; true false xor % true
+;
+; 3 6 xor % 5
+;
+; 10 true xor % gives false, but please avoid this
+;
+
+ bits 32
+
+prim_xor:
+ call plog_args
+ xor eax,ecx
+ jmp prim_and_50
+
+
+;; not - logical or arithmetical 'not'
+;
+; group: arith
+;
+; ( int1 -- int2 )
+; ( bool1 -- bool2 )
+;
+; int2: -int1 - 1
+; bool2: !bool1
+;
+; example
+; true not % false
+;
+; 0 not % -1
+;
+
+ bits 32
+
+prim_not:
+ xor ecx,ecx
+ call get_pstack_tos
+ jc prim_not_90
+ cmp dl,t_int
+ jz prim_not_50
+ cmp dl,t_bool
+ mov bp,pserr_wrong_arg_types
+ stc
+ jnz prim_not_90
+ xor al,1
+ not eax
+prim_not_50:
+ not eax
+ xor ecx,ecx
+ call set_pstack_tos
+prim_not_90:
+ ret
+
+
+;; shl - shift left
+;
+; group: arith
+;
+; ( int1 int2 -- int3 )
+;
+; int3: int1 &lt;&lt; int2
+;
+; example
+; 5 2 shl % 20
+;
+
+ bits 32
+
+prim_shl:
+ mov dx,t_int + (t_int << 8)
+ call get_2args
+ jc prim_shl_90
+ xchg eax,ecx
+ shl eax,cl
+ cmp ecx,byte 20h
+ jb prim_shl_50
+ xor eax,eax
+prim_shl_50:
+ dec dword [pstack.ptr]
+ xor ecx,ecx
+ call set_pstack_tos
+prim_shl_90:
+ ret
+
+
+;; shr - shift right
+;
+; group: arith
+;
+; ( int1 int2 -- int3 )
+;
+; int3: int1 >> int2
+;
+; example
+; 15 2 shr % 3
+;
+
+ bits 32
+
+prim_shr:
+ mov dx,t_int + (t_int << 8)
+ call get_2args
+ jc prim_shr_90
+ xchg eax,ecx
+ cmp ecx,byte 20h
+ jb prim_shr_50
+ mov cl,1fh
+prim_shr_50:
+ sar eax,cl
+ dec dword [pstack.ptr]
+ xor ecx,ecx
+ call set_pstack_tos
+prim_shr_90:
+ ret
+
+
+;; def - define new word
+;
+; group: code
+;
+; ( dict1 obj1 -- )
+;
+; dict1: is defined as obj1
+;
+; example
+; /x 100 def % define constant x as 100
+;
+; /neg { -1 mul } def % define 'neg' function
+;
+
+ bits 32
+
+prim_def:
+ mov dx,t_none + (t_dict_idx << 8)
+ call get_2args
+ jc prim_def_90
+ cmp dl,t_sec
+ mov bp,pserr_wrong_arg_types
+ stc
+ jz prim_def_90
+ ; note: ecx is index
+ call set_dict_entry
+ mov bp,pserr_invalid_dict
+ jc prim_def_90
+ sub dword [pstack.ptr],2
+prim_def_90:
+ ret
+
+
+;; if - typical 'if'
+;
+; group: control
+;
+; ( bool1 code1 -- )
+; ( int1 code1 -- )
+; ( undef1 code1 -- )
+; ( obj1 code1 -- )
+;
+; bool1: contition
+; code1: code start marker (see @{)
+; int1: integer are automatically converted to boolean
+; undef1: the undefined value is treated as 'false'
+; obj1: strings, arrays, pointer are considered 'true'
+;
+; example
+; 10 4 gt { "10 > 4" show } if
+;
+; "" { "is always true" show } if % strings are always 'true'
+;
+
+ bits 32
+
+prim_if:
+ mov dx,t_code + (t_bool << 8)
+ call get_2args
+ jnc prim_if_20
+ cmp dh,t_int
+ jz prim_if_20
+ cmp dh,t_none
+ jz prim_if_20
+ mov cl,1 ; all pointer, strings, arrays are 'true'
+ cmp dh,t_ptr
+ jz prim_if_20
+ cmp dh,t_string
+ jz prim_if_20
+ cmp dh,t_array
+ jnz prim_if_80
+prim_if_20:
+ sub dword [pstack.ptr],2
+ or ecx,ecx
+ jz prim_if_90
+
+ ; branch
+ xchg eax,[pscode_next_instr]
+
+ mov ecx,[rstack.ptr]
+ cmp ecx,[rstack.size]
+ mov bp,pserr_rstack_overflow
+ jae prim_if_80
+ inc dword [rstack.ptr]
+
+ xor ecx,ecx
+ mov dl,t_if ; mark as 'if' block
+ call set_rstack_tos
+ jnc prim_if_90
+
+prim_if_80:
+ stc
+prim_if_90:
+ ret
+
+
+;; ifelse - typical 'if' / 'else'
+;
+; group: control
+;
+; ( bool1 code1 code2 -- )
+; ( int1 code1 code2 -- )
+; ( undef1 code1 code2 -- )
+; ( obj1 code1 code2 -- )
+;
+; bool1: contition
+; code1: code start marker (see @{) for 'true' branch
+; code2: code start marker (see @{) for 'false' branch
+; int1: integer are automatically converted to boolean
+; undef1: the undefined value is treated as 'false'
+; obj1: strings, arrays, pointer are considered 'true'
+;
+; example
+; x1 x2 gt { "x1 > x2" } { "x1 &lt;= x2" } ifelse show
+;
+
+ bits 32
+
+prim_ifelse:
+ mov ecx,2
+ call get_pstack_tos
+ jc prim_ifelse_90
+ mov bp,pserr_wrong_arg_types
+ cmp dl,t_bool
+ jz prim_ifelse_10
+ cmp dl,t_int
+ jz prim_ifelse_10
+ cmp dl,t_none
+ jz prim_ifelse_10
+ mov al,1 ; all pointer, strings, arrays are 'true'
+ cmp dl,t_ptr
+ jz prim_ifelse_10
+ cmp dl,t_string
+ jz prim_ifelse_10
+ cmp dl,t_array
+ jnz prim_ifelse_80
+prim_ifelse_10:
+ push eax
+ mov dx,t_code + (t_code << 8)
+ call get_2args
+ pop ebx
+ jc prim_ifelse_90
+
+ sub dword [pstack.ptr],3
+ or ebx,ebx
+ jz prim_ifelse_20
+ xchg dl,dh
+ xchg eax,ecx
+prim_ifelse_20:
+ ; branch
+ xchg eax,[pscode_next_instr]
+
+ mov ecx,[rstack.ptr]
+ cmp ecx,[rstack.size]
+ mov bp,pserr_rstack_overflow
+ jae prim_ifelse_80
+ inc dword [rstack.ptr]
+
+ xor ecx,ecx
+ mov dl,t_if ; mark as 'if' block
+ call set_rstack_tos
+ jnc prim_ifelse_90
+
+prim_ifelse_80:
+ stc
+prim_ifelse_90:
+ ret
+
+
+; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+; Compare 2 strings.
+;
+; eax, ecx strings
+;
+; return:
+; al, cl last compared chars (if !=)
+; edx length of identical parts
+;
+
+ bits 32
+
+pcmp_str:
+ mov esi,eax
+ mov edi,ecx
+
+ xor ecx,ecx
+ xor eax,eax
+ xor edx,edx
+pcmp_str_20:
+ mov ah,al
+ mov ch,cl
+ mov al,[es:esi]
+ mov cl,[es:edi]
+ cmp al,cl
+ jnz pcmp_str_50
+ or al,al
+ jz pcmp_str_50
+ or cl,cl
+ jz pcmp_str_50
+ inc esi
+ inc edi
+ inc edx
+ jnz pcmp_str_20
+pcmp_str_50:
+ ret
+
+
+; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+; Compare 2 objects.
+;
+
+ bits 32
+
+pcmp_args:
+ ; integer
+ mov dx,t_int + (t_int << 8)
+ push ebx
+ call get_2args
+ pop ebx
+ jnc pcmp_args_90
+
+ ; strings
+ cmp dx,t_string + (t_string << 8)
+ jz pcmp_args_60
+
+ ; two identical objects
+ cmp dl,dh
+ jz pcmp_args_90
+
+ cmp bl,1
+ jc pcmp_args_80
+
+ cmp eax,ecx
+ jnz pcmp_args_90
+ mov al,dl
+ mov cl,dh
+ jmp pcmp_args_90
+
+pcmp_args_60:
+ call pcmp_str
+ jmp pcmp_args_90
+pcmp_args_80:
+ pop eax ; skip last return
+pcmp_args_90:
+ ret
+
+
+; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+; Return 'true'
+;
+
+ bits 32
+
+pcmp_true:
+ mov eax,1
+ jmp pcmp_false_10
+
+
+; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+; Return 'false'
+;
+
+ bits 32
+
+pcmp_false:
+ xor eax,eax
+pcmp_false_10:
+ mov dl,t_bool
+ dec dword [pstack.ptr]
+ xor ecx,ecx
+ call set_pstack_tos
+ ret
+
+
+;; eq - equal
+;
+; group: cmp
+;
+; ( int1 int2 -- bool1 )
+; ( str1 str2 -- bool2 )
+; ( obj1 obj2 -- bool3 )
+;
+; bool1: true if int1 == int2
+; bool2: true if str1 == str2
+; bool3: true if obj1 and obj2 are identical
+;
+; example
+;
+; 1 3 eq % false
+; "abc" "abc" eq % true
+; /a [ 1 2 ] def
+; /b a def
+; a [ 1 2 ] eq % false (not the same array)
+; a b eq % true
+;
+
+ bits 32
+
+prim_eq:
+ mov bl,1
+ call pcmp_args
+ cmp ecx,eax
+ jz pcmp_true
+ jmp pcmp_false
+
+
+;; ne - not equal
+;
+; group: cmp
+;
+; ( int1 int2 -- bool1 )
+; ( str1 str2 -- bool2 )
+; ( obj1 obj2 -- bool3 )
+;
+; bool1: false if int1 == int2
+; bool2: false if str1 == str2
+; bool3: false if obj1 and obj2 are identical
+;
+; example
+;
+; 1 3 ne % true
+; "abc" "abc" ne % false
+; /a [ 1 2 ] def
+; /b a def
+; a [ 1 2 ] ne % true (not the same array)
+; a b ne % false
+;
+
+ bits 32
+
+prim_ne:
+ mov bl,1
+ call pcmp_args
+ cmp ecx,eax
+ jnz pcmp_true
+ jmp pcmp_false
+
+
+;; gt - greater than
+;
+; group: cmp
+;
+; ( int1 int2 -- bool1 )
+; ( str1 str2 -- bool2 )
+; ( ptr1 ptr2 -- bool3 )
+;
+; bool1: true if int1 > int2
+; bool2: true if str1 > str2
+; bool3: true if ptr1 > ptr2
+;
+; example
+; 7 4 gt % true
+; "abc" "abd" gt % false
+; /a 10 malloc def
+; /b a + 2 def
+; b a gt % true
+;
+
+ bits 32
+
+prim_gt:
+ mov bl,0
+ call pcmp_args
+ cmp ecx,eax
+ jg pcmp_true
+ jmp pcmp_false
+
+
+;; ge - greater or equal
+;
+; group: cmp
+;
+; ( int1 int2 -- bool1 )
+; ( str1 str2 -- bool2 )
+; ( ptr1 ptr2 -- bool3 )
+;
+; bool1: true if int1 >= int2
+; bool2: true if str1 >= str2
+; bool3: true if ptr1 >= ptr2
+;
+; example
+; 7 4 ge % true
+; "abc" "abc" ge % true
+; /a 10 malloc def
+; /b a + 2 def
+; b a ge % true
+;
+
+ bits 32
+
+prim_ge:
+ mov bl,0
+ call pcmp_args
+ cmp ecx,eax
+ jge pcmp_true
+ jmp pcmp_false
+
+
+;; lt - less than
+;
+; group: cmp
+;
+; ( int1 int2 -- bool1 )
+; ( str1 str2 -- bool2 )
+; ( ptr1 ptr2 -- bool3 )
+;
+; bool1: true if int1 &lt; int2
+; bool2: true if str1 &lt; str2
+; bool3: true if ptr1 &lt; ptr2
+;
+; example
+; 7 4 lt % false
+; "abc" "abd" lt % true
+; /a 10 malloc def
+; /b a + 2 def
+; b a lt % false
+;
+
+ bits 32
+
+prim_lt:
+ mov bl,0
+ call pcmp_args
+ cmp ecx,eax
+ jl pcmp_true
+ jmp pcmp_false
+
+
+;; le - less or equal
+;
+; group: cmp
+;
+; ( int1 int2 -- bool1 )
+; ( str1 str2 -- bool2 )
+; ( ptr1 ptr2 -- bool3 )
+;
+; bool1: true if int1 &lt;= int2
+; bool2: true if str1 &lt;= str2
+; bool3: true if ptr1 &lt;= ptr2
+;
+; example
+; 7 7 le % true
+; "abc" "abd" le % true
+; /a 10 malloc def
+; /b a + 2 def
+; b a le % false
+;
+
+ bits 32
+
+prim_le:
+ mov bl,0
+ call pcmp_args
+ cmp ecx,eax
+ jle pcmp_true
+ jmp pcmp_false
+
+
+;; exch - exchange TOS with TOS-1
+;
+; group: stackbasic
+;
+; ( obj1 obj2 -- obj2 obj1 )
+;
+; example
+; 8
+; /a exch def % a = 8
+;
+
+ bits 32
+
+prim_exch:
+ mov ecx,2
+ call rot_pstack_up
+ mov bp,pserr_pstack_underflow
+ ret
+
+
+;; rot - rotate TOS, TOS-1, TOS-2
+;
+; group: stackbasic
+;
+; ( obj1 obj2 obj3 -- obj2 obj3 obj1 )
+;
+; example
+; /a 4 array def
+; 8
+; a 1 rot put % a[1] = 8
+;
+
+ bits 32
+
+prim_rot:
+ mov ecx,3
+ call rot_pstack_up
+ mov bp,pserr_pstack_underflow
+ ret
+
+
+;; roll - rotate stack elements
+;
+; group: stackbasic
+;
+; ( obj1 ... objN int1 int2 -- objX ... objY )
+;
+; int1: number of elements to rotate
+; int2: amount
+; objX: X = (1 - int2) mod int1
+; objY: Y = (N - int2) mod int1
+;
+; example
+; /rot { 3 -1 roll } def
+; 1 2 3 4 5 5 2 roll % leaves: 4 5 1 2 3
+;
+
+ bits 32
+
+prim_roll:
+ mov dx,t_int + (t_int << 8)
+ call get_2args
+ jc prim_roll_90
+ or ecx,ecx
+ jz prim_roll_90
+ mov edx,[pstack.ptr]
+ sub edx,2
+ cmp edx,ecx
+ mov bp,pserr_pstack_underflow
+ jc prim_roll_90
+ cdq
+ idiv ecx
+ sub dword [pstack.ptr],2
+ or edx,edx
+ jz prim_roll_90
+ js prim_roll_50
+prim_roll_40:
+ push edx
+ push ecx
+ call rot_pstack_down
+ pop ecx
+ pop edx
+ dec edx
+ jnz prim_roll_40
+ jmp prim_roll_90
+prim_roll_50:
+ neg edx
+prim_roll_60:
+ push edx
+ push ecx
+ call rot_pstack_up
+ pop ecx
+ pop edx
+ dec edx
+ jnz prim_roll_60
+ clc
+prim_roll_90:
+ ret
+
+
+;; dtrace - single step with debug window
+;
+; group: debug
+;
+; ( -- )
+;
+; Turn on @trace mode and show debug info in upper left screen corner.
+;
+
+ bits 32
+
+prim_dtrace:
+ mov byte [single_step],1
+ mov byte [show_debug_info],1
+ inc byte [dtrace_count]
+ ret
+
+
+;; trace - single step
+;
+; group: debug
+;
+; ( -- )
+;
+; Enter single step mode. Waits for a keypress after every instruction.
+; Tab sets a temporary breakpoint after the current instruction and
+; continues until it reaches it. Leave this mode by pressing Esc.
+;
+
+ bits 32
+
+prim_trace:
+ mov byte [single_step],1
+ mov byte [show_debug_info],0
+ ret
+
+
+;; return - leave current function
+;
+; group: control
+;
+; ( -- )
+;
+; example
+; /x { % expects key on TOS
+; dup 'a' eq { pop do_a return } if
+; dup 'b' eq { pop do_b return } if
+; dup 'c' eq { pop do_c return } if
+; pop
+; } def
+;
+
+ bits 32
+
+prim_return:
+ xor ecx,ecx
+prim_return_10:
+ push ecx
+ call get_rstack_tos
+ pop ecx
+ mov bp,pserr_rstack_underflow
+ jc prim_return_90
+ inc ecx
+ cmp dl,t_code
+ jnz prim_return_10 ; skip if, loop, repeat, for, forall
+
+ sub [rstack.ptr],ecx
+ mov [pscode_next_instr],eax
+prim_return_90:
+ ret
+
+
+;; exit - leave loop/repeat/for/forall loop.
+;
+; group: control
+;
+; ( -- )
+;
+; example
+;
+; 0 1 100 { 56 eq { exit } if } for % leave if counter == 56
+;
+
+ bits 32
+
+prim_exit:
+ xor ecx,ecx
+prim_exit_10:
+ push ecx
+ call get_rstack_tos
+ pop ecx
+ mov bp,pserr_rstack_underflow
+ jc prim_exit_90
+ inc ecx
+ cmp dl,t_loop ; loop
+ jz prim_exit_60
+ cmp dl,t_repeat ; repeat
+ jz prim_exit_40
+ cmp dl,t_for ; for
+ jz prim_exit_30
+ cmp dl,t_forall ; forall
+ jnz prim_exit_10
+prim_exit_30:
+ inc ecx
+ inc ecx
+prim_exit_40:
+ inc ecx
+prim_exit_60:
+ push ecx
+ call get_rstack_tos
+ pop ecx
+ cmp dl,t_code
+ jz prim_exit_80
+ cmp dl,t_exit
+ mov bp,pserr_invalid_rstack_entry
+ stc
+ jnz prim_exit_90
+
+prim_exit_80:
+ inc ecx
+ sub [rstack.ptr],ecx
+ mov [pscode_next_instr],eax
+prim_exit_90:
+ ret
+
+;; loop - endless loop
+;
+; group: control
+;
+; ( code1 -- )
+;
+; example
+;
+; /x 0 def { /x x 1 add def x 56 eq { exit } if } loop % loop until x == 56
+;
+
+ bits 32
+
+prim_loop:
+ xor ecx,ecx
+ call get_pstack_tos
+ cmp dl,t_code
+ mov bp,pserr_wrong_arg_types
+ stc
+ jnz prim_loop_90
+
+ dec dword [pstack.ptr]
+
+ ; branch
+ xchg eax,[pscode_next_instr]
+
+ mov ecx,[rstack.size]
+ sub ecx,[rstack.ptr]
+ cmp ecx,3
+ mov bp,pserr_rstack_overflow
+ jb prim_loop_90
+ add dword [rstack.ptr],2
+
+ mov dl,t_exit
+ mov ecx,1
+ call set_rstack_tos
+ xor ecx,ecx
+ mov dl,t_loop ; mark as 'loop' block
+ mov eax,[pscode_next_instr]
+ call set_rstack_tos
+prim_loop_90:
+ ret
+
+
+;; repeat - repeat code
+;
+; group: control
+;
+; ( int1 code1 -- )
+;
+; Repeat code1 int1 times.
+;
+; example
+; 3 { "X" show } repeat % print "XXX"
+;
+
+ bits 32
+
+prim_repeat:
+ mov dx,t_code + (t_int << 8)
+ call get_2args
+ jc prim_repeat_90
+
+ sub dword [pstack.ptr],2
+
+ or ecx,ecx
+ jz prim_repeat_90
+
+ mov bp,pserr_invalid_range
+ stc
+ js prim_repeat_90
+
+ ; branch
+ xchg eax,[pscode_next_instr]
+
+ mov edx,[rstack.size]
+ sub edx,[rstack.ptr]
+ cmp edx,4
+ mov bp,pserr_rstack_overflow
+ jb prim_repeat_90
+ add dword [rstack.ptr],3
+
+ push eax
+ xchg eax,ecx
+ mov dl,t_int
+ mov ecx,1
+ call set_rstack_tos
+ pop eax
+ mov ecx,2
+ mov dl,t_exit
+ call set_rstack_tos
+ xor ecx,ecx
+ mov dl,t_repeat ; mark as 'repeat' block
+ mov eax,[pscode_next_instr]
+ call set_rstack_tos
+prim_repeat_90:
+ ret
+
+
+;; for -- typical 'for' loop
+;
+; group: control
+;
+; ( int1 int2 int3 code1 -- )
+;
+; int1: start value
+; int2: step size
+; int3: final value (inclusive)
+;
+; Run code1 and put the current counter value onto the stack for every iteration.
+;
+; example
+; 0 1 4 { } for % leave 0 1 2 3 4 on the stack
+;
+
+ bits 32
+
+prim_for:
+ mov bp,pserr_pstack_underflow
+ cmp dword [pstack.ptr],4
+ jc prim_for_90
+ mov ecx,3
+ call get_pstack_tos
+ cmp dl,t_int
+ stc
+ mov bp,pserr_wrong_arg_types
+ jnz prim_for_90
+ mov ecx,2
+ push ebp
+ push eax
+ call get_pstack_tos
+ pop edi
+ pop ebp
+ cmp dl,t_int
+ stc
+ jnz prim_for_90
+
+ mov dx,t_code + (t_int << 8)
+ push eax
+ push edi
+ call get_2args
+ pop edi
+ pop esi
+ jc prim_for_90
+
+ ; don't remove start value!
+ sub dword [pstack.ptr],3
+
+ ; branch
+ xchg eax,[pscode_next_instr]
+
+ mov edx,[rstack.size]
+ sub edx,[rstack.ptr]
+ cmp edx,6
+ mov bp,pserr_rstack_overflow
+ jb prim_for_90
+ add dword [rstack.ptr],5
+
+ push ecx
+ push esi
+ push edi
+
+ mov dl,t_exit
+ mov ecx,4
+ call set_rstack_tos
+
+ pop eax
+ mov dl,t_int
+ mov ecx,3
+ call set_rstack_tos
+
+ pop eax
+ mov dl,t_int
+ mov ecx,2
+ call set_rstack_tos
+
+ pop eax
+ mov dl,t_int
+ mov ecx,1
+ call set_rstack_tos
+
+ xor ecx,ecx
+ mov dl,t_for ; mark as 'for' block
+ mov eax,[pscode_next_instr]
+ call set_rstack_tos
+prim_for_90:
+ ret
+
+
+;; forall - loop over all array elements
+;
+; group: control
+;
+; ( array1 code 1 -- )
+; ( str1 code 1 -- )
+; ( ptr1 code 1 -- )
+;
+; Run code1 for every element of array1, str1 or ptr1 putting each element
+; on the stack in turn.
+;
+; Note: str1 is treated as a sequence of bytes, not utf8 chars.
+;
+; example
+; [ 1 2 3 ] { } forall % leave 1 2 3 on the stack
+;
+
+ bits 32
+
+prim_forall:
+ mov dx,t_code + (t_array << 8)
+ call get_2args
+ jnc prim_forall_30
+ cmp dl,t_code
+ stc
+ jnz prim_forall_90
+ cmp dh,t_string
+ jz prim_forall_30
+ cmp dh,t_ptr
+ jz prim_forall_30
+ cmp dh,t_none
+ stc
+ jnz prim_forall_90
+
+ ; nothing to do
+prim_forall_20:
+ sub dword [pstack.ptr],2
+ clc
+ jmp prim_forall_90
+
+prim_forall_30:
+ push eax ; code
+ push ecx ; string/array
+ xchg dl,dh
+ push dx
+ xchg eax,ecx
+ call get_length
+ pop dx
+ pop ecx
+ pop ebx
+
+ mov bp,pserr_invalid_range
+ jc prim_forall_90
+
+ or eax,eax ; length == 0
+ jz prim_forall_20
+
+ sub dword [pstack.ptr],2
+
+ ; branch
+ xchg ebx,[pscode_next_instr]
+
+ mov esi,[rstack.size]
+ sub esi,[rstack.ptr]
+ cmp esi,6
+ mov bp,pserr_rstack_overflow
+ jb prim_forall_90
+ add dword [rstack.ptr],5
+
+ push ecx
+ push edx
+ push eax
+
+ mov dl,t_exit
+ xchg eax,ebx
+ mov ecx,4
+ call set_rstack_tos ; code
+
+ pop eax
+ mov dl,t_int
+ mov ecx,2
+ call set_rstack_tos ; length
+
+ pop edx
+ pop eax
+ push eax
+ push edx
+ mov ecx,3
+ call set_rstack_tos ; string/array
+
+ xor eax,eax
+ mov dl,t_int
+ mov ecx,1
+ call set_rstack_tos ; count
+
+ xor ecx,ecx
+ mov dl,t_forall ; mark as 'forall' block
+ mov eax,[pscode_next_instr]
+ call set_rstack_tos
+
+ pop edx
+ pop ecx
+ xchg dl,dh
+ xor eax,eax
+ call p_get
+ mov bp,pserr_invalid_range
+ jc prim_forall_90
+
+ jmp pr_getobj
+prim_forall_90:
+ ret
+
+
+;; gettype - get object type
+;
+; group: arg
+;
+; ( obj1 -- int1 )
+;
+; Returns the object type.
+;
+; example
+; "abc" gettype % 4 (= string)
+;
+
+ bits 32
+
+prim_gettype:
+ mov dl,t_none
+ call get_1arg
+ jc prim_gettype_90
+ movzx eax,dl
+ mov dl,t_int
+ xor ecx,ecx
+ call set_pstack_tos
+prim_gettype_90:
+ ret
+
+
+;; settype - set object type
+;
+; group: arg
+;
+; ( obj1 int1 -- obj2 )
+;
+; obj2: obj1 with type changed to int1.
+;
+; example
+; % PS-like 'string' function
+; /string { 1 add malloc 4 settype } def % 4 = string type
+; 10 string % new empty string of length 10
+;
+
+ bits 32
+
+prim_settype:
+ mov dx,t_int + (t_none << 8)
+ call get_2args
+ jc prim_settype_90
+ mov dl,al
+ and al,15
+ xchg eax,ecx
+ dec dword [pstack.ptr]
+ xor ecx,ecx
+ call set_pstack_tos
+prim_settype_90:
+ ret
+
+
+;; screen.size - screen size in pixel
+;
+; group: gfx.screen
+;
+; ( -- int1 int2 )
+;
+; int1, int2: width, height
+;
+; example
+;
+; blue setcolor
+; 0 0 moveto screen.size fillrect % draw blue screen
+;
+
+ bits 32
+
+prim_screensize:
+ mov eax,[pstack.ptr]
+ inc eax
+ inc eax
+ cmp [pstack.size],eax
+ mov bp,pserr_pstack_overflow
+ jb prim_screensize_90
+ mov [pstack.ptr],eax
+ mov dl,t_int
+ movzx eax,word [screen_width]
+ mov ecx,1
+ call set_pstack_tos
+ mov dl,t_int
+ movzx eax,word [screen_height]
+ xor ecx,ecx
+ call set_pstack_tos
+prim_screensize_90:
+ ret
+
+
+;; vscreen.size - virtual screen size
+;
+; group: gfx.screen
+;
+; ( -- int1 int2 )
+;
+; int1, int2: virtual width and height
+;
+; You normally can expect the virtual height to be larger than the visible height returned by
+; @screen.size. That area is available e.g. for hidden drawing. Some kind of
+; scrolling is not implemented, however.
+;
+
+ bits 32
+
+prim_vscreensize:
+ mov eax,[pstack.ptr]
+ inc eax
+ inc eax
+ cmp [pstack.size],eax
+ mov bp,pserr_pstack_overflow
+ jb prim_vscreensize_90
+ mov [pstack.ptr],eax
+ mov dl,t_int
+ movzx eax,word [screen_width]
+ mov ecx,1
+ call set_pstack_tos
+ mov dl,t_int
+ movzx eax,word [screen_vheight]
+ xor ecx,ecx
+ call set_pstack_tos
+prim_vscreensize_90:
+ ret
+
+
+;; monitorsize - monitor size
+;
+; group: gfx.screen
+;
+; ( -- int1 int2 )
+;
+; int1, int2: width and height
+;
+
+ bits 32
+
+prim_monitorsize:
+ mov eax,[pstack.ptr]
+ inc eax
+ inc eax
+ cmp [pstack.size],eax
+ mov bp,pserr_pstack_overflow
+ jb prim_monitorsize_90
+ mov [pstack.ptr],eax
+
+ cmp word [display_res_pref],0
+ jnz prim_monitorsize_50
+
+ call read_ddc
+
+prim_monitorsize_50:
+
+ mov dl,t_int
+ movzx eax,word [display_res_pref]
+ mov ecx,1
+ call set_pstack_tos
+ mov dl,t_int
+ movzx eax,word [display_res_pref + 2]
+ xor ecx,ecx
+ call set_pstack_tos
+prim_monitorsize_90:
+ ret
+
+
+;; displaysizes - supported display sizes
+;
+; group: gfx.screen
+;
+; ( -- int1 int2 )
+;
+; int1, int2: width and height
+;
+
+ bits 32
+
+prim_displaysizes:
+ cmp word [display_res_pref],0
+ jnz prim_displaysizes_20
+ call read_ddc
+prim_displaysizes_20:
+ xor ebx,ebx
+prim_displaysizes_40:
+ inc ebx
+ cmp bx,[display_res.cnt]
+ ja prim_displaysizes_90
+
+ mov eax,[pstack.ptr]
+ inc eax
+ inc eax
+ cmp [pstack.size],eax
+ mov bp,pserr_pstack_overflow
+ jb prim_displaysizes_90
+ mov [pstack.ptr],eax
+
+ mov dl,t_int
+ movzx eax,word [display_res - 4 + 4*ebx]
+ mov ecx,1
+ push ebx
+ call set_pstack_tos
+ pop ebx
+ mov dl,t_int
+ movzx eax,word [display_res + 2 - 4 + 4*ebx]
+ xor ecx,ecx
+ push ebx
+ call set_pstack_tos
+ pop ebx
+ jmp prim_displaysizes_40
+prim_displaysizes_90:
+ ret
+
+
+;; image.size - graphics image size
+;
+; group: image
+;
+; ( -- int1 int2 )
+;
+; int1, int2: image width and height. The image is specified with @setimage.
+;
+; example
+;
+; image.size screen.size
+; exch 4 -1 roll sub 2 div 3 1 roll exch sub 2 div % center image
+; moveto 0 0 image.size image % draw it
+;
+
+ bits 32
+
+prim_imagesize:
+ mov eax,[pstack.ptr]
+ inc eax
+ inc eax
+ cmp [pstack.size],eax
+ mov bp,pserr_pstack_overflow
+ jb prim_imagesize_90
+ mov [pstack.ptr],eax
+ mov dl,t_int
+ movzx eax,word [image_width]
+ mov ecx,1
+ call set_pstack_tos
+ mov dl,t_int
+ movzx eax,word [image_height]
+ xor ecx,ecx
+ call set_pstack_tos
+prim_imagesize_90:
+ ret
+
+
+
+;; image.colors - image palette entries
+;
+; group: image
+;
+; ( -- int1 )
+;
+; int1: number of colors in 8-bit PCX image.
+;
+; 8-bit modes use a color palette. An image uses the first @image.colors
+; entries. If you want to define your own colors, use @image.colors to get
+; the first free palette entry. For 16/32-bit modes, 0 is returned.
+;
+
+ bits 32
+
+prim_imagecolors:
+ xor eax,eax
+ cmp byte [image_type],1
+ jnz prim_imagecolors_90
+ mov ax,[pals]
+prim_imagecolors_90:
+ jmp pr_getint
+
+
+;; setcolor - set active drawing color
+;
+; group: draw
+;
+; ( int1 -- )
+;
+; int1: palette index (8-bit mode) or 24-bit RGB-value (16/32-bit modes).
+;
+; example
+; 0xff0000 setcolor % continue in red...
+; 0xff00 setcolor % or green...
+; 0xff setcolor % or blue
+;
+
+ bits 32
+
+prim_setcolor:
+ call pr_setint
+ mov [gfx_color_rgb],eax
+ call encode_color
+ mov [gfx_color0],eax
+ call setcolor
+ ret
+
+
+;; currentcolor - current drawing color
+;
+; group: draw
+;
+; ( -- int1 )
+;
+; int1: palette index (8-bit mode) or 24-bit RGB-value (16/32-bit modes).
+;
+; example
+; currentcolor not setcolor % inverse color
+;
+
+ bits 32
+
+prim_currentcolor:
+ mov eax,[gfx_color0]
+ call decode_color
+ jmp pr_getint
+
+
+;; settextmodecolor - set color to be used in text mode
+;
+; group: textmode
+;
+; ( int1 -- )
+;
+; int1: text mode color
+;
+; Note: You only need this in case you're running in text mode (practically never).
+;
+
+ bits 32
+
+prim_settextmodecolor:
+ call pr_setint
+ mov [textmode_color],al
+ ret
+
+
+;; moveto - set cursor position
+;
+; group: draw
+;
+; ( int1 int2 -- )
+;
+; int1, int2: x, y (upper left: 0, 0).
+;
+; example
+; 200 100 moveto "Hello" show % print "Hello" at (200, 100)
+;
+
+ bits 32
+
+prim_moveto:
+ mov dx,t_int + (t_int << 8)
+ call get_2args
+ jc prim_moveto_90
+ sub dword [pstack.ptr],2
+ mov [gfx_cur_x],cx
+ mov [gfx_cur_y],ax
+prim_moveto_90:
+ ret
+
+
+;; rmoveto - set relative cursor position
+;
+; group: draw
+;
+; ( int1 int2 -- )
+;
+; int1, int2: x-ofs, y-ofs.
+;
+; example
+; 200 100 moveto
+; "Hello" show
+; 30 0 rmoveto "world!" % "Hello world!" (approx.)
+;
+
+ bits 32
+
+prim_rmoveto:
+ mov dx,t_int + (t_int << 8)
+ call get_2args
+ jc prim_rmoveto_90
+ sub dword [pstack.ptr],2
+ add [gfx_cur_x],cx
+ add [gfx_cur_y],ax
+ clc
+prim_rmoveto_90:
+ ret
+
+
+;; currentpoint - current cursor position
+;
+; group: draw
+;
+; ( -- int1 int2 )
+;
+; int1, int2: x, y (upper left: 0, 0)
+;
+
+ bits 32
+
+prim_currentpoint:
+ mov eax,[pstack.ptr]
+ inc eax
+ inc eax
+ cmp [pstack.size],eax
+ mov bp,pserr_pstack_overflow
+ jb prim_currentpoint_90
+ mov [pstack.ptr],eax
+ mov dl,t_int
+ movzx eax,word [gfx_cur_x]
+ mov ecx,1
+ call set_pstack_tos
+ mov dl,t_int
+ movzx eax,word [gfx_cur_y]
+ xor ecx,ecx
+ call set_pstack_tos
+prim_currentpoint_90:
+ ret
+
+
+;; lineto - draw line
+;
+; group: draw
+;
+; ( int1 int2 -- )
+;
+; int1, int2: line end
+;
+; example
+; 0 0 moveto screen.size lineto % draw diagonal
+;
+
+ bits 32
+
+prim_lineto:
+ mov dx,t_int + (t_int << 8)
+ call get_2args
+ jc prim_lineto_90
+
+ mov [line_x1],ecx
+ mov [line_y1],eax
+ push cx
+ push ax
+ movsx eax,word [gfx_cur_x]
+ mov [line_x0],eax
+ movsx eax,word [gfx_cur_y]
+ mov [line_y0],eax
+ call line
+ pop word [gfx_cur_y]
+ pop word [gfx_cur_x]
+
+ sub dword [pstack.ptr],2
+prim_lineto_90:
+ ret
+
+
+
+;; putpixel - draw single pixel
+;
+; group: draw
+;
+; ( -- )
+;
+; Draw pixel in current color at current cursor position.
+;
+; example
+; blue setcolor
+; 0 0 moveto putpixel % blue dot at upper left corner
+;
+
+ bits 32
+
+prim_putpixel:
+ push fs
+ push gs
+
+ call goto_xy
+ call screen_segs
+ call [setpixel_t]
+
+ pop gs
+ pop fs
+
+ clc
+ ret
+
+
+;; getpixel - read pixel from graphics memory
+;
+; group: draw
+;
+; ( -- int1 )
+;
+; int1: color; either 8-bit palette index or 24-bit RGB-value, depending on
+; graphics mode.
+;
+; example
+; getpixel not setcolor putpixel % invert pixel color
+;
+
+ bits 32
+
+prim_getpixel:
+ push fs
+ push gs
+
+ call goto_xy
+ call screen_segs
+ call [getpixel]
+ call decode_color
+
+ pop gs
+ pop fs
+
+ jmp pr_getint
+
+
+;; setfont - set font
+;
+; group: font
+;
+; ( ptr1 -- )
+; ( int1 -- )
+;
+; ptr1: font data (e.g. font file).
+; int1: same value as ptr1, but font is in password mode - it prints only '*'s.
+;
+; Note: password mode used to be passed as bit 31 in ptr1. gfxboot will try
+; to guess if you are doing that, but please don't.
+;
+; example
+; "16x16.fnt" findfile setfont % set 16x16 font
+;
+; /pwmode { 1 settype } def
+; currentfont pwmode setfont % now in password mode
+; "abc" show % print "***"
+;
+
+ bits 32
+
+prim_setfont:
+ mov dl,t_none
+ call get_1arg
+ jc prim_setfont_90
+ mov bp,pserr_wrong_arg_types
+ mov cl,0
+ cmp dl,t_none
+ jz prim_setfont_50
+ cmp dl,t_ptr
+ jz prim_setfont_50
+ cmp dl,t_int
+ stc
+ jnz prim_setfont_90
+ mov cl,1
+prim_setfont_50:
+ call font_init
+ dec dword [pstack.ptr]
+ clc
+prim_setfont_90:
+ ret
+
+
+;; currentfont - get current font
+;
+; group: font
+;
+; ( -- ptr1 )
+; ( -- int1 )
+;
+; ptr1: current font
+; int1: current font, in password mode
+;
+; example
+; currentfont % save font
+; "16x16_bold.fnt" findfile setfont % set bold font
+; "bold text" show % write something in bold font
+; setfont % back to normal font
+;
+
+ bits 32
+
+prim_currentfont:
+ mov eax,[font]
+ test byte [font.properties],1
+ mov dl,t_ptr
+ jz prim_currentfont_90
+ mov dl,t_int
+prim_currentfont_90:
+ jmp pr_getobj
+
+
+;; fontheight - font height
+;
+; group: font
+;
+; ( -- int1 )
+;
+; int1: font height
+;
+; example
+; currentpoint
+; "Hello" show % print "Hello"
+; moveto 0 fontheight rmoveto
+; "world!" % print "world!" below "Hello"
+;
+
+ bits 32
+
+prim_fontheight:
+ movzx eax,word [font.height]
+ jmp pr_getint
+
+
+;; setimage - set active image
+;
+; group: image
+;
+; ( ptr1 -- )
+;
+; ptr1: image data. Either JPG or PCX file.
+;
+; Note: JPG is only supported in 16/32-bit modes.
+;
+; example
+; "foo.jpg" findfile setimage % load and use "foo.jpg"
+;
+
+ bits 32
+
+prim_setimage:
+ call pr_setptr_or_none
+ call image_init
+ ret
+
+
+;; currentimage - currently used image
+;
+; group: image
+;
+; ( -- ptr1 )
+;
+
+ bits 32
+
+prim_currentimage:
+ mov eax,[image]
+ jmp pr_getptr_or_none
+
+
+;; settransparency - set transparency
+;
+; group: draw
+;
+; ( int1 -- )
+;
+; int1: transparency for @fillrect operations; valid values are 0 - 256.
+;
+
+ bits 32
+
+prim_settransparency:
+ call pr_setint
+ mov [transp],eax
+ ret
+
+
+;; currenttransparency - current transparency
+;
+; group: draw
+;
+; ( -- int1 )
+;
+
+ bits 32
+
+prim_currenttransparency:
+ mov eax,[transp]
+ jmp pr_getint
+
+
+;; show - print text
+;
+; group: draw, text
+;
+; ( str1 -- )
+;
+; Print str1 in current color using current font.
+;
+; example
+; "Hello world!" show % print "Hello world!"
+
+ bits 32
+
+prim_show:
+ mov dl,t_string
+ call get_1arg
+ jc prim_show_90
+ dec dword [pstack.ptr]
+ xor cx,cx
+ mov esi,eax
+ mov ebx,[start_row]
+ or ebx,ebx
+ jz prim_show_50
+ cmp ebx,[cur_row2]
+ jae prim_show_90
+ mov esi,[row_text+4*ebx]
+ mov cx,[ind_text+2*ebx]
+prim_show_50:
+ mov [gfx_indent],cx
+ call text_xy
+ clc
+prim_show_90:
+ ret
+
+
+;; strsize - text dimensions
+;
+; group: text
+;
+; ( str1 -- int1 int2 )
+;
+; int1, int2: width, height of str1.
+;
+; example
+;
+; "Hi there!"
+; dup strsize pop neg 0 rmoveto show % print "Hi there!" right aligned
+;
+
+ bits 32
+
+prim_strsize:
+ mov dl,t_string
+ call get_1arg
+ jc prim_strsize_90
+ dec dword [pstack.ptr]
+
+ mov esi,eax
+ call str_size
+
+ mov eax,[pstack.ptr]
+ inc eax
+ inc eax
+ cmp [pstack.size],eax
+ mov bp,pserr_pstack_overflow
+ jb prim_strsize_90
+ mov [pstack.ptr],eax
+ push edx
+ mov eax,ecx
+ mov dl,t_int
+ mov ecx,1
+ call set_pstack_tos
+ pop eax
+ mov dl,t_int
+ xor ecx,ecx
+ call set_pstack_tos
+prim_strsize_90:
+ ret
+
+
+;; memcpy - copy memory
+;
+; group: mem
+;
+; ( ptr1 ptr2 int1 -- )
+;
+; ptr1: destination
+; ptr2: source
+; int1: size
+;
+; example
+; /a 10 malloc def
+; /b 10 malloc def
+; a 1 100 put % a[1] = 100
+; b a 10 memcpy % copy a to b
+;
+
+ bits 32
+
+prim_memcpy:
+ mov bp,pserr_pstack_underflow
+ cmp dword [pstack.ptr],3
+ jc prim_memcpy_90
+
+ mov bp,pserr_wrong_arg_types
+ mov ecx,2
+ call get_pstack_tos
+ cmp dl,t_ptr
+ stc
+ jnz prim_memcpy_90
+ push eax
+ mov dx,t_int + (t_ptr << 8)
+ call get_2args
+ pop ebx ; dst
+ jc prim_memcpy_90
+ xchg eax,ecx
+
+ ; ecx: size
+ ; eax: src
+
+ or ecx,ecx
+ jz prim_memcpy_80
+
+ mov esi,eax
+ mov edi,ebx
+ es rep movsb
+
+prim_memcpy_80:
+ sub dword [pstack.ptr],3
+prim_memcpy_90:
+ ret
+
+
+;; image - show image region
+;
+; group: image
+;
+; ( int1 int2 int3 int4 -- )
+;
+; int1, int2: x, y position in image
+;
+; int3, int4: width, height of image region
+;
+; example
+; "xxx.jpg" findfile setimage % load and activate "xxx.jpg"
+; 0 0 image.size image % draw whole image
+;
+
+ bits 32
+
+prim_image:
+ mov bp,pserr_pstack_underflow
+ cmp dword [pstack.ptr],4
+ jc prim_image_90
+ mov ecx,3
+ call get_pstack_tos
+ cmp dl,t_int
+ stc
+ mov bp,pserr_wrong_arg_types
+ jnz prim_image_90
+ mov [line_x0],eax
+ mov ecx,2
+ push ebp
+ call get_pstack_tos
+ pop ebp
+ cmp dl,t_int
+ stc
+ jnz prim_image_90
+ mov [line_y0],eax
+ mov dx,t_int + (t_int << 8)
+ call get_2args
+ jc prim_image_90
+
+ sub dword [pstack.ptr],4
+
+ mov edx,[line_x0]
+ add edx,ecx
+ mov [line_x1],edx
+
+ mov edx,[line_y0]
+ add edx,eax
+ mov [line_y1],edx
+
+ call clip_image
+ cmc
+ jnc prim_image_90
+
+ push dword [gfx_cur]
+ call show_image
+ pop dword [gfx_cur]
+
+ clc
+prim_image_90:
+ ret
+
+
+;; loadpalette - load current palette
+;
+; group: image
+;
+; ( -- )
+;
+; Activates current palette in 8-bit modes.
+;
+
+ bits 32
+
+prim_loadpalette:
+ mov ecx,100h
+ xor edx,edx
+ call load_palette
+ clc
+ ret
+
+
+;; unpackimage - unpack image region into buffer
+;
+; group: image
+;
+; ( int1 int2 int3 int4 -- ptr1 )
+;
+; int1, int2: x, y position in image
+;
+; int3, int4: width, height of image region
+; ptr1: buffer with image data; use @free to free the buffer
+;
+; example
+;
+; "xxx.jpg" findfile setimage % load and activate "xxx.jpg"
+; 0 0 10 10 unpackimage % unpack upper left 10x10 region
+; /img exch def % img = buffer
+;
+; 0 10 100 {
+; 0 exch moveto
+; img restorescreen
+; } for % repeat image section horizontally 10 times
+;
+; img free % free it
+;
+
+ bits 32
+
+prim_unpackimage:
+ mov bp,pserr_pstack_underflow
+ cmp dword [pstack.ptr],4
+ jc prim_unpackimage_90
+ mov ecx,3
+ call get_pstack_tos
+ cmp dl,t_int
+ stc
+ mov bp,pserr_wrong_arg_types
+ jnz prim_unpackimage_90
+ mov [line_x0],eax
+ mov ecx,2
+ push ebp
+ call get_pstack_tos
+ pop ebp
+ cmp dl,t_int
+ stc
+ jnz prim_unpackimage_90
+ mov [line_y0],eax
+ mov dx,t_int + (t_int << 8)
+ call get_2args
+ jc prim_unpackimage_90
+
+ sub dword [pstack.ptr],3
+
+ mov edx,[line_x0]
+ add edx,ecx
+ mov [line_x1],edx
+ mov edx,[line_y0]
+ add edx,eax
+ mov [line_y1],edx
+
+ call clip_image
+
+ jc prim_unpackimage_70
+
+ mov eax,[line_y1]
+ mov ecx,[line_x1]
+
+ sub eax,[line_y0]
+ sub ecx,[line_x0]
+
+ call alloc_fb
+ or eax,eax
+ jz prim_unpackimage_70
+
+ push eax
+ call unpack_image
+ pop eax
+
+prim_unpackimage_60:
+ mov dl,t_ptr
+ or eax,eax
+ jnz prim_unpackimage_80
+prim_unpackimage_70:
+ mov dl,t_none
+ xor eax,eax
+prim_unpackimage_80:
+
+ xor ecx,ecx
+ call set_pstack_tos
+prim_unpackimage_90:
+ ret
+
+
+;; setpalette - set palette entry
+;
+; group: draw
+;
+; ( int1 int2 -- )
+;
+; int1: palette index
+; int2: RGB value
+;
+; example
+; /red 11 0xff0000 def % color 11 = red
+; /yellow 12 0xffff00 def % color 12 = yellow
+;
+
+ bits 32
+
+prim_setpalette:
+ mov dx,t_int + (t_int << 8)
+ call get_2args
+ jc prim_setpalette_90
+
+ sub dword [pstack.ptr],2
+
+ cmp ecx,100h
+ jae prim_setpalette_90
+
+ mov edx,ecx
+
+ lea edi,[ecx+2*ecx]
+ add edi,[gfx_pal]
+
+ mov [es:edi+2],al
+ mov [es:edi+1],ah
+ shr eax,16
+ mov [es:edi],al
+
+ mov ecx,1
+ call load_palette
+
+ clc
+
+prim_setpalette_90:
+ ret
+
+
+;; getpalette - get palette entry
+;
+; group: draw
+;
+; ( int1 -- int2 )
+;
+; int1: palette index
+; int2: RGB value
+;
+; example
+; 11 dup getpalette not setpalette % invert color 11
+;
+
+ bits 32
+
+prim_getpalette:
+ mov dl,t_int
+ call get_1arg
+ jc prim_getpalette_90
+
+ xchg eax,ecx
+ xor eax,eax
+ cmp ecx,100h
+ jae prim_getpalette_50
+
+ lea ecx,[ecx+2*ecx]
+ add ecx,[gfx_pal]
+
+ mov al,[es:ecx]
+ shl eax,16
+ mov ah,[es:ecx+1]
+ mov al,[es:ecx+2]
+prim_getpalette_50:
+ mov dl,t_int
+ xor ecx,ecx
+ call set_pstack_tos
+prim_getpalette_90:
+ ret
+
+
+;; settransparentcolor - set color used for transparency
+;
+; group: image
+;
+; ( int1 -- )
+;
+; When doing an @image operation, pixels with this color are not copied.
+; Something like an alpha channel, actually. Works only with PCX images.
+; Not at all related to @settransparency.
+;
+
+ bits 32
+
+prim_settransparentcolor:
+ call pr_setint
+ mov [transparent_color],eax
+ ret
+
+
+;; savescreen - save screen area
+;
+; group: image
+;
+; ( int1 int2 -- ptr1 )
+;
+; int1, int2: width, height of screen area
+; ptr1: buffer with image data; use @free to free the buffer
+;
+; Note: width and height are stored in buffer.
+;
+; example
+; 0 0 moveto screen.size savescreen % save entire screen
+;
+
+ bits 32
+
+prim_savescreen:
+ mov dx,t_int + (t_int << 8)
+ call get_2args
+ jc prim_savescreen_90
+ call alloc_fb
+ or eax,eax
+ jz prim_savescreen_50
+ push eax
+ lea edi,[eax+4]
+ call save_bg
+ pop eax
+prim_savescreen_50:
+ dec dword [pstack.ptr]
+ xor ecx,ecx
+ mov dl,t_ptr
+ or eax,eax
+ jnz prim_savescreen_70
+ mov dl,t_none
+prim_savescreen_70:
+ call set_pstack_tos
+prim_savescreen_90:
+ ret
+
+
+; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+; Allocate drawing buffer.
+;
+; eax height
+; ecx width
+;
+; return:
+; eax buffer (0: failed)
+; dx, cx width, height
+;
+
+ bits 32
+
+alloc_fb:
+ push eax
+ push ecx
+ mul ecx
+ mul dword [pixel_bytes]
+ pop edx
+ pop ecx
+ mov bp,pserr_invalid_image_size
+ add eax,4
+ jc alloc_fb_80
+ push ecx
+ push edx
+ call calloc
+ pop edx
+ pop ecx
+ or eax,eax
+ jz alloc_fb_90
+ mov [es:eax],dx
+ mov [es:eax+2],cx
+ jmp alloc_fb_90
+alloc_fb_80:
+ xor eax,eax
+alloc_fb_90:
+ ret
+
+
+;; restorescreen - restore screen area
+;
+; group: image
+;
+; ( ptr1 -- )
+;
+; ptr1: buffer with image data; use @free to free the buffer
+;
+; Note: width and height are taken from buffer. Does not actually
+; free ptr1 - use @free explicitly.
+;
+; example
+; 0 0 moveto 100 100 savescreen % save upper left 100x100 section...
+; 300 200 moveto dup restorescreen % and copy it to 300x200
+; free % free memory
+;
+
+ bits 32
+
+prim_restorescreen:
+ mov dl,t_ptr
+ call get_1arg
+ jnc prim_restorescreen_20
+ cmp dl,t_none
+ stc
+ jnz prim_restorescreen_90
+ jmp prim_restorescreen_80
+
+prim_restorescreen_20:
+
+ mov dx,[es:eax]
+ mov cx,[es:eax+2]
+ lea edi,[eax+4]
+ mov bx,dx
+ imul bx,[pixel_bytes]
+ call restore_bg
+
+prim_restorescreen_80:
+ dec dword [pstack.ptr]
+ clc
+prim_restorescreen_90:
+ ret
+
+
+;; malloc - allocate memory
+;
+; group: mem
+;
+; ( int1 -- ptr1 )
+;
+; int1: memory size
+; ptr1: pointer to memory area
+;
+; Note: Use @free to free ptr1.
+;
+; example
+; /foo 256 malloc def % allocate 256 bytes...
+; foo free % and free it
+;
+
+ bits 32
+
+prim_malloc:
+ mov dl,t_int
+ call get_1arg
+ jc prim_malloc_90
+ call calloc
+ or eax,eax
+ stc
+ mov bp,pserr_no_memory
+ jz prim_malloc_90
+ xor ecx,ecx
+ mov dl,t_ptr
+ call set_pstack_tos
+prim_malloc_90:
+ ret
+
+
+;; free - free memory
+;
+; group: mem
+;
+; ( obj1 -- )
+;
+; obj1: object to free, either array, string or pointer
+;
+; Note: There is no garbage collector implemented. You have to keep track of
+; memory usage yourself. If obj1 does not refer to some dynamically
+; allocated object, @free does nothing.
+;
+; example
+; 2 array % create array with 2 elements...
+; free % and free it
+;
+; 100 malloc % allocate 100 bytes...
+; free % and free it
+;
+; "Some Text" free % free nothing
+;
+
+ bits 32
+
+prim_free:
+ mov dl,t_string
+ call get_1arg
+ jnc prim_free_10
+ cmp dl,t_ptr
+ jz prim_free_10
+ cmp dl,t_none
+ jz prim_free_50
+ cmp dl,t_array
+ stc
+ jnz prim_free_90
+prim_free_10:
+ call free
+prim_free_50:
+ dec dword [pstack.ptr]
+ clc
+prim_free_90:
+ ret
+
+
+;; realloc - change allocated memory size
+;
+; group: mem
+;
+; ( obj1 int1 -- )
+;
+; obj1: object to resize, either array, string or pointer
+; int1: new size; memory is freed if zero
+;
+; Note: There is no garbage collector implemented. You have to keep track of
+; memory usage yourself. If obj1 does not refer to some dynamically
+; allocated object, @realloc does nothing.
+;
+; example
+;
+; 100 malloc % allocate 100 bytes...
+; 10 realloc % resize to 10 bytes
+;
+
+ bits 32
+
+prim_realloc:
+ mov dx,t_int + (t_ptr << 8)
+ call get_2args
+ jnc prim_realloc_10
+ cmp dx,t_int + (t_ptr << 8)
+ jz prim_realloc_10
+ cmp dx,t_int + (t_none << 8)
+ jz prim_realloc_50
+ cmp dx,t_int + (t_array << 8)
+ stc
+ jnz prim_realloc_90
+prim_realloc_10:
+ xchg eax,ecx
+ call realloc
+prim_realloc_50:
+ sub dword [pstack.ptr],2
+prim_realloc_90:
+ ret
+
+
+;; memsize - report available memory size
+;
+; group: mem
+;
+; ( int1 -- int2 int3 )
+;
+; int1: memory region (0 ... 3)
+; int2: total free memory
+; int3: size of largest free block
+;
+; Region 0 is memory in the low 640kB range. Region >= 1 are typically 1 MB extended memory
+; per region.
+;
+; Note: available memory depends on the boot loader.
+;
+; example
+; 0 memsize pop 1024 lt { "less than 1kB left" show } if
+;
+
+ bits 32
+
+prim_memsize:
+ mov dl,t_int
+ call get_1arg
+ jc prim_memsize_90
+ mov ecx,[pstack.ptr]
+ inc ecx
+ cmp [pstack.size],ecx
+ mov bp,pserr_pstack_overflow
+ jb prim_memsize_90
+ mov [pstack.ptr],ecx
+
+ call memsize
+
+ mov dl,t_int
+ xchg eax,ebp
+ push edi
+ mov ecx,1
+ call set_pstack_tos
+ pop eax
+ mov dl,t_int
+ xor ecx,ecx
+ call set_pstack_tos
+prim_memsize_90:
+ ret
+
+
+;; dumpmem - dump memory usage to console
+;
+; group: mem
+;
+; ( -- )
+;
+; Note: useful only for debugging.
+;
+
+ bits 32
+
+prim_dumpmem:
+ call dump_malloc
+ ret
+
+
+;; fillrect - fill rectangular area
+;
+; group: draw
+;
+; ( int1 int2 -- )
+;
+; int1, int2: width, height
+;
+; example
+; 0 0 moveto
+; blue setcolor
+; 300 200 fillrect % 300x200 blue rectangle
+;
+
+ bits 32
+
+prim_fillrect:
+ mov dx,t_int + (t_int << 8)
+ call get_2args
+ jc prim_fillrect_90
+ mov edx,ecx
+ mov ecx,eax
+ mov eax,[gfx_color]
+ call fill_rect
+ sub dword [pstack.ptr],2
+prim_fillrect_90:
+ ret
+
+
+;; snprintf - C-style snprintf
+;
+; group: mem
+;
+; ( obj1 ... objN str1 int1 ptr1 -- )
+;
+; ptr1: buffer
+; int1: buffer size
+; str1: format string
+;
+; obj1 ... objN: printf arguments
+;
+; Note: reversed argument order!
+;
+; example
+;
+; /sprintf {
+; dup 12 settype length exch snprintf % 12 = pointer type
+; } def
+;
+; /buf 100 string def
+; "bar" "foo" 3 "&#37;d &#37;s &#37;s" buf sprintf
+; buf show % print "3 foo bar"
+;
+
+ bits 32
+
+prim_snprintf:
+ mov bp,pserr_pstack_underflow
+ cmp dword [pstack.ptr],3
+ jc prim_snprintf_90
+ mov bp,pserr_wrong_arg_types
+ mov ecx,2
+ call get_pstack_tos
+ cmp dl,t_string
+ stc
+ jnz prim_snprintf_90
+ push eax
+ mov dx,t_string + (t_int << 8)
+ call get_2args
+ pop esi
+ jc prim_snprintf_90
+
+ sub dword [pstack.ptr],3
+
+ mov [pf_gfx_buf],eax
+ mov [pf_gfx_max],ecx
+ and dword [pf_gfx_cnt],0
+ and word [pf_gfx_err],0
+
+ or ecx,ecx
+ jz prim_snprintf_40
+ ; clear buffer in case we have to print _nothing_
+ mov byte [es:eax],0
+prim_snprintf_40:
+ mov byte [pf_gfx],1
+ call printf
+ mov byte [pf_gfx],0
+
+ mov bp,[pf_gfx_err]
+ cmp bp,0
+prim_snprintf_90:
+ ret
+
+
+;; edit.init -- setup and show an editable input field
+;
+; group: edit
+;
+; ( array1 str1 -- )
+;
+; str1: initial input string value
+; array1: (at least) 6-dimensional array: [ x y bg buf buf_size .undef ]. x, y: input field
+; position; bg: background pixmap (created with @savescreen) - this determines the
+; input field dimensions, too; buf: string buffer, large enough
+; for a string of length buf_size. The last element is used internally.
+;
+; example
+; 50 100 moveto 200 20 savescreen /bg exch def
+; /buf 100 string def
+; /ed [ 50 100 bg buf 100 .undef ] def
+; ed "foo" edit.init
+;
+
+ bits 32
+
+prim_editinit:
+ mov dx,t_string + (t_array << 8)
+ call get_2args
+ jc prim_editinit_90
+
+ mov esi,ecx
+
+ push eax
+ call edit_init_params
+ call edit_get_params
+ pop eax
+
+ mov bp,pserr_invalid_data
+ jc prim_editinit_90
+
+ push dword [gfx_cur]
+
+ push esi
+ mov esi,eax
+ call edit_init
+ pop esi
+
+ pop dword [gfx_cur]
+
+ call edit_put_params
+
+ sub dword [pstack.ptr],2
+prim_editinit_90:
+ ret
+
+
+;; edit.redraw - redraw input field
+;
+; group: edit
+;
+; ( array1 -- )
+;
+; array1: see @edit.init
+;
+; example
+; ed edit.redraw % redraw input field
+;
+
+ bits 32
+
+prim_editredraw:
+ mov dl,t_array
+ call get_1arg
+ jc prim_editredraw_90
+
+ mov esi,eax
+ call edit_get_params
+ mov bp,pserr_invalid_data
+ jc prim_editredraw_90
+
+ push esi
+
+ call edit_align
+ call edit_redraw
+
+ pop esi
+
+ call edit_put_params
+
+ sub word [pstack.ptr],byte 1
+prim_editredraw_90:
+ ret
+
+
+;; edit.done - restore input field background
+;
+; group: edit
+;
+; ( array1 -- )
+;
+; array1: see @edit.init
+;
+; Note: does not free any data associated with array1.
+;
+; example
+; ed edit.done % delete input field
+;
+
+ bits 32
+
+prim_editdone:
+ mov dl,t_array
+ call get_1arg
+ jc prim_editdone_90
+
+ mov esi,eax
+ call edit_get_params
+ mov bp,pserr_invalid_data
+ jc prim_editdone_90
+
+ push word [edit_x]
+ pop word [gfx_cur_x]
+ push word [edit_y]
+ pop word [gfx_cur_y]
+ mov dx,[edit_width]
+ mov cx,[edit_height]
+ mov edi,[edit_bg]
+ add edi,4
+
+ mov bx,dx
+ imul bx,[pixel_bytes]
+ push esi
+ call restore_bg
+ pop esi
+
+ call edit_done_params
+
+ sub word [pstack.ptr],byte 1
+prim_editdone_90:
+ ret
+
+
+;; edit.showcursor - show input field cursor
+;
+; group: edit
+;
+; ( array1 -- )
+;
+; array1: see @edit.init
+;
+
+ bits 32
+
+prim_editshowcursor:
+ mov dl,t_array
+ call get_1arg
+ jc prim_editshowcursor_90
+
+ mov esi,eax
+ call edit_get_params
+ mov bp,pserr_invalid_data
+ jc prim_editshowcursor_90
+
+ or edi,edi
+ jz prim_editshowcursor_50
+
+ push esi
+ push dword [gfx_cur]
+ call edit_show_cursor
+ pop dword [gfx_cur]
+ pop esi
+
+ call edit_put_params
+
+prim_editshowcursor_50:
+
+ sub dword [pstack.ptr],1
+prim_editshowcursor_90:
+ ret
+
+
+;; edit.hidecursor - hide input field cursor
+;
+; group: edit
+;
+; ( array1 -- )
+;
+; array1: see @edit.init
+;
+
+ bits 32
+
+prim_edithidecursor:
+ mov dl,t_array
+ call get_1arg
+ jc prim_edithidecursor_90
+
+ mov esi,eax
+ call edit_get_params
+ mov bp,pserr_invalid_data
+ jc prim_edithidecursor_90
+
+ or edi,edi
+ jz prim_edithidecursor_50
+
+ push esi
+ push dword [gfx_cur]
+ call edit_hide_cursor
+ pop dword [gfx_cur]
+ pop esi
+
+ call edit_put_params
+
+
+prim_edithidecursor_50:
+
+ sub dword [pstack.ptr],1
+prim_edithidecursor_90:
+ ret
+
+
+;; edit.input - edit field input processing
+;
+; group: edit
+;
+; ( array1 int1 -- )
+;
+; array1: see @edit.init
+; int1: key (bits 0-23 Unicode char, bits 24-31 scan code)
+;
+; example
+; /keyLeft 0x4b000000 def % move cursor left
+; ed 'a' edit.input
+; ed keyLeft edit.input
+;
+
+ bits 32
+
+prim_editinput:
+ mov dx,t_int + (t_array << 8)
+ call get_2args
+ jc prim_editinput_90
+
+ mov esi,ecx
+
+ push eax
+ call edit_get_params
+ pop eax
+
+ mov bp,pserr_invalid_data
+ jc prim_editinput_90
+
+ or edi,edi
+ jz prim_editinput_50
+
+ push esi
+
+ push dword [gfx_cur]
+
+ push eax
+ call edit_hide_cursor
+ pop eax
+
+ call edit_input
+
+ call edit_show_cursor
+
+ pop dword [gfx_cur]
+
+ pop esi
+
+ call edit_put_params
+
+prim_editinput_50:
+
+ sub dword [pstack.ptr],2
+prim_editinput_90:
+ ret
+
+
+;; edit.getleft - get chat left from cursor
+;
+; group: edit
+;
+; ( array1 -- int1 )
+;
+; array1: see @edit.init
+; int1: char (0 = start of line)
+;
+
+ bits 32
+
+prim_editgetleft:
+ mov dl,t_array
+ call get_1arg
+ jc prim_editgetleft_90
+
+ mov esi,eax
+ call edit_get_params
+ mov bp,pserr_invalid_data
+ jc prim_editgetleft_90
+
+ or edi,edi
+ jz prim_editgetleft_50
+
+ mov ebx,[edit_buf]
+ movzx esi,word [edit_buf_ptr]
+ xor eax,eax
+ or esi,esi
+ jz prim_editgetleft_50
+ call utf8_prev
+ add esi,ebx
+ call utf8_dec
+
+prim_editgetleft_50:
+ mov dl,t_int
+ xor ecx,ecx
+ call set_pstack_tos
+prim_editgetleft_90:
+ ret
+
+
+;; sysconfig - get pointer to boot loader config data
+;
+; group: system
+;
+; ( -- ptr1 )
+;
+; ptr1: boot loader config data (32 bytes)
+;
+
+ bits 32
+
+prim_sysconfig:
+ mov eax,[boot.sysconfig]
+ jmp pr_getptr_or_none
+
+
+;; 64bit - test if we run on a 64-bit machine
+;
+; group: system
+;
+; ( -- int1 )
+;
+; int1 = 1: 64-bit architecture
+;
+
+ bits 32
+
+prim_64bit:
+ call chk_64bit
+ sbb eax,eax
+ inc eax
+ jmp pr_getint
+
+
+;; inbyte - get byte from i/o port
+;
+; group: system
+;
+; ( int1 -- int2 )
+;
+; int2: byte from port int1
+;
+
+ bits 32
+
+prim_inbyte:
+ mov dl,t_int
+ call get_1arg
+ jc prim_inbyte_90
+ mov edx,eax
+ xor eax,eax
+ in al,dx
+ mov dl,t_int
+ xor ecx,ecx
+ call set_pstack_tos
+prim_inbyte_90:
+ ret
+
+
+;; outbyte - write byte to i/o port
+;
+; group: system
+;
+; ( int1 int2 -- )
+;
+; Write byte int2 to port int1.
+;
+
+ bits 32
+
+prim_outbyte:
+ mov dx,t_int + (t_int << 8)
+ call get_2args
+ jc prim_outbyte_90
+ mov edx,ecx
+ out dx,al
+ sub dword [pstack.ptr],2
+prim_outbyte_90:
+ ret
+
+
+;; getbyte - get byte from memory
+;
+; group: system
+;
+; ( ptr1 -- int1 )
+;
+; int1: byte at ptr1
+;
+
+ bits 32
+
+prim_getbyte:
+ mov dl,t_ptr
+ call get_1arg
+ jc prim_getbyte_90
+ movzx eax,byte [es:eax]
+ mov dl,t_int
+ xor ecx,ecx
+ call set_pstack_tos
+prim_getbyte_90:
+ ret
+
+
+;; putbyte - write byte to memory
+;
+; group: system
+;
+; ( ptr1 int1 -- )
+;
+; Write byte int1 at ptr1.
+;
+
+ bits 32
+
+prim_putbyte:
+ mov dx,t_int + (t_ptr << 8)
+ call get_2args
+ jc prim_putbyte_90
+ mov [es:ecx],al
+ sub dword [pstack.ptr],2
+prim_putbyte_90:
+ ret
+
+
+;; getword - get word from memory
+;
+; group: system
+;
+; ( ptr1 -- int1 )
+;
+; int1: word at ptr1
+;
+
+ bits 32
+
+prim_getword:
+ mov dl,t_ptr
+ call get_1arg
+ jc prim_getword_90
+ movzx eax,word [es:eax]
+ mov dl,t_int
+ xor ecx,ecx
+ call set_pstack_tos
+prim_getword_90:
+ ret
+
+
+;; putword - write word to memory
+;
+; group: system
+;
+; ( ptr1 int1 -- )
+;
+; Write word int1 at ptr1.
+;
+
+ bits 32
+
+prim_putword:
+ mov dx,t_int + (t_ptr << 8)
+ call get_2args
+ jc prim_putword_90
+ mov [es:ecx],ax
+ sub dword [pstack.ptr],2
+prim_putword_90:
+ ret
+
+
+;; getdword - get dword from memory
+;
+; group: system
+;
+; ( ptr1 -- int1 )
+;
+; int1: dword at ptr1
+;
+
+ bits 32
+
+prim_getdword:
+ mov dl,t_ptr
+ call get_1arg
+ jc prim_getdword_90
+ mov eax,[es:eax]
+ mov dl,t_int
+ xor ecx,ecx
+ call set_pstack_tos
+prim_getdword_90:
+ ret
+
+
+;; putdword - write dword to memory
+;
+; group: system
+;
+; ( ptr1 int1 -- )
+;
+; Write dword int1 at ptr1.
+;
+
+ bits 32
+
+prim_putdword:
+ mov dx,t_int + (t_ptr << 8)
+ call get_2args
+ jc prim_putdword_90
+ mov [es:ecx],eax
+ sub dword [pstack.ptr],2
+prim_putdword_90:
+ ret
+
+
+;; findfile - load file
+;
+; group: mem
+;
+; ( str1 -- ptr1 )
+;
+; str1: file name
+; ptr1: buffer with file data
+;
+; Note: ptr1 may or may not have to be free'd using @free, depending on whether it is
+; actually loaded from file system or is part of the bootlogo archive. To be on the safe
+; side, always free it.
+;
+; To get the file length, use @length on ptr1.
+;
+; example
+; "xxx.jpg" findfile length % file size of "xxx.jpg"
+;
+
+ bits 32
+
+prim_findfile:
+ mov dl,t_string
+ call get_1arg
+ jc prim_findfile_90
+prim_findfile_10:
+ push eax
+ call find_file
+ pop ecx
+ cmp bl,1
+ jz prim_findfile_10 ; symlink
+ mov dl,t_ptr
+ or eax,eax
+ jnz prim_findfile_20
+ xchg eax,ecx
+ call find_file_ext
+ mov dl,t_ptr
+ or eax,eax
+ jnz prim_findfile_20
+ mov dl,t_none
+prim_findfile_20:
+ xor ecx,ecx
+ call set_pstack_tos
+prim_findfile_90:
+ ret
+
+
+;; filesize - get file size
+;
+; group: mem
+;
+; ( str1 -- int1 )
+;
+; str1: file name
+; int1: file length (or .undef if not found)
+;
+; Note: Unlike @findfile, it doesn't load the file.
+;
+; example
+; "xxx.jpg" filesize % file size of "xxx.jpg"
+;
+
+ bits 32
+
+prim_filesize:
+ mov dl,t_string
+ call get_1arg
+ jc prim_filesize_90
+prim_filesize_10:
+ push eax
+ call find_file
+ pop ecx
+ cmp bl,1
+ jz prim_filesize_10 ; symlink
+ or eax,eax
+ jz prim_filesize_50
+ call find_mem_size
+prim_filesize_40:
+ mov dl,t_int
+ jmp prim_filesize_70
+prim_filesize_50:
+ xchg eax,ecx
+ call file_size_ext
+ cmp eax,-1
+ jnz prim_filesize_40
+ inc eax
+ mov dl,t_none
+prim_filesize_70:
+ xor ecx,ecx
+ call set_pstack_tos
+prim_filesize_90:
+ ret
+
+
+;; getcwd - get current working directory
+;
+; group: mem
+;
+; ( -- str1 )
+;
+; str1: file name
+;
+; example
+; getcwd show % print working directory
+;
+
+ bits 32
+
+prim_getcwd:
+ mov eax,[fname.cwd]
+ mov dl,t_string
+ jmp pr_getobj
+
+
+;; chdir - set current working directory
+;
+; group: mem
+;
+; ( str1 -- )
+;
+; str1: file name
+;
+; example
+; "/foo/bar" chdir % set working directory
+;
+
+ bits 32
+
+prim_chdir:
+ mov dl,t_string
+ call get_1arg
+ jc prim_chdir_90
+
+ call chdir
+ jc prim_chdir_60
+
+ dec dword [pstack.ptr]
+ jmp prim_chdir_90
+
+prim_chdir_60:
+ mov bp,pserr_invalid_data
+prim_chdir_70:
+ stc
+prim_chdir_90:
+ ret
+
+
+;; mount - re-read filesystem meta data
+;
+; group: system
+;
+; ( -- int1 )
+;
+; int1: error
+;
+; example
+; mount pop % re-read iso fs after cdrom change
+;
+
+ bits 32
+
+prim_mount:
+ mov al,6
+ call gfx_cb ; (re)mount
+ mov dl,t_int
+ movzx eax,al
+ jmp pr_getobj
+
+
+;; _readsector - read sector
+;
+; group: system
+;
+; ( int1 -- ptr1 )
+;
+; int1: sector number
+; ptr1: sector data
+;
+; Note: internal function. Returns pointer to static buffer. Does not return
+; on error. Returns .undef if function is not implemented.
+;
+
+ bits 32
+
+prim__readsector:
+ mov dl,t_int
+ call get_1arg
+ jc prim__readsector_90
+
+ mov edx,eax
+ mov al,5
+ call gfx_cb ; read sector (nr = edx)
+ or al,al
+ jz prim__readsector_50
+ mov dl,t_none
+ xor eax,eax
+ jmp prim__readsector_80
+prim__readsector_50:
+ mov eax,edx
+ mov dl,t_ptr
+prim__readsector_80:
+ xor ecx,ecx
+ call set_pstack_tos
+prim__readsector_90:
+ ret
+
+
+;; setmode - set video mode
+;
+; group: gfx.screen
+;
+; ( int1 -- bool1 )
+;
+; int1: VESA or VGA mode number
+; bool1: true = mode is set, false = failed
+;
+; Note: if video mode setting fails, the old mode is restored, but the
+; screen contents is undefined.
+;
+
+ bits 32
+
+prim_setmode:
+ mov dl,t_int
+ call get_1arg
+ jz prim_setmode_30
+ cmp dl,t_none
+ stc
+ jnz prim_setmode_90
+ xor eax,eax
+ mov ecx,eax
+ jmp prim_setmode_80
+prim_setmode_30:
+ xchg [gfx_mode],ax
+ push eax
+ call set_mode
+ pop eax
+ jnc prim_setmode_60
+ xchg [gfx_mode],ax
+ call set_mode
+ stc
+prim_setmode_60:
+ sbb eax,eax
+ inc eax
+
+ mov cx,[screen_width]
+ mov [clip_r],cx
+
+ mov cx,[screen_vheight]
+ mov [clip_b],cx
+
+ xor ecx,ecx
+
+ mov [clip_l],cx
+ mov [clip_t],cx
+
+prim_setmode_80:
+ mov dl,t_bool
+ call set_pstack_tos
+prim_setmode_90:
+ ret
+
+
+;; currentmode - current video mode
+;
+; group: gfx.screen
+;
+; ( -- int1 )
+;
+; int1: current video mode number
+;
+
+ bits 32
+
+prim_currentmode:
+ movzx eax,word [gfx_mode]
+ jmp pr_getint
+
+
+;; videomodes - video mode list length
+;
+; group: gfx.screen
+;
+; ( -- int1 )
+;
+; int1: video mode list length (always >= 1)
+;
+
+ bits 32
+
+prim_videomodes:
+ mov esi,[vbe_mode_list]
+ xor eax,eax
+
+prim_videomodes_20:
+ add esi,2
+ inc eax
+ cmp eax,1000h ; don't overdo
+ jae prim_videomodes_30
+ cmp word [es:esi-2],0xffff
+ jnz prim_videomodes_20
+ jmp prim_videomodes_40
+prim_videomodes_30:
+ xor eax,eax
+prim_videomodes_40:
+ jmp pr_getint
+
+
+;; videomodeinfo - return video mode info
+;
+; group: gfx.screen
+;
+; ( int1 -- int2 int3 int4 int5 )
+;
+; int1: mode index
+; int2, int3: width, height
+; int4: color bits
+; int5: mode number (bit 14: framebuffer mode) or .undef
+;
+; example
+; 2 videomodeinfo
+;
+
+ bits 32
+
+prim_videomodeinfo:
+ mov dl,t_int
+ call get_1arg
+ jc prim_vmi_90
+
+ mov ecx,[pstack.ptr]
+ add ecx,3
+ cmp [pstack.size],ecx
+ mov bp,pserr_pstack_overflow
+ jb prim_vmi_90
+ mov [pstack.ptr],ecx
+
+ cmp eax,100h
+ jb prim_vmi_10
+ mov ax,0ffh
+prim_vmi_10:
+ add eax,eax
+ add eax,[vbe_mode_list]
+ movzx ecx,word [es:eax]
+ or ecx,ecx
+ jz prim_vmi_60
+ cmp ecx,-1
+ jz prim_vmi_60
+
+ mov eax,[vbe_buffer]
+ mov edi,eax
+ shr eax,4
+ mov [rm_seg.es],ax
+ and edi,0fh
+
+ mov ax,4f01h
+ push ecx
+ int 10h
+ pop ecx
+
+ cmp ax,4fh
+ jnz prim_vmi_60
+
+ mov edi,[vbe_buffer]
+
+ test byte [es:edi],1 ; mode supported?
+ jz prim_vmi_60
+
+ mov eax,ecx
+ and ax,~(1 << 14)
+ cmp dword [es:edi+28h],0 ; framebuffer start
+ jz prim_vmi_20
+ or ax,1 << 14
+prim_vmi_20:
+ mov dl,t_int
+ xor ecx,ecx
+ push edi
+ call set_pstack_tos
+ pop edi
+
+ movzx eax,word [es:edi+12h] ; width
+ mov dl,t_int
+ mov ecx,3
+ push edi
+ call set_pstack_tos
+ pop edi
+
+ movzx eax,word [es:edi+14h] ; height
+ mov dl,t_int
+ mov ecx,2
+ push edi
+ call set_pstack_tos
+ pop edi
+
+ mov dl,[es:edi+1bh] ; color mode (aka memory model)
+ mov dh,[es:edi+19h] ; color depth
+
+ cmp dl,6 ; direct color
+ jnz prim_vmi_30
+ cmp dh,32
+ jz prim_vmi_40
+ mov dh,[es:edi+1fh] ; red
+ add dh,[es:edi+21h] ; green
+ add dh,[es:edi+23h] ; blue
+ jmp prim_vmi_40
+prim_vmi_30:
+ cmp dl,4 ; PL8
+ jnz prim_vmi_60
+ mov dh,8
+prim_vmi_40:
+ movzx eax,dh
+
+ mov dl,t_int
+ mov ecx,1
+ call set_pstack_tos
+ jmp prim_vmi_90
+
+prim_vmi_60:
+ ; no mode
+ xor eax,eax
+ mov dl,t_int
+ mov ecx,3
+ call set_pstack_tos
+ xor eax,eax
+ mov dl,t_int
+ mov ecx,2
+ call set_pstack_tos
+ xor eax,eax
+ mov dl,t_int
+ mov ecx,1
+ call set_pstack_tos
+ xor eax,eax
+ mov dl,t_none
+ xor ecx,ecx
+ call set_pstack_tos
+
+prim_vmi_90:
+ ret
+
+
+;; sysinfo - return system info
+;
+; group: gfx.screen
+;
+; ( int1 -- obj1 )
+;
+; int1: info type
+; obj1: info (or .undef)
+;
+; example
+; 0 sysinfo % video mem size in kb
+; 1 sysinfo % gfx card oem string
+; 2 sysinfo % gfx card vendor string
+; 3 sysinfo % gfx card product string
+; 4 sysinfo % gfx card revision string
+;
+
+ bits 32
+
+prim_sysinfo:
+ mov dl,t_int
+ call get_1arg
+ jc prim_si_90
+
+ cmp eax,100h
+ jae prim_si_20
+ call videoinfo
+ jmp prim_si_80
+prim_si_20:
+
+
+
+prim_si_70:
+ mov dl,t_none
+ xor eax,eax
+prim_si_80:
+ xor ecx,ecx
+ call set_pstack_tos
+prim_si_90:
+ ret
+
+
+;; colorbits - current pixel size
+;
+; group: gfx.screen
+;
+; ( -- int1 )
+;
+; int1: pixel size in bits
+;
+
+ bits 32
+
+prim_colorbits:
+ movzx eax,byte [color_bits]
+ jmp pr_getint
+
+
+;; eject - eject CD-ROM
+;
+; group: system
+;
+; ( int1 -- int2 )
+;
+; int1: BIOS drive id
+; int2: BIOS error code
+;
+; Note: does not work with all BIOSes. (With very few, actually.)
+;
+
+ bits 32
+
+prim_eject:
+ mov dl,t_int
+ call get_1arg
+ jc prim_eject_90
+ mov dl,al
+ mov ax,4600h
+ int 13h
+ xor ecx,ecx
+ mov dl,t_int
+ movzx eax,ah
+ call set_pstack_tos
+prim_eject_90:
+ ret
+
+
+;; poweroff - switch computer off
+;
+; group: system
+;
+; ( -- )
+;
+; Note: uses APM, not ACPI.
+;
+
+ bits 32
+
+prim_poweroff:
+ mov ax,5300h
+ xor ebx,ebx
+ int 15h
+ jc prim_poweroff_90
+ mov ax,5304h
+ xor ebx,ebx
+ int 15h
+ mov ax,5301h
+ xor ebx,ebx
+ int 15h
+ jc prim_poweroff_90
+ mov ax,530eh
+ xor ebx,ebx
+ mov cx,102h
+ int 15h
+ jc prim_poweroff_90
+ mov ax,5307h
+ mov cx,3
+ mov bx,1
+ int 15h
+prim_poweroff_90:
+ clc
+ ret
+
+
+;; reboot - reboot computer
+;
+; group: system
+;
+; ( -- )
+;
+
+ bits 32
+
+prim_reboot:
+ mov word [es:472h],1234h
+ pm_leave
+ jmp 0ffffh:0
+ pm_enter
+ clc
+ ret
+
+
+;; strstr - find string in string
+;
+; group: string
+;
+; ( str1 str2 -- int1 )
+;
+; Search for str2 in str1.
+; int1: offset of str2 in str1 + 1 if found; otherwise 0.
+;
+; Note: a bit strange, I know.
+;
+; example
+; "abcd" "c" strstr % 3 (not 2)
+;
+
+ bits 32
+
+prim_strstr:
+ mov dx,t_string + (t_string << 8)
+ call get_2args
+ jc prim_strstr_90
+
+ xor ebx,ebx
+
+prim_strstr_20:
+ push eax
+ push ecx
+
+ push ebx
+ call pcmp_str
+ pop ebx
+
+ jz prim_strstr_50
+
+ or al,al
+ jnz prim_strstr_30
+
+ or edx,edx
+ jnz prim_strstr_50
+
+prim_strstr_30:
+
+ or cl,cl
+ jz prim_strstr_40
+
+ pop ecx
+ pop eax
+
+ inc ecx
+ inc ebx
+ jmp prim_strstr_20
+
+prim_strstr_40:
+ xor ebx,ebx
+ jmp prim_strstr_60
+prim_strstr_50:
+ inc ebx
+prim_strstr_60:
+ add esp,2*4
+ mov eax,ebx
+ dec dword [pstack.ptr]
+ xor ecx,ecx
+ mov dl,t_int
+ call set_pstack_tos
+
+prim_strstr_90:
+ ret
+
+
+; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+; sound primitives
+
+;; sound.getvolume - current sound volume
+;
+; group: sound
+;
+; ( -- int1 )
+;
+; int1: volume (0 .. 100)
+;
+
+ bits 32
+
+prim_soundgetvolume:
+ mov eax,[pstack.ptr]
+ inc eax
+ cmp [pstack.size],eax
+ mov bp,pserr_pstack_overflow
+ jb prim_sgv_90
+ mov [pstack.ptr],eax
+ mov dl,t_int
+ movzx eax,byte [sound_vol]
+ xor ecx,ecx
+ call set_pstack_tos
+prim_sgv_90:
+ ret
+
+
+;; sound.setvolume - set sound volume
+;
+; group: sound
+;
+; ( int1 -- )
+;
+; int1: volume (0 .. 100)
+;
+
+ bits 32
+
+prim_soundsetvolume:
+ mov dl,t_int
+ call get_1arg
+ jc prim_ssv_90
+ dec dword [pstack.ptr]
+ or eax,eax
+ jns prim_ssv_30
+ xor eax,eax
+prim_ssv_30:
+ cmp eax,100
+ jl prim_ssv_50
+ mov eax,100
+prim_ssv_50:
+ or eax,eax
+ jns prim_ssv_60
+ xor eax,eax
+prim_ssv_60:
+ mov [sound_vol],al
+ call mod_setvolume
+ clc
+prim_ssv_90:
+ ret
+
+
+;; sound.getsamplerate - current sample rate
+;
+; group: sound
+;
+; ( -- int1 )
+;
+; int1: sample rate
+;
+
+ bits 32
+
+prim_soundgetsamplerate:
+ mov eax,[pstack.ptr]
+ inc eax
+ cmp [pstack.size],eax
+ mov bp,pserr_pstack_overflow
+ jb prim_sgsr_90
+ mov [pstack.ptr],eax
+ mov dl,t_int
+ mov eax,[sound_sample]
+ xor ecx,ecx
+ call set_pstack_tos
+prim_sgsr_90:
+ ret
+
+
+;; sound.setsamplerate - set sample rate
+;
+; group: sound
+;
+; (int1 -- )
+;
+; int1: sample rate
+;
+
+ bits 32
+
+prim_soundsetsamplerate:
+ mov dl,t_int
+ call get_1arg
+ jc prim_sssr_90
+ dec dword [pstack.ptr]
+ push eax
+ call sound_init
+ pop eax
+ call sound_setsample
+ clc
+prim_sssr_90:
+ ret
+
+
+;; sound.play - play sound
+;
+; group: sound
+;
+; ( -- )
+;
+; Note: obsolete. Sounds are played using the PC speaker.
+;
+
+ bits 32
+
+prim_soundplay:
+ call sound_init
+ jc prim_splay_80
+prim_splay_80:
+ clc
+prim_splay_90:
+ ret
+
+
+;; sound.done - turn off sound subsystem
+;
+; group: sound
+;
+; ( -- )
+;
+
+ bits 32
+
+prim_sounddone:
+ call sound_done
+ clc
+ ret
+
+
+;; mod.load - assign mod file to player
+;
+; group: sound
+;
+; ( int1 ptr1 -- )
+;
+; int1: player
+; ptr1: mod file
+;
+
+ bits 32
+
+prim_modload:
+ mov dx,t_ptr + (t_int << 8)
+ call get_2args
+ jc prim_modload_90
+ sub dword [pstack.ptr],2
+ xchg eax,ecx
+
+ ; ecx mod file
+ ; eax player
+
+ push eax
+ push ecx
+ call sound_init
+ pop edi
+ pop eax
+ jc prim_modload_80
+
+ call mod_load
+prim_modload_80:
+ clc
+prim_modload_90:
+ ret
+
+
+;; mod.play - play mod file
+;
+; group: sound
+;
+; ( int1 int2 -- )
+;
+; int1: player
+; int2: song start
+;
+; Note: sounds are played using the PC speaker.
+;
+
+ bits 32
+
+prim_modplay:
+ mov dx,t_int + (t_int << 8)
+ call get_2args
+ jc prim_modplay_90
+ sub dword [pstack.ptr],2
+ xchg eax,ecx
+
+ ; ecx start
+ ; eax player
+
+ cmp byte [sound_ok],0
+ jz prim_modplay_90
+
+ mov ebx,ecx
+ call mod_play
+
+ clc
+prim_modplay_90:
+ ret
+
+
+;; mod.playsample - play mod sample
+;
+; group: sound
+;
+; ( int1 int2 int3 int4 -- )
+;
+; int1: player
+; int2: channel
+; int3: sample number
+; int4: pitch
+;
+
+ bits 32
+
+prim_modplaysample:
+ mov bp,pserr_pstack_underflow
+ cmp dword [pstack.ptr],4
+ jc prim_modps_90
+ mov bp,pserr_wrong_arg_types
+
+ mov ecx,3
+ call get_pstack_tos
+ cmp dl,t_int
+ stc
+ jnz prim_modps_90
+
+ mov ecx,2
+ push eax
+ call get_pstack_tos
+ pop ebx
+ cmp dl,t_int
+ stc
+ jnz prim_modps_90
+
+ mov dx,t_int + (t_int << 8)
+ push ebx
+ push eax
+ call get_2args
+ pop ebx
+ pop edx
+ jc prim_modps_90
+
+ sub dword [pstack.ptr],4
+
+ xchg eax,edx
+
+ ; 1: eax
+ ; 2: ebx
+ ; 3: ecx
+ ; 4: edx
+
+ cmp byte [sound_ok],0
+ jz prim_modps_90
+
+ call mod_playsample
+
+ clc
+prim_modps_90:
+ ret
+
+
+;; wav.play - play wav file
+;
+; group: sound
+;
+; ( ptr1 -- )
+;
+; ptr1: wav file
+;
+
+ bits 32
+
+prim_wavplay:
+ call pr_setptr_or_none
+
+ call snd_activate
+
+ clc
+ ret
+
+prim_test2:
+ mov eax,wav_current
+ add eax,[prog.base]
+ jmp pr_getptr_or_none
+
+prim_test3:
+ movzx eax,word [cnt0_start_val]
+ jmp pr_getint
+
+prim_test4:
+ mov eax,[int8_count]
+ jmp pr_getint
+
+prim_test5:
+ xor eax,eax
+ mov al,[sound_playing]
+ mov ah,[need_sound_update]
+ jmp pr_getint
+
+prim_test6:
+ mov eax,sound_start
+ add eax,[prog.base]
+ jmp pr_getptr_or_none
+
+
+
+;; wav.playlater - play wav file after current one
+;
+; group: sound
+;
+; ( ptr1 -- )
+;
+; ptr1: wav file
+;
+
+ bits 32
+
+prim_wavplaylater:
+ mov eax,[wav_current]
+ or eax,eax
+ jz prim_wavplay
+ cmp eax,[wav_end]
+ jz prim_wavplay
+
+ call pr_setptr_or_none
+
+ ; eax file
+
+ mov [wav_next],eax
+
+ or byte [sound_playing],0f0h
+
+ clc
+ ret
+
+
+;; settextwrap - set text wrap column
+;
+; group: text
+;
+; ( int1 -- )
+;
+; int1: text wrap column; set to 0 to turn text wrapping off.
+;
+
+ bits 32
+
+prim_settextwrap:
+ call pr_setint
+ mov [line_wrap],eax
+ ret
+
+
+;; currenttextwrap - current text wrap column
+;
+; group: text
+;
+; ( -- int1 )
+;
+; int1: text wrap column
+;
+
+ bits 32
+
+prim_currenttextwrap:
+ mov eax,[line_wrap]
+ jmp pr_getint
+
+
+;; seteotchar - set alternative end-of-text char
+;
+; group: text
+;
+; ( int1 -- )
+;
+; int1: eot char
+;
+; Normally strings are 0 terminated. @seteotchar lets you define an
+; additional char text functions recognize.
+;
+
+ bits 32
+
+prim_seteotchar:
+ call pr_setint
+ mov [char_eot],eax
+ ret
+
+
+;; currenteotchar - current alternative end-of-text char
+;
+; group: text
+;
+; ( -- int1 )
+;
+; int1: eot char
+;
+
+ bits 32
+
+prim_currenteotchar:
+ mov eax,[char_eot]
+ jmp pr_getint
+
+
+;; setmaxrows - maximum number of text rows to display
+;
+; group: text
+;
+; ( int1 -- )
+;
+; int1: maximum number of text rows to display in a single @show command.
+;
+
+ bits 32
+
+prim_setmaxrows:
+ call pr_setint
+ mov [max_rows],eax
+ ret
+
+
+;; currentmaxrows -- current maxium number of text rows to display
+;
+; group: text
+;
+; ( -- int1 )
+;
+; int1: maxium number of text rows to display in a single @show command.
+;
+
+ bits 32
+
+prim_currentmaxrows:
+ mov eax,[max_rows]
+ jmp pr_getint
+
+
+;; formattext -- format text
+;
+; group: text
+;
+; ( str1 -- )
+;
+; str1: text
+;
+; Preprocess text to find (and remember) line breaks, links and stuff.
+;
+
+ bits 32
+
+prim_formattext:
+ mov dl,t_string
+ call get_1arg
+ jc prim_formattext_90
+ dec dword [pstack.ptr]
+ push eax
+
+ push es
+ push ds
+ pop es
+
+ xor eax,eax
+ mov ecx,max_text_rows
+ mov edi,row_text
+ rep stosd
+ mov ecx,max_text_rows
+ mov edi,ind_text
+ rep stosw
+ mov ecx,link_entries * li.size
+ mov edi,link_list
+ rep stosb
+
+ pop es
+
+ pop esi
+ or byte [txt_state],2
+ mov word [gfx_indent],0
+ call text_xy
+ and byte [txt_state],~2
+ clc
+prim_formattext_90:
+ ret
+
+
+;; gettextrows - number of text rows
+;
+; group: text
+;
+; ( -- int1 )
+;
+; int1: total number of text rows.
+;
+; Note: available after running @formattext.
+;
+
+ bits 32
+
+prim_gettextrows:
+ mov eax,[cur_row2]
+ jmp pr_getint
+
+
+;; setstartrow - set start row
+;
+; group: text
+;
+; ( int1 -- )
+;
+; int1: start row for next @show command.
+;
+; Note: if a start row > 0 is set, the argument to @show is irrelevant.
+; Instead the internal data built during the last @formattext is used.
+;
+
+ bits 32
+
+prim_setstartrow:
+ call pr_setint
+ mov [start_row],eax
+ ret
+
+
+;; getlinks -- number of links in text
+;
+; group: text
+;
+; ( -- int1 )
+;
+; int1: number of links in text.
+;
+; Note: available after running @formattext.
+;
+
+ bits 32
+
+prim_getlinks:
+ mov eax,[cur_link]
+ jmp pr_getint
+
+
+;; settextcolors -- set text markup colors
+;
+; group: text
+;
+; ( int1 int2 int3 int4 -- )
+;
+; int1: normal color
+; int2: highlight color
+; int3: link color
+; int4: selected link color
+;
+; Note: int1 can be changed using @setcolor, too.
+;
+
+ bits 32
+
+prim_settextcolors:
+ mov bp,pserr_pstack_underflow
+ cmp dword [pstack.ptr],4
+ jc prim_settextcolors_90
+ mov ecx,3
+ call get_pstack_tos
+ cmp dl,t_int
+ stc
+ mov bp,pserr_wrong_arg_types
+ jnz prim_settextcolors_90
+ call encode_color
+ mov [gfx_color0],eax
+ mov [gfx_color],eax
+ mov ecx,2
+ push ebp
+ call get_pstack_tos
+ pop ebp
+ cmp dl,t_int
+ stc
+ jnz prim_settextcolors_90
+ call encode_color
+ mov [gfx_color1],eax
+ mov dx,t_int + (t_int << 8)
+ call get_2args
+ jc prim_settextcolors_90
+
+ sub dword [pstack.ptr],4
+
+ call encode_color
+ mov [gfx_color3],eax
+ mov eax,ecx
+ call encode_color
+ mov [gfx_color2],eax
+
+ clc
+prim_settextcolors_90:
+ ret
+
+
+;; currenttextcolors - current text markup colors
+;
+; group: text
+;
+; ( -- int1 int2 int3 int4 )
+;
+; int1: normal color
+; int2: highlight color
+; int3: link color
+; int4: selected link color
+;
+
+ bits 32
+
+prim_currenttextcolors:
+ mov eax,[pstack.ptr]
+ add eax,4
+ cmp [pstack.size],eax
+ mov bp,pserr_pstack_overflow
+ jb prim_currenttextcolors_90
+ mov [pstack.ptr],eax
+ mov dl,t_int
+ mov eax,[gfx_color3]
+ call decode_color
+ xor ecx,ecx
+ call set_pstack_tos
+ mov dl,t_int
+ mov eax,[gfx_color2]
+ call decode_color
+ mov ecx,1
+ call set_pstack_tos
+ mov dl,t_int
+ mov eax,[gfx_color1]
+ call decode_color
+ mov ecx,2
+ call set_pstack_tos
+ mov dl,t_int
+ mov eax,[gfx_color0]
+ call decode_color
+ mov ecx,3
+ call set_pstack_tos
+prim_currenttextcolors_90:
+ ret
+
+
+;; setlink - select link
+;
+; group: text
+;
+; ( int1 -- )
+;
+; int1: link number
+;
+
+ bits 32
+
+prim_setlink:
+ call pr_setint
+ cmp eax,[cur_link]
+ jae prim_setlink_90
+ mov [sel_link],eax
+prim_setlink_90:
+ ret
+
+
+;; currentlink - currently selected link
+;
+; group: text
+;
+; ( -- int1 )
+;
+; int1: selected link
+;
+
+ bits 32
+
+prim_currentlink:
+ mov eax,[sel_link]
+ jmp pr_getint
+
+
+;; getlink -- get link information
+;
+; group: text
+;
+; ( int1 -- str1 str2 int2 int3 )
+;
+; int1: link number
+; str1: link label
+; str2: link text
+; int1: link text x-offset
+; int2: link text row
+;
+
+ bits 32
+
+prim_getlink:
+ mov dl,t_int
+ call get_1arg
+ jc prim_getlink_90
+ mov bp,pserr_invalid_range
+ cmp eax,[cur_link]
+ cmc
+ jc prim_getlink_90
+ shl eax,2
+ lea edi,[link_list+2*eax+eax] ; li.size = 12 (3*4)
+ mov eax,[pstack.ptr]
+ add eax,3
+ cmp [pstack.size],eax
+ mov bp,pserr_pstack_overflow
+ jb prim_getlink_90
+ mov [pstack.ptr],eax
+
+ mov dl,t_string
+ mov eax,label_buf
+ add eax,[prog.base]
+ mov ecx,3
+ call set_pstack_tos
+
+ mov dl,t_string
+ mov eax,[edi+li.text]
+ mov ecx,2
+ call set_pstack_tos
+
+ mov dl,t_int
+ movzx eax,word [edi+li.x]
+ mov ecx,1
+ call set_pstack_tos
+
+ mov dl,t_int
+ movzx eax,word [edi+li.row]
+ xor ecx,ecx
+ call set_pstack_tos
+
+ mov esi,[edi+li.label]
+ mov edi,label_buf
+ mov ecx,32 ; sizeof label_buf
+prim_getlink_50:
+ es lodsb
+ cmp al,13h
+ jz prim_getlink_60
+ or al,al
+ jz prim_getlink_60
+ mov [edi],al
+ inc edi
+ loop prim_getlink_50
+prim_getlink_60:
+ mov byte [edi],0
+ clc
+prim_getlink_90:
+ ret
+
+
+;; lineheight - current line height
+;
+; group: font
+;
+; ( -- int1 )
+;
+; int1: line height
+;
+
+ bits 32
+
+prim_lineheight:
+ movzx eax,word [font.line_height]
+ jmp pr_getint
+
+
+;; currenttitle - current page title
+;
+; group: text
+;
+; ( -- str1 )
+;
+; str1: page title
+;
+; Note: available after running @formattext.
+;
+
+ bits 32
+
+prim_currenttitle:
+ mov eax,[page_title]
+ or eax,eax
+ jnz prim_currenttitle_10
+ add eax,[prog.base]
+ add eax,msg_0
+prim_currenttitle_10:
+ mov dl,t_string
+ jmp pr_getobj
+
+
+;; usleep - sleep micro seconds
+;
+; group: system
+;
+; ( int1 -- )
+;
+; int1: micro seconds to sleep.
+;
+; Note: the actual granularity is 18Hz, so don't make up too sophisticated
+; timings.
+;
+
+ bits 32
+
+prim_usleep:
+ call pr_setint
+ mov ecx,54944/2
+ add eax,ecx
+ add ecx,ecx
+ xor edx,edx
+ div ecx
+ ; or eax,eax
+ ; jz prim_usleep_90
+ mov ecx,eax
+ push ecx
+ call get_time
+ pop ecx
+ add ecx,eax
+prim_usleep_20:
+ push ecx
+ call get_time
+ pop ecx
+ cmp eax,ecx
+ jbe prim_usleep_20
+prim_usleep_90:
+ ret
+
+
+;; notimeout - turn off initial boot loader timeout
+;
+; group: system
+;
+; ( -- )
+;
+; Turns off any automatic booting.
+;
+
+ bits 32
+
+prim_notimeout:
+ mov byte [input_notimeout],1
+ clc
+ ret
+
+
+;; time - get current time
+;
+; group: system
+;
+; ( -- int1 )
+;
+; int1: time in seconds since midnight.
+;
+
+ bits 32
+
+prim_time:
+ call get_time
+ jmp pr_getint
+
+
+;; date - get current date
+;
+; group: system
+;
+; ( -- int1 )
+;
+; int1: date (bit 0-7: day, bit 8-15: month, bit 16-31: year)
+;
+
+ bits 32
+
+prim_date:
+ call get_date
+ jmp pr_getint
+
+
+;; serialputc - write char to serial line
+;
+; group: text
+;
+; ( int1 -- )
+;
+; int1: char (bit 0-23: char, bit 24-31: console id)
+;
+
+ bits 32
+
+prim_serialputc:
+ call pr_setint
+ call serial_putc
+ clc
+ ret
+
+
+;; serialsetconfig - set serial line config
+;
+; group: system
+;
+; ( int1 int2 int3 -- )
+;
+; int1: line number (0-4)
+; int2: port
+; int3: baud
+;
+
+ bits 32
+
+prim_serialsetconfig:
+ mov bp,pserr_pstack_underflow
+ cmp dword [pstack.ptr],3
+ jc prim_ssc_90
+ mov ecx,2
+ call get_pstack_tos
+ cmp dl,t_int
+ stc
+ mov bp,pserr_wrong_arg_types
+ jnz prim_ssc_90
+ push eax
+ mov dx,t_int + (t_int << 8)
+ call get_2args
+ pop ebx
+ jc prim_ssc_90
+ sub dword [pstack.ptr],3
+ ; ebx: line
+ ; ecx: port
+ ; eax: baud
+
+ cmp ebx,serial.lines.max - 1
+ jae prim_ssc_80
+ imul esi,ebx,sl.size
+ add esi,serial.lines
+ mov byte [esi+sl.status],0
+ add bl,0f0h
+ mov [esi+sl.scancode],bl
+ cmp ecx,10000h
+ jae prim_ssc_80
+ cmp ecx,4
+ jae prim_ssc_40
+ mov cx,[es:0x400+ecx*2]
+ or cx,cx
+ jz prim_ssc_80
+prim_ssc_40:
+ mov [esi+sl.port],cx
+ or eax,eax
+ jnz prim_ssc_60
+ mov byte [esi+sl.recv_mask],al
+ mov byte [esi+sl.recv_cnt],al
+ mov byte [esi+sl.baud_idx],al
+ movzx eax,byte [serial.baud_tab]
+ or byte [esi+sl.status],4
+ jmp prim_ssc_70
+prim_ssc_60:
+ cmp eax,450
+ jb prim_ssc_80
+ mov ebx,115200
+ cmp eax,ebx
+ ja prim_ssc_80
+ xchg eax,ebx
+ cdq
+ div ebx
+prim_ssc_70:
+ mov [esi+sl.baud],ax
+ or byte [esi+sl.status],1
+prim_ssc_80:
+ clc
+prim_ssc_90:
+ ret
+
+
+;; serialgetbaud - get current baud rate
+;
+; group: text
+;
+; ( int1 -- int2 )
+;
+; int1: console
+; int2: baud (0 = undefined)
+;
+
+ bits 32
+
+prim_serialgetbaud:
+ call pr_setint
+ cmp eax,serial.lines.max
+ jae prim_serialgetbaud_80
+ imul ebx,eax,sl.size
+ xor eax,eax
+ test byte [serial.lines+ebx+sl.status],1
+ jz prim_serialgetbaud_80
+ mov ax,[serial.lines+ebx+sl.baud]
+ mov ecx,115200
+ xchg eax,ecx
+ cdq
+ div ecx
+ jmp prim_serialgetbaud_90
+prim_serialgetbaud_80:
+ xor eax,eax
+prim_serialgetbaud_90:
+ jmp pr_getint
+
+
+;; serial.init - program serial lines
+;
+; group: system
+;
+; ( -- )
+;
+
+ bits 32
+
+prim_serialinit:
+ call serial_setup
+ clc
+ ret
+
+
+;; idle - run stuff when idle
+;
+; group: system
+;
+; ( ptr1 int1 -- )
+;
+; ptr1: 'kroete' data
+; int1: direction (0 or 1)
+;
+; Run 'kroete' animation while we're waiting for keyboard input.
+;
+
+ bits 32
+
+prim_idle:
+ mov dx,t_int + (t_ptr << 8)
+ call get_2args
+ jnc prim_idle_10
+ cmp dx,t_int + (t_none << 8)
+ stc
+ jnz prim_idle_90
+prim_idle_10:
+ sub dword [pstack.ptr],2
+ cmp dh,t_none ; undef
+ jnz prim_idle_50
+ mov byte [idle.run],0
+ mov eax,[idle.draw_buffer]
+ or eax,eax
+ jz prim_idle_80
+ call free
+ and dword [idle.draw_buffer],0
+ jmp prim_idle_80
+prim_idle_50:
+ mov [idle.data1],ecx
+ mov [idle.data2],eax
+
+ mov byte [idle.invalid],1
+
+ cmp dword [idle.draw_buffer],0
+ jnz prim_idle_70
+
+ mov ecx,kroete.width
+ mov eax,kroete.height
+ call alloc_fb
+ mov [idle.draw_buffer],eax
+ or eax,eax
+ jz prim_idle_80
+
+prim_idle_70:
+ mov byte [idle.run],1
+prim_idle_80:
+ clc
+prim_idle_90:
+ ret
+
+
+;; keepmode - keep video mode
+;
+; group: system
+;
+; ( int1 -- )
+;
+; int1 = 1: keep video mode when starting kernel.
+;
+
+ bits 32
+
+prim_keepmode:
+ call pr_setint
+ mov [keep_mode],al
+ ret
+
+
+;; blend -- blend image with alpha channel
+;
+; group: image
+;
+; ( obj1 obj2 ptr3 -- )
+;
+; obj1: pointer to source image or color value
+; obj2: pointer to alpha channel or transparency value
+; ptr3: destination
+;
+; An image section of obj1 is copied to ptr3 using obj2 as alpha channel.
+; obj1 may be a color value or an unpacked image (@unpackimage, @savescreen).
+; obj2 may be a transparency value (0..255) or an unpacked image used as alpha channel.
+; The current cursor position is used as offset into obj1 and obj2 if they are images.
+; If both obj1 and obj2 are images, they must have the same dimensions.
+;
+; Note: 16/32-bit modes only.
+;
+
+ bits 32
+
+prim_blend:
+ mov bp,pserr_pstack_underflow
+ cmp dword [pstack.ptr],3
+ jc prim_blend_90
+
+ and dword [tmp_var_0],0
+
+ mov ecx,2
+ call get_pstack_tos
+ cmp dl,t_none
+ jnz prim_blend_21
+ xor eax,eax
+ mov dl,t_int
+prim_blend_21:
+ cmp dl,t_ptr
+ jz prim_blend_23
+ or byte [tmp_var_0],1
+ cmp dl,t_int
+ jz prim_blend_23
+prim_blend_22:
+ stc
+ mov bp,pserr_wrong_arg_types
+ jmp prim_blend_90
+prim_blend_23:
+ mov [tmp_var_1],eax
+
+ mov ecx,1
+ call get_pstack_tos
+ cmp dl,t_none
+ jnz prim_blend_31
+ xor eax,eax
+ mov dl,t_int
+prim_blend_31:
+ cmp dl,t_ptr
+ jz prim_blend_33
+ or byte [tmp_var_0],2
+ cmp dl,t_int
+ jnz prim_blend_22
+prim_blend_33:
+ mov [tmp_var_2],eax
+
+ xor ecx,ecx
+ call get_pstack_tos
+ cmp dl,t_none
+ jnz prim_blend_35
+ sub dword [pstack.ptr],3
+ ; CF = 0
+ jmp prim_blend_90
+prim_blend_35:
+ cmp dl,t_ptr
+ jnz prim_blend_22
+
+ mov [tmp_var_3],eax
+
+ sub dword [pstack.ptr],3
+
+ ; tmp_var_0: bit 0, 1: src type, alpha type (0 = ptr, 1 = int)
+ ; tmp_var_1: src
+ ; tmp_var_2: alpha
+ ; tmp_var_3: dst
+
+ mov esi,[tmp_var_1]
+ mov ebx,[tmp_var_2]
+
+ mov al,[tmp_var_0]
+ or al,al
+ jnz prim_blend_60
+
+ ; check image domensions
+ mov ecx,[es:esi]
+ cmp ecx,[es:ebx]
+
+ jnz prim_blend_22
+prim_blend_60:
+ mov edi,[tmp_var_3]
+
+ ; invalidates tmp_var_*
+ call blend
+
+ clc
+prim_blend_90:
+ ret
+
+
+;; getkey - get keyboard input
+;
+; group: system
+;
+; ( -- int1 )
+;
+; int1: key (bit 0-7: ASCII, bit 8-15: scan code, bit 16-31: kbd status bits)
+;
+; Note: the function does not block. If there is no key pressed, bits 0-15 will be 0.
+;
+ bits 32
+
+prim_getkey:
+ mov ah,11h
+ int 16h
+ mov eax,0
+ jz prim_getkey_20
+ mov ah,10h
+ int 16h
+ and eax,0ffffh
+prim_getkey_20:
+ mov ecx,[es:417h-2]
+ xor cx,cx
+ add eax,ecx
+ jmp pr_getint
+
+
+; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+; Helper function that covers common cases.
+
+; return eax as ptr on stack, returns undef if eax = 0
+
+ bits 32
+
+pr_getptr_or_none:
+ mov dl,t_ptr
+ or eax,eax
+ jnz pr_getobj
+ mov dl,t_none
+ jmp pr_getobj
+
+; return eax as integer on stack
+pr_getint:
+ mov dl,t_int
+
+; return eax as dl on stack
+pr_getobj:
+ mov ecx,[pstack.ptr]
+ inc ecx
+ cmp [pstack.size],ecx
+ mov bp,pserr_pstack_overflow
+ jc pr_getobj_90
+ mov [pstack.ptr],ecx
+ xor ecx,ecx
+ call set_pstack_tos
+pr_getobj_90:
+ ret
+
+
+; get ptr from stack as eax; if it is undef, don't return to function
+pr_setptr_or_none:
+ mov dl,t_ptr
+
+; get obj from stack as eax; if it is undef, don't return to function
+pr_setobj_or_none:
+ call get_1arg
+ jnc pr_setobj_20
+ cmp dl,t_none
+ stc
+ jnz pr_setobj_10
+ dec dword [pstack.ptr]
+ clc
+ jmp pr_setobj_10
+
+; get integer from stack as eax
+pr_setint:
+ mov dl,t_int
+
+; get object with type dl from stack as eax
+pm_pr_setobj:
+ call get_1arg
+ jnc pr_setobj_20
+pr_setobj_10:
+ pop eax ; don't return to function that called us
+ ret
+pr_setobj_20:
+ dec dword [pstack.ptr]
+ pop ecx ; put link to clc on stack
+ push dword pr_setobj_30
+ jmp ecx
+pr_setobj_30:
+ clc
+ ret
+
+
+; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+;
+;
+; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+
+; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+; Get object size.
+;
+; eax, dl obj, obj tyoe
+;
+; return:
+;
+; eax length
+; CF 0/1 ok/not ok
+;
+
+ bits 32
+
+get_length:
+ cmp dl,t_ptr
+ jz get_length_10
+ cmp dl,t_array
+ jz get_length_20
+ cmp dl,t_string
+ jz get_length_30
+ stc
+ jmp get_length_90
+get_length_10:
+ call find_mem_size
+ jmp get_length_80
+get_length_20:
+ movzx eax,word [es:eax]
+ jmp get_length_80
+get_length_30:
+ xchg eax,esi
+ xor ecx,ecx
+ xor eax,eax
+get_length_40:
+ es lodsb
+ call is_eot
+ loopnz get_length_40
+ not ecx
+ xchg eax,ecx
+get_length_80:
+ clc
+get_length_90:
+ ret
+
+
+; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+; Blend src & dst using alpha channel.
+;
+; al arg type; bit 0, 1: src, alpha (0 = ptr, 1 = int)
+; esi src
+; ebx alpha
+; edi dst
+; word [gfx_cur_x] offset into src
+; word [gfx_cur_y] dto
+;
+
+ bits 32
+
+blend:
+ push dword [transp]
+
+ cmp byte [pixel_bytes],2
+ jz blend_10
+ cmp byte [pixel_bytes],4
+ jnz blend_90
+
+blend_10:
+ mov ebp,[es:edi]
+ test al,2
+ jnz blend_12
+ mov ebp,[es:ebx]
+blend_12:
+ test al,1
+ jnz blend_14
+ mov ebp,[es:esi]
+blend_14:
+
+ mov [tmp_var_0],al
+ mov [tmp_var_1],ebp ; width, height (src)
+
+ push dword [es:edi]
+ pop dword [tmp_var_2] ; width, height (dst)
+
+ mov [tmp_var_3],esi ; color
+
+ movzx eax,bl
+ mov [transp],eax ; alpha transp
+
+ movzx ebp,bp ; src width
+
+ movzx eax,word [gfx_cur_y]
+ mul ebp
+ movzx ecx,word [gfx_cur_x]
+ add eax,ecx
+ imul eax,[pixel_bytes]
+ add eax,4
+
+ test byte [tmp_var_0],1
+ jnz blend_16
+ add esi,eax
+blend_16:
+ test byte [tmp_var_0],2
+ jnz blend_17
+ add ebx,eax
+blend_17:
+
+ add edi,4
+
+ mov edx,blend_pixel_16
+ cmp byte [pixel_bytes],2
+ jz blend_18
+ mov edx,blend_pixel_32
+blend_18:
+ movzx ecx,byte [tmp_var_0]
+ and cl,3
+ push dword [edx+ecx*4]
+ pop dword [blend_pixel]
+
+ mov cx,[tmp_var_2 + 2] ; dst height
+
+blend_20:
+ push cx
+
+ mov dx,[tmp_var_2] ; dst width
+
+blend_40:
+ call [blend_pixel]
+
+ add esi,[pixel_bytes]
+ add ebx,[pixel_bytes]
+ add edi,[pixel_bytes]
+
+ dec dx
+ jnz blend_40
+
+ pop cx
+
+ movzx eax,word [tmp_var_2] ; dst width
+ sub eax,ebp ; src width
+ imul eax,[pixel_bytes]
+
+ sub esi,eax
+ sub ebx,eax
+
+ dec cx
+ jnz blend_20
+
+blend_90:
+ pop dword [transp]
+
+ ret
+
+
+ align 4, db 0
+blend_pixel dd 0
+
+blend_pixel_16 dd blend_pixel_00_16
+ dd blend_pixel_01_16
+ dd blend_pixel_10_16
+ dd blend_pixel_11_16
+
+blend_pixel_32 dd blend_pixel_00_32
+ dd blend_pixel_01_32
+ dd blend_pixel_10_32
+ dd blend_pixel_11_32
+
+
+; src: image, alpha: image
+blend_pixel_00_16:
+ mov ax,[es:ebx]
+ call decode_color
+
+ movzx eax,ah
+ mov [transp],eax
+
+ mov ax,[es:esi]
+ call decode_color
+ xchg ecx,eax
+
+ mov ax,[es:edi]
+ call decode_color
+ call enc_transp
+ call encode_color
+
+ mov [es:edi],ax
+ ret
+
+; src: color, alpha: image
+blend_pixel_01_16:
+ mov ax,[es:ebx]
+ call decode_color
+
+ movzx eax,ah
+ mov [transp],eax
+
+ mov ecx,[tmp_var_3]
+
+ mov ax,[es:edi]
+ call decode_color
+ call enc_transp
+ call encode_color
+
+ mov [es:edi],ax
+ ret
+
+; src: image, alpha: fixed
+blend_pixel_10_16:
+ mov ax,[es:esi]
+ call decode_color
+ xchg eax,ecx
+
+ mov ax,[es:edi]
+ call decode_color
+ call enc_transp
+ call encode_color
+
+ mov [es:edi],ax
+ ret
+
+; src: color, alpha: fixed
+blend_pixel_11_16:
+ mov ecx,[tmp_var_3]
+
+ mov ax,[es:edi]
+ call decode_color
+ call enc_transp
+ call encode_color
+
+ mov [es:edi],ax
+ ret
+
+; src: image, alpha: image
+blend_pixel_00_32:
+ mov eax,[es:ebx]
+ movzx eax,ah
+ mov [transp],eax
+
+ mov ecx,[es:esi]
+
+ mov eax,[es:edi]
+ call enc_transp
+
+ mov [es:edi],eax
+ ret
+
+; src: color, alpha: image
+blend_pixel_01_32:
+ mov eax,[es:ebx]
+ movzx eax,ah
+ mov [transp],eax
+
+ mov ecx,[tmp_var_3]
+
+ mov eax,[es:edi]
+ call enc_transp
+
+ mov [es:edi],eax
+ ret
+
+; src: image, alpha: fixed
+blend_pixel_10_32:
+ mov ecx,[es:esi]
+
+ mov eax,[es:edi]
+ call enc_transp
+
+ mov [es:edi],eax
+ ret
+
+; src: color, alpha: fixed
+blend_pixel_11_32:
+ mov ecx,[tmp_var_3]
+
+ mov eax,[es:edi]
+ call enc_transp
+
+ mov [es:edi],eax
+ ret
+
+
+; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+; ebx string
+; esi ptr to char (rel. to ebx)
+;
+; return:
+; esi points to prev char
+;
+; Changes no other regs.
+;
+
+ bits 32
+
+utf8_prev:
+ push eax
+ or esi,esi
+ jz utf8_prev_90
+utf8_prev_50:
+ dec esi
+ jz utf8_prev_90
+ mov al,[es:ebx+esi]
+ shr al,6
+ cmp al,2
+ jz utf8_prev_50
+utf8_prev_90:
+ pop eax
+ ret
+
+
+; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+;
+; ebx string
+; esi ptr to char (rel. to ebx)
+;
+; return:
+; esi points to next char
+;
+; Changes no other regs.
+;
+
+ bits 32
+
+utf8_next:
+ push eax
+ cmp byte [es:ebx+esi],0
+ jz utf8_next_90
+utf8_next_50:
+ inc esi
+ mov al,[es:ebx+esi]
+ shr al,6
+ cmp al,2
+ jz utf8_next_50
+utf8_next_90:
+ pop eax
+ ret
+
+
+; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+;
+; eax key (bits 0-23: key, 24-31: scan code)
+;
+
+ bits 32
+
+edit_input:
+ mov edx,eax
+ shr edx,24
+ and eax,1fffffh
+ mov esi,[edit_buf]
+
+ and byte [edit_flags],~2 ; clear redraw flag
+
+ mov ebx,esi
+ dec esi
+
+edit_input_10:
+ inc esi
+ cmp byte [es:esi],0
+ jnz edit_input_10
+ mov ecx,esi
+ sub ecx,ebx
+
+ ; ecx: string length
+
+ movzx esi,word [edit_buf_ptr]
+
+ cmp dl,keyLeft
+ jnz edit_input_20
+ mov edi,esi
+ call utf8_prev
+ cmp edi,esi
+ jz edit_input_90
+ mov [edit_buf_ptr],si
+ jmp edit_input_80
+edit_input_20:
+ cmp dl,keyRight
+ jnz edit_input_21
+ mov edi,esi
+ call utf8_next
+ cmp edi,esi
+ jz edit_input_90
+ mov [edit_buf_ptr],si
+ jmp edit_input_80
+edit_input_21:
+ cmp dl,keyEnd
+ jnz edit_input_22
+ cmp byte [es:ebx+esi],0
+ jz edit_input_90
+ mov [edit_buf_ptr],cx
+ jmp edit_input_80
+edit_input_22:
+ cmp dl,keyHome
+ jnz edit_input_23
+ or esi,esi
+ jz edit_input_90
+ and word [edit_buf_ptr],0
+ jmp edit_input_80
+edit_input_23:
+ cmp dl,keyDel
+ jnz edit_input_30
+edit_input_24:
+ mov edi,esi
+ call utf8_next
+ cmp edi,esi
+ jz edit_input_90
+edit_input_25:
+ mov al,[es:ebx+esi]
+ mov [es:ebx+edi],al
+ inc esi
+ inc edi
+ or al,al
+ jnz edit_input_25
+ or byte [edit_flags],2 ; redraw
+ jmp edit_input_80
+edit_input_30:
+ cmp eax,keyBS
+ jnz edit_input_35
+ mov edi,esi
+ call utf8_prev
+ cmp edi,esi
+ jz edit_input_90
+ mov [edit_buf_ptr],si
+ jmp edit_input_24
+edit_input_35:
+
+ cmp eax,20h
+ jb edit_input_90
+
+ ; reject chars we can't display
+ pusha
+ call char_width
+ or ecx,ecx
+ popa
+ jz edit_input_90
+
+ or byte [edit_flags],2 ; redraw
+
+ push ecx
+ push ebx
+ push esi
+ call utf8_enc
+ pop esi
+ pop ebx
+ pop eax
+
+ movzx edx,word [edit_buf_len]
+ sub edx,eax
+ sub edx,ecx
+ jb edit_input_90
+ cmp edx,1
+ jb edit_input_90
+ sub ax,[edit_buf_ptr]
+ add [edit_buf_ptr],cx
+
+ ; eax: bytes to copy (excl. final 0)
+ ; ecx: utf8 size
+
+ push esi
+
+ add esi,eax
+ mov edi,esi
+ add edi,ecx
+ inc eax
+edit_input_70:
+ mov dl,[es:ebx+esi]
+ mov [es:ebx+edi],dl
+ dec esi
+ dec edi
+ dec eax
+ jnz edit_input_70
+
+ pop esi
+
+ mov edi,utf8_buf
+edit_input_75:
+ mov al,[edi]
+ mov [es:ebx+esi],al
+ inc edi
+ inc esi
+ dec ecx
+ jnz edit_input_75
+
+edit_input_80:
+ movzx esi,word [edit_buf_ptr]
+ mov al,0
+ xchg al,[es:ebx+esi]
+ push eax
+ push esi
+ push ebx
+
+ mov esi,ebx
+ call str_size
+
+ pop ebx
+ pop esi
+ pop eax
+ xchg al,[es:ebx+esi]
+ mov [edit_cursor],cx
+
+ mov esi,ebx
+ call str_size
+ mov [edit_length],cx
+
+ call edit_align
+
+ test byte [edit_flags],2 ; redraw
+ jz edit_input_90
+
+ ; wait32
+
+ call edit_redraw
+edit_input_90:
+ ret
+
+
+; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+; Write char at current cursor position.
+;
+; eax char
+; [edit_bg] background pixmap
+;
+; return:
+; cursor position gets advanced
+;
+
+ bits 32
+
+edit_char:
+ push word [clip_r]
+ push word [clip_l]
+
+ push eax
+
+ mov cx,[edit_x]
+ mov [clip_l],cx
+ add cx,[edit_width]
+ mov [clip_r],cx
+
+ call find_char
+
+ cmp word [chr.x_advance],0
+ jle edit_char_80
+
+ mov edi,[edit_bg]
+ add edi,4
+ mov bx,[edit_width]
+ imul bx,[pixel_bytes]
+ mov ax,[edit_y_ofs]
+ imul bx
+ movzx eax,ax
+ add edi,eax
+ mov cx,[gfx_cur_x]
+ sub cx,[edit_x]
+ imul cx,[pixel_bytes]
+ movsx ecx,cx
+ add edi,ecx
+
+ mov dx,[chr.x_advance]
+ mov cx,[font.height]
+
+ call restore_bg
+
+edit_char_80:
+ pop eax
+
+ call char_xy
+
+ pop word [clip_l]
+ pop word [clip_r]
+
+edit_char_90:
+ ret
+
+
+; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+; Ensure the cursor is always within the visible area.
+;
+
+ bits 32
+
+edit_align:
+ mov bp,[edit_shift]
+ mov cx,[edit_width]
+ mov bx,bp
+ or bp,bp
+ jz edit_align_30
+ mov ax,[edit_length]
+ inc ax
+ sub ax,bx
+ sub ax,cx
+ jge edit_align_30
+ neg ax
+ cmp ax,bx
+ jl edit_align_20
+ mov ax,bx
+edit_align_20:
+ sub bx,ax
+edit_align_30:
+
+ mov dx,cx
+ shr dx,1
+ mov ax,[edit_cursor]
+ sub ax,bp
+ cmp ax,dx
+ jg edit_align_50
+
+ sub ax,0 ; still 0 pixel away?
+ jge edit_align_80
+ add bx,ax
+ jge edit_align_80
+ xor bx,bx
+ jmp edit_align_80
+edit_align_50:
+ sub cx,ax
+ sub cx,1 ; still 1 pixel away?
+ jge edit_align_80
+ sub bx,cx
+edit_align_80:
+ cmp bx,bp
+ jz edit_align_90
+ mov [edit_shift],bx
+ or byte [edit_flags],2 ; redraw
+edit_align_90:
+ ret
+
+
+; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+;
+ bits 32
+
+edit_redraw:
+ mov ax,[edit_x]
+ sub ax,[edit_shift]
+ mov [gfx_cur_x],ax
+ mov ax,[edit_y]
+ add ax,[edit_y_ofs]
+ mov [gfx_cur_y],ax
+
+ mov esi,[edit_buf]
+edit_redraw_20:
+ call utf8_dec
+ or eax,eax
+ jz edit_redraw_50
+ push esi
+ call edit_char
+ pop esi
+ jmp edit_redraw_20
+edit_redraw_50:
+ mov ax,[edit_x]
+ add ax,[edit_width]
+ sub ax,[gfx_cur_x]
+ jle edit_redraw_90
+
+ push word [edit_y]
+ pop word [gfx_cur_y]
+ mov dx,ax
+ imul ax,[pixel_bytes]
+ mov cx,[edit_height]
+ mov bx,[edit_width]
+ imul bx,[pixel_bytes]
+ mov edi,[edit_bg]
+ add edi,4
+ movzx ebx,bx
+ movzx eax,ax
+ add edi,ebx
+ sub edi,eax
+
+ call restore_bg
+edit_redraw_90:
+ ret
+
+
+; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+;
+
+ bits 32
+
+edit_hide_cursor:
+ test byte [edit_flags],1
+ jz edit_hide_cursor_90
+ mov edi,[edit_saved_cursor]
+ or edi,edi
+ jz edit_hide_cursor_90
+
+ mov dx,[edit_cursor]
+ sub dx,[edit_shift]
+ add dx,[edit_x]
+ mov [gfx_cur_x],dx
+ push word [edit_y]
+ pop word [gfx_cur_y]
+
+ mov dx,[es:edi]
+ mov cx,[es:edi+2]
+ add edi,4
+ mov bx,dx
+ imul bx,[pixel_bytes]
+ call restore_bg
+
+ and byte [edit_flags],~1
+edit_hide_cursor_90:
+ ret
+
+
+; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+;
+
+ bits 32
+
+edit_show_cursor:
+ test byte [edit_flags],1
+ jnz edit_show_cursor_90
+ mov eax,[edit_saved_cursor]
+ or eax,eax
+ jnz edit_show_cursor_10
+ xor ecx,ecx
+ inc ecx
+ movzx eax,word [edit_height]
+ call alloc_fb
+ or eax,eax
+ jz edit_show_cursor_90
+ mov [edit_saved_cursor],eax
+edit_show_cursor_10:
+
+ mov dx,[edit_cursor]
+ sub dx,[edit_shift]
+ add dx,[edit_x]
+ mov [gfx_cur_x],dx
+ push word [edit_y]
+ pop word [gfx_cur_y]
+
+ xor edx,edx
+ inc edx
+ mov cx,[edit_height]
+ lea edi,[eax+4]
+ call save_bg
+
+ push fs
+ push gs
+
+ call screen_segs
+
+ movzx ecx,word [edit_height]
+edit_show_cursor_60:
+ push ecx
+ call goto_xy
+ call [setpixel_t]
+ pop ecx
+ inc word [gfx_cur_y]
+ loop edit_show_cursor_60
+
+ pop gs
+ pop fs
+
+ or byte [edit_flags],1
+
+edit_show_cursor_90:
+ ret
+
+
+; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+;
+; esi initial text
+;
+
+ bits 32
+
+edit_init:
+ xor ecx,ecx
+ mov [edit_shift],cx
+ mov edi,[edit_buf]
+edit_init_10:
+ es lodsb
+ or al,al
+ jz edit_init_20
+ stosb
+ inc ecx
+ cmp cx,[edit_buf_len]
+ jb edit_init_10
+ dec ecx
+ dec edi
+edit_init_20:
+ mov byte [es:edi],0
+ mov [edit_buf_ptr],cx
+
+ mov esi,[edit_buf]
+ call str_size
+
+ mov [edit_cursor],cx
+
+ call edit_align
+ call edit_redraw
+ call edit_show_cursor
+edit_init_90:
+ ret
+
+
+; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+; Initialize internal edit data.
+;
+; esi parameter array
+;
+; return:
+; CF invalid array/out of memory
+;
+; Note:
+; esi unchanged
+;
+
+ bits 32
+
+edit_init_params:
+ cmp word [es:esi],6
+ jc edit_init_params_90
+
+ push esi
+ mov eax,2+5*5
+ call calloc
+ pop esi
+ or eax,eax
+ jz edit_init_params_80
+
+ mov byte [es:esi+2+5*5],t_array
+ mov [es:esi+2+5*5+1],eax
+
+ mov word [es:eax],5
+
+ mov byte [es:eax+2+5*0],t_int
+ mov byte [es:eax+2+5*1],t_int
+ mov byte [es:eax+2+5*2],t_int
+ mov byte [es:eax+2+5*3],t_int
+
+ clc
+ jmp edit_init_params_90
+
+edit_init_params_80:
+ stc
+
+edit_init_params_90:
+ ret
+
+
+; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+; Free internal edit data.
+;
+; esi parameter array
+;
+; Note:
+; esi unchanged
+;
+
+ bits 32
+
+edit_done_params:
+ cmp word [es:esi],6
+ jc edit_done_params_90
+
+ cmp byte [es:esi+2+5*5],t_array
+ jnz edit_done_params_90
+
+ mov edi,[es:esi+2+5*5+1]
+ cmp word [es:edi],3
+ jc edit_done_params_90
+
+ ; mov byte [es:eax+2+5*0],t_int
+ ; mov byte [es:eax+2+5*1],t_int
+ ; mov byte [es:eax+2+5*2],t_int
+
+ mov eax,edi
+ push esi
+ call free
+ pop esi
+
+ xor eax,eax
+ mov byte [es:esi+2+5*5],t_none
+ mov [es:esi+2+5*5+1],eax
+
+edit_done_params_90:
+ ret
+
+
+; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+; Store internal input field state.
+;
+; esi parameter array
+;
+; Notes:
+; - no consistency checks done, esi _must_ point to a valid array
+; - esi unchanged
+;
+
+ bits 32
+
+edit_put_params:
+ cmp byte [es:esi+2+5*5],t_array
+ jnz edit_put_params_90
+
+ mov edi,[es:esi+2+5*5+1]
+ cmp word [es:edi],5
+ jb edit_put_params_90
+
+ push word [edit_buf_ptr]
+ pop word [es:edi+2+5*0+1]
+
+ push word [edit_cursor]
+ pop word [es:edi+2+5*1+1]
+
+ push word [edit_shift]
+ pop word [es:edi+2+5*2+1]
+
+ push dword [edit_flags]
+ pop dword [es:edi+2+5*3+1]
+
+ mov eax,[edit_saved_cursor]
+ mov [es:edi+2+5*4+1],eax
+ mov dl,t_none
+ or eax,eax
+ jz edit_put_params_50
+ mov dl,t_ptr
+edit_put_params_50:
+ mov [es:edi+2+5*4],dl
+
+edit_put_params_90:
+ ret
+
+
+; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+; Copy input field parameters into internal structures.
+;
+; esi parameter array
+;
+; return:
+; edi: internal data array
+; CF invalid data
+;
+
+ bits 32
+
+edit_get_params:
+ cmp word [es:esi],6
+ jc edit_get_params_90
+
+ cmp byte [es:esi+2+5*0],t_int
+ jnz edit_get_params_80
+ push word [es:esi+2+5*0+1]
+ pop word [edit_x]
+
+ cmp byte [es:esi+2+5*1],t_int
+ jnz edit_get_params_80
+ push word [es:esi+2+5*1+1]
+ pop word [edit_y]
+
+ cmp byte [es:esi+2+5*2],t_ptr
+ jnz edit_get_params_80
+ push dword [es:esi+2+5*2+1]
+ pop dword [edit_bg]
+
+ cmp byte [es:esi+2+5*3],t_string
+ jnz edit_get_params_80
+ mov eax,[es:esi+2+5*3+1]
+ mov [edit_buf],eax
+
+ cmp byte [es:esi+2+5*4],t_int
+ jnz edit_get_params_80
+ push word [es:esi+2+5*4+1]
+ pop word [edit_buf_len]
+
+ cmp byte [es:esi+2+5*5],t_none
+ jnz edit_get_params_40
+ xor edi,edi
+ jmp edit_get_params_90
+edit_get_params_40:
+ cmp byte [es:esi+2+5*5],t_array
+ jnz edit_get_params_80
+ mov edi,[es:esi+2+5*5+1]
+ cmp word [es:edi],5 ; array length
+ jb edit_get_params_80
+
+ cmp byte [es:edi+2+5*0],t_int
+ jnz edit_get_params_80
+ push word [es:edi+2+5*0+1]
+ pop word [edit_buf_ptr]
+
+ cmp byte [es:edi+2+5*1],t_int
+ jnz edit_get_params_80
+ push word [es:edi+2+5*1+1]
+ pop word [edit_cursor]
+
+ cmp byte [es:edi+2+5*2],t_int
+ jnz edit_get_params_80
+ push word [es:edi+2+5*2+1]
+ pop word [edit_shift]
+
+ cmp byte [es:edi+2+5*3],t_int
+ jnz edit_get_params_80
+ push dword [es:edi+2+5*3+1]
+ pop dword [edit_flags]
+
+ cmp byte [es:edi+2+5*4],t_none
+ jz edit_get_params_60
+ cmp byte [es:edi+2+5*4],t_ptr
+ jnz edit_get_params_80
+ push dword [es:edi+2+5*4+1]
+ pop dword [edit_saved_cursor]
+edit_get_params_60:
+ mov eax,[edit_bg]
+ mov dx,[es:eax]
+ mov [edit_width],dx
+ mov dx,[es:eax+2]
+ mov [edit_height],dx
+
+ mov cx,[font.height]
+ sub dx,cx
+ sar dx,1
+ mov [edit_y_ofs],dx
+
+ cmp word [edit_buf_len],2 ; at least 1 char
+ jnc edit_get_params_90
+
+edit_get_params_80:
+
+ stc
+edit_get_params_90:
+ ret
+
+
+; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+;
+; basic graphics functions
+;
+; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+
+; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+; Map next window segment.
+;
+
+ bits 32
+
+inc_winseg:
+ push eax
+ mov al,[mapped_window]
+ inc al
+ call set_win
+ pop eax
+ ret
+
+
+; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+; Map window segment.
+;
+; al window segment
+;
+
+ bits 32
+
+set_win:
+ push edi
+ cmp byte [vbe_active],0
+ jz set_win_90
+ cmp [mapped_window],al
+ jz set_win_90
+ pusha
+ mov [mapped_window],al
+ mov ah,[window_inc]
+ mul ah
+ xchg eax,edx
+ mov ax,4f05h
+ xor ebx,ebx
+ cmp word [window_seg_r],0
+ jz set_win_50
+ pusha
+ inc ebx
+ int 10h
+ popa
+set_win_50:
+ int 10h
+ popa
+set_win_90:
+ pop edi
+ ret
+
+
+; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+; Go to current cursor position.
+;
+; return:
+; edi offset
+; correct gfx segment is mapped
+;
+; Notes:
+; - changes no regs other than edi
+;
+
+ bits 32
+
+goto_xy:
+ push eax
+ push edx
+ mov ax,[gfx_cur_y]
+ movzx edi,word [gfx_cur_x]
+ imul edi,[pixel_bytes]
+ mul word [screen_line_len]
+ add ax,di
+ adc dx,0
+ push ax
+ xchg ax,dx
+ call set_win
+ pop di
+ pop edx
+ pop eax
+ ret
+
+
+; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+; Set active color.
+;
+; eax color
+;
+; return:
+; [gfx_color] color
+;
+
+ bits 32
+
+setcolor:
+ mov [gfx_color],eax
+ ret
+
+
+; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+; Encode rgb value to color.
+;
+; eax rgb value
+;
+; return:
+; eax color
+;
+
+ bits 32
+
+encode_color:
+ cmp byte [pixel_bits],16
+ jnz encode_color_90
+ push edx
+ xor edx,edx
+ shl eax,8
+ shld edx,eax,5
+ shl eax,8
+ shld edx,eax,6
+ shl eax,8
+ shld edx,eax,5
+ mov eax,edx
+ pop edx
+encode_color_90:
+ ret
+
+
+; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+; Decode color to rgb.
+;
+; eax color
+;
+; return:
+; eax rgb value
+;
+
+ bits 32
+
+decode_color:
+ cmp byte [pixel_bits],16
+ jnz decode_color_90
+ push edx
+ xor edx,edx
+ shl eax,16
+ shld edx,eax,5
+ shld edx,eax,3
+ shl eax,5
+ shld edx,eax,6
+ shld edx,eax,2
+ shl eax,6
+ shld edx,eax,5
+ shld edx,eax,3
+ mov eax,edx
+ pop edx
+decode_color_90:
+ ret
+
+
+; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+; Look up rgb value for palette entry.
+;
+; eax palette index
+;
+; return:
+; eax color
+;
+
+ bits 32
+
+pal_to_color:
+ lea eax,[eax+2*eax]
+ add eax,[gfx_pal]
+ mov eax,[es:eax]
+ bswap eax
+ shr eax,8
+ ret
+
+
+; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+; Draw a line.
+;
+; [line_x0], [line_y0] start
+; [line_x1], [line_y1] end
+;
+
+ bits 32
+
+line:
+ push fs
+ push gs
+
+ xor eax,eax
+ xor ebx,ebx
+ inc ax
+ inc bx
+ mov esi,[line_x1]
+ sub esi,[line_x0]
+ jns line_10
+ neg esi
+ neg eax
+line_10:
+ mov ebp,[line_y1]
+ sub ebp,[line_y0]
+ jns line_20
+ neg ebp
+ neg ebx
+line_20:
+ call screen_segs
+
+ xchg eax,ecx
+ mov eax,[screen_line_len]
+ imul ebx
+ xchg eax,edx
+
+ mov eax,[line_y0]
+ push edx
+ imul dword [screen_line_len]
+ pop edx
+ xchg eax,edi
+
+ mov eax,[line_x0]
+ imul eax,[pixel_bytes]
+
+ add edi,eax
+
+ cmp byte [pixel_bytes],1
+ jbe line_25
+ cmp byte [pixel_bytes],2
+ jz line_23
+ shl dword [line_x0],2
+ shl dword [line_x1],2
+ shl ecx,2
+ jmp line_25
+line_23:
+ shl dword [line_x0],1
+ shl dword [line_x1],1
+ shl ecx,1
+line_25:
+
+ ; edi -> address
+ ; ecx -> d_x
+ ; edx -> d_y
+
+ cmp esi,ebp
+ jl hline_40
+
+ or esi,esi
+ jz line_60
+
+ mov [line_tmp],esi
+ shr esi,1
+ neg esi
+
+ mov eax,[line_x1]
+ sub [line_x0],eax
+
+line_30:
+ call line_pp
+
+ add edi,ecx
+ add [line_x0],ecx
+ jz line_60
+ add esi,ebp
+ jnc line_30
+ sub esi,[line_tmp]
+ add edi,edx
+ jmp line_30
+
+hline_40:
+ or ebp,ebp
+ jz line_60
+
+ mov [line_tmp],ebp
+ shr ebp,1
+ neg ebp
+
+ mov eax,[line_y1]
+ sub [line_y0],eax
+
+line_50:
+ call line_pp
+
+ add edi,edx
+ add [line_y0],ebx
+ jz line_60
+ add ebp,esi
+ jnc line_50
+ sub ebp,[line_tmp]
+ add edi,ecx
+ jmp line_50
+line_60:
+ ; now draw final point
+
+ mov eax,[line_y1]
+ imul dword [screen_line_len]
+ add eax,[line_x1]
+ xchg eax,edi
+
+ call line_pp
+
+ pop gs
+ pop fs
+ ret
+
+line_pp:
+ mov eax,edi
+ shr eax,16
+ call set_win
+ push edi
+ and edi,0xffff
+ call [setpixel_t]
+ pop edi
+ ret
+
+
+; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+; Set pixel at gs:edi.
+;
+; setpixel_* read from [fs:edi] and write to [gs:edi]
+;
+
+ bits 32
+
+setpixel_8:
+ mov al,[gfx_color]
+
+setpixel_a_8:
+ mov [gs:edi],al
+ ret
+
+setpixel_16:
+ mov ax,[gfx_color]
+
+setpixel_a_16:
+ mov [gs:edi],ax
+ ret
+
+setpixel_32:
+ mov eax,[gfx_color]
+
+setpixel_a_32:
+ mov [gs:edi],eax
+ ret
+
+
+; set pixel with transparency
+setpixel_t_16:
+ mov ax,[gfx_color]
+
+setpixel_ta_16:
+ cmp dword [transp],0
+ jz setpixel_a_16
+ call decode_color
+ push ecx
+ xchg eax,ecx
+ mov ax,[fs:edi]
+ call decode_color
+ xchg eax,ecx
+ call enc_transp
+ pop ecx
+ call encode_color
+ mov [gs:edi],ax
+ ret
+
+setpixel_t_32:
+ mov eax,[gfx_color]
+
+setpixel_ta_32:
+ cmp dword [transp],0
+ jz setpixel_a_32
+ push ecx
+ mov ecx,[fs:edi]
+ call enc_transp
+ pop ecx
+ mov [gs:edi],eax
+ ret
+
+; (1 - t) eax + t * ecx -> eax
+enc_transp:
+ ror ecx,16
+ ror eax,16
+ call add_transp
+ rol ecx,8
+ rol eax,8
+ call add_transp
+ rol ecx,8
+ rol eax,8
+ call add_transp
+ mov eax,ecx
+ ret
+
+; cl, al -> cl
+add_transp:
+ push eax
+ push ecx
+ movzx eax,al
+ movzx ecx,cl
+ sub ecx,eax
+ imul ecx,[transp]
+ sar ecx,8
+ add ecx,eax
+ cmp ecx,0
+ jge add_transp_10
+ mov cl,0
+ jmp add_transp_20
+add_transp_10:
+ cmp ecx,100h
+ jb add_transp_20
+ mov cl,0ffh
+add_transp_20:
+ mov [esp],cl
+ pop ecx
+ pop eax
+ ret
+
+
+; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+; Get pixel from fs:edi.
+;
+; getpixel_* read from [fs:edi]
+;
+
+ bits 32
+
+getpixel_8:
+ mov al,[fs:edi]
+ ret
+
+getpixel_16:
+ mov ax,[fs:edi]
+ ret
+
+getpixel_32:
+ mov eax,[fs:edi]
+ ret
+
+
+; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+; Initialize console font (used for debug output).
+;
+
+ bits 32
+
+cfont_init:
+ ; 3: 8x8, 2: 8x14, 6: 8x16
+ mov bh,6
+ mov ax,1130h
+ int 10h
+ movzx ebp,bp
+ movzx eax,word [rm_seg.es]
+ shl eax,4
+ add eax,ebp
+ mov [cfont.lin],eax
+
+ mov dword [cfont_height],16
+ ret
+
+
+; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+; Initialize font.
+;
+; eax ptr to font header
+; cl font properties
+;
+
+ bits 32
+
+font_init:
+ mov ebx,eax
+ or eax,eax
+ jnz font_init_10
+ ; just set font properties if font ptr is 0
+ mov [font.properties],cl
+ jmp font_init_90
+font_init_10:
+ cmp dword [es:ebx+foh.magic],0d2828e06h ; magic
+ jz font_init_20
+ ; legacy: maybe font properties were passed via bit 31
+ xor ebx,1 << 31
+ xor cl,1
+ cmp dword [es:ebx+foh.magic],0d2828e06h ; magic
+ jz font_init_90
+font_init_20:
+ mov [font.properties],cl
+ mov eax,[es:ebx+foh.entries]
+ mov dl,[es:ebx+foh.height]
+ mov dh,[es:ebx+foh.line_height]
+ movsx cx,byte [es:ebx+foh.baseline]
+ or eax,eax
+ jz font_init_90
+ or dx,dx
+ jz font_init_90
+ mov [font.entries],eax
+ mov [font.height],dl
+ mov [font.line_height],dh
+ mov [font.baseline],cx
+ mov [font],ebx
+font_init_90:
+ ret
+
+
+; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+; Write a string. '\n' is a line break.
+;
+; esi string
+; [gfx_indent] initial indentation (normally 0)
+;
+; return:
+; cursor position gets advanced
+;
+; special chars:
+; char_eot same as \x00
+; \x10 back to normal (color, text output)
+; \x11 set alternative text color (gfx_color1)
+; \x12 label start, no text output; label end = \x13
+; \x13 set link text color (gfx_color2/3); typically label end
+; \x14 start page description; ends with \x10
+; \x15 vspace
+; \x16 start list item (ends with \x15 or \x16 or text end)
+; \x17 set indentation
+;
+
+ bits 32
+
+text_xy:
+ xor eax,eax
+ mov [last_label],eax
+ mov [cur_row],eax
+ and byte [txt_state],~1
+
+ test byte [txt_state],2
+ jz text_xy_05
+
+ mov [row_text],esi
+ mov [cur_row2],eax
+ mov [cur_link],eax
+ mov [sel_link],eax
+ mov [page_title],eax
+ push esi
+ call utf8_dec
+ pop esi
+ call is_eot
+ jz text_xy_05
+ inc dword [cur_row2]
+text_xy_05:
+ push word [gfx_cur_x]
+ mov ax,[gfx_indent]
+ add [gfx_cur_x],ax
+text_xy_10:
+ mov edi,esi
+ call utf8_dec
+
+ call is_eot
+ jz text_xy_90
+
+ cmp dword [line_wrap],0
+ jz text_xy_60
+
+ cmp eax,3000h
+ jae text_xy_20
+
+ call is_space
+ jnz text_xy_60
+text_xy_20:
+
+ push esi
+ mov esi,edi
+ push edi
+ call word_width
+ pop edi
+ pop esi
+ movzx edx,word [gfx_cur_x]
+ add ecx,edx
+ cmp ecx,[line_wrap]
+ jbe text_xy_60
+text_xy_30:
+ call is_space
+ jnz text_xy_50
+
+ mov edi,esi
+ call utf8_dec
+
+ call is_eot
+ jz text_xy_90
+ jmp text_xy_30
+text_xy_50:
+ mov esi,edi
+ jmp text_xy_65
+text_xy_60:
+ cmp eax,0ah
+ jnz text_xy_70
+text_xy_65:
+ ; newline
+ mov ax,[font.line_height]
+ add [gfx_cur_y],ax
+ pop ax
+ push ax
+ add ax,[gfx_indent]
+ mov [gfx_cur_x],ax
+ inc dword [cur_row]
+ mov edx,[max_rows]
+ mov eax,[cur_row]
+ or edx,edx
+ jz text_xy_67
+ cmp eax,edx
+ jae text_xy_90
+text_xy_67:
+ test byte [txt_state],2
+ jz text_xy_10
+ cmp eax,max_text_rows
+ jae text_xy_10
+ mov [cur_row2],eax
+ inc dword [cur_row2]
+ mov [row_text+4*eax],esi
+ push word [gfx_indent]
+ pop word [ind_text+2*eax]
+ jmp text_xy_10
+text_xy_70:
+ cmp eax,15h ; vspace
+ jz text_xy_71
+ cmp eax,16h ; list item
+ jnz text_xy_74
+text_xy_71:
+ ; vspace/list item are basically optional newlines
+ mov word [gfx_indent],0
+ pop ax
+ push ax
+ cmp ax,[gfx_cur_x]
+ jnz text_xy_65
+ jmp text_xy_10
+
+text_xy_74:
+ cmp eax,17h ; set indentation
+ jnz text_xy_78
+ pop ax
+ push ax
+ sub ax,[gfx_cur_x]
+ neg ax
+ mov [gfx_indent],ax
+ jmp text_xy_10
+
+text_xy_78:
+ push esi
+ cmp eax,1fh
+ jae text_xy_80
+ call text_special
+ jmp text_xy_89
+text_xy_80:
+ test byte [txt_state],1
+ jnz text_xy_89
+
+;;
+ pop esi
+ push esi
+ mov edx,eax
+ call utf8_dec
+ xchg eax,edx
+ cmp edx,0a3fh ; Sihari (Gurmukhi 'i')
+ jz text_xy_85
+ cmp edx,093fh ; (Devanagari 'i')
+ jnz text_xy_88
+text_xy_85:
+ pop edi
+ push esi
+ push eax
+ mov eax,edx
+ call char_xy
+ pop eax
+text_xy_88:
+;;
+
+ call char_xy
+text_xy_89:
+ pop esi
+ jmp text_xy_10
+text_xy_90:
+ pop ax
+ push dword [gfx_color0]
+ pop dword [gfx_color]
+ ret
+
+
+; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+; Handle special chars.
+;
+; eax char
+; esi ptr to next char
+;
+
+ bits 32
+
+text_special:
+ cmp eax,10h
+ jnz text_special_20
+
+ and byte [txt_state],~1
+ push eax
+ mov eax,[gfx_color0]
+ call setcolor
+ pop eax
+ jmp text_special_90
+text_special_20:
+ cmp eax,11h
+ jnz text_special_30
+
+ and byte [txt_state],~1
+ push eax
+ mov eax,[gfx_color1]
+ call setcolor
+ pop eax
+ jmp text_special_90
+text_special_30:
+ cmp eax,12h
+ jnz text_special_40
+
+ or byte [txt_state],1
+ mov [last_label],esi
+
+ jmp text_special_90
+text_special_40:
+ cmp eax,13h
+ jnz text_special_50
+
+ and byte [txt_state],~1
+
+ ; check for selected link
+ mov ebx,[sel_link]
+ shl ebx,2
+ mov edx,[link_list+li.text+2*ebx+ebx] ; li.size = 12 (4*3)
+ cmp esi,edx
+
+ push eax
+ mov eax,[gfx_color3]
+ jz text_special_45
+ mov eax,[gfx_color2]
+text_special_45:
+ call setcolor
+ pop eax
+
+ test byte [txt_state],2
+ jz text_special_90
+
+ mov ebx,[cur_link]
+ cmp ebx,link_entries
+ jae text_special_90
+ inc dword [cur_link]
+ shl ebx,2
+ lea ebx,[link_list+2*ebx+ebx] ; li.size = 12 (4*3)
+ push dword [last_label]
+ pop dword [ebx+li.label]
+ mov [ebx+li.text],esi
+ push word [gfx_cur_x]
+ pop word [ebx+li.x]
+ mov edx,[cur_row2]
+ sub edx,1 ; 0-- -> 0
+ adc edx,0
+ mov [ebx+li.row],dx
+
+ jmp text_special_90
+text_special_50:
+ cmp eax,14h
+ jnz text_special_60
+
+ mov [page_title],esi
+
+ jmp text_special_90
+text_special_60:
+
+
+text_special_90:
+ ret
+
+
+; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+; String width until end of next word.
+;
+; esi string
+;
+; return:
+; ecx width
+;
+
+ bits 32
+
+word_width:
+ push esi
+ push eax
+
+ xor edx,edx
+ xor ebx,ebx
+
+word_width_10:
+ call utf8_dec
+
+word_width_20:
+ call is_eot
+ jz word_width_90
+
+ cmp eax,0ah
+ jz word_width_90
+
+ cmp eax,10h
+ jnz word_width_30
+ xor ebx,ebx
+word_width_30:
+ cmp eax,11h
+ jnz word_width_31
+ mov bh,1
+word_width_31:
+ cmp eax,12h
+ jnz word_width_32
+ mov bl,1
+word_width_32:
+ cmp eax,13h
+ jnz word_width_33
+ mov bh,1
+ mov bl,0
+word_width_33:
+ cmp eax,14h
+ jnz word_width_34
+ mov bh,1
+word_width_34:
+
+ or bl,bl
+ jnz word_width_70
+
+ push eax
+ push ebx
+ push edx
+ push esi
+ call char_width
+ pop esi
+ pop edx
+ pop ebx
+ pop eax
+
+ add edx,ecx
+
+word_width_70:
+ call is_space
+ jz word_width_10
+
+ call utf8_dec
+
+ or ebx,ebx
+ jnz word_width_80
+ cmp eax,3000h
+ jae word_width_90
+word_width_80:
+
+ call is_space
+ jnz word_width_20
+
+word_width_90:
+ mov ecx,edx
+
+ pop eax
+ pop esi
+ ret
+
+
+; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+; Test for white space (space or tab).
+;
+; eax char
+;
+; return:
+; ZF 0 = no, 1 = yes
+;
+
+ bits 32
+
+is_space:
+ cmp eax,20h
+ jz is_space_90
+ cmp eax,9
+is_space_90:
+ ret
+
+
+; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+; Test for end of text.
+;
+; eax char
+;
+; return:
+; ZF 0 = no, 1 = yes
+;
+
+ bits 32
+
+is_eot:
+ or eax,eax
+ jz is_eot_90
+ cmp eax,[char_eot]
+is_eot_90:
+ ret
+
+
+; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+; Get string dimensions (in pixel).
+;
+; esi string
+;
+; return:
+; ecx width
+; edx height
+;
+
+ bits 32
+
+str_size:
+ xor ecx,ecx
+ xor edx,edx
+str_size_20:
+ push ecx
+ push edx
+ call str_len
+ xchg eax,ecx
+ pop edx
+ pop ecx
+ cmp eax,ecx
+ jb str_size_40
+ mov ecx,eax
+str_size_40:
+ inc edx
+
+ ; suppress final line break
+ call utf8_dec
+ cmp eax,0ah
+ jnz str_size_60
+ cmp byte [es:esi],0
+ jz str_size_80
+str_size_60:
+ or eax,eax
+ jz str_size_80
+ cmp eax,[char_eot]
+ jz str_size_80
+ jmp str_size_20
+str_size_80:
+ dec edx
+ movzx eax,word [font.line_height]
+ mul edx
+ movzx edx,word [font.height]
+ add edx,eax
+str_size_90:
+ ret
+
+
+; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+; Get string length (in pixel).
+; *** Use str_size instead. ***
+;
+; esi string
+;
+; return:
+; ecx width
+; esi points to string end or line break
+;
+; notes:
+; - stops at linebreak ('\n')
+;
+
+ bits 32
+
+str_len:
+ xor ecx,ecx
+str_len_10:
+ mov edi,esi
+ call utf8_dec
+ or eax,eax
+ jz str_len_70
+ cmp eax,[char_eot]
+ jz str_len_70
+ cmp eax,0ah
+ jz str_len_70
+ push ecx
+ push esi
+ call char_width
+ pop esi
+ pop eax
+ add ecx,eax
+ jmp str_len_10
+str_len_70:
+ mov esi,edi
+ ret
+
+
+; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+; Decode next utf8 char.
+;
+; esi string
+;
+; return:
+; eax char (invalid char: 0)
+; esi points past char
+;
+; Note: changes only eax, esi
+;
+
+ bits 32
+
+utf8_dec:
+ xor eax,eax
+ es lodsb
+ cmp al,80h
+ jb utf8_dec_90
+
+ push ecx
+ push edx
+
+ xor edx,edx
+ xor ecx,ecx
+ mov dl,al
+
+ cmp al,0c0h ; invalid
+ jb utf8_dec_70
+
+ inc ecx ; 2 bytes
+ and dl,1fh
+ cmp al,0e0h
+ jb utf8_dec_10
+
+ inc ecx ; 3 bytes
+ and dl,0fh
+ cmp al,0f0h
+ jb utf8_dec_10
+
+ inc ecx ; 4 bytes
+ and dl,7
+ cmp al,0f8h
+ jb utf8_dec_10
+
+ inc ecx ; 5 bytes
+ and dl,3
+ cmp al,0fch
+ jb utf8_dec_10
+
+ inc ecx ; 6 bytes
+ and dl,1
+ cmp al,0feh
+ jae utf8_dec_70
+utf8_dec_10:
+ es lodsb
+ cmp al,80h
+ jb utf8_dec_70
+ cmp al,0c0h
+ jae utf8_dec_70
+ and al,3fh
+ shl edx,6
+ or dl,al
+ dec ecx
+ jnz utf8_dec_10
+ xchg eax,edx
+ jmp utf8_dec_80
+
+utf8_dec_70:
+ xor eax,eax
+utf8_dec_80:
+ pop edx
+ pop ecx
+
+utf8_dec_90:
+ ret
+
+
+; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+; Encode utf8 char.
+;
+; eax char
+;
+; return:
+; ecx length
+; utf8_buf char
+;
+
+ bits 32
+
+utf8_enc:
+ mov esi,utf8_buf
+ xor ecx,ecx
+ xor edx,edx
+
+ cmp eax,80h
+ jae utf8_enc_10
+ mov [esi],al
+ inc esi
+ jmp utf8_enc_80
+utf8_enc_10:
+ inc ecx
+ cmp eax,800h
+ jae utf8_enc_20
+ shl eax,21
+ mov dl,6
+ shld edx,eax,5
+ shl eax,5
+ jmp utf8_enc_60
+utf8_enc_20:
+ inc ecx
+ cmp eax,10000h
+ jae utf8_enc_30
+ shl eax,16
+ mov dl,0eh
+ shld edx,eax,4
+ shl eax,4
+ jmp utf8_enc_60
+utf8_enc_30:
+ inc ecx
+ cmp eax,200000h
+ jae utf8_enc_40
+ shl eax,11
+ mov dl,1eh
+ shld edx,eax,3
+ shl eax,3
+ jmp utf8_enc_60
+utf8_enc_40:
+ inc ecx
+ cmp eax,4000000h
+ jae utf8_enc_50
+ shl eax,6
+ mov dl,3eh
+ shld edx,eax,2
+ shl eax,2
+ jmp utf8_enc_60
+utf8_enc_50:
+ inc ecx
+ shl eax,1
+ mov dl,7eh
+ shld edx,eax,1
+ add eax,eax
+utf8_enc_60:
+ mov ebx,ecx
+ mov [esi],dl
+ inc esi
+utf8_enc_70:
+ mov dl,2
+ shld edx,eax,6
+ shl eax,6
+ mov [esi],dl
+ inc esi
+ dec ebx
+ jnz utf8_enc_70
+utf8_enc_80:
+ mov byte [esi],0
+ inc ecx
+utf8_enc_90:
+ ret
+
+
+; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+; Write a char at the current cursor position.
+;
+; eax char
+;
+; return:
+; cursor position gets advanced
+;
+
+ bits 32
+
+char_xy:
+ push fs
+ push gs
+
+ cmp eax,1fh ; \x1f looks like a space, but isn't
+ jnz char_xy_10
+ mov al,' '
+char_xy_10:
+ call find_char
+ jc char_xy_90
+
+ test byte [txt_state],2 ; don't actually write
+ jnz char_xy_80
+
+ cmp word [chr.bitmap_width],0
+ jz char_xy_80
+ cmp word [chr.bitmap_height],0
+ jz char_xy_80
+
+ mov dl,[chr.type]
+ or dl,dl
+ jnz char_xy_30
+ call char0_xy
+ jmp char_xy_80
+char_xy_30:
+ cmp dl,1
+ jnz char_xy_80
+ call char1_xy
+
+char_xy_80:
+ mov cx,[chr.x_advance]
+ add [gfx_cur_x],cx
+char_xy_90:
+ pop gs
+ pop fs
+ ret
+
+
+char0_xy:
+ push word [gfx_cur_x]
+ push word [gfx_cur_y]
+
+ mov ax,[chr.x_ofs]
+ add [gfx_cur_x],ax
+
+ mov ax,[font.height]
+ sub ax,[font.baseline]
+ sub ax,[chr.y_ofs]
+ sub ax,[chr.bitmap_height]
+ add [gfx_cur_y],ax
+
+ call goto_xy
+ call screen_segs
+
+ mov ebx,[chr.data]
+ mov esi,[chr.bitmap]
+
+ xor edx,edx
+char0_xy_20:
+ xor ecx,ecx
+char0_xy_30:
+ bt [es:ebx],esi
+ jnc char0_xy_40
+ mov ax,[gfx_cur_x]
+ add ax,cx
+ cmp ax,[clip_r]
+ jge char0_xy_40
+ cmp ax,[clip_l]
+ jl char0_xy_40
+ call [setpixel_t]
+char0_xy_40:
+ inc esi
+ add di,[pixel_bytes]
+ jnc char0_xy_50
+ call inc_winseg
+char0_xy_50:
+ inc ecx
+ cmp cx,[chr.bitmap_width]
+ jnz char0_xy_30
+
+ mov ax,[screen_line_len]
+ mov bp,[chr.bitmap_width]
+ imul bp,[pixel_bytes]
+ sub ax,bp
+ add di,ax
+ jnc char0_xy_60
+ call inc_winseg
+char0_xy_60:
+ inc edx
+ cmp dx,[chr.bitmap_height]
+ jnz char0_xy_20
+
+ pop word [gfx_cur_y]
+ pop word [gfx_cur_x]
+
+ ret
+
+
+char1_xy:
+ push word [gfx_cur_x]
+ push word [gfx_cur_y]
+
+ call char1_unpack
+ jc char1_xy_90
+
+ mov ax,[chr.x_ofs]
+ add [gfx_cur_x],ax
+
+ mov ax,[font.height]
+ sub ax,[font.baseline]
+ sub ax,[chr.y_ofs]
+ sub ax,[chr.bitmap_height]
+ add [gfx_cur_y],ax
+
+ ; save_bg does not clip, do it here (sort of)
+ mov ax,[gfx_cur_x]
+ cmp ax,[clip_r]
+ jge char1_xy_20
+ add ax,[chr.bitmap_width]
+ cmp ax,[clip_l]
+ jl char1_xy_20
+
+ mov edi,[chr.pixel_buf]
+ mov dx,[es:edi]
+ mov cx,[es:edi+2]
+ add edi,4
+ call save_bg
+
+char1_xy_20:
+
+ push dword [transp]
+
+ mov edi,[chr.pixel_buf]
+ mov esi,[chr.buf]
+ mov ax,[es:edi]
+ mul word [es:edi+2]
+ movzx ecx,ax
+ add edi,4
+ add esi,4
+
+ mov eax,[gfx_color]
+ call decode_color
+ mov [tmp_var_0],eax
+
+char1_xy_30:
+ push ecx
+
+ movzx eax,byte [es:esi]
+ inc esi
+ mov [transp],eax
+ mov ecx,[tmp_var_0]
+
+ cmp dword [pixel_bytes],2
+ jnz char1_xy_40
+
+ mov ax,[es:edi]
+ call decode_color
+ call enc_transp
+ call encode_color
+ mov [es:edi],ax
+
+ jmp char1_xy_60
+char1_xy_40:
+
+ mov eax,[es:edi]
+ call enc_transp
+ mov [es:edi],eax
+
+char1_xy_60:
+ pop ecx
+ add edi,[pixel_bytes]
+ dec ecx
+ jnz char1_xy_30
+
+ pop dword [transp]
+
+ mov edi,[chr.pixel_buf]
+ mov dx,[es:edi]
+ mov cx,[es:edi+2]
+ add edi,4
+ mov bx,dx
+ imul bx,[pixel_bytes]
+ call restore_bg
+
+char1_xy_90:
+ pop word [gfx_cur_y]
+ pop word [gfx_cur_x]
+
+ ret
+
+
+char1_unpack:
+ mov ax,[chr.bitmap_width]
+ mul word [chr.bitmap_height]
+ movzx eax,ax
+ mov ebp,eax
+ mov ebx,eax
+ imul ebx,[pixel_bytes]
+ add eax,4
+ add ebx,4
+ cmp eax,[chr.buf_len]
+ jb char1_unpack_10
+ push ebp
+ push ebx
+ push eax
+ mov eax,[chr.buf]
+ call free
+ mov eax,[chr.pixel_buf]
+ call free
+ xor eax,eax
+ mov [chr.buf],eax
+ mov [chr.pixel_buf],eax
+ mov [chr.buf_len],eax
+ pop eax
+ push eax
+ call calloc
+ pop ecx
+ pop ebx
+ pop ebp
+ or eax,eax
+ stc
+ jz char1_unpack_90
+ mov [chr.buf_len],ecx
+ mov [chr.buf],eax
+ mov eax,ebx
+ push ebp
+ call calloc
+ pop ebp
+ or eax,eax
+ stc
+ jz char1_unpack_90
+ mov [chr.pixel_buf],eax
+char1_unpack_10:
+ mov edi,[chr.buf]
+ mov esi,[chr.pixel_buf]
+
+ mov cx,[chr.bitmap_width]
+ mov [es:edi],cx
+ mov [es:esi],cx
+ mov cx,[chr.bitmap_height]
+ mov [es:edi+2],cx
+ mov [es:esi+2],cx
+
+ add edi,4
+
+ ; ebp: pixel
+
+ mov ebx,[chr.data]
+ mov esi,[chr.bitmap]
+
+char1_unpack_20:
+ push ebp
+ push edi
+ mov cl,cbm_gray_bits
+ call get_u_bits
+ pop edi
+ pop ebp
+
+ cmp al,cbm_max_gray
+ ja char1_unpack_30
+ mov al,[chr.gray_values + eax]
+ stosb
+ dec ebp
+ jnz char1_unpack_20
+ jmp char1_unpack_80
+char1_unpack_30:
+ mov dl,[chr.gray_values + 0]
+ cmp al,cbm_rep_white
+ jnz char1_unpack_40
+ mov dl,[chr.gray_values + cbm_max_gray]
+char1_unpack_40:
+ push edx
+ push ebp
+ push edi
+ mov cl,cbm_gray_bit_count
+ call get_u_bits
+ pop edi
+ pop ebp
+ pop edx
+ add al,3
+ xchg dl,al
+char1_unpack_50:
+ stosb
+ dec ebp
+ jz char1_unpack_80
+ dec dl
+ jnz char1_unpack_50
+ jmp char1_unpack_20
+char1_unpack_80:
+ clc
+
+char1_unpack_90:
+ ret
+
+
+; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+; Read bits and convert to unsigned int.
+;
+; ebx buffer
+; esi bit offset
+; cl bits
+;
+; return:
+; eax (unsigned) number
+; ebx buffer
+; esi updated bit offset
+; ecx bits
+;
+get_u_bits:
+ movzx ecx,cl
+ mov edi,esi
+ mov ebp,esi
+ add esi,ecx
+ shr edi,3
+ and ebp,7
+ mov eax,[es:ebx+edi]
+ xchg ecx,ebp
+ mov edx,[es:ebx+edi+4]
+ shrd eax,edx,cl
+ xchg ecx,ebp
+ cmp ecx,32
+ jae get_u_bits_90
+ mov ebp,1
+ shl ebp,cl
+ dec ebp
+ and eax,ebp
+get_u_bits_90:
+ ret
+
+
+; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+; Read bits and convert to signed int.
+;
+; ebx buffer
+; esi bit offset
+; cl bits
+;
+; return:
+; eax (signed) number
+; ebx buffer
+; esi updated bit offset
+; ecx bits
+;
+get_s_bits:
+ call get_u_bits
+ or ecx,ecx
+ jz get_s_bits_90
+ dec ecx
+ mov ebp,1
+ shl ebp,cl
+ inc ecx
+ test eax,ebp
+ jz get_s_bits_90
+ xor ebp,ebp
+ dec ebp
+ shl ebp,cl
+ add eax,ebp
+get_s_bits_90:
+ ret
+
+
+; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+; Look for char in font.
+;
+; eax char
+;
+; return:
+; CF 0 = found, 1 = not found
+; [chr.*] updated
+;
+
+ bits 32
+
+find_char:
+ and eax,1fffffh
+ push eax
+ cmp dword [font],0
+ stc
+ jz find_char_90
+
+ test byte [font.properties],1
+ jz find_char_10
+ mov eax,'*'
+find_char_10:
+
+ mov ebx,[font]
+ add ebx,foh.size
+ mov ecx,[font.entries]
+
+ ; do a binary search for char
+
+find_char_20:
+ mov esi,ecx
+ shr esi,1
+
+ lea esi,[esi+4*esi] ; offset table has 5-byte entries
+ mov edx,[es:ebx+esi]
+ and edx,1fffffh ; 21 bits
+ cmp eax,edx
+
+ jz find_char_80
+
+ jl find_char_50
+
+ add ebx,esi
+ test cl,1
+ jz find_char_50
+ add ebx,5 ; offset table has 5-byte entries
+find_char_50:
+ shr ecx,1
+ jnz find_char_20
+
+ stc
+ jmp find_char_90
+
+find_char_80:
+ mov edx,[es:ebx+esi+1]
+ shr edx,13 ; 19 bit offset
+ add edx,[font]
+ mov [chr.data],edx
+
+ mov ebx,edx
+ xor esi,esi
+ mov cl,2
+ call get_u_bits
+ mov [chr.type],al
+ mov cl,3
+ call get_u_bits
+ mov cl,al
+ inc cl
+
+ call get_u_bits
+ mov [chr.bitmap_width],ax
+ call get_u_bits
+ mov [chr.bitmap_height],ax
+ call get_s_bits
+ mov [chr.x_ofs],ax
+ call get_s_bits
+ mov [chr.y_ofs],ax
+ call get_s_bits
+ mov [chr.x_advance],ax
+
+ mov [chr.bitmap],esi
+
+ clc
+find_char_90:
+ pop eax
+ ret
+
+
+; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+; Get char width.
+;
+; eax char
+;
+; return:
+; eax char
+; ecx char width
+;
+
+ bits 32
+
+char_width:
+ push eax
+ cmp eax,1fh ; \x1f looks like a space, but isn't
+ jnz char_width_10
+ mov al,' '
+char_width_10:
+ call find_char
+ mov ecx,0
+ jc char_width_90
+ movsx ecx,word [chr.x_advance]
+char_width_90:
+ pop eax
+ ret
+
+
+; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+; Write char at the current console cursor position.
+;
+; al char
+; ebx color
+;
+; return:
+; console cursor position gets advanced
+;
+
+ bits 32
+
+con_char_xy:
+ push fs
+ push gs
+
+ push dword [gfx_color]
+
+ push word [gfx_cur_x]
+ push word [gfx_cur_y]
+
+ mov [gfx_color],ebx
+
+ push word [con_x]
+ pop word [gfx_cur_x]
+
+ push word [con_y]
+ pop word [gfx_cur_y]
+
+ call goto_xy
+ call screen_segs
+
+ mov esi,[cfont.lin]
+
+ movzx eax,al
+
+ mul byte [cfont_height]
+ add esi,eax
+
+ xor edx,edx
+
+con_char_xy_20:
+ mov ecx,7
+con_char_xy_30:
+ bt [es:esi],ecx
+ mov eax,[gfx_color]
+ jc con_char_xy_40
+ xor eax,eax
+con_char_xy_40:
+ call [setpixel_a]
+ add di,[pixel_bytes]
+ jnc con_char_xy_50
+ call inc_winseg
+con_char_xy_50:
+ dec ecx
+ jns con_char_xy_30
+
+ inc esi
+
+ mov eax,[screen_line_len]
+ mov ebx,[pixel_bytes]
+ shl ebx,3
+ sub eax,ebx
+ add di,ax
+ jnc con_char_xy_60
+ call inc_winseg
+con_char_xy_60:
+ inc edx
+ cmp edx,[cfont_height]
+ jnz con_char_xy_20
+
+ add word [con_x],8
+
+ pop word [gfx_cur_y]
+ pop word [gfx_cur_x]
+
+ pop dword [gfx_color]
+
+ pop gs
+ pop fs
+ ret
+
+
+; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+; Get some memory for palette data
+;
+
+ bits 32
+
+pal_init:
+ mov eax,300h
+ call calloc
+ mov [gfx_pal],eax
+ or eax,eax
+ stc
+ jz pal_init_90
+ mov eax,300h
+ call calloc
+ mov [gfx_pal_tmp],eax
+ or eax,eax
+ stc
+ jz pal_init_90
+ clc
+pal_init_90:
+ ret
+
+
+; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+; Load palette data.
+;
+; ecx number of palette entries
+; edx start entry
+;
+
+ bits 32
+
+load_palette:
+ cmp byte [pixel_bytes],1
+ ja load_palette_90
+
+ cmp edx,100h
+ jae load_palette_90
+
+ mov eax,edx
+ add eax,ecx
+ sub eax,100h
+ jbe load_palette_10
+ sub ecx,eax
+load_palette_10:
+ or ecx,ecx
+ jz load_palette_90
+
+ lea ebp,[edx+2*edx]
+
+ mov ebx,edx
+ push ecx
+
+ ; vga function wants 6 bit values
+
+ mov esi,[gfx_pal]
+ mov edi,[gfx_pal_tmp]
+
+ add esi,ebp
+ add edi,ebp
+
+ lea ecx,[ecx+2*ecx]
+
+load_palette_50:
+ es lodsb
+ shr al,2
+ stosb
+ loop load_palette_50
+
+ pop ecx
+
+ mov edx,[gfx_pal_tmp]
+ add edx,ebp
+
+ mov eax,edx
+ and edx,0fh
+ shr eax,4
+
+ ; check seg value
+ cmp eax,10000h
+ jae load_palette_90
+
+ mov [rm_seg.es],ax
+
+ mov ax,1012h
+ int 10h
+
+load_palette_90:
+ ret
+
+
+; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+; Clip drawing area.
+;
+; [gfx_cur_x] left border
+; [gfx_cur_y] top border
+; [gfx_width] width
+; [gfx_height] height
+;
+; return:
+; CF 1 = empty area
+; If CF = 0 Area adjusted to fit within [clip_*].
+; If CF = 1 Undefined values in [gfx_*].
+;
+; Changed registers: -
+;
+
+ bits 32
+
+clip_it:
+ pusha
+
+ mov ax,[gfx_cur_x]
+ mov dx,[gfx_width]
+ mov cx,[clip_l]
+ add dx,ax
+
+ sub ax,cx
+ jge clip_it_10
+ add [gfx_width],ax
+ mov [gfx_cur_x],cx
+clip_it_10:
+ sub dx,[clip_r]
+ jl clip_it_20
+ sub [gfx_width],dx
+clip_it_20:
+ cmp word [gfx_width],0
+ jg clip_it_30
+ mov word [gfx_width],0
+ stc
+ jmp clip_it_90
+clip_it_30:
+
+ mov ax,[gfx_cur_y]
+ mov dx,[gfx_height]
+ mov cx,[clip_t]
+ add dx,ax
+
+ sub ax,cx
+ jge clip_it_40
+ add [gfx_height],ax
+ mov [gfx_cur_y],cx
+clip_it_40:
+ sub dx,[clip_b]
+ jl clip_it_50
+ sub [gfx_height],dx
+clip_it_50:
+ cmp word [gfx_height],0
+ jg clip_it_90
+ mov word [gfx_height],0
+ stc
+
+clip_it_90:
+ popa
+ ret
+
+
+; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+; Save screen region.
+;
+; dx, cx width, height
+; edi buffer
+;
+; Note: ensure we only make aligned dword reads from video memory. Else some
+; ATI 7000 boards will make problems (computer hangs).
+; As an added bonus, it really speeds things up.
+;
+
+ bits 32
+
+save_bg:
+ push fs
+ push gs
+
+ push edi
+
+ call goto_xy
+ mov esi,edi
+
+ pop edi
+
+ call screen_segs
+
+ movzx ecx,cx
+ movzx edx,dx
+
+ or ecx,ecx
+ jz save_bg_90
+ or edx,edx
+ jz save_bg_90
+
+ imul dx,[pixel_bytes]
+
+save_bg_10:
+ push ecx
+ push edx
+
+ mov ebp,esi
+ mov ecx,esi
+ and ebp,~3
+ and ecx,3
+
+ jz save_bg_30
+
+ shl ecx,3
+ mov eax,[fs:ebp]
+ shr eax,cl
+
+save_bg_20:
+ stosb
+ inc si
+ shr eax,8
+ dec edx
+ ; ensure ch = 0
+ jz save_bg_70
+ add cl,8
+ cmp cl,20h
+ jnz save_bg_20
+
+ or si,si
+ jnz save_bg_30
+ call inc_winseg
+save_bg_30:
+ mov eax,[fs:esi]
+ add si,4
+ jnz save_bg_35
+ call inc_winseg
+save_bg_35:
+ cmp edx,4
+ jb save_bg_50
+ stosd
+ sub edx,4
+ ; ch = 0
+ jz save_bg_70
+ jmp save_bg_30
+save_bg_50:
+ mov ecx,4
+ sub ecx,edx
+ sub si,cx
+ ; don't switch bank later: we've already done it
+ setc ch
+save_bg_60:
+ stosb
+ shr eax,8
+ dec edx
+ jnz save_bg_60
+
+save_bg_70:
+ pop edx
+
+ mov eax,[screen_line_len]
+ sub eax,edx
+ add si,ax
+ jnc save_bg_80
+ or ch,ch
+ jnz save_bg_80
+ call inc_winseg
+save_bg_80:
+ pop ecx
+
+ dec ecx
+ jnz save_bg_10
+
+save_bg_90:
+ pop gs
+ pop fs
+ ret
+
+
+; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+; Restore screen region.
+;
+; dx, cx width, height
+; bx bytes per line
+; edi buffer
+;
+; Does not change cursor positon.
+;
+
+ bits 32
+
+restore_bg:
+ push fs
+ push gs
+
+ push dword [gfx_cur]
+
+ mov [gfx_width],dx
+ mov [gfx_height],cx
+
+ mov ax,[gfx_cur_x]
+ mov cx,[gfx_cur_y]
+
+ call clip_it
+ jc restore_bg_90
+
+ sub ax,[gfx_cur_x]
+ neg ax
+ mul word [pixel_bytes]
+ movzx ebp,ax
+
+ sub cx,[gfx_cur_y]
+ neg cx
+ movzx ecx,cx
+ movzx ebx,bx
+ imul ecx,ebx
+ add ecx,ebp
+
+ lea esi,[edi+ecx]
+
+ movzx edx,word [gfx_width]
+ movzx ecx,word [gfx_height]
+
+ call goto_xy
+ call screen_segs
+
+ imul edx,[pixel_bytes]
+
+restore_bg_20:
+ push edx
+
+restore_bg_30:
+ es lodsb
+ mov [gs:edi],al
+ inc di
+ jnz restore_bg_50
+ call inc_winseg
+restore_bg_50:
+ dec edx
+ jnz restore_bg_30
+
+ pop edx
+
+ mov eax,[screen_line_len]
+ sub eax,edx
+ add di,ax
+ jnc restore_bg_60
+ call inc_winseg
+restore_bg_60:
+ mov eax,ebx
+ sub eax,edx
+ add esi,eax
+
+ dec ecx
+ jnz restore_bg_20
+
+restore_bg_90:
+ pop dword [gfx_cur]
+
+ pop gs
+ pop fs
+ ret
+
+
+; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+; Load screen segments.
+;
+; return:
+; fs read segment
+; gs write segment
+;
+; Modified registers: -
+;
+
+ bits 32
+
+screen_segs:
+ push eax
+ mov ax,pm_seg.screen_r16
+ mov fs,ax
+ mov ax,pm_seg.screen_w16
+ mov gs,ax
+ pop eax
+ ret
+
+
+; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+; Draw filled rectangle.
+;
+; dx, cx width, height
+; eax color
+;
+
+ bits 32
+
+fill_rect:
+ push fs
+ push gs
+
+ mov [gfx_width],dx
+ mov [gfx_height],cx
+
+ call clip_it
+ jc fill_rect_90
+
+ movzx edx,word [gfx_width]
+ movzx ecx,word [gfx_height]
+
+ call goto_xy
+ call screen_segs
+
+ mov ebp,[screen_line_len]
+ mov eax,edx
+ imul eax,[pixel_bytes]
+ sub ebp,eax
+
+fill_rect_20:
+ mov ebx,edx
+fill_rect_30:
+ call [setpixel_t]
+ add di,[pixel_bytes]
+ jnc fill_rect_60
+ call inc_winseg
+fill_rect_60:
+ dec ebx
+ jnz fill_rect_30
+
+ add di,bp
+ jnc fill_rect_80
+ call inc_winseg
+fill_rect_80:
+ dec ecx
+ jnz fill_rect_20
+
+fill_rect_90:
+
+ pop gs
+ pop fs
+ ret
+
+
+; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+; Activate sound file.
+;
+; eax buffer
+;
+
+snd_activate:
+ push eax
+ call find_mem_size
+ pop esi
+
+ cmp eax,16
+ jbe sa_90
+
+ cmp dword [es:esi],7d53b605h
+ jnz sa_50
+
+ ; our format
+
+ mov ecx,[es:esi+12] ; sample rate
+ cmp ecx,1
+ jb sa_90
+ cmp ecx,24000
+ jae sa_90
+
+ mov edx,[es:esi+8] ; unpacked size
+ add esi,16
+ sub eax,16
+
+ cmp eax,[es:esi-16+4] ; packed size
+ jbe sa_10
+ mov eax,[es:esi-16+4]
+sa_10:
+
+ cmp edx,[sound_unpack_buf_size]
+ jbe sa_20
+
+ push edx
+ push ecx
+ push esi
+ push eax
+
+ push edx
+ mov eax,[sound_unpack_buf]
+ call free
+ pop eax
+ call calloc
+
+ pop ebp
+ pop esi
+ pop ecx
+ pop edx
+
+ or eax,eax
+ jz sa_90
+ mov [sound_unpack_buf],eax
+ mov [sound_unpack_buf_size],edx
+ mov eax,ebp
+sa_20:
+
+ mov edi,[sound_unpack_buf]
+ add edx,edi
+
+ ; esi: src
+ ; edi: dst
+ ; eax: src size
+ ; edx: dst end
+
+ mov [wav_end],edx
+ mov [wav_current],edi
+
+ mov [tmp_var_0],edi
+ add eax,esi
+ mov [tmp_var_1],eax
+
+ push ecx
+
+sa_30:
+ cmp esi,[tmp_var_1]
+ jae sa_49
+ mov eax,[es:esi]
+ cmp al,0ffh
+ jz sa_40
+ stosb
+ inc esi
+ cmp edi,edx
+ jb sa_30
+ jmp sa_49
+sa_40:
+ add esi,4
+ shr eax,8
+ mov ecx,eax
+ and ecx,7fh
+ add ecx,5
+ lea ebx,[edi+ecx]
+ cmp ebx,edx
+ ja sa_49
+ shr eax,7
+ add eax,[tmp_var_0]
+ push esi
+ mov esi,eax
+ es rep movsb
+ pop esi
+ jmp sa_30
+sa_49:
+
+ pop ecx
+
+ jmp sa_70
+
+sa_50:
+ cmp eax,44 ; WAV header size
+ jbe sa_90
+
+ ; could be WAV
+
+ cmp dword [es:esi+0],46464952h
+ jnz sa_90
+ cmp dword [es:esi+8],45564157h
+ jnz sa_90
+ cmp word [es:esi+20],1
+ jnz sa_90
+ cmp word [es:esi+34],8
+ jnz sa_90
+ cmp word [es:esi+22],1
+ jnz sa_90
+ mov ecx,[es:esi+24] ; sample rate
+ cmp ecx,1
+ jb sa_90
+ cmp ecx,24000
+ jae sa_90
+
+ add esi,44
+ sub eax,44
+
+ cmp eax,[es:esi-44+40] ; size
+ jbe sa_60
+ mov eax,[es:esi-44+40]
+sa_60:
+
+ add eax,esi
+
+ mov [wav_end],eax
+ mov [wav_current],esi
+
+sa_70:
+
+ mov byte [sound_scale],0
+ cmp ecx,12000
+ jae sa_80
+ add ecx,ecx
+ mov byte [sound_scale],1
+ dec dword [wav_current]
+sa_80:
+
+ push ecx
+ call sound_init
+ pop eax
+ jc sa_90
+ call sound_setsample
+
+ or byte [sound_playing],0f0h
+
+sa_90:
+ ret
+
+
+; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+; Our timer interrut handler.
+;
+; Needed to play sound via pc-speaker.
+;
+
+ bits 16
+
+new_int8:
+ pushad
+ push ds
+ push es
+ push fs
+ push gs
+
+ push cs
+ pop ds
+
+ inc dword [int8_count]
+
+ cmp byte [sound_playing],0
+ jz new_int8_50
+
+ ; play sound
+
+ mov si,[sound_start]
+ cmp si,[sound_end]
+ jz new_int8_30
+
+ les bx,[sound_buf]
+ movzx ax,byte [es:bx+si]
+
+ ; 0ffh = off
+
+ cmp al,0ffh
+ jz new_int8_10
+
+%if 0
+
+ ; not slower than timer
+
+ mov cx,[cnt0_start_val]
+ sub cx,4
+
+ cmp ax,cx
+ jb new_int8_05
+ mov ax,cx
+new_int8_05:
+%endif
+
+ out 42h,al
+
+new_int8_10:
+ inc si
+ and si,sound_buf_mask
+ mov [sound_start],si
+
+new_int8_30:
+
+ ; refill sound buffer
+
+ mov ax,[sound_end]
+ sub ax,[sound_start]
+ jnc new_int8_40
+ add ax,sound_buf_size
+new_int8_40:
+ cmp ax,160
+ jae new_int8_50
+
+ mov byte [need_sound_update],1
+
+new_int8_50:
+
+ ; run bios timer
+
+ mov ax,[cnt0_start_val]
+ or ax,ax
+ jz new_int8_60
+ add [cnt0_acc],ax
+ jnc new_int8_70
+new_int8_60:
+ push word 40h
+ pop es
+ inc dword [es:6ch]
+new_int8_70:
+
+ mov al,20h
+ out 20h,al
+
+ pop gs
+ pop fs
+ pop es
+ pop ds
+ popad
+
+ iret
+
+
+; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+; Add sound samples to buffer.
+;
+
+ bits 32
+
+sound_update:
+
+ test byte [sound_playing],0fh
+ jz sound_update_20
+ call mod_get_samples
+ jmp sound_update_50
+sound_update_20:
+ test byte [sound_playing],0f0h
+ jz sound_update_50
+ call wav_get_samples
+
+ mov eax,[wav_current]
+ cmp eax,[wav_end]
+ jnz sound_update_50
+ mov eax,[wav_next]
+ or eax,eax
+ jz sound_update_50
+ call snd_activate
+ mov dword [wav_next],0
+
+sound_update_50:
+
+ mov byte [need_sound_update],0
+
+ ret
+
+
+; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+; Prepare sound subsystem.
+;
+; Installs a new timer interrupt handler and increases timer frequency.
+;
+
+ bits 32
+
+sound_init:
+ cmp byte [sound_ok],0
+ jnz sound_init_90
+
+ mov eax,ar_sizeof
+ call calloc
+ cmp eax,1
+ jc sound_init_90
+ mov [mod_buf],eax
+
+ call mod_init
+
+ xor eax,eax
+ mov [int8_count],eax
+ mov [sound_start],eax
+ mov [sound_end],eax
+ mov [sound_playing],al
+ mov [sound_int_active],al
+ mov [need_sound_update],al
+
+ mov edi,playlist
+ add edi,[prog.base]
+ mov ecx,playlist_entries * sizeof_playlist
+ rep stosb
+
+ pushf
+ cli
+
+ mov al,90h
+ out 43h,al
+
+ mov al,34h
+ out 43h,al
+
+ xor ax,ax
+ out 40h,al
+ out 40h,al
+
+ in al,61h
+ or al,3
+ out 61h,al
+
+ push dword [es:8*4]
+ pop dword [sound_old_int8]
+
+ push word [rm_prog_cs]
+ push word new_int8
+ pop dword [es:8*4]
+
+ popf
+
+ mov eax,16000
+ call sound_setsample
+
+ mov byte [sound_ok],1
+sound_init_90:
+ ret
+
+
+; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+; Shut down sound subsystem.
+;
+; Activates old timer interrupt handler and sets timer frequency back to
+; normal.
+;
+ bits 32
+
+sound_done:
+ cmp byte [sound_ok],0
+ jz sound_done_90
+
+ pushf
+ cli
+
+ in al,61h
+ and al,~3
+ out 61h,al
+
+ mov al,36h
+ out 43h,al
+
+ xor eax,eax
+ out 40h,al
+ out 40h,al
+
+ mov [cnt0_start_val],ax
+ mov [cnt0_acc],ax
+ mov [sound_playing],al
+ mov [need_sound_update],al
+ mov [sound_start],eax
+ mov [sound_end],eax
+
+ push dword [sound_old_int8]
+ pop dword [es:8*4]
+
+ mov byte [sound_ok],0
+
+ popf
+
+ mov eax,[mod_buf]
+ call free
+
+ mov eax,[sound_unpack_buf]
+ call free
+
+ xor eax,eax
+ mov [mod_buf],eax
+ mov [sound_unpack_buf],eax
+ mov [sound_unpack_buf_size],eax
+
+sound_done_90:
+ ret
+
+
+; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+; Set sample rate for sound playback.
+;
+; eax sample rate
+;
+
+ bits 32
+
+sound_setsample:
+ cmp eax,20
+ jae sound_setsample_20
+ mov eax,20
+sound_setsample_20:
+ cmp eax,24000
+ jbe sound_setsample_50
+ mov eax,24000
+sound_setsample_50:
+ mov [sound_sample],eax
+ xchg eax,ecx
+ mov eax,1193180
+ xor edx,edx
+ div ecx
+ mov [cnt0_start_val],ax
+
+ pushf
+ cli
+ out 40h,al
+ mov al,ah
+ out 40h,al
+ popf
+
+sound_setsample_90:
+ ret
+
+
+; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+; Init mod player.
+;
+ bits 32
+
+mod_init:
+ mov esi,[mod_buf]
+ call init
+ ret
+
+
+; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+ bits 32
+
+mod_load:
+ mov esi,[mod_buf]
+ call loadmod
+ ret
+
+
+; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+ bits 32
+
+mod_play:
+ mov esi,[mod_buf]
+ call playmod
+ or byte [sound_playing],0fh
+ ret
+
+
+; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+ bits 32
+
+mod_playsample:
+ mov esi,[mod_buf]
+ call playsamp
+ or byte [sound_playing],0fh
+ ret
+
+
+; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+ bits 32
+
+mod_get_samples:
+ mov esi,[mod_buf]
+ push esi
+ call play
+ pop esi
+
+ mov dl,[es:esi]
+ add esi,ar_samps
+
+ ; dl: 0/1 --> play nothing/play
+ sub dl,1
+
+ mov ecx,num_samples
+ mov ebx,[sound_buf.lin]
+ mov edi,[sound_end]
+ cld
+
+mod_get_samples_20:
+
+ es lodsb
+ or al,dl ; 0ffh if we play nothing
+ mov [es:ebx+edi],al
+ inc edi
+ and edi,sound_buf_mask
+
+ dec ecx
+ jnz mod_get_samples_20
+ mov [sound_end],edi
+
+mod_get_samples_90:
+ ret
+
+
+; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+; Set mod player volume.
+;
+; al volume (0 .. 100)
+;
+
+ bits 32
+
+mod_setvolume:
+ cmp byte [sound_ok],0
+ jz mod_setvolume_90
+
+ mov esi,[mod_buf]
+
+ movzx edx,al
+ xor eax,eax
+ or edx,edx
+ jz mod_setvolume_50
+ sub ax,1
+ sbb dx,0
+ mov bx,100
+ div bx
+mod_setvolume_50:
+ mov ebx,eax
+ xor ecx,ecx
+ lea eax,[ecx-1]
+ call setvol
+mod_setvolume_90:
+ ret
+
+
+; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+ bits 32
+
+wav_get_samples:
+ mov esi,[wav_current]
+ or esi,esi
+ jz mod_get_samples_90
+ cmp esi,[wav_end]
+ jae mod_get_samples_90
+
+ mov ecx,num_samples
+ mov edi,[sound_buf.lin]
+ mov ebp,[sound_end]
+ cld
+
+wav_get_samples_20:
+ cmp esi,[wav_end]
+ jb wav_get_samples_25
+ mov al,0ffh
+ jmp wav_get_samples_50
+wav_get_samples_25:
+ es lodsb
+
+ cmp byte [sound_scale],0
+ jz wav_get_samples_30
+
+ mov dl,al
+ call calc_delay
+
+ mov [es:edi+ebp],al
+ inc ebp
+ and ebp,sound_buf_mask
+
+ mov al,dl
+ add al,[es:esi]
+ rcr al,1
+
+wav_get_samples_30:
+ call calc_delay
+
+wav_get_samples_50:
+ mov [es:edi+ebp],al
+ inc ebp
+ and ebp,sound_buf_mask
+
+ dec ecx
+ jnz wav_get_samples_20
+
+ mov [sound_end],ebp
+ mov [wav_current],esi
+
+wav_get_samples_90:
+ ret
+
+
+calc_delay:
+ push edx
+ push ebx
+
+ sub al,128
+ movsx eax,al
+ movzx edx,byte [sound_vol]
+ imul edx
+ mov ebx,100
+ idiv ebx
+ cmp eax,7fh
+ jle calc_delay_30
+ mov al,7fh
+calc_delay_30:
+ cmp eax,-80h
+ jg calc_delay_40
+ mov al,-80h
+calc_delay_40:
+ add al,80h
+ movzx eax,al
+ mov al,[pctab+eax]
+
+ pop ebx
+ pop edx
+ ret
+
+
+; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+; Check for cpuid instruction.
+;
+; return:
+; CF 0/1 yes/no
+;
+
+ bits 32
+
+chk_cpuid:
+ mov ecx,1 << 21
+ pushf
+ pushf
+ pop eax
+ xor eax,ecx
+ push eax
+ popf
+ pushf
+ pop edx
+ popf
+ xor eax,edx
+ cmp eax,ecx
+ stc
+ jz chk_cpuid_90
+ clc
+chk_cpuid_90:
+ ret
+
+
+; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+; Check for 64 bit extension.
+;
+; return:
+; CF 0/1 yes/no
+;
+
+ bits 32
+
+chk_64bit:
+ call chk_cpuid
+ jc chk_64bit_90
+ mov eax,80000001h
+ cpuid
+ test edx,1 << 29
+ jnz chk_64bit_90
+ stc
+chk_64bit_90:
+ ret
+
+
+; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+;; test1 - for internal testing
+;
+; group: system
+;
+; ( ptr1 -- )
+;
+; ptr1: some value with obscure meaning
+;
+; example
+; 0x123 test1
+;
+
+ bits 32
+
+prim_test1:
+ call pr_setptr_or_none
+ mov [ddc_external],eax
+ ret
+
+
+; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+ bits 32
+
+prim_xxx:
+; call pr_setptr_or_none
+ ; eax
+ rm32_call mouse_init
+ or ah,ah
+ mov eax,0
+ jnz prim_xxx_90
+ mov eax,mouse_x
+ add eax,[prog.base]
+prim_xxx_90:
+ jmp pr_getptr_or_none
+
+
+; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+;; systempath - convert path to path relative to system working directory
+;
+; group: system
+;
+; ( str1 -- str2 )
+;
+; str1: path
+; str2: system path
+;
+; Note: str2 points to a static buffer.
+;
+; example
+; "foo/bar" systempath
+;
+
+ bits 32
+
+prim_systempath:
+ mov dl,t_string
+ call get_1arg
+ jc prim_systempath_90
+ mov esi,eax
+ call realpath
+ call systempath
+ mov eax,esi
+ xor ecx,ecx
+ mov dl,t_string
+ call set_pstack_tos
+prim_systempath_90:
+ ret
+
+
+; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+;; realpath - convert path to canonical absolute path
+;
+; group: system
+;
+; ( str1 -- str2 )
+;
+; str1: path
+; str2: real path
+;
+; Note: str2 points to a static buffer.
+;
+; example
+; "foo/bar" realpath
+;
+
+ bits 32
+
+prim_realpath:
+ mov dl,t_string
+ call get_1arg
+ jc prim_realpath_90
+ mov esi,eax
+ call realpath
+ mov eax,esi
+ xor ecx,ecx
+ mov dl,t_string
+ call set_pstack_tos
+prim_realpath_90:
+ ret
+
+
+; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+;
+; Convert absolute path to system path (relative to system's working directory).
+;
+; esi absolute path
+;
+; return:
+; esi system path
+;
+
+ bits 32
+
+systempath:
+ mov edi,[fname.sys_cwd]
+ xor edx,edx
+ xor ecx,ecx
+systempath_10:
+ mov al,[es:edi + edx]
+ mov ah,[es:esi + edx]
+ cmp al,ah
+ jnz systempath_20
+ cmp al,0
+ jz systempath_80
+ inc edx
+ cmp al,'/'
+ jnz systempath_10
+ mov ecx,edx
+ jmp systempath_10
+systempath_20:
+ ; ecx: points past last common path element
+
+ cmp al,0
+ jnz systempath_22
+ ; sys_cwd subset of path
+ add edi,edx
+ lea esi,[esi+edx+1]
+ jmp systempath_28
+systempath_22:
+ cmp ah,0
+ jnz systempath_24
+ ; path subset of sys_cwd
+ add esi,edx
+ lea edi,[edi+edx+1]
+ jmp systempath_28
+systempath_24:
+ ; path & sys_cwd differ
+ add edi,ecx
+ add esi,ecx
+
+systempath_28:
+ mov ebx,[fname.tmp]
+ lea ebp,[ebx + fname.size - 1]
+
+systempath_30:
+ mov al,[es:edi]
+ inc edi
+ or al,al
+ jz systempath_50
+ mov dword [es:ebx],'../'
+ add ebx,3
+systempath_40:
+ cmp al,'/'
+ jz systempath_30
+ mov al,[es:edi]
+ inc edi
+ or al,al
+ jnz systempath_40
+systempath_50:
+ mov edi,ebx
+systempath_60:
+ es lodsb
+ stosb
+ or al,al
+ jnz systempath_60
+ mov esi,[fname.tmp]
+ ; remove trailing '/', if any
+ dec edi
+ dec edi
+ cmp edi,esi
+ jbe systempath_90
+ cmp byte [es:edi],'/'
+ jnz systempath_90
+ mov byte [es:edi],0
+ jmp systempath_90
+
+systempath_80:
+ mov esi,[fname.tmp]
+ mov byte [es:esi],0
+
+systempath_90:
+ ; esi: path relative to sys_cwd
+
+ ret
+
+
+; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+;
+; Read current working dir and store result in [fname.sys_cwd].
+;
+; return:
+; eax current working dir
+;
+ bits 32
+
+get_sys_cwd:
+ mov ebx,[boot.sysconfig]
+ cmp byte [es:ebx+sc.sysconfig_size],sc.size_68
+ jb get_sys_cwd_10
+ ; modern way: cwd was passed in info struct
+
+ xor eax,eax
+ mov edx,[es:ebx+sc.cwd]
+ or edx,edx
+ jnz get_sys_cwd_30
+get_sys_cwd_10:
+ ; classical: ask comboot
+
+ mov al,3
+ call gfx_cb ; cwd (lin)
+get_sys_cwd_30:
+ mov ebx,[fname.sys_cwd]
+ or al,al
+ jnz get_sys_cwd_80
+ mov esi,edx
+ mov edi,ebx
+ mov ecx,fname.size - 1
+get_sys_cwd_50:
+ es lodsb
+ stosb
+ or al,al
+ jz get_sys_cwd_90
+ loop get_sys_cwd_50
+get_sys_cwd_80:
+ mov byte [es:ebx],0
+get_sys_cwd_90:
+ mov eax,ebx
+ ret
+
+
+; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+;
+; Convert any path to real absolute path.
+;
+; Path should not end with '/'. Also, avoid '//' and such.
+;
+; esi path
+;
+; return:
+; esi real path, stored in fname.abs
+;
+
+ bits 32
+
+realpath:
+ mov esi,eax
+
+ cmp byte [es:esi],'/'
+ jz realpath_80
+
+ cmp byte [es:esi],0
+ jnz realpath_10
+
+ mov esi,[fname.cwd]
+ jmp realpath_80
+
+realpath_10:
+ ; note: maps / + .. to / because: / + .. -> //.. -> /
+
+ mov ebx,esi
+ mov esi,[fname.cwd]
+ mov edi,[fname.tmp]
+ mov ebp,edi
+realpath_12:
+ es lodsb
+ stosb
+ or al,al
+ jnz realpath_12
+ dec edi
+ cmp edi,ebp
+ jz realpath_20
+ mov al,'/'
+ stosb
+realpath_20:
+ mov esi,ebx
+ add ebp,fname.size - 1
+realpath_25:
+ cmp edi,ebp
+ jae realpath_28
+ es lodsb
+ stosb
+ or al,al
+ jz realpath_30
+ jmp realpath_25
+realpath_28:
+ mov al,0
+ stosb
+ dec edi
+realpath_30:
+ mov esi,[fname.tmp]
+ xor edi,edi
+realpath_33:
+ cmp byte [es:esi],0
+ jz realpath_40
+ is_dotdot es:esi
+ jz realpath_35
+ cmp byte [es:esi],'/'
+ jnz realpath_34
+ mov edi,esi
+realpath_34:
+ inc esi
+ jmp realpath_33
+realpath_35:
+ or edi,edi
+ jz realpath_34
+ add esi,3
+realpath_36:
+ es lodsb
+ stosb
+ or al,al
+ jnz realpath_36
+ jmp realpath_30
+realpath_40:
+ mov edi,[fname.tmp]
+ mov esi,edi
+ cmp byte [es:edi],0
+ jnz realpath_80
+ mov ax,'/'
+ stosw
+realpath_80:
+ ; convert to canonical version
+
+ ; esi must be either absolute path or empty
+ ; '//'s and trailing '/'s are removed
+
+ mov edi,[fname.abs]
+ lea ebx,[edi + fname.size - 1]
+ mov al,'/'
+ stosb
+realpath_82:
+ cmp edi,ebx
+ jae realpath_86
+ mov ah,al
+ es lodsb
+ or al,al
+ jz realpath_86
+ cmp al,'/'
+ jnz realpath_84
+ cmp al,ah
+ jnz realpath_84
+ dec edi
+realpath_84:
+ stosb
+ jmp realpath_82
+realpath_86:
+ mov esi,[fname.abs]
+
+ ; trailing '/'s
+realpath_88:
+ mov byte [es:edi],0
+ dec edi
+ cmp edi,esi
+ jbe realpath_90
+ cmp byte [es:edi],'/'
+ jz realpath_88
+
+realpath_90:
+ ; esi points to real path in fname.abs
+
+ ret
+
+
+; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+;
+; Set working directory.
+;
+; eax dir name
+;
+; return:
+; fname.cwd working dir (absolute path)
+;
+
+ bits 32
+
+chdir:
+ mov esi,eax
+ call realpath
+ mov edi,[fname.cwd]
+chdir_10:
+ es lodsb
+ stosb
+ or al,al
+ jnz chdir_10
+ ret
+
+
+; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+;
+; Find (and read) file from file system.
+;
+; eax file name (lin)
+;
+; return:
+; eax file start (lin)
+;
+; Note: use find_mem_size to find out the file size
+
+ bits 32
+
+find_file_ext:
+ mov esi,eax
+ call realpath
+ mov eax,[boot.sysconfig]
+ cmp byte [es:eax+sc.sysconfig_size],sc.size_68
+ jb find_file_ext_05
+ call systempath
+find_file_ext_05:
+ mov eax,esi
+
+ mov dl,t_string
+ push eax
+ call get_length
+ xchg eax,ecx
+ pop eax
+ or ecx,ecx
+ jz find_file_ext_80
+ cmp ecx,64
+ jae find_file_ext_80
+
+ push ecx
+
+ push eax
+ mov al,0
+ call gfx_cb ; get file name buffer address (edx)
+ pop esi
+
+ pop ecx
+
+ or al,al
+ jnz find_file_ext_80
+
+ mov edi,edx
+ es rep movsb
+ mov al,0
+ stosb
+
+ mov al,1
+ call gfx_cb ; open file (ecx size)
+ or al,al
+ jnz find_file_ext_80
+
+ mov eax,ecx
+
+ cmp eax,-1
+ jnz find_file_ext_10
+ push ecx
+ call maxmemsize
+ pop ecx
+ cmp eax,20000h ; not too low, just in case
+ jb find_file_ext_80
+ sub eax,10000h ; leave a bit
+find_file_ext_10:
+
+ push ecx
+ call calloc
+ pop ecx
+ or eax,eax
+ jz find_file_ext_80
+
+ push ecx
+ push eax
+
+ ; eax: buffer, ecx: buffer size
+
+ mov edi,eax
+
+find_file_ext_20:
+ push edi
+ mov al,2
+ call gfx_cb ; read next chunk (edx buffer, ecx len)
+ pop edi
+ or al,al
+ jnz find_file_ext_50
+ or ecx,ecx
+ jz find_file_ext_50
+
+ mov esi,edx
+ es rep movsb
+
+ jmp find_file_ext_20
+
+find_file_ext_50:
+
+ pop eax
+ pop ecx
+
+ cmp ecx,-1
+ jnz find_file_ext_60
+ sub edi,eax
+ mov ecx,edi
+ ; ecx: real size
+ push eax
+ call realloc
+ pop eax
+ jmp find_file_ext_90
+
+find_file_ext_60:
+ ; did we get everything...?
+ sub edi,ecx
+ cmp eax,edi
+ jz find_file_ext_90
+
+find_file_ext_70:
+ ; ... no -> read error
+ call free
+
+find_file_ext_80:
+ xor eax,eax
+find_file_ext_90:
+ ret
+
+
+; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+; Find file from file system, returns size.
+;
+; eax file name (lin)
+;
+; return:
+; eax file size (-1: not found; -2: exists, but unknown size)
+;
+
+ bits 32
+
+file_size_ext:
+ mov esi,eax
+ call realpath
+ mov eax,[boot.sysconfig]
+ cmp byte [es:eax+sc.sysconfig_size],sc.size_68
+ jb file_size_ext_20
+ call systempath
+file_size_ext_20:
+ mov eax,esi
+
+ mov dl,t_string
+ push eax
+ call get_length
+ xchg eax,ecx
+ pop eax
+ or ecx,ecx
+ jz file_size_ext_80
+ cmp ecx,64
+ jae file_size_ext_80
+
+ push ecx
+ push eax
+
+ mov al,0
+ call gfx_cb ; get file name buffer address (edx)
+ mov edi,edx
+
+ pop esi
+ pop ecx
+
+ or al,al
+ jnz file_size_ext_80
+
+ es rep movsb
+ mov al,0
+ stosb
+
+ mov al,1
+ call gfx_cb ; open file (ecx size)
+ or al,al
+ jnz file_size_ext_80
+
+ mov eax,ecx
+ cmp eax,-1
+ jnz file_size_ext_90
+ dec eax
+ jmp file_size_ext_90
+
+file_size_ext_80:
+ stc
+ sbb eax,eax
+file_size_ext_90:
+ ret
+
+
+; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+; Clip image area.
+;
+; [line_x0] left, incl
+; [line_x1] right, excl
+; [line_y0] top, incl
+; [line_y1] bottom, excl
+;
+; return:
+; CF 1 = empty area
+; If CF = 0 Area adjusted to fit within [line_*].
+; If CF = 1 Undefined values in [line_*].
+;
+
+ bits 32
+
+clip_image:
+ movzx edx,word [image_width]
+ mov eax,[line_x0]
+ mov ecx,[line_x1]
+
+ call clip_image_10
+ jc clip_image_90
+
+ mov [line_x0],eax
+ mov [line_x1],ecx
+
+ movzx edx,word [image_height]
+ mov eax,[line_y0]
+ mov ecx,[line_y1]
+
+ call clip_image_10
+
+ mov [line_y0],eax
+ mov [line_y1],ecx
+
+ jmp clip_image_90
+
+clip_image_10:
+ cmp eax,0
+ jge clip_image_20
+ xor eax,eax
+clip_image_20:
+ cmp ecx,edx
+ jle clip_image_30
+ mov ecx,edx
+clip_image_30:
+ cmp ecx,eax
+ jle clip_image_80
+ cmp eax,edx
+ jge clip_image_80
+ clc
+ jmp clip_image_90
+clip_image_80:
+ stc
+clip_image_90:
+ ret
+
+
+; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+; Draw image into buffer.
+;
+; eax drawing buffer
+; [image] image
+; dword [line_x0] x0 ; upper left
+; dword [line_y0] y0
+; dword [line_x1] x1 ; lower right
+; dword [line_y1] y1
+;
+
+ bits 32
+
+unpack_image:
+ cmp byte [image_type],1
+ jnz unpack_image_20
+ call pcx_unpack
+ jmp unpack_image_90
+unpack_image_20:
+ cmp byte [image_type],2
+ jnz unpack_image_90
+ call jpg_unpack
+unpack_image_90:
+ ret
+
+
+; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+; Activate image from file.
+;
+; eax lin ptr to image
+;
+; return:
+; CF error
+;
+
+ bits 32
+
+image_init:
+ call pcx_init
+ jnc image_init_90
+ call jpg_init
+image_init_90:
+ ret
+
+
+; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+; Draw image region on screen.
+;
+; [image] jpg image
+; dword [line_x0] x0 ; uppper left
+; dword [line_y0] y0
+; dword [line_x1] x1 ; lower right
+; dword [line_y1] y1
+;
+
+ bits 32
+
+show_image:
+ xor esi,esi
+ xor eax,eax
+show_image_10:
+ push esi
+ push eax
+ call memsize
+ pop eax
+ pop esi
+ cmp edi,esi
+ jb show_image_20
+ mov esi,edi
+show_image_20:
+ inc eax
+ cmp eax,malloc.areas
+ jb show_image_10
+
+ ; esi: largest free mem block
+
+ sub esi,4 ; fb header size
+ jc show_image_90
+
+ mov ebx,[line_y1]
+ sub ebx,[line_y0]
+
+ mov ecx,[line_x1]
+ sub ecx,[line_x0]
+
+ mov eax,[pixel_bytes]
+ mul ecx
+ xchg eax,esi
+ div esi
+
+ ; fb height
+
+ cmp eax,ebx
+ jbe show_image_30
+ mov eax,ebx
+show_image_30:
+ mov [line_tmp],eax
+
+ or eax,eax
+ jz show_image_90
+
+ ; eax, ecx, height, width
+ call alloc_fb
+
+ or eax,eax
+ jz show_image_90
+
+ mov [line_tmp2],eax
+
+show_image_40:
+ mov eax,[line_y1]
+ sub eax,[line_y0]
+ jle show_image_70
+ mov ebp,[line_tmp]
+ cmp eax,ebp
+ jle show_image_50
+ mov eax,ebp
+show_image_50:
+ mov bp,ax
+ add eax,[line_y0]
+ xchg eax,[line_y1]
+
+ push eax
+ mov eax,[line_tmp2]
+
+ push ebp
+
+ cmp byte [image_type],1
+ jnz show_image_54
+ call pcx_unpack
+ jmp show_image_56
+show_image_54:
+ cmp byte [image_type],2
+ jnz show_image_56
+ call jpg_unpack
+show_image_56:
+
+ pop ebp
+
+ mov edi,[line_tmp2]
+ mov dx,[es:edi]
+ mov cx,[es:edi+2]
+
+ cmp cx,bp
+ jbe show_image_60
+ mov cx,bp
+show_image_60:
+
+ mov edi,[line_tmp2]
+ add edi,4
+ mov bx,dx
+ imul bx,[pixel_bytes]
+ call restore_bg
+
+ mov eax,[line_y1]
+ mov ecx,eax
+ sub ecx,[line_y0]
+ mov [line_y0],eax
+
+ add [gfx_cur_y],cx
+
+ pop eax
+
+ mov [line_y1],eax
+ jmp show_image_40
+
+show_image_70:
+ mov eax,[line_tmp2]
+ call free
+show_image_90:
+ ret
+
+
+; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+; Activate pcx image from file.
+;
+; eax pcx image
+;
+; return:
+; eax pcx image
+; CF error
+;
+
+ bits 32
+
+pcx_init:
+ push eax
+ cmp dword [es:eax],0801050ah
+ jnz pcx_init_80
+
+ mov cx,[es:eax+8]
+ inc cx
+ jz pcx_init_80
+ mov dx,[es:eax+10]
+ inc dx
+ jz pcx_init_80
+
+ push eax
+ push ecx
+ push edx
+ push ebx
+ call find_mem_size
+ pop ebx
+ pop edx
+ pop ecx
+ pop edi
+
+ ; edi: image, eax: size, cx: width, dx: height
+
+ cmp eax,381h
+ jb pcx_init_80
+
+ lea esi,[eax+edi-301h]
+
+ cmp byte [es:esi],12
+ jnz pcx_init_80
+
+ inc esi
+
+ mov byte [image_type],1 ; pcx
+
+ mov [image],edi
+ mov [image_width],cx
+ mov [image_height],dx
+
+ push esi
+ call parse_pcx_img
+ pop esi
+
+ mov edi,[gfx_pal]
+
+ mov ecx,300h
+ push ecx
+ es rep movsb
+ pop ecx
+
+ xor eax,eax
+ mov edx,ecx
+ dec edi
+ std
+ repz scasb
+ cld
+ setnz al
+ sub edx,ecx
+ sub edx,eax
+ xchg eax,edx
+ xor edx,edx
+ mov ecx,3
+ div ecx
+ sub eax,100h
+ neg eax
+ mov [pals],ax
+
+ clc
+ jmp pcx_init_90
+
+pcx_init_80:
+ stc
+pcx_init_90:
+ pop eax
+ ret
+
+
+; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+;
+
+ bits 32
+
+parse_pcx_img:
+ mov eax,[pcx_line_starts]
+ or eax,eax
+ jz parse_pcx_img_10
+ call free
+parse_pcx_img_10:
+ movzx eax,word [image_height]
+ shl eax,2
+ call calloc
+ or eax,eax
+ stc
+ mov [pcx_line_starts],eax
+ jz parse_pcx_img_90
+
+ mov edi,eax
+ mov esi,[image]
+ add esi,80h ; skip pcx header
+
+ xor edx,edx ; y count
+
+parse_pcx_img_20:
+ xor ecx,ecx ; x count
+ mov [es:edi],esi
+ add edi,4
+parse_pcx_img_30:
+ es lodsb
+ cmp al,0c0h
+ jb parse_pcx_img_40
+ and eax,3fh
+ inc esi
+ add ecx,eax
+ dec ecx
+parse_pcx_img_40:
+ inc ecx
+ cmp cx,[image_width]
+ jb parse_pcx_img_30
+ stc
+ jnz parse_pcx_img_90 ; no decoding break at line end?
+
+ inc edx
+ cmp dx,[image_height]
+ jb parse_pcx_img_20
+
+parse_pcx_img_90:
+ ret
+
+
+; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+; Draw pcx image region into buffer.
+;
+; eax drawing buffer
+; [image] pcx image
+; dword [line_x0] x0 ; uppper left
+; dword [line_y0] y0
+; dword [line_x1] x1 ; lower right
+; dword [line_y1] y1
+;
+; note:
+; [line_*] are unchanged
+;
+
+ bits 32
+
+pcx_unpack:
+ push dword [line_x1]
+ push dword [line_y1]
+
+ mov ebp,[pcx_line_starts]
+
+ lea edi,[eax+4]
+
+ mov eax,[line_x0]
+ sub [line_x1],eax
+
+ mov eax,[line_y0]
+ sub [line_y1],eax
+
+ shl eax,2
+ add ebp,eax
+
+pcx_unpack_20:
+ mov esi,[es:ebp]
+
+ mov ecx,[line_x0]
+ neg ecx
+
+ ; draw one line
+pcx_unpack_30:
+ xor eax,eax
+ es lodsb
+
+ cmp al,0c0h
+ jb pcx_unpack_70
+
+ ; repeat count
+
+ and eax,3fh
+ mov edx,eax
+ es lodsb
+
+ add ecx,edx
+ js pcx_unpack_80
+ jnc pcx_unpack_40
+ mov edx,ecx
+
+pcx_unpack_40:
+ mov ebx,ecx
+ sub ebx,[line_x1]
+ jle pcx_unpack_50
+ sub edx,ebx
+pcx_unpack_50:
+ or edx,edx
+ jz pcx_unpack_80
+ dec edx
+ cmp byte [pixel_bytes],1
+ jbe pcx_unpack_54
+ push eax
+ call pal_to_color
+ call encode_color
+ call [setpixel_a]
+ pop eax
+ jmp pcx_unpack_55
+pcx_unpack_54:
+ mov [gs:edi],al
+pcx_unpack_55:
+ add edi,[pixel_bytes]
+ jmp pcx_unpack_50
+
+pcx_unpack_70:
+ inc ecx
+ cmp ecx,0
+ jle pcx_unpack_80
+ cmp byte [pixel_bytes],1
+ jbe pcx_unpack_74
+ call pal_to_color
+ call encode_color
+pcx_unpack_74:
+ call [setpixel_a]
+ add edi,[pixel_bytes]
+pcx_unpack_80:
+ cmp ecx,[line_x1]
+ jl pcx_unpack_30
+
+ add ebp,4
+ dec dword [line_y1]
+ jnz pcx_unpack_20
+
+pcx_unpack_90:
+ pop dword [line_y1]
+ pop dword [line_x1]
+ ret
+
+
+; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+; Allocate static buffer for jpeg decoder.
+;
+; return:
+; [jpg_static_buf] buffer
+;
+ bits 32
+
+jpg_setup:
+ cmp dword [jpg_static_buf], 0
+ jnz jpg_setup_90
+
+ mov eax,jpg_data_size + 15
+ call calloc
+ or eax,eax
+ stc
+ jz jpg_setup_90
+
+ ; align a bit
+ add eax,15
+ and eax,~15
+
+ mov [jpg_static_buf],eax
+jpg_setup_90:
+ ret
+
+
+; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+; Activate jpeg image from file.
+;
+; eax jpeg image
+;
+; return:
+; eax jpeg image
+; CF error
+;
+
+ bits 32
+
+jpg_init:
+ push eax
+
+ push eax
+ call jpg_setup
+ pop eax
+
+ cmp dword [jpg_static_buf],0
+ jz jpg_init_80
+
+ push eax
+ call find_mem_size
+ mov ecx,eax
+ pop eax
+
+ or ecx,ecx
+ jz jpg_init_80
+
+ cmp dword [es:eax],0e0ffd8ffh
+ jnz jpg_init_80
+
+ call jpg_size
+ jc jpg_init_90
+
+ mov [image_width],ax
+ shr eax,16
+ mov [image_height],ax
+
+ mov byte [image_type],2 ; jpg
+
+ pop eax
+ push eax
+ mov [image],eax
+
+ clc
+ jmp jpg_init_90
+
+jpg_init_80:
+ stc
+jpg_init_90:
+ pop eax
+ ret
+
+
+; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+; Read jpeg image size.
+;
+; eax jpeg image
+;
+; return:
+; eax size (low word: width, high word: height)
+; CF error
+;
+
+ bits 32
+
+jpg_size:
+ push fs
+ push eax
+
+ mov si,pm_seg.data_d16
+ mov eax,[jpg_static_buf]
+ call set_gdt_base_pm
+ mov fs,si
+
+ call dword jpeg_get_size
+
+ pop ecx
+
+ or eax,eax
+ jnz jpg_size_90
+ stc
+jpg_size_90:
+ pop fs
+ ret
+
+
+; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+; Unpack image region from jpeg.
+;
+; eax drawing buffer
+; [image] jpeg image
+; dword [line_x0] x0
+; dword [line_y0] y0
+; dword [line_x1] x1
+; dword [line_y1] y1
+;
+; note:
+; [line_*] are unchanged
+;
+
+ bits 32
+
+jpg_unpack:
+ push fs
+
+ movzx edx,byte [pixel_bits]
+ cmp dl,16
+ jz jpg_unpack_10
+ cmp dl,32
+ jnz jpg_unpack_90
+
+jpg_unpack_10:
+
+ push dword edx
+ push dword [line_y1]
+ push dword [line_y0]
+ push dword [line_x1]
+ push dword [line_x0]
+ add eax,4
+ push eax
+ push dword [image]
+
+ mov si,pm_seg.data_d16
+ mov eax,[jpg_static_buf]
+ call set_gdt_base_pm
+ mov fs,si
+
+ call dword jpeg_decode
+
+ add esp,28
+
+jpg_unpack_90:
+ pop fs
+ ret
+
+
+; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+; Install mouse handler.
+;
+; Note: experimental.
+;
+
+ bits 16
+
+mouse_init:
+ push cs
+ pop es
+ mov bx,mouse_handler
+ mov ax,0c207h
+ int 15h
+ jc mouse_init_90
+ mov ax,0c200h
+ mov bh,1
+ int 15h
+ jc mouse_init_90
+ mov al,ah
+mouse_init_90:
+ ret
+
+
+mouse_x dw 0
+mouse_y dw 0
+mouse_button dw 0
+
+mouse_handler:
+ movsx ax,byte [esp+6]
+ add [cs:mouse_y],ax
+ movsx ax,byte [esp+8]
+ add [cs:mouse_x],ax
+ mov ax,[esp+10]
+ mov [cs:mouse_button],ax
+
+ retf
+
+
+; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+; parse edid record
+;
+; es:ecx edid
+;
+
+ bits 32
+
+parse_edid:
+ mov word [display_res.cnt],0
+ mov dword [display_res_pref],0
+
+ cmp dword [es:ecx+8],0
+ jz parse_edid_90
+
+ cmp word [es:ecx+18],0
+ jz parse_edid_90
+
+ movzx eax, byte [es:ecx+35]
+ test al, 60
+ je .L5
+ mov word [display_res], 640
+ mov word [display_res+2], 480
+ mov word [display_res.cnt], 1
+.L5:
+ test al, 3
+ je .L6
+ mov ax, [display_res.cnt]
+ movzx edx, ax
+ inc eax
+ mov word [display_res+edx*4], 800
+ mov word [display_res+2+edx*4], 600
+ mov [display_res.cnt], ax
+.L6:
+ movzx eax, byte [es:ecx+36]
+ test al, -64
+ je .L7
+ mov dx, [display_res.cnt]
+ movzx ebx, dx
+ inc edx
+ mov word [display_res+ebx*4], 800
+ mov word [display_res+2+ebx*4], 600
+ mov [display_res.cnt], dx
+.L7:
+ test al, 14
+ je .L8
+ mov dx, [display_res.cnt]
+ movzx ebx, dx
+ inc edx
+ mov word [display_res+ebx*4], 1024
+ mov word [display_res+2+ebx*4], 768
+ mov [display_res.cnt], dx
+.L8:
+ test al, 1
+ je .L9
+ mov ax, [display_res.cnt]
+ movzx edx, ax
+ inc eax
+ mov word [display_res+edx*4], 1280
+ mov word [display_res+2+edx*4], 1024
+ mov [display_res.cnt], ax
+.L9:
+ xor ebx, ebx
+ mov edi, 5
+.L15:
+ movzx edx, byte [es:ecx+39+ebx*2]
+ movzx eax, byte [es:ecx+38+ebx*2]
+ shr edx, 6
+ add eax, 31
+ cmp edx, 2
+ lea esi, [eax*8]
+ je .L12
+ cmp edx, 3
+ je .L13
+ dec edx
+ jne .L10
+ lea eax, [esi+esi*2]
+ shr eax, 2
+ jmp .L14
+.L12:
+ sal eax, 5
+ xor edx, edx
+ div edi
+ jmp .L14
+.L13:
+ lea eax, [esi+esi*8]
+ shr eax, 4
+ jmp .L14
+.L10:
+ inc ebx
+ cmp ebx, 4
+ jne .L15
+ mov eax, 54
+.L17:
+ movzx ebx, byte [es:ecx+2+eax]
+ movzx edi, byte [es:ecx+eax]
+ movzx esi, byte [es:ecx+1+eax]
+ mov edx, ebx
+ sal edi, 24
+ sal esi, 16
+ sal edx, 8
+ add esi, edi
+ add esi, edx
+ movzx edx, byte [es:ecx+3+eax]
+ add esi, edx
+ cmp esi, 255
+ jbe .L16
+ movzx edx, byte [es:ecx+4+eax]
+ movzx esi, byte [es:ecx+5+eax]
+ and edx, 240
+ sal edx, 4
+ add ebx, edx
+ movzx edx, byte [es:ecx+7+eax]
+ and edx, 240
+ sal edx, 4
+ add edx, esi
+ je parse_edid_90
+ test ebx, ebx
+ je parse_edid_90
+ cmp edx, 4095
+ je parse_edid_90
+ cmp ebx, 4095
+ je parse_edid_90
+ mov si, [display_res.cnt]
+ movzx edi, si
+ inc esi
+ mov [display_res+edi*4], bx
+ mov [display_res+2+edi*4], dx
+ mov [display_res_pref], bx
+ mov [display_res_pref+2], dx
+ mov [display_res.cnt], si
+.L16:
+ add eax, 18
+ cmp eax, 126
+ jne .L17
+ jmp parse_edid_90
+.L14:
+ movzx edx, word [display_res.cnt]
+ mov [display_res+2+edx*4], ax
+ mov ax, [word display_res.cnt]
+ mov [display_res+edx*4], si
+ inc eax
+ mov [display_res.cnt], ax
+ jmp .L10
+
+parse_edid_90:
+ ret
+
+
+; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+; Read EDID record via DDC
+;
+
+ bits 32
+
+read_ddc:
+ ; vbe support check
+ cmp word [screen_mem],0
+ jz read_ddc_90
+
+ xor ebp,ebp
+
+read_ddc_20:
+ mov edi,[vbe_buffer]
+
+ mov ecx,80h
+ xor eax,eax
+ push edi
+ rep stosb
+ pop edi
+
+ mov esi,[ddc_external]
+ or esi,esi
+ jz read_ddc_25
+ mov ecx,80h
+ es rep movsb
+ jmp read_ddc_30
+
+read_ddc_25:
+
+ mov eax,edi
+ shr eax,4
+ mov [rm_seg.es],ax
+ and edi,0fh
+
+ mov ax,4f15h
+ mov bl,1
+ mov cx,bp
+ xor dx,dx
+ push ebp
+ int 10h
+ pop ebp
+ cmp ax,4fh
+ jz read_ddc_30
+
+ inc ebp
+ cmp ebp,2 ; some BIOSes don't like more (seen on a Packard Bell EasyNote)
+ jb read_ddc_20
+
+ jmp read_ddc_90
+
+read_ddc_30:
+ mov ecx,[vbe_buffer]
+ call parse_edid
+
+ cmp dword [display_res_pref],0
+ jnz read_ddc_90
+
+ ; pick the largest res
+
+ movzx ecx,word [display_res.cnt]
+ mov esi,display_res
+ or ecx,ecx
+ jz read_ddc_90
+ mov ebx,[esi]
+read_ddc_50:
+ lodsd
+ cmp eax,ebx
+ jbe read_ddc_60
+ mov ebx,eax
+read_ddc_60:
+ loop read_ddc_50
+
+ mov [display_res_pref],ebx
+
+read_ddc_90:
+ ret
+
+
+; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+; Read vbe card info.
+;
+; al info type
+; 0: video mem size in kb
+; 1: oem string
+; 2: vendor string
+; 3: product string
+; 4: revision string
+;
+; return:
+; eax info
+; dl info type (enum_type_t)
+;
+
+ bits 32
+
+videoinfo:
+ mov edi,[vbe_buffer]
+
+ push eax
+ push edi
+
+ mov ecx,200h/4
+ xor eax,eax
+ push edi
+ rep stosd
+ pop edi
+ mov dword [es:edi],32454256h ; 'VBE2'
+
+ mov eax,edi
+ shr eax,4
+ mov [rm_seg.es],ax
+ and edi,0fh
+
+ mov ax,4f00h
+ int 10h
+
+ pop edi
+ xor ecx,ecx
+ cmp ax,4fh
+ pop eax
+ jnz videoinfo_80
+
+ cmp word [screen_mem],0
+ jnz videoinfo_20
+ push word [es:edi+12h]
+ pop word [screen_mem]
+videoinfo_20:
+ cmp al,0
+ jnz videoinfo_30
+ movzx eax,word [screen_mem]
+ shl eax,6
+ mov dl,t_int
+ jmp videoinfo_90
+videoinfo_30:
+ cmp al,1
+ jnz videoinfo_31
+ add edi,6
+ jmp videoinfo_50
+videoinfo_31:
+ cmp al,2
+ jnz videoinfo_32
+ add edi,16h
+ jmp videoinfo_50
+videoinfo_32:
+ cmp al,3
+ jnz videoinfo_33
+ add edi,1ah
+ jmp videoinfo_50
+videoinfo_33:
+ cmp al,4
+ jnz videoinfo_34
+ add edi,1eh
+ jmp videoinfo_50
+videoinfo_34:
+ ; add more here...
+
+ jmp videoinfo_80
+
+videoinfo_50:
+ cmp dword [es:edi],0
+ jz videoinfo_90
+ movzx esi,word [es:edi]
+ movzx ecx,word [es:edi+2]
+ shl ecx,4
+ add esi,ecx
+ mov ecx,100h-1
+ mov edi,[vbe_info_buffer]
+videoinfo_55:
+ es lodsb
+ stosb
+ or al,al
+ jz videoinfo_57
+ dec ecx
+ jnz videoinfo_55
+ mov byte [es:edi],0
+videoinfo_57:
+ mov eax,[vbe_info_buffer]
+ mov dl,t_string
+ jmp videoinfo_90
+
+videoinfo_80:
+ mov dl,t_none
+ xor eax,eax
+videoinfo_90:
+ ret
+
+
+; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+; Switch to local stack.
+;
+; no regs or flags changed
+;
+
+ bits 16
+
+use_local_stack:
+ ; cmp dword [old_stack.ofs],0
+ ; jnz $
+ pop word [tmp_stack_val]
+ mov [old_stack.ofs],esp
+ mov [old_stack.seg],ss
+ lss esp,[local_stack]
+ jmp [tmp_stack_val]
+
+
+; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+; Switch back to system wide stack.
+;
+; no regs or flags changed
+;
+
+ bits 16
+
+use_old_stack:
+ ; cmp dword [old_stack.ofs],0
+ ; jz $
+ pop word [tmp_stack_val]
+ lss esp,[old_stack]
+ mov dword [old_stack.ofs],0
+ jmp [tmp_stack_val]
+
+
+; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+; Set segment descriptor base in gdt (32 bit code).
+;
+; si descriptor
+; eax base
+;
+; changes no regs
+;
+
+ bits 32
+
+set_gdt_base_pm:
+ push eax
+ mov [gdt+si+2],ax
+ shr eax,16
+ mov [gdt+si+4],al
+ mov [gdt+si+7],ah
+ pop eax
+ ret
+
+
+; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+; Set segment descriptor base in gdt.
+;
+; si descriptor
+; eax base
+;
+; changes no regs
+;
+
+ bits 16
+
+set_gdt_base:
+ push eax
+ mov [gdt+si+2],ax
+ shr eax,16
+ mov [gdt+si+4],al
+ mov [gdt+si+7],ah
+ pop eax
+ ret
+
+
+; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+; Set segment descriptor limit in gdt.
+;
+; si descriptor
+; eax limit (largest address)
+;
+; changes no regs
+;
+
+ bits 16
+
+set_gdt_limit:
+ push eax
+ push dx
+ mov dl,0
+ cmp eax,0fffffh
+ jbe set_gdt_limit_40
+ shr eax,12
+ mov dl,80h ; big segment
+set_gdt_limit_40:
+ mov [gdt+si],ax
+ shr eax,16
+ mov ah,[gdt+si+6]
+ and ah,70h
+ or ah,al
+ or ah,dl
+ mov [gdt+si+6],ah
+ pop dx
+ pop eax
+ ret
+
+
+; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+; Preliminary protected mode interface init.
+;
+; Setup gdt so we can at least switch modes with interrupts disabled.
+;
+
+ bits 16
+
+gdt_init:
+ mov eax,cs
+ mov [rm_prog_cs],ax
+
+ shl eax,4
+ mov [prog.base],eax
+
+ lea edx,[eax+gdt]
+ mov [pm_gdt.base],edx
+
+ mov si,pm_seg.prog_c32
+ call set_gdt_base
+
+ mov si,pm_seg.prog_d16
+ call set_gdt_base
+
+ mov si,pm_seg.prog_c16
+ call set_gdt_base
+
+ ; temporary location, will be moved in pm_init
+ mov eax,580h
+ mov si,pm_seg.tss
+ call set_gdt_base
+
+ mov eax,0ffffh
+
+ mov si,pm_seg.prog_c32
+ call set_gdt_limit
+
+ mov si,pm_seg.prog_d16
+ call set_gdt_limit
+
+ mov si,pm_seg.prog_c16
+ call set_gdt_limit
+
+ mov si,pm_seg.data_d16
+ call set_gdt_limit
+
+ mov si,pm_seg.screen_r16
+ call set_gdt_limit
+
+ mov si,pm_seg.screen_w16
+ call set_gdt_limit
+
+ ret
+
+
+; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+; Complete protected mode setup.
+;
+; Initialize idt and setup interrupt handlers.
+;
+
+ bits 32
+
+pm_init:
+ mov eax,104 ; minimal tss size
+ call xcalloc
+ cmp eax,1
+ jc pm_init_90
+ mov si,pm_seg.tss
+ call set_gdt_base_pm
+
+ mov eax,(8+8)*100h
+ call xcalloc
+ cmp eax,1
+ jc pm_init_90
+ mov [pm_idt.base],eax
+
+ ; setup idt
+
+ mov esi,[pm_idt.base]
+ lea ebx,[esi+8*100h]
+ mov edi,ebx
+ mov eax,8e000000h + pm_seg.4gb_c32
+
+ mov ecx,100h
+pm_init_20:
+ mov [es:esi],ebx
+ mov [es:esi+4],ebx
+ mov [es:esi+2],eax
+ add esi,8
+ add ebx,8
+ loop pm_init_20
+
+ ; push eax, call far pm_seg.prog_c32:pm_int
+ mov eax,9a50h + (((pm_int - _start) & 0xffff) << 16)
+ mov edx,(((pm_int - _start) >> 16) & 0xffff) + (pm_seg.prog_c32 << 16)
+
+ mov ch,1
+pm_init_40:
+ mov [es:edi],eax
+ mov [es:edi+4],edx
+ add edi,8
+ loop pm_init_40
+
+pm_init_90:
+ ret
+
+
+; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+; Protected mode interrupt handler.
+;
+; switches to real mode and runs the real mode interrupt handler
+;
+; Note: processor generated ints with error code are not properly handled.
+;
+
+ bits 32
+
+pm_int:
+ pop eax
+
+ push ds
+ push es
+ push fs
+ push gs
+
+ push ebx
+ mov bx,pm_seg.prog_d16
+ mov ds,bx
+ mov bx,pm_seg.4gb_d32
+ mov es,bx
+ pop ebx
+
+ pushfw
+ push word [rm_prog_cs]
+ push word pm_int_50
+
+ sub eax,[pm_idt.base]
+ shr eax,1
+ sub eax,101h*4
+
+ ; eax = int_nr*4
+
+ push dword [es:eax]
+
+ ; get original eax
+ mov eax,[esp+4+3*2+4*4+4] ; seg from far call
+
+ pm_leave
+
+ ; jmp to int handler & continue at pm_int_50
+ retf
+pm_int_50:
+
+ pm_enter
+
+ pop gs
+ pop fs
+ pop es
+ pop ds
+
+ ; update arithmetic flags
+ push eax
+ lahf
+ mov [esp+4*5],ah
+ pop eax
+
+ add esp,4*2 ; skip eax & seg from far call
+
+ iret
+
+
+; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+; Switch from real mode to 32 bit protected mode.
+;
+; Assumes cs = .text.
+;
+; No normal regs or flags changed.
+; Segment regs != cs are stored in rm_seg.
+; ds = .text; ss, es, fs, gs = 4GB selector
+;
+
+ bits 16
+
+switch_to_pm:
+ pushf
+ push eax
+
+ mov eax,cr0
+
+ test al,1
+ jnz $ ; FIXME - for testing
+
+ cli
+
+ mov word [cs:rm_seg.ss],ss
+
+ mov word [cs:rm_seg.ds],ds
+ mov word [cs:rm_seg.es],es
+ mov word [cs:rm_seg.fs],fs
+ mov word [cs:rm_seg.gs],gs
+
+ or al,1
+ o32 lgdt [cs:pm_gdt]
+ o32 lidt [cs:pm_idt]
+ mov cr0,eax
+ jmp pm_seg.prog_c32:switch_to_pm_20
+switch_to_pm_20:
+
+ bits 32
+
+ mov ax,pm_seg.prog_d16
+ mov ds,ax
+
+ ; needed for KVM:
+ ; ss:rpl must equal cs:rpl in PM for VT. We can't rely on ss
+ ; maintaining its value after the transition.
+
+ movzx eax,word [rm_seg.ss]
+ and esp,0ffffh
+ shl eax,4
+ add esp,eax
+ mov ax,pm_seg.4gb_d32
+ mov ss,ax
+
+ mov es,ax
+ mov fs,ax
+ mov gs,ax
+
+ xor eax,eax
+ lldt ax
+
+ mov byte [gdt.tss + 5],89h ; mark task inactive
+ mov ax,pm_seg.tss
+ ltr ax
+
+ cmp byte [need_sound_update],0
+ jz switch_to_pm_80
+ pusha
+ call sound_update
+ popa
+switch_to_pm_80:
+ pop eax
+ popfw
+ o16 ret
+
+
+; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+; Switch from 32 bit protected mode to real mode.
+;
+; Assumes cs = .text
+;
+; No normal regs or flags changed.
+; Segment regs != cs are taken from rm_seg.
+;
+
+ bits 32
+
+switch_to_rm:
+ pushfw
+ push eax
+ push edx
+
+ mov eax,cr0
+
+ test al,1
+ jz $ ; FIXME - for testing
+
+ cli
+
+ o32 lidt [cs:rm_idt]
+
+ mov dx,pm_seg.prog_d16
+ mov ss,dx
+ mov ds,dx
+ mov es,dx
+ mov fs,dx
+ mov gs,dx
+
+ ; first down to 16 bit...
+ jmp pm_seg.prog_c16:switch_to_rm_10
+switch_to_rm_10:
+
+ bits 16
+
+ and al,~1
+ mov cr0,eax
+
+ ; ... then reload cs
+ jmp 0:switch_to_rm_20
+rm_prog_cs equ $-2 ; our real mode cs value (patched here)
+switch_to_rm_20:
+
+ movzx eax,word [cs:rm_seg.ss]
+ mov ss,ax
+ shl eax,4
+ sub esp,eax
+
+ mov ds,[cs:rm_seg.ds]
+ mov es,[cs:rm_seg.es]
+ mov fs,[cs:rm_seg.fs]
+ mov gs,[cs:rm_seg.gs]
+
+ pop edx
+ pop eax
+ popf
+ o32 ret
+
+
+; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+ bits 32
+
+%include "kroete.inc"
+%include "modplay.inc"
+
+; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+;
+; code end
+
+_end:
+
diff --git a/changelog b/changelog
index 42a9b2d..c18b5de 100644
--- a/changelog
+++ b/changelog
@@ -1,309 +1,214 @@
-gfxboot (4.5.2-1.1-6) unstable; urgency=medium
+2014-01-24: HEAD
+ - fix compiler warning
+ - hrvoje.senjan: use FT_SYNTHESIS_H macro
+ - set min video mode to 1024x576
- * QA Upload.
- * Add e2fsprogs to Recommends, also add reiserfsprogs and xfsprogs to
- Suggests. (Closes: #887243)
- * Add debian/watch pointing to https://github.com/OpenSUSE/gfxboot
- * Do dbgsym migration and drop gfxboot-dbg package.
- * Switch from deprecated Priority: extra to optional.
+2012-10-01: 4.5.1
+ - start using 'default' video entry
- -- Andreas Henriksson <andreas@fatal.se> Tue, 06 Mar 2018 17:08:15 +0100
+2012-03-28: 4.5.0
+ - ddc test record
+ - rework monitor detection
+ - new video selection menu
-gfxboot (4.5.2-1.1-5) unstable; urgency=low
+2011-10-13: 4.4.7
+ - fix isohybrid detection
- * I don't care anymore, not worth it.. orphaning.
+2011-10-13: 4.4.6
+ - don't set init boot option (bnc #723678)
- -- Daniel Baumann <mail@daniel-baumann.ch> Fri, 25 Jul 2014 20:58:42 +0200
+2011-09-02: 4.4.5
+ - make systemd default
-gfxboot (4.5.2-1.1-4) unstable; urgency=low
+2011-09-02: 4.4.4
+ - add config option for default init program
+ - use isolinux-config from package
- * Copying with dereferencing of symlinks in order to make builds more
- robust when symlinks are used in the build tree.
- * Copying with dereferencing when install the themes into the packages
- (Closes: #752231).
+2011-07-07: 4.4.3
+ - added KDE theme
+ - update upstream theme
- -- Daniel Baumann <mail@daniel-baumann.ch> Tue, 24 Jun 2014 16:43:39 +0200
+2011-07-07: 4.4.2
+ - added menu to select init variant (bnc #704417)
+ - fix script in case we are on no branch
-gfxboot (4.5.2-1.1-3) unstable; urgency=low
+2011-04-18: 4.4.1
+ - restore compat with syslinux 3
+ - fix wrong mem access
+ - pass back working dir as absolute path
+ - pass cwd via sysconfig
- * Adding conflicts/replaces for gfxboot-examples to gfxboot-dev.
- * Updating dejavu recommends.
+2011-04-07: 4.4.0
+ - set version to oS 11.5
+ - rewrite chdir to work without bootloader chdir support
- -- Daniel Baumann <mail@daniel-baumann.ch> Fri, 25 Apr 2014 22:08:11 +0200
+2011-02-24: 4.3.8
+ - default to hd install with isohybrid boot from hd
-gfxboot (4.5.2-1.1-2) unstable; urgency=low
+2011-02-21: 4.3.7
+ - new oS 11.4 branding
- * Building with dh --parallel.
+2011-01-13: 4.3.6
+ - update virtual box support
+ - fix autoselection of emulator for "gfxboot -p" (bnc #661832)
+ - add qemu-kvm to the list auf autoselected emulators (bnc #661832)
- -- Daniel Baumann <mail@daniel-baumann.ch> Mon, 31 Mar 2014 19:52:21 +0200
+2010-10-27: 4.3.5
+ - avoid dialogs wider than screen
-gfxboot (4.5.2-1.1-1) experimental; urgency=low
+2010-10-04: 4.3.4
+ - remove VERSION
+ - create VERSION and changelog from git repo
- * Merging upstream version 4.5.2-1.1.
- * Dropping freetype.patch, included upstream.
- * Updating year in copyright.
+2010-10-04: 4.3.3
+ - updated help text translations (bnc #551046)
- -- Daniel Baumann <mail@daniel-baumann.ch> Sat, 08 Feb 2014 16:45:50 +0100
+2010-10-04: 4.3.2
+ - updated translations (bnc #551046)
+
+2010-09-03: 4.3.1
+ - new tag
+ - show real product name on serial console (bnc #634299)
+
+2010-08-05: 4.3.0
+ - add 'lang' option if language has been changed [used to be: if != en_US] (bnc #619983)
+ - keyboard label was not translatable (bnc #610638)
+
+2010-07-05: 4.2.3
+ - updated translations (bnc #619513)
-gfxboot (4.5.1-3.11-5) experimental; urgency=low
+2010-06-25: 4.2.2
+ - updated translations
- * Merging themes into gfxboot-themes package.
- * Adding debug package.
- * Merging gfxboot-examples into gfxboot-dev.
+2010-05-31: 4.2.1
+ - clear font flags when setting an undefined font (bnc #609755)
+
+2010-05-20: 4.2.0
+ - don't abuse bit 31 in font pointer (bnc #599478)
+ - turn on ints explicitly
+ - better memory dump
+
+2010-05-19: 4.1.47
+ - openSUSE 11.3 theme
+
+2010-04-30: 4.1.46
+ - new version
+ - set valid tss for pm calls
+ - fixed examples to work with latest gfxboot.c32
+ - added Asturian (bnc #562202)
+ - strip gfxboot.com related parts from syslinux-3.86 patchset
+
+2010-04-16: 4.1.44
+ - fix help text formatting
+
+2010-04-16: 4.1.43
+ - reset progress bar status after error
+
+2010-04-09: 4.1.42
+ - add patches for syslinux 3.86
+ - prefer gfxboot.c32 over gfxboot.com
+
+2009-12-10: 4.1.41
+ - center main menu (bnc #562089)
+ - leave more room for timeout indicator (bnc #551718)
+
+2009-11-16: 4.1.40
+ - syslinux patch: fix chdir() return value
+
+2009-10-30: 4.1.39
+ - updated help text translations
+ - updated translations (bnc #551046)
+
+2009-10-29: 4.1.38
+ - add gfxboot.c32 patch
+ - extend interface so it works with gfxboot.c32
+ - menu layout can be in high memory
+ -added --no-unpack option
+
+2009-10-19: 4.1.37
+ - fix progress indicator for PXE boot
+ - fix syslinux setup
+ - get kernel size right
+
+2009-10-19: 4.1.36
+ - set correct timeout value
+ - localboot should return to text mode
+ - set correct timeout value
+ - more examples
+ - more examples
+
+2009-10-15: 4.1.35
+ - install examples
+ - added some sample themes
+ - improved gfxtest script
+
+2009-10-15: 4.1.34
+ - added patches for syslinux 3.83
+ - support pxe setup in test script
+
+2009-10-12: 4.1.33
+ - updated speech samples
+
+2009-10-12: 4.1.32
+ - added swiss french keymap
+
+2009-10-07: 4.1.31
+ - the new maps
+ - new keyboard mappings, new font
+ - make keytable handling more consistent
+ - updated keyboard mapping list
+ - added syslinux-3.82 patchset
+
+2009-10-02: 4.1.30
+ - fix pot
+
+2009-09-30: 4.1.29
+ - livecd: add F4=kerneloptions
+ - cleaned up po files
+ - more flexible translation support
+ - new font
+ - log more data to allow easier font size adjustments
+
+2009-09-29: 4.1.28
+ - set default install type correctly (bnc #542781)
+
+2009-09-28: 4.1.27
+ - updated language list
+ - fixed grub picture (bnc #542113)
+ - make new network dialog translatable
+
+2009-09-24: 4.1.26
+ - escape weird chars in URLs
+
+2009-09-18: 4.1.25
+ - F-key assignments configurable via gfxboot.cfg
+ - fixed evil bug
+ - removed old config copies
+ - unified config file
+ - added memcheck option
+
+2009-09-15: 4.1.24
+ - added proxy setup (bnc #329668)
+
+2009-09-14: 4.1.23
+ - updated 11.2 openSUSE theme (bnc #538949)
+ - added network config dialog
+ - up version number
+ - fix some nasm warnings
+
+2009-09-09: 4.1.22
+ - gfxboot script works with new syslinux
+ - fixed bug number
+ - no fb after F9 for live cd (bnc #391313)
+ - use new 'mount' instruction
+ - improved gfxtest script; removed old test script
+ - added --version option to gfxboot
+ - allow empty menus
+ - rm temp files
+ - removed obsolete themes
+ - added new gfxtest script
+ - support qemu-kvm
+ - Ilyas Bakirov: added Kirghiz support
+ - implemented realloc function
+ - file read works with files of unknown size (-1)
- -- Daniel Baumann <mail@daniel-baumann.ch> Fri, 17 Jan 2014 06:34:36 +0100
-
-gfxboot (4.5.1-3.11-4) experimental; urgency=low
-
- * Refreshing ttf-dejavue.patch.
- * Refreshing adddir.patch.
- * Refreshing freetype.patch.
- * Updating year in copyright file for 2014.
-
- -- Daniel Baumann <mail@daniel-baumann.ch> Fri, 17 Jan 2014 06:33:35 +0100
-
-gfxboot (4.5.1-3.11-3) experimental; urgency=low
-
- * Adding vcs fields.
- * Wrapping control fields.
- * Updating to standards version 3.9.5.
- * Making gfxboot no longer build-depend on itself to compile examples and
- themes.
- * Adding patch to update location of freetype headers (Closes: #733384).
-
- -- Daniel Baumann <mail@daniel-baumann.ch> Sat, 28 Dec 2013 20:20:31 +0100
-
-gfxboot (4.5.1-3.11-2) experimental; urgency=low
-
- * Adding link to gitorious to source entry in copyright.
-
- -- Daniel Baumann <mail@daniel-baumann.ch> Tue, 16 Jul 2013 10:18:13 +0200
-
-gfxboot (4.5.1-3.11-1) experimental; urgency=low
-
- * Merging upstream version 4.5.1-3.11.
- * Merging gfxboot-examples packaging into src:gfxboot.
- * Updating years in copyright file.
- * Using four digits prefix in patch filenames.
- * Trimming diff header in patches.
- * Dropping dpkg-source compression levels.
- * Sorting targets in rules alphabetically.
- * Moving examples build-tree into subdirectory within local build
- directory.
- * Merging gfxboot-themes packaging into src:gfxboot.
- * Temporarily adding gfxboot-dev to build-depends for building examples
- and themes until build has been reworked to use local gfxboot of the
- build itself.
-
- -- Daniel Baumann <mail@daniel-baumann.ch> Thu, 23 May 2013 07:47:48 +0200
-
-gfxboot (4.5.1-3) unstable; urgency=low
-
- * Removing all references to my old email address.
-
- -- Daniel Baumann <mail@daniel-baumann.ch> Sun, 10 Mar 2013 20:31:54 +0100
-
-gfxboot (4.5.1-2) unstable; urgency=low
-
- * Removing Otavio from uploaders with his consent.
-
- -- Daniel Baumann <mail@daniel-baumann.ch> Sun, 10 Mar 2013 20:30:16 +0100
-
-gfxboot (4.5.1-1) unstable; urgency=low
-
- * Merging upstream version 4.5.1.
- * Updating to standards version 3.9.4.
-
- -- Daniel Baumann <mail@daniel-baumann.ch> Mon, 10 Dec 2012 12:32:31 +0100
-
-gfxboot (4.5.0-3) unstable; urgency=low
-
- * Adding patch to update syslinux paths (Closes: #682974).
-
- -- Daniel Baumann <mail@daniel-baumann.ch> Fri, 27 Jul 2012 17:44:09 +0200
-
-gfxboot (4.5.0-2) unstable; urgency=low
-
- * Updating GPL boilerplate in copyright file.
- * Switching to xz compression.
- * Trimming auto_install override in rules.
- * Adding patch to avoid overwriting buildflags.
- * Enabling hardened buildflags.
-
- -- Daniel Baumann <mail@daniel-baumann.ch> Fri, 29 Jun 2012 18:05:56 +0200
-
-gfxboot (4.5.0-1) unstable; urgency=low
-
- * Using compression level 9 also for binary packages.
- * Merging upstream version 4.5.0.
- * Updating package to debhelper version 9.
- * Updating to standards version 3.9.3.
- * Updating years in copyright file.
- * Updating copyright file to format version 1.0.
-
- -- Daniel Baumann <mail@daniel-baumann.ch> Wed, 06 Jun 2012 16:17:29 +0200
-
-gfxboot (4.4.3-1) unstable; urgency=low
-
- * Merging upstream version 4.4.3.
- * Updating maintainer and uploaders fields.
- * Removing vcs fields.
- * Removing references to my old email address.
- * Makging packaging distribution neutral.
- * Updating years in copyright file.
- * Updating to standards version 3.9.2.
- * Removing leftover README.source.
- * Compacting copyright file.
- * Correcting spelling typo in package description, thanks to Simon
- Kainz <simon@familiekainz.at> (Closes: #636586).
-
- -- Daniel Baumann <mail@daniel-baumann.ch> Sun, 28 Aug 2011 18:33:56 +0200
-
-gfxboot (4.3.5-2) experimental; urgency=low
-
- * Adding patch from Colin Watson <cjwatson@ubuntu.com> to fix link
- order with 'ld --as-needed' (Closes: #605771).
-
- -- Daniel Baumann <mail@daniel-baumann.ch> Fri, 03 Dec 2010 17:39:02 +0100
-
-gfxboot (4.3.5-1) experimental; urgency=low
-
- * Merging upstream version 4.3.5.
- * Updating to debhelper version 8.
- * Switching to source format 3.0 (quilt).
-
- -- Daniel Baumann <mail@daniel-baumann.ch> Sat, 20 Nov 2010 17:25:01 +0100
-
-gfxboot (4.3.1-2) experimental; urgency=low
-
- * Also building on hurd-i386 (Closes: #597273).
-
- -- Daniel Baumann <mail@daniel-baumann.ch> Sun, 19 Sep 2010 01:41:57 +0200
-
-gfxboot (4.3.1-1) experimental; urgency=low
-
- * Merging upstream version 4.3.1.
-
- -- Daniel Baumann <mail@daniel-baumann.ch> Wed, 15 Sep 2010 08:56:15 +0200
-
-gfxboot (4.3.0-1) experimental; urgency=low
-
- * Merging upstream version 4.3.0.
- * Updating standards version to 3.9.1.
-
- -- Daniel Baumann <mail@daniel-baumann.ch> Sat, 14 Aug 2010 22:44:51 +0200
-
-gfxboot (4.2.2-1) unstable; urgency=low
-
- * Updating standards version to 3.9.0.
- * Merging upstream version 4.2.2.
-
- -- Daniel Baumann <mail@daniel-baumann.ch> Tue, 06 Jul 2010 00:31:03 +0200
-
-gfxboot (4.2.1-1) unstable; urgency=low
-
- * Merging upstream version 4.2.1.
- * Dropping dump-malloc-screen-size.patch, not required anymore.
-
- -- Daniel Baumann <mail@daniel-baumann.ch> Sat, 05 Jun 2010 09:45:57 +0200
-
-gfxboot (4.1.47-1) unstable; urgency=low
-
- * Merging upstream version 4.1.47.
-
- -- Daniel Baumann <mail@daniel-baumann.ch> Sat, 22 May 2010 15:51:34 +0200
-
-gfxboot (4.1.44-1) unstable; urgency=low
-
- * Updating year in copyright file.
- * Updating to standards 3.8.4.
- * Merging upstream version 4.1.44.
- * Sorting dh call in rules to common order.
- * Updating year in copyright file.
- * Reordering debhelper install files.
-
- -- Daniel Baumann <mail@daniel-baumann.ch> Sat, 24 Apr 2010 11:30:17 +0200
-
-gfxboot (4.1.41-1) unstable; urgency=low
-
- * Merging upstream version 4.1.41.
-
- -- Daniel Baumann <mail@daniel-baumann.ch> Wed, 23 Dec 2009 09:06:26 +0100
-
-gfxboot (4.1.40-4) unstable; urgency=low
-
- * Adding cpio to depends of gfxboot-dev (Closes: #560625).
-
- -- Daniel Baumann <mail@daniel-baumann.ch> Sat, 12 Dec 2009 07:46:17 +0100
-
-gfxboot (4.1.40-3) unstable; urgency=low
-
- * Also building package on kfreebsd-amd64 (Closes: #559403).
-
- -- Daniel Baumann <mail@daniel-baumann.ch> Sat, 05 Dec 2009 23:03:47 +0100
-
-gfxboot (4.1.40-2) unstable; urgency=low
-
- * Also building package on kfreebsd-i386 (Closes: #559403).
-
- -- Daniel Baumann <mail@daniel-baumann.ch> Fri, 04 Dec 2009 08:12:29 +0100
-
-gfxboot (4.1.40-1) unstable; urgency=low
-
- * Dropping lpia from architectures, lpia is dead.
- * Merging upstream version 4.1.40.
- * Updating README.source.
- * Adding explicit source version 1.0 until switch to 3.0.
- * Bumping versioned build-depends on quilt.
-
- -- Daniel Baumann <mail@daniel-baumann.ch> Fri, 27 Nov 2009 15:11:52 +0100
-
-gfxboot (4.1.39-2) unstable; urgency=low
-
- * Only building on intel architectures, appears to be non-portable
- otherwise (Closes: #556638).
-
- -- Daniel Baumann <mail@daniel-baumann.ch> Tue, 17 Nov 2009 12:32:03 +0100
-
-gfxboot (4.1.39-1) unstable; urgency=low
-
- * Merging upstream version 4.1.39.
- * Updating debhelper install and links file for newly added gfxtest.
-
- -- Daniel Baumann <mail@daniel-baumann.ch> Tue, 10 Nov 2009 11:59:36 +0100
-
-gfxboot (4.1.33-1) unstable; urgency=low
-
- * Merging upstream version 4.1.33.
-
- -- Daniel Baumann <mail@daniel-baumann.ch> Wed, 21 Oct 2009 08:35:18 +0200
-
-gfxboot (4.1.31-1) unstable; urgency=low
-
- * Merging upstream version 4.1.31.
-
- -- Daniel Baumann <mail@daniel-baumann.ch> Sat, 10 Oct 2009 13:01:05 +0200
-
-gfxboot (4.1.30-1) unstable; urgency=low
-
- * Merging upstream version 4.1.30.
-
- -- Daniel Baumann <mail@daniel-baumann.ch> Tue, 06 Oct 2009 20:33:33 +0200
-
-gfxboot (4.1.28-1) unstable; urgency=low
-
- * Merging upstream version 4.1.28.
-
- -- Daniel Baumann <mail@daniel-baumann.ch> Fri, 02 Oct 2009 19:52:34 +0200
-
-gfxboot (4.1.24-1) unstable; urgency=low
-
- * Merging upstream version 4.1.24.
-
- -- Daniel Baumann <mail@daniel-baumann.ch> Sun, 20 Sep 2009 21:14:37 +0200
-
-gfxboot (4.1.19-1) unstable; urgency=low
-
- * Initial release (Closes: #465768).
-
- -- Daniel Baumann <mail@daniel-baumann.ch> Wed, 02 Sep 2009 14:24:36 +0200
diff --git a/debian/changelog b/debian/changelog
new file mode 100644
index 0000000..42a9b2d
--- /dev/null
+++ b/debian/changelog
@@ -0,0 +1,309 @@
+gfxboot (4.5.2-1.1-6) unstable; urgency=medium
+
+ * QA Upload.
+ * Add e2fsprogs to Recommends, also add reiserfsprogs and xfsprogs to
+ Suggests. (Closes: #887243)
+ * Add debian/watch pointing to https://github.com/OpenSUSE/gfxboot
+ * Do dbgsym migration and drop gfxboot-dbg package.
+ * Switch from deprecated Priority: extra to optional.
+
+ -- Andreas Henriksson <andreas@fatal.se> Tue, 06 Mar 2018 17:08:15 +0100
+
+gfxboot (4.5.2-1.1-5) unstable; urgency=low
+
+ * I don't care anymore, not worth it.. orphaning.
+
+ -- Daniel Baumann <mail@daniel-baumann.ch> Fri, 25 Jul 2014 20:58:42 +0200
+
+gfxboot (4.5.2-1.1-4) unstable; urgency=low
+
+ * Copying with dereferencing of symlinks in order to make builds more
+ robust when symlinks are used in the build tree.
+ * Copying with dereferencing when install the themes into the packages
+ (Closes: #752231).
+
+ -- Daniel Baumann <mail@daniel-baumann.ch> Tue, 24 Jun 2014 16:43:39 +0200
+
+gfxboot (4.5.2-1.1-3) unstable; urgency=low
+
+ * Adding conflicts/replaces for gfxboot-examples to gfxboot-dev.
+ * Updating dejavu recommends.
+
+ -- Daniel Baumann <mail@daniel-baumann.ch> Fri, 25 Apr 2014 22:08:11 +0200
+
+gfxboot (4.5.2-1.1-2) unstable; urgency=low
+
+ * Building with dh --parallel.
+
+ -- Daniel Baumann <mail@daniel-baumann.ch> Mon, 31 Mar 2014 19:52:21 +0200
+
+gfxboot (4.5.2-1.1-1) experimental; urgency=low
+
+ * Merging upstream version 4.5.2-1.1.
+ * Dropping freetype.patch, included upstream.
+ * Updating year in copyright.
+
+ -- Daniel Baumann <mail@daniel-baumann.ch> Sat, 08 Feb 2014 16:45:50 +0100
+
+gfxboot (4.5.1-3.11-5) experimental; urgency=low
+
+ * Merging themes into gfxboot-themes package.
+ * Adding debug package.
+ * Merging gfxboot-examples into gfxboot-dev.
+
+ -- Daniel Baumann <mail@daniel-baumann.ch> Fri, 17 Jan 2014 06:34:36 +0100
+
+gfxboot (4.5.1-3.11-4) experimental; urgency=low
+
+ * Refreshing ttf-dejavue.patch.
+ * Refreshing adddir.patch.
+ * Refreshing freetype.patch.
+ * Updating year in copyright file for 2014.
+
+ -- Daniel Baumann <mail@daniel-baumann.ch> Fri, 17 Jan 2014 06:33:35 +0100
+
+gfxboot (4.5.1-3.11-3) experimental; urgency=low
+
+ * Adding vcs fields.
+ * Wrapping control fields.
+ * Updating to standards version 3.9.5.
+ * Making gfxboot no longer build-depend on itself to compile examples and
+ themes.
+ * Adding patch to update location of freetype headers (Closes: #733384).
+
+ -- Daniel Baumann <mail@daniel-baumann.ch> Sat, 28 Dec 2013 20:20:31 +0100
+
+gfxboot (4.5.1-3.11-2) experimental; urgency=low
+
+ * Adding link to gitorious to source entry in copyright.
+
+ -- Daniel Baumann <mail@daniel-baumann.ch> Tue, 16 Jul 2013 10:18:13 +0200
+
+gfxboot (4.5.1-3.11-1) experimental; urgency=low
+
+ * Merging upstream version 4.5.1-3.11.
+ * Merging gfxboot-examples packaging into src:gfxboot.
+ * Updating years in copyright file.
+ * Using four digits prefix in patch filenames.
+ * Trimming diff header in patches.
+ * Dropping dpkg-source compression levels.
+ * Sorting targets in rules alphabetically.
+ * Moving examples build-tree into subdirectory within local build
+ directory.
+ * Merging gfxboot-themes packaging into src:gfxboot.
+ * Temporarily adding gfxboot-dev to build-depends for building examples
+ and themes until build has been reworked to use local gfxboot of the
+ build itself.
+
+ -- Daniel Baumann <mail@daniel-baumann.ch> Thu, 23 May 2013 07:47:48 +0200
+
+gfxboot (4.5.1-3) unstable; urgency=low
+
+ * Removing all references to my old email address.
+
+ -- Daniel Baumann <mail@daniel-baumann.ch> Sun, 10 Mar 2013 20:31:54 +0100
+
+gfxboot (4.5.1-2) unstable; urgency=low
+
+ * Removing Otavio from uploaders with his consent.
+
+ -- Daniel Baumann <mail@daniel-baumann.ch> Sun, 10 Mar 2013 20:30:16 +0100
+
+gfxboot (4.5.1-1) unstable; urgency=low
+
+ * Merging upstream version 4.5.1.
+ * Updating to standards version 3.9.4.
+
+ -- Daniel Baumann <mail@daniel-baumann.ch> Mon, 10 Dec 2012 12:32:31 +0100
+
+gfxboot (4.5.0-3) unstable; urgency=low
+
+ * Adding patch to update syslinux paths (Closes: #682974).
+
+ -- Daniel Baumann <mail@daniel-baumann.ch> Fri, 27 Jul 2012 17:44:09 +0200
+
+gfxboot (4.5.0-2) unstable; urgency=low
+
+ * Updating GPL boilerplate in copyright file.
+ * Switching to xz compression.
+ * Trimming auto_install override in rules.
+ * Adding patch to avoid overwriting buildflags.
+ * Enabling hardened buildflags.
+
+ -- Daniel Baumann <mail@daniel-baumann.ch> Fri, 29 Jun 2012 18:05:56 +0200
+
+gfxboot (4.5.0-1) unstable; urgency=low
+
+ * Using compression level 9 also for binary packages.
+ * Merging upstream version 4.5.0.
+ * Updating package to debhelper version 9.
+ * Updating to standards version 3.9.3.
+ * Updating years in copyright file.
+ * Updating copyright file to format version 1.0.
+
+ -- Daniel Baumann <mail@daniel-baumann.ch> Wed, 06 Jun 2012 16:17:29 +0200
+
+gfxboot (4.4.3-1) unstable; urgency=low
+
+ * Merging upstream version 4.4.3.
+ * Updating maintainer and uploaders fields.
+ * Removing vcs fields.
+ * Removing references to my old email address.
+ * Makging packaging distribution neutral.
+ * Updating years in copyright file.
+ * Updating to standards version 3.9.2.
+ * Removing leftover README.source.
+ * Compacting copyright file.
+ * Correcting spelling typo in package description, thanks to Simon
+ Kainz <simon@familiekainz.at> (Closes: #636586).
+
+ -- Daniel Baumann <mail@daniel-baumann.ch> Sun, 28 Aug 2011 18:33:56 +0200
+
+gfxboot (4.3.5-2) experimental; urgency=low
+
+ * Adding patch from Colin Watson <cjwatson@ubuntu.com> to fix link
+ order with 'ld --as-needed' (Closes: #605771).
+
+ -- Daniel Baumann <mail@daniel-baumann.ch> Fri, 03 Dec 2010 17:39:02 +0100
+
+gfxboot (4.3.5-1) experimental; urgency=low
+
+ * Merging upstream version 4.3.5.
+ * Updating to debhelper version 8.
+ * Switching to source format 3.0 (quilt).
+
+ -- Daniel Baumann <mail@daniel-baumann.ch> Sat, 20 Nov 2010 17:25:01 +0100
+
+gfxboot (4.3.1-2) experimental; urgency=low
+
+ * Also building on hurd-i386 (Closes: #597273).
+
+ -- Daniel Baumann <mail@daniel-baumann.ch> Sun, 19 Sep 2010 01:41:57 +0200
+
+gfxboot (4.3.1-1) experimental; urgency=low
+
+ * Merging upstream version 4.3.1.
+
+ -- Daniel Baumann <mail@daniel-baumann.ch> Wed, 15 Sep 2010 08:56:15 +0200
+
+gfxboot (4.3.0-1) experimental; urgency=low
+
+ * Merging upstream version 4.3.0.
+ * Updating standards version to 3.9.1.
+
+ -- Daniel Baumann <mail@daniel-baumann.ch> Sat, 14 Aug 2010 22:44:51 +0200
+
+gfxboot (4.2.2-1) unstable; urgency=low
+
+ * Updating standards version to 3.9.0.
+ * Merging upstream version 4.2.2.
+
+ -- Daniel Baumann <mail@daniel-baumann.ch> Tue, 06 Jul 2010 00:31:03 +0200
+
+gfxboot (4.2.1-1) unstable; urgency=low
+
+ * Merging upstream version 4.2.1.
+ * Dropping dump-malloc-screen-size.patch, not required anymore.
+
+ -- Daniel Baumann <mail@daniel-baumann.ch> Sat, 05 Jun 2010 09:45:57 +0200
+
+gfxboot (4.1.47-1) unstable; urgency=low
+
+ * Merging upstream version 4.1.47.
+
+ -- Daniel Baumann <mail@daniel-baumann.ch> Sat, 22 May 2010 15:51:34 +0200
+
+gfxboot (4.1.44-1) unstable; urgency=low
+
+ * Updating year in copyright file.
+ * Updating to standards 3.8.4.
+ * Merging upstream version 4.1.44.
+ * Sorting dh call in rules to common order.
+ * Updating year in copyright file.
+ * Reordering debhelper install files.
+
+ -- Daniel Baumann <mail@daniel-baumann.ch> Sat, 24 Apr 2010 11:30:17 +0200
+
+gfxboot (4.1.41-1) unstable; urgency=low
+
+ * Merging upstream version 4.1.41.
+
+ -- Daniel Baumann <mail@daniel-baumann.ch> Wed, 23 Dec 2009 09:06:26 +0100
+
+gfxboot (4.1.40-4) unstable; urgency=low
+
+ * Adding cpio to depends of gfxboot-dev (Closes: #560625).
+
+ -- Daniel Baumann <mail@daniel-baumann.ch> Sat, 12 Dec 2009 07:46:17 +0100
+
+gfxboot (4.1.40-3) unstable; urgency=low
+
+ * Also building package on kfreebsd-amd64 (Closes: #559403).
+
+ -- Daniel Baumann <mail@daniel-baumann.ch> Sat, 05 Dec 2009 23:03:47 +0100
+
+gfxboot (4.1.40-2) unstable; urgency=low
+
+ * Also building package on kfreebsd-i386 (Closes: #559403).
+
+ -- Daniel Baumann <mail@daniel-baumann.ch> Fri, 04 Dec 2009 08:12:29 +0100
+
+gfxboot (4.1.40-1) unstable; urgency=low
+
+ * Dropping lpia from architectures, lpia is dead.
+ * Merging upstream version 4.1.40.
+ * Updating README.source.
+ * Adding explicit source version 1.0 until switch to 3.0.
+ * Bumping versioned build-depends on quilt.
+
+ -- Daniel Baumann <mail@daniel-baumann.ch> Fri, 27 Nov 2009 15:11:52 +0100
+
+gfxboot (4.1.39-2) unstable; urgency=low
+
+ * Only building on intel architectures, appears to be non-portable
+ otherwise (Closes: #556638).
+
+ -- Daniel Baumann <mail@daniel-baumann.ch> Tue, 17 Nov 2009 12:32:03 +0100
+
+gfxboot (4.1.39-1) unstable; urgency=low
+
+ * Merging upstream version 4.1.39.
+ * Updating debhelper install and links file for newly added gfxtest.
+
+ -- Daniel Baumann <mail@daniel-baumann.ch> Tue, 10 Nov 2009 11:59:36 +0100
+
+gfxboot (4.1.33-1) unstable; urgency=low
+
+ * Merging upstream version 4.1.33.
+
+ -- Daniel Baumann <mail@daniel-baumann.ch> Wed, 21 Oct 2009 08:35:18 +0200
+
+gfxboot (4.1.31-1) unstable; urgency=low
+
+ * Merging upstream version 4.1.31.
+
+ -- Daniel Baumann <mail@daniel-baumann.ch> Sat, 10 Oct 2009 13:01:05 +0200
+
+gfxboot (4.1.30-1) unstable; urgency=low
+
+ * Merging upstream version 4.1.30.
+
+ -- Daniel Baumann <mail@daniel-baumann.ch> Tue, 06 Oct 2009 20:33:33 +0200
+
+gfxboot (4.1.28-1) unstable; urgency=low
+
+ * Merging upstream version 4.1.28.
+
+ -- Daniel Baumann <mail@daniel-baumann.ch> Fri, 02 Oct 2009 19:52:34 +0200
+
+gfxboot (4.1.24-1) unstable; urgency=low
+
+ * Merging upstream version 4.1.24.
+
+ -- Daniel Baumann <mail@daniel-baumann.ch> Sun, 20 Sep 2009 21:14:37 +0200
+
+gfxboot (4.1.19-1) unstable; urgency=low
+
+ * Initial release (Closes: #465768).
+
+ -- Daniel Baumann <mail@daniel-baumann.ch> Wed, 02 Sep 2009 14:24:36 +0200
diff --git a/compat b/debian/compat
index ec63514..ec63514 100644
--- a/compat
+++ b/debian/compat
diff --git a/control b/debian/control
index e19f18e..e19f18e 100644
--- a/control
+++ b/debian/control
diff --git a/copyright b/debian/copyright
index 5c09f5d..5c09f5d 100644
--- a/copyright
+++ b/debian/copyright
diff --git a/gfxboot-dev.docs b/debian/gfxboot-dev.docs
index 73ed4df..73ed4df 100644
--- a/gfxboot-dev.docs
+++ b/debian/gfxboot-dev.docs
diff --git a/gfxboot-dev.install b/debian/gfxboot-dev.install
index a2a65cb..a2a65cb 100644
--- a/gfxboot-dev.install
+++ b/debian/gfxboot-dev.install
diff --git a/gfxboot-dev.links b/debian/gfxboot-dev.links
index a583d28..a583d28 100644
--- a/gfxboot-dev.links
+++ b/debian/gfxboot-dev.links
diff --git a/gfxboot.install b/debian/gfxboot.install
index 933f588..933f588 100644
--- a/gfxboot.install
+++ b/debian/gfxboot.install
diff --git a/patches/0001-asprintf.patch b/debian/patches/0001-asprintf.patch
index d62750b..d62750b 100644
--- a/patches/0001-asprintf.patch
+++ b/debian/patches/0001-asprintf.patch
diff --git a/patches/0002-ctype.patch b/debian/patches/0002-ctype.patch
index aa8f231..aa8f231 100644
--- a/patches/0002-ctype.patch
+++ b/debian/patches/0002-ctype.patch
diff --git a/patches/0003-bdf.patch b/debian/patches/0003-bdf.patch
index 428e153..428e153 100644
--- a/patches/0003-bdf.patch
+++ b/debian/patches/0003-bdf.patch
diff --git a/patches/0004-link-order.patch b/debian/patches/0004-link-order.patch
index 9bb7504..9bb7504 100644
--- a/patches/0004-link-order.patch
+++ b/debian/patches/0004-link-order.patch
diff --git a/patches/0005-buildflags.patch b/debian/patches/0005-buildflags.patch
index e06391c..e06391c 100644
--- a/patches/0005-buildflags.patch
+++ b/debian/patches/0005-buildflags.patch
diff --git a/patches/0006-syslinux-path.patch b/debian/patches/0006-syslinux-path.patch
index 5cd0e68..5cd0e68 100644
--- a/patches/0006-syslinux-path.patch
+++ b/debian/patches/0006-syslinux-path.patch
diff --git a/patches/0007-ttf-dejavu.patch b/debian/patches/0007-ttf-dejavu.patch
index 0a6d9a0..0a6d9a0 100644
--- a/patches/0007-ttf-dejavu.patch
+++ b/debian/patches/0007-ttf-dejavu.patch
diff --git a/patches/0008-adddir.patch b/debian/patches/0008-adddir.patch
index ee6b4a1..ee6b4a1 100644
--- a/patches/0008-adddir.patch
+++ b/debian/patches/0008-adddir.patch
diff --git a/patches/series b/debian/patches/series
index 6472786..6472786 100644
--- a/patches/series
+++ b/debian/patches/series
diff --git a/rules b/debian/rules
index 70fa8d1..70fa8d1 100755
--- a/rules
+++ b/debian/rules
diff --git a/source/format b/debian/source/format
index 163aaf8..163aaf8 100644
--- a/source/format
+++ b/debian/source/format
diff --git a/source/options b/debian/source/options
index 5bd47b7..5bd47b7 100644
--- a/source/options
+++ b/debian/source/options
diff --git a/watch b/debian/watch
index b12b9bd..b12b9bd 100644
--- a/watch
+++ b/debian/watch
diff --git a/doc/Makefile b/doc/Makefile
new file mode 100644
index 0000000..198fa47
--- /dev/null
+++ b/doc/Makefile
@@ -0,0 +1,24 @@
+PROJECT = gfxboot
+XMLSRC = gfxboot.xml reference.xml
+
+all: html
+doc: html txt
+
+reference.xml: ../bincode.asm
+ ./mkdoc ../bincode.asm >reference.xml
+
+txt: $(XMLSRC)
+ xmlto txt $(PROJECT).xml
+
+pdf: $(XMLSRC)
+ db2pdf gfxboot.xml
+ @rm -f *.aux *.log *.tex *.out
+
+html: $(XMLSRC)
+ xmlto html-nochunks $(PROJECT).xml
+
+clean:
+ rm -rf *~ *.pdf *.html gfxboot.txt reference.xml *.dsl *.local
+
+distclean: clean
+
diff --git a/doc/gfxboot.8 b/doc/gfxboot.8
new file mode 100644
index 0000000..45d9064
--- /dev/null
+++ b/doc/gfxboot.8
@@ -0,0 +1,189 @@
+.TH GFXBOOT 8 "July 2008" "gfxboot" "System configuration"
+.\"
+.SH NAME
+gfxboot \- graphical boot screen test and config tool
+.\"
+.SH SYNOPSIS
+.B gfxboot [
+.I OPTIONS
+.B ]
+.I ARGS
+.\"
+.SH DESCRIPTION
+.B gfxboot
+modifies and tests graphical boot loader configuration.
+.\"
+.SH OPTIONS
+.SS General options
+.TP
+\fB-a\fR, \fB--archive\fR \fIFILE\fR|\fIDIRECTORY\fR
+Use FILE as gfxboot archive (default is /boot/message).
+If it points to a directory, assume it is an expanded archive (see \fB--expand-archive\fR option below).
+.TP
+\fB-v\fR, \fB--verbose\fR
+Increase verbosity.
+.TP
+\fB--save-temp\fR
+Keep temporary files.
+.TP
+\fB--version\fR
+Show gfxboot version.
+.TP
+\fB--help\fR
+Print usage.
+.SS Switching themes
+.TP
+\fB--new-theme \fITHEME\fR
+Activate THEME. Theme files are stored in /etc/bootsplash/themes/THEME/bootloader.
+.TP
+\fB--update-theme \fITHEME\fR
+Activate THEME but keep language settings from current gfxboot archive.
+.SS Changing gfxboot config
+.TP
+\fB--show-config\fR
+Show gfxboot config file (gfxboot.cfg).
+.TP
+\fB--change-config \fR[\fISECTION1::\fR]\fIOPTION1\fR=\fIFOO1\fR [\fISECTION2::\fR]\fIOPTION2\fR=\fIFOO2\fR ...
+Change gfxboot config options. If sections are omitted, section "base" is used.
+.TP
+\fB--rm-config \fR[\fISECTION1::\fR]\fIOPTION1\fR [\fISECTION2::\fR]\fIOPTION2\fR ...
+Delete gfxboot config options. If sections are omitted, section "base" is used.
+.TP
+\fB--rm-section \fISECTION1\fR \fISECTION2\fR ...
+Delete sections in gfxboot config file.
+.TP
+\fB--default-language \fILANG\fR
+Make LANG the default language. LANG is a locale string (e.g. en_US).
+.TP
+\fB--add-languages \fILANG1\fR \fILANG2\fR ...
+Add translation files.
+.TP
+\fB--rm-languages \fILANG1\fR \fILANG2\fR ...
+Remove translation files.
+.TP
+\fB--config-file\fR \fIFILE\fR
+Don't work on gfxboot.cfg from gfxboot archive but on FILE. NOTE: FILE will be modified even with "--test".
+.SS Preview/test gfxboot setup
+.TP
+\fB-p\fR, \fB--preview \fR
+Try current config (needs some virtual machine).
+.TP
+\fB-t\fR, \fB--test\fR
+Test only (don't actually change any files).
+.TP
+\fB-b\fR, \fB--bootloader\fR \fIBOOTLOADER\fR
+Use BOOTLOADER (grub, lilo, isolinux, syslinux, pxelinux) for preview.
+.TP
+\fB-m\fR, \fB--vm\fR \fIVM\fR
+Use virtual machine VM (bochs, qemu, qemu32, qemu64, vbox, vbox64, vmplayer, vmware) for preview.
+.TP
+\fB--grub\fR \fIDIRECTORY|RPM\fR
+Use grub from DIRECTORY or RPM (default is /).
+.TP
+\fB--lilo\fR \fIDIRECTORY|RPM\fR
+Use lilo from DIRECTORY or RPM (default is /).
+.TP
+\fB--syslinux\fR \fIDIRECTORY|RPM\fR
+Use syslinux from DIRECTORY or RPM (default is /).
+.TP
+\fB--isolinux\fR \fIDIRECTORY|RPM\fR
+Use isolinux from DIRECTORY or RPM (default is /).
+.TP
+\fB--pxelinux\fR \fIDIRECTORY|RPM\fR
+Use pxelinux from DIRECTORY or RPM (default is /).
+.TP
+\fB--password\fR \fIPASSWORD\fR
+Create test config with PASSWORD for preview.
+.TP
+\fB--32\fR
+Create 32 bit test image.
+.TP
+\fB--64\fR
+Create 64 bit test image.
+.TP
+\fB--biarch\fR
+Create biarch test image (same as using --32 and --64).
+.TP
+\fB--cdrom\fR, \fB--dvd\fR
+Create iso image for preview.
+.TP
+\fB--disk\fR
+Create harddisk image for preview.
+.TP
+\fB--floppy\fR
+Create floppy image for preview.
+.TP
+\fB--net\fR
+Create tftp directory for preview.
+.TP
+\fB--save-image\fR \fIFILE\fR
+Copy preview image to FILE.
+.TP
+\fB--test-add-files\fR \fIFILE1\fR \fIFILE2\fR ...
+Add files to test directory.
+.TP
+\fB--test-rm-files\fR \fIFILE1\fR \fIFILE2\fR ...
+Delete files from test directory.
+.SS Adding/removing files from gfxboot archive
+.TP
+\fB--ls\fR, \fB--list-files\fR
+List gfxboot archive files.
+.TP
+\fB--add-files\fR \fIFILE1\fR \fIFILE2\fR ...
+Add files to gfxboot archive.
+.TP
+\fB--rm-files\fR \fIFILE1\fR \fIFILE2\fR ...
+Delete files from gfxboot archive.
+.TP
+\fB--extract-files\fR \fIFILE1\fR \fIFILE2\fR ...
+Copy files from gfxboot archive to current working directory.
+.TP
+\fB--show-file\fR \fIFILE\fR
+Print FILE.
+.TP
+\fB--expand-archive\fR \fIDIRECTORY\fR
+Create expanded gfxboot archive version in DIRECTORY. That is, only files that
+cannot be read directly from file system are kept in a cpio archive. All
+others are unpacked. Use only for isolinux, syslinux, or pxelinux.
+.TP
+\fB--pack-archive\fR \fIFILE\fR
+Pack all gfxboot files into cpio archive FILE.
+.\"
+.SS Modifying help files
+.TP
+\fB--help-show\fR \fIFILE\fR
+Print FILE (internal help file format) as HTML.
+.TP
+\fB--help-create\fR \fIFILE\fR
+Convert HTML files passed as ARGS to FILE (internal format).
+.TP
+\fB--used-pages\fR \fILINK1\fR \fILINK2\fR ...
+Mark pages as referenced.
+.TP
+\fB--navi\fR \fIFILE\fR
+Use FILE as template for navigation links.
+.TP
+\fB--define\fR \fIENTITY1\fR=\fIVALUE1\fR \fIENTITY2\fR=\fIVALUE2\fR ...
+Define ENTITYx with VALUEx.
+.SH FILES
+.TP 18n
+.B /boot/message
+bootloader graphics archive (actually a cpio achive)
+.TP
+.B /etc/bootsplash/themes
+theme directory
+.TP
+.B /etc/sysconfig/bootsplash
+default theme
+.\"
+.SH BUGS
+None.
+.\"
+.SH AUTHOR
+.nf
+Written by Steffen Winterfeldt.
+.fi
+.\"
+.SH "SEE ALSO"
+If you want to create your own theme look at the gfxboot-devel package.
+.\"
diff --git a/doc/gfxboot.xml b/doc/gfxboot.xml
new file mode 100644
index 0000000..f4e1570
--- /dev/null
+++ b/doc/gfxboot.xml
@@ -0,0 +1,259 @@
+<?xml version="1.0" encoding='UTF-8'?>
+<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"
+"http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd"
+[
+ <!ENTITY dash1 "&#8211;">
+ <!ENTITY dash2 "&#8212;">
+ <!ENTITY reference.xml SYSTEM "reference.xml">
+]
+>
+
+<article>
+ <articleinfo>
+ <title>gfxboot reference</title>
+
+ <abstract>
+ <para>
+ Creating bootloader graphics with gfxboot for syslinux/isolinux, lilo, and grub.
+ </para>
+ </abstract>
+ </articleinfo>
+
+ <sect1 id="overview">
+ <title>Overview</title>
+
+ <para>
+ To make a graphical boot screen you'll have to write a small script. Optionally you
+ might want font files, graphics files and sound files.
+ </para><para>
+ The script is written in a Postscript-like language.
+ You must program everything related to graphics output in it. That does
+ include e.g. drawing the background picture and in particular handling all kind
+ of user input.
+ </para><para>
+ Font files have a special format. Create them using
+ <link linkend="gfxboot-font"><command>gfxboot-font</command></link>.
+ Maximum font file size is 512kB.
+ </para><para>
+ If you have written a script, convert it into byte code
+ using <link linkend="gfxboot-compile"><command>gfxboot-compile</command></link>.
+ </para><para>
+ Debugging this script is rather tedious. For this, <command>gfxboot-compile -l</command>
+ will give you debug information that is useful together with the <function>dtrace</function>
+ command.
+ </para>
+
+ </sect1>
+
+ <sect1 id="utilities">
+ <title>Utilities</title>
+
+ <para>
+ Tools needed to build a boot graphics file.
+ </para>
+
+ <itemizedlist>
+ <listitem>
+ <para id="gfxboot-compile">gfxboot-compile</para>
+ <para>
+ Compile source into byte code. The result (together with any
+ other files you might need) has to be put into a cpio archive. If
+ you are using <command>isolinux</command> or
+ <command>syslinux</command>, this is not required, as you can
+ read files directly from the filesystem. The compiled byte code,
+ however, always has to be put into the cpio archive.
+ <example><title/><para><programlisting>
+ # compile 'foo.ps' to 'foo', writing log to foo.log
+ # Note: '-O' turns on the optimizer. You'll always want to do this.
+ gfxboot-compile -O -v -l foo.log -c foo.ps foo
+
+ # put it into a cpio archive
+ # we'll assume you need a picture 'foo.jpg' and are using font 'foo.fnt'
+ echo -e "foo\nfoo.jpg\nfoo.fnt" | cpio -o >bootlogo
+
+ # 'bootlogo' is ready to use, e.g.
+ # as 'gfxboot bootlogo' in isolinux.cfg
+ </programlisting></para></example>
+ </para>
+ </listitem><listitem>
+ <para id="gfxboot-font">gfxboot-font</para>
+ <para>
+ Build font file using the freetype rendering engine.
+ </para>
+ </listitem><listitem>
+ <para id="help2txt">help2txt</para>
+ <para>
+ Convert html files into the internal online-help format.
+ </para>
+ </listitem>
+ </itemizedlist>
+
+ </sect1>
+
+ <sect1 id="reference">
+ <title>Reference</title>
+
+ <para>
+ Comments start with '%' and extend to the end of line.
+ </para>
+
+ <para>
+ To include some other source file, do:
+ </para>
+
+ <programlisting>%% include file</programlisting>
+
+ <para>
+ Numbers are always 32 bit signed integer. Numerical and string constants
+ are given in a C-like way (not as in Postscript).
+ </para>
+
+ <example><title/><para><programlisting>
+ 123, -456
+ 0x4567
+ "Hi there\n"
+ '\033', '\x1b', '\u20ac'
+ </programlisting></para></example>
+
+ <para>
+ But: chars have values in the range 0 .. 0x1fffff.
+ </para>
+
+ <para>
+ Strings are interpreted as utf8-sequences. Alternatively you can use
+ '\uXXXX' or '\UXXXXXXXX' to include Unicode characters.
+ </para>
+
+ <example><title/><para><programlisting>
+ "1 Euro = 1 €\n"
+ "1 Euro = 1 \u20ac\n"
+ "1 Euro = 1 \xe2\x82\xac\n"
+ </programlisting></para></example>
+
+ <para>
+ Logical operations return values of type 'bool'. They are not identical
+ with integers. There are no pre-defined constants 'true' and 'false'. But
+ you can define them yourself if you need them, e.g.: <programlisting>/true 0 0 eq def</programlisting>
+ </para>
+
+ <para>
+ Strings and arrays are effectively pointers. So duplicating them on the
+ stack does duplicate the pointer, not the object.
+ </para>
+
+ <para>
+ In addition, there is a unspecific pointer data type. You can use it to
+ construct arbitrary memory references.
+ </para>
+
+ <para>
+ Variable/constants/function names can consist of everything except
+ whitespace.
+ </para>
+
+ <sect2>
+ <title>Initialisation</title>
+
+ <para>
+ During initialization the config file in run. It must leave either an
+ empty stack or a boolean 'true' value at the TOS (top of stack) to indicate
+ the boot loader that everything worked fine. Otherwise the boot loader will
+ assume that some error occured and not continue in graphics mode.
+ </para>
+
+ <para>
+ If you want to handle input (as you probably do) you must define at least
+ the callback function <link linkend="cb_KeyEvent">KeyEvent</link>.
+ </para>
+
+ </sect2>
+
+ <sect2>
+ <title>Callbacks</title>
+
+ <para>
+ Communication with the boot loader is done via callback functions. You are
+ responsible to assign useful actions to them.
+ See config file examples for more documentation.
+ </para>
+
+ <itemizedlist>
+
+ <listitem><para><function id="cb_KeyEvent">KeyEvent</function></para>
+ <para>
+ Called if a key is pressed.
+ </para>
+ </listitem>
+
+ <listitem><para><function>MenuInit</function></para>
+ <para>
+ Should draw boot menu.
+ </para>
+ </listitem>
+
+ <listitem><para><function>InfoBoxInit</function></para>
+ <para>
+ Show message box (e.g. error messages).
+ </para>
+ </listitem>
+
+ <listitem><para><function>InfoBoxDone</function></para>
+ <para>
+ Hide message box.
+ </para>
+ </listitem>
+
+ <listitem><para><function>ProgressInit</function></para>
+ <para>
+ Initialize kernel load progress bar (syslinux/isolinux only).
+ </para>
+ </listitem>
+
+ <listitem><para><function>ProgressDone</function></para>
+ <para>
+ Hide progress bar.
+ </para>
+ </listitem>
+
+ <listitem><para><function>ProgressUpdate</function></para>
+ <para>
+ Advance progress bar.
+ </para>
+ </listitem>
+
+ <listitem><para><function>PasswordInit</function></para>
+ <para>
+ Show password dialog.
+ </para>
+ </listitem>
+
+ <listitem><para><function>PasswordDone</function></para>
+ <para>
+ Hide password dialog.
+ </para>
+ </listitem>
+
+ <listitem><para><function>Timeout</function></para>
+ <para>
+ Timeout counter; called every 18.3th second until timeout occurs.
+ </para>
+ </listitem>
+
+ <listitem><para><function>Timer</function></para>
+ <para>
+ Called every 18.3th second regardless of timeout.
+ </para>
+ </listitem>
+
+ </itemizedlist>
+ </sect2>
+
+ <sect2>
+ <title>Primary words</title>
+ &reference.xml;
+ </sect2>
+
+ </sect1>
+
+</article>
+
diff --git a/doc/mkdoc b/doc/mkdoc
new file mode 100755
index 0000000..cc6eaab
--- /dev/null
+++ b/doc/mkdoc
@@ -0,0 +1,202 @@
+#! /usr/bin/perl
+
+sub print_entry;
+sub word_sort;
+
+while(<>) {
+ chomp;
+
+ if(!/^;/) {
+ undef $word;
+
+ next;
+ }
+
+ if(/^;;\s*(\S+)\s*-\s*(.*?)\s*$/) {
+ $word = $1;
+ $descr->{$word} = $2;
+ $f_id->{$word} = sprintf "f_%04d", ++$f_id_cnt;
+
+ undef $para;
+ undef $ex;
+
+ next;
+ }
+
+ if(defined($word) && s/^;\s*//) {
+ s/\s*$//;
+
+ if($ex) {
+ push @{$example->{$word}}, $_;
+ next;
+ }
+
+ if(s/^group:\s*//) {
+ for $g (split /,\s*|\s+/) {
+ $group->{$g}{$word} = 1;
+ $group_r->{$word}{$g} = 1;
+ }
+ next;
+ }
+
+ if(/^\s*\(\s*((.*?)--(.*?))\s*\)\s*$/) {
+ for $p (split ' ', "$2 $3") {
+ $params->{$word}{$p} = 1 unless $p eq '|';
+ }
+ push @{$usage->{$word}}, $1;
+
+ next;
+ }
+
+ if($_ eq '') {
+ undef $para;
+
+ next;
+ }
+
+ if(!$para && /^\s*example/) {
+ $ex = 1;
+ next;
+ }
+
+ if(/^([A-Za-z_0-9]+):/ && $params->{$word}{$1}) {
+ undef $para;
+ }
+
+ if(!$para) {
+ $para = 1;
+ push @{$paras->{$word}}, $_;
+
+ next;
+ }
+ else {
+ ${$paras->{$word}}[-1] .= " $_";
+ }
+
+ }
+
+}
+
+
+print "<itemizedlist>\n";
+
+for $word (sort word_sort keys %$descr) {
+ print " <listitem>\n";
+
+ print_entry $word;
+
+ print " </listitem>\n"
+}
+
+print "</itemizedlist>\n";
+
+=head 0
+for $w (sort keys %$descr) {
+ print "$w - $descr->{$w}\n";
+ print "a: ", join(' ' , sort keys(%{$params->{$w}})), "\n";
+ for $u (@{$usage->{$w}}) {
+ print "u: $u\n";
+ }
+
+ for $x (@{$example->{$w}}) {
+ print "x: $x\n";
+ }
+
+ for $p (@{$paras->{$w}}) {
+ print "p: $p\n";
+ }
+
+ print "\n";
+}
+
+for $g (sort keys %$group) {
+ print "g $g: ", join(' ', sort keys(%{$group->{$g}})), "\n";
+}
+=cut
+
+sub print_entry
+{
+ local $_;
+ my ($word, $u, $v, %g, $l, $ml);
+
+ $word = shift;
+
+ print " <para id=\"$f_id->{$word}\"><function>$word</function> &dash1; $descr->{$word}</para>\n";
+
+ for $u (@{$usage->{$word}}) {
+ $u =~ s/([A-Za-z_0-9]+)/<parameter>$1<\/parameter>/g;
+ $u =~ s/--/&dash2;/;
+
+ print " <para>( $u )</para>\n";
+
+ }
+
+ for $u (@{$paras->{$word}}) {
+ $u =~ s/\s+/ /g;
+
+ $u =~ s/^note:\s*/<emphasis>Note:<\/emphasis> /i;
+
+ $u =~ s/([A-Za-z_0-9]+)/$params->{$word}{$1} ? "<parameter>$1<\/parameter>" : $1/ge;
+
+ $u =~ s/\@([A-Za-z_0-9\[\]\{\}.]+)/
+ $_ = $1,
+ s#\.$##,
+ $f_id->{$_} ? $_ eq $word ? "<function>$_<\/function>" : "<function><link linkend=\"$f_id->{$_}\">$_<\/link><\/function>" : $_
+ /ge;
+
+ print " <para>$u</para>\n";
+ }
+
+ for $u (keys %{$group_r->{$word}}) {
+ for $v (keys %{$group->{$u}}) {
+ $g{$v} = 1 if $v ne $word;
+ }
+ }
+
+ if(%g) {
+ print " <para><emphasis>See also:</emphasis> ";
+ $v = 0;
+ for $u (sort keys %g) {
+ print ", " if $v++;
+ print "<function><link linkend=\"$f_id->{$u}\">$u</link></function>";
+ }
+ print "</para>\n";
+ }
+
+ if($v = $example->{$word}) {
+ shift @$v while @$v && $v->[0] eq '';
+ pop @$v while @$v && $v->[-1] eq '';
+ print " <example><title/><para><programlisting>\n";
+ for $u (@$v) {
+ if($u =~ /^(.*?)\s*%/) {
+ $l = length $1;
+ }
+ else {
+ $l = length $u;
+ }
+ $ml = $l if $l > $ml;
+ }
+
+ $ml = ($ml + 7 + 4) & ~7;
+
+ for $u (@$v) {
+ if($u =~ /^(.*?)\s*%(.*)$/) {
+ printf " %-${ml}s%%%s\n", $1, $2;
+ }
+ else {
+ print " $u\n";
+ }
+ }
+ print " </programlisting></para></example>\n";
+ }
+}
+
+
+sub word_sort
+{
+ my $x = $a eq '{' || $a eq '}' ? " $a" : $a;
+ my $y = $b eq '{' || $b eq '}' ? " $b" : $b;;
+
+ return $x cmp $y;
+}
+
diff --git a/gfxboot b/gfxboot
new file mode 100755
index 0000000..538bf8d
--- /dev/null
+++ b/gfxboot
@@ -0,0 +1,3056 @@
+#! /usr/bin/perl
+
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+# package Tmp version 1.0
+#
+# Create temporary files/directories and ensure they are removed at
+# program end.
+#
+# Copyright (c) 2008 Steffen Winterfeldt
+#
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+{
+ package Tmp;
+
+ use File::Temp;
+ use strict 'vars';
+
+ sub new
+ {
+ my $self = {};
+ my $save_tmp = shift;
+
+ bless $self;
+
+ my $x = $0;
+ $x =~ s#.*/##;
+ $x =~ s/(\s+|"|\\|')/_/;
+ $x = 'tmp' if$x eq "";
+
+ my $t = File::Temp::tempdir("/tmp/$x.XXXXXXXX", CLEANUP => $save_tmp ? 0 : 1);
+
+ $self->{base} = $t;
+
+ if(!$save_tmp) {
+ my $s_t = $SIG{TERM};
+ $SIG{TERM} = sub { File::Temp::cleanup; &$s_t if $s_t };
+
+ my $s_i = $SIG{INT};
+ $SIG{INT} = sub { File::Temp::cleanup; &$s_i if $s_i };
+ }
+
+ return $self
+ }
+
+ sub dir
+ {
+ my $self = shift;
+ my $dir = shift;
+ my $t;
+
+ if($dir ne "" && !-e("$self->{base}/$dir")) {
+ $t = "$self->{base}/$dir";
+ die "error: mktemp failed\n" unless mkdir $t, 0755;
+ }
+ else {
+ chomp ($t = `mktemp -d $self->{base}/XXXX`);
+ die "error: mktemp failed\n" if $?;
+ }
+
+ return $t;
+ }
+
+ sub file
+ {
+ my $self = shift;
+ my $file = shift;
+ my $t;
+
+ if($file ne "" && !-e("$self->{base}/$file")) {
+ $t = "$self->{base}/$file";
+ open my $f, ">$t";
+ close $f;
+ }
+ else {
+ chomp ($t = `mktemp $self->{base}/XXXX`);
+ die "error: mktemp failed\n" if $?;
+ }
+
+ return $t;
+ }
+}
+
+
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+# package HDImage version 1.4
+#
+# Create disk image with partition table and a single partition.
+#
+# Copyright (c) 2008 Steffen Winterfeldt
+#
+# License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
+# This is free software: you are free to change and redistribute it.
+#
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+{
+ package HDImage;
+
+ use strict 'vars';
+ use integer;
+
+ sub new
+ {
+ my $self = {};
+
+ bless $self;
+
+ return $self;
+ }
+
+ sub verbose
+ {
+ my $self = shift;
+
+ $self->{verbose} = shift;
+ }
+
+ sub no_pt
+ {
+ my $self = shift;
+
+ $self->{no_pt} = shift;
+ }
+
+ sub mbr
+ {
+ my $self = shift;
+
+ if(@_) {
+ my $file = shift;
+ open F1, $file;
+ sysread F1, $self->{mbr}, 440;
+ close F1;
+
+ if(length($self->{mbr}) != 440) {
+ print STDERR "warning: $file: no valid MBR\n";
+ }
+ }
+ else {
+ undef $self->{mbr};
+ }
+ }
+
+ sub boot_fat12
+ {
+ my $self = shift;
+
+ if(@_) {
+ my $file = shift;
+ open F1, $file;
+ sysread F1, $self->{boot_fat12}, 512;
+ close F1;
+
+ if(length($self->{boot_fat12}) != 512 || substr($self->{boot_fat12}, 0x1fe, 2) ne "\x55\xaa") {
+ print STDERR "warning: $file: no valid boot block\n";
+ }
+ }
+ else {
+ undef $self->{boot_fat12};
+ }
+ }
+
+ sub boot_fat16
+ {
+ my $self = shift;
+
+ if(@_) {
+ my $file = shift;
+ open F1, $file;
+ sysread F1, $self->{boot_fat16}, 512;
+ close F1;
+
+ if(length($self->{boot_fat16}) != 512 || substr($self->{boot_fat16}, 0x1fe, 2) ne "\x55\xaa") {
+ print STDERR "warning: $file: no valid boot block\n";
+ }
+ }
+ else {
+ undef $self->{boot_fat16};
+ }
+ }
+
+ sub chs
+ {
+ my $self = shift;
+ my $c = shift;
+ my $h = shift;
+ my $s = shift;
+
+ $h = 255 if $h < 1 || $h > 255;
+ $s = 63 if $s < 1 || $s > 63;
+
+ $self->{h} = $h;
+ $self->{s} = $s;
+
+ if($c == 0 && $self->{size}) {
+ $c = ($self->{size} + $h * $s) / $h / $s;
+ }
+
+ if($c > 0) {
+ $self->{c} = $c;
+ $self->{size} = $c * $h * $s;
+ }
+
+ return $self->{size};
+ }
+
+ sub size
+ {
+ my $self = shift;
+ my $size = shift;
+
+ $self->{size} = $size;
+ if($self->{h} && $self->{s}) {
+ $self->{c} = ($self->{size} + $self->{h} * $self->{s}) / $self->{h} / $self->{s};
+ $self->{size} = $self->{c} * $self->{h} * $self->{s};
+ }
+
+ return $self->{size};
+ }
+
+ sub extra_size
+ {
+ my $self = shift;
+
+ $self->{extra_size} = shift;
+ }
+
+ sub type
+ {
+ my $self = shift;
+
+ $self->{type} = shift;
+ }
+
+ sub label
+ {
+ my $self = shift;
+
+ $self->{label} = shift;
+ }
+
+ sub fs
+ {
+ my $self = shift;
+
+ $self->{fs} = shift;
+ }
+
+ sub add_files
+ {
+ my $self = shift;
+ local $_;
+
+ for (@_) {
+ if(-f || -d) {
+ push @{$self->{files}}, $_;
+ }
+ else {
+ print STDERR "$_: no such file or directory\n";
+ }
+ }
+ }
+
+ sub tmp_file
+ {
+ my $self = shift;
+
+ chomp (my $t = `mktemp /tmp/HDImage.XXXXXXXXXX`);
+ die "error: mktemp failed\n" if $?;
+
+ eval 'END { unlink $t }';
+
+ my $s_t = $SIG{TERM};
+ $SIG{TERM} = sub { unlink $t; &$s_t if $s_t };
+
+ my $s_i = $SIG{INT};
+ $SIG{INT} = sub { unlink $t; &$s_i if $s_i };
+
+ return $t;
+ }
+
+ sub partition_ofs
+ {
+ my $self = shift;
+
+ return $self->{no_pt} ? 0 : $self->{s};
+ }
+
+ sub write
+ {
+ my $self = shift;
+ local $_;
+
+ return unless @_;
+
+ my $file = shift;
+ $self->{image_name} = $file;
+
+ $self->chs(0, 255, 63) unless $self->{s};
+
+ my $c = $self->{c};
+ my $h = $self->{h};
+ my $s = $self->{s};
+ my $type = $self->{type};
+ my $pt_size = $self->{no_pt} ? 0 : $s;
+
+ $type = 0x83 unless defined $type;
+
+ print "$file: chs = $c/$h/$s, size = $self->{size} blocks\n" if $self->{verbose};
+
+ print "- writing mbr\n" if $self->{verbose} && $self->{mbr};
+
+ $c = 1024 if $c > 1024;
+
+ if($pt_size) {
+ open W1, ">$file";
+
+ my $mbr = pack (
+ "Z446CCvCCCCVVZ48v",
+ $self->{mbr}, # boot code, if any
+ 0x80, # bootflag
+ $h > 1 ? 1 : 0, # head 1st
+ $h > 1 ? 1 : 0x101, # cyl/sector 1st
+ $type, # partition type
+ $h - 1, # head last
+ ((($c - 1) >> 8) << 6) + $s, # cyl/sector last, byte 0
+ ($c - 1) & 0xff, # cyl/sector last, byte 1
+ $pt_size, # partition offset
+ $self->{size} - $pt_size, # partition size
+ "", 0xaa55
+ );
+
+ syswrite W1, $mbr;
+ sysseek W1, $pt_size * 512 - 1, 0;
+ syswrite W1, "\x00", 1;
+
+ close W1;
+ }
+
+ if($self->{fs}) {
+ my $f = $pt_size ? tmp_file() : $file;
+ open W1, ">$f";
+ seek W1, ($self->{size} - $pt_size) * 512 - 1, 0;
+ syswrite W1, "\x00", 1;
+ close W1;
+ if($self->{fs} eq 'fat') {
+ my $x = " -n '$self->{label}'" if $self->{label} ne "";
+ system "mkfs.vfat -h $pt_size$x $f >/dev/null";
+
+ my ($fat, $boot);
+
+ # mkfs.vfat is a bit stupid; fix FAT superblock
+ open W1, "+<$f";
+ sysseek W1, 0x18, 0;
+ syswrite W1, pack("vv", $s, $h);
+ sysseek W1, 0x24, 0;
+ syswrite W1, "\xff";
+ sysseek W1, 0x36, 0;
+ sysread W1, $fat, 5;
+ # FAT32: at ofs 0x52
+ close W1;
+
+ $boot = $self->{boot_fat12} if $fat eq "FAT12";
+ $boot = $self->{boot_fat16} if $fat eq "FAT16";
+
+ # write boot block ex bpb
+ if($boot) {
+ print "- writing \L$fat\E boot block\n" if $self->{verbose};
+ open W1, "+<$f";
+ syswrite W1, $boot, 11;
+ sysseek W1, 0x3e, 0;
+ syswrite W1, substr($boot, 0x3e);
+ close W1;
+ }
+
+ if($self->{files}) {
+ print "- copying:\n " . join("\n ", @{$self->{files}}) . "\n" if $self->{verbose};
+ system "mcopy -D o -s -i $f " . join(" ", @{$self->{files}}) . " ::";
+ }
+ }
+ elsif($self->{fs} eq 'ext2' || $self->{fs} eq 'ext3') {
+ my $x = " -L '$self->{label}'" if $self->{label} ne "";
+ system "mkfs.$self->{fs} -q -m 0 -F$x $f";
+ system "tune2fs -c 0 -i 0 $f >/dev/null 2>&1";
+ }
+ elsif($self->{fs} eq 'reiserfs') {
+ my $x = " -l '$self->{label}'" if $self->{label} ne "";
+ system "mkfs.reiserfs -q -ff$x $f";
+ }
+ elsif($self->{fs} eq 'xfs') {
+ my $x = " -L '$self->{label}'" if $self->{label} ne "";
+ system "mkfs.xfs -q$x $f";
+ }
+ else {
+ print STDERR "warning: $self->{fs}: unsupported file system\n";
+ }
+
+ if($pt_size) {
+ system "cat $f >>$file";
+ unlink $f;
+ }
+ }
+ else {
+ open W1, "+<$file";
+ sysseek W1, $self->{size} * 512 - 1, 0;
+ syswrite W1, "\x00", 1;
+ close W1;
+ }
+
+ if($self->{extra_size}) {
+ open W1, "+<$file";
+ sysseek W1, $self->{extra_size} * 512 - 1, 2;
+ syswrite W1, "\x00", 1;
+ close W1;
+ }
+
+ }
+}
+
+
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+{
+ package Help;
+
+ use HTML::Parser;
+ use strict 'vars';
+ use integer;
+
+ sub new;
+ sub set_entity;
+ sub navi;
+ sub decode_file;
+ sub add_html;
+ sub check;
+ sub write;
+ sub encode_file;
+ sub text_handler;
+ sub comment_handler;
+ sub default_handler;
+ sub start_handler;
+ sub end_handler;
+ sub pop_elements;
+
+ my %markup = (
+ page => "\x04", # start new page
+
+ normal => "\x10", # back to normal (color, text output)
+ em => "\x11", # set alternative text color (gfx_color1)
+ label => "\x12", # label start, no text output; label end = "\x13"
+ link => "\x13", # label end; set link text color (gfx_color2/3)
+ title => "\x14", # start page description; ends with "\x10"
+ vspace => "\x15", # add empty line
+ li => "\x16", # start list item; ends with "\x15" or "\x16"
+ ind => "\x17", # set indentation
+
+ br => "\x1e", # internal: fake <br>
+
+ vspace_extra => "\n", # new line
+ li_extra => " \xe2\x80\xa2 \x17", # list item prefix (\u2022, \u2023)
+ );
+
+ sub new
+ {
+ my $self = {};
+
+ bless $self;
+
+ return $self;
+ }
+
+ sub set_entity
+ {
+ my $self = shift;
+
+ $self->{entity}{$_[0]} = $_[1];
+ }
+
+ sub navi
+ {
+ my $self = shift;
+ my $file = shift;
+
+ my $res = $self->encode_file($file);
+ $self->{navi} = $res->{text};
+ die "$file: no link to foobar\n" unless $res->{ref}{foobar};
+ }
+
+ sub decode_file
+ {
+ my $self = shift;
+ my $file = shift;
+ local ($_, $/);
+ my ($page_id, $buf, $f);
+
+ open $f, $file or die "$file: $!\n";
+ $buf = <$f>;
+ close $f;
+
+ if(substr($buf, 0, 1) eq "\x04" && substr($buf, -1, 1) eq "\x00") {
+ substr($buf, 0, 1) = undef;
+ substr($buf, -1, 1) = undef;
+ }
+ else {
+ die "$file: not a gfxboot help file\n";
+ }
+
+ my @pages = split /\x04/, $buf;
+
+ $buf = "<html>\n<meta http-equiv=\"Content-Type\" content=\"text/html;charset=utf-8\" />\n<body>\n\n";
+
+ for (@pages) {
+ undef $page_id;
+ s#\x1f#\xc2\xa0#g; # utf8: \xa0
+
+ s#($markup{vspace})$markup{vspace_extra}#$1#g;
+ s#($markup{li})\Q$markup{li_extra}\E#$1#g;
+
+ s#\n#<br/>\n#g;
+
+ s#$markup{em}([^\x00-\x1e]*)$markup{normal}#<em>$1</em>#g;
+
+ s#$markup{label}([^\x00-\x1e]+)$markup{title}$markup{normal}#<a name="$1"/>\n#g;
+
+ if(s#$markup{label}([^\x00-\x1e]+)$markup{title}([^\x00-\x1e]+)$markup{normal}#<h3>\n<a name="$1">$2</a>\n</h3>\n$markup{vspace}#) {
+ $page_id = $1;
+ }
+
+ s:$markup{label}([^\x00-\x1e]+)$markup{link}([^\x00-\x1e]*)$markup{normal}:<a href="#$1">$2</a>:g;
+
+ s#$markup{vspace}($markup{li}.*?)($markup{vspace}|$)#\n<ul>$1\n</ul>\n#gs;
+
+ { } while s#$markup{li}(.*?)($markup{li}|\n</ul>)#\n <li>$1</li>$2#s;
+
+ { } while s#$markup{vspace}(.*?)($markup{vspace}|$)#\n<p>\n$1\n</p>\n$2#s;
+
+ s/([\x10-\x1f])/sprintf("<!-- %02x -->", ord $1)/ge;
+
+ $buf .= "<div id=\"$page_id\">\n$_\n</div>\n\n";
+ }
+
+ $buf .= "\n</body>\n</html>\n";
+
+ return $buf;
+ }
+
+
+ sub add_html
+ {
+ my $self = shift;
+ my $file = shift;
+ local $_;
+ my ($x, $up);
+
+ my $res = $self->encode_file($file);
+ $self->{out_buf} .= $res->{text};
+
+ $self->{label}{$_} = $res->{label}{$_} for keys %{$res->{label}};
+ $self->{ref}{$_} += $res->{ref}{$_} for keys %{$res->{ref}};
+
+ if($file =~ /([^:\/]+)::([^:\/]+)\.html$/) {
+ $up = $1;
+
+ $self->{ref}{$up}++;
+
+ $x = $self->{navi};
+ $x =~ s/foobar/$up/;
+ $x =~ s/FOOBAR/$self->{label}{$up}/;
+
+ if($self->{label}{$up}) {
+ # convert page break into line break
+ substr($x, 0, 1) = "$markup{vspace}\n" if substr($x, 0, 1) eq $markup{page};
+ $self->{out_buf} .= $x;
+ }
+ }
+ }
+
+ sub check
+ {
+ my $self = shift;
+ local $_;
+ my ($first, $err);
+
+ $first = 1;
+ for (sort keys %{$self->{label}}) {
+ if(!/^o_./ && !$self->{ref}{$_}) {
+ if($first) {
+ print STDERR "unused pages:\n";
+ $err = 1;
+ $first = 0;
+ }
+ print STDERR " $_\n";
+ }
+ }
+
+ $first = 1;
+ for (sort keys %{$self->{ref}}) {
+ if(!$self->{label}{$_}) {
+ if($first) {
+ print STDERR "missing pages:\n";
+ $err = 2;
+ $first = 0;
+ }
+ print STDERR " $_\n";
+ }
+ }
+
+ return $err;
+ }
+
+ sub write
+ {
+ my $self = shift;
+ my $file = shift;
+ my $f;
+
+ if($file) {
+ open $f, ">$file";
+ print $f $self->{out_buf}, "\x00";
+ close $f;
+ }
+ else {
+ print $self->{out_buf}, "\x00";
+ }
+ }
+
+ sub encode_file
+ {
+ my $self = shift;
+ my $file = shift;
+ my ($x, $t, $p);
+
+ $p = HTML::Parser->new(api_version => 3);
+
+ # $p->utf8_mode(1);
+ # $p->xml_mode(1);
+ $p->unbroken_text(1);
+ $p->empty_element_tags(1);
+
+ $p->handler(text => \&text_handler, "self,tagname,attr,text,line");
+ $p->handler(comment => \&comment_handler, "self,tagname,attr,text,line" );
+ $p->handler(default => \&default_handler, "self,tagname,attr,text,line" );
+ $p->handler(start => \&start_handler, "self,tagname,attr,text,line");
+ $p->handler(end => \&end_handler, "self,tagname,attr,text,line");
+ $p->handler(start_document => "");
+ $p->handler(end_document => "");
+
+ $p->{file} = $file;
+ $p->parse_file($p->{file}) or die "$file: $!\n";
+
+ for $x (@{$p->{elements}}) {
+ die "$p->{file} line $x->[3], <$x->[0]>: not text\n" unless $x->[0] eq 'text';
+ $t .= $x->[2];
+ }
+
+ $t = $markup{page} . $t;
+
+ $t =~ s/\s*$//;
+ $t =~ s/\s+/ /g;
+ $t =~ s/($markup{vspace})(\s*$markup{vspace})+/$1/g;
+ $t =~ s/($markup{page})$markup{vspace}*/$1/g;
+ $t =~ s/$markup{vspace}*($markup{page}|$)/$1/gs;
+ $t =~ s/\s+($markup{page})/$1/g;
+ $t =~ s/$markup{br}/\n/g;
+
+ # remove the vspace at page start
+ $t =~ s/($markup{label}([^\x00-\x1e]+)$markup{title}([^\x00-\x1e]*)$markup{normal})$markup{vspace}/$1/;
+
+ $t =~ s/($markup{vspace})/$1$markup{vspace_extra}/g;
+ $t =~ s/($markup{li})/$1$markup{li_extra}/g;
+
+ for $x (keys %{$self->{entity}}) {
+ $t =~ s/(&$x;|\@{3}$x\@{3})/$self->{entity}{$x}/g;
+ }
+
+ return { text => $t, label => $p->{label}, ref => $p->{ref} };
+ }
+
+ sub text_handler
+ {
+ my ($self, $tag, $attr, $text, $line) = @_;
+
+ $text =~ s/^\s+$//;
+
+ push @{$self->{elements}}, [ 'text', $attr, $text, $line ];
+ }
+
+
+ sub comment_handler
+ {
+ my ($self, $tag, $attr, $text, $line) = @_;
+
+ # $helptype = $1 if $text =~ /\bhelp=([a-z]+)/;
+ }
+
+
+ sub default_handler
+ {
+ my ($self, $tag, $attr, $text, $line) = @_;
+
+ # return if $tag =~ /^doctype|DOCTYPE$/;
+
+ die "invalid help text at line=$line, tag='$tag', attr='$attr', text='$text'\n";
+ }
+
+
+ sub start_handler
+ {
+ my ($self, $tag, $attr, $text, $line) = @_;
+
+ return if $tag =~ /^(html|body|meta)$/;
+
+ if($tag =~ /^(a|h\d|em|p|ul|li|br|div)$/) {
+ $self->{state}{$tag}++;
+ push @{$self->{elements}}, [ $tag, $attr, $text, $line ];
+ }
+ else {
+ die "$self->{file} line $line, <$tag>: unsupported element\n";
+ }
+ }
+
+
+ sub end_handler
+ {
+ my ($self, $tag, $attr, $text, $line) = @_;
+ my ($elem_text, $elem_tag, $label);
+
+ return if $tag =~ /^(html|body|meta)$/;
+
+ die "$self->{file} line $line, </$tag>: element not started\n" unless $self->{state}{$tag} > 0;
+
+ if($tag =~ /^h\d$/) {
+ $elem_text = pop_elements $self, 'text', $tag;
+ $elem_tag = pop_elements $self, $tag;
+ push @{$self->{elements}}, $elem_text;
+ }
+ elsif($tag eq "em") {
+ $elem_text = pop_elements $self, 'text', $tag;
+ $elem_tag = pop_elements $self, $tag;
+ die "$self->{file} line $line, <$tag>: empty element\n" unless defined $elem_text;
+ $elem_text->[2] = $markup{em} . $elem_text->[2] . $markup{normal};
+ push @{$self->{elements}}, $elem_text;
+ }
+ elsif($tag eq "p") {
+ $elem_text = pop_elements $self, 'text', $tag;
+ $elem_tag = pop_elements $self, $tag;
+ $elem_text->[2] = $markup{vspace} . $elem_text->[2] . $markup{vspace};
+ push @{$self->{elements}}, $elem_text;
+ }
+ elsif($tag eq "br") {
+ $elem_tag = pop_elements $self, $tag;
+ push @{$self->{elements}}, [ 'text', undef , $markup{br}, ];
+ }
+ elsif($tag eq "ul") {
+ $elem_text = pop_elements $self, 'text', $tag;
+ $elem_tag = pop_elements $self, $tag;
+ $elem_text->[2] = $markup{vspace} . $elem_text->[2] . $markup{vspace};
+ push @{$self->{elements}}, $elem_text;
+ }
+ elsif($tag eq "li") {
+ $elem_text = pop_elements $self, 'text', $tag;
+ $elem_tag = pop_elements $self, $tag;
+ $elem_text->[2] = $markup{li} . $elem_text->[2];
+ push @{$self->{elements}}, $elem_text;
+ }
+ elsif($tag eq "div") {
+ $elem_text = pop_elements $self, 'text', $tag;
+ $elem_tag = pop_elements $self, $tag;
+ push @{$self->{elements}}, $elem_text;
+ }
+ elsif($tag eq "a") {
+ $elem_text = pop_elements $self, 'text', $tag;
+ $elem_tag = pop_elements $self, $tag;
+ die "$self->{file} line $line, <$tag>: empty element\n" unless defined $elem_text;
+
+ if($elem_tag->[1]{name}) {
+ # name -> page title
+ $label = $elem_tag->[1]{name};
+ die "$self->{file} line $line, <$tag>: label '$label' too long (max. 32)\n" if length($label) > 32;
+ die "$self->{file} line $line, <$tag>: label '$label' redefined\n" if $self->{label}{$label};
+ $self->{label}{$label} = $elem_text->[2];
+ $elem_text->[2] = $markup{label} . $label . $markup{title} . $elem_text->[2] . $markup{normal};
+ push @{$self->{elements}}, $elem_text;
+ }
+ elsif($elem_tag->[1]{href}) {
+ # href -> link
+ $label = $elem_tag->[1]{href};
+ $label =~ s/^#//;
+ die "$self->{file} line $line, <$tag>: label '$label' too long (max. 32)\n" if length($label) > 32;
+ $self->{ref}{$label}++;
+ $elem_text->[2] =~ s/\s/\xc2\xa0/g;
+ $elem_text->[2] = $markup{label} . $label . $markup{link} . $elem_text->[2] . $markup{normal};
+ push @{$self->{elements}}, $elem_text;
+ }
+ else {
+ die "$self->{file} line $line, <$tag>: neither 'name' nor 'href' attribute\n";
+ }
+ }
+ else {
+ die "$self->{file} line $line, <$tag>: unsupported element\n";
+ }
+
+ $self->{state}{$tag}--;
+ }
+
+ sub pop_elements
+ {
+ my ($self, $tag, $tag_limit) = @_;
+ my ($elem, $line, $all, $x);
+
+ return undef if @{$self->{elements}} == 0;
+
+ $line = $self->{elements}[-1][3];
+
+ while(defined($elem = pop @{$self->{elements}})) {
+ if($elem->[0] eq $tag) {
+ $all->[0] = $elem->[0];
+ $all->[1] = $elem->[1];
+ $x = $elem->[2];
+ $x = "" if $x =~ /^\s*$/;
+ $all->[2] = $x . $all->[2];
+ $all->[3] = $elem->[3];
+ next;
+ }
+ if(!defined($tag_limit) || $elem->[0] eq $tag_limit) {
+ push @{$self->{elements}}, $elem;
+ last;
+ }
+ }
+
+ # for tag 'text': always return something
+
+ if($tag eq 'text') {
+ if(defined $all) {
+ $all->[2] =~ s/(^\s*|\s*$)//g;
+ $all->[2] =~ s/\s+/ /g;
+ $all->[2] = "" if $all->[2] eq " ";
+ }
+ else {
+ $all = [ 'text' ];
+ }
+ }
+ else {
+ die "$self->{file} line $line, <$tag>: no start found\n" unless defined $all;
+ }
+
+ return $all;
+ }
+
+ sub set_used
+ {
+ my $self = shift;
+ local $_;
+
+ $self->{ref}{$_}++ for @_;
+ }
+}
+
+
+
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+#
+use strict qw ( subs vars );
+
+use Getopt::Long;
+
+sub usage;
+sub unpack_it;
+sub check_root;
+sub susystem;
+sub preview;
+sub has_command;
+sub check_vm;
+sub read_grub_menu;
+sub read_lilo_menu;
+sub fake_menu;
+sub prepare_grub;
+sub prepare_lilo;
+sub prepare_isolinux;
+sub prepare_syslinux;
+sub prepare_pxelinux;
+sub prepare_qemu;
+sub run_qemu;
+sub prepare_vbox;
+sub run_vbox;
+sub run_vboxsdl;
+sub prepare_vmware;
+sub run_vmplayer;
+sub run_vmware;
+sub prepare_bd;
+sub run_bd;
+sub prepare_bochs;
+sub run_bochs;
+sub find_free_loop;
+sub show_config;
+sub is_cpio;
+sub is_gfxcode;
+sub unpack_archive;
+sub pack_archive;
+sub update_archive;
+sub read_gfxboot_config;
+sub write_gfxboot_config;
+sub change_config;
+sub rm_config;
+sub rm_section;
+sub add_files;
+sub rm_files;
+sub extract_files;
+sub update_theme;
+sub short_locale;
+sub add_languages;
+sub rm_languages;
+sub default_language;
+sub get_theme;
+sub unpack_rpm;
+sub create_vmdk;
+
+my $opt_verbose = 0;
+my $opt_preview = 0;
+my $opt_gfxarchive = "/boot/message";
+my $opt_bootloader;
+my $opt_vm = "qemu64";
+my $opt_savetemp = 0;
+my $opt_grub = "/";
+my $opt_lilo = "/";
+my $opt_syslinux = "/";
+my $opt_password = undef;
+my $opt_showconfig = 0;
+my @opt_changeconfig;
+my @opt_rmconfig;
+my @opt_rmsection;
+my $opt_test = 0;
+my $opt_ls = 0;
+my @opt_addfiles;
+my @opt_rmfiles;
+my @opt_test_addfiles;
+my @opt_test_rmfiles;
+my @opt_extractfiles;
+my $opt_showfile;
+my $opt_theme;
+my $opt_theme_update;
+my @opt_addlanguages;
+my @opt_rmlanguages;
+my $opt_defaultlanguage;
+my $opt_gfxboot_cfg;
+my $opt_expand_archive;
+my $opt_pack_archive;
+my $opt_32;
+my $opt_64;
+my $opt_media;
+my $opt_save_image;
+my $opt_help_create;
+my $opt_help_show;
+my $opt_help_navi;
+my @opt_help_used;
+my %opt_help_entity;
+my $opt_no_unpack = 0;
+my $opt_mem = 512;
+my $opt_efi;
+
+my $sudo;
+my %config;
+my $work_dir;
+my $work_dir2;
+my $work_archive_name;
+my $write_archive = 0;
+my $new_archive;
+my $theme_dir;
+my $theme_archive;
+my $preview_image;
+
+my %vm_list = (
+ 'qemu' => { cmd => 'qemu', package => 'qemu' },
+ 'qemu-kvm' => { cmd => 'qemu-kvm', package => 'kvm' },
+ 'qemu-i386' => { cmd => 'qemu-system-i386', package => 'qemu' },
+ 'qemu-x86_64' => { cmd => 'qemu-system-x86_64', package => 'qemu' },
+ 'qemu32' => { cmd => 'qemu-system-i386', package => 'qemu' },
+ 'qemu64' => { cmd => 'qemu-system-x86_64', package => 'qemu' },
+ 'vbox' => { cmd => 'VBoxManage', package => 'virtualbox' },
+ 'vbox64' => { cmd => 'VBoxManage', package => 'virtualbox' },
+ 'vboxsdl' => { cmd => 'VBoxSDL', package => 'virtualbox' },
+ 'vmplayer' => { cmd => 'vmplayer', package => 'vmware-player' },
+ 'vmware' => { cmd => 'vmware', package => 'VMwareWorkstation' },
+ 'bd' => { cmd => 'bd' },
+ 'bochs' => { cmd => 'bochs', package => 'bochs' },
+);
+
+my @vm_order = qw ( qemu64 qemu32 qemu qemu-kvm vbox vbox64 vboxsdl vmplayer vmware bochs );
+
+my %bl_list = (
+ grub => '/usr/sbin/grub',
+ lilo => '/sbin/lilo',
+ isolinux => '/usr/share/syslinux/isolinux.bin',
+ syslinux => '/usr/bin/syslinux',
+ pxelinux => '/usr/share/syslinux/pxelinux.0',
+ bd => '/usr/bin/bd',
+ bochs => '/usr/bin/bochs',
+);
+
+usage 0 if !@ARGV;
+
+GetOptions(
+ 'help' => sub { usage 0 },
+ 'version' => sub { print "<VERSION>\n" ; exit 0 },
+ 'archive|a=s' => \$opt_gfxarchive,
+ 'config-file=s' => \$opt_gfxboot_cfg,
+ 'verbose|v+' => \$opt_verbose,
+ 'preview|p' => \$opt_preview,
+ 'test|t' => \$opt_test,
+ 'save-temp' => \$opt_savetemp,
+ 'bootloader|b=s' => \$opt_bootloader,
+ 'vm|m=s' => \$opt_vm,
+ 'grub=s' => \$opt_grub,
+ 'lilo=s' => \$opt_lilo,
+ 'isolinux=s' => \$opt_syslinux,
+ 'syslinux=s' => \$opt_syslinux,
+ 'pxelinux=s' => \$opt_syslinux,
+ 'password=s' => \$opt_password,
+ 'show-config' => \$opt_showconfig,
+ 'change-config=s{1,}' => \@opt_changeconfig,
+ 'rm-config=s{1,}' => \@opt_rmconfig,
+ 'rm-section=s{1,}' => \@opt_rmsection,
+ 'list-files|ls' => \$opt_ls,
+ 'add-files=s{1,}' => \@opt_addfiles,
+ 'rm-files=s{1,}' => \@opt_rmfiles,
+ 'test-add-files=s{1,}' => \@opt_test_addfiles,
+ 'test-rm-files=s{1,}' => \@opt_test_rmfiles,
+ 'extract-files=s{1,}' => \@opt_extractfiles,
+ 'show-file=s' => \$opt_showfile,
+ 'new-theme=s' => sub { $opt_theme = $_[1]; $opt_theme_update = 0 },
+ 'update-theme=s' => sub { $opt_theme = $_[1]; $opt_theme_update = 1 },
+ 'add-languages=s{1,}' => \@opt_addlanguages,
+ 'rm-languages=s{1,}' => \@opt_rmlanguages,
+ 'default-language=s' => \$opt_defaultlanguage,
+ 'expand-archive=s' => \$opt_expand_archive,
+ 'pack-archive=s' => \$opt_pack_archive,
+ 'cdrom|dvd' => sub { $opt_media = 'cdrom' },
+ 'disk' => sub { $opt_media = 'disk' },
+ 'floppy' => sub { $opt_media = 'floppy' },
+ 'net' => sub { $opt_media = 'net' },
+ 'biarch' => sub { $opt_32 = $opt_64 = 1 },
+ '32' => \$opt_32,
+ '64' => \$opt_64,
+ 'save-image=s' => \$opt_save_image,
+ 'help-create=s' => \$opt_help_create,
+ 'help-show=s' => \$opt_help_show,
+ 'used-pages=s{1,}' => \@opt_help_used,
+ 'navi=s' => \$opt_help_navi,
+ 'define=s%{1,}' => \%opt_help_entity,
+ 'no-unpack' => \$opt_no_unpack,
+ 'mem=i' => \$opt_mem,
+ 'efi' => sub { $opt_efi = 64 },
+ 'efi64' => sub { $opt_efi = 64 },
+ 'efi32' => sub { $opt_efi = 32 },
+) || usage 1;
+
+$ENV{PATH} = "/sbin:/usr/sbin:/bin:/usr/bin:/usr/local/bin";
+
+if(open F, "$ENV{HOME}/.gfxbootrc") {
+ while(<F>) {
+ if(/^(\S+?)=\"(.*)\"\s*$/) {
+ $config{$1} = $2;
+ }
+ }
+ close F;
+}
+
+if($config{sudo}) {
+ $sudo = $config{sudo};
+ $sudo =~ s/\s*$/ /;
+}
+
+if($opt_help_show) {
+ usage 1 if @ARGV;
+ print Help::new()->decode_file($opt_help_show);
+ exit 0;
+}
+
+if($opt_help_create) {
+ usage 1 if !@ARGV;
+
+ my $help = Help::new;
+ $help->navi($opt_help_navi) if $opt_help_navi;
+
+ $opt_help_entity{product} = 'Linux' unless exists $opt_help_entity{product};
+ $help->set_entity($_, $opt_help_entity{$_}) for (sort keys %opt_help_entity);
+ $help->set_used(@opt_help_used) if @opt_help_used;
+ $help->add_html($_) for (@ARGV);
+ $help->check;
+ exit $help->write($opt_help_create);
+}
+
+
+
+my $gfxboot_tmp = Tmp::new($opt_savetemp);
+
+if(!$vm_list{$opt_vm}) {
+ $_ = join ', ', sort keys %vm_list;
+ die "$opt_vm: unsupported virtual machine; use one of\n $_\n";
+}
+
+# we'll need a bootloader
+if($opt_preview) {
+ if(!$opt_bootloader) {
+ if(open F, "/etc/sysconfig/bootloader") {
+ while(<F>) {
+ if(/^LOADER_TYPE=\"(grub|lilo)\"/) {
+ $opt_bootloader = $1;
+ last;
+ }
+ }
+ close F;
+ }
+ }
+
+ die "please use '--bootloader' to select a bootloader\n" if !$opt_bootloader;
+
+ if(!$bl_list{$opt_bootloader}) {
+ $_ = join ', ', sort keys %bl_list;
+ die "$opt_bootloader: unsupported boot loader; use one of\n $_\n";
+ }
+}
+
+if($opt_expand_archive) {
+ die "$opt_expand_archive: not a directory\n" unless -d $opt_expand_archive;
+ unpack_it 1;
+ $opt_gfxarchive = $opt_expand_archive;
+}
+
+if($opt_pack_archive) {
+ die "$opt_pack_archive: is a directory\n" if -d $opt_pack_archive;
+ unpack_it 1;
+ $opt_gfxarchive = $opt_pack_archive;
+}
+
+if(@opt_extractfiles) {
+ unpack_it 0;
+ extract_files $work_dir;
+}
+
+if($opt_theme) {
+ $theme_dir = "/etc/bootsplash/themes/$opt_theme/bootloader";
+ $theme_archive = "$theme_dir/message";
+ die "$opt_theme: no such theme\n" unless -f $theme_archive;
+ $write_archive = 1;
+ ( $work_dir, $work_archive_name ) = unpack_archive $theme_archive unless $work_dir;
+ if($opt_theme_update && -e $opt_gfxarchive) {
+ ( $work_dir2, $work_archive_name )= unpack_archive $opt_gfxarchive;
+ update_theme $opt_theme, $theme_dir, $work_dir, $work_dir2;
+ }
+}
+
+if(@opt_addlanguages) {
+ unpack_it 1;
+ add_languages $work_dir;
+}
+
+if(@opt_rmlanguages) {
+ unpack_it 1;
+ rm_languages $work_dir;
+}
+
+if($opt_defaultlanguage) {
+ unpack_it 1;
+ system "echo '$opt_defaultlanguage' >$work_dir/lang";
+}
+
+if(@opt_addfiles) {
+ unpack_it 1;
+ add_files $work_dir;
+}
+
+if(@opt_rmfiles) {
+ unpack_it 1;
+ rm_files $work_dir;
+}
+
+if($opt_ls) {
+ unpack_it 0;
+ system "cd $work_dir ; ls -l | grep -v ^total";
+}
+
+if($opt_showfile) {
+ unpack_it 0;
+ system "cd $work_dir ; cat $opt_showfile";
+}
+
+if(@opt_rmsection) {
+ if($opt_gfxboot_cfg) {
+ rm_section;
+ }
+ else {
+ unpack_it 1;
+ rm_section $work_dir;
+ }
+}
+
+if(@opt_rmconfig) {
+ if($opt_gfxboot_cfg) {
+ rm_config;
+ }
+ else {
+ unpack_it 1;
+ rm_config $work_dir;
+ }
+}
+
+if(@opt_changeconfig) {
+ if($opt_gfxboot_cfg) {
+ change_config;
+ }
+ else {
+ unpack_it 1;
+ change_config $work_dir;
+ }
+}
+
+if($opt_showconfig) {
+ if($opt_gfxboot_cfg) {
+ show_config;
+ }
+ else {
+ unpack_it 0;
+ show_config $work_dir;
+ }
+}
+
+if($write_archive) {
+ $new_archive = pack_archive $work_dir;
+}
+
+if($opt_preview) {
+ preview $new_archive ? $new_archive : $opt_gfxarchive, $opt_bootloader;
+}
+
+if($new_archive && !$opt_test) {
+ update_archive $new_archive, $opt_gfxarchive;
+}
+
+if($opt_save_image && $preview_image) {
+ if(-f $preview_image) {
+ system "cp $preview_image $opt_save_image";
+ }
+ else {
+ system "cp -a $preview_image $opt_save_image";
+ }
+}
+
+
+sub usage
+{
+ my $err = shift;
+
+ if($err) {
+ print STDERR "Try 'gfxboot --help' for more information.\n";
+
+ exit $err;
+ }
+
+ print <<" usage";
+Usage: gfxboot [OPTIONS] ARGS
+Graphical boot screen test and config tool.
+
+General options:
+
+ -a, --archive FILE|DIRECTORY Use FILE as gfxboot archive (default is /boot/message).
+ If it points to a directory, assume it is an expanded archive
+ (see --expand-archive option below).
+ -v, --verbose Increase verbosity.
+ --save-temp Keep temporary files.
+ --version Show gfxboot version.
+ --help Write this help text.
+
+Switching themes:
+
+ --new-theme THEME Activate THEME. Theme files are stored in
+ /etc/bootsplash/themes/THEME/bootloader.
+ --update-theme THEME Activate THEME but keep language settings from
+ current gfxboot archive.
+
+Changing gfxboot config:
+
+ --show-config Show gfxboot config file (gfxboot.cfg).
+ --change-config [SECTION1::]OPTION1=FOO1 [SECTION2::]OPTION2=FOO2 ...
+ Change gfxboot config options. If sections are omitted,
+ section "base" is used.
+ --rm-config [SECTION1::]OPTION1 [SECTION2::]OPTION2 ...
+ Delete gfxboot config options. If sections are omitted,
+ section "base" is used.
+ --rm-section SECTION1 SECTION2 ...
+ Delete sections in gfxboot config file.
+ --default-language LANG Make LANG the default language. LANG is a
+ locale string (e.g. en_US).
+ --add-languages LANG1 LANG2 ...
+ Add translation files.
+ --rm-languages LANG1 LANG2 ...
+ Remove translation files.
+ --config-file FILE Don't work on gfxboot.cfg from gfxboot archive but on FILE.
+ NOTE: FILE will be modified even with "--test".
+
+Preview/test gfxboot setup:
+
+ -p, --preview Try current config (needs some virtual machine).
+ -t, --test Test only (don't actually change any files).
+ -b, --bootloader BOOTLOADER Use BOOTLOADER (grub, lilo, isolinux, syslinux, pxelinux) for
+ preview.
+ -m, --vm VM Use virtual machine VM (bochs, qemu, qemu32, qemu64,
+ vbox, vbox64, vmplayer, vmware) for preview.
+ --grub DIRECTORY|RPM Use grub from DIRECTORY or RPM (default is /).
+ --lilo DIRECTORY|RPM Use lilo from DIRECTORY or RPM (default is /).
+ --syslinux DIRECTORY|RPM Use syslinux from DIRECTORY or RPM (default is /).
+ --isolinux DIRECTORY|RPM Use isolinux from DIRECTORY or RPM (default is /).
+ --pxelinux DIRECTORY|RPM Use pxelinux from DIRECTORY or RPM (default is /).
+ --password PASSWORD Create test config with PASSWORD for preview.
+ --32 Create 32 bit test image.
+ --64 Create 64 bit test image.
+ --biarch Create biarch test image (same as using --32 and --64).
+ --cdrom, --dvd Create iso image for preview.
+ --disk Create harddisk image for preview.
+ --floppy Create floppy image for preview.
+ --net Create tftp directory for preview.
+ --save-image FILE Copy preview image to FILE.
+ --test-add-files FILE1 FILE2 ...
+ Add files to test directory.
+ --test-rm-files FILE1 FILE2 ...
+ Delete files from test directory.
+
+Adding/removing files from gfxboot archive:
+
+ --ls, --list-files List gfxboot archive files.
+ --add-files FILE1 FILE2 ...
+ Add files to gfxboot archive.
+ --rm-files FILE1 FILE2 ...
+ Delete files from gfxboot archive.
+ --extract-files FILE1 FILE2 ...
+ Copy files from gfxboot archive to current
+ working directory.
+ --show-file FILE Print FILE.
+ --expand-archive DIRECTORY
+ Create expanded gfxboot archive version in DIRECTORY.
+ That is, only files that cannot be read directly from
+ file system are kept in a cpio archive. All others are
+ unpacked. Use only for isolinux, syslinux, or pxelinux.
+ --pack-archive FILE Pack all gfxboot files into cpio archive FILE.
+
+Modifying help files:
+
+ --help-show FILE Print FILE (internal help file format) as HTML.
+ --help-create FILE Convert HTML files passed as ARGS to FILE (internal format).
+ --used-pages LINK1 LINK2 ...
+ Mark pages as referenced.
+ --navi FILE Use FILE as template for navigation links.
+ --define ENTITY1=VALUE1 ENTITY2=VALUE2 ...
+ Define ENTITYx with VALUEx.
+
+ usage
+
+ exit $err;
+}
+
+
+sub unpack_it
+{
+ $write_archive = 1 if $_[0];
+ ( $work_dir, $work_archive_name ) = unpack_archive $opt_gfxarchive unless $work_dir;
+}
+
+
+sub check_root
+{
+ my $p;
+ my $msg = shift;
+
+ if(!$>) {
+ undef $sudo;
+ return;
+ }
+
+ chomp($p = `bash -c 'type -p $sudo'`) if $sudo;
+
+ $msg = "sorry, you must be root" if $msg eq "";
+
+ die "$msg\n" if $p eq "";
+}
+
+
+sub susystem
+{
+ system $sudo . $_[0];
+}
+
+
+sub preview
+{
+ local $_;
+
+ my $file = shift;
+ my $bootloader = shift;
+ my $vm_env;
+
+ check_vm;
+
+ print "vm: using $opt_vm\n" if $opt_verbose;
+
+ if($bootloader eq 'grub') {
+ $vm_env->{hd0} = prepare_grub $file;
+ $vm_env->{hds} = 1;
+ $vm_env->{boot} = 'hd';
+ $preview_image = $vm_env->{hd0}{image_name};
+ }
+ elsif($bootloader eq 'lilo') {
+ $vm_env->{hd0} = prepare_lilo $file;
+ $vm_env->{hds} = 1;
+ $vm_env->{boot} = 'hd';
+ $preview_image = $vm_env->{hd0}{image_name};
+ }
+ elsif($bootloader eq 'isolinux') {
+ $vm_env->{cd0} = prepare_isolinux $file;
+ $vm_env->{cds} = 1;
+ $vm_env->{boot} = 'cd';
+ $preview_image = $vm_env->{cd0}{image_name};
+ }
+ elsif($bootloader eq 'syslinux') {
+ $vm_env->{hd0} = prepare_syslinux $file;
+ $vm_env->{hds} = 1;
+ $vm_env->{boot} = 'hd';
+ $preview_image = $vm_env->{hd0}{image_name};
+ }
+ elsif($bootloader eq 'pxelinux') {
+ $vm_env->{tftp} = prepare_pxelinux $file;
+ $vm_env->{boot} = 'net';
+ $preview_image = $vm_env->{tftp}{image_name};
+ }
+ else {
+ return;
+ }
+
+ if($opt_vm =~ /^qemu(|32|64|-kvm|-i386|-x86_64)$/) {
+ prepare_qemu $vm_env;
+ run_qemu $vm_env;
+ }
+ elsif($opt_vm eq 'vbox') {
+ prepare_vbox $vm_env;
+ run_vbox $vm_env;
+ }
+ elsif($opt_vm eq 'vbox64') {
+ prepare_vbox $vm_env, 1;
+ run_vbox $vm_env;
+ }
+ elsif($opt_vm eq 'vboxsdl') {
+ prepare_vbox $vm_env;
+ run_vboxsdl $vm_env;
+ }
+ elsif($opt_vm eq 'vmplayer') {
+ prepare_vmware $vm_env;
+ run_vmplayer $vm_env;
+ }
+ elsif($opt_vm eq 'vmware') {
+ prepare_vmware $vm_env;
+ run_vmware $vm_env;
+ }
+ elsif($opt_vm eq 'bd') {
+ prepare_bd $vm_env;
+ run_bd $vm_env;
+ }
+ elsif($opt_vm eq 'bochs') {
+ prepare_bochs $vm_env;
+ run_bochs $vm_env;
+ }
+}
+
+
+sub has_command
+{
+ return `which $_[0] 2>/dev/null` ? 1 : 0;
+}
+
+
+sub check_vm
+{
+ local $_;
+ my %vms;
+
+ return if has_command $vm_list{$opt_vm}{cmd};
+
+ for (@vm_order) {
+ if(has_command $vm_list{$_}{cmd}) {
+ $opt_vm = $_;
+ return;
+ }
+ }
+
+ $vms{$vm_list{$_}{package}} = 1 for (keys %vm_list);
+
+ die
+ "No supported virtual machine found. Please install one of:\n " .
+ join(', ', grep { $_ } sort keys %vms) .
+ "\n";
+}
+
+
+sub read_grub_menu
+{
+ local $_;
+ my ($menu, $default);
+
+ print STDERR "/boot/grub/menu.lst: $!\n" unless open ML, "${sudo}cat /boot/grub/menu.lst 2>/dev/null |";
+
+ while(<ML>) {
+ push @{$menu->{list}}, $1 if /^\s*title\s+(.+?)\s*$/;
+ $default = $1 + 0 if /^\s*default\s+(\d+)/;
+ }
+
+ close ML;
+
+ return $menu unless $menu;
+
+ $default = 0 unless $default < @{$menu->{list}};
+
+ $menu->{default} = $default;
+
+ return $menu;
+}
+
+
+sub read_lilo_menu
+{
+ local $_;
+ my ($menu, $default, $i);
+
+ print STDERR "/etc/lilo.conf: $!\n" unless open ML, "${sudo}cat /etc/lilo.conf 2>/dev/null |";
+
+ while(<ML>) {
+ push @{$menu->{list}}, $1 if /^\s*label\s*=\s*(.+?)\s*$/;
+ $default = $1 if /^\s*default\s*=\s*(.+?)\s*$/;
+ }
+
+ close ML;
+
+ return $menu unless $menu;
+
+ @{$menu->{list}} = map { /^"(.*)"$/ ? $1 : $_ } (@{$menu->{list}});
+ $default = $1 if $default =~ /^"(.*)"$/;
+
+ $menu->{default} = 0;
+
+ $i = 0;
+ for (@{$menu->{list}}) {
+ if(/^${default}$/i) {
+ $menu->{default} = $i;
+ last;
+ }
+ $i++;
+ }
+
+ return $menu;
+}
+
+
+sub fake_menu
+{
+ my $type = shift;
+ my $menu;
+
+ if($type eq 'install') {
+ $menu->{list} = [ 'harddisk', 'linux', 'repair', 'rescue', 'mediachk', 'firmware', 'memtest' ];
+ $menu->{default} = 0;
+ }
+ else {
+ $menu->{list} = [ 'Linux1', 'Linux2', 'Linux3' ];
+ $menu->{default} = 0;
+ }
+
+ return $menu;
+}
+
+
+sub prepare_grub
+{
+ local $_;
+ my $file = shift;
+
+ die "Can't setup grub on $opt_media.\n" if $opt_media && $opt_media ne 'disk';
+
+ $opt_grub = unpack_rpm $opt_grub if -f $opt_grub;
+
+ die "error: grub not found\n" unless -x "$opt_grub/$bl_list{grub}";
+
+ my $menu = read_grub_menu;
+ $menu = read_lilo_menu unless $menu;
+ $menu = fake_menu unless $menu;
+
+ if($opt_verbose) {
+ print "menu items (default $menu->{default}):\n";
+ print " $_\n" for (@{$menu->{list}});
+ }
+
+ my $dst = $gfxboot_tmp->dir('grub');
+ my $img = $gfxboot_tmp->file('grub.img');
+
+ mkdir "$dst/boot", 0755;
+ mkdir "$dst/boot/grub", 0755;
+
+ system "cp $opt_grub/usr/lib/grub/{fat_stage1_5,stage1,stage2} $dst/boot/grub" and die "error: no grub\n";
+ system "cp $file $dst/boot/message";
+
+ system "cp /boot/vmlinuz $dst/boot" if -f "/boot/vmlinuz";
+ system "cp /boot/initrd $dst/boot" if -f "/boot/initrd";
+
+ open F, ">$dst/boot/grub/device.map";
+ print F "(hd0) $img\n";
+ close F;
+
+ open F, ">$dst/boot/grub/menu.lst";
+ print F "default $menu->{default}\ntimeout 20\ngfxmenu (hd0,0)/boot/message\n\n";
+
+ for (@{$menu->{list}}) {
+ print F "title $_\n root (hd0,0)\n kernel /boot/vmlinuz\n initrd /boot/initrd\n\n"
+ }
+ close F;
+
+ for (@opt_test_addfiles) {
+ system "cp -r $_ $dst/boot" and die "error copying file: $_\n";
+ }
+
+ for (@opt_test_rmfiles) {
+ s#^/+##;
+ system "cd $dst/boot ; rm -f $_" and die "error deleting file: $_\n";
+ }
+
+ my $img_size = `du -s --apparent-size --block-size 1k $dst 2>/dev/null`;
+ $img_size = $img_size =~ /^(\d+)/ ? $1 * 2 + 2 * 200 : 0; # add 200k
+
+ my $hdimage = HDImage::new;
+ $hdimage->verbose($opt_verbose);
+ $hdimage->chs(0, 4, 16);
+ $hdimage->size($img_size);
+ $hdimage->type(1);
+ $hdimage->label('GFXBOOT');
+ $hdimage->fs('fat');
+ $hdimage->mbr('/usr/lib/boot/master-boot-code');
+ $hdimage->add_files(<$dst/*>);
+ $hdimage->write($img);
+
+ my $log = $gfxboot_tmp->file('grub.log');
+
+ open F, "| $opt_grub/usr/sbin/grub --batch --config-file=$dst/boot/grub/menu.lst --device-map=$dst/boot/grub/device.map >$log 2>&1";
+ print F "setup --prefix=/boot/grub (hd0,0) (hd0,0)\n";
+ close F;
+
+ print `cat $log`, "\n" if $opt_verbose >= 2;
+
+ return $hdimage;
+}
+
+
+sub prepare_lilo
+{
+ local $_;
+ my $file = shift;
+ my $no_initrd;
+
+ die "Can't setup lilo on $opt_media.\n" if $opt_media && $opt_media ne 'disk';
+
+ $opt_lilo = unpack_rpm $opt_lilo if -f $opt_lilo;
+
+ die "error: lilo not found\n" unless -x "$opt_lilo/$bl_list{lilo}";
+
+ check_root "Cannot setup lilo; you need root privileges.";
+
+ my $menu = read_lilo_menu;
+ $menu = read_grub_menu unless $menu;
+ $menu = fake_menu unless $menu;
+
+ # lilo-ize menu items
+ map { s/\s.*//; $_ = substr $_, 0, 15 } @{$menu->{list}};
+
+ if($opt_verbose) {
+ print "menu items (default $menu->{default}):\n";
+ print " $_\n" for (@{$menu->{list}});
+ }
+
+ my $loop1 = find_free_loop;
+ my $loop2 = find_free_loop $loop1;
+
+ print "loop devices: using $loop1 & $loop2\n" if $opt_verbose;
+
+ my $dst = $gfxboot_tmp->dir('lilo');
+ my $img = $gfxboot_tmp->file('lilo.img');
+ my $mp = $gfxboot_tmp->dir('mount');
+
+ mkdir "$dst/boot", 0755;
+
+ system "cp $file $dst/boot/message";
+
+ if(-f "/boot/vmlinuz") {
+ system "cp /boot/vmlinuz $dst/boot";
+ }
+ else {
+ system "dd if=/dev/zero bs=100k count=1 of=$dst/boot/vmlinuz 2>/dev/null";
+ $no_initrd = "# ";
+ }
+ if(-f "/boot/initrd") {
+ system "cp /boot/initrd $dst/boot";
+ }
+ else {
+ system "dd if=/dev/zero bs=100k count=1 of=$dst/boot/initrd 2>/dev/null";
+ }
+
+ my $pw = "";
+ $pw = "password = \"$opt_password\"\n restricted\n" if defined $opt_password;
+
+ open F, ">$dst/boot/lilo.conf";
+ print F <<" lilo_conf";
+ boot = $loop2
+ disk = $loop1
+ bios = 0x80
+ sectors = 16
+ heads = 4
+ cylinders = 1023
+ partition = $loop2
+ start = 16
+ vga = normal
+ change-rules reset
+ read-only
+ prompt
+ lba32
+ timeout = 600
+ message = $mp/boot/message
+ $pw
+ default = $menu->{list}[$menu->{default}]
+
+ lilo_conf
+
+ for (@{$menu->{list}}) {
+ print F " image = $mp/boot/vmlinuz\n label = $_\n ${no_initrd}initrd = $mp/boot/initrd\n\n"
+ }
+ close F;
+
+ for (@opt_test_addfiles) {
+ system "cp -r $_ $dst/boot" and die "error copying file: $_\n";
+ }
+
+ for (@opt_test_rmfiles) {
+ s#^/+##;
+ system "cd $dst/boot ; rm -f $_" and die "error deleting file: $_\n";
+ }
+
+ my $msg_size = `du -s --apparent-size --block-size 1k $dst/boot/message 2>/dev/null`;
+ $msg_size = $msg_size =~ /^(\d+)/ ? $1 * 2 : 0;
+ my $img_size = `du -s --apparent-size --block-size 1k $dst 2>/dev/null`;
+ $img_size = $img_size =~ /^(\d+)/ ? $1 * 2 + $msg_size + 2 * 500 : 0; # add 500k
+
+ my $hdimage = HDImage::new;
+ $hdimage->verbose($opt_verbose);
+ $hdimage->chs(0, 4, 16); # see lilo.conf above!
+ $hdimage->size($img_size);
+ $hdimage->type(1);
+ $hdimage->label('GFXBOOT');
+ $hdimage->fs('fat');
+ $hdimage->mbr('/usr/lib/boot/master-boot-code');
+ $hdimage->add_files(<$dst/*>);
+ $hdimage->write($img);
+
+ my $log = $gfxboot_tmp->file('lilo.log');
+
+ susystem "mount -oloop=$loop2,offset=" . $hdimage->partition_ofs * 512 . " $img $mp";
+ die "error: mount failed\n" if $?;
+ susystem "losetup $loop1 $img";
+ susystem "$opt_lilo/sbin/lilo -v -w -C $mp/boot/lilo.conf -m $mp/boot/map >$log 2>&1";
+ susystem "losetup -d $loop1";
+ susystem "umount $mp";
+
+ print `cat $log`, "\n" if $opt_verbose >= 2;
+
+ return $hdimage;
+}
+
+
+sub prepare_isolinux
+{
+ local $_;
+ my $file = shift;
+ my $cdimage;
+ my $arch_dir;
+ my $comboot;
+
+ die "Can't setup isolinux on $opt_media.\n" if $opt_media && $opt_media ne 'cdrom';
+
+ $opt_syslinux = unpack_rpm $opt_syslinux if -f $opt_syslinux;
+
+ die "error: isolinux not found\n" unless -f "$opt_syslinux/$bl_list{isolinux}";
+
+ $arch_dir = 'i386';
+ $arch_dir = 'x86_64' if $opt_64 && !$opt_32;
+
+ $comboot = "$opt_syslinux/usr/share/syslinux/gfxboot.c32";
+ $comboot = "$opt_syslinux/usr/share/syslinux/gfxboot.com" unless -f $comboot;
+ $comboot = 0 unless -f $comboot;
+
+ my $menu = fake_menu 'install';
+
+ if($opt_verbose) {
+ print "menu items (default $menu->{default}):\n";
+ print " $_\n" for (@{$menu->{list}});
+ }
+
+ my $dst = $gfxboot_tmp->dir('isolinux');
+ my $img = $gfxboot_tmp->file('isolinux.iso');
+
+ my $loader = "";
+ if(-x "$opt_syslinux/usr/bin/isolinux-config") {
+ $loader = "boot/$arch_dir/loader/";
+
+ mkdir "$dst/boot", 0755;
+ mkdir "$dst/boot/$arch_dir", 0755;
+ mkdir "$dst/boot/$arch_dir/loader", 0755;
+ }
+
+ if($opt_no_unpack) {
+ system "cp -a $file $dst/${loader}/bootlogo";
+ }
+ else {
+ my $bl_unpacked;
+ ( $bl_unpacked ) = unpack_archive $file;
+ my $bl_packed = pack_archive $bl_unpacked, 'bootlogo';
+ system "cp -a $bl_packed/* $dst/${loader}";
+ }
+
+ system "cp /boot/vmlinuz $dst/${loader}linux" if -f "/boot/vmlinuz";
+ system "cp /boot/initrd $dst/${loader}initrd" if -f "/boot/initrd";
+
+ if(! -f "$dst/${loader}message") {
+ open F, ">$dst/${loader}message";
+ print F "\x0cgfxboot didn't work? Try one of those:\n";
+ print F " $_\n" for (@{$menu->{list}});
+ print F "\n";
+ close F;
+ }
+
+ if(! -f "$dst/${loader}isolinux.cfg") {
+ open F, ">$dst/${loader}isolinux.cfg";
+ print F "default $menu->{list}[$menu->{default}]\n\n";
+
+ for (@{$menu->{list}}) {
+ print F "label $_\n";
+ if($_ eq 'harddisk') {
+ print F " localboot 0x80\n\n";
+ }
+ elsif($_ eq 'memtest' && -f("$dst/${loader}memtest")) {
+ print F " kernel memtest\n\n";
+ }
+ else {
+ print F " kernel linux\n append initrd=initrd splash=silent showopts\n\n";
+ }
+ }
+
+ print F $comboot ? "ui gfxboot bootlogo message\n" : "gfxboot bootlogo\ndisplay message\n";
+
+ print F
+ "implicit 1\n" .
+ "prompt 1\n" .
+ "timeout 600\n";
+
+ close F;
+ }
+
+ system "cp $opt_syslinux/usr/share/syslinux/isolinux.bin $dst/$loader" and die "error: no isolinux\n";
+ system "cp $comboot $dst/$loader" if $comboot;
+
+ for (@opt_test_addfiles) {
+ system "cp -r $_ $dst/${loader}" and die "error copying file: $_\n";
+ }
+
+ for (@opt_test_rmfiles) {
+ s#^/+##;
+ system "cd $dst/${loader} ; rm -f $_" and die "error deleting file: $_\n";
+ }
+
+ if($loader ne "") {
+ system "$opt_syslinux/usr/bin/isolinux-config --base=/boot/$arch_dir/loader $dst/${loader}isolinux.bin" .
+ ($opt_verbose ? "" : " >/dev/null");
+ }
+
+ if($opt_32 && $opt_64) {
+ symlink "i386", "$dst/boot/x86_64" if -d "$dst/boot/i386";
+ }
+
+ system "genisoimage" . ($opt_verbose ? "" : " --quiet") .
+ " -o $img -f -r -no-emul-boot -boot-load-size 4 -boot-info-table" .
+ " -b ${loader}isolinux.bin -hide boot.catalog $dst";
+
+ $cdimage->{image_name} = $img;
+ $cdimage->{size} = (-s $img) >> 10;
+
+ return $cdimage;
+}
+
+
+sub prepare_syslinux
+{
+ local $_;
+ my $file = shift;
+ my $comboot;
+
+ die "Can't setup syslinux on $opt_media.\n" if $opt_media && $opt_media ne 'disk';
+
+ $opt_syslinux = unpack_rpm $opt_syslinux if -f $opt_syslinux;
+
+ die "error: syslinux not found\n" unless -f "$opt_syslinux/$bl_list{syslinux}";
+
+ $comboot = "$opt_syslinux/usr/share/syslinux/gfxboot.c32";
+ $comboot = "$opt_syslinux/usr/share/syslinux/gfxboot.com" unless -f $comboot;
+ $comboot = 0 unless -f $comboot;
+
+ my $menu = fake_menu 'install';
+
+ if($opt_verbose) {
+ print "menu items (default $menu->{default}):\n";
+ print " $_\n" for (@{$menu->{list}});
+ }
+
+ my $dst = $gfxboot_tmp->dir('syslinux');
+ my $img = $gfxboot_tmp->file('syslinux.img');
+
+ if($opt_no_unpack) {
+ system "cp -a $file $dst/bootlogo";
+ }
+ else {
+ my $bl_unpacked;
+ ( $bl_unpacked ) = unpack_archive $file;
+ my $bl_packed = pack_archive $bl_unpacked, 'bootlogo';
+ system "cp -a $bl_packed/* $dst";
+ }
+
+ system "cp /boot/vmlinuz $dst/linux" if -f "/boot/vmlinuz";
+ system "cp /boot/initrd $dst/initrd" if -f "/boot/initrd";
+
+ if(! -f "$dst/message") {
+ open F, ">$dst/message";
+ print F "\x0cgfxboot didn't work? Try one of those:\n";
+ print F " $_\n" for (@{$menu->{list}});
+ print F "\n";
+ close F;
+ }
+
+ if(! -f "$dst/syslinux.cfg") {
+ open F, ">$dst/syslinux.cfg";
+ print F "default $menu->{list}[$menu->{default}]\n\n";
+
+ for (@{$menu->{list}}) {
+ print F "label $_\n";
+ if($_ eq 'harddisk') {
+ print F " localboot 0x80\n\n";
+ }
+ elsif($_ eq 'memtest' && -f("$dst/memtest")) {
+ print F " kernel memtest\n\n";
+ }
+ else {
+ print F " kernel linux\n append initrd=initrd splash=silent showopts\n\n";
+ }
+ }
+
+ print F
+ "implicit 1\n" .
+ "gfxboot bootlogo\n" .
+ "display message\n" .
+ "prompt 1\n" .
+ "timeout 600\n";
+
+ close F;
+ }
+
+ system "cp $comboot $dst" if $comboot;
+
+ for (@opt_test_addfiles) {
+ system "cp -r $_ $dst" and die "error copying file: $_\n";
+ }
+
+ for (@opt_test_rmfiles) {
+ s#^/+##;
+ system "cd $dst ; rm -f $_" and die "error deleting file: $_\n";
+ }
+
+ my $img_size = `du -s --apparent-size --block-size 1k $dst 2>/dev/null`;
+ $img_size = $img_size =~ /^(\d+)/ ? $1 * 2 + 2 * 200 : 0; # add 200k
+
+ my $hdimage = HDImage::new;
+ $hdimage->verbose($opt_verbose);
+ $hdimage->chs(0, 4, 16);
+ $hdimage->size($img_size);
+ $hdimage->type(1);
+ $hdimage->label('GFXBOOT');
+ $hdimage->fs('fat');
+ $hdimage->mbr('/usr/lib/boot/master-boot-code');
+ $hdimage->add_files(<$dst/*>);
+ $hdimage->write($img);
+
+ my $log = $gfxboot_tmp->file('syslinux.log');
+
+ system "$opt_syslinux/$bl_list{syslinux} -o " . $hdimage->partition_ofs * 512 . " $img >$log 2>&1";
+
+ print `cat $log`, "\n" if $opt_verbose >= 2;
+
+ return $hdimage;
+}
+
+
+sub prepare_pxelinux
+{
+ local $_;
+ my $file = shift;
+ my $pxeimage;
+ my $arch_dir;
+ my $comboot;
+
+ die "Can't setup pxelinux on $opt_media.\n" if $opt_media && $opt_media ne 'net';
+
+ $opt_syslinux = unpack_rpm $opt_syslinux if -f $opt_syslinux;
+
+ die "error: pxelinux not found\n" unless -f "$opt_syslinux/$bl_list{pxelinux}";
+
+ $arch_dir = 'i386';
+ $arch_dir = 'x86_64' if $opt_64 && !$opt_32;
+
+ $comboot = "$opt_syslinux/usr/share/syslinux/gfxboot.c32";
+ $comboot = "$opt_syslinux/usr/share/syslinux/gfxboot.com" unless -f $comboot;
+ $comboot = 0 unless -f $comboot;
+
+ my $menu = fake_menu 'install';
+
+ if($opt_verbose) {
+ print "menu items (default $menu->{default}):\n";
+ print " $_\n" for (@{$menu->{list}});
+ }
+
+ my $dst = $gfxboot_tmp->dir('pxelinux');
+
+ my $loader = "";
+ if(-x "$opt_syslinux/usr/bin/isolinux-config") {
+ $loader = "boot/$arch_dir/loader/";
+
+ mkdir "$dst/boot", 0755;
+ mkdir "$dst/boot/$arch_dir", 0755;
+ mkdir "$dst/boot/$arch_dir/loader", 0755;
+ }
+
+ if($opt_no_unpack) {
+ system "cp -a $file $dst/${loader}/bootlogo";
+ }
+ else {
+ my $bl_unpacked;
+ ( $bl_unpacked ) = unpack_archive $file;
+ my $bl_packed = pack_archive $bl_unpacked, 'bootlogo';
+ system "cp -a $bl_packed/* $dst/${loader}";
+ }
+
+ system "cp /boot/vmlinuz $dst/${loader}linux" if -f "/boot/vmlinuz";
+ system "cp /boot/initrd $dst/${loader}initrd" if -f "/boot/initrd";
+
+ if(! -f "$dst/${loader}message") {
+ open F, ">$dst/${loader}message";
+ print F "\x0cgfxboot didn't work? Try one of those:\n";
+ print F " $_\n" for (@{$menu->{list}});
+ print F "\n";
+ close F;
+ }
+
+ if(! -f "$dst/${loader}pxelinux.cfg/default") {
+ mkdir "$dst/${loader}pxelinux.cfg", 0755;
+ open F, ">$dst/${loader}pxelinux.cfg/default";
+ print F "default $menu->{list}[$menu->{default}]\n\n";
+
+ for (@{$menu->{list}}) {
+ print F "label $_\n";
+ if($_ eq 'harddisk') {
+ print F " localboot 0x80\n\n";
+ }
+ elsif($_ eq 'memtest' && -f("$dst/${loader}memtest")) {
+ print F " kernel memtest\n\n";
+ }
+ else {
+ print F " kernel linux\n append initrd=initrd splash=silent showopts\n\n";
+ }
+ }
+
+ print F $comboot ? "ui gfxboot bootlogo message\n" : "gfxboot bootlogo\ndisplay message\n";
+
+ print F
+ "implicit 1\n" .
+ "prompt 1\n" .
+ "timeout 600\n";
+
+ close F;
+ }
+
+ system "cp $opt_syslinux/usr/share/syslinux/pxelinux.0 $dst/$loader" and die "error: no pxelinux\n";
+ system "cp $comboot $dst/$loader" if $comboot;
+
+ for (@opt_test_addfiles) {
+ system "cp -r $_ $dst/${loader}" and die "error copying file: $_\n";
+ }
+
+ for (@opt_test_rmfiles) {
+ s#^/+##;
+ system "cd $dst/${loader} ; rm -f $_" and die "error deleting file: $_\n";
+ }
+
+ if($opt_32 && $opt_64) {
+ symlink "i386", "$dst/boot/x86_64" if -d "$dst/boot/i386";
+ }
+
+ $pxeimage->{image_name} = $dst;
+ $pxeimage->{loader} = "/${loader}pxelinux.0";
+
+ return $pxeimage;
+}
+
+
+sub prepare_qemu
+{
+}
+
+
+sub run_qemu
+{
+ my $vm_env = shift;
+ my $q = $vm_list{$opt_vm}{cmd};
+
+ $q = "MALLOC_CHECK_=0 $q -enable-kvm" if -d "/sys/devices/system/kvm";
+
+ $q .= " -m 512";
+
+ $q .= " -boot c" if $vm_env->{boot} eq 'hd';
+ $q .= " -boot d" if $vm_env->{boot} eq 'cd';
+ $q .= " -boot a" if $vm_env->{boot} eq 'fd';
+ $q .= " -boot n" if $vm_env->{boot} eq 'net';
+
+ $q .= " -hda $vm_env->{hd0}{image_name}" if $vm_env->{hd0};
+ $q .= " -hdb $vm_env->{hd1}{image_name}" if $vm_env->{hd1};
+ $q .= " -fda $vm_env->{fd0}{image_name}" if $vm_env->{fd0};
+ $q .= " -cdrom $vm_env->{cd0}{image_name}" if $vm_env->{cd0};
+
+ if($vm_env->{tftp}) {
+ $q .= " -net user,hostname=vm,tftp=$vm_env->{tftp}{image_name},bootfile=$vm_env->{tftp}{loader} -net nic,model=pcnet";
+ }
+
+ my $log = $gfxboot_tmp->file('qemu.log');
+
+ system "$q >$log 2>&1";
+
+ print `cat $log`, "\n" if $opt_verbose >= 2;
+}
+
+
+sub prepare_vbox
+{
+ my $vm_env = shift;
+ my $vm_64 = shift;
+ my $idx;
+
+ $vm_env->{vmname} = sprintf "gfxboot.%04u", int(rand 10000);
+
+ $vm_env->{base} = $gfxboot_tmp->dir('vbox');
+
+ $ENV{VBOX_USER_HOME} = $vm_env->{base};
+ mkdir "$vm_env->{base}/HardDisks", 0755;
+
+ # print "*** $vm_env->{base}\n";
+
+ my $log = $gfxboot_tmp->file('vbox.log');
+
+ system "VBoxManage createvm --name $vm_env->{vmname} --register >$log 2>&1";
+
+ system "VBoxManage setextradata global 'GUI/UpdateDate' 'never' >$log 2>&1";
+ system "VBoxManage setextradata global 'GUI/RegistrationData' 'triesLeft=0' >$log 2>&1";
+ system "VBoxManage setextradata global 'GUI/LicenseAgreed' '7,8' >$log 2>&1";
+ system "VBoxManage setextradata global 'GUI/SuppressMessages' 'remindAboutAutoCapture,remindAboutInputCapture,remindAboutMouseIntegrationOn,remindAboutMouseIntegrationOff,remindAboutWrongColorDepth,confirmInputCapture' >$log 2>&1";
+
+ system "VBoxManage modifyvm $vm_env->{vmname} --ostype OpenSUSE_64 >$log 2>&1";
+ system "VBoxManage modifyvm $vm_env->{vmname} --memory $opt_mem --biosbootmenu disabled --bioslogofadein off --bioslogofadeout off >$log 2>&1";
+ system "VBoxManage modifyvm $vm_env->{vmname} --hwvirtex on >$log 2>&1" if $vm_64;
+ system "VBoxManage modifyvm $vm_env->{vmname} --ioapic on >$log 2>&1";
+# system "VBoxManage modifyvm $vm_env->{vmname} --hwvirtexexcl off >$log 2>&1";
+ system "VBoxManage modifyvm $vm_env->{vmname} --firmware efi64 >$log 2>&1" if $opt_efi == 64;
+ system "VBoxManage modifyvm $vm_env->{vmname} --firmware efi32 >$log 2>&1" if $opt_efi == 32;
+
+ if($vm_env->{hds} > 0) {
+ system "VBoxManage storagectl $vm_env->{vmname} --name sata1 --add sata >$log 2>&1";
+ }
+ if($vm_env->{cds} > 0) {
+ system "VBoxManage storagectl $vm_env->{vmname} --name ide1 --add ide >$log 2>&1";
+ }
+ if($vm_env->{fds} > 0) {
+ system "VBoxManage storagectl $vm_env->{vmname} --name floppy1 --add floppy >$log 2>&1";
+ }
+
+ for($idx = 0; $idx < $vm_env->{hds}; $idx++) {
+ if($vm_env->{"hd$idx"}) {
+ create_vmdk $vm_env->{"hd$idx"}, "$vm_env->{base}/HardDisks/hd${idx}.vmdk";
+ my $opt = "hd" . chr($idx + ord("a"));
+ system "VBoxManage storageattach $vm_env->{vmname} --storagectl sata1 --port $idx --device 0 --type hdd --medium hd${idx}.vmdk >$log 2>&1";
+ }
+ }
+
+ for($idx = 0; $idx < $vm_env->{cds}; $idx++) {
+ if($vm_env->{"cd$idx"}) {
+ system "ln -s $vm_env->{\"cd$idx\"}{image_name} $vm_env->{base}/HardDisks/\"cd$idx\".iso >$log 2>&1";
+ system "VBoxManage storageattach $vm_env->{vmname} --storagectl ide1 --port $idx --device 0 --type dvddrive --medium \"cd$idx\".iso >$log 2>&1";
+ }
+ }
+
+ for($idx = 0; $idx < $vm_env->{fds}; $idx++) {
+ if($vm_env->{"fd$idx"}) {
+ system "ln -s $vm_env->{\"fd$idx\"}{image_name} $vm_env->{base}/HardDisks/\"fd$idx\".img >$log 2>&1";
+ system "VBoxManage storageattach $vm_env->{vmname} --storagectl floppy1 --port $idx --device 0 --type floppy --medium \"fd$idx\".img >$log 2>&1";
+ }
+ }
+
+ system "VBoxManage modifyvm $vm_env->{vmname} --boot1 none >$log 2>&1";
+ system "VBoxManage modifyvm $vm_env->{vmname} --boot2 none >$log 2>&1";
+ system "VBoxManage modifyvm $vm_env->{vmname} --boot3 none >$log 2>&1";
+ system "VBoxManage modifyvm $vm_env->{vmname} --boot4 none >$log 2>&1";
+
+ system "VBoxManage modifyvm $vm_env->{vmname} --boot1 disk >$log 2>&1" if $vm_env->{boot} eq 'hd';
+ system "VBoxManage modifyvm $vm_env->{vmname} --boot1 dvd >$log 2>&1" if $vm_env->{boot} eq 'cd';
+ system "VBoxManage modifyvm $vm_env->{vmname} --boot1 floppy >$log 2>&1" if $vm_env->{boot} eq 'fd';
+
+ print `cat $log`, "\n" if $opt_verbose >= 2;
+}
+
+
+sub run_vbox
+{
+ my $vm_env = shift;
+ my $i;
+
+ my $log = $gfxboot_tmp->file('vbox.log');
+
+ system "VBoxManage startvm $vm_env->{vmname} >$log 2>&1";
+
+ # give it 10 seconds to start
+ for($i = 10; $i > 0; $i--) {
+ sleep 1;
+ last if open V, "$vm_env->{base}/Machines/$vm_env->{vmname}/Logs/VBox.log";
+ }
+
+ print `cat $log`, "\n" if $opt_verbose >= 2;
+
+ # print "*** $i\n";
+
+ return unless $i;
+
+ # monitor log file for hints the vm terminated
+ while(1) {
+ $_ = <V>;
+ if(defined $_) {
+ print if $opt_verbose >= 2;
+ }
+ else {
+ sleep 1;
+ }
+ last if /TERMINATED/;
+ }
+
+ close V;
+
+ sleep 1;
+}
+
+
+sub run_vboxsdl
+{
+ my $vm_env = shift;
+
+ system "VBoxSDL -vm $vm_env->{vmname}";
+}
+
+
+sub prepare_vmware
+{
+ my $vm_env = shift;
+
+ $vm_env->{base} = $gfxboot_tmp->dir('vmware');
+
+ if($vm_env->{hd0}) {
+ open F, ">$vm_env->{base}/hd0.vmdk";
+ print F <<" vmdk";
+version=1
+CID=12345678
+parentCID=ffffffff
+createType="fullDevice"
+RW $vm_env->{hd0}{size} FLAT \"$vm_env->{hd0}{image_name}\" 0
+ddb.virtualHWVersion = \"3\"
+ddb.geometry.cylinders = \"$vm_env->{hd0}{c}\"
+ddb.geometry.heads = \"$vm_env->{hd0}{h}\"
+ddb.geometry.sectors = \"$vm_env->{hd0}{s}\"
+ddb.geometry.biosCylinders = \"$vm_env->{hd0}{c}\"
+ddb.geometry.biosHeads = \"$vm_env->{hd0}{h}\"
+ddb.geometry.biosSectors = \"$vm_env->{hd0}{s}\"
+ vmdk
+ close F;
+ }
+
+ if($vm_env->{hd1}) {
+ open F, ">$vm_env->{base}/hd1.vmdk";
+ print F <<" vmdk";
+version=1
+CID=12345679
+parentCID=ffffffff
+createType="fullDevice"
+RW $vm_env->{hd1}{size} FLAT \"$vm_env->{hd1}{image_name}\" 0
+ddb.virtualHWVersion = \"3\"
+ddb.geometry.cylinders = \"$vm_env->{hd1}{c}\"
+ddb.geometry.heads = \"$vm_env->{hd1}{h}\"
+ddb.geometry.sectors = \"$vm_env->{hd1}{s}\"
+ddb.geometry.biosCylinders = \"$vm_env->{hd1}{c}\"
+ddb.geometry.biosHeads = \"$vm_env->{hd1}{h}\"
+ddb.geometry.biosSectors = \"$vm_env->{hd1}{s}\"
+ vmdk
+ close F;
+ }
+
+ open F, ">$vm_env->{base}/gfxboot.vmx";
+ print F
+ "#!/usr/bin/vmware\n" .
+ "config.version = \"7\"\n" .
+ "virtualHW.version = \"3\"\n" .
+ "memsize = \"128\"\n" .
+ "displayName = \"gfxboot\"\n" .
+ "guestOS = \"linux\"\n";
+
+ if($vm_env->{hd0}) {
+ print F
+ "ide0:0.present = \"TRUE\"\n" .
+ "ide0:0.fileName = \"$vm_env->{base}/hd0.vmdk\"\n";
+ }
+
+ if($vm_env->{hd1}) {
+ print F
+ "ide0:1.present = \"TRUE\"\n" .
+ "ide0:1.fileName = \"$vm_env->{base}/hd1.vmdk\"\n";
+ }
+
+ if($vm_env->{cd0}) {
+ print F
+ "ide1:0.present = \"TRUE\"\n" .
+ "ide1:0.fileName = \"$vm_env->{cd0}{image_name}\"\n" .
+ "ide1:0.deviceType = \"cdrom-image\"\n" .
+ "ide1:0.startConnected = \"TRUE\"\n";
+ }
+
+ if($vm_env->{fd0}) {
+ print F
+ "floppy0.present = \"TRUE\"\n" .
+ "floppy0.fileName = \"$vm_env->{fd0}{image_name}\"\n" .
+ "floppy0.fileType = \"file\"\n" .
+ "floppy0.startConnected = \"TRUE\"\n";
+ }
+ else {
+ print F
+ "floppy0.present = \"FALSE\"\n";
+ }
+
+ close F;
+}
+
+
+sub run_vmplayer
+{
+ my $vm_env = shift;
+
+ my $log = $gfxboot_tmp->file('vmware.log');
+
+ system "vmplayer $vm_env->{base}/gfxboot.vmx >$log 2>&1";
+
+ print `cat $log`, "\n" if $opt_verbose >= 2;
+}
+
+
+sub run_vmware
+{
+ my $vm_env = shift;
+
+ my $log = $gfxboot_tmp->file('vmware.log');
+
+ system "vmware -qx $vm_env->{base}/gfxboot.vmx >$log 2>&1";
+
+ print `cat $log`, "\n" if $opt_verbose >= 2;
+}
+
+
+sub prepare_bd
+{
+}
+
+
+sub run_bd
+{
+ my $vm_env = shift;
+ my $q = $vm_list{$opt_vm}{cmd};
+
+ $q .= " $vm_env->{hd0}{image_name}" if $vm_env->{boot} eq 'hd';
+ $q .= " $vm_env->{cd0}{image_name}" if $vm_env->{boot} eq 'cd';
+ $q .= " $vm_env->{fd0}{image_name}" if $vm_env->{boot} eq 'fd';
+
+ system $q;
+}
+
+
+sub prepare_bochs
+{
+}
+
+
+sub run_bochs
+{
+ my $vm_env = shift;
+ my $q = $vm_list{$opt_vm}{cmd};
+
+ if($vm_env->{boot} eq 'hd') {
+ $q .=
+ " -q 'boot: disk'" .
+ " 'ata0-master: type=disk, path=$vm_env->{hd0}{image_name}, cylinders=$vm_env->{hd0}{c}, heads=$vm_env->{hd0}{h}, spt=$vm_env->{hd0}{s}'".
+ " 'panic: action=report'" .
+ " 'debugger_log: /dev/null'" .
+ " 'log: /dev/null'" .
+ " 'parport1: enabled=0'" .
+ " 'clock: sync=realtime, time0=local'" .
+ " 2>&1";
+ }
+
+ if($vm_env->{boot} eq 'cd') {
+ $q .=
+ " -q 'boot: cdrom'" .
+ " 'ata0-master: type=cdrom, path=$vm_env->{cd0}{image_name}, status=inserted'".
+ " 'panic: action=report'" .
+ " 'debugger_log: /dev/null'" .
+ " 'log: /dev/null'" .
+ " 'parport1: enabled=0'" .
+ " 'clock: sync=realtime, time0=local'" .
+ " 2>&1";
+ }
+
+ if($vm_env->{boot} eq 'fd') {
+ $q .=
+ " -q 'boot: a'" .
+ " 'floppya: image=$vm_env->{fd0}{image_name}, status=inserted'" .
+ " 'ata0-master: type=disk, path=/dev/null'".
+ " 'panic: action=report'" .
+ " 'debugger_log: /dev/null'" .
+ " 'log: /dev/null'" .
+ " 'parport1: enabled=0'" .
+ " 'clock: sync=realtime, time0=local'" .
+ " 2>&1";
+ }
+
+ system $q;
+}
+
+
+sub find_free_loop
+{
+ local $_;
+ my (@loops, $l);
+
+ my $start = shift;
+
+ @loops = </dev/loop*>;
+
+ @loops = grep {
+ ($l = $_) =~ s#^/dev##;
+ !(`cat /sys/block/$l/size` + 0);
+ } @loops;
+
+ if($start) {
+ @loops = grep { $_ eq $start .. $_ eq "" } @loops;
+ shift @loops;
+ }
+
+ die "error: could not find a free loop device\n" unless $loops[0];
+
+ return $loops[0];
+}
+
+
+sub show_config
+{
+ my $dir = shift;
+
+ my $cfg_file = "$dir/gfxboot.cfg";
+ $cfg_file = $opt_gfxboot_cfg if defined $opt_gfxboot_cfg;
+
+ system "cat $cfg_file 2>/dev/null";
+}
+
+
+sub is_cpio
+{
+ my $file = shift;
+ my ($f, $buf);
+
+ open $f, $file;
+ sysread $f, $buf, 2;
+ close $f;
+
+ return $buf eq "\x71\xc7" || $buf eq "\xc7\x71" ? 1 : 0;
+}
+
+
+sub is_gfxcode
+{
+ my $file = shift;
+ my ($f, $buf);
+
+ open $f, $file;
+ sysread $f, $buf, 4;
+ close $f;
+
+ return $buf eq "\x00\x7f\xd9\xb2" ? 1 : 0;
+}
+
+
+sub unpack_archive
+{
+ my $file = shift;
+ my ($i, $j, $dir, $a_dir, $has_code, $archive_name);
+
+ $dir = $gfxboot_tmp->dir;
+
+ if(-f $file) {
+ $i = system "cat $file | ( cd $dir ; cpio --quiet -dmi 2>/dev/null)";
+ die "$file: failed to unpack archive\n" if $i;
+ $archive_name = $file;
+ }
+ elsif(-d $file) {
+ for $i (<$file/*>) {
+ if(-e $i) {
+ if(is_cpio($i)) {
+ ( $a_dir ) = unpack_archive $i;
+ for $j (<$a_dir/*>) {
+ if(is_gfxcode $j) {
+ $has_code = 1;
+ last;
+ }
+ }
+ if($has_code) {
+ $archive_name = $i;
+ for $j (<$a_dir/*>) {
+ system "cp -a $j $dir"
+ }
+ }
+ else {
+ system "cp -a $i $dir"
+ }
+ }
+ else {
+ system "cp -a $i $dir";
+ }
+ }
+ }
+ }
+ else {
+ die "$file: failed to unpack archive\n";
+ }
+
+ $archive_name =~ s#.*/##;
+
+ return ($dir, $archive_name);
+}
+
+
+sub pack_archive
+{
+ my $dir = shift;
+ my $archive = shift;
+ my ($i, $f, @pack_list, @copy_list, $file);
+
+ if($archive ne "") {
+
+ # Pack non-8.3 files and the startup code into cpio archive, keep
+ # everything else as separate files.
+
+ $file = $gfxboot_tmp->dir;
+
+ for $i (<$dir/*>) {
+ $i =~ s#.*/##;
+ if($i !~ /^[^.]{1,8}(\.[^.]{1,3})?$/ || is_gfxcode("$dir/$i")) {
+ push @pack_list, $i;
+ }
+ else {
+ push @copy_list, $i;
+ }
+ }
+
+ for $i (@copy_list) {
+ system "cp -a $dir/$i $file";
+ }
+
+ if(@pack_list) {
+ open $f, "| ( cd $dir ; cpio --quiet -o ) >$file/$archive";
+ print $f join("\n", @pack_list);
+ close $f;
+ }
+
+ }
+ else {
+ $file = $gfxboot_tmp->file;
+
+ $i = system "cd $dir ; find . | cpio --quiet -o >$file 2>/dev/null";
+ die "$file: failed to create archive\n" if $i;
+ }
+
+ return $file;
+}
+
+
+sub update_archive
+{
+ my $src = shift;
+ my $dst = shift;
+
+ if(-d $dst) {
+ my $bl = $work_archive_name;
+ $bl = 'bootlogo' if $work_archive_name eq '';
+
+ my $packed = pack_archive((unpack_archive $src)[0], $bl);
+
+ if(-w $dst) {
+ system "rm -rf $dst/*" unless $dst eq '/';
+ system "cp -a $packed/* $dst";
+ system "chmod 755 $dst";
+ }
+ else {
+ check_root "Cannot update $dst: Permission denied";
+
+ susystem "rm -rf $dst/*" unless $dst eq '/';
+ susystem "cp -a $packed/* $dst";
+ susystem "chmod 755 $dst";
+ }
+ }
+ else {
+ if(-w $dst || !-e $dst) {
+ system "cp $src $dst";
+ system "chmod 644 $dst";
+ }
+ else {
+ check_root "Cannot update $dst: Permission denied";
+
+ susystem "cp $src $dst";
+ susystem "chmod 644 $dst";
+ }
+ }
+}
+
+
+sub read_gfxboot_config
+{
+ local $_;
+ my $dir = shift;
+ my $section = "base";
+ my ($cfg, $l);
+
+ my $cfg_file = "$dir/gfxboot.cfg";
+ $cfg_file = $opt_gfxboot_cfg if defined $opt_gfxboot_cfg;
+
+ push @{$cfg->{sections}}, $section;
+ $cfg->{sectionnames}{$section} = 1;
+
+ my $first_section = 1;
+
+ open G, $cfg_file;
+ while(<G>) {
+ chomp;
+ s/^\s*//;
+
+ next if $_ eq "";
+
+ if(/^\[(.*?)\]/) {
+ if($first_section) {
+ $first_section = 0;
+
+ # only comments at beginning of file? -> not part of any section
+ if((grep { !/^;/ } @{$cfg->{section}{$section}}) == 0) {
+ $cfg->{comment} = $cfg->{section}{$section};
+ delete $cfg->{section}{$section};
+ }
+ }
+
+ $section = $1 eq "" ? "base" : $1;
+ if(!$cfg->{sectionnames}{$section}) {
+ push @{$cfg->{sections}}, $section;
+ $cfg->{sectionnames}{$section} = 1;
+ }
+ next;
+ }
+
+ push @{$cfg->{section}{$section}}, $_;
+ }
+ close G;
+
+ return $cfg;
+}
+
+
+sub write_gfxboot_config
+{
+ local $_;
+ my $dir = shift;
+ my $cfg = shift;
+ my $section;
+ my $idx = 0;
+
+ my $cfg_file = "$dir/gfxboot.cfg";
+ $cfg_file = $opt_gfxboot_cfg if defined $opt_gfxboot_cfg;
+
+ open G, ">$cfg_file";
+
+ if(@{$cfg->{comment}}) {
+ print G join("\n", @{$cfg->{comment}}), "\n\n";
+ }
+
+ for $section (@{$cfg->{sections}}) {
+ print G "\n" if $idx++;
+ print G "[$section]\n";
+ for (@{$cfg->{section}{$section}}) {
+ print G "$_\n" if $_ ne "";
+ }
+ }
+
+ close G;
+}
+
+
+sub change_config
+{
+ local $_;
+ my ($section, $key, $val);
+ my $dir = shift;
+
+ my $cfg = read_gfxboot_config $dir;
+
+ for (@opt_changeconfig) {
+ next unless /^\s*(\S+)=(.*?)\s*$/;
+ $key = $1;
+ $val = $2;
+
+ $section = "base";
+ if($key =~ s/^(\S*?)::(\S+)/$2/) {
+ $section = $1 eq "" ? "base" : $1;
+ }
+
+ if(!$cfg->{sectionnames}{$section}) {
+ push @{$cfg->{sections}}, $section;
+ $cfg->{sectionnames}{$section} = 1;
+ }
+
+ for (@{$cfg->{section}{$section}}) {
+ if(/^(\S+?)=(.*)$/ && $key eq $1) {
+ $_ = "$key=$val";
+ undef $key;
+ last;
+ }
+ }
+
+ push @{$cfg->{section}{$section}}, "$key=$val" if defined $key;
+ }
+
+ write_gfxboot_config $dir, $cfg;
+}
+
+
+sub rm_config
+{
+ local $_;
+ my ($section, $key);
+ my $dir = shift;
+
+ my $cfg = read_gfxboot_config $dir;
+
+ for (@opt_rmconfig) {
+ $key = $_;
+
+ $section = "base";
+ if($key =~ s/^(\S*?)::(\S+)/$2/) {
+ $section = $1 eq "" ? "base" : $1;
+ }
+
+ next unless $cfg->{sectionnames}{$section};
+
+ for (@{$cfg->{section}{$section}}) {
+ if(/^${key}=/) {
+ undef $_;
+ }
+ }
+ }
+
+ write_gfxboot_config $dir, $cfg;
+}
+
+
+sub rm_section
+{
+ local $_;
+ my ($section);
+ my $dir = shift;
+
+ my $cfg = read_gfxboot_config $dir;
+
+ for (@opt_rmsection) {
+ $cfg->{sectionnames}{$_} = 0;
+ }
+
+ $cfg->{sections} = [ grep { $cfg->{sectionnames}{$_} } @{$cfg->{sections}} ];
+
+ write_gfxboot_config $dir, $cfg;
+}
+
+
+sub add_files
+{
+ local $_;
+ my $dir = shift;
+
+ for (@opt_addfiles) {
+ system "cp $_ $dir" and die "error copying file\n";
+ }
+}
+
+
+sub rm_files
+{
+ local $_;
+ my $dir = shift;
+
+ for (@opt_rmfiles) {
+ s#^/+##;
+ system "cd $dir ; rm $_" and die "error deleting file\n";
+ }
+}
+
+
+sub extract_files
+{
+ local $_;
+ my $dir = shift;
+
+ for (@opt_extractfiles) {
+ if(-f "$dir/$_") {
+ system "cp $dir/$_ ." and die "error copying file\n";
+ }
+ else {
+ die "$_: No such file\n";
+ }
+ }
+}
+
+
+sub update_theme
+{
+ my $theme = shift;
+ my $theme_dir = shift;
+ my $dst = shift;
+ my $src = shift;
+ local $_;
+
+ for (<$src/lang>, <$src/languages>, <$src/translations.*>) {
+ system "cp $_ $dst" if -f $_;
+ }
+
+ for (<$src/*.hlp>, <$src/*.tr>) {
+ $_ = substr $_, length($src) + 1;
+ system "cp $src/$_ $dst";
+ system "cp $theme_dir/$_ $dst" if -f "$theme_dir/$_";
+ }
+}
+
+
+sub short_locale
+{
+ my $l = shift;
+
+ $l =~ s/\_.*//;
+
+ return $l;
+}
+
+
+sub add_languages
+{
+ local $_;
+ my $dir = shift;
+ my ($theme, $theme_dir, $sl, %lang, @langs, $f);
+
+ $theme = get_theme $dir;
+ $theme_dir = "/etc/bootsplash/themes/$theme/bootloader";
+ print "using theme \"$theme\"\n" if $opt_verbose;
+
+ @langs = `cat $dir/languages`;
+ chomp @langs;
+
+ for (@langs) {
+ $lang{$1} = 1 if /^(\S+)/;
+ }
+
+ for (@opt_addlanguages) {
+ $sl = short_locale $_;
+ if(-f "$theme_dir/$_.tr") {
+ system "cp $theme_dir/$_.tr $dir";
+ }
+ elsif(-f "$theme_dir/$sl.tr") {
+ system "cp $theme_dir/$sl.tr $dir";
+ }
+ if(-f "$theme_dir/$_.hlp") {
+ system "cp $theme_dir/$_.hlp $dir";
+ }
+ elsif(-f "$theme_dir/$sl.hlp") {
+ system "cp $theme_dir/$sl.hlp $dir";
+ }
+ if(!$lang{$_}) {
+ push @langs, $_;
+ $lang{$_} = 1;
+ }
+ }
+
+ open $f, ">$dir/languages";
+ print $f "$_\n" for (@langs);
+ close $f;
+}
+
+
+sub rm_languages
+{
+ local $_;
+ my $dir = shift;
+ my ($l, $sl, @lang, %lang, %rmlang);
+
+ for (`cat $dir/languages`) {
+ chomp;
+ push @lang, $_;
+ $lang{$_} = 1;
+ }
+
+ for (@opt_rmlanguages) {
+ $sl = short_locale $_;
+ if($lang{$_}) {
+ $rmlang{$_} = 1;
+ }
+ elsif($sl eq $_) {
+ for $l (@lang) {
+ $rmlang{$l} = 1 if short_locale($l) eq $sl;
+ }
+ }
+ }
+
+ @lang = grep { !$rmlang{$_} } @lang;
+
+ undef %lang;
+ open L, ">$dir/languages";
+ for (@lang) {
+ print L "$_\n";
+ $lang{$_} = 1;
+ $lang{short_locale $_} = 1;
+ }
+ close L;
+
+ for (<$dir/*.tr>, <$dir/*.hlp>) {
+ system "rm -f $_" unless m#/([^/]+)\.(tr|hlp)# && $lang{$1};
+ }
+
+ for (<$dir/translations.*>) {
+ system "rm -f $_" unless m#/translations\.([^/]+)$# && $lang{$1};
+ }
+}
+
+
+sub get_theme
+{
+ local $_;
+ my $dir = shift;
+ my $theme;
+
+ my $cfg_file = "$dir/gfxboot.cfg";
+ $cfg_file = $opt_gfxboot_cfg if defined $opt_gfxboot_cfg;
+
+ for (`cat $cfg_file 2>/dev/null`) {
+ if(/^\s*theme=(.*?)\s*$/) {
+ if( -d "/etc/bootsplash/themes/$1/bootloader") {
+ $theme = $1;
+ last;
+ }
+ }
+ }
+
+ if(!$theme) {
+ for (`cat /etc/sysconfig/bootsplash 2>/dev/null`) {
+ if(/^\s*THEME=\"(.*?)\"\s*$/) {
+ if( -d "/etc/bootsplash/themes/$1/bootloader") {
+ $theme = $1;
+ last;
+ }
+ }
+ }
+ }
+
+ if(!$theme) {
+ $_ = (</etc/bootsplash/themes/*/bootloader>)[0];
+ if(m#themes/(.*?)/bootloader#) {
+ $theme = $1;
+ print STDERR "could not find out current theme, using \"$theme\"\n";
+ }
+ }
+
+ die "sorry, no usable theme found\n" unless $theme;
+
+ return $theme;
+}
+
+
+sub unpack_rpm
+{
+ my $rpm = shift;
+ my $dir = $gfxboot_tmp->dir;
+
+ system "rpm2cpio $rpm | ( cd $dir ; cpio --quiet --sparse -dimu --no-absolute-filenames )";
+
+ return $dir;
+}
+
+
+sub create_vmdk
+{
+ my $hd = shift;
+ my $file = shift;
+
+ if($hd) {
+ open F, ">$file";
+ print F <<" vmdk";
+# Disk DescriptorFile
+version=1
+CID=ec316048
+parentCID=ffffffff
+createType="fullDevice"
+RW $hd->{size} FLAT \"$hd->{image_name}\" 0
+ddb.virtualHWVersion = \"4\"
+ddb.adapterType=\"ide\"
+ddb.geometry.cylinders = \"$hd->{c}\"
+ddb.geometry.heads = \"$hd->{h}\"
+ddb.geometry.sectors = \"$hd->{s}\"
+ddb.geometry.biosCylinders = \"$hd->{c}\"
+ddb.geometry.biosHeads = \"$hd->{h}\"
+ddb.geometry.biosSectors = \"$hd->{s}\"
+ vmdk
+ close F;
+ }
+}
+
diff --git a/gfxboot-compile.c b/gfxboot-compile.c
new file mode 100644
index 0000000..dd882e8
--- /dev/null
+++ b/gfxboot-compile.c
@@ -0,0 +1,1983 @@
+/*
+ * Create a boot loader graphics file.
+ *
+ */
+
+#define _GNU_SOURCE
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <getopt.h>
+#include <inttypes.h>
+#include <ctype.h>
+#include <iconv.h>
+
+#include "bincode.h"
+
+#define MAGIC 0xb2d97f00
+#define VERSION 8
+#define DICT_SIZE 1000
+
+#define MAX_INCLUDE 10
+
+typedef struct {
+ uint32_t magic_id;
+ uint8_t version;
+ uint8_t res_1;
+ uint8_t res_2;
+ uint8_t res_3;
+ uint32_t bincode;
+ uint32_t bincode_size;
+ uint32_t bincode_crc;
+ uint32_t dict;
+ uint32_t code;
+ uint32_t code_size;
+} file_header_t;
+
+typedef struct {
+ unsigned size;
+ unsigned char *data;
+ unsigned real_size;
+ unsigned char *ptr;
+ char *name;
+ int line;
+} file_data_t;
+
+struct option options[] = {
+ { "config", 1, NULL, 'c' },
+ { "info", 0, NULL, 'i' },
+ { "log", 0, NULL, 'l' },
+ { "help", 0, NULL, 'h' },
+ { }
+};
+
+// max. 16
+// Keep in sync with bincode.asm!
+typedef enum {
+ t_none, t_int, t_unsigned, t_bool, t_string, t_code, t_ret, t_prim,
+ t_sec, t_dict_idx, t_array, t_end, t_ptr,
+ t_skip = 15 /* special, for internal use */
+} type_t;
+
+// for log file
+static char *type_name[16] = {
+ "none", "int", "uint", "bool", "str", "code", "ret", "prim",
+ "sec", "dict", "arr", "end", "ptr", "", "", ""
+};
+
+typedef struct {
+ char *name;
+ type_t type;
+ int line;
+ int del, ref, ref_idx, ref_ind, def, def_idx, def_ind, ref0, ref0_idx;
+ union {
+ unsigned u;
+ unsigned char *p;
+ } value;
+} dict_t;
+
+typedef struct {
+ char *name;
+ type_t type;
+ unsigned ofs;
+ unsigned size;
+ int line, incl_level;
+ union {
+ unsigned u;
+ unsigned char *p;
+ } value;
+ unsigned char *enc;
+} code_t;
+
+void help(void);
+file_data_t read_file(char *name);
+int is_pcx(file_data_t *fd);
+void fix_pal(unsigned char *pal, unsigned shade1, unsigned shade2, unsigned char *rgb);
+void write_data(char *name);
+void add_number_le(file_data_t *d, uint32_t u, unsigned usize);
+void add_data(file_data_t *d, void *buffer, unsigned size);
+code_t *new_code(void);
+dict_t *new_dict(void);
+unsigned number(char *value);
+void hexdump(file_data_t *fd, unsigned ofs, int len);
+void show_info(char *name);
+int get_hex(char *s, int len, unsigned *val);
+char *utf32_to_utf8(int u8);
+char *next_word(char **ptr);
+void parse_comment(char *comment, file_data_t *incl);
+int find_in_dict(char *name);
+int translate(int pass);
+void encode_dict(void);
+void parse_config(char *name, char *log_file);
+void optimize_dict(FILE *lf);
+unsigned skip_code(unsigned pos);
+unsigned next_code(unsigned pos);
+int optimize_code(FILE *lf);
+int optimize_code1(FILE *lf);
+int optimize_code2(FILE *lf);
+int optimize_code3(FILE *lf);
+int optimize_code4(FILE *lf);
+int optimize_code5(FILE *lf);
+int optimize_code6(FILE *lf);
+int optimize_code7(FILE *lf);
+void log_dict(FILE *lf);
+void log_code(FILE *lf);
+void log_cline(FILE *lf);
+void decompile(unsigned char *data, unsigned size);
+
+/* dummy function to make ld fail */
+extern void wrong_struct_size(void);
+
+int config_ok = 0;
+
+file_header_t header = {};
+
+file_data_t pscode = {};
+file_data_t dict_file = {};
+
+dict_t *dict = NULL;
+unsigned dict_size = 0;
+unsigned dict_max_size = 0;
+
+code_t *code = NULL;
+unsigned code_size = 0;
+unsigned code_max_size = 0;
+
+int number_err = 0;
+// current config line
+int line = 1;
+
+int verbose = 0;
+int optimize = 0;
+int opt_force = 0;
+
+char *lib_path[2] = { NULL, "/usr/share/gfxboot" };
+
+// initial vocabulary (note: "{" & "}" are special)
+#include "vocabulary.h"
+
+int main(int argc, char **argv)
+{
+ int i;
+ char *config_file = NULL, *log_file = NULL;
+ int opt_info = 0;
+
+ if(sizeof (file_header_t) != 32) {
+ fprintf(stderr, "file_header_t has wrong size: %d\n", (int) sizeof (file_header_t));
+ wrong_struct_size();
+ return 1;
+ }
+
+ opterr = 0;
+
+ while((i = getopt_long(argc, argv, "c:fhiL:l:Ov", options, NULL)) != -1) {
+ switch(i) {
+ case 'c':
+ config_file = optarg;
+ break;
+
+ case 'f':
+ opt_force = 1;
+ break;
+
+ case 'i':
+ opt_info = 1;
+ break;
+
+ case 'l':
+ log_file = optarg;
+ break;
+
+ case 'L':
+ lib_path[0] = optarg;
+ break;
+
+ case 'O':
+ optimize = 1;
+ break;
+
+ case 'v':
+ verbose++;
+ break;
+
+ default:
+ help();
+ return 0;
+ }
+ }
+
+ argc -= optind; argv += optind;
+
+ if(config_file && argc == 1) {
+ parse_config(config_file, log_file);
+ write_data(*argv);
+ return 0;
+ }
+
+ if(opt_info && argc == 1) {
+ show_info(*argv);
+ return 0;
+ }
+
+ help();
+
+ return 1;
+}
+
+
+void help()
+{
+ fprintf(stderr, "%s",
+ "gfxboot-compile: Usage gfxboot-compile [options] out_file\n"
+ " Options are:\n"
+ " -c config_file, --config config_file\n"
+ " Create a boot message file using this configuration.\n"
+ " -l log_file, --log log_file\n"
+ " Write log to this file.\n"
+ " -i, --info\n"
+ " Show info about file.\n"
+ " -L\n"
+ " Search path for file read.\n"
+ " -O\n"
+ " Optimize code.\n"
+ " -h, --help\n"
+ " Show this text.\n"
+ );
+}
+
+
+file_data_t read_file(char *name)
+{
+ file_data_t fd = { };
+ FILE *f;
+ unsigned u;
+ char *s;
+
+ if(!name) return fd;
+
+ f = fopen(name, "r");
+ if(!f) {
+ for(u = 0; u < sizeof lib_path / sizeof *lib_path; u++) {
+ if(lib_path[u]) {
+ asprintf(&s, "%s/%s", lib_path[u], name);
+ f = fopen(s, "r");
+ if(f) {
+ fd.name = s;
+ break;
+ }
+ else {
+ free(s);
+ }
+ }
+ }
+ }
+ else {
+ fd.name = strdup(name);
+ }
+
+ if(!f) { perror(name); return fd; }
+
+ if(fseek(f, 0, SEEK_END)) {
+ perror(name);
+ exit(30);
+ }
+
+ fd.size = fd.real_size = ftell(f);
+
+ if(fseek(f, 0, SEEK_SET)) {
+ perror(name);
+ exit(30);
+ }
+
+ if(fd.size) {
+ fd.ptr = fd.data = malloc(fd.size);
+ if(!fd.data) {
+ fprintf(stderr, "malloc failed\n");
+ exit(30);
+ }
+ }
+
+ if(fread(fd.data, 1, fd.size, f) != fd.size) {
+ perror(name);
+ exit(30);
+ }
+
+ fclose(f);
+
+ return fd;
+}
+
+
+int is_pcx(file_data_t *fd)
+{
+ if(!fd->data || fd->size < 0x381) return 0;
+ if(
+ fd->data[0] != 10 ||
+ fd->data[1] != 5 ||
+ fd->data[2] != 1 ||
+ fd->data[3] != 8 ||
+ fd->data[fd->size - 0x301] != 12
+ ) return 0;
+
+ return 1;
+}
+
+
+void write_data(char *name)
+{
+ FILE *f;
+ unsigned ofs;
+ file_data_t fd = {};
+
+ f = strcmp(name, "-") ? fopen(name, "w") : stdout;
+
+ if(!f) {
+ perror(name);
+ return;
+ }
+
+ // first, fix all offsets
+
+ ofs = sizeof header;
+
+ header.bincode = ofs;
+ header.bincode_size = sizeof bincode_data;
+ ofs += sizeof bincode_data;
+
+ if(dict_file.data) {
+ header.dict = ofs;
+ ofs += dict_file.size;
+ }
+
+ if(pscode.data) {
+ header.code = ofs;
+ header.code_size = pscode.size;
+ ofs += pscode.size;
+ }
+
+ // then, put everything together
+
+ add_number_le(&fd, header.magic_id, 4);
+ add_data(&fd, &header.version, 1);
+ add_data(&fd, &header.res_1, 1);
+ add_data(&fd, &header.res_2, 1);
+ add_data(&fd, &header.res_3, 1);
+ add_number_le(&fd, header.bincode, 4);
+ add_number_le(&fd, header.bincode_size, 4);
+ add_number_le(&fd, header.bincode_crc, 4);
+ add_number_le(&fd, header.dict, 4);
+ add_number_le(&fd, header.code, 4);
+ add_number_le(&fd, header.code_size, 4);
+
+ add_data(&fd, bincode_data, sizeof bincode_data);
+
+ add_data(&fd, dict_file.data, dict_file.size);
+
+ add_data(&fd, pscode.data, pscode.size);
+
+ // now write everything
+
+ if(fwrite(fd.data, fd.size, 1, f) != 1) {
+ perror(name); exit(3);
+ }
+
+ fclose(f);
+}
+
+
+/* Copy the least-significant usize bytes of u into enc, least-significant
+ * byte first.
+ */
+void copy_number_le(unsigned char *enc, unsigned u, unsigned usize)
+{
+ int i;
+ for (i = 0; i < usize; ++i)
+ enc[i] = (u >> (i * 8)) & 255;
+}
+
+
+void add_number_le(file_data_t *d, uint32_t u, unsigned usize)
+{
+ unsigned char buf[4];
+ copy_number_le(buf, u, usize);
+ add_data(d, buf, sizeof buf);
+}
+
+
+void add_data(file_data_t *d, void *buffer, unsigned size)
+{
+ ssize_t ofs = 0;
+
+ if(!size || !d || !buffer) return;
+
+ if(d->ptr && d->data) ofs = d->ptr - d->data;
+
+ if(d->size + size > d->real_size) {
+ d->real_size = d->size + size + 0x1000;
+ d->data = realloc(d->data, d->real_size);
+ if(!d->data) d->real_size = 0;
+ }
+
+ if(d->size + size <= d->real_size) {
+ memcpy(d->data + d->size, buffer, size);
+ d->size += size;
+ }
+ else {
+ fprintf(stderr, "Oops, out of memory? Aborted.\n");
+ exit(10);
+ }
+
+ if(d->ptr && d->data) d->ptr = d->data + ofs;
+}
+
+
+code_t *new_code()
+{
+ if(code_size >= code_max_size) {
+ code_max_size += 10;
+ code = realloc(code, code_max_size * sizeof * code);
+ memset(code + code_size, 0, (code_max_size - code_size) * sizeof * code);
+ }
+
+ return code + code_size++;
+}
+
+
+
+dict_t *new_dict()
+{
+ if(dict_size >= dict_max_size) {
+ dict_max_size += 10;
+ dict = realloc(dict, dict_max_size * sizeof *dict);
+ memset(dict + dict_size, 0, (dict_max_size - dict_size) * sizeof *dict);
+ }
+
+ return dict + dict_size++;
+}
+
+
+unsigned number(char *value)
+{
+ char *s;
+ unsigned u;
+
+ u = strtoul(value, &s, 0);
+
+ if(*s) {
+ fprintf(stderr, "Line %d: \"%s\" is not a number\n", line, value);
+ exit(1);
+ }
+
+ return u;
+}
+
+
+uint32_t read_uint32_le(file_data_t *fd, unsigned ofs)
+{
+ uint32_t word = 0;
+ int i;
+ for (i = 0; i < 4; ++i)
+ word += fd->data[ofs + i] << (i * 8);
+ return word;
+}
+
+
+void hexdump(file_data_t *fd, unsigned ofs, int len)
+{
+ unsigned u, p;
+ char s[17];
+ char ind[] = " ";
+ int i;
+
+ if(!len || !fd) return;
+
+ if(len < 0 || ofs + len > fd->size) {
+ printf("invalid data range: %d bytes at 0x%x\n", len, ofs);
+ }
+
+ p = ofs;
+ u = ofs & ~0xf;
+
+ memset(s, ' ', 16);
+ s[16] = 0;
+
+ if(u < p) {
+ printf("%s%05x ", ind, u);
+ i = (p - u) * 3;
+ if(i > 8 * 3) i++;
+ while(i--) printf(" ");
+ }
+
+ while(p < ofs + len) {
+ s[p & 15] = (fd->data[p] >= 0x20 && fd->data[p] <= 0x7e) ? fd->data[p] : '.';
+ if(!(p & 15)) {
+ printf("%s%05x ", ind, p);
+ }
+ if(!(p & 7) && (p & 15)) printf(" ");
+ printf("%02x ", fd->data[p]);
+ if(!(++p & 15)) {
+ printf(" %s\n", s);
+ }
+ }
+
+ if(p & 15) {
+ s[p & 15] = 0;
+ if(!(p & 8)) printf(" ");
+ printf("%*s %s\n", 3 * (16 - (p & 15)), "", s);
+ }
+
+
+}
+
+
+void show_info(char *name)
+{
+ unsigned ofs = 0;
+ file_data_t fd;
+ unsigned u;
+
+ fd = read_file(name);
+
+ if(fd.size >= sizeof header) {
+ header.magic_id = read_uint32_le(&fd, 0);
+ header.version = fd.data[4];
+ header.res_1 = fd.data[5];
+ header.res_2 = fd.data[6];
+ header.res_3 = fd.data[7];
+ header.bincode = read_uint32_le(&fd, 8);
+ header.bincode_size = read_uint32_le(&fd, 12);
+ header.bincode_crc = read_uint32_le(&fd, 16);
+ header.dict = read_uint32_le(&fd, 20);
+ header.code = read_uint32_le(&fd, 24);
+ header.code_size = read_uint32_le(&fd, 28);
+ ofs += sizeof header;
+ }
+
+ if(header.magic_id != MAGIC) {
+ fprintf(stderr, "No gfxboot file.\n");
+ return;
+ }
+
+ if(header.version != VERSION) {
+ fprintf(stderr, "Version %u not supported.\n", header.version);
+ return;
+ }
+
+ if(header.bincode && header.bincode_size) {
+ printf("%u bytes ia32 code:\n", header.bincode_size);
+ if(verbose >= 2) hexdump(&fd, header.bincode, header.bincode_size);
+ printf("\n");
+ }
+
+ if(header.dict && header.code) {
+ u = header.code - header.dict;
+ printf("dictionary: %d bytes at 0x%x:\n", u, header.dict);
+ hexdump(&fd, header.dict, u);
+ printf("\n");
+ }
+
+ if(header.code && header.code_size) {
+ printf("%u bytes code:\n", header.code_size);
+ if(verbose >= 1) hexdump(&fd, header.code, header.code_size);
+ printf("\n");
+ decompile(fd.data + header.code, header.code_size);
+ printf("\n");
+ }
+}
+
+
+/*
+ * Convert hex number of excatly len bytes.
+ */
+int get_hex(char *s, int len, unsigned *val)
+{
+ unsigned u;
+ char s2[len + 1];
+
+ if(!s || !len) return 0;
+ strncpy(s2, s, len);
+ s2[len] = 0;
+
+ u = strtoul(s2, &s, 16);
+ if(!*s) {
+ if(val) *val = u;
+ return 1;
+ }
+
+ return 0;
+}
+
+
+char *utf32_to_utf8(int u8)
+{
+ static char buf[16];
+ static iconv_t ic = (iconv_t) -1;
+ char *ibuf, *obuf;
+ size_t obuf_left, ibuf_left;
+ int i;
+
+ *buf = 0;
+
+ if(ic == (iconv_t) -1) {
+ ic = iconv_open("utf8", "utf32le");
+ if(ic == (iconv_t) -1) {
+ fprintf(stderr, "Error: can't convert utf8 data.\n");
+ exit(1);
+ }
+ }
+
+ ibuf = (char *) &u8;
+ obuf = buf;
+ ibuf_left = 4;
+ obuf_left = sizeof buf - 1;
+
+ i = iconv(ic, &ibuf, &ibuf_left, &obuf, &obuf_left);
+
+ if(i >= 0) {
+ i = sizeof buf - 1 - obuf_left;
+ buf[i] = 0;
+ }
+ else {
+ fprintf(stderr, "Warning: failed to convert 0x%x to utf8.\n", u8);
+ }
+
+ return buf;
+}
+
+
+char *next_word(char **ptr)
+{
+ char *s, *start, *utf8;
+ int is_str, is_comment;
+ static char word[1024];
+ int i, n;
+ char qc = 0;
+
+ s = *ptr;
+
+ *word = 0;
+
+ while(isspace(*s)) if(*s++ == '\n') line++;
+
+ if(!*s) {
+ *ptr = s;
+ return word;
+ }
+
+ start = s;
+
+ qc = *start;
+ is_str = qc == '"' || qc == '\'' ? 1 : 0;
+ is_comment = qc == '%' ? 1 : 0;
+
+ if(is_comment) {
+ while(*s && *s != '\n') s++;
+ }
+ else if(is_str) {
+ *word = *s++;
+ for(n = 1; n < sizeof word - 1; n++) {
+ if(!*s) break;
+ if(*s == qc) { s++; break; }
+ if(*s == '\\') {
+ s++;
+ switch(*s) {
+ case 0:
+ word[n++] = '\\';
+ break;
+
+ case 'n':
+ word[n] = '\n';
+ break;
+
+ case 't':
+ word[n] = '\t';
+ break;
+
+ case '0':
+ if(
+ s[0] >= '0' && s[0] <= '7' &&
+ s[1] >= '0' && s[1] <= '7' &&
+ s[2] >= '0' && s[2] <= '7'
+ ) {
+ word[n] = ((s[0] - '0') << 6) + ((s[1] - '0') << 3) + (s[2] - '0');
+ s += 2;
+ }
+ else {
+ word[n] = *s;
+ }
+ break;
+
+ case 'x':
+ if(get_hex(s + 1, 2, &i)) {
+ s += 2;
+ word[n] = i;
+ }
+ else {
+ word[n++] = '\\';
+ word[n] = *s;
+ }
+ break;
+
+ case 'u':
+ if(get_hex(s + 1, 4, &i)) {
+ s += 4;
+ utf8 = utf32_to_utf8(i);
+ while(*utf8) word[n++] = *utf8++;
+ n--;
+ }
+ else {
+ word[n++] = '\\';
+ word[n] = *s;
+ }
+ break;
+
+ case 'U':
+ if(get_hex(s + 1, 8, &i)) {
+ s += 8;
+ utf8 = utf32_to_utf8(i);
+ while(*utf8) word[n++] = *utf8++;
+ n--;
+ }
+ else {
+ word[n++] = '\\';
+ word[n] = *s;
+ }
+ break;
+
+ default:
+ word[n] = *s;
+ }
+ s++;
+ }
+ else {
+ word[n] = *s++;
+ }
+ }
+ word[n] = 0;
+ }
+ else {
+ while(!isspace(*s)) s++;
+ }
+
+ if(!is_str) {
+ n = s - start;
+ if(n >= sizeof word) n = sizeof word - 1;
+ strncpy(word, start, n);
+ word[n] = 0;
+ }
+
+ *ptr = s;
+
+ return word;
+}
+
+
+void parse_comment(char *comment, file_data_t *incl)
+{
+ char t[5][100];
+ int n;
+
+ n = sscanf(comment, " %99s %99s %99s %99s %99s", t[0], t[1], t[2], t[3], t[4]);
+
+ if(!n) return;
+
+ if(n == 2 && !strcmp(t[0], "include")) {
+ *incl = read_file(t[1]);
+ if(!incl->data) exit(18);
+ add_data(incl, "", 1);
+ fprintf(stderr, "Including \"%s\"\n", incl->name);
+ return;
+ }
+}
+
+
+int find_in_dict(char *name)
+{
+ int i;
+
+ for(i = 0; i < dict_size; i++) {
+ if(dict[i].name && !strcmp(name, dict[i].name)) return i;
+ }
+
+ return -1;
+}
+
+
+unsigned usize(unsigned u)
+{
+ if(u >> 24) return 4;
+ if(u >> 16) return 3;
+ if(u >> 8) return 2;
+ if(u) return 1;
+
+ return 0;
+}
+
+
+unsigned isize(int i)
+{
+ if(i == 0) return 0;
+ if(i >= -0x80 && i <= 0x7f) return 1;
+ if(i >= -0x8000 && i <= 0x7fff) return 2;
+ if(i >= -0x800000 && i <= 0x7fffff) return 3;
+
+ return 4;
+}
+
+
+int translate(int pass)
+{
+ int i;
+ code_t *c;
+ unsigned u0, u1, u2;
+ unsigned ofs = 0;
+ int changed = 0;
+
+ if(pass == 0) {
+ changed = 1;
+ for(i = 0; i < code_size; i++) {
+ c = code + i;
+
+ c->ofs = ofs;
+
+ switch(c->type) {
+ case t_skip:
+ c->size = 0;
+ break;
+
+ case t_int:
+ case t_unsigned:
+ u0 = isize(c->value.u);
+ u1 = usize(c->value.u);
+ u2 = u0;
+ if(u1 < u0) {
+ c->type = t_unsigned;
+ u2 = u1;
+ }
+ c->size = u2 + 1;
+ c->enc = malloc(c->size);
+ c->enc[0] = c->type + (u2 << 4);
+ if(u2) copy_number_le(c->enc + 1, c->value.u, u2);
+ break;
+
+ case t_string:
+ u1 = strlen(c->value.p) + 1;
+ u0 = usize(u1);
+ c->size = u1 + u0 + 1;
+ c->enc = malloc(c->size);
+ c->enc[0] = c->type + (u0 << 4) + 0x80;
+ copy_number_le(c->enc + 1, u1, u0);
+ memcpy(c->enc + 1 + u0, c->value.p, u1);
+ break;
+
+ case t_code:
+ c->size = 5;
+ break;
+
+ case t_ret:
+ case t_end:
+ c->size = 1;
+ c->enc = malloc(c->size);
+ c->enc[0] = c->type;
+ break;
+
+ case t_none:
+ case t_bool:
+ case t_sec:
+ case t_prim:
+ case t_dict_idx:
+ u0 = usize(c->value.u);
+ c->size = u0 + 1;
+ c->enc = malloc(c->size);
+ c->enc[0] = c->type + (u0 << 4);
+ if(u0) copy_number_le(c->enc + 1, c->value.u, u0);
+ break;
+
+ default:
+ fprintf(stderr, "Internal oops %d: type %d not allowed\n", __LINE__, c->type);
+ exit(8);
+ }
+
+ ofs += c->size;
+ }
+ }
+ else {
+ for(i = 0; i < code_size; i++) {
+ c = code + i;
+
+ if(c->ofs != ofs) changed = 1;
+ c->ofs = ofs;
+
+ if(c->type == t_code) {
+ u0 = c->value.u;
+ if(u0 >= code_size) {
+ fprintf(stderr, "Internal error %d\n", __LINE__);
+ exit(11);
+ }
+ u1 = usize(code[u0].ofs);
+ if(c->size != u1 + 1) changed = 1;
+ c->size = u1 + 1;
+ if(c->enc) free(c->enc);
+ c->enc = malloc(c->size);
+ c->enc[0] = c->type + (u1 << 4);
+ if(u1) copy_number_le(c->enc + 1, code[u0].ofs, u1);
+ }
+
+ ofs += c->size;
+ }
+ }
+
+ return changed;
+}
+
+
+void encode_dict()
+{
+ unsigned u;
+ int i;
+
+ if(dict_size == 0 || dict_size > 0xffff) {
+ fprintf(stderr, "Internal oops %d\n", __LINE__);
+ exit(6);
+ }
+
+ add_number_le(&dict_file, dict_size, 4);
+
+ u = 0;
+
+ for(i = 0; i < dict_size; i++) {
+ if(dict[i].type == t_none || dict[i].type == t_prim) continue;
+ add_number_le(&dict_file, i, 2);
+ add_data(&dict_file, &dict[i].type, 1);
+ add_number_le(&dict_file, dict[i].value.u, 4);
+ u++;
+ }
+
+ dict_file.data[2] = u;
+ dict_file.data[3] = u >> 8;
+}
+
+
+void parse_config(char *name, char *log_file)
+{
+ char *word;
+ file_data_t cfg[MAX_INCLUDE];
+ file_data_t incl;
+ int i, j;
+ unsigned u;
+ dict_t *d;
+ code_t *c, *c1;
+ char *s;
+ FILE *lf = NULL;
+ int incl_level = 0;
+
+ cfg[incl_level] = read_file(name);
+ add_data(&cfg[incl_level], "", 1);
+
+ if(!cfg[incl_level].ptr || !*cfg[incl_level].ptr) {
+ fprintf(stderr, "Empty config file!\n");
+ exit(1);
+ }
+
+ if(log_file && *log_file) lf = fopen(log_file, "w");
+
+ header.magic_id = MAGIC;
+ header.version = VERSION;
+
+ // setup initial vocabulary
+ for(i = 0; i < sizeof prim_names / sizeof *prim_names; i++) {
+ d = new_dict();
+ d->type = prim_names[i].type;
+ d->value.u = prim_names[i].value;
+ d->name = prim_names[i].name;
+ }
+
+ while(*cfg[incl_level].ptr || incl_level) {
+ if(!*cfg[incl_level].ptr) {
+ incl_level--;
+ line = cfg[incl_level].line;
+ }
+ word = next_word((char **) &cfg[incl_level].ptr); // unsigned char **
+ if(!word || !*word) continue;
+
+ if(word[0] == '%') {
+ if(word[1] == '%') {
+ incl.ptr = NULL;
+ parse_comment(word + 2, &incl);
+ if(incl.ptr) {
+ if(incl_level == MAX_INCLUDE - 1) {
+ fprintf(stderr, "Error: include level exceeded\n");
+ exit(17);
+ }
+ else {
+ cfg[incl_level].line = line;
+ cfg[++incl_level] = incl;
+ line = 1;
+ }
+ }
+ }
+ continue;
+ }
+
+ if(verbose >= 2) printf(">%s< (%d)\n", word, line);
+
+ c = new_code();
+ c->line = line;
+ c->incl_level = incl_level;
+
+ if(*word == '"') {
+ c->type = t_string;
+ c->value.p = strdup(word + 1);
+ }
+ else if(*word == '\'') {
+ c->type = t_int;
+ c->value.u = word[1];
+ asprintf(&c->name, "%s'", word);
+ }
+ else if(*word == '/') {
+ c->name = strdup(word + 1);
+
+ c->type = t_dict_idx;
+
+ if((i = find_in_dict(word + 1)) == -1) {
+ d = new_dict();
+ d->type = t_none;
+ d->value.u = 1; // mark as defined
+ d->name = strdup(word + 1);
+ c->value.u = dict_size - 1;
+ }
+ else {
+ if(dict[i].type == t_none && !dict[i].value.u) {
+ dict[i].value.u = 1; // mark as defined
+ }
+ c->value.u = i;
+ }
+ }
+ else if(!strcmp(word, "{")) {
+ c->type = t_code;
+ c->name = strdup(word);
+ }
+ else if(!strcmp(word, "}")) {
+ c->type = t_ret;
+ c->name = strdup(word);
+ for(c1 = c; c1 >= code; c1--) {
+ if(c1->type == t_code && !c1->value.u) {
+ // point _after_ "}"
+ c1->value.u = c - code + 1;
+ break;
+ }
+ }
+ if(c1 < code) {
+ fprintf(stderr, "Syntax error: no matching \"{\" for \"}\" in line %d\n", line);
+ exit(10);
+ }
+ }
+ else {
+ c->name = strdup(word);
+
+ i = find_in_dict(word);
+
+ if(i == -1) {
+ u = strtoul(word, &s, 0);
+ if(*s) {
+ d = new_dict();
+ d->type = t_none;
+ d->name = strdup(word);
+ c->type = t_sec;
+ c->value.u = dict_size - 1;
+ }
+ else {
+ c->type = t_int;
+ c->value.u = u;
+ }
+ }
+ else {
+ c->type = t_sec;
+ c->value.u = i;
+ }
+ }
+ }
+
+ // add a final 'end'
+ c = new_code();
+ c->type = t_end;
+ c->name = "end";
+
+ // check vocabulary
+ for(i = j = 0; i < dict_size; i++) {
+ if(
+ dict[i].type == t_none && !dict[i].value.u &&
+ i >= sizeof prim_names / sizeof *prim_names /* callback functions need not be defined */
+ ) {
+ if(!j) fprintf(stderr, "Undefined words:");
+ else fprintf(stderr, ",");
+ fprintf(stderr, " %s", dict[i].name);
+ j = 1;
+ }
+ }
+ if(j) {
+ fprintf(stderr, "\n");
+ if(!opt_force) exit(10);
+ }
+
+ if(optimize) {
+ if(lf) fprintf(lf, "# searching for unused code:\n");
+ for(i = 0; i < 64; i++) {
+ if(verbose && lf) fprintf(lf, "# pass %d\n", i + 1);
+ if(!optimize_code(lf)) break;
+ }
+ if(lf) fprintf(lf, "# %d optimization passes\n", i + 1);
+ if(i) {
+ if(lf) fprintf(lf, "# searching for unused dictionary entries:\n");
+ optimize_dict(lf);
+ }
+ }
+
+ // now translate to byte code
+ for(i = 0; i < 20; i++) {
+ if(!translate(i)) break;
+ }
+ if(lf) fprintf(lf, "# %d encoding passes\n", i + 1);
+ if(i == 20) {
+ fprintf(stderr, "Oops, code translation does not converge.\n");
+ exit(7);
+ }
+
+ // store it
+ for(i = 0; i < code_size; i++) {
+ if((!code[i].enc || !code[i].size) && code[i].type != t_skip) {
+ fprintf(stderr, "Internal oops %d\n", __LINE__);
+ exit(8);
+ }
+ add_data(&pscode, code[i].enc, code[i].size);
+ }
+
+ // now encode the dictionary
+ encode_dict();
+
+ log_code(lf);
+ log_dict(lf);
+
+ if(lf) fclose(lf);
+}
+
+
+/*
+ * Remove deleted dictionary entries.
+ */
+void optimize_dict(FILE *lf)
+{
+ int i;
+ int old_ofs, new_ofs;
+
+ for(old_ofs = new_ofs = 0; old_ofs < dict_size; old_ofs++) {
+ if(dict[old_ofs].del) continue;
+ if(old_ofs != new_ofs) {
+ if(verbose && lf) fprintf(lf, "# rename %d -> %d\n", old_ofs, new_ofs);
+ dict[new_ofs] = dict[old_ofs];
+ for(i = 0; i < code_size; i++) {
+ if(
+ (
+ code[i].type == t_sec ||
+ code[i].type == t_dict_idx
+ ) &&
+ code[i].value.u == old_ofs
+ ) {
+ code[i].value.u = new_ofs;
+ }
+ }
+ }
+ new_ofs++;
+ }
+ if(lf && new_ofs != old_ofs) {
+ fprintf(lf, "# new dictionary size %d (%d - %d)\n", new_ofs, old_ofs, old_ofs - new_ofs);
+ }
+
+ dict_size = new_ofs;
+}
+
+
+/*
+ * Skip deleted code.
+ */
+unsigned skip_code(unsigned pos)
+{
+ while(pos < code_size && code[pos].type == t_skip) pos++;
+
+ return pos;
+}
+
+
+/*
+ * Return next instruction.
+ */
+unsigned next_code(unsigned pos)
+{
+ if((pos + 1) >= code_size) return pos;
+
+ return skip_code(++pos);
+}
+
+
+int optimize_code(FILE *lf)
+{
+ unsigned i;
+ int changed, ind = 0;
+ code_t *c;
+
+ for(i = 0; i < dict_size; i++) {
+ dict[i].def = dict[i].def_idx =
+ dict[i].ref = dict[i].ref_idx =
+ dict[i].ref0 = dict[i].ref0_idx = 0;
+ }
+
+ for(i = 0; i < code_size; i++) {
+ c = code + i;
+
+ switch(c->type) {
+ case t_code:
+ ind++;
+ break;
+
+ case t_ret:
+ if(!ind) {
+ fprintf(stderr, "Warning: nesting error at line %d\n", c->line);
+ }
+ ind--;
+ break;
+
+ case t_sec:
+ if(c->value.u < dict_size) {
+ dict[c->value.u].ref++;
+ dict[c->value.u].ref_idx = i;
+ dict[c->value.u].ref_ind = ind;
+ if(ind == 0 && !dict[c->value.u].ref0) {
+ dict[c->value.u].ref0 = 1;
+ dict[c->value.u].ref0_idx = i;
+ }
+ }
+ break;
+
+ case t_dict_idx:
+ if(c->value.u < dict_size) {
+ dict[c->value.u].def++;
+ dict[c->value.u].def_idx = i;
+ dict[c->value.u].def_ind = ind;
+ }
+ break;
+
+ default:
+ break;
+ }
+ }
+
+ changed =
+ optimize_code1(lf) ||
+ optimize_code2(lf) ||
+ optimize_code3(lf) ||
+ optimize_code4(lf) ||
+ optimize_code5(lf) ||
+ optimize_code6(lf) ||
+ optimize_code7(lf) ? 1 : 0;
+
+ return changed;
+}
+
+
+/*
+ * Find references to primary words.
+ */
+int optimize_code1(FILE *lf)
+{
+ unsigned i, j;
+ int changed = 0;
+ code_t *c;
+
+ for(i = 0; i < dict_size; i++) {
+ if(
+ i < sizeof prim_names / sizeof *prim_names &&
+ !dict[i].del &&
+ dict[i].def == 0 &&
+ dict[i].ref &&
+ dict[i].type == t_prim
+ ) {
+ if(verbose && lf) fprintf(lf, "# replacing %s\n", dict[i].name);
+ for(j = 0; j < code_size; j++) {
+ c = code + j;
+ if(c->type == t_sec && c->value.u == i) {
+ c->type = dict[i].type;
+ c->value.u = dict[i].value.u;
+ }
+ }
+
+ changed = 1;
+ }
+ }
+
+ return changed;
+}
+
+
+/*
+ * Remove things like
+ *
+ * /foo 123 def
+ * /foo "abc" def
+ * /foo /bar def
+ *
+ * if foo is unused.
+ */
+int optimize_code2(FILE *lf)
+{
+ unsigned i, j;
+ int changed = 0;
+ code_t *c0, *c1, *c2;
+
+ for(i = 0; i < dict_size; i++) {
+ if(
+ i >= sizeof prim_names / sizeof *prim_names &&
+ !dict[i].del &&
+ !dict[i].ref &&
+ dict[i].def == 1 &&
+ dict[i].type == t_none
+ ) {
+ c0 = code + (j = dict[i].def_idx);
+ c1 = code + (j = next_code(j));
+ c2 = code + (j = next_code(j));
+
+ if(
+ c0->type == t_dict_idx &&
+ c0->value.u == i &&
+ (
+ c1->type == t_none ||
+ c1->type == t_int ||
+ c1->type == t_unsigned ||
+ c1->type == t_bool ||
+ c1->type == t_string ||
+ c1->type == t_dict_idx ||
+ c1->type == t_ptr
+ ) &&
+ c2->type == t_prim &&
+ c2->value.u == p_def
+ ) {
+ if(verbose && lf) fprintf(lf, "# defined but unused: %s (index %d)\n", dict[i].name, i);
+ if(verbose && lf) fprintf(lf, "# deleting code: %d - %d\n", dict[i].def_idx, j);
+ c0->type = c1->type = c2->type = t_skip;
+ dict[i].del = 1;
+
+ changed = 1;
+ }
+ }
+ }
+
+ return changed;
+}
+
+
+/*
+ * Remove things like
+ *
+ * /foo { ... } def
+ *
+ * if foo is unused.
+ */
+int optimize_code3(FILE *lf)
+{
+ unsigned i, j, k;
+ int changed = 0;
+ code_t *c0, *c1;
+
+ for(i = 0; i < dict_size; i++) {
+ if(
+ i >= sizeof prim_names / sizeof *prim_names &&
+ !dict[i].del &&
+ !dict[i].ref &&
+ dict[i].def == 1 &&
+ dict[i].type == t_none
+ ) {
+ c0 = code + (j = dict[i].def_idx);
+ c1 = code + next_code(j);
+
+ if(c1 == c0) continue;
+
+ if(
+ c0->type == t_dict_idx &&
+ c0->value.u == i &&
+ c1->type == t_code &&
+ code[j = skip_code(c1->value.u)].type == t_prim &&
+ code[j].value.u == p_def &&
+ j > dict[i].def_idx
+ ) {
+ if(verbose && lf) fprintf(lf, "# defined but unused: %s (index %d)\n", dict[i].name, i);
+ if(verbose && lf) fprintf(lf, "# deleting code: %d - %d\n", dict[i].def_idx, j);
+ for(k = dict[i].def_idx; k <= j; k++) code[k].type = t_skip;
+ dict[i].del = 1;
+
+ changed = 1;
+ }
+ }
+ }
+
+ return changed;
+}
+
+
+
+/*
+ * Find unused dictionary entries.
+ */
+int optimize_code4(FILE *lf)
+{
+ unsigned i;
+ int changed = 0;
+
+ for(i = 0; i < dict_size; i++) {
+ if(
+ i >= sizeof prim_names / sizeof *prim_names &&
+ !dict[i].del &&
+ !dict[i].ref &&
+ !dict[i].def
+ ) {
+ if(verbose && lf) fprintf(lf, "# unused: %s (index %d)\n", dict[i].name, i);
+
+ dict[i].del = 1;
+
+ changed = 1;
+ }
+ }
+
+ return changed;
+}
+
+
+/*
+ * Replace references to constant global vars.
+ */
+int optimize_code5(FILE *lf)
+{
+ unsigned i, j, k;
+ int changed = 0;
+ code_t *c, *c0, *c1, *c2;
+ char *s;
+
+ for(i = 0; i < dict_size; i++) {
+ if(
+ i >= sizeof prim_names / sizeof *prim_names &&
+ !dict[i].del &&
+ dict[i].def == 1 &&
+ dict[i].def_ind == 0 &&
+ (
+ !dict[i].ref0 ||
+ dict[i].ref0_idx > dict[i].def_idx
+ ) &&
+ dict[i].type == t_none
+ ) {
+ c0 = code + (j = dict[i].def_idx);
+ c1 = code + (j = next_code(j));
+ c2 = code + (j = next_code(j));
+
+ if(
+ c0->type == t_dict_idx &&
+ c0->value.u == i &&
+ (
+ c1->type == t_none ||
+ c1->type == t_int ||
+ c1->type == t_unsigned ||
+ c1->type == t_bool ||
+ c1->type == t_end
+ ) &&
+ c2->type == t_prim &&
+ c2->value.u == p_def
+ ) {
+ if(verbose && lf) fprintf(lf, "# global constant: %s (index %d)\n", dict[i].name, i);
+ if(verbose && lf) fprintf(lf, "# replacing %s with %s\n", dict[i].name, c1->name);
+ for(k = 0; k < code_size; k++) {
+ c = code + k;
+ if(c->type == t_sec && c->value.u == i) {
+ c->type = c1->type;
+ c->value = c1->value;
+ if(c->type == t_int || c->type == t_unsigned) {
+ asprintf(&s, "%s # %s", c1->name, c->name);
+ free(c->name);
+ c->name = s;
+ }
+ else if(c->type == t_bool) {
+ asprintf(&s, "%s # %s", c->value.u ? "true" : "false", c->name);
+ free(c->name);
+ c->name = s;
+ }
+ else if(c->type == t_none) {
+ asprintf(&s, ".undef # %s", c->name);
+ free(c->name);
+ c->name = s;
+ }
+ else if(c->type == t_end) {
+ asprintf(&s, ".end # %s", c->name);
+ free(c->name);
+ c->name = s;
+ }
+ }
+ }
+
+ dict[i].del = 1;
+
+ if(verbose && lf) fprintf(lf, "# deleting code: %d - %d\n", dict[i].def_idx, j);
+ c0->type = c1->type = c2->type = t_skip;
+
+ changed = 1;
+ }
+ }
+ }
+
+ return changed;
+}
+
+
+/*
+ * Find ".undef" or ".end".
+ */
+int optimize_code6(FILE *lf)
+{
+ unsigned i, j;
+ int changed = 0;
+ code_t *c0, *c1, *c2;
+ char *s;
+
+ for(i = 0; i < code_size; i++) {
+ c0 = code + i;
+ c1 = code + (j = next_code(i));
+ c2 = code + (j = next_code(j));
+ if(
+ c0->type == t_int && c0->value.u == 0 &&
+ c1->type == t_int && (c1->value.u == t_none || c1->value.u == t_end) &&
+ c2->type == t_prim &&
+ c2->value.u == p_settype
+ ) {
+ c0->type = c1->value.u;
+ c0->value.u = 0;
+ asprintf(&s, "%s # %s", c0->type ? ".end" : ".undef", c0->name);
+ free(c0->name);
+ c0->name = s;
+
+ if(verbose && lf) fprintf(lf, "# constant expression: %s (at %d)\n", c0->name, i);
+ if(verbose && lf) fprintf(lf, "# deleting code: %d - %d\n", i + 1, j);
+ c1->type = c2->type = t_skip;
+
+ changed = 1;
+ }
+ }
+
+ return changed;
+}
+
+
+/*
+ * Find constant boolean expr.
+ */
+int optimize_code7(FILE *lf)
+{
+ unsigned i, j;
+ int changed = 0;
+ code_t *c0, *c1, *c2;
+ char *s;
+
+ for(i = 0; i < code_size; i++) {
+ c0 = code + i;
+ c1 = code + (j = next_code(i));
+ c2 = code + (j = next_code(j));
+ if(
+ c0->type == t_int && c0->value.u == 0 &&
+ c1->type == t_int && c1->value.u == 0 &&
+ c2->type == t_prim &&
+ (c2->value.u == p_eq || c2->value.u == p_ne)
+ ) {
+ c0->type = t_bool;
+ c0->value.u = c0->value.u == c1->value.u ? 1 : 0;
+ if(c2->value.u == p_ne) c0->value.u ^= 1;
+ asprintf(&s, "%s # %s", c0->value.u ? "true" : "false", c0->name);
+ free(c0->name);
+ c0->name = s;
+
+ if(verbose && lf) fprintf(lf, "# constant expression: %d:%d (at %d)\n", c0->type, c0->value.u, i);
+ if(verbose && lf) fprintf(lf, "# deleting code: %d - %d\n", i + 1, j);
+ c1->type = c2->type = t_skip;
+
+ changed = 1;
+ }
+ }
+
+ return changed;
+}
+
+
+void log_dict(FILE *lf)
+{
+ int i, j;
+
+ if(!lf) return;
+
+ fputc('\n', lf);
+ log_cline(lf);
+ fprintf(lf, "# dictionary: %d entries\n", dict_size);
+ log_cline(lf);
+ for(i = 0; i < dict_size; i++) {
+ fprintf(lf, "%5d%*s", i, 12 + (verbose ? 7 : 0), "");
+ fprintf(lf, "%-6s ", type_name[dict[i].type & 15]);
+ if(dict[i].type == t_string) {
+ j = fprintf(lf, "\"%s\"", dict[i].value.p);
+ }
+ else {
+ j = fprintf(lf, "0x%x", dict[i].value.u);
+ }
+ if(j > 24) j = 24;
+ fprintf(lf, "%*s", 25 - j, "");
+ fprintf(lf, "%s\n", dict[i].name ? dict[i].name : "\"\"");
+ }
+}
+
+
+void log_code(FILE *lf)
+{
+ int i, j, l, line = 0, incl_level = 0;
+ int ind = 0;
+ char *s;
+
+ if(!lf) return;
+
+ for(i = j = 0; i < code_size; i++) {
+ if(code[i].type == t_skip) j++;
+ }
+
+ fputc('\n', lf);
+ log_cline(lf);
+ fprintf(lf, "# code: %d entries (%d - %d)\n", code_size - j, code_size, j);
+ log_cline(lf);
+ for(i = 0; i < code_size; i++) {
+ if(code[i].type == t_skip && !verbose) continue;
+ if((line != code[i].line || incl_level != code[i].incl_level) && code[i].line) {
+ line = code[i].line;
+ incl_level = code[i].incl_level;
+ fprintf(lf, "%5d", line);
+ if(incl_level) {
+ fprintf(lf, " %d ", incl_level);
+ }
+ else {
+ fprintf(lf, " ");
+ }
+ }
+ else {
+ fprintf(lf, "%9s", "");
+ }
+ if(verbose) fprintf(lf, "%5d ", i);
+ if(code[i].size) {
+ fprintf(lf, "0x%04x ", code[i].ofs);
+ }
+ else {
+ fprintf(lf, "%*s", 8, "");
+ }
+ fprintf(lf, "%-6s", type_name[code[i].type & 15]);
+ l = code[i].enc ? code[i].size : 0;
+ if(l > 8) l = 8;
+ for(j = 0; j < l; j++) {
+ fprintf(lf, " %02x", code[i].enc[j]);
+ }
+ if(
+ (
+ code[i].type == t_ret ||
+ (code[i].type == t_sec && !strcmp(code[i].name, "]"))
+ ) &&
+ ind > 0
+ ) ind -= 2;
+ fprintf(lf, "%*s", 3 * (8 - l) + 2 + ind, "");
+ if(code[i].type == t_skip) fprintf(lf, "# ");
+ if(
+ code[i].type == t_code ||
+ (code[i].type == t_sec && !strcmp(code[i].name, "["))
+ ) ind += 2;
+ if(code[i].type == t_string) {
+ fprintf(lf, "\"");
+ s = code[i].value.p;
+ while(*s) {
+ if(*s >= 0 && *s < 0x20) {
+ if(*s == '\n') {
+ fprintf(lf, "\\n");
+ }
+ else if(*s == '\t') {
+ fprintf(lf, "\\t");
+ }
+ else {
+ fprintf(lf, "\\x%02x", (unsigned char) *s);
+ }
+ }
+ else {
+ fprintf(lf, "%c", *s);
+ }
+ s++;
+ }
+ fprintf(lf, "\"");
+ }
+ else {
+ fprintf(lf,
+ "%s%s",
+ code[i].type == t_dict_idx ? "/" : "",
+ code[i].name ? code[i].name : ""
+ );
+ }
+
+ // while we're here, just do a consistency check
+ if(
+ code[i].type == t_sec &&
+ (
+ !code[i].name ||
+ strcmp(code[i].name, dict[code[i].value.u].name)
+ )
+ ) {
+ fprintf(stderr, "Internal oops %d: broken dictionary\n", __LINE__);
+ exit(19);
+ }
+
+ if(code[i].enc && code[i].size > 8) {
+ for(j = 8; j < code[i].size; j++) {
+ if(j & 7) {
+ fprintf(lf, " ");
+ }
+ else {
+ fprintf(lf, "\n%*s", 24 + (verbose ? 7 : 0), "");
+ }
+ fprintf(lf, "%02x", code[i].enc[j]);
+ }
+ }
+ fprintf(lf, "\n");
+ }
+}
+
+
+void log_cline(FILE *lf)
+{
+ int i = 78;
+
+ fputc('#', lf);
+ while(i--) fputc('-', lf);
+ fputc('\n', lf);
+}
+
+
+char *add_to_line(char *s)
+{
+ static char buf[10240] = {};
+ static int ind = 0;
+ static int first = 1;
+
+ if(!s) {
+ if(first) return "";
+ return buf;
+ }
+
+ if(strlen(buf) + strlen(s) >= sizeof buf - 1) {
+ fprintf(stderr, "Oops, buffer overflow %d\n", __LINE__);
+ exit(5);
+ }
+
+ if(!strcmp(s, "{")) ind += 2;
+ if(!strcmp(s, "}")) ind -= 2;
+ if(ind < 0) ind = 0;
+
+ if(!*s) {
+ sprintf(buf, "%*s", ind, "");
+ first = 1;
+ return buf;
+ }
+
+ if(first) {
+ if(!strcmp(s, "}")) {
+ sprintf(buf, "%*s", ind, "");
+ }
+ }
+ else {
+ strcat(buf, " ");
+ }
+
+ strcat(buf, s);
+
+ first = 0;
+
+ return buf;
+}
+
+void decompile(unsigned char *data, unsigned size)
+{
+ int i, j, idx = 0;
+ unsigned u, val, uc;
+ unsigned inst_size;
+ dict_t *d;
+ unsigned type;
+ char *s, buf[1024];
+ unsigned char *p;
+
+ // setup initial vocabulary
+ for(i = 0; i < sizeof prim_names / sizeof *prim_names; i++) {
+ d = new_dict();
+ d->type = prim_names[i].type;
+ d->value.u = prim_names[i].value;
+ d->name = prim_names[i].name;
+ }
+
+ for(i = 0; i < size; i += inst_size, idx++) {
+ u = (data[i] >> 4) & 7;
+ val = 0;
+ if(u >= 1) val = data[i + 1];
+ if(u >= 2) val += data[i + 2] << 8;
+ if(u >= 3) val += data[i + 3] << 16;
+ if(u >= 4) val += data[i + 4] << 24;
+ inst_size = 1 + u;
+ if((data[i] >> 4) & 8) {
+ inst_size += val;
+ }
+
+ if(i + inst_size > size) {
+ printf("Oops: bounds exceeded: %u > %u\n", i + inst_size, size);
+ return;
+ }
+
+ if(verbose >= 1) {
+ printf("%% %04x:", i);
+ for(j = 0; j < inst_size; j++) {
+ printf(" %02x", data[i + j]);
+ }
+ printf("\n");
+ }
+
+ switch((type = data[i] & 0x0f)) {
+ case t_code:
+ s = add_to_line("{");
+ printf("%s\n", s);
+ add_to_line("");
+ break;
+
+ case t_ret:
+ s = add_to_line(NULL);
+ if(*s) printf("%s\n", s);
+ add_to_line("");
+ add_to_line("}");
+ break;
+
+ case t_end:
+ uc = *add_to_line(NULL);
+ s = add_to_line("end");
+ if(uc) {
+ printf("%s\n", s);
+ }
+ else {
+ printf("%s\n\n", s);
+ }
+ add_to_line("");
+ break;
+
+ case t_int:
+ // expand sign bit
+ switch(u) {
+ case 1:
+ if(val & 0x80) val |= ~0xff;
+ break;
+ case 2:
+ if(val & 0x8000) val |= ~0xffff;
+ break;
+ case 3:
+ if(val & 0x800000) val |= ~0xffffff;
+ break;
+ }
+
+ case t_unsigned:
+ sprintf(buf, "%d", val);
+ add_to_line(buf);
+ break;
+
+ case t_string:
+ buf[0] = '"';
+ for(j = 1, p = data + i + u + 1; *p && j < sizeof buf - 10; p++) {
+ if(*p == '\n') {
+ buf[j++] = '\\';
+ buf[j++] = 'n';
+ }
+ else if(*p < 0x20 || *p >= 0x7f) {
+ buf[j++] = '\\';
+ buf[j++] = 'x';
+ uc = *p >> 4;
+ uc += uc > 9 ? 'a' - 10 : '0';
+ buf[j++] = uc;
+ uc = *p & 0xf;
+ uc += uc > 9 ? 'a' - 10 : '0';
+ buf[j++] = uc;
+ }
+ else {
+ buf[j++] = *p;
+ }
+ }
+ buf[j++] = '"';
+ buf[j] = 0;
+ s = add_to_line(buf);
+ break;
+
+ case t_sec:
+ if(val < dict_size && dict[val].name) {
+ sprintf(buf, "%s", dict[val].name);
+ }
+ else {
+ sprintf(buf, "name_%d", val);
+ }
+ s = add_to_line(buf);
+ printf("%s\n", s);
+ add_to_line("");
+ break;
+
+ case t_prim:
+ for(s = NULL, j = 0; j < sizeof prim_names / sizeof *prim_names; j++) {
+ if(val == prim_names[j].value) {
+ s = prim_names[j].name;
+ break;
+ }
+ }
+ if(s) {
+ sprintf(buf, "%s", s);
+ }
+ else {
+ sprintf(buf, "prim_<%d>", val);
+ }
+ s = add_to_line(buf);
+ printf("%s\n", s);
+ add_to_line("");
+ break;
+
+ case t_bool:
+ sprintf(buf, "%s", val ? "true" : "false");
+ s = add_to_line(buf);
+ printf("%s\n", s);
+ add_to_line("");
+ break;
+
+ case t_none:
+ sprintf(buf, ".undef");
+ s = add_to_line(buf);
+ printf("%s\n", s);
+ add_to_line("");
+ break;
+
+ case t_dict_idx:
+ if(val < dict_size && dict[val].name) {
+ sprintf(buf, "/%s", dict[val].name);
+ }
+ else {
+ sprintf(buf, "/name_%d", val);
+ }
+ add_to_line(buf);
+ break;
+
+ default:
+ fprintf(stderr, "Oops %d: type %d not allowed\n", __LINE__, type);
+ exit(8);
+ }
+ }
+}
+
+
diff --git a/gfxboot-font.c b/gfxboot-font.c
new file mode 100644
index 0000000..994d07b
--- /dev/null
+++ b/gfxboot-font.c
@@ -0,0 +1,1511 @@
+#define _GNU_SOURCE /* asprintf */
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <string.h>
+#include <ctype.h>
+#include <getopt.h>
+#include <iconv.h>
+#include <errno.h>
+#include <inttypes.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+
+#include <ft2build.h>
+#include FT_FREETYPE_H
+#include FT_SYNTHESIS_H
+
+
+#define MAGIC 0xd2828e06
+
+// 4 bits seem to be enough
+#define GRAY_BITS 4
+// 3 gave smallest file for about 16x16 pixel fonts, but it doesn't really matter much
+#define GRAY_BIT_COUNT 3
+
+#define MAX_GRAY ((1 << GRAY_BITS) - 3)
+#define REP_BLACK (MAX_GRAY + 1)
+#define REP_WHITE (MAX_GRAY + 2)
+
+struct option options[] = {
+ { "add", 1, NULL, 'a' },
+ { "add-charset", 1, NULL, 'c' },
+ { "font", 1, NULL, 'f' },
+ { "line-height", 1, NULL, 'l' },
+ { "font-height", 1, NULL, 'H' },
+ { "font-path", 1, NULL, 'p' },
+ { "show", 0, NULL, 's' },
+ { "add-text", 1, NULL, 't' },
+ { "verbose", 0, NULL, 'v' },
+ { "test", 0, NULL, 999 },
+ { }
+};
+
+
+typedef struct list_any_s {
+ struct list_any_s *next;
+} list_any_t;
+
+typedef struct {
+ void *start;
+ void *end;
+} list_t;
+
+typedef struct n_set_s {
+ struct n_set_s *next;
+ int first, last;
+} n_set_t;
+
+typedef struct {
+ unsigned size;
+ unsigned char *data;
+ unsigned real_size;
+} file_data_t;
+
+typedef struct __attribute ((packed)) {
+ uint32_t magic;
+ uint32_t entries;
+ int8_t height;
+ int8_t baseline;
+ int8_t line_height;
+} font_header_t;
+
+typedef struct font_s {
+ struct font_s *next;
+ char *name;
+ char *file_name;
+ FT_Face face;
+ int size;
+ int prop;
+ int space_width;
+ int dy;
+ unsigned index;
+ int height;
+ int baseline;
+ list_t chars; /* n_set_t */
+ unsigned used:1; /* font is actually used */
+ unsigned ok:1;
+ unsigned bold:1;
+ unsigned nobitmap:1;
+ unsigned autohint:2; /* 0: auto, 1: off, 2: on */
+ unsigned autosize:1;
+ unsigned autoshift:1;
+} font_t;
+
+typedef struct char_data_s {
+ struct char_data_s* next;
+ unsigned ok:1; /* char exists */
+ unsigned top:1;
+ unsigned bottom:1;
+ int c; /* char (utf32) */
+ font_t *font; /* pointer to font */
+ int x_advance;
+ int x_ofs; /* where to draw lower left bitmap corner */
+ int y_ofs;
+ unsigned char *bitmap; /* char bitmap, width x height */
+ int bitmap_width;
+ int bitmap_height;
+ unsigned char *data;
+ int data_len;
+} char_data_t;
+
+list_t font_list; /* font_t */
+list_t char_list; /* char_data_t */
+list_t chars_missing; /* n_set_t */
+list_t chars_top; /* n_set_t */
+list_t chars_bottom; /* n_set_t */
+
+int font_height;
+int font_y_ofs;
+
+struct {
+ int verbose;
+ int test;
+ int line_height;
+ int max_font_height;
+ char *font_path;
+ list_t chars; /* n_set_t */
+ char *file;
+ unsigned show:1;
+} opt;
+
+
+file_data_t *read_file(char *name);
+void dump_char(char_data_t *cd);
+void add_data(file_data_t *d, void *buffer, unsigned size);
+void write_data(file_data_t *d, char *name);
+int intersect(int first0, int last0, int first1, int last1);
+void insert_int_list(list_t *list, int first, int last);
+void *add_list(list_t *list, void *entry);
+void *new_mem(size_t size);
+char *new_str(char *str);
+int parse_int_list(list_t *list, char *str);
+char *search_font(char *font_path, char *name);
+void render_char(char_data_t *cd);
+int empty_row(char_data_t *cd, int row);
+int empty_column(char_data_t *cd, int column);
+void add_bbox(char_data_t *cd);
+void make_prop(char_data_t *cd);
+char *utf32_to_utf8(int u8);
+void add_bits(unsigned char *buf, int *buf_ptr, int bits, unsigned data);
+unsigned read_unsigned_bits(unsigned char *buf, int *buf_ptr, int bits);
+int read_signed_bits(unsigned char *buf, int *buf_ptr, int bits);
+int signed_bits(int num);
+int unsigned_bits(unsigned num);
+void encode_char(char_data_t *cd);
+int show_font(char *name);
+void get_font_height(font_t *font, int *height, int *y_ofs);
+
+
+int main(int argc, char **argv)
+{
+ int i, j, k, err, ofs;
+ char *str, *str1, *t, *s, *s1, *font_spec;
+ iconv_t ic = (iconv_t) -1, ic2;
+ char obuf[4], ibuf[6];
+ char obuf2[4*0x100], ibuf2[0x100];
+ char *obuf_ptr, *ibuf_ptr;
+ size_t obuf_left, ibuf_left;
+ FILE *f;
+ font_t *font;
+ n_set_t *n;
+ char_data_t *cd;
+ FT_Library ft_lib;
+ font_header_t fh;
+ file_data_t font_file = {};
+ unsigned char char_ofs[5];
+
+ opt.font_path = "\
+/usr/share/fonts/truetype:\
+/usr/share/fonts/Type1:\
+/usr/share/fonts/misc:\
+/usr/X11R6/lib/X11/fonts/truetype:\
+/usr/X11R6/lib/X11/fonts/Type1:\
+/usr/X11R6/lib/X11/fonts/misc\
+";
+
+ opterr = 0;
+
+ while((i = getopt_long(argc, argv, "Aa:c:f:H:l:p:st:v", options, NULL)) != -1) {
+ switch(i) {
+ case 'a':
+ err = parse_int_list(&opt.chars, optarg);
+ if(err) {
+ fprintf(stderr, "%s: invalid char range spec\n", optarg);
+ return 1;
+ }
+ break;
+
+ case 'c':
+ ic2 = iconv_open("utf32le", optarg);
+ if(ic2 == (iconv_t) -1) {
+ fprintf(stderr, "don't know char set %s\ntry 'iconv --list'\n", optarg);
+ return 1;
+ }
+ ibuf_ptr = ibuf2;
+ ibuf_left = sizeof ibuf2;
+ obuf_ptr = obuf2;
+ obuf_left = sizeof obuf2;
+ for(j = 0; j < sizeof ibuf2; j++) ibuf2[j] = j;
+ iconv(ic2, &ibuf_ptr, &ibuf_left, &obuf_ptr, &obuf_left);
+ for(str = obuf2; str < obuf_ptr; str += 4) {
+ i = *(int *) str;
+ if(i >= 0x20) insert_int_list(&opt.chars, i, i);
+ }
+ iconv_close(ic2);
+ break;
+
+ case 'f':
+ font = add_list(&font_list, new_mem(sizeof *font));
+ font_spec = new_str(optarg);
+
+ if((s = strchr(font_spec, ':'))) {
+ font->name = new_mem(s - font_spec + 1);
+ memcpy(font->name, font_spec, s - font_spec);
+ t = s + 1;
+ err = 0;
+ while(!err && (str = strsep(&t, ":"))) {
+ if((s = strchr(str, '='))) {
+ *s++ = 0;
+ if(!strcmp(str, "size")) {
+ font->size = strtol(s, &s1, 0);
+ if(*s1) err = 1;
+ }
+ else if(!strcmp(str, "prop")) {
+ font->prop = strtol(s, &s1, 0);
+ if(*s1) err = 1;
+ }
+ else if(!strcmp(str, "space_width")) {
+ font->space_width = strtol(s, &s1, 0);
+ if(*s1) err = 1;
+ }
+ else if(!strcmp(str, "dy")) {
+ font->dy = strtol(s, &s1, 0);
+ if(*s1) err = 1;
+ }
+ else if(!strcmp(str, "bold")) {
+ font->bold = strtol(s, &s1, 0);
+ if(*s1) err = 1;
+ }
+ else if(!strcmp(str, "nobitmap")) {
+ font->nobitmap = strtol(s, &s1, 0);
+ if(*s1) err = 1;
+ }
+ else if(!strcmp(str, "autohint")) {
+ font->autohint = strtol(s, &s1, 0) + 1;
+ if(*s1) err = 1;
+ }
+ else if(!strcmp(str, "autosize")) {
+ font->autosize = strtol(s, &s1, 0);
+ if(*s1) err = 1;
+ }
+ else if(!strcmp(str, "autoshift")) {
+ font->autoshift = strtol(s, &s1, 0);
+ if(*s1) err = 1;
+ }
+ else if(!strcmp(str, "c")) {
+ err = parse_int_list(&font->chars, s);
+ }
+ else {
+ err = 1;
+ }
+ }
+ else {
+ if(*str) err = 1;
+ }
+ }
+ free(font_spec);
+ if(err) {
+ fprintf(stderr, "%s: invalid font spec\n", optarg);
+ return 1;
+ }
+ }
+ else {
+ font->name = font_spec;
+ }
+ break;
+
+ case 'H':
+ str = optarg;
+ i = strtol(str, &str1, 0);
+ if(*str1 || i < 0) {
+ fprintf(stderr, "%s: invalid font height\n", str);
+ return 1;
+ }
+ opt.max_font_height = i;
+ break;
+
+ case 'l':
+ str = optarg;
+ i = strtol(str, &str1, 0);
+ if(*str1 || i < 0) {
+ fprintf(stderr, "%s: invalid line height\n", str);
+ return 1;
+ }
+ opt.line_height = i;
+ break;
+
+ case 'p':
+ opt.font_path = optarg;
+ break;
+
+ case 's':
+ opt.show = 1;
+ break;
+
+ case 't':
+ if(ic == (iconv_t) -1) {
+ ic = iconv_open("utf32le", "utf8");
+ if(ic == (iconv_t) -1) {
+ fprintf(stderr, "can't convert utf8 data\n");
+ return 1;
+ }
+ }
+ if((f = fopen(optarg, "r"))) {
+ int ok;
+
+ ibuf_left = 0;
+ while((i = fread(ibuf + ibuf_left, 1, sizeof ibuf - ibuf_left, f)) > 0) {
+ // fprintf(stderr, "ibuf_left = %d, fread = %d\n", ibuf_left, i);
+ ibuf_ptr = ibuf;
+ ibuf_left += i;
+ do {
+ obuf_ptr = obuf;
+ obuf_left = sizeof obuf;
+ k = iconv(ic, &ibuf_ptr, &ibuf_left, &obuf_ptr, &obuf_left);
+ // fprintf(stderr, "k = %d, errno = %d, ibuf_left = %d, obuf_left = %d\n", k, k ? errno : 0, ibuf_left, obuf_left);
+ if(k >= 0 || (k == -1 && !obuf_left)) {
+ ok = 1;
+ if(!obuf_left) {
+ i = *(int *) obuf;
+ if(i >= 0x20) {
+ insert_int_list(&opt.chars, i, i);
+ }
+ }
+ }
+ else {
+ ok = 0;
+ }
+ }
+ while(ok && ibuf_left);
+ if(k == -1 && errno == EILSEQ) {
+ perror("iconv");
+ return 1;
+ }
+ if(ibuf_left) {
+ memcpy(ibuf, ibuf + sizeof ibuf - ibuf_left, ibuf_left);
+ }
+ }
+ fclose(f);
+ }
+ else {
+ perror(optarg);
+ return 1;
+ }
+ break;
+
+ case 'v':
+ opt.verbose++;
+ break;
+
+ case 999:
+ opt.test++;
+ break;
+ }
+ }
+
+ if(ic != (iconv_t) -1) iconv_close(ic);
+
+ // use default char list
+ if(!opt.chars.start) insert_int_list(&opt.chars, 0x20, 0x7f);
+
+ argc -= optind; argv += optind;
+
+ // FreeSans[size=16 prop=2 space_width=4 dy=16 c=0x1200,0x1000-0x2000]
+ if(argc != 1) {
+ fprintf(stderr,
+ "Usage: gfxboot-font [options] fontfile\n"
+ "Build font for boot loader.\n"
+ " -a, --add=first[-last]\n\tAdd chars from this range.\n"
+ " -c, --add-charset=charset\n\tAdd all chars from this charset.\n"
+ " -f, --font=font_spec\n\tUse this font. Spec format is fontname[option1 option2 ...]\n"
+ " -h, --help\n\tShow this help text.\n"
+ " -l, --line-height=n\n\tSet line height (default: font height).\n"
+ " -p, --font-path=font path\n\tFont path, elements separated by ':'.\n"
+ " -s, --show\n\tShow font info.\n"
+ " -t, --add-text=samplefile\n\tAdd all chars used in this file. File must be UTF-8 encoded.\n"
+ " -v, --verbose\n\tDump font info.\n"
+ );
+ return 1;
+ }
+
+ opt.file = argv[0];
+
+ if(opt.show) return show_font(opt.file);
+
+ if((err = FT_Init_FreeType(&ft_lib))) {
+ fprintf(stderr, "FreeType init failed (err = %d)\n", err);
+ return 3;
+ }
+
+ // open all fonts
+ for(i = 0, font = font_list.start; font; font = font->next) {
+ font->index = i++;
+ font->file_name = search_font(opt.font_path, font->name);
+ if(font->file_name) {
+ err = FT_New_Face(ft_lib, font->file_name, 0, &font->face);
+ if(!err) {
+ if(!font->size) {
+ if(font->face->num_fixed_sizes > 0) {
+ font->size = font->face->available_sizes[0].height;
+ }
+ }
+ if(
+ font->size &&
+ !FT_Set_Pixel_Sizes(font->face, font->size, 0)
+ ) {
+ font->ok = 1;
+ }
+ }
+ }
+ }
+
+ // build char list
+ for(n = opt.chars.start; n; n = n->next) {
+ for(i = n->first; i <= n->last; i++) {
+ cd = add_list(&char_list, new_mem(sizeof *cd));
+ cd->c = i;
+ }
+ }
+
+ // just check the list is really sorted
+ for(i = -1, cd = char_list.start; cd; cd = cd->next) {
+ if(cd->c <= i) {
+ fprintf(stderr, "internal error: char list not sorted\n");
+ return 4;
+ }
+ i = cd->c;
+ }
+
+ // render all chars
+ for(cd = char_list.start; cd; cd = cd->next) {
+ render_char(cd);
+ }
+
+ // fix vertical glyph positions
+ for(cd = char_list.start; cd; cd = cd->next) {
+ if(cd->ok) cd->y_ofs += cd->font->dy;
+ }
+
+ if(!opt.test) for(cd = char_list.start; cd; cd = cd->next) add_bbox(cd);
+
+// ##############
+
+ // get font dimensions
+ get_font_height(NULL, &font_height, &font_y_ofs);
+
+ for(font = font_list.start; font; font = font->next) {
+ if(!font->ok) continue;
+ get_font_height(font, &i, &j);
+ font->height = i;
+ font->baseline = -j;
+ }
+
+// ##############
+
+ FT_Done_FreeType(ft_lib);
+
+ // label largest chars
+ for(cd = char_list.start; cd; cd = cd->next) {
+ if(!cd->ok) continue;
+ if(cd->y_ofs - font_y_ofs + cd->bitmap_height >= font_height) cd->top = 1;
+ if(cd->y_ofs - font_y_ofs <= 0) cd->bottom = 1;
+ }
+
+ for(cd = char_list.start; cd; cd = cd->next) make_prop(cd);
+
+ for(cd = char_list.start; cd; cd = cd->next) {
+ if(!cd->ok) insert_int_list(&chars_missing, cd->c, cd->c);
+ }
+
+ for(cd = char_list.start; cd; cd = cd->next) {
+ if(cd->ok && cd->top) insert_int_list(&chars_top, cd->c, cd->c);
+ }
+
+ for(cd = char_list.start; cd; cd = cd->next) {
+ if(cd->ok && cd->bottom) insert_int_list(&chars_bottom, cd->c, cd->c);
+ }
+
+ for(cd = char_list.start; cd; cd = cd->next) encode_char(cd);
+
+ memset(&fh, 0, sizeof fh);
+
+ fh.magic = MAGIC;
+ fh.height = font_height;
+ fh.baseline = -font_y_ofs;
+ fh.line_height = opt.line_height ?: fh.height + 2;
+
+ for(cd = char_list.start; cd; cd = cd->next) if(cd->ok) fh.entries++;
+
+ // print font info
+ if(opt.verbose) {
+ printf("Font List\n");
+ for(font = font_list.start; font; font = font->next) {
+ printf(" #%d %s (%s)\n", font->index, font->name, font->ok ? "ok" : "not used");
+ printf(" File %s\n", font->file_name);
+ printf(" Size %d", font->size);
+ if(font->dy) printf(", dY %d", font->dy);
+ if(font->prop) printf(", Prop %d", font->prop);
+ if(font->space_width) printf(", SpaceWidth %d", font->space_width);
+ printf("\n");
+ printf(" Height %d, Baseline %d\n", font->height, font->baseline);
+ if(font->chars.start) {
+ for(n = font->chars.start; n; n = n->next) {
+ printf(" c 0x%04x", n->first);
+ if(n->last != n->first) printf("-0x%04x", n->last);
+ printf("\n");
+ }
+ }
+ }
+ printf("\n");
+ }
+
+ if(opt.verbose >= 2) {
+ printf("Requested Char List\n");
+ for(n = opt.chars.start; n; n = n->next) {
+ printf(" 0x%04x", n->first);
+ if(n->last != n->first) printf("-0x%04x", n->last);
+ printf("\n");
+ }
+ printf("\n");
+ }
+
+ if(opt.verbose) {
+ if(chars_missing.start) {
+ printf("Missing Chars\n");
+ for(n = chars_missing.start; n; n = n->next) {
+ printf(" 0x%04x", n->first);
+ if(n->last != n->first) printf("-0x%04x", n->last);
+ printf("\n");
+ }
+ printf("\n");
+ }
+
+ if(chars_top.start) {
+ printf("Top Chars\n");
+ for(n = chars_top.start; n; n = n->next) {
+ printf(" 0x%04x", n->first);
+ if(n->last != n->first) printf("-0x%04x", n->last);
+ printf("\n");
+ }
+ printf("\n");
+ }
+
+ if(chars_bottom.start) {
+ printf("Bottom Chars\n");
+ for(n = chars_bottom.start; n; n = n->next) {
+ printf(" 0x%04x", n->first);
+ if(n->last != n->first) printf("-0x%04x", n->last);
+ printf("\n");
+ }
+ printf("\n");
+ }
+
+ printf(
+ "Font Size\n Height: %d\n Baseline: %d\n Line Height: %d\n\n",
+ font_height, -font_y_ofs, fh.line_height
+ );
+
+ for(cd = char_list.start; cd; cd = cd->next) dump_char(cd);
+ }
+
+ add_data(&font_file, &fh, sizeof fh);
+
+ ofs = font_file.size + fh.entries * sizeof char_ofs;
+
+ for(cd = char_list.start; cd; cd = cd->next) {
+ if(!cd->ok) continue;
+ i = 0;
+ add_bits(char_ofs, &i, 21, cd->c);
+ add_bits(char_ofs, &i, 19, ofs);
+ add_data(&font_file, char_ofs, sizeof char_ofs);
+ ofs += cd->data_len;
+ }
+
+ for(cd = char_list.start; cd; cd = cd->next) {
+ if(!cd->ok) continue;
+ add_data(&font_file, cd->data, cd->data_len);
+ }
+
+ write_data(&font_file, opt.file);
+
+ return 0;
+}
+
+
+file_data_t *read_file(char *name)
+{
+ file_data_t *fd;
+ FILE *f;
+
+ fd = new_mem(sizeof *fd);
+
+ if(!name) return fd;
+
+ f = fopen(name, "r");
+
+ if(!f) { perror(name); return fd; }
+
+ if(fseek(f, 0, SEEK_END)) {
+ perror(name);
+ exit(30);
+ }
+
+ fd->size = fd->real_size = ftell(f);
+
+ if(fseek(f, 0, SEEK_SET)) {
+ perror(name);
+ exit(30);
+ }
+
+ if(fd->size) {
+ fd->data = new_mem(fd->size);
+ if(!fd->data) {
+ fprintf(stderr, "malloc failed\n");
+ exit(30);
+ }
+ }
+
+ if(fread(fd->data, 1, fd->size, f) != fd->size) {
+ perror(name);
+ exit(30);
+ }
+
+ fclose(f);
+
+ return fd;
+}
+
+
+void dump_char(char_data_t *cd)
+{
+ int i, j, y0, y1, y2, x0, x1, x2, width;
+ unsigned char *p;
+ char c;
+
+ if(!cd || !cd->ok) return;
+
+ printf("Char 0x%04x '%s'", cd->c, utf32_to_utf8(cd->c));
+ if(cd->top) printf(" top");
+ if(cd->bottom) printf(" bottom");
+ printf("\n");
+
+ if(cd->font) printf(" Font: #%d %s (%d)\n", cd->font->index, cd->font->name, cd->font->size);
+
+ printf(
+ " Bitmap: %d x %d\n Advance: %d\n Offset: %d x %d\n",
+ cd->bitmap_width, cd->bitmap_height,
+ cd->x_advance, cd->x_ofs, cd->y_ofs
+ );
+
+ if(opt.verbose >= 2 && cd->data) {
+ printf(" Data[%d]:", cd->data_len);
+ for(i = 0; i < cd->data_len; i++) {
+ if(!(i & 7)) {
+ printf("\n ");
+ }
+ printf(" %02x", cd->data[i]);
+ }
+ printf("\n");
+ }
+
+ if(cd->bitmap) {
+ p = cd->bitmap;
+
+ y0 = font_height + font_y_ofs;
+ y1 = y0 - cd->bitmap_height - cd->y_ofs;
+ y2 = y1 + cd->bitmap_height;
+
+ x1 = cd->bitmap_width + cd->x_ofs;
+ if(cd->x_advance > x1) x1 = cd->x_advance;
+
+ if(cd->x_ofs < 0) {
+ width = x1 - cd->x_ofs;
+ x1 = 0;
+ x0 = -cd->x_ofs;
+ }
+ else {
+ width = x1;
+ x1 = cd->x_ofs;
+ x0 = 0;
+ }
+
+ x2 = x1 + cd->bitmap_width;
+
+ // printf("y0 = %d, y1 = %d, y2 = %d\n", y0, y1, y2);
+ // printf("x0 = %d, x1 = %d, x2 = %d, width = %d\n", x0, x1, x2, width);
+
+ printf(" ");
+ c = ' ';
+ for(i = 0; i < cd->x_advance + x0; i++ ) {
+ if(i == x0) c = '_';
+ printf("%c", c);
+ }
+ printf("\n");
+
+ for(j = 0; j < font_height; j++) {
+ printf(" %s", j == y0 - 1 ? "->|" : " |");
+ if(j < y1 || j >= y2) {
+ for(i = 0; i < width; i++) printf(".");
+ }
+ else {
+ for(i = 0; i < width; i++) {
+ if(i < x1 || i >= x2) {
+ printf(".");
+ }
+ else {
+ c = p[(j - y1) * cd->bitmap_width + i - x1];
+ if(c == 0) {
+ c = ' ';
+ }
+ else if(c >= MAX_GRAY) {
+ c = '#';
+ }
+ else {
+ c += '0';
+ if(c > '9') c += 'a' - '9' - 1;
+ }
+ printf("%c", c);
+ }
+ }
+ }
+ printf("|%s\n", j == y0 - 1 ? "<-" : "");
+ }
+
+ printf(" ");
+ c = ' ';
+ for(i = 0; i < cd->x_advance + x0; i++ ) {
+ if(i == x0) c = '-';
+ printf("%c", c);
+ }
+ printf("\n");
+ }
+
+ printf("\n");
+}
+
+
+void add_data(file_data_t *d, void *buffer, unsigned size)
+{
+ if(!size || !d || !buffer) return;
+
+ if(d->size + size > d->real_size) {
+ d->real_size = d->size + size + 0x1000;
+ d->data = realloc(d->data, d->real_size);
+ if(!d->data) d->real_size = 0;
+ }
+
+ if(d->size + size <= d->real_size) {
+ memcpy(d->data + d->size, buffer, size);
+ d->size += size;
+ }
+ else {
+ fprintf(stderr, "Oops, out of memory? Aborted.\n");
+ exit(10);
+ }
+}
+
+
+void write_data(file_data_t *d, char *name)
+{
+ FILE *f;
+
+ f = strcmp(name, "-") ? fopen(name, "w") : stdout;
+
+ if(!f) {
+ perror(name);
+ return;
+ }
+
+ if(fwrite(d->data, d->size, 1, f) != 1) {
+ perror(name);
+ exit(3);
+ }
+
+ fclose(f);
+}
+
+
+int intersect(int first0, int last0, int first1, int last1)
+{
+ return
+ (first1 >= first0 && first1 <= last0 + 1) ||
+ (last1 >= first0 - 1 && last1 <= last0) ||
+ (first1 < first0 && last1 > last0);
+}
+
+
+void insert_int_list(list_t *list, int first, int last)
+{
+ n_set_t *n, *p, *next;
+
+ for(n = list->start; n; n = n->next) {
+ if(intersect(n->first, n->last, first, last)) {
+ if(first < n->first) n->first = first;
+ if(last > n->last) n->last = last;
+ break;
+ }
+ }
+
+ if(!n) { /* not joined */
+ if(!(n = list->start) || first < n->first) {
+ list->start = p = new_mem(sizeof *p);
+ p->next = n;
+ p->first = first;
+ p->last = last;
+ }
+ else {
+ for(n = list->start; n; n = n->next) {
+ if(!n->next || first < n->next->first) {
+ p = new_mem(sizeof *p);
+ p->next = n->next;
+ p->first = first;
+ p->last = last;
+ n->next = p;
+ if(!p->next) list->end = p;
+ break;
+ }
+ }
+ }
+ }
+
+ for(n = list->start; n; n = next) {
+ if(!(next = n->next)) break;
+
+ if(intersect(n->first, n->last, next->first, next->last)) {
+ if(next->first < n->first) n->first = next->first;
+ if(next->last > n->last) n->last = next->last;
+ n->next = next->next;
+ if(!n->next) list->end = n;
+ free(next);
+ next = n;
+ }
+ }
+}
+
+
+void *add_list(list_t *list, void *entry)
+{
+ if(list->end) {
+ ((list_any_t *) list->end)->next = entry;
+ }
+ list->end = entry;
+
+ if(!list->start) {
+ list->start = entry;
+ }
+
+ return entry;
+}
+
+
+void *new_mem(size_t size)
+{
+ return calloc(size, 1);
+}
+
+
+char *new_str(char *str)
+{
+ return str ? strdup(str) : str;
+}
+
+
+int parse_int_list(list_t *list, char *str)
+{
+ int err = 0, i, j, k;
+ char *s, *s1, *t;
+
+ if(!str) return 0;
+
+ while(isspace(*str)) str++;
+
+ if(!*str) return 0;
+
+ t = str = new_str(str);
+
+ while((s = strsep(&t, ","))) {
+ if(sscanf(s, "%i - %i%n", &i, &j, &k) == 2 && k == strlen(s)) {
+ insert_int_list(list, i, j);
+ }
+ else {
+ i = strtol(s, &s1, 0);
+ if(*s1) {
+ err = 1;
+ break;
+ }
+ insert_int_list(list, i, i);
+ }
+ }
+
+ free(str);
+
+ return err;
+}
+
+
+char *search_font(char *font_path, char *name)
+{
+ int i;
+ char *font_name = NULL;
+ char *cur_path, *sep;
+ struct stat sbuf;
+ static char *suffix[] = { "", ".ttf", ".pfa", ".pfb", ".pcf.gz" };
+
+ if(!font_path || !name) return NULL;
+
+ while(*font_path) {
+ cur_path = strdup(font_path);
+
+ if((sep = strchr(cur_path, ':'))) *sep = 0;
+
+ for(i = 0; i < sizeof suffix / sizeof *suffix; i++) {
+ asprintf(&font_name, "%s/%s%s", cur_path, name, suffix[i]);
+ if(!stat(font_name, &sbuf) && S_ISREG(sbuf.st_mode)) break;
+ free(font_name);
+ font_name = NULL;
+ }
+
+ if(i < sizeof suffix / sizeof *suffix) {
+ free(cur_path);
+ break;
+ }
+
+ if(sep) {
+ font_path += sep - cur_path + 1;
+ }
+ else {
+ font_path = "";
+ }
+
+ free(cur_path);
+ }
+
+ return font_name;
+}
+
+
+void render_char(char_data_t *cd)
+{
+ n_set_t *n;
+ int err, glyph_index;
+ FT_GlyphSlot glyph;
+ int i, j;
+ unsigned char uc;
+
+ if(cd->ok) {
+ glyph_index = FT_Get_Char_Index(cd->font->face, cd->c);
+ if(!glyph_index) return;
+
+ err = FT_Load_Char(
+ cd->font->face,
+ cd->c,
+ FT_LOAD_RENDER |
+ (cd->font->nobitmap ? FT_LOAD_NO_BITMAP : 0) |
+ (cd->font->autohint ? cd->font->autohint == 1 ? FT_LOAD_NO_AUTOHINT : FT_LOAD_FORCE_AUTOHINT : 0)
+ );
+ if(err) return;
+ }
+ else {
+ font_t *font;
+
+ for(font = font_list.start; font; font = font->next) {
+ if(!font->ok) continue;
+ if(font->chars.start) {
+ for(n = font->chars.start; n; n = n->next) {
+ if(cd->c >= n->first && cd->c <= n->last) break;
+ }
+ if(!n) continue;
+ }
+
+ glyph_index = FT_Get_Char_Index(font->face, cd->c);
+ if(!glyph_index) continue;
+
+ err = FT_Load_Char(
+ font->face,
+ cd->c,
+ FT_LOAD_RENDER |
+ (font->nobitmap ? FT_LOAD_NO_BITMAP : 0) |
+ (font->autohint ? font->autohint == 1 ? FT_LOAD_NO_AUTOHINT : FT_LOAD_FORCE_AUTOHINT : 0)
+ );
+ if(err) continue;
+
+ cd->ok = 1;
+ cd->font = font;
+
+ break;
+ }
+ }
+
+ if(!cd->ok) return;
+
+ glyph = cd->font->face->glyph;
+ if(cd->font->bold) FT_GlyphSlot_Embolden(glyph);
+
+ cd->bitmap_width = glyph->bitmap.width;
+ cd->bitmap_height = glyph->bitmap.rows;
+ free(cd->bitmap);
+ cd->bitmap = new_mem(cd->bitmap_width * cd->bitmap_height);
+
+ cd->x_advance = glyph->advance.x / 64.;
+ cd->x_ofs = glyph->bitmap_left;
+ cd->y_ofs = glyph->bitmap_top - glyph->bitmap.rows;
+
+ for(j = 0; j < cd->bitmap_height; j++) {
+ for(i = 0; i < cd->bitmap_width; i++) {
+ switch(glyph->bitmap.pixel_mode) {
+ case FT_PIXEL_MODE_MONO:
+ uc = ((glyph->bitmap.buffer[i / 8 + j * glyph->bitmap.pitch] >> (7 - (i & 7))) & 1) * MAX_GRAY;
+ break;
+
+ case FT_PIXEL_MODE_GRAY:
+ uc = (glyph->bitmap.buffer[i + j * glyph->bitmap.pitch] * (MAX_GRAY + 1)) / (255 + 1);
+ break;
+
+ default:
+ uc = 0;
+ }
+ cd->bitmap[i + j * cd->bitmap_width] = uc;
+ }
+ }
+
+#if 0
+ printf(
+ "bitmap: mode %d, %d x %d, + %d x %d, advance %f x %f\n",
+ glyph->bitmap.pixel_mode,
+ glyph->bitmap.width,
+ glyph->bitmap.rows,
+ glyph->bitmap_left,
+ glyph->bitmap_top,
+ glyph->advance.x / 64.,
+ glyph->advance.y / 64.
+ );
+
+ printf(
+ "metrics:\n size %f x %f\n bearing %f x %f, advance %f\n",
+ glyph->metrics.width / 64., glyph->metrics.height / 64.,
+ glyph->metrics.horiBearingX / 64., glyph->metrics.horiBearingY / 64.,
+ glyph->metrics.horiAdvance / 64.
+ );
+#endif
+}
+
+
+int empty_row(char_data_t *cd, int row)
+{
+ unsigned char *p1, *p2;
+
+ p2 = (p1 = cd->bitmap + row * cd->bitmap_width) + cd->bitmap_width;
+ while(p1 < p2) if(*p1++) return 0;
+
+ return 1;
+}
+
+
+int empty_column(char_data_t *cd, int col)
+{
+ int i;
+ unsigned char *p;
+
+ for(p = cd->bitmap + col, i = 0; i < cd->bitmap_height; i++, p += cd->bitmap_width) {
+ if(*p) return 0;
+ }
+
+ return 1;
+}
+
+
+void add_bbox(char_data_t *cd)
+{
+ int i;
+ unsigned char *bitmap;
+ int width, height, dx, dy;
+
+ if(!cd->ok) return;
+
+ width = cd->bitmap_width;
+ height = cd->bitmap_height;
+ dx = dy = 0;
+
+ while(height && empty_row(cd, height - 1)) height--;
+ while(width && empty_column(cd, width - 1)) width--;
+
+ for(dx = 0; dx < width && empty_column(cd, dx); dx++);
+ for(dy = 0; dy < height && empty_row(cd, dy); dy++);
+
+ width -= dx;
+ height -= dy;
+
+ if(width != cd->bitmap_width || height != cd->bitmap_height) {
+ bitmap = new_mem(width * height);
+
+ for(i = 0; i < height; i++) {
+ memcpy(bitmap + i * width, cd->bitmap + dx + (i + dy) * cd->bitmap_width, width);
+ }
+
+ free(cd->bitmap);
+ cd->bitmap = bitmap;
+
+ cd->x_ofs += dx;
+ cd->y_ofs += cd->bitmap_height - height - dy;
+
+ cd->bitmap_width = width;
+ cd->bitmap_height = height;
+ }
+
+ if(!cd->bitmap_width || !cd->bitmap_height) {
+ cd->x_ofs = cd->y_ofs = 0;
+ }
+}
+
+
+/*
+ * Fake proprtionally spaced font from fixed size font.
+ */
+void make_prop(char_data_t *cd)
+{
+ int width;
+
+ if(!cd->ok || !cd->font->prop) return;
+
+ width = cd->bitmap_width ? cd->bitmap_width + cd->font->prop : cd->font->space_width;
+ cd->x_ofs = cd->font->prop;
+ cd->x_advance = width;
+}
+
+
+char *utf32_to_utf8(int u8)
+{
+ static char buf[16];
+ static iconv_t ic = (iconv_t) -1;
+ char *ibuf, *obuf;
+ size_t obuf_left, ibuf_left;
+ int i;
+
+ *buf = 0;
+
+ if(ic == (iconv_t) -1) {
+ ic = iconv_open("utf8", "utf32le");
+ if(ic == (iconv_t) -1) {
+ fprintf(stderr, "Error: can't convert utf8 data.\n");
+ exit(1);
+ }
+ }
+
+ ibuf = (char *) &u8;
+ obuf = buf;
+ ibuf_left = 4;
+ obuf_left = sizeof buf - 1;
+
+ i = iconv(ic, &ibuf, &ibuf_left, &obuf, &obuf_left);
+
+ if(i >= 0) {
+ i = sizeof buf - 1 - obuf_left;
+ buf[i] = 0;
+ }
+ else {
+ fprintf(stderr, "Warning: failed to convert 0x%x to utf8.\n", u8);
+ }
+
+ return buf;
+}
+
+
+void add_bits(unsigned char *buf, int *buf_ptr, int bits, unsigned data)
+{
+ int rem, ptr;
+
+ while(bits > 0) {
+ ptr = *buf_ptr >> 3;
+ rem = 8 - (*buf_ptr & 7);
+ if(rem > bits) rem = bits;
+ buf[ptr] = (buf[ptr] & ((1 << (*buf_ptr & 7)) - 1)) + ((data & ((1 << rem) - 1)) << (*buf_ptr & 7));
+ *buf_ptr += rem;
+ bits -= rem;
+ data >>= rem;
+ }
+}
+
+
+unsigned read_unsigned_bits(unsigned char *buf, int *buf_ptr, int bits)
+{
+ int rem, ptr;
+ unsigned data = 0, dptr = 0;
+
+ while(bits > 0) {
+ ptr = *buf_ptr >> 3;
+ rem = 8 - (*buf_ptr & 7);
+ if(rem > bits) rem = bits;
+ data += ((buf[ptr] >> (*buf_ptr & 7)) & ((1 << rem) - 1)) << dptr;
+ dptr += rem;
+ *buf_ptr += rem;
+ bits -= rem;
+ }
+
+ return data;
+}
+
+
+int read_signed_bits(unsigned char *buf, int *buf_ptr, int bits)
+{
+ int i;
+
+ i = read_unsigned_bits(buf, buf_ptr, bits);
+
+ if(bits == 0) return i;
+
+ if((i & (1 << (bits - 1)))) {
+ i += -1 << bits;
+ }
+
+ return i;
+}
+
+
+int signed_bits(int num)
+{
+ int bits = 32;
+ int val = num & (1 << 31);
+
+ if(num == 0) return 0;
+
+ while((num & (1 << 31)) == val) {
+ bits--;
+ num <<= 1;
+ }
+
+ return bits + 1;
+}
+
+
+int unsigned_bits(unsigned num)
+{
+ int bits = 0;
+
+ if(num == 0) return 0;
+
+ while(num) {
+ num >>= 1;
+ bits++;
+ }
+
+ return bits;
+}
+
+
+void encode_cnt(unsigned char *buf, int *buf_ptr, int lc, int lc_cnt)
+{
+ if((lc_cnt - 2) >= (1 << GRAY_BIT_COUNT)) {
+ fprintf(stderr, "cnt %d too large\n", lc_cnt);
+ exit(1);
+ }
+
+ if(lc_cnt >= 2) {
+ *buf_ptr -= GRAY_BITS;
+ add_bits(buf, buf_ptr, GRAY_BITS, lc == 0 ? REP_BLACK : REP_WHITE);
+ // printf("(%d)", lc == 0 ? REP_BLACK : REP_WHITE);
+ add_bits(buf, buf_ptr, GRAY_BIT_COUNT, lc_cnt - 2);
+ // printf("(%d)", lc_cnt - 2);
+ }
+ else if(lc_cnt) {
+ add_bits(buf, buf_ptr, GRAY_BITS, lc);
+ // printf("[%d]", lc);
+ }
+}
+
+
+void encode_char(char_data_t *cd)
+{
+ int i, j, bits, lc_cnt;
+ unsigned char *buf;
+ int buf_ptr;
+ unsigned type;
+ unsigned char col[MAX_GRAY + 1];
+ int lc;
+
+ if(!cd->ok) return;
+
+ // just large enough
+ buf = new_mem(cd->bitmap_width * cd->bitmap_height + 5 * 8 + 1);
+ buf_ptr = 0;
+
+ memset(col, 0, sizeof col);
+
+ for(i = 0; i < cd->bitmap_width * cd->bitmap_height; i++) {
+ if(cd->bitmap[i] <= MAX_GRAY) {
+ col[cd->bitmap[i]] = 1;
+ }
+ }
+
+ type = 0;
+ for(i = 1; i < MAX_GRAY; i++) {
+ if(col[i]) {
+ type = 1;
+ break;
+ }
+ }
+
+ // type 0: mono, 1: grays
+
+ add_bits(buf, &buf_ptr, 2, type);
+
+ bits = unsigned_bits(cd->bitmap_width);
+ j = unsigned_bits(cd->bitmap_height);
+ if(j > bits) bits = j;
+ j = signed_bits(cd->x_advance);
+ if(j > bits) bits = j;
+ j = signed_bits(cd->x_ofs);
+ if(j > bits) bits = j;
+ j = signed_bits(cd->y_ofs);
+ if(j > bits) bits = j;
+
+ if(!bits) bits = 1;
+
+ if(bits > 8) {
+ free(buf);
+ cd->ok = 0;
+
+ return;
+ }
+
+ add_bits(buf, &buf_ptr, 3, bits - 1);
+ add_bits(buf, &buf_ptr, bits, cd->bitmap_width);
+ add_bits(buf, &buf_ptr, bits, cd->bitmap_height);
+ add_bits(buf, &buf_ptr, bits, cd->x_ofs);
+ add_bits(buf, &buf_ptr, bits, cd->y_ofs);
+ add_bits(buf, &buf_ptr, bits, cd->x_advance);
+
+ switch(type) {
+ case 0:
+ for(i = 0; i < cd->bitmap_width * cd->bitmap_height; i++) {
+ add_bits(buf, &buf_ptr, 1, cd->bitmap[i] ? 1 : 0);
+ }
+ break;
+
+ case 1:
+ lc = -1;
+ for(i = lc_cnt = 0; i < cd->bitmap_width * cd->bitmap_height; i++) {
+ if(cd->bitmap[i] == lc && (lc == 0 || lc == MAX_GRAY) && lc_cnt < ((1 << GRAY_BIT_COUNT) + 1)) {
+ lc_cnt++;
+ }
+ else {
+ if(lc_cnt) {
+ encode_cnt(buf, &buf_ptr, lc, lc_cnt);
+ lc_cnt = 0;
+ lc = -1;
+ }
+ add_bits(buf, &buf_ptr, GRAY_BITS, cd->bitmap[i]);
+ // printf("[%d]", cd->bitmap[i]);
+ }
+ lc = cd->bitmap[i];
+ }
+ if(lc_cnt) {
+ encode_cnt(buf, &buf_ptr, lc, lc_cnt);
+ }
+ break;
+ }
+
+ cd->data = new_mem(cd->data_len = ((buf_ptr + 7) >> 3));
+ memcpy(cd->data, buf, cd->data_len);
+
+ free(buf);
+}
+
+
+int show_font(char *name)
+{
+ int i, j, ofs, ofs2, bits, lc, lc_cnt, bitmap_len;
+ file_data_t *font_file;
+ font_header_t fh;
+ unsigned type;
+ char_data_t *cd;
+
+ opt.verbose++;
+
+ font_file = read_file(name);
+
+ if(font_file->size < sizeof fh) return 0;
+
+ memcpy(&fh, font_file->data, sizeof fh);
+
+ if(fh.magic != MAGIC) {
+ fprintf(stderr, "%s: wrong file format\n", name);
+ return 1;
+ }
+
+ if(font_file->size < sizeof fh + fh.entries * 5) {
+ fprintf(stderr, "%s: file too short\n", name);
+ return 2;
+ }
+
+ font_height = fh.height;
+ font_y_ofs = -fh.baseline;
+
+ for(i = 0; i < fh.entries; i++) {
+ cd = add_list(&char_list, new_mem(sizeof *cd));
+ j = 0;
+ cd->c = read_unsigned_bits(font_file->data + sizeof fh + i * 5, &j, 21);
+ ofs = read_unsigned_bits(font_file->data + sizeof fh + i * 5, &j, 19);
+
+ if(i != fh.entries - 1) {
+ j = 21;
+ ofs2 = read_unsigned_bits(font_file->data + sizeof fh + (i + 1) * 5, &j, 19);
+ }
+ else {
+ ofs2 = font_file->size;
+ }
+
+ if(ofs2 < ofs || ofs2 > font_file->size) {
+ fprintf(stderr, "%s: invalid data for chhar 0x%04x\n", name, cd->c);
+ return 3;
+ }
+
+ cd->data = new_mem(cd->data_len = ofs2 - ofs);
+ memcpy(cd->data, font_file->data + ofs, cd->data_len);
+ }
+
+ for(cd = char_list.start; cd; cd = cd->next) {
+ j = 0;
+ type = read_unsigned_bits(cd->data, &j, 2);
+ bits = read_unsigned_bits(cd->data, &j, 3) + 1;
+
+ if(type > 1) {
+ fprintf(stderr, "%s: unknown type %d for char 0x%04x\n", name, type, cd->c);
+ return 3;
+ }
+
+ cd->bitmap_width = read_unsigned_bits(cd->data, &j, bits);
+ cd->bitmap_height = read_unsigned_bits(cd->data, &j, bits);
+ cd->x_ofs = read_signed_bits(cd->data, &j, bits);
+ cd->y_ofs = read_signed_bits(cd->data, &j, bits);
+ cd->x_advance = read_signed_bits(cd->data, &j, bits);
+
+ cd->bitmap = new_mem(bitmap_len = cd->bitmap_width * cd->bitmap_height);
+
+ switch(type) {
+ case 0:
+ for(i = 0; i < bitmap_len; i++) {
+ cd->bitmap[i] = read_unsigned_bits(cd->data, &j, 1) ? MAX_GRAY : 0;
+ }
+ break;
+
+ case 1:
+ for(i = 0; i < bitmap_len;) {
+ lc = read_unsigned_bits(cd->data, &j, GRAY_BITS);
+ // printf("(%d)", lc);
+ if(lc <= MAX_GRAY) {
+ cd->bitmap[i++] = lc;
+ continue;
+ }
+ lc = lc == REP_BLACK ? 0 : MAX_GRAY;
+ lc_cnt = read_unsigned_bits(cd->data, &j, GRAY_BIT_COUNT) + 3;
+ // printf("(%d)", lc_cnt);
+ while(i < bitmap_len && lc_cnt--) cd->bitmap[i++] = lc;
+ }
+ break;
+ }
+
+ cd->ok = 1;
+ }
+
+ printf(
+ "Font Size\n Height: %d\n Baseline: %d\n Line Height: %d\n\n",
+ font_height, -font_y_ofs, fh.line_height
+ );
+
+ for(cd = char_list.start; cd; cd = cd->next) dump_char(cd);
+
+ return 0;
+}
+
+
+void get_font_height(font_t *font, int *height, int *y_ofs)
+{
+ int h, dy, i;
+ char_data_t *cd;
+
+ // get font dimensions
+ h = dy = 0;
+ for(cd = char_list.start; cd; cd = cd->next) {
+ if(!cd->ok) continue;
+ if(font && cd->font != font) continue;
+ if(cd->y_ofs < dy) dy = cd->y_ofs;
+ i = cd->bitmap_height + cd->y_ofs;
+ if(i > h) h = i;
+ }
+
+ *height = h - dy;
+ *y_ofs = dy;
+}
+
+
diff --git a/gfxtest b/gfxtest
new file mode 100755
index 0000000..ab766ca
--- /dev/null
+++ b/gfxtest
@@ -0,0 +1,192 @@
+#! /bin/bash
+
+
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+function switch_disk {
+ disk=$1
+
+ if [ -z "$disk" -o ! -f "$tmp_dir/syslinux.img_$disk" ] ; then
+ echo "no such disk: $disk"
+ exit 1
+ fi
+
+ dd if="$tmp_dir/syslinux.img_$disk" of="$tmp_dir/syslinux.img" conv=notrunc status=noxfer
+}
+
+
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+function gfxtest_isolinux {
+ set -f
+ $gfxboot -b isolinux --cdrom \
+ --test --preview --archive $opt_archive $gfxboot_args \
+ --test-add-files $add_files --test-rm-files gfxtest.config $rm_files $gfxboot_x_args
+ set +f
+}
+
+
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+function gfxtest_syslinux {
+ set -f
+ $gfxboot -b syslinux \
+ --test --preview --archive $opt_archive $gfxboot_args \
+ --test-add-files $add_files --test-rm-files gfxtest.config $rm_files $gfxboot_x_args
+ set +f
+}
+
+
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+function gfxtest_pxelinux {
+ set -f
+ $gfxboot -b pxelinux --net \
+ --test --preview --archive $opt_archive $gfxboot_args \
+ --test-add-files $add_files --test-rm-files gfxtest.config $rm_files $gfxboot_x_args
+ set +f
+}
+
+
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+function gfxtest_grub {
+ set -f
+ $gfxboot -b grub \
+ --test --preview --archive $opt_archive $gfxboot_args \
+ --test-add-files $add_files --test-rm-files gfxtest.config $rm_files $gfxboot_x_args
+ set +f
+}
+
+
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+function gfxtest_lilo {
+ set -f
+ $gfxboot -b lilo \
+ --test --preview --archive $opt_archive $gfxboot_args \
+ --test-add-files $add_files --test-rm-files gfxtest.config $rm_files $gfxboot_x_args
+ set +f
+}
+
+
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+function usage {
+ cat <<EOF
+usage: gfxtest [OPTIONS] [TARGET] [-- GFXBOOT_OPTIONS]
+Build and test gfxboot themes.
+
+Options:
+ -h, --help Write this help text.
+ -m, --make Force rebuilding the theme.
+ --type TYPE Bootlogo type. Either boot or install.
+ --disk N Switch to disk N.
+ -l, --lang LANG Set default language to LANG.
+ -t, --theme THEME Use theme THEME.
+ --vm VM Use VM as virtual machine (see 'gfxboot --help' for values).
+
+TARGET: cdrom, lilo, grub, syslinux, pxe (every subdir in 'test')
+
+GFXBOOT_OPTIONS: extra set of options passed to the gfxboot script.
+Note that the leading '--' is required.
+EOF
+ exit $1
+}
+
+
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+test_dir=test
+gfxboot=gfxboot
+[ -x gfxboot ] && gfxboot=./gfxboot
+
+OPTS=`getopt -n gfxtest -o mhl:t: --long make,help,disk:,lang:,vm:,type:,32,64,theme:,lilo:,grub:,syslinux:,isolinux:,pxelinux: -- "$@"`
+if [ $? != 0 ] ; then
+ echo "See 'gfxtest --help' for usage instructions."
+ exit 1
+fi
+
+eval set -- "$OPTS"
+
+while true ; do
+ case "$1" in
+ -h|--help) usage 0 ;;
+ --type) opt_type="$2" ; shift 2 ;;
+ --disk) opt_disk="$2" ; shift 2 ;;
+ -l|--lang) gfxboot_args="$gfxboot_args --default-language $2" ; shift 2 ;;
+ -t|--theme) opt_theme="$2" ; shift 2 ;;
+ -m|--make) opt_make='-B' ; shift ;;
+ --vm) gfxboot_args="$gfxboot_args --vm $2" ; shift 2 ;;
+ --32) opt_32=1 ; shift ;;
+ --64) opt_64=1 ; shift ;;
+ --) shift ; break;;
+ *) echo "oops: $1" ; exit 1 ;;
+ esac
+done
+
+if [ -n "$opt_disk" ] ; then
+ switch_disk $disk
+ exit
+fi
+
+case "$1" in
+ ""|-*) what=cdrom ;;
+ *) what="$1" ; shift ;;
+esac
+
+if [ ! -d test -o ! -d themes ] ; then
+ echo "error: gfxtest must be run from /usr/share/gfxboot"
+ exit 3
+fi
+
+if [ ! -d "$test_dir/$what" ] ; then
+ echo "config directory missing: $what"
+ exit 1
+else
+ [ -f "$test_dir/$what/gfxtest.config" ] && . "$test_dir/$what/gfxtest.config"
+fi
+
+gfxboot_x_args="$args $@"
+
+opt_theme=${opt_theme:-openSUSE}
+if [ ! -d "themes/$opt_theme" ] ; then
+ echo "no such theme: $opt_theme"
+ exit 1
+fi
+
+opt_archive="themes/$opt_theme/${archive:-bootlogo}"
+case "$opt_type" in
+ boot) opt_archive="themes/$opt_theme/message" ;;
+ install) opt_archive="themes/$opt_theme/bootlogo" ;;
+ "") ;;
+ *) echo "unsupported type: $opt_type" ; exit 1 ;;
+esac
+
+add_files=`echo $test_dir/$what/*`
+
+if [ -f gfxboot-compile.c -a ! -x gfxboot-compile ] ; then
+ make
+
+ [ -x gfxboot-compile ] || {
+ echo "error: gfxboot-compile missing. Run 'make' first."
+ exit 2
+ }
+fi
+
+make $opt_make -C themes/$opt_theme || exit
+
+if [ ! -f "$opt_archive" ] ; then
+ echo "gfxboot archive missing: $opt_archive"
+ exit 1
+fi
+
+tmp_dir=tmp
+mkdir -p "$tmp_dir" || exit
+
+if [ -z "$setup" ] ; then
+ echo "setup function not defined"
+ exit 1
+fi
+
+if [ "`type -t gfxtest_$setup`" = function ] ; then
+ gfxtest_$setup
+else
+ echo "no such setup function: $setup"
+ exit 1
+fi
+
diff --git a/jpeg.S b/jpeg.S
new file mode 100644
index 0000000..ad8f129
--- /dev/null
+++ b/jpeg.S
@@ -0,0 +1,2829 @@
+ .file "jpeg.S"
+ .text
+
+ .globl jpeg_decode
+ .globl jpeg_get_size
+
+ .equ in, 0
+
+ .equ dhuff, 16
+
+ .equ quant, 5664
+
+ .equ dscans, 5920
+
+ .equ comps, 6032
+
+ .equ info, 6080
+
+ .equ decdata, 6092
+
+ .equ datap, 9996
+
+ .equ tmp_img, 10000
+
+aaidct:
+ .long 724
+ .long 1004
+ .long 946
+ .long 851
+ .long 724
+ .long 569
+ .long 392
+ .long 200
+
+zig:
+ .byte 0
+ .byte 1
+ .byte 5
+ .byte 6
+ .byte 14
+ .byte 15
+ .byte 27
+ .byte 28
+ .byte 2
+ .byte 4
+ .byte 7
+ .byte 13
+ .byte 16
+ .byte 26
+ .byte 29
+ .byte 42
+ .byte 3
+ .byte 8
+ .byte 12
+ .byte 17
+ .byte 25
+ .byte 30
+ .byte 41
+ .byte 43
+ .byte 9
+ .byte 11
+ .byte 18
+ .byte 24
+ .byte 31
+ .byte 40
+ .byte 44
+ .byte 53
+ .byte 10
+ .byte 19
+ .byte 23
+ .byte 32
+ .byte 39
+ .byte 45
+ .byte 52
+ .byte 54
+ .byte 20
+ .byte 22
+ .byte 33
+ .byte 38
+ .byte 46
+ .byte 51
+ .byte 55
+ .byte 60
+ .byte 21
+ .byte 34
+ .byte 37
+ .byte 47
+ .byte 50
+ .byte 56
+ .byte 59
+ .byte 61
+ .byte 35
+ .byte 36
+ .byte 48
+ .byte 49
+ .byte 57
+ .byte 58
+ .byte 62
+ .byte 63
+
+zig2:
+ .byte 0
+ .byte 2
+ .byte 3
+ .byte 9
+ .byte 10
+ .byte 20
+ .byte 21
+ .byte 35
+ .byte 14
+ .byte 16
+ .byte 25
+ .byte 31
+ .byte 39
+ .byte 46
+ .byte 50
+ .byte 57
+ .byte 5
+ .byte 7
+ .byte 12
+ .byte 18
+ .byte 23
+ .byte 33
+ .byte 37
+ .byte 48
+ .byte 27
+ .byte 29
+ .byte 41
+ .byte 44
+ .byte 52
+ .byte 55
+ .byte 59
+ .byte 62
+ .byte 15
+ .byte 26
+ .byte 30
+ .byte 40
+ .byte 45
+ .byte 51
+ .byte 56
+ .byte 58
+ .byte 1
+ .byte 4
+ .byte 8
+ .byte 11
+ .byte 19
+ .byte 22
+ .byte 34
+ .byte 36
+ .byte 28
+ .byte 42
+ .byte 43
+ .byte 53
+ .byte 54
+ .byte 60
+ .byte 61
+ .byte 63
+ .byte 6
+ .byte 13
+ .byte 17
+ .byte 24
+ .byte 32
+ .byte 38
+ .byte 47
+ .byte 49
+
+getword:
+ # datap = %fs:datap
+ movl %fs:datap, %edx
+ # (%edx) = %es:jpg+4
+ movzwl %es:(%edx), %eax
+ addl $2, %edx
+ xchgb %al, %ah
+ # datap = %fs:datap
+ movl %edx, %fs:datap
+ ret
+
+idctqtab:
+ pushl %ebp
+ pushl %edi
+ pushl %esi
+ pushl %ebx
+ pushl %ecx
+ movl %edx, %ebp
+ # (%esp) = %ss:stack+688
+ movl %eax, (%esp)
+ xorl %edi, %edi
+.L4:
+ leal zig(%edi,%edi), %ebx
+ movl $aaidct, %esi
+.L5:
+ # (%ebx) = %cs:zig
+ movzbl %cs:(%ebx), %ecx
+ # (%esp) = %ss:stack+688
+ movl (%esp), %eax
+ incl %ebx
+ # (%eax,%ecx) = %fs:quant+?
+ movzbl %fs:(%eax,%ecx), %edx
+ # (%esi) = %cs:aaidct
+ movl %cs:(%esi), %eax
+ addl $4, %esi
+ # aaidct(%edi) = %cs:aaidct
+ imull %cs:aaidct(%edi), %eax
+ sarl $11, %eax
+ imull %eax, %edx
+ cmpl $aaidct+32, %esi
+ # (%ebp,%ecx,4) = %fs:decdata+?
+ movl %edx, %fs:(%ebp,%ecx,4)
+ jne .L5
+ addl $4, %edi
+ cmpl $32, %edi
+ jne .L4
+ popl %eax
+ popl %ebx
+ popl %esi
+ popl %edi
+ popl %ebp
+ ret
+
+idct:
+ pushl %ebp
+ pushl %edi
+ pushl %esi
+ pushl %ebx
+ subl $388, %esp
+ # 8(%esp) = %ss:stack+304
+ movl %edx, 8(%esp)
+ # 12(%esp) = %ss:stack+308
+ movl %eax, 12(%esp)
+ # 4(%esp) = %ss:stack+300
+ movl %ecx, 4(%esp)
+ # 408(%esp) = %ss:stack+704
+ movl 408(%esp), %edx
+ # 412(%esp) = %ss:stack+708
+ cmpl $1, 412(%esp)
+ jne .L14
+ # (%ecx) = %fs:decdata+3136
+ movl %fs:(%ecx), %eax
+ # 12(%esp) = %ss:stack+308
+ movl 12(%esp), %ecx
+ # (%ecx) = %fs:decdata
+ imull %fs:(%ecx), %eax
+ leal (%edx,%eax), %ecx
+ movl $1, %edx
+.L16:
+ movl %ecx, %eax
+ # 8(%esp) = %ss:stack+304
+ movl 8(%esp), %ebx
+ sarl $11, %eax
+ # -4(%ebx,%edx,4) = %fs:decdata+1600
+ movl %eax, %fs:-4(%ebx,%edx,4)
+ incl %edx
+ cmpl $65, %edx
+ je .L21
+ jmp .L16
+.L14:
+ leal 136(%esp), %edi
+ # 40(%esp) = %ss:stack+336
+ movl $zig2+8, 40(%esp)
+ # 44(%esp) = %ss:stack+340
+ movl %edi, 44(%esp)
+ movl %edx, %ecx
+.L18:
+ # 40(%esp) = %ss:stack+336
+ movl 40(%esp), %edx
+ # 12(%esp) = %ss:stack+308
+ movl 12(%esp), %ebx
+ # 4(%esp) = %ss:stack+300
+ movl 4(%esp), %edi
+ # -8(%edx) = %cs:zig2
+ movzbl %cs:-8(%edx), %eax
+ # (%ebx,%eax,4) = %fs:decdata+?
+ movl %fs:(%ebx,%eax,4), %edx
+ # (%edi,%eax,4) = %fs:decdata+?
+ imull %fs:(%edi,%eax,4), %edx
+ leal (%ecx,%edx), %edx
+ # 48(%esp) = %ss:stack+344
+ movl %edx, 48(%esp)
+ # 40(%esp) = %ss:stack+336
+ movl 40(%esp), %edx
+ # -7(%edx) = %cs:zig2+1
+ movzbl %cs:-7(%edx), %eax
+ # (%ebx,%eax,4) = %fs:decdata+?
+ movl %fs:(%ebx,%eax,4), %ecx
+ # (%edi,%eax,4) = %fs:decdata+?
+ imull %fs:(%edi,%eax,4), %ecx
+ # 80(%esp) = %ss:stack+376
+ movl %ecx, 80(%esp)
+ # 4(%esp) = %ss:stack+300
+ movl 4(%esp), %ecx
+ # -6(%edx) = %cs:zig2+2
+ movzbl %cs:-6(%edx), %edx
+ # (%ebx,%edx,4) = %fs:decdata+?
+ movl %fs:(%ebx,%edx,4), %eax
+ # 40(%esp) = %ss:stack+336
+ movl 40(%esp), %ebx
+ # (%edi,%edx,4) = %fs:decdata+?
+ imull %fs:(%edi,%edx,4), %eax
+ # -5(%ebx) = %cs:zig2+3
+ movzbl %cs:-5(%ebx), %edx
+ # 12(%esp) = %ss:stack+308
+ movl 12(%esp), %edi
+ # (%edi,%edx,4) = %fs:decdata+?
+ movl %fs:(%edi,%edx,4), %edi
+ # (%ecx,%edx,4) = %fs:decdata+?
+ imull %fs:(%ecx,%edx,4), %edi
+ # 100(%esp) = %ss:stack+396
+ movl %edi, 100(%esp)
+ # 40(%esp) = %ss:stack+336
+ movl 40(%esp), %edi
+ # -4(%ebx) = %cs:zig2+4
+ movzbl %cs:-4(%ebx), %edx
+ # 12(%esp) = %ss:stack+308
+ movl 12(%esp), %ebx
+ # (%ebx,%edx,4) = %fs:decdata+?
+ movl %fs:(%ebx,%edx,4), %ebx
+ # (%ecx,%edx,4) = %fs:decdata+?
+ imull %fs:(%ecx,%edx,4), %ebx
+ # 124(%esp) = %ss:stack+420
+ movl %ebx, 124(%esp)
+ # 12(%esp) = %ss:stack+308
+ movl 12(%esp), %ecx
+ # -3(%edi) = %cs:zig2+5
+ movzbl %cs:-3(%edi), %edx
+ # 4(%esp) = %ss:stack+300
+ movl 4(%esp), %ebx
+ # (%ecx,%edx,4) = %fs:decdata+?
+ movl %fs:(%ecx,%edx,4), %ecx
+ # (%ebx,%edx,4) = %fs:decdata+?
+ imull %fs:(%ebx,%edx,4), %ecx
+ # 56(%esp) = %ss:stack+352
+ movl %ecx, 56(%esp)
+ # -2(%edi) = %cs:zig2+6
+ movzbl %cs:-2(%edi), %edx
+ # 12(%esp) = %ss:stack+308
+ movl 12(%esp), %edi
+ # (%edi,%edx,4) = %fs:decdata+?
+ movl %fs:(%edi,%edx,4), %ecx
+ # (%ebx,%edx,4) = %fs:decdata+?
+ imull %fs:(%ebx,%edx,4), %ecx
+ # 40(%esp) = %ss:stack+336
+ movl 40(%esp), %ebx
+ # -1(%ebx) = %cs:zig2+7
+ movzbl %cs:-1(%ebx), %edx
+ # (%edi,%edx,4) = %fs:decdata+?
+ movl %fs:(%edi,%edx,4), %ebp
+ # 4(%esp) = %ss:stack+300
+ movl 4(%esp), %edi
+ # (%edi,%edx,4) = %fs:decdata+?
+ imull %fs:(%edi,%edx,4), %ebp
+ # 48(%esp) = %ss:stack+344
+ movl 48(%esp), %edx
+ # 48(%esp) = %ss:stack+344
+ movl 48(%esp), %edi
+ # 124(%esp) = %ss:stack+420
+ subl 124(%esp), %edx
+ # 124(%esp) = %ss:stack+420
+ addl 124(%esp), %edi
+ # 128(%esp) = %ss:stack+424
+ movl %edx, 128(%esp)
+ leal (%eax,%ecx), %edx
+ subl %ecx, %eax
+ # 128(%esp) = %ss:stack+424
+ movl 128(%esp), %ebx
+ imull $2896, %eax, %eax
+ sarl $11, %eax
+ leal (%edi,%edx), %ecx
+ subl %edx, %edi
+ subl %edx, %eax
+ # 116(%esp) = %ss:stack+412
+ movl %edi, 116(%esp)
+ # 128(%esp) = %ss:stack+424
+ movl 128(%esp), %edi
+ addl %eax, %ebx
+ subl %eax, %edi
+ # 72(%esp) = %ss:stack+368
+ movl %ecx, 72(%esp)
+ # 56(%esp) = %ss:stack+352
+ movl 56(%esp), %eax
+ # 56(%esp) = %ss:stack+352
+ movl 56(%esp), %ecx
+ # 100(%esp) = %ss:stack+396
+ addl 100(%esp), %eax
+ # 100(%esp) = %ss:stack+396
+ subl 100(%esp), %ecx
+ # 76(%esp) = %ss:stack+372
+ movl %ebx, 76(%esp)
+ # 80(%esp) = %ss:stack+376
+ movl 80(%esp), %edx
+ # 80(%esp) = %ss:stack+376
+ movl 80(%esp), %ebx
+ subl %ebp, %ebx
+ addl %ebp, %edx
+ # 112(%esp) = %ss:stack+408
+ movl %edi, 112(%esp)
+ leal (%edx,%eax), %ebp
+ subl %eax, %edx
+ leal (%ecx,%ebx), %eax
+ imull $5351, %ebx, %edi
+ imull $1567, %eax, %eax
+ imull $2217, %ecx, %ecx
+ imull $2896, %edx, %edx
+ sarl $11, %eax
+ # 44(%esp) = %ss:stack+340
+ movl 44(%esp), %ebx
+ sarl $11, %edi
+ sarl $11, %ecx
+ subl %eax, %edi
+ subl %ebp, %edi
+ addl %eax, %ecx
+ sarl $11, %edx
+ # 72(%esp) = %ss:stack+368
+ movl 72(%esp), %eax
+ subl %edi, %edx
+ addl %ebp, %eax
+ # -4(%ebx) = %ss:stack+428
+ movl %eax, %ss:-4(%ebx)
+ # 76(%esp) = %ss:stack+372
+ movl 76(%esp), %eax
+ addl %edi, %eax
+ subl %edx, %ecx
+ # 28(%ebx) = %ss:stack+460
+ movl %eax, %ss:28(%ebx)
+ # 112(%esp) = %ss:stack+408
+ movl 112(%esp), %eax
+ addl %edx, %eax
+ # 88(%esp) = %ss:stack+384
+ movl %edi, 88(%esp)
+ # 60(%ebx) = %ss:stack+492
+ movl %eax, %ss:60(%ebx)
+ # 112(%esp) = %ss:stack+408
+ subl %edx, 112(%esp)
+ # 116(%esp) = %ss:stack+412
+ movl 116(%esp), %eax
+ # 88(%esp) = %ss:stack+384
+ movl 88(%esp), %edx
+ # 116(%esp) = %ss:stack+412
+ subl %ecx, 116(%esp)
+ addl %ecx, %eax
+ # 76(%esp) = %ss:stack+372
+ subl %edx, 76(%esp)
+ # 116(%esp) = %ss:stack+412
+ movl 116(%esp), %edi
+ # 72(%esp) = %ss:stack+368
+ subl %ebp, 72(%esp)
+ # 92(%ebx) = %ss:stack+524
+ movl %eax, %ss:92(%ebx)
+ # 40(%esp) = %ss:stack+336
+ addl $8, 40(%esp)
+ # 124(%ebx) = %ss:stack+556
+ movl %edi, %ss:124(%ebx)
+ # 76(%esp) = %ss:stack+372
+ movl 76(%esp), %ecx
+ # 112(%esp) = %ss:stack+408
+ movl 112(%esp), %eax
+ # 72(%esp) = %ss:stack+368
+ movl 72(%esp), %edi
+ # 188(%ebx) = %ss:stack+620
+ movl %ecx, %ss:188(%ebx)
+ # 156(%ebx) = %ss:stack+588
+ movl %eax, %ss:156(%ebx)
+ # 220(%ebx) = %ss:stack+652
+ movl %edi, %ss:220(%ebx)
+ addl $4, %ebx
+ xorl %ecx, %ecx
+ # 44(%esp) = %ss:stack+340
+ movl %ebx, 44(%esp)
+ # 40(%esp) = %ss:stack+336
+ cmpl $zig2+72, 40(%esp)
+ jne .L18
+ # 32(%esp) = %ss:stack+328
+ movl $0, 32(%esp)
+.L20:
+ leal 132(%esp), %eax
+ # 32(%esp) = %ss:stack+328
+ movl 32(%esp), %ecx
+ # 32(%esp) = %ss:stack+328
+ movl 32(%esp), %edx
+ # 16(%eax,%ecx) = %ss:stack+?
+ movl %ss:16(%eax,%ecx), %edi
+ # 4(%eax,%ecx) = %ss:stack+?
+ movl %ss:4(%eax,%ecx), %ebx
+ # 20(%esp) = %ss:stack+316
+ movl %edi, 20(%esp)
+ movl %ecx, %edi
+ # (%edx,%eax) = %ss:stack+?
+ movl %ss:(%edx,%eax), %edx
+ # 12(%eax,%ecx) = %ss:stack+?
+ movl %ss:12(%eax,%ecx), %esi
+ # 24(%eax,%edi) = %ss:stack+?
+ movl %ss:24(%eax,%edi), %edi
+ # 16(%esp) = %ss:stack+312
+ movl %edx, 16(%esp)
+ # 24(%esp) = %ss:stack+320
+ movl %edi, 24(%esp)
+ # 32(%esp) = %ss:stack+328
+ movl 32(%esp), %edi
+ # 8(%eax,%ecx) = %ss:stack+?
+ movl %ss:8(%eax,%ecx), %edx
+ # 20(%eax,%ecx) = %ss:stack+?
+ movl %ss:20(%eax,%ecx), %ecx
+ # 28(%eax,%edi) = %ss:stack+?
+ movl %ss:28(%eax,%edi), %eax
+ # 16(%esp) = %ss:stack+312
+ movl 16(%esp), %ebp
+ # 28(%esp) = %ss:stack+324
+ movl %eax, 28(%esp)
+ # 16(%esp) = %ss:stack+312
+ movl 16(%esp), %eax
+ subl %ebx, %eax
+ addl %ebx, %ebp
+ # 120(%esp) = %ss:stack+416
+ movl %eax, 120(%esp)
+ leal (%edx,%esi), %eax
+ subl %esi, %edx
+ # 120(%esp) = %ss:stack+416
+ movl 120(%esp), %edi
+ imull $2896, %edx, %edx
+ sarl $11, %edx
+ leal (%ebp,%eax), %ebx
+ subl %eax, %edx
+ subl %eax, %ebp
+ # 120(%esp) = %ss:stack+416
+ movl 120(%esp), %eax
+ addl %edx, %edi
+ subl %edx, %eax
+ # 20(%esp) = %ss:stack+316
+ movl 20(%esp), %edx
+ # 28(%esp) = %ss:stack+324
+ subl 28(%esp), %edx
+ # 60(%esp) = %ss:stack+356
+ movl %ebx, 60(%esp)
+ # 64(%esp) = %ss:stack+360
+ movl %edi, 64(%esp)
+ # 20(%esp) = %ss:stack+316
+ movl 20(%esp), %ebx
+ # 24(%esp) = %ss:stack+320
+ movl 24(%esp), %edi
+ # 68(%esp) = %ss:stack+364
+ movl %edx, 68(%esp)
+ # 28(%esp) = %ss:stack+324
+ addl 28(%esp), %ebx
+ # 108(%esp) = %ss:stack+404
+ movl %eax, 108(%esp)
+ leal (%ecx,%edi), %edx
+ # 68(%esp) = %ss:stack+364
+ movl 68(%esp), %eax
+ subl %edi, %ecx
+ # 92(%esp) = %ss:stack+388
+ movl %ebx, 92(%esp)
+ addl %ecx, %eax
+ addl %edx, %ebx
+ # 96(%esp) = %ss:stack+392
+ movl %ebx, 96(%esp)
+ # 92(%esp) = %ss:stack+388
+ subl 92(%esp), %edx
+ # 68(%esp) = %ss:stack+364
+ imull $2217, 68(%esp), %ebx
+ imull $1567, %eax, %eax
+ imull $5351, %ecx, %ecx
+ imull $2896, %edx, %edx
+ sarl $11, %eax
+ sarl $11, %ebx
+ sarl $11, %ecx
+ # (%esp) = %ss:stack+296
+ movl %ebx, (%esp)
+ subl %eax, %ecx
+ addl %eax, %ebx
+ # 32(%esp) = %ss:stack+328
+ movl 32(%esp), %edi
+ # 60(%esp) = %ss:stack+356
+ movl 60(%esp), %eax
+ # 8(%esp) = %ss:stack+304
+ addl 8(%esp), %edi
+ # 96(%esp) = %ss:stack+392
+ addl 96(%esp), %eax
+ # 96(%esp) = %ss:stack+392
+ subl 96(%esp), %ecx
+ # 52(%esp) = %ss:stack+348
+ movl %ebx, 52(%esp)
+ sarl $11, %eax
+ # 36(%esp) = %ss:stack+332
+ movl %edi, 36(%esp)
+ sarl $11, %edx
+ # (%edi) = %fs:decdata+?
+ movl %eax, %fs:(%edi)
+ # 64(%esp) = %ss:stack+360
+ movl 64(%esp), %eax
+ subl %ecx, %edx
+ addl %ecx, %eax
+ subl %edx, %ebx
+ sarl $11, %eax
+ # 4(%edi) = %fs:decdata+?
+ movl %eax, %fs:4(%edi)
+ # 108(%esp) = %ss:stack+404
+ movl 108(%esp), %eax
+ addl %edx, %eax
+ # 64(%esp) = %ss:stack+360
+ subl %ecx, 64(%esp)
+ # 96(%esp) = %ss:stack+392
+ movl 96(%esp), %ecx
+ # 108(%esp) = %ss:stack+404
+ subl %edx, 108(%esp)
+ sarl $11, %eax
+ # 60(%esp) = %ss:stack+356
+ subl %ecx, 60(%esp)
+ # 108(%esp) = %ss:stack+404
+ sarl $11, 108(%esp)
+ # 64(%esp) = %ss:stack+360
+ sarl $11, 64(%esp)
+ # 60(%esp) = %ss:stack+356
+ sarl $11, 60(%esp)
+ # 8(%edi) = %fs:decdata+?
+ movl %eax, %fs:8(%edi)
+ leal (%ebp,%ebx), %eax
+ sarl $11, %eax
+ subl %ebx, %ebp
+ # 12(%edi) = %fs:decdata+?
+ movl %eax, %fs:12(%edi)
+ # 64(%esp) = %ss:stack+360
+ movl 64(%esp), %edx
+ sarl $11, %ebp
+ # 108(%esp) = %ss:stack+404
+ movl 108(%esp), %eax
+ # 60(%esp) = %ss:stack+356
+ movl 60(%esp), %ebx
+ # 16(%edi) = %fs:decdata+?
+ movl %ebp, %fs:16(%edi)
+ # 20(%edi) = %fs:decdata+?
+ movl %eax, %fs:20(%edi)
+ # 24(%edi) = %fs:decdata+?
+ movl %edx, %fs:24(%edi)
+ # 28(%edi) = %fs:decdata+?
+ movl %ebx, %fs:28(%edi)
+ # 32(%esp) = %ss:stack+328
+ addl $32, 32(%esp)
+ # 32(%esp) = %ss:stack+328
+ cmpl $256, 32(%esp)
+ jne .L20
+.L21:
+ addl $388, %esp
+ popl %ebx
+ popl %esi
+ popl %edi
+ popl %ebp
+ ret
+
+scaleidctqtab:
+ pushl %ebx
+ leal 4(%eax), %ecx
+ movl %edx, %ebx
+ leal 260(%eax), %edx
+.L27:
+ # -4(%ecx) = %fs:decdata+3392
+ movl %fs:-4(%ecx), %eax
+ imull %ebx, %eax
+ sarl $11, %eax
+ # -4(%ecx) = %fs:decdata+3392
+ movl %eax, %fs:-4(%ecx)
+ addl $4, %ecx
+ cmpl %edx, %ecx
+ jne .L27
+ popl %ebx
+ ret
+
+store_16:
+ imull $31, %eax, %eax
+ imull $63, %edx, %edx
+ imull $31, %ecx, %ecx
+ pushl %ebx
+ # 8(%esp) = %ss:stack+708
+ movl 8(%esp), %ebx
+ addl %ebx, %eax
+ addl %ebx, %edx
+ shrl $8, %eax
+ addl %ebx, %ecx
+ shrl $8, %edx
+ popl %ebx
+ sall $11, %eax
+ sall $5, %edx
+ shrl $8, %ecx
+ addl %edx, %eax
+ addl %ecx, %eax
+ ret
+
+store_8:
+ imull $7, %edx, %edx
+ imull $7, %ecx, %ecx
+ pushl %ebx
+ leal (%eax,%eax,2), %eax
+ # 8(%esp) = %ss:stack+708
+ movl 8(%esp), %ebx
+ addl %ebx, %eax
+ addl %ebx, %edx
+ shrl $8, %eax
+ addl %ebx, %ecx
+ sall $6, %eax
+ popl %ebx
+ shrl $8, %edx
+ shrl $8, %ecx
+ leal (%eax,%edx,8), %edx
+ leal (%edx,%ecx), %eax
+ ret
+
+fillbits:
+ pushl %ebp
+ pushl %edi
+ pushl %esi
+ pushl %ebx
+ pushl %esi
+ movl %eax, %ebp
+ movl %edx, %ebx
+ # 8(%eax) = %fs:in+8
+ cmpl $0, %fs:8(%eax)
+ jne .L37
+ # datap = %fs:datap
+ movl %fs:datap, %edx
+ jmp .L39
+.L37:
+ cmpl $16, %edx
+ jg .L40
+ sall $16, %ecx
+ addl $16, %ebx
+ # (%eax) = %fs:in
+ movl %ecx, %fs:(%eax)
+ jmp .L40
+.L42:
+ # (%edx) = %es:jpg+14
+ movb %es:(%edx), %al
+ movzbl %al, %esi
+ # (%esp) = %ss:stack+688
+ movl %esi, (%esp)
+ incb %al
+ leal 1(%edx), %esi
+ jne .L43
+ # 1(%edx) = %es:jpg+15
+ movb %es:1(%edx), %al
+ leal 2(%edx), %esi
+ movzbl %al, %edi
+ testb %al, %al
+ je .L43
+ # datap = %fs:datap
+ movl %esi, %fs:datap
+ # 8(%ebp) = %fs:in+8
+ movl %edi, %fs:8(%ebp)
+ cmpl $16, %ebx
+ jg .L46
+ sall $16, %ecx
+ addl $16, %ebx
+ jmp .L46
+.L43:
+ sall $8, %ecx
+ addl $8, %ebx
+ # (%esp) = %ss:stack+688
+ orl (%esp), %ecx
+ movl %esi, %edx
+.L39:
+ cmpl $24, %ebx
+ jle .L42
+ # datap = %fs:datap
+ movl %edx, %fs:datap
+.L46:
+ # (%ebp) = %fs:in
+ movl %ecx, %fs:(%ebp)
+.L40:
+ movl %ebx, %eax
+ popl %ebx
+ popl %ebx
+ popl %esi
+ popl %edi
+ popl %ebp
+ ret
+
+dec_rec2:
+ pushl %ebp
+ pushl %edi
+ pushl %esi
+ pushl %ebx
+ subl $20, %esp
+ movl %eax, %edi
+ # 4(%eax) = %fs:in+4
+ movl %fs:4(%eax), %esi
+ # (%eax) = %fs:in
+ movl %fs:(%eax), %ebp
+ # 4(%esp) = %ss:stack+668
+ movl %edx, 4(%esp)
+ # 44(%esp) = %ss:stack+708
+ movl 44(%esp), %edx
+ # (%esp) = %ss:stack+664
+ movl %ecx, (%esp)
+ # 40(%esp) = %ss:stack+704
+ movl 40(%esp), %ebx
+ testl %edx, %edx
+ jne .L51
+ # 4(%esp) = %ss:stack+668
+ movl 4(%esp), %eax
+ # 12(%esp) = %ss:stack+676
+ movl $8, 12(%esp)
+ # 8(%esp) = %ss:stack+672
+ movl %eax, 8(%esp)
+ jmp .L53
+.L51:
+ movl %edx, %eax
+ # (%esp) = %ss:stack+664
+ movl (%esp), %ecx
+ sarl $8, %edx
+ andl $127, %eax
+ addl %eax, %esi
+ movl %edx, %ebx
+ sarl $8, %ebx
+ movl %edx, %eax
+ andl $15, %eax
+ # (%ecx) = %ss:stack+948
+ movl %eax, %ss:(%ecx)
+ jmp .L54
+.L55:
+ # 12(%esp) = %ss:stack+676
+ incl 12(%esp)
+.L53:
+ testl %esi, %esi
+ jg .L56
+ movl %ebp, %ecx
+ movl %esi, %edx
+ movl %edi, %eax
+ call fillbits
+ # (%edi) = %fs:in
+ movl %fs:(%edi), %ebp
+ movl %eax, %esi
+.L56:
+ decl %esi
+ movl %ebp, %eax
+ movl %esi, %ecx
+ # 8(%esp) = %ss:stack+672
+ movl 8(%esp), %edx
+ sarl %cl, %eax
+ andl $1, %eax
+ addl %ebx, %ebx
+ orl %eax, %ebx
+ # 32(%edx) = %fs:dhuff+?
+ movl %fs:32(%edx), %eax
+ addl $4, %edx
+ cmpl %eax, %ebx
+ # 8(%esp) = %ss:stack+672
+ movl %edx, 8(%esp)
+ jge .L55
+ # 12(%esp) = %ss:stack+676
+ cmpl $15, 12(%esp)
+ jle .L59
+ # 8(%edi) = %fs:in+8
+ movl $-1, %fs:8(%edi)
+ jmp .L69
+.L59:
+ # 12(%esp) = %ss:stack+676
+ movl 12(%esp), %ecx
+ # 4(%esp) = %ss:stack+668
+ movl 4(%esp), %edx
+ # -4(%edx,%ecx,4) = %fs:dhuff+?
+ movl %fs:-4(%edx,%ecx,4), %eax
+ # 68(%edx,%ecx,4) = %fs:dhuff+?
+ addl %fs:68(%edx,%ecx,4), %ebx
+ addl %eax, %eax
+ # (%esp) = %ss:stack+664
+ movl (%esp), %ecx
+ subl %eax, %ebx
+ # 132(%ebx,%edx) = %fs:dhuff+?
+ movzbl %fs:132(%ebx,%edx), %edx
+ movl %edx, %eax
+ movl %edx, %ebx
+ sarl $4, %eax
+ andl $15, %ebx
+ # (%ecx) = %ss:stack+948
+ movl %eax, %ss:(%ecx)
+.L54:
+ testl %ebx, %ebx
+ jne .L62
+ # 4(%edi) = %fs:in+4
+ movl %esi, %fs:4(%edi)
+ # (%edi) = %fs:in
+ movl %ebp, %fs:(%edi)
+.L69:
+ xorl %esi, %esi
+ jmp .L61
+.L62:
+ cmpl %ebx, %esi
+ jge .L64
+ movl %ebp, %ecx
+ movl %esi, %edx
+ movl %edi, %eax
+ call fillbits
+ # (%edi) = %fs:in
+ movl %fs:(%edi), %ebp
+ movl %eax, %esi
+.L64:
+ subl %ebx, %esi
+ movl $1, %eax
+ # 16(%esp) = %ss:stack+680
+ movl %esi, 16(%esp)
+ movl %ebp, %esi
+ # 16(%esp) = %ss:stack+680
+ movb 16(%esp), %cl
+ movl %eax, %edx
+ sarl %cl, %esi
+ movb %bl, %cl
+ sall %cl, %edx
+ decl %edx
+ leal -1(%ebx), %ecx
+ andl %edx, %esi
+ sall %cl, %eax
+ cmpl %eax, %esi
+ jge .L66
+ orl $-1, %eax
+ movb %bl, %cl
+ sall %cl, %eax
+ leal 1(%esi,%eax), %esi
+.L66:
+ # 16(%esp) = %ss:stack+680
+ movl 16(%esp), %eax
+ # (%edi) = %fs:in
+ movl %ebp, %fs:(%edi)
+ # 4(%edi) = %fs:in+4
+ movl %eax, %fs:4(%edi)
+.L61:
+ addl $20, %esp
+ movl %esi, %eax
+ popl %ebx
+ popl %esi
+ popl %edi
+ popl %ebp
+ ret
+
+readtables:
+ pushl %ebp
+ pushl %edi
+ pushl %esi
+ pushl %ebx
+ subl $380, %esp
+ # 4(%esp) = %ss:stack+316
+ movl %eax, 4(%esp)
+ jmp .L145
+.L138:
+ # datap = %fs:datap
+ movl %esi, %fs:datap
+.L145:
+ # datap = %fs:datap
+ movl %fs:datap, %ecx
+ # (%ecx) = %es:jpg+4
+ movb %es:(%ecx), %dl
+ leal 1(%ecx), %eax
+ # datap = %fs:datap
+ movl %eax, %fs:datap
+ incb %dl
+ jne .L144
+ # 1(%ecx) = %es:jpg+5
+ movb %es:1(%ecx), %dl
+ leal 2(%ecx), %eax
+ # datap = %fs:datap
+ movl %eax, %fs:datap
+ movzbl %dl, %eax
+ # 4(%esp) = %ss:stack+316
+ cmpl 4(%esp), %eax
+ je .L76
+ cmpb $-60, %dl
+ je .L79
+ ja .L82
+ cmpb $-62, %dl
+ jne .L78
+ jmp .L76
+.L82:
+ cmpb $-37, %dl
+ je .L80
+ cmpb $-35, %dl
+ jne .L78
+ jmp .L81
+.L80:
+ call getword
+ # datap = %fs:datap
+ movl %fs:datap, %esi
+ movl %eax, %edi
+ jmp .L83
+.L84:
+ # (%esi) = %es:jpg+4
+ movzbl %es:(%esi), %eax
+ movl %eax, %edx
+ leal 1(%esi), %ecx
+ andl $15, %edx
+ cmpl $3, %edx
+ jg .L126
+ sarl $4, %eax
+ testl %eax, %eax
+ jne .L126
+ sall $6, %edx
+ movl $64, %ebx
+ addl $quant, %edx
+.L90:
+ # (%ecx) = %es:jpg+5
+ movzbl %es:(%ecx), %eax
+ incl %ecx
+ # (%edx) = %fs:quant+?
+ movb %al, %fs:(%edx)
+ incl %edx
+ decl %ebx
+ jne .L90
+ subl $65, %edi
+ addl $65, %esi
+.L83:
+ cmpl $2, %edi
+ jg .L84
+ jmp .L138
+.L79:
+ call getword
+ # datap = %fs:datap
+ movl %fs:datap, %edi
+ # 52(%esp) = %ss:stack+364
+ movl %eax, 52(%esp)
+ jmp .L92
+.L93:
+ # (%edi) = %es:jpg+6
+ movzbl %es:(%edi), %eax
+ movl %eax, %ecx
+ incl %edi
+ sarl $4, %eax
+ andl $15, %ecx
+ leal (%ecx,%eax,2), %edx
+ decl %eax
+ # 8(%esp) = %ss:stack+320
+ movl %edx, 8(%esp)
+ setg %dl
+ decl %ecx
+ setg %al
+ orb %al, %dl
+ jne .L128
+ movl $1, %ecx
+ movl $4, %edx
+.L96:
+ # (%edi) = %es:jpg+7
+ movzbl %es:(%edi), %eax
+ incl %ecx
+ incl %edi
+ # 312(%esp,%edx) = %ss:stack+628
+ movl %eax, 312(%esp,%edx)
+ addl $4, %edx
+ cmpl $17, %ecx
+ jne .L96
+ # 52(%esp) = %ss:stack+364
+ subl $17, 52(%esp)
+ # 12(%esp) = %ss:stack+324
+ movl $0, 12(%esp)
+ movl $1, %ebp
+ movl $4, %esi
+.L98:
+ # 12(%esp) = %ss:stack+324
+ movl 12(%esp), %eax
+ # 312(%esp,%esi) = %ss:stack+628
+ movl 312(%esp,%esi), %ebx
+ xorl %ecx, %ecx
+ leal 60(%esp,%eax), %edx
+ jmp .L99
+.L100:
+ # (%edi) = %es:jpg+8
+ movzbl %es:(%edi), %eax
+ incl %ecx
+ # (%edx) = %ss:stack+?
+ movb %al, %ss:(%edx)
+ incl %edi
+ incl %edx
+.L99:
+ cmpl %ebx, %ecx
+ jl .L100
+ incl %ebp
+ # 12(%esp) = %ss:stack+324
+ addl %ecx, 12(%esp)
+ # 52(%esp) = %ss:stack+364
+ subl %ebx, 52(%esp)
+ addl $4, %esi
+ cmpl $17, %ebp
+ jne .L98
+ # 8(%esp) = %ss:stack+320
+ imull $1412, 8(%esp), %eax
+ addl $dhuff, %eax
+ movl $256, %edx
+ # 56(%esp) = %ss:stack+368
+ movl %eax, 56(%esp)
+.L103:
+ # 388(%eax) = %fs:dhuff+?
+ movl $0, %fs:388(%eax)
+ addl $4, %eax
+ decl %edx
+ jne .L103
+ # 56(%esp) = %ss:stack+368
+ movl 56(%esp), %edx
+ leal 60(%esp), %ecx
+ movl %edx, %eax
+ # 48(%esp) = %ss:stack+360
+ movl %edx, 48(%esp)
+ subl $-128, %eax
+ # 16(%esp) = %ss:stack+328
+ movl %ecx, 16(%esp)
+ # 36(%esp) = %ss:stack+348
+ movl $0, 36(%esp)
+ # 28(%esp) = %ss:stack+340
+ movl $0, 28(%esp)
+ # 32(%esp) = %ss:stack+344
+ movl $0, 32(%esp)
+ # (%esp) = %ss:stack+312
+ movl %eax, (%esp)
+.L105:
+ # 48(%esp) = %ss:stack+360
+ movl 48(%esp), %edx
+ # (%esp) = %ss:stack+312
+ movl (%esp), %ebp
+ # 32(%esp) = %ss:stack+344
+ movl 32(%esp), %ecx
+ addl $4, %ebp
+ # 68(%edx) = %fs:dhuff+?
+ movl %ecx, %fs:68(%edx)
+ # 40(%esp) = %ss:stack+352
+ movl $0, 40(%esp)
+ jmp .L106
+.L107:
+ # 16(%esp) = %ss:stack+328
+ movl 16(%esp), %edx
+ # (%edx) = %ss:stack+372
+ movb %ss:(%edx), %al
+ incl %edx
+ # (%ebp) = %fs:dhuff+?
+ movb %al, %fs:(%ebp)
+ # 16(%esp) = %ss:stack+328
+ movl %edx, 16(%esp)
+ # 36(%esp) = %ss:stack+348
+ cmpl $7, 36(%esp)
+ jg .L108
+ # 20(%esp) = %ss:stack+332
+ movl $7, 20(%esp)
+ # 36(%esp) = %ss:stack+348
+ movl 36(%esp), %ecx
+ # 20(%esp) = %ss:stack+332
+ subl %ecx, 20(%esp)
+ # 28(%esp) = %ss:stack+340
+ movl 28(%esp), %edx
+ # 20(%esp) = %ss:stack+332
+ movb 20(%esp), %cl
+ movl %eax, %ebx
+ movl $1, %esi
+ andl $15, %ebx
+ sall %cl, %edx
+ sall %cl, %esi
+ # 44(%esp) = %ss:stack+356
+ movl %edx, 44(%esp)
+ jmp .L110
+.L111:
+ # 36(%esp) = %ss:stack+348
+ movl 36(%esp), %eax
+ addl %ebx, %eax
+ # 24(%esp) = %ss:stack+336
+ movl %eax, 24(%esp)
+ cmpl $7, %eax
+ jg .L112
+ movl %ebx, %ecx
+ movl %esi, %edx
+ negl %ecx
+ # 36(%esp) = %ss:stack+348
+ subl 36(%esp), %ecx
+ addl $7, %ecx
+ sarl %cl, %edx
+ testl %ebx, %ebx
+ je .L114
+ leal -1(%ebx), %ecx
+ movl $1, %eax
+ sall %cl, %eax
+ cmpl %eax, %edx
+ jge .L114
+ orl $-1, %eax
+ movb %bl, %cl
+ sall %cl, %eax
+ leal 1(%edx,%eax), %edx
+.L114:
+ # (%ebp) = %fs:dhuff+?
+ movzbl %fs:(%ebp), %eax
+ sall $16, %edx
+ andl $240, %eax
+ sall $4, %eax
+ orl %eax, %edx
+ movl $7, %eax
+ # 24(%esp) = %ss:stack+336
+ subl 24(%esp), %eax
+ orl %eax, %edx
+ orb $-128, %dl
+ jmp .L117
+.L112:
+ # (%ebp) = %fs:dhuff+?
+ movzbl %fs:(%ebp), %eax
+ movl %ebx, %edx
+ andl $240, %eax
+ sall $16, %edx
+ sall $4, %eax
+ orl %eax, %edx
+ # 20(%esp) = %ss:stack+332
+ orl 20(%esp), %edx
+.L117:
+ # 44(%esp) = %ss:stack+356
+ movl 44(%esp), %eax
+ # 56(%esp) = %ss:stack+368
+ movl 56(%esp), %ecx
+ orl %esi, %eax
+ # 388(%ecx,%eax,4) = %fs:dhuff+?
+ movl %edx, %fs:388(%ecx,%eax,4)
+.L110:
+ decl %esi
+ jns .L111
+.L108:
+ # 28(%esp) = %ss:stack+340
+ incl 28(%esp)
+ incl %ebp
+ # 32(%esp) = %ss:stack+344
+ incl 32(%esp)
+ # (%esp) = %ss:stack+312
+ incl (%esp)
+ # 40(%esp) = %ss:stack+352
+ incl 40(%esp)
+.L106:
+ # 36(%esp) = %ss:stack+348
+ movl 36(%esp), %eax
+ # 40(%esp) = %ss:stack+352
+ movl 40(%esp), %edx
+ # 316(%esp,%eax,4) = %ss:stack+?
+ cmpl 316(%esp,%eax,4), %edx
+ jl .L107
+ # 48(%esp) = %ss:stack+360
+ movl 48(%esp), %ecx
+ # 36(%esp) = %ss:stack+348
+ incl 36(%esp)
+ # 28(%esp) = %ss:stack+340
+ movl 28(%esp), %eax
+ # (%ecx) = %fs:dhuff+?
+ movl %eax, %fs:(%ecx)
+ addl %eax, %eax
+ addl $4, %ecx
+ # 28(%esp) = %ss:stack+340
+ movl %eax, 28(%esp)
+ # 48(%esp) = %ss:stack+360
+ movl %ecx, 48(%esp)
+ # 36(%esp) = %ss:stack+348
+ cmpl $16, 36(%esp)
+ jne .L105
+ # 56(%esp) = %ss:stack+368
+ movl 56(%esp), %edx
+ # 64(%edx) = %fs:dhuff+?
+ movl $131072, %fs:64(%edx)
+.L92:
+ # 52(%esp) = %ss:stack+364
+ cmpl $2, 52(%esp)
+ jg .L93
+ # datap = %fs:datap
+ movl %edi, %fs:datap
+ jmp .L145
+.L81:
+ call getword
+ call getword
+ # info+8 = %fs:info+8
+ movl %eax, %fs:info+8
+ jmp .L145
+.L78:
+ call getword
+ # datap = %fs:datap
+ movl %fs:datap, %edx
+ jmp .L121
+.L122:
+ incl %edx
+ decl %eax
+.L121:
+ cmpl $2, %eax
+ jg .L122
+ # datap = %fs:datap
+ movl %edx, %fs:datap
+ jmp .L145
+.L126:
+ # datap = %fs:datap
+ movl %ecx, %fs:datap
+.L144:
+ orl $-1, %eax
+ jmp .L87
+.L128:
+ # datap = %fs:datap
+ movl %edi, %fs:datap
+ jmp .L144
+.L76:
+ xorl %eax, %eax
+.L87:
+ addl $380, %esp
+ popl %ebx
+ popl %esi
+ popl %edi
+ popl %ebp
+ ret
+
+jpeg_decode:
+ pushl %ebp
+ pushl %edi
+ pushl %esi
+ pushl %ebx
+ subl $240, %esp
+ # 260(%esp) = %ss:stack+972
+ movl 260(%esp), %ecx
+ # datap = %fs:datap
+ movl %ecx, %fs:datap
+ # (%ecx) = %es:jpg
+ movb %es:(%ecx), %dl
+ leal 1(%ecx), %eax
+ # datap = %fs:datap
+ movl %eax, %fs:datap
+ incb %dl
+ jne .L147
+ # 1(%ecx) = %es:jpg+1
+ movb %es:1(%ecx), %dl
+ leal 2(%ecx), %eax
+ # datap = %fs:datap
+ movl %eax, %fs:datap
+ cmpb $-40, %dl
+ jne .L147
+ movl $192, %eax
+ call readtables
+ testl %eax, %eax
+ jne .L150
+ movb $12, %al
+ # info+8 = %fs:info+8
+ cmpl $0, %fs:info+8
+ jne .L154
+ call getword
+ # datap = %fs:datap
+ movl %fs:datap, %eax
+ # (%eax) = %es:jpg+4
+ movb %es:(%eax), %dl
+ incl %eax
+ # datap = %fs:datap
+ movl %eax, %fs:datap
+ cmpb $8, %dl
+ movl $2, %eax
+ jne .L154
+ call getword
+ # 60(%esp) = %ss:stack+772
+ movl %eax, 60(%esp)
+ call getword
+ # 56(%esp) = %ss:stack+768
+ movl %eax, 56(%esp)
+ # datap = %fs:datap
+ movl %fs:datap, %eax
+ # (%eax) = %es:jpg+5
+ movzbl %es:(%eax), %esi
+ leal 1(%eax), %ebx
+ # info = %fs:info
+ movl %esi, %fs:info
+ # datap = %fs:datap
+ movl %ebx, %fs:datap
+ movl $6, %eax
+ cmpl $4, %esi
+ jg .L154
+ movl $comps, %edi
+ # 32(%esp) = %ss:stack+744
+ movl $0, 32(%esp)
+ jmp .L159
+.L160:
+ # (%ebx) = %es:jpg+8
+ movzbl %es:(%ebx), %eax
+ # (%edi) = %fs:comps
+ movl %eax, %fs:(%edi)
+ # 1(%ebx) = %es:jpg+9
+ movzbl %es:1(%ebx), %edx
+ movl %edx, %eax
+ # 4(%edi) = %fs:comps+4
+ movl %edx, %fs:4(%edi)
+ sarl $4, %eax
+ # 2(%ebx) = %es:jpg+10
+ movzbl %es:2(%ebx), %ebp
+ addl $3, %ebx
+ cmpl $3, %eax
+ setg %cl
+ andl $15, %edx
+ # 8(%edi) = %fs:comps+8
+ movl %ebp, %fs:8(%edi)
+ cmpl $3, %edx
+ setg %al
+ orb %al, %cl
+ jne .L415
+ addl $12, %edi
+ cmpl $3, %ebp
+ jg .L416
+ # 32(%esp) = %ss:stack+744
+ incl 32(%esp)
+.L159:
+ # 32(%esp) = %ss:stack+744
+ cmpl %esi, 32(%esp)
+ jl .L160
+ movl $218, %eax
+ # datap = %fs:datap
+ movl %ebx, %fs:datap
+ call readtables
+ testl %eax, %eax
+ jne .L150
+ call getword
+ # datap = %fs:datap
+ movl %fs:datap, %ecx
+ # (%ecx) = %es:jpg+11
+ movb %es:(%ecx), %al
+ leal 1(%ecx), %edx
+ # datap = %fs:datap
+ movl %edx, %fs:datap
+ cmpb $3, %al
+ movzbl %al, %edx
+ # info+4 = %fs:info+4
+ movl %edx, %fs:info+4
+ jne .L167
+ # info = %fs:info
+ movl %fs:info, %eax
+ addl $3, %ecx
+ # 24(%esp) = %ss:stack+736
+ movl %eax, 24(%esp)
+ movl $dscans, %edi
+.L169:
+ # -2(%ecx) = %es:jpg+12
+ movzbl %es:-2(%ecx), %ebp
+ # 16(%edi) = %fs:dscans+16
+ movl %ebp, %fs:16(%edi)
+ movl %ecx, %ebx
+ # -1(%ecx) = %es:jpg+13
+ movzbl %es:-1(%ecx), %eax
+ movl %eax, %edx
+ sarl $4, %eax
+ andl $15, %edx
+ # 36(%esp) = %ss:stack+748
+ movl %edx, 36(%esp)
+ # 180(%esp) = %ss:stack+892
+ movl %eax, 180(%esp)
+ decl %eax
+ setg %dl
+ # 36(%esp) = %ss:stack+748
+ cmpl $1, 36(%esp)
+ setg %al
+ orb %al, %dl
+ jne .L170
+ xorl %edx, %edx
+ movl $comps, %esi
+ jmp .L172
+.L170:
+ # datap = %fs:datap
+ movl %ecx, %fs:datap
+ jmp .L428
+.L173:
+ # (%esi) = %fs:comps
+ movl %fs:(%esi), %eax
+ addl $12, %esi
+ cmpl %ebp, %eax
+ je .L174
+ incl %edx
+.L172:
+ # 24(%esp) = %ss:stack+736
+ cmpl 24(%esp), %edx
+ jl .L173
+.L174:
+ # 24(%esp) = %ss:stack+736
+ cmpl 24(%esp), %edx
+ je .L417
+ imull $12, %edx, %edx
+ addl $2, %ecx
+ # comps+4(%edx) = %fs:comps+16
+ movl %fs:comps+4(%edx), %eax
+ # 20(%edi) = %fs:dscans+20
+ movl %eax, %fs:20(%edi)
+ # comps+8(%edx) = %fs:comps+20
+ movl %fs:comps+8(%edx), %eax
+ # 24(%edi) = %fs:dscans+24
+ movl %eax, %fs:24(%edi)
+ # 180(%esp) = %ss:stack+892
+ imull $1412, 180(%esp), %eax
+ addl $dhuff, %eax
+ # 4(%edi) = %fs:dscans+4
+ movl %eax, %fs:4(%edi)
+ # 36(%esp) = %ss:stack+748
+ imull $1412, 36(%esp), %eax
+ addl $dhuff+2824, %eax
+ # 8(%edi) = %fs:dscans+8
+ movl %eax, %fs:8(%edi)
+ addl $28, %edi
+ cmpl $dscans+84, %edi
+ jne .L169
+ # datap = %fs:datap
+ movl %ebx, %fs:datap
+ leal 1(%ebx), %eax
+ # (%ebx) = %es:jpg+11
+ movzbl %es:(%ebx), %edx
+ # datap = %fs:datap
+ movl %eax, %fs:datap
+ leal 2(%ebx), %eax
+ # 1(%ebx) = %es:jpg+12
+ movzbl %es:1(%ebx), %ecx
+ # datap = %fs:datap
+ movl %eax, %fs:datap
+ testl %edx, %edx
+ # 2(%ebx) = %es:jpg+13
+ movb %es:2(%ebx), %al
+ # 83(%esp) = %ss:stack+795
+ movb %al, 83(%esp)
+ leal 3(%ebx), %eax
+ setne %dl
+ # datap = %fs:datap
+ movl %eax, %fs:datap
+ cmpl $63, %ecx
+ setne %al
+ orb %al, %dl
+ jne .L179
+ # 83(%esp) = %ss:stack+795
+ cmpb $0, 83(%esp)
+ jne .L179
+ # dscans+16 = %fs:dscans+16
+ cmpl $1, %fs:dscans+16
+ jne .L167
+ # dscans+44 = %fs:dscans+44
+ cmpl $2, %fs:dscans+44
+ jne .L167
+ # dscans+72 = %fs:dscans+72
+ cmpl $3, %fs:dscans+72
+ jne .L167
+ # dscans+20 = %fs:dscans+20
+ cmpl $34, %fs:dscans+20
+ jne .L167
+ # dscans+48 = %fs:dscans+48
+ cmpl $17, %fs:dscans+48
+ jne .L167
+ # dscans+76 = %fs:dscans+76
+ cmpl $17, %fs:dscans+76
+ jne .L167
+ # 272(%esp) = %ss:stack+984
+ movl 272(%esp), %eax
+ # 56(%esp) = %ss:stack+768
+ movl 56(%esp), %edx
+ addl $15, %eax
+ # 60(%esp) = %ss:stack+772
+ movl 60(%esp), %ecx
+ sarl $4, %eax
+ addl $15, %edx
+ decl %eax
+ addl $15, %ecx
+ # 68(%esp) = %ss:stack+780
+ movl %eax, 68(%esp)
+ # 280(%esp) = %ss:stack+992
+ movl 280(%esp), %eax
+ addl $15, %eax
+ # 268(%esp) = %ss:stack+980
+ movl 268(%esp), %ebx
+ sarl $4, %eax
+ # 276(%esp) = %ss:stack+988
+ movl 276(%esp), %esi
+ sarl $4, %edx
+ sarl $4, %ecx
+ leal -1(%eax), %edi
+ sarl $4, %ebx
+ # 40(%esp) = %ss:stack+752
+ movl %edx, 40(%esp)
+ sarl $4, %esi
+ # 44(%esp) = %ss:stack+756
+ movl %ecx, 44(%esp)
+ # 64(%esp) = %ss:stack+776
+ movl %ebx, 64(%esp)
+ # 72(%esp) = %ss:stack+784
+ movl %esi, 72(%esp)
+ # 76(%esp) = %ss:stack+788
+ movl %edi, 76(%esp)
+ cmpl %ecx, %edi
+ jge .L188
+ # 44(%esp) = %ss:stack+756
+ movl %eax, 44(%esp)
+.L188:
+ # dscans+24 = %fs:dscans+24
+ movl %fs:dscans+24, %eax
+ movl $decdata+3136, %edx
+ sall $6, %eax
+ addl $quant, %eax
+ call idctqtab
+ # dscans+52 = %fs:dscans+52
+ movl %fs:dscans+52, %eax
+ sall $6, %eax
+ movl $decdata+3392, %edx
+ addl $quant, %eax
+ call idctqtab
+ # dscans+80 = %fs:dscans+80
+ movl %fs:dscans+80, %eax
+ sall $6, %eax
+ movl $decdata+3648, %edx
+ addl $quant, %eax
+ call idctqtab
+ movl $3629, %edx
+ movl $decdata+3392, %eax
+ call scaleidctqtab
+ movl $2871, %edx
+ movl $decdata+3648, %eax
+ call scaleidctqtab
+ # info+4 = %fs:info+4
+ movl %fs:info+4, %ecx
+ xorl %edx, %edx
+ movl $dscans, %eax
+ # in+4 = %fs:in+4
+ movl $0, %fs:in+4
+ # in = %fs:in
+ movl $0, %fs:in
+ # in+8 = %fs:in+8
+ movl $0, %fs:in+8
+ jmp .L190
+.L191:
+ # -28(%eax) = %fs:dscans
+ movl $0, %fs:-28(%eax)
+ incl %edx
+.L190:
+ addl $28, %eax
+ cmpl %ecx, %edx
+ jl .L191
+ # 284(%esp) = %ss:stack+996
+ movl 284(%esp), %eax
+ # 272(%esp) = %ss:stack+984
+ movl 272(%esp), %ecx
+ # 268(%esp) = %ss:stack+980
+ movl 268(%esp), %ebx
+ # 280(%esp) = %ss:stack+992
+ movl 280(%esp), %esi
+ leal tmp_img(%eax,%eax), %eax
+ # 276(%esp) = %ss:stack+988
+ movl 276(%esp), %edi
+ # 116(%esp) = %ss:stack+828
+ movl %eax, 116(%esp)
+ # 68(%esp) = %ss:stack+780
+ movl 68(%esp), %eax
+ sall $4, %eax
+ # 284(%esp) = %ss:stack+996
+ movl 284(%esp), %edx
+ subl %eax, %ecx
+ # 64(%esp) = %ss:stack+776
+ movl 64(%esp), %eax
+ sall $4, %eax
+ # dscans+12 = %fs:dscans+12
+ movl $2, %fs:dscans+12
+ subl %eax, %ebx
+ # 76(%esp) = %ss:stack+788
+ movl 76(%esp), %eax
+ sall $4, %eax
+ # dscans+40 = %fs:dscans+40
+ movl $1, %fs:dscans+40
+ subl %eax, %esi
+ # 72(%esp) = %ss:stack+784
+ movl 72(%esp), %eax
+ sall $4, %eax
+ # dscans+68 = %fs:dscans+68
+ movl $0, %fs:dscans+68
+ subl %eax, %edi
+ # 276(%esp) = %ss:stack+988
+ movl 276(%esp), %eax
+ sall $2, %edx
+ # 204(%esp) = %ss:stack+916
+ movl %ecx, 204(%esp)
+ negl %eax
+ # 104(%esp) = %ss:stack+816
+ movl %edx, 104(%esp)
+ # 200(%esp) = %ss:stack+912
+ movl %ebx, 200(%esp)
+ # 196(%esp) = %ss:stack+908
+ movl %esi, 196(%esp)
+ # 192(%esp) = %ss:stack+904
+ movl %edi, 192(%esp)
+ # 176(%esp) = %ss:stack+888
+ movl %eax, 176(%esp)
+ # 52(%esp) = %ss:stack+764
+ movl $0, 52(%esp)
+ jmp .L193
+.L194:
+ movl $decdata, %edx
+ movl $1536, %eax
+ jmp .L195
+.L196:
+ # -1(%edx) = %fs:decdata
+ movb $0, %fs:-1(%edx)
+.L195:
+ decl %eax
+ incl %edx
+ cmpl $-1, %eax
+ jne .L196
+ # in+4 = %fs:in+4
+ movl %fs:in+4, %esi
+ # in = %fs:in
+ movl %fs:in, %edi
+ # 92(%esp) = %ss:stack+804
+ movl $decdata, 92(%esp)
+ # 84(%esp) = %ss:stack+796
+ movl $dscans, 84(%esp)
+ # 168(%esp) = %ss:stack+880
+ movl $0, 168(%esp)
+ jmp .L198
+.L199:
+ # 84(%esp) = %ss:stack+796
+ movl 84(%esp), %edx
+ cmpl $7, %esi
+ # 4(%edx) = %fs:dscans+4
+ movl %fs:4(%edx), %ebx
+ jg .L200
+ movl %edi, %ecx
+ movl %esi, %edx
+ movl $in, %eax
+ call fillbits
+ # in = %fs:in
+ movl %fs:in, %edi
+ movl %eax, %esi
+.L200:
+ leal -8(%esi), %ecx
+ movl %edi, %eax
+ sarl %cl, %eax
+ andl $255, %eax
+ # 84(%esp) = %ss:stack+796
+ movl 84(%esp), %esi
+ # 236(%esp) = %ss:stack+948
+ movl %eax, 236(%esp)
+ # 388(%ebx,%eax,4) = %fs:dhuff+?
+ movl %fs:388(%ebx,%eax,4), %edx
+ # (%esi) = %fs:dscans
+ movl %fs:(%esi), %ebp
+ testb %dl, %dl
+ jns .L202
+ movl %edx, %eax
+ sarl $8, %edx
+ andl $127, %eax
+ leal (%ecx,%eax), %esi
+ movl %edx, %eax
+ andl $15, %eax
+ # 236(%esp) = %ss:stack+948
+ movl %eax, 236(%esp)
+ movl %edx, %eax
+ sarl $8, %eax
+ jmp .L204
+.L418:
+ # 92(%esp) = %ss:stack+804
+ movl 92(%esp), %eax
+ leal (%eax,%ebp,4), %eax
+ # 92(%esp) = %ss:stack+804
+ movl %eax, 92(%esp)
+ jmp .L214
+.L202:
+ pushl %edx
+ pushl %eax
+ # in+4 = %fs:in+4
+ movl %ecx, %fs:in+4
+ movl %ebx, %edx
+ leal 244(%esp), %ecx
+ movl $in, %eax
+ # in = %fs:in
+ movl %edi, %fs:in
+ call dec_rec2
+ popl %edx
+ # in+4 = %fs:in+4
+ movl %fs:in+4, %esi
+ # in = %fs:in
+ movl %fs:in, %edi
+ popl %ecx
+.L204:
+ # 92(%esp) = %ss:stack+804
+ movl 92(%esp), %ecx
+ # 84(%esp) = %ss:stack+796
+ movl 84(%esp), %edx
+ leal (%ebp,%eax), %eax
+ movl $63, %ebp
+ # (%edx) = %fs:dscans
+ movl %eax, %fs:(%edx)
+ # (%ecx) = %fs:decdata
+ movl %eax, %fs:(%ecx)
+ addl $4, %ecx
+ # 92(%esp) = %ss:stack+804
+ movl %ecx, 92(%esp)
+ # 8(%edx) = %fs:dscans+8
+ movl %fs:8(%edx), %ebx
+ # 184(%esp) = %ss:stack+896
+ movl %ebx, 184(%esp)
+.L205:
+ cmpl $7, %esi
+ jg .L206
+ movl %edi, %ecx
+ movl %esi, %edx
+ movl $in, %eax
+ call fillbits
+ # in = %fs:in
+ movl %fs:in, %edi
+ movl %eax, %esi
+.L206:
+ leal -8(%esi), %ecx
+ movl %edi, %eax
+ sarl %cl, %eax
+ andl $255, %eax
+ # 184(%esp) = %ss:stack+896
+ movl 184(%esp), %esi
+ # 236(%esp) = %ss:stack+948
+ movl %eax, 236(%esp)
+ # 388(%esi,%eax,4) = %fs:dhuff+?
+ movl %fs:388(%esi,%eax,4), %edx
+ testb %dl, %dl
+ jns .L208
+ movl %edx, %eax
+ sarl $8, %edx
+ andl $127, %eax
+ movl %edx, %ebx
+ sarl $8, %ebx
+ leal (%ecx,%eax), %esi
+ movl %edx, %eax
+ andl $15, %eax
+ # 236(%esp) = %ss:stack+948
+ movl %eax, 236(%esp)
+ jmp .L210
+.L208:
+ pushl %edx
+ pushl %eax
+ # in+4 = %fs:in+4
+ movl %ecx, %fs:in+4
+ # 192(%esp) = %ss:stack+896
+ movl 192(%esp), %edx
+ leal 244(%esp), %ecx
+ movl $in, %eax
+ # in = %fs:in
+ movl %edi, %fs:in
+ call dec_rec2
+ popl %ecx
+ movl %eax, %ebx
+ # in+4 = %fs:in+4
+ movl %fs:in+4, %esi
+ # in = %fs:in
+ movl %fs:in, %edi
+ popl %eax
+.L210:
+ testl %ebx, %ebx
+ jne .L211
+ # 236(%esp) = %ss:stack+948
+ cmpl $0, 236(%esp)
+ je .L418
+.L211:
+ # 236(%esp) = %ss:stack+948
+ movl 236(%esp), %eax
+ # 92(%esp) = %ss:stack+804
+ movl 92(%esp), %edx
+ leal (%edx,%eax,4), %eax
+ # (%eax) = %fs:decdata+?
+ movl %ebx, %fs:(%eax)
+ addl $4, %eax
+ # 92(%esp) = %ss:stack+804
+ movl %eax, 92(%esp)
+ movl %ebp, %eax
+ # 236(%esp) = %ss:stack+948
+ subl 236(%esp), %eax
+ leal -1(%eax), %ebp
+ testl %ebp, %ebp
+ jg .L205
+.L214:
+ movl $64, %eax
+ # 168(%esp) = %ss:stack+880
+ movl 168(%esp), %ecx
+ subl %ebp, %eax
+ # 84(%esp) = %ss:stack+796
+ movl 84(%esp), %ebx
+ # 212(%esp,%ecx,4) = %ss:stack+?
+ movl %eax, 212(%esp,%ecx,4)
+ # 88(%esp) = %ss:stack+800
+ movl 88(%esp), %eax
+ # 12(%ebx) = %fs:dscans+12
+ cmpl %fs:12(%ebx), %eax
+ jne .L215
+ addl $28, %ebx
+ # 84(%esp) = %ss:stack+796
+ movl %ebx, 84(%esp)
+.L215:
+ # 168(%esp) = %ss:stack+880
+ incl 168(%esp)
+.L198:
+ # 168(%esp) = %ss:stack+880
+ movl 168(%esp), %edx
+ # 88(%esp) = %ss:stack+800
+ movl $5, 88(%esp)
+ # 88(%esp) = %ss:stack+800
+ subl %edx, 88(%esp)
+ cmpl $6, %edx
+ jne .L199
+ # 72(%esp) = %ss:stack+784
+ movl 72(%esp), %ecx
+ # 76(%esp) = %ss:stack+788
+ movl 76(%esp), %ebx
+ # 52(%esp) = %ss:stack+764
+ cmpl %ecx, 52(%esp)
+ # in+4 = %fs:in+4
+ movl %esi, %fs:in+4
+ setge %dl
+ # 52(%esp) = %ss:stack+764
+ cmpl %ebx, 52(%esp)
+ # in = %fs:in
+ movl %edi, %fs:in
+ setle %al
+ testb %al, %dl
+ je .L218
+ # 64(%esp) = %ss:stack+776
+ movl 64(%esp), %esi
+ # 68(%esp) = %ss:stack+780
+ movl 68(%esp), %edi
+ # 48(%esp) = %ss:stack+760
+ cmpl %esi, 48(%esp)
+ setge %dl
+ # 48(%esp) = %ss:stack+760
+ cmpl %edi, 48(%esp)
+ setle %al
+ testb %al, %dl
+ je .L218
+ # 212(%esp) = %ss:stack+924
+ pushl 212(%esp)
+ movl $decdata+3136, %ecx
+ pushl $263168
+ movl $decdata+1600, %edx
+ movl $decdata, %eax
+ call idct
+ movl $decdata+3136, %ecx
+ # 224(%esp) = %ss:stack+928
+ pushl 224(%esp)
+ movl $decdata+1856, %edx
+ pushl $263168
+ movl $decdata+256, %eax
+ call idct
+ movl $decdata+3136, %ecx
+ # 236(%esp) = %ss:stack+932
+ pushl 236(%esp)
+ movl $decdata+2112, %edx
+ pushl $263168
+ movl $decdata+512, %eax
+ call idct
+ movl $decdata+3136, %ecx
+ # 248(%esp) = %ss:stack+936
+ pushl 248(%esp)
+ movl $decdata+2368, %edx
+ pushl $263168
+ movl $decdata+768, %eax
+ call idct
+ addl $32, %esp
+ # 228(%esp) = %ss:stack+940
+ pushl 228(%esp)
+ movl $decdata+3392, %ecx
+ pushl $1024
+ movl $decdata+2624, %edx
+ movl $decdata+1024, %eax
+ call idct
+ movl $decdata+1280, %eax
+ # 240(%esp) = %ss:stack+944
+ pushl 240(%esp)
+ movl $decdata+3648, %ecx
+ pushl $1024
+ movl $decdata+2880, %edx
+ call idct
+ # 132(%esp) = %ss:stack+828
+ movl 132(%esp), %eax
+ # 204(%esp) = %ss:stack+900
+ movl %eax, 204(%esp)
+ # 128(%esp) = %ss:stack+824
+ movl $tmp_img, 128(%esp)
+ # 136(%esp) = %ss:stack+832
+ movl $decdata+1600, 136(%esp)
+ # 180(%esp) = %ss:stack+876
+ movl $decdata+2624, 180(%esp)
+ addl $16, %esp
+.L221:
+ # 164(%esp) = %ss:stack+876
+ movl 164(%esp), %edx
+ # 120(%esp) = %ss:stack+832
+ movl 120(%esp), %ecx
+ # 124(%esp) = %ss:stack+836
+ movl %edx, 124(%esp)
+ # 208(%esp) = %ss:stack+920
+ movl %ecx, 208(%esp)
+ # 132(%esp) = %ss:stack+844
+ movl $4, 132(%esp)
+.L222:
+ # 124(%esp) = %ss:stack+836
+ movl 124(%esp), %ebx
+ # 108(%esp) = %ss:stack+820
+ movl $0, 108(%esp)
+ # 20(%esp) = %ss:stack+732
+ movl $0, 20(%esp)
+ # 16(%esp) = %ss:stack+728
+ movl %ebx, 16(%esp)
+ # 12(%esp) = %ss:stack+724
+ movl $0, 12(%esp)
+.L223:
+ # 108(%esp) = %ss:stack+820
+ movl 108(%esp), %eax
+ # 108(%esp) = %ss:stack+820
+ movl 108(%esp), %ecx
+ sarl $2, %ecx
+ andl $3, %eax
+ # 284(%esp) = %ss:stack+996
+ cmpl $16, 284(%esp)
+ leal (%eax,%eax), %ebx
+ je .L226
+ # 284(%esp) = %ss:stack+996
+ cmpl $32, 284(%esp)
+ je .L227
+ # 284(%esp) = %ss:stack+996
+ cmpl $8, 284(%esp)
+ jne .L224
+ sall $6, %ecx
+ # 16(%esp) = %ss:stack+728
+ movl 16(%esp), %esi
+ # (%esi) = %fs:decdata+2624
+ movl %fs:(%esi), %edi
+ # 256(%esi) = %fs:decdata+2880
+ movl %fs:256(%esi), %ebp
+ imull $50, %edi, %eax
+ imull $130, %ebp, %edx
+ leal 128(%eax,%edx), %esi
+ leal (%ecx,%ebx), %eax
+ sall $2, %eax
+ # 208(%esp) = %ss:stack+920
+ movl 208(%esp), %edx
+ sarl $8, %esi
+ # 8(%esp) = %ss:stack+720
+ movl %eax, 8(%esp)
+ # (%edx,%eax) = %fs:decdata+?
+ movl %fs:(%edx,%eax), %eax
+ leal (%eax,%edi), %ecx
+ cmpl $255, %ecx
+ jbe .L228
+ sarl $31, %ecx
+ notl %ecx
+ andl $255, %ecx
+.L228:
+ movl %eax, %edx
+ subl %esi, %edx
+ cmpl $255, %edx
+ jbe .L232
+ sarl $31, %edx
+ notl %edx
+ andl $255, %edx
+.L232:
+ addl %ebp, %eax
+ cmpl $255, %eax
+ jbe .L236
+ sarl $31, %eax
+ notl %eax
+ andl $255, %eax
+.L236:
+ # 108(%esp) = %ss:stack+820
+ movl 108(%esp), %ebx
+ addl %ebx, %ebx
+ # 160(%esp) = %ss:stack+872
+ movl %ebx, 160(%esp)
+ # 112(%esp) = %ss:stack+824
+ movl 112(%esp), %ebx
+ # 160(%esp) = %ss:stack+872
+ addl 160(%esp), %ebx
+ # 156(%esp) = %ss:stack+868
+ movl %ebx, 156(%esp)
+ pushl $255
+ call store_8
+ popl %edx
+ # (%ebx) = %fs:tmp_img+?
+ movb %al, %fs:(%ebx)
+ # 8(%esp) = %ss:stack+720
+ movl 8(%esp), %eax
+ # 208(%esp) = %ss:stack+920
+ addl 208(%esp), %eax
+ # 8(%esp) = %ss:stack+720
+ movl %eax, 8(%esp)
+ # 4(%eax) = %fs:decdata+?
+ movl %fs:4(%eax), %eax
+ leal (%eax,%edi), %ecx
+ cmpl $255, %ecx
+ jbe .L240
+ sarl $31, %ecx
+ notl %ecx
+ andl $255, %ecx
+.L240:
+ movl %eax, %edx
+ subl %esi, %edx
+ cmpl $255, %edx
+ jbe .L244
+ sarl $31, %edx
+ notl %edx
+ andl $255, %edx
+.L244:
+ addl %ebp, %eax
+ cmpl $255, %eax
+ jbe .L248
+ sarl $31, %eax
+ notl %eax
+ andl $255, %eax
+.L248:
+ pushl $0
+ call store_8
+ popl %ecx
+ # 156(%esp) = %ss:stack+868
+ movl 156(%esp), %ecx
+ # 1(%ecx) = %fs:tmp_img+?
+ movb %al, %fs:1(%ecx)
+ # 8(%esp) = %ss:stack+720
+ movl 8(%esp), %ebx
+ # 32(%ebx) = %fs:decdata+?
+ movl %fs:32(%ebx), %eax
+ leal (%eax,%edi), %ecx
+ cmpl $255, %ecx
+ jbe .L252
+ sarl $31, %ecx
+ notl %ecx
+ andl $255, %ecx
+.L252:
+ movl %eax, %edx
+ subl %esi, %edx
+ cmpl $255, %edx
+ jbe .L256
+ sarl $31, %edx
+ notl %edx
+ andl $255, %edx
+.L256:
+ addl %ebp, %eax
+ cmpl $255, %eax
+ jbe .L260
+ sarl $31, %eax
+ notl %eax
+ andl $255, %eax
+.L260:
+ # 188(%esp) = %ss:stack+900
+ movl 188(%esp), %ebx
+ # 160(%esp) = %ss:stack+872
+ addl 160(%esp), %ebx
+ # 152(%esp) = %ss:stack+864
+ movl %ebx, 152(%esp)
+ pushl $85
+ call store_8
+ popl %edx
+ # (%ebx) = %fs:tmp_img+?
+ movb %al, %fs:(%ebx)
+ # 8(%esp) = %ss:stack+720
+ movl 8(%esp), %edx
+ # 36(%edx) = %fs:decdata+?
+ movl %fs:36(%edx), %eax
+ leal (%eax,%edi), %ecx
+ cmpl $255, %ecx
+ jbe .L264
+ sarl $31, %ecx
+ notl %ecx
+ andl $255, %ecx
+.L264:
+ movl %eax, %edx
+ subl %esi, %edx
+ cmpl $255, %edx
+ jbe .L268
+ sarl $31, %edx
+ notl %edx
+ andl $255, %edx
+.L268:
+ addl %ebp, %eax
+ cmpl $255, %eax
+ jbe .L272
+ sarl $31, %eax
+ notl %eax
+ andl $255, %eax
+.L272:
+ pushl $170
+ call store_8
+ popl %ecx
+ # 152(%esp) = %ss:stack+864
+ movl 152(%esp), %ecx
+ # 1(%ecx) = %fs:tmp_img+?
+ movb %al, %fs:1(%ecx)
+ jmp .L224
+.L226:
+ sall $6, %ecx
+ # 16(%esp) = %ss:stack+728
+ movl 16(%esp), %esi
+ # (%esi) = %fs:decdata+2624
+ movl %fs:(%esi), %edi
+ # 256(%esi) = %fs:decdata+2880
+ movl %fs:256(%esi), %ebp
+ imull $50, %edi, %eax
+ imull $130, %ebp, %edx
+ leal 128(%eax,%edx), %esi
+ leal (%ecx,%ebx), %eax
+ sall $2, %eax
+ # 208(%esp) = %ss:stack+920
+ movl 208(%esp), %edx
+ sarl $8, %esi
+ # 8(%esp) = %ss:stack+720
+ movl %eax, 8(%esp)
+ # (%edx,%eax) = %fs:decdata+?
+ movl %fs:(%edx,%eax), %eax
+ leal (%eax,%edi), %ecx
+ cmpl $255, %ecx
+ jbe .L276
+ sarl $31, %ecx
+ notl %ecx
+ andl $255, %ecx
+.L276:
+ movl %eax, %edx
+ subl %esi, %edx
+ cmpl $255, %edx
+ jbe .L280
+ sarl $31, %edx
+ notl %edx
+ andl $255, %edx
+.L280:
+ addl %ebp, %eax
+ cmpl $255, %eax
+ jbe .L284
+ sarl $31, %eax
+ notl %eax
+ andl $255, %eax
+.L284:
+ # 112(%esp) = %ss:stack+824
+ movl 112(%esp), %ebx
+ # 12(%esp) = %ss:stack+724
+ addl 12(%esp), %ebx
+ # 148(%esp) = %ss:stack+860
+ movl %ebx, 148(%esp)
+ pushl $255
+ call store_16
+ popl %edx
+ # (%ebx) = %fs:tmp_img+?
+ movw %ax, %fs:(%ebx)
+ # 8(%esp) = %ss:stack+720
+ movl 8(%esp), %eax
+ # 208(%esp) = %ss:stack+920
+ addl 208(%esp), %eax
+ # 8(%esp) = %ss:stack+720
+ movl %eax, 8(%esp)
+ # 4(%eax) = %fs:decdata+?
+ movl %fs:4(%eax), %eax
+ leal (%eax,%edi), %ecx
+ cmpl $255, %ecx
+ jbe .L288
+ sarl $31, %ecx
+ notl %ecx
+ andl $255, %ecx
+.L288:
+ movl %eax, %edx
+ subl %esi, %edx
+ cmpl $255, %edx
+ jbe .L292
+ sarl $31, %edx
+ notl %edx
+ andl $255, %edx
+.L292:
+ addl %ebp, %eax
+ cmpl $255, %eax
+ jbe .L296
+ sarl $31, %eax
+ notl %eax
+ andl $255, %eax
+.L296:
+ pushl $0
+ call store_16
+ popl %ecx
+ # 148(%esp) = %ss:stack+860
+ movl 148(%esp), %ecx
+ # 8(%esp) = %ss:stack+720
+ movl 8(%esp), %ebx
+ # 2(%ecx) = %fs:tmp_img+?
+ movw %ax, %fs:2(%ecx)
+ # 32(%ebx) = %fs:decdata+?
+ movl %fs:32(%ebx), %eax
+ leal (%eax,%edi), %ecx
+ cmpl $255, %ecx
+ jbe .L300
+ sarl $31, %ecx
+ notl %ecx
+ andl $255, %ecx
+.L300:
+ movl %eax, %edx
+ subl %esi, %edx
+ cmpl $255, %edx
+ jbe .L304
+ sarl $31, %edx
+ notl %edx
+ andl $255, %edx
+.L304:
+ addl %ebp, %eax
+ cmpl $255, %eax
+ jbe .L308
+ sarl $31, %eax
+ notl %eax
+ andl $255, %eax
+.L308:
+ # 188(%esp) = %ss:stack+900
+ movl 188(%esp), %ebx
+ # 12(%esp) = %ss:stack+724
+ addl 12(%esp), %ebx
+ # 144(%esp) = %ss:stack+856
+ movl %ebx, 144(%esp)
+ pushl $85
+ call store_16
+ popl %edx
+ # 8(%esp) = %ss:stack+720
+ movl 8(%esp), %edx
+ # (%ebx) = %fs:tmp_img+?
+ movw %ax, %fs:(%ebx)
+ # 36(%edx) = %fs:decdata+?
+ movl %fs:36(%edx), %eax
+ leal (%eax,%edi), %ecx
+ cmpl $255, %ecx
+ jbe .L312
+ sarl $31, %ecx
+ notl %ecx
+ andl $255, %ecx
+.L312:
+ movl %eax, %edx
+ subl %esi, %edx
+ cmpl $255, %edx
+ jbe .L316
+ sarl $31, %edx
+ notl %edx
+ andl $255, %edx
+.L316:
+ addl %ebp, %eax
+ cmpl $255, %eax
+ jbe .L320
+ sarl $31, %eax
+ notl %eax
+ andl $255, %eax
+.L320:
+ pushl $170
+ call store_16
+ popl %edi
+ # 144(%esp) = %ss:stack+856
+ movl 144(%esp), %ecx
+ # 2(%ecx) = %fs:tmp_img+?
+ movw %ax, %fs:2(%ecx)
+ jmp .L224
+.L227:
+ sall $6, %ecx
+ # 16(%esp) = %ss:stack+728
+ movl 16(%esp), %esi
+ # (%esi) = %fs:decdata+2624
+ movl %fs:(%esi), %ebp
+ # 256(%esi) = %fs:decdata+2880
+ movl %fs:256(%esi), %edi
+ imull $130, %edi, %eax
+ imull $50, %ebp, %edx
+ # 128(%esp) = %ss:stack+840
+ movl %edi, 128(%esp)
+ # 112(%esp) = %ss:stack+824
+ movl 112(%esp), %edi
+ leal 128(%edx,%eax), %esi
+ leal (%ecx,%ebx), %eax
+ sall $2, %eax
+ # 208(%esp) = %ss:stack+920
+ movl 208(%esp), %edx
+ movl %ebp, %ebx
+ # 4(%esp) = %ss:stack+716
+ movl %eax, 4(%esp)
+ # (%edx,%eax) = %fs:decdata+?
+ movl %fs:(%edx,%eax), %ecx
+ # 101(%esp) = %ss:stack+813
+ movb %bl, 101(%esp)
+ movl %ebp, %eax
+ # 12(%esp) = %ss:stack+724
+ movl 12(%esp), %ebx
+ addl %ecx, %eax
+ # 112(%esp) = %ss:stack+824
+ movl 112(%esp), %edx
+ # 20(%esp) = %ss:stack+732
+ addl 20(%esp), %edx
+ # 8(%esp) = %ss:stack+720
+ movb %cl, 8(%esp)
+ sarl $8, %esi
+ # (%edi,%ebx,2) = %fs:tmp_img+?
+ movb %al, %fs:(%edi,%ebx,2)
+ leal (%ecx,%ebp), %eax
+ cmpl $255, %eax
+ jbe .L324
+ sarl $31, %eax
+ notl %eax
+ # (%edx) = %fs:tmp_img+?
+ movb %al, %fs:(%edx)
+.L324:
+ movl %esi, %eax
+ # 102(%esp) = %ss:stack+814
+ movb %al, 102(%esp)
+ # 8(%esp) = %ss:stack+720
+ movb 8(%esp), %al
+ # 102(%esp) = %ss:stack+814
+ subb 102(%esp), %al
+ # 1(%edx) = %fs:tmp_img+?
+ movb %al, %fs:1(%edx)
+ movl %ecx, %eax
+ subl %esi, %eax
+ cmpl $255, %eax
+ jbe .L329
+ sarl $31, %eax
+ notl %eax
+ # 1(%edx) = %fs:tmp_img+?
+ movb %al, %fs:1(%edx)
+.L329:
+ # 128(%esp) = %ss:stack+840
+ movb 128(%esp), %bl
+ # 103(%esp) = %ss:stack+815
+ movb %bl, 103(%esp)
+ # 8(%esp) = %ss:stack+720
+ movb 8(%esp), %bl
+ # 103(%esp) = %ss:stack+815
+ addb 103(%esp), %bl
+ # 2(%edx) = %fs:tmp_img+?
+ movb %bl, %fs:2(%edx)
+ # 128(%esp) = %ss:stack+840
+ movl 128(%esp), %edi
+ leal (%ecx,%edi), %eax
+ cmpl $255, %eax
+ jbe .L334
+ sarl $31, %eax
+ notl %eax
+ # 2(%edx) = %fs:tmp_img+?
+ movb %al, %fs:2(%edx)
+.L334:
+ # 4(%esp) = %ss:stack+716
+ movl 4(%esp), %edi
+ # 101(%esp) = %ss:stack+813
+ movb 101(%esp), %al
+ # 208(%esp) = %ss:stack+920
+ addl 208(%esp), %edi
+ # 4(%edi) = %fs:decdata+?
+ movl %fs:4(%edi), %ecx
+ addl %ecx, %eax
+ movb %cl, %bl
+ # 4(%edx) = %fs:tmp_img+?
+ movb %al, %fs:4(%edx)
+ leal (%ecx,%ebp), %eax
+ cmpl $255, %eax
+ jbe .L339
+ sarl $31, %eax
+ notl %eax
+ # 4(%edx) = %fs:tmp_img+?
+ movb %al, %fs:4(%edx)
+.L339:
+ movb %bl, %al
+ # 102(%esp) = %ss:stack+814
+ subb 102(%esp), %al
+ # 5(%edx) = %fs:tmp_img+?
+ movb %al, %fs:5(%edx)
+ movl %ecx, %eax
+ subl %esi, %eax
+ cmpl $255, %eax
+ jbe .L344
+ sarl $31, %eax
+ notl %eax
+ # 5(%edx) = %fs:tmp_img+?
+ movb %al, %fs:5(%edx)
+.L344:
+ # 103(%esp) = %ss:stack+815
+ addb 103(%esp), %bl
+ # 6(%edx) = %fs:tmp_img+?
+ movb %bl, %fs:6(%edx)
+ # 128(%esp) = %ss:stack+840
+ movl 128(%esp), %ebx
+ leal (%ecx,%ebx), %eax
+ cmpl $255, %eax
+ jbe .L349
+ sarl $31, %eax
+ notl %eax
+ # 6(%edx) = %fs:tmp_img+?
+ movb %al, %fs:6(%edx)
+.L349:
+ # 188(%esp) = %ss:stack+900
+ movl 188(%esp), %ecx
+ # 32(%edi) = %fs:decdata+?
+ movl %fs:32(%edi), %edx
+ # 20(%esp) = %ss:stack+732
+ addl 20(%esp), %ecx
+ # 101(%esp) = %ss:stack+813
+ movb 101(%esp), %al
+ addl %edx, %eax
+ movb %dl, %bl
+ # (%ecx) = %fs:tmp_img+?
+ movb %al, %fs:(%ecx)
+ leal (%edx,%ebp), %eax
+ cmpl $255, %eax
+ jbe .L354
+ sarl $31, %eax
+ notl %eax
+ # (%ecx) = %fs:tmp_img+?
+ movb %al, %fs:(%ecx)
+.L354:
+ movb %bl, %al
+ # 102(%esp) = %ss:stack+814
+ subb 102(%esp), %al
+ # 1(%ecx) = %fs:tmp_img+?
+ movb %al, %fs:1(%ecx)
+ movl %edx, %eax
+ subl %esi, %eax
+ cmpl $255, %eax
+ jbe .L359
+ sarl $31, %eax
+ notl %eax
+ # 1(%ecx) = %fs:tmp_img+?
+ movb %al, %fs:1(%ecx)
+.L359:
+ # 103(%esp) = %ss:stack+815
+ addb 103(%esp), %bl
+ # 2(%ecx) = %fs:tmp_img+?
+ movb %bl, %fs:2(%ecx)
+ # 128(%esp) = %ss:stack+840
+ movl 128(%esp), %ebx
+ leal (%edx,%ebx), %eax
+ cmpl $255, %eax
+ jbe .L364
+ sarl $31, %eax
+ notl %eax
+ # 2(%ecx) = %fs:tmp_img+?
+ movb %al, %fs:2(%ecx)
+.L364:
+ # 36(%edi) = %fs:decdata+?
+ movl %fs:36(%edi), %edx
+ # 101(%esp) = %ss:stack+813
+ movb 101(%esp), %al
+ movb %dl, %bl
+ leal (%edx,%eax), %edi
+ movl %edi, %eax
+ # 4(%ecx) = %fs:tmp_img+?
+ movb %al, %fs:4(%ecx)
+ leal (%edx,%ebp), %eax
+ cmpl $255, %eax
+ jbe .L369
+ sarl $31, %eax
+ notl %eax
+ # 4(%ecx) = %fs:tmp_img+?
+ movb %al, %fs:4(%ecx)
+.L369:
+ movb %bl, %al
+ # 102(%esp) = %ss:stack+814
+ subb 102(%esp), %al
+ # 5(%ecx) = %fs:tmp_img+?
+ movb %al, %fs:5(%ecx)
+ movl %edx, %eax
+ subl %esi, %eax
+ cmpl $255, %eax
+ jbe .L374
+ sarl $31, %eax
+ notl %eax
+ # 5(%ecx) = %fs:tmp_img+?
+ movb %al, %fs:5(%ecx)
+.L374:
+ # 103(%esp) = %ss:stack+815
+ addb 103(%esp), %bl
+ # 6(%ecx) = %fs:tmp_img+?
+ movb %bl, %fs:6(%ecx)
+ # 128(%esp) = %ss:stack+840
+ movl 128(%esp), %ebx
+ leal (%edx,%ebx), %eax
+ cmpl $255, %eax
+ jbe .L224
+ sarl $31, %eax
+ notl %eax
+ # 6(%ecx) = %fs:tmp_img+?
+ movb %al, %fs:6(%ecx)
+.L224:
+ # 108(%esp) = %ss:stack+820
+ incl 108(%esp)
+ # 12(%esp) = %ss:stack+724
+ addl $4, 12(%esp)
+ # 16(%esp) = %ss:stack+728
+ addl $4, 16(%esp)
+ # 20(%esp) = %ss:stack+732
+ addl $8, 20(%esp)
+ # 108(%esp) = %ss:stack+820
+ cmpl $8, 108(%esp)
+ jne .L223
+ # 104(%esp) = %ss:stack+816
+ movl 104(%esp), %esi
+ # 124(%esp) = %ss:stack+836
+ addl $32, 124(%esp)
+ # 208(%esp) = %ss:stack+920
+ addl $64, 208(%esp)
+ # 112(%esp) = %ss:stack+824
+ addl %esi, 112(%esp)
+ # 188(%esp) = %ss:stack+900
+ addl %esi, 188(%esp)
+ # 132(%esp) = %ss:stack+844
+ decl 132(%esp)
+ jne .L222
+ # 120(%esp) = %ss:stack+832
+ addl $512, 120(%esp)
+ # 164(%esp) = %ss:stack+876
+ subl $-128, 164(%esp)
+ # 120(%esp) = %ss:stack+832
+ cmpl $decdata+2624, 120(%esp)
+ jne .L221
+ # 72(%esp) = %ss:stack+784
+ movl 72(%esp), %edi
+ # 192(%esp) = %ss:stack+904
+ movl 192(%esp), %edx
+ # 52(%esp) = %ss:stack+764
+ cmpl %edi, 52(%esp)
+ je .L388
+ xorl %edx, %edx
+.L388:
+ # 196(%esp) = %ss:stack+908
+ movl 196(%esp), %eax
+ # 76(%esp) = %ss:stack+788
+ movl 76(%esp), %ecx
+ # 96(%esp) = %ss:stack+808
+ movl %eax, 96(%esp)
+ # 52(%esp) = %ss:stack+764
+ cmpl %ecx, 52(%esp)
+ je .L391
+ # 96(%esp) = %ss:stack+808
+ movl $16, 96(%esp)
+.L391:
+ # 264(%esp) = %ss:stack+976
+ movl 264(%esp), %eax
+ movl %edx, %edi
+ # 268(%esp) = %ss:stack+980
+ subl 268(%esp), %eax
+ # 176(%esp) = %ss:stack+888
+ movl 176(%esp), %ebx
+ # 172(%esp) = %ss:stack+884
+ addl 172(%esp), %eax
+ addl %edx, %ebx
+ sall $4, %edi
+ movl %edx, %ebp
+ # 28(%esp) = %ss:stack+740
+ movl %eax, 28(%esp)
+ # 136(%esp) = %ss:stack+848
+ movl %ebx, 136(%esp)
+ # 140(%esp) = %ss:stack+852
+ movl %edi, 140(%esp)
+ jmp .L392
+.L393:
+ # 272(%esp) = %ss:stack+984
+ movl 272(%esp), %eax
+ # 136(%esp) = %ss:stack+848
+ movl 136(%esp), %ecx
+ # 268(%esp) = %ss:stack+980
+ subl 268(%esp), %eax
+ # 64(%esp) = %ss:stack+776
+ movl 64(%esp), %esi
+ imull %eax, %ecx
+ # 200(%esp) = %ss:stack+912
+ movl 200(%esp), %edx
+ # 48(%esp) = %ss:stack+760
+ cmpl %esi, 48(%esp)
+ je .L396
+ xorl %edx, %edx
+.L396:
+ # 68(%esp) = %ss:stack+780
+ movl 68(%esp), %eax
+ # 204(%esp) = %ss:stack+916
+ movl 204(%esp), %esi
+ # 48(%esp) = %ss:stack+760
+ cmpl %eax, 48(%esp)
+ je .L399
+ movl $16, %esi
+.L399:
+ # 284(%esp) = %ss:stack+996
+ cmpl $16, 284(%esp)
+ je .L402
+ # 284(%esp) = %ss:stack+996
+ cmpl $32, 284(%esp)
+ je .L403
+ # 284(%esp) = %ss:stack+996
+ cmpl $8, 284(%esp)
+ jne .L400
+ jmp .L401
+.L403:
+ leal (%edi,%edx), %eax
+ leal tmp_img(,%eax,4), %ebx
+ movl %edx, %eax
+ # 268(%esp) = %ss:stack+980
+ subl 268(%esp), %eax
+ # 172(%esp) = %ss:stack+884
+ addl 172(%esp), %eax
+ addl %eax, %ecx
+ # 264(%esp) = %ss:stack+976
+ movl 264(%esp), %eax
+ leal (%eax,%ecx,4), %ecx
+ jmp .L404
+.L402:
+ leal (%edi,%edx), %eax
+ leal tmp_img(%eax,%eax), %ebx
+ movl %edx, %eax
+ # 268(%esp) = %ss:stack+980
+ subl 268(%esp), %eax
+ # 172(%esp) = %ss:stack+884
+ addl 172(%esp), %eax
+ addl %eax, %ecx
+ # 264(%esp) = %ss:stack+976
+ movl 264(%esp), %eax
+ leal (%eax,%ecx,2), %ecx
+ jmp .L405
+.L401:
+ # 140(%esp) = %ss:stack+852
+ movl 140(%esp), %eax
+ leal tmp_img(%eax,%edx), %ebx
+ # 28(%esp) = %ss:stack+740
+ movl 28(%esp), %eax
+ addl %edx, %eax
+ leal (%eax,%ecx), %ecx
+ jmp .L406
+.L407:
+ # -1(%ebx) = %fs:tmp_img+?
+ movb %fs:-1(%ebx), %al
+ incl %edx
+ # -1(%ecx) = %es:pic+?
+ movb %al, %es:-1(%ecx)
+.L406:
+ incl %ebx
+ incl %ecx
+ cmpl %esi, %edx
+ jl .L407
+ jmp .L400
+.L408:
+ # -2(%ebx) = %fs:tmp_img
+ movw %fs:-2(%ebx), %ax
+ incl %edx
+ # -2(%ecx) = %es:pic+?
+ movw %ax, %es:-2(%ecx)
+.L405:
+ addl $2, %ebx
+ addl $2, %ecx
+ cmpl %esi, %edx
+ jl .L408
+ jmp .L400
+.L409:
+ # -4(%ebx) = %fs:tmp_img
+ movl %fs:-4(%ebx), %eax
+ incl %edx
+ # -4(%ecx) = %es:pic+?
+ movl %eax, %es:-4(%ecx)
+.L404:
+ addl $4, %ebx
+ addl $4, %ecx
+ cmpl %esi, %edx
+ jl .L409
+.L400:
+ # 136(%esp) = %ss:stack+848
+ incl 136(%esp)
+ incl %ebp
+ # 140(%esp) = %ss:stack+852
+ addl $16, 140(%esp)
+ addl $16, %edi
+.L392:
+ # 96(%esp) = %ss:stack+808
+ cmpl 96(%esp), %ebp
+ jl .L393
+.L218:
+ # 48(%esp) = %ss:stack+760
+ incl 48(%esp)
+ # 172(%esp) = %ss:stack+884
+ addl $16, 172(%esp)
+.L410:
+ # 40(%esp) = %ss:stack+752
+ movl 40(%esp), %edx
+ # 48(%esp) = %ss:stack+760
+ cmpl %edx, 48(%esp)
+ jl .L194
+ # 52(%esp) = %ss:stack+764
+ incl 52(%esp)
+ # 176(%esp) = %ss:stack+888
+ addl $16, 176(%esp)
+.L193:
+ # 44(%esp) = %ss:stack+756
+ movl 44(%esp), %ecx
+ # 52(%esp) = %ss:stack+764
+ cmpl %ecx, 52(%esp)
+ jl .L412
+ xorl %eax, %eax
+ jmp .L154
+.L412:
+ # 48(%esp) = %ss:stack+760
+ movl $0, 48(%esp)
+ # 172(%esp) = %ss:stack+884
+ movl $0, 172(%esp)
+ jmp .L410
+.L147:
+ movl $1, %eax
+ jmp .L154
+.L150:
+ movl $14, %eax
+ jmp .L154
+.L167:
+ movl $9, %eax
+ jmp .L154
+.L415:
+ movl $7, %eax
+ # datap = %fs:datap
+ movl %ebx, %fs:datap
+ jmp .L154
+.L416:
+ # datap = %fs:datap
+ movl %ebx, %fs:datap
+.L428:
+ movl $8, %eax
+ jmp .L154
+.L417:
+ movl $10, %eax
+ # datap = %fs:datap
+ movl %ecx, %fs:datap
+ jmp .L154
+.L179:
+ movl $11, %eax
+.L154:
+ addl $240, %esp
+ popl %ebx
+ popl %esi
+ popl %edi
+ popl %ebp
+ ret
+
+jpeg_get_size:
+ pushl %ebx
+ # 8(%esp) = %ss:stack+996
+ movl 8(%esp), %eax
+ addl $2, %eax
+ # datap = %fs:datap
+ movl %eax, %fs:datap
+ movl $192, %eax
+ call readtables
+ xorl %edx, %edx
+ testl %eax, %eax
+ jne .L432
+ call getword
+ # datap = %fs:datap
+ incl %fs:datap
+ call getword
+ movl %eax, %ebx
+ call getword
+ sall $16, %ebx
+ leal (%ebx,%eax), %edx
+.L432:
+ movl %edx, %eax
+ popl %ebx
+ ret
diff --git a/jpeg.inc b/jpeg.inc
new file mode 100644
index 0000000..6163676
--- /dev/null
+++ b/jpeg.inc
@@ -0,0 +1 @@
+ jpg_data_size equ 11024
diff --git a/kroete.inc b/kroete.inc
new file mode 100644
index 0000000..176c2cf
--- /dev/null
+++ b/kroete.inc
@@ -0,0 +1,95 @@
+; must be large enough, else we will get evil memory corruptions
+kroete.width equ 520
+kroete.height equ 236
+
+; esi kroete data
+; edi drawing buffer
+; [idle.data2] direction (0 forward, != 0 backward)
+
+kroete:
+ movzx eax,word [es:edi] ; width
+
+ mov edx,[pixel_bytes]
+ imul edx,eax
+ mov [tmp_var_0],edx
+
+ movzx edx,word [es:edi+2] ; height
+ inc edx
+ mul edx
+ shr eax,1
+ mul dword [pixel_bytes]
+ add edi,4
+ add edi,eax
+
+ ; edi: start offset into buffer
+
+ call [getpixel]
+
+ cmp byte [idle.data2],0
+ jnz sul3
+ lea ebp,[esi+16384]
+sul:
+ mov bl,[es:esi]
+ rol bl,2
+ call doit
+ rol bl,2
+ call doit
+ rol bl,2
+ call doit
+ rol bl,2
+ call doit
+ inc esi
+ cmp esi,ebp
+ jnz sul
+ jmp sul5
+
+sul3:
+ lea ebp,[esi-1]
+ add esi,16383
+sul4:
+ mov bl,[es:esi]
+ xor bl,0xaa
+ call doit
+ ror bl,2
+ call doit
+ ror bl,2
+ call doit
+ ror bl,2
+ call doit
+ dec esi
+ cmp esi,ebp
+ jnz sul4
+sul5:
+ call [setpixel_a]
+ ret
+
+doit:
+ xchg eax,edx
+ call [getpixel]
+ xchg eax,edx
+ call [setpixel_a]
+ xchg eax,edx
+
+ mov edx,ebx
+ and edx,3
+ jmp [doit_tab+4*edx]
+
+doit0:
+ sub edi,[pixel_bytes]
+ ret
+
+doit1:
+ sub edi,[tmp_var_0]
+ ret
+
+doit2:
+ add edi,[pixel_bytes]
+ ret
+
+doit3:
+ add edi,[tmp_var_0]
+ ret
+
+ align 4, db 0
+doit_tab dd doit0, doit1, doit2, doit3
+
diff --git a/mk_vocabulary b/mk_vocabulary
new file mode 100755
index 0000000..102d05e
--- /dev/null
+++ b/mk_vocabulary
@@ -0,0 +1,155 @@
+#! /usr/bin/perl
+
+# Ensure that both mkbootmsg.c & bincode.asm talk about the same thing.
+
+@callback = qw (
+ KeyEvent MenuInit InfoBoxInit InfoBoxDone
+ ProgressInit ProgressDone ProgressUpdate
+ PasswordInit PasswordDone
+ Timeout Timer
+);
+
+@primary = qw (
+ [ ] def if ifelse loop repeat for forall exit return array get put length
+ dup pop exch rot roll over index exec
+ add sub mul div mod neg abs min max and or xor not shl shr
+ eq ne gt ge lt le
+ trace dtrace
+ malloc free realloc memsize dumpmem
+ gettype settype
+ screen.size image.colors vscreen.size monitorsize displaysizes
+ moveto currentpoint lineto setcolor currentcolor putpixel getpixel
+ setfont currentfont fontheight strsize show settextmodecolor
+ image loadpalette setpalette getpalette
+ settransparentcolor
+ savescreen restorescreen
+ fillrect
+ snprintf
+ edit.init edit.done edit.input edit.showcursor edit.hidecursor edit.redraw
+ edit.getleft
+ rmoveto strstr
+
+ sound.getvolume sound.setvolume
+ sound.getsamplerate sound.setsamplerate
+ sound.play sound.done
+ mod.load mod.play mod.playsample
+ wav.play wav.playlater
+
+ settextwrap currenttextwrap
+ seteotchar currenteotchar
+ settextcolors currenttextcolors
+ setmaxrows currentmaxrows
+ formattext
+ gettextrows setstartrow
+ getlinks
+ setlink currentlink
+ getlink
+ lineheight
+ currenttitle
+
+ usleep notimeout
+ time date
+ idle
+ image.size
+
+ eject poweroff reboot
+
+ 64bit
+
+ getbyte putbyte getword putword getdword putdword
+ inbyte outbyte
+ findfile filesize getcwd chdir mount
+
+ setmode currentmode videomodeinfo videomodes
+ colorbits
+
+ setimage currentimage
+
+ settransparency currenttransparency
+
+ unpackimage
+
+ keepmode
+
+ blend
+
+ memcpy sysconfig _readsector sysinfo
+
+ getkey serial.init serial.putc serial.setconfig serial.getbaud
+
+ realpath systempath
+
+ xxx test1 test2 test3 test4 test5 test6
+
+);
+
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+sub canon_name;
+
+if($ARGV[0] eq '-a') {
+ printf "cb_functions\t\tequ %u\n", @callback + 0;
+ printf "prim_functions\t\tequ %u\n\n", @primary + 3;
+
+ $i = 0;
+ for (@callback) {
+ $c = canon_name $_;
+ $s = "";
+ $s .= "\t" if length $c < 3;
+ $s .= "\t" if length $c < 11;
+ print "cb_$c$s\tequ $i\n";
+ $i++;
+ }
+
+ print "\n%macro\t\t\tprim_jump_table 0\n";
+ print "jt_p_none\t\tdw 0\t\t\t; 00h\njt_p_code\t\tdw 0\t\t\t; 01h\njt_p_ret\t\tdw 0\t\t\t; 02h\n";
+ $i = 3;
+ for (@primary) {
+ $c = canon_name $_;
+ $s = "";
+ $s .= "\t" if length $c < 3;
+ $s .= "\t" if length $c < 11;
+ $t = "";
+ $t .= "\t" if length $_ < 8;
+ print "jt_p_$c$s\tdw prim_$c$t\t; ";
+ printf "%02xh\n", $i++
+ }
+ print "%endmacro\n"
+}
+
+if($ARGV[0] eq '-c') {
+ print "typedef enum {\n";
+ print " p_none,\n p_code,\n p_ret";
+ for (@primary) { $c = canon_name $_; print ",\n p_$c" }
+ print "\n} prim_t;\n\n";
+
+ print "struct {\n type_t type;\n unsigned value;\n char *name;\n} prim_names[] = {\n";
+
+ for (@callback) {
+ print " { t_none, 0, \"$_\" },\n"
+ }
+
+ print " { t_prim, p_code, \"{\" },\n";
+ print " { t_prim, p_ret, \"{\" }";
+
+ for (@primary) {
+ $c = canon_name $_;
+ print ",\n { t_prim, p_$c, \"$_\" }"
+ }
+
+ print "\n};\n"
+}
+
+
+sub canon_name
+{
+ local $_ = shift;
+
+ $_ = 'astart' if $_ eq '[';
+ $_ = 'aend' if $_ eq ']';
+ tr/.//d;
+
+ return $_
+}
+
+
diff --git a/modplay.inc b/modplay.inc
new file mode 100644
index 0000000..bcb0cae
--- /dev/null
+++ b/modplay.inc
@@ -0,0 +1,1251 @@
+; MOD player (c) 2002 mls
+;
+; generates samples for 11000 HZ
+; bpm always 125
+
+
+%if 0
+ init
+ loadmod
+ play
+ playmod
+ playsamp
+ setvol
+ getvol
+ getstate
+ stop
+%endif
+
+
+; pl_loadmod - configure a mod player
+; es:esi start of player
+; es:edi start of mod
+
+pl_loadmod:
+ push edi
+ lea edi,[esi+pl_state]
+ xor eax,eax
+ mov ecx,pl_sizeof-pl_state
+ rep stosb
+ pop edi
+
+ mov edx,esi
+ mov ecx,4
+ push esi
+ add esi,pl_channs
+sm10:
+ mov [es:esi+ch_player],edx
+ add esi,ch_sizeof
+ loop sm10
+
+ pop esi
+ mov edx,32
+ mov eax,[es:edi+0x438]
+ cmp eax,'CHN4'
+ jz sm2
+ cmp eax,'M.K.'
+ jz sm2
+ cmp eax,'M&K!'
+ jz sm2
+ cmp eax,'FLT4'
+ jz sm2
+ mov dl,16
+sm2:
+ add edi,20+22
+ mov [es:esi+pl_sampinfo],edi
+ sub edi,22+30
+ imul ecx,edx,30
+ add edi,ecx
+ mov al,[es:edi]
+ mov [es:esi+pl_songlen],al
+ inc edi
+ inc edi
+ mov [es:esi+pl_song],edi
+ xor ebx,ebx
+ mov ecx,128
+sm5:
+ mov al,[es:edi]
+ inc edi
+ cmp bl,al
+ jge sm4
+ mov bl,al
+sm4:
+ loop sm5
+ inc bl
+ cmp dl,32
+ jnz sm6
+ add edi,4
+sm6:
+ mov [es:esi+pl_patterns],edi
+ shl ebx,6+4 ; *64*16
+ add ebx,edi
+
+ mov byte [es:esi+pl_speed],6
+ mov byte [es:esi+pl_effpos],6
+ mov byte [es:esi+pl_loaded],1
+ mov edi,[es:esi+pl_sampinfo]
+ lea ecx,[edx-1]
+sm9:
+ mov [es:esi+pl_sampd+4],ebx ; +4 -> skip first?
+ movzx eax,word [es:edi]
+ xchg al,ah
+ add ebx,eax
+ add ebx,eax
+ add esi,4
+ add edi,30
+ loop sm9
+ ret
+
+
+; pl_play - play modfile
+; es:esi start of player
+; es:edi buffer to add samples
+
+pl_play:
+ pusha
+ push edi
+
+ call fixvol
+
+ mov ax,[es:esi+pl_state]
+ or ax,ax
+ jz p3
+ dec ax
+ jnz p1
+
+ ; run effects
+ push esi
+ add esi,pl_channs
+ mov ecx,4
+p31:
+ mov ax,[es:esi+ch_effect]
+ or ax,ax
+ jz p30
+ call doeff
+ call norm
+p30:
+ add esi,ch_sizeof
+ loop p31
+ pop esi
+
+ inc word [es:esi+pl_effpos]
+ mov ax,[es:esi+pl_effpos]
+ cmp ax,[es:esi+pl_speed]
+ jb p1
+
+ ; advance note
+ xor eax,eax
+ mov [es:esi+pl_effpos],ax
+ mov bx,[es:esi+pl_nextsongnum]
+ mov [es:esi+pl_songnum],bx
+ mov cx,[es:esi+pl_songlen]
+ cmp bx,cx
+ jb p2
+p3:
+ mov [es:esi+pl_state],ax
+ pop edi
+ popa
+ ret
+
+p2:
+ mov dx,[es:esi+pl_nextnotenum]
+ mov [es:esi+pl_notenum],dx
+ cmp dx,64
+ jnb p3
+ inc edx
+ cmp dl,64
+ jb p4
+ xor dl,dl
+ inc ebx
+ cmp bx,cx
+ jb p5
+ xor ebx,ebx
+p5:
+ mov [es:esi+pl_nextsongnum],bx
+p4:
+ mov [es:esi+pl_nextnotenum],dx
+
+ ; interpret events for each channel
+ movzx ebx,word [es:esi+pl_songnum]
+ add ebx,[es:esi+pl_song]
+ mov bl,[es:ebx]
+ cmp bl,0x80
+ jb p11
+ xor bl,bl
+p11:
+ movzx ebx,bl
+ shl ebx,6
+ movzx ecx,word [es:esi+pl_notenum]
+ add ebx,ecx
+ shl ebx,4
+ add ebx,[es:esi+pl_patterns]
+
+ mov edi,[es:esi+pl_sampinfo]
+ push esi
+ add esi,pl_channs
+
+ mov ecx,4
+p18:
+ mov ah,[es:ebx]
+ and ah,0x10
+ mov al,[es:ebx+2]
+ shr al,4
+ or al,ah
+ jz p16
+ call setsamp
+p16:
+ mov ah,[es:ebx]
+ and ah,0x0f
+ mov al,[es:ebx+1]
+ or ax,ax
+ jz p17
+ mov [es:esi+ch_pitchgoal],ax
+ mov dl,[es:ebx+2]
+ inc dl
+ or dl,0xf2
+ cmp dl,0xf6
+ jz p17
+ mov [es:esi+ch_pitch],ax
+ xor eax,eax
+ mov [es:esi+ch_pointer],ax
+ mov [es:esi+ch_pointer8],ax
+ mov ax,[es:esi+ch_send]
+ mov [es:esi+ch_end],ax
+p17:
+ xor eax,eax
+ mov [es:esi+ch_effect],ax
+ mov dl,[es:ebx+3]
+ mov al,[es:ebx+2]
+ and al,0x0f
+ or dl,al
+ jz p29
+
+ push edi
+ mov edi,[es:esi+ch_player]
+ mov dl,[es:ebx+3]
+ xor dh,dh
+ call effects
+ pop edi
+p29:
+ call norm
+ add esi,ch_sizeof
+ add ebx,4
+ dec ecx
+ jnz p18
+
+ pop esi
+
+ ; prepare playing of each channel
+p1:
+ push esi
+ add esi,pl_channs
+ mov ecx,4
+p10:
+ mov ax,[es:esi+ch_end]
+ or ax,ax
+ jnz p6
+p8:
+ mov dword [es:esi+ch_start],0
+ jmp p7
+p6:
+ mov ax,[es:esi+ch_pitch]
+ or ax,ax
+ jz p8
+ movzx ebx,word [es:esi+ch_samp]
+ or ebx,ebx
+ jz p8
+ mov edx,esi
+ pop esi
+ push esi
+ shl ebx,2
+ add esi,ebx
+ mov ebx,[es:esi+pl_sampd]
+ xchg esi,edx
+ mov [es:esi+ch_start],ebx
+ mov dx,[es:esi+ch_finetune]
+ add dx,dx
+ jz p9
+ mov dx,[fttab]
+ mul dx
+ shl ax,1
+ mov ax,dx
+ adc ax,ax
+p9:
+ mov bx,ax
+ mov ax,57213
+ xor edx,edx
+ div bx
+ mov [es:esi+ch_step],ah
+ mov [es:esi+ch_step8],al
+p7:
+ add esi,ch_sizeof
+ loop p10
+
+ pop esi
+
+ ; now generate 320 samples for each channel
+ pop edi
+ add esi,pl_channs
+ mov eax,320
+p21:
+ push eax
+ mov ecx,4
+p20:
+ mov ebx,[es:esi+ch_start]
+ or ebx,ebx
+ jz p22
+
+ movzx eax,word [es:esi+ch_pointer]
+ add ebx,eax
+ movsx dx,[es:ebx]
+ shl dx,2
+ inc eax
+ cmp ax,[es:esi+ch_end]
+ jnb p23
+ inc ebx
+ movsx ax,[es:ebx]
+ push ecx
+ mov cx,[es:esi+ch_pointer8]
+ or cx,cx
+ jz p24
+ sar dx,2
+ imul ax,cx
+ neg cl
+ imul dx,cx
+ add dx,ax
+ sar dx,6
+p24:
+ pop ecx
+p23:
+ imul dx,[es:esi+ch_volume]
+ sar dx,2
+ push esi
+ mov esi,[es:esi+ch_player]
+ movzx eax,word [es:esi+pl_volume]
+ pop esi
+ movsx edx,dx
+ imul edx
+ sar eax,16
+ add ax,word [es:edi]
+ jno p40
+ mov ax,32767
+ js p40
+ inc eax
+p40:
+ mov [es:edi],ax
+ mov bx,[es:esi+ch_pointer8]
+ mov ax,[es:esi+ch_pointer]
+ add bl,[es:esi+ch_step8]
+ adc ax,[es:esi+ch_step]
+ mov [es:esi+ch_pointer8],bl
+ cmp ax,[es:esi+ch_end]
+ jb p25
+ mov ax,[es:esi+ch_roff]
+ mov bx,[es:esi+ch_rend]
+ mov [es:esi+ch_end],bx
+ or bx,bx
+ jnz p25
+ mov dword [es:esi+ch_start],0
+p25:
+ mov [es:esi+ch_pointer],ax
+p22:
+ add esi,ch_sizeof
+ dec ecx
+ jnz p20
+ add edi,2
+ sub esi,ch_sizeof * 4
+ pop eax
+ dec eax
+ jnz p21
+ sub esi,pl_channs
+ mov ax,[es:esi+pl_state]
+ dec ax
+ jz p50
+ add esi,pl_channs
+ mov ecx,4
+p51:
+ mov eax,[es:esi+ch_start]
+ or eax,eax
+ jnz p50
+ add esi,ch_sizeof
+ loop p51
+ sub esi,ch_sizeof * 4 + pl_channs
+ mov [es:esi+pl_state],ax
+p50:
+ popa
+ ret
+
+
+fttab dw 32768, 32532, 32298, 32066
+ dw 31835, 31606, 31378, 31153
+ dw 34716, 34466, 34219, 33972
+ dw 33728, 33485, 33244, 33005
+
+
+; norm - normalize channel values
+; es:esi start of chanel
+
+norm:
+ push eax
+ mov ax,[es:esi+ch_volume]
+ or ax,ax
+ jns n1
+ xor eax,eax
+n1:
+ cmp ax,64
+ jb n2
+ mov ax,64
+n2:
+ mov [es:esi+ch_volume],ax
+ mov ax,[es:esi+ch_pitch]
+ or ax,ax
+ jnb n3
+ xor eax,eax
+ mov [es:esi+ch_pitch],ax
+n3:
+ pop eax
+ ret
+
+
+; effects - interpret effect
+; ax effect
+; dx arg
+; es:edi start of player
+; es:esi start of channel
+;
+; trashes ax, dx
+
+effects:
+ movzx edx,dx
+ or al,al
+ jnz e1
+ mov [es:esi+ch_arpindex],ax
+ mov ax,[es:esi+ch_pitch]
+ mov [es:esi+ch_arp],ax
+ push edx
+ push eax
+ shr dl,4
+ jz e1b
+ mov dx,[arptab+2*edx]
+ mul dx
+ mov ax,dx
+e1b:
+ mov [es:esi+ch_arp+2],ax
+ pop eax
+ pop edx
+ and dl,0x0f
+ jz e1a
+ mov dx,[arptab+2*edx]
+ mul dx
+ mov ax,dx
+e1a:
+ mov [es:esi+ch_arp+4],ax
+ mov byte [es:esi+ch_effect],EFF_ARP
+ ret
+e1:
+ cmp al,1
+ jnz e2
+ neg dx
+ jmp e3
+e2:
+ cmp al,2
+ jnz e4
+e3:
+ or dl, dl
+ jz e5
+ mov [es:esi+ch_slide],dx
+e5:
+ mov byte [es:esi+ch_effect],EFF_SLIDE
+ ret
+e4:
+ cmp al,3
+ jnz e6
+ or dl,dl
+ jz e7
+ mov [es:esi+ch_pitchrate],dx
+e7:
+ mov byte [es:esi+ch_effect],EFF_PORTA
+ ret
+e6:
+ cmp al,4
+ jnz e8
+ mov ax,dx
+ shr ax,4
+ jz e9
+ mov [es:esi+ch_vibrate],ax
+e9:
+ and dl,0x0f
+ jz e10
+ mov [es:esi+ch_vibdepth],dx
+e10:
+ mov byte [es:esi+ch_effect],EFF_VIBRA
+ ret
+e8:
+ cmp al,5
+ jnz e11
+ mov byte [es:esi+ch_effect],EFF_PORTASLIDE
+ jmp e12
+e11:
+ cmp al,6
+ jnz e13
+ mov byte [es:esi+ch_effect],EFF_VIBRASLIDE
+ jmp e12
+e13:
+ cmp al,9
+ jnz e14
+ mov ax,[es:esi+ch_samp]
+ or al,al
+ jz e15
+ xor eax,eax
+ mov [es:esi+ch_pointer8],ax
+ mov ax,[es:esi+ch_send]
+ mov [es:esi+ch_end],ax
+ shl dx,8
+ cmp dx,ax
+ jb e16
+ sub dx,ax
+ mov ax,[es:esi+ch_rend]
+ mov [es:esi+ch_end],ax
+ sub ax,[es:esi+ch_roff]
+ jz e17
+e18:
+ cmp dx,ax
+ jb e17
+ sub dx,ax
+ jmp e18
+e17:
+ add dx,[es:esi+ch_roff]
+e16:
+ mov [es:esi+ch_pointer],dx
+e15:
+ ret
+e14:
+ cmp al,10
+ jnz e19
+ mov byte [es:esi+ch_effect],EFF_SLIDEVOL
+e12:
+ mov ax,dx
+ and dl,0x0f
+ jz e20
+ neg dx
+ jmp e21
+e20:
+ mov dx,ax
+ shr dl,4
+e21:
+ mov [es:esi+ch_volumerate],dx
+ ret
+e19:
+ cmp al,11
+ jnz e22
+ mov [es:edi+pl_nextsongnum],dx
+ xor edx,edx
+ mov [es:edi+pl_nextnotenum],dx
+ ret
+e22:
+ cmp al,12
+ jnz e23
+ mov [es:esi+ch_volume],dx
+ ret
+e23:
+ cmp al,13
+ jnz e24
+ mov ax,dx
+ shr al,4
+ imul ax,10
+ and dx,0x0f
+ add dx,ax
+ mov [es:edi+pl_nextnotenum],dx
+ mov dx,[es:edi+pl_songnum]
+ inc dx
+ mov ax,[es:edi+pl_songlen]
+ cmp dx,ax
+ jb e25
+ xor edx,edx
+e25:
+ mov [es:edi+pl_nextsongnum],dx
+ ret
+e24:
+ cmp al,15
+ jnz e27
+ cmp dl,32
+ jnb e26
+ mov [es:edi+pl_speed],dx
+e26:
+ ret
+e27:
+ cmp al,14
+ jnz e26
+ mov al,dl
+ shr al,4
+ and dl,0x0f
+ cmp al,1
+ jnz e28
+e30:
+ add [es:esi+ch_pitch],dx
+ ret
+e28:
+ cmp al,2
+ jnz e29
+ neg dx
+ jmp e30
+e29:
+ cmp al,5
+ jnz e31
+ mov [es:esi+ch_finetune],dx
+ ret
+e31:
+ cmp al,6
+ jnz e32
+ or dl,dl
+ jnz e33
+ mov dx,[es:edi+pl_notenum]
+ mov [es:edi+pl_loop_notenum],dx
+ ret
+e33:
+ mov ax,[es:edi+pl_loop_counter]
+ or ax,ax
+ jnz e34
+ mov ax,dx
+ inc ax
+e34:
+ dec ax
+ mov [es:edi+pl_loop_counter],ax
+ jz e35
+ mov dx,[es:edi+pl_loop_notenum]
+ mov [es:edi+pl_nextnotenum],dx
+e35:
+ ret
+e32:
+ cmp al,9
+ jnz e36
+ mov [es:esi+ch_retrig],dx
+ mov [es:esi+ch_current],dx
+ mov byte [es:esi+ch_effect],EFF_RETRIG
+ ret
+e36:
+ cmp al,10
+ jnz e37
+e39:
+ add [es:esi+ch_volume],dx
+ ret
+e37:
+ cmp al,11
+ jnz e38
+ neg dx
+ jmp e39
+e38:
+ cmp al,12
+ jnz e40
+ mov [es:esi+ch_retrig],dx
+ mov byte [es:esi+ch_effect],EFF_CUT
+ ret
+e40:
+ cmp al,13
+ jnz e41
+ mov [es:esi+ch_current],dx
+ mov dx,[es:esi+ch_samp]
+ mov [es:esi+ch_latesamp],dx
+ xor edx,edx
+ mov [es:esi+ch_samp],dx
+ mov byte [es:esi+ch_effect],EFF_LATESTART
+ ret
+e41:
+ cmp al,14
+ jnz e42
+ inc dx
+ imul dx,[es:edi+pl_speed]
+ sub [es:edi+pl_effpos],dx
+e42:
+ ret
+
+
+arptab dw 0, 61858, 58386, 55109
+ dw 52016, 49097, 46341, 43740
+ dw 41285, 38968, 36781, 34716
+ dw 32768, 30929, 29193, 27554
+
+
+; doeff - apply channel effect
+; ax effect
+; es:esi start of chanel
+;
+; trashes ax, bx
+
+doeff:
+ bt ax,3
+ jnc d1
+ mov bx,[es:esi+ch_volumerate]
+ add [es:esi+ch_volume],bx
+ sub al,8
+d1:
+ cmp al,EFF_ARP
+ jnz d2
+ movzx ebx,word [es:esi+ch_arpindex]
+ inc bl
+ cmp bl,3
+ jb d3
+ xor bl,bl
+d3:
+ mov [es:esi+ch_arpindex],bl
+ add bl,bl
+ mov ax,[es:esi+ebx+ch_arp]
+ mov [es:esi+ch_pitch],ax
+ ret
+d2:
+ cmp al,EFF_SLIDE
+ jnz d4
+ mov ax,[es:esi+ch_slide]
+ add [es:esi+ch_pitch],ax
+ ret
+d4:
+ cmp al,EFF_PORTA
+ jnz d5
+ mov ax,[es:esi+ch_pitch]
+ mov bx,[es:esi+ch_pitchgoal]
+ cmp ax,bx
+ jnb d6
+ add ax,[es:esi+ch_pitchrate]
+ cmp ax,bx
+ jb d7
+d8:
+ mov ax,bx
+d7:
+ mov [es:esi+ch_pitch],ax
+ ret
+d6:
+ sub ax,[es:esi+ch_pitchrate]
+ cmp ax,bx
+ jb d8
+ jmp d7
+d5:
+ cmp al,EFF_VIBRA
+ jnz d9
+ mov bx,[es:esi+ch_viboffset]
+ add bx,[es:esi+ch_vibrate]
+ and ebx,0x3f
+ mov [es:esi+ch_viboffset],bx
+ mov ax,[vibtab+2*ebx]
+ imul ax,[es:esi+ch_vibdepth]
+ sar ax, 8
+ add ax,[es:esi+ch_pitchgoal]
+ mov [es:esi+ch_pitch],ax
+d12:
+ ret
+d9:
+ cmp al,EFF_RETRIG
+ jnz d10
+ dec word [es:esi+ch_current]
+ jz d11
+ jns d12
+d11:
+ mov ax,[es:esi+ch_retrig]
+ mov [es:esi+ch_current],ax
+ mov ax,[es:esi+ch_send]
+ mov [es:esi+ch_end],ax
+ xor eax,eax
+ mov [es:esi+ch_pointer],ax
+ mov [es:esi+ch_pointer8],ax
+ ret
+d10:
+ cmp al,EFF_CUT
+ jnz d13
+ mov ax,[es:esi+ch_retrig]
+ jz d14
+ dec word [es:esi+ch_retrig]
+ jnz d14
+ xor eax,eax
+ mov [es:esi+ch_volume],ax
+d14:
+ ret
+d13:
+ cmp al,EFF_LATESTART
+ jnz d14
+ dec word [es:esi+ch_current]
+ jz d15
+ jns d14
+d15:
+ call d11
+ mov [es:esi+ch_current],ax
+ mov [es:esi+ch_effect],ax
+ mov ax,[es:esi+ch_latesamp]
+ mov [es:esi+ch_samp],ax
+ ret
+
+
+vibtab dw 0, 50, 100, 149, 196, 241, 284, 325
+ dw 362, 396, 426, 452, 473, 490, 502, 510
+ dw 512, 510, 502, 490, 473, 452, 426, 396
+ dw 362, 325, 284, 241, 196, 149, 100, 50
+ dw 0, -49, -99,-148,-195,-240,-283,-324
+ dw -361,-395,-425,-451,-472,-489,-501,-509
+ dw -511,-509,-501,-489,-472,-451,-425,-395
+ dw -361,-324,-283,-240, -195,-148,-99, -49
+
+
+; fixvol - fixup volume
+; es:esi start of volblock
+
+fixvol:
+ push eax
+ push ebx
+ mov ax,[es:esi+vo_volume]
+ mov bx,[es:esi+vo_volumegoal]
+ cmp ax,bx
+ jz vo3
+ jnb vo1
+ add ax,[es:esi+vo_volumerate]
+ jc vohit
+ cmp ax,bx
+ jb vo2
+vohit:
+ mov ax,bx
+vo2:
+ mov [es:esi+vo_volume],ax
+vo3:
+ pop ebx
+ pop eax
+ ret
+vo1:
+ sub ax,[es:esi+vo_volumerate]
+ jc vohit
+ cmp ax,bx
+ jb vohit
+ jmp vo2
+
+
+; vo_setvol - set volume
+;
+; es:esi start of volblock
+; ax goal
+; bx rate 0=immediate 50=one sec
+
+vo_setvol:
+ mov [es:esi+vo_volumegoal],ax
+ or bx,bx
+ jnz sv1
+ mov [es:esi+vo_volume],ax
+ mov [es:esi+vo_volumerate],bx
+ ret
+sv1:
+ push eax
+ stc
+ sbb eax,eax
+ push edx
+ div bx
+ pop edx
+ mov [es:esi+vo_volumerate],ax
+ pop eax
+ ret
+
+
+; getvol - get volume
+; es:esi start of volblock
+
+vo_getvol:
+ mov ax,[es:esi+vo_volume]
+ ret
+
+
+; pl_playmod - play a modfile
+; es:esi start of player
+; ax start of song
+
+pl_playmod:
+ cmp byte [es:esi+pl_loaded],1
+ jz pm0
+ ret
+pm0:
+ xor ebx,ebx
+ mov [es:esi+pl_state],bx
+ mov byte [es:esi+pl_speed],6
+ mov byte [es:esi+pl_effpos],6
+ mov [es:esi+pl_nextsongnum],ax
+ mov [es:esi+pl_nextnotenum],bx
+ call clearchans
+ inc ebx
+ mov [es:esi+pl_state],bx
+ ret
+
+
+; pl_playsamp - play a sample
+; es:esi start of player
+; ax channel number
+; bx sample number
+; cx pitch
+
+pl_playsamp:
+ cmp byte [es:esi+pl_loaded],1
+ jz ps0
+ ret
+ps0:
+ push eax
+ mov ax,[es:esi+pl_state]
+ dec ax
+ dec ax
+ jz ps1
+ call clearchans
+ps1:
+ pop eax
+ push esi
+ mov edi,[es:esi+pl_sampinfo]
+ add esi,pl_channs
+ imul eax,ch_sizeof
+ add esi,eax
+ xor eax,eax
+ mov [es:esi+ch_start],eax
+ mov [es:esi+ch_effect],ax
+ mov [es:esi+ch_pointer],ax
+ mov [es:esi+ch_pointer8],ax
+ mov [es:esi+ch_pitch],cx
+ mov eax,ebx
+ or ax,ax
+ jz ps2
+ call setsamp
+ps2:
+ mov ax,[es:esi+ ch_send]
+ mov [es:esi+ch_end],ax
+ pop esi
+ mov byte [es:esi + pl_state],2
+ ret
+
+
+; pl_getstate - get state of player
+; es:esi start of player
+
+pl_getstate:
+ mov ax,[es:esi+pl_state]
+ ret
+
+
+; pl_stop - stop something?
+; es:esi start of player
+
+pl_stop:
+ mov byte [es:esi+pl_state],0
+ ret
+
+
+; clearchans - stop all channels
+; es:esi start of player
+
+clearchans:
+ push esi
+ push ecx
+ push eax
+ xor eax,eax
+ add esi,pl_channs
+ mov ecx,4
+cc1:
+ mov [es:esi+ch_start],eax
+ mov [es:esi+ch_effect],ax
+ add esi,ch_sizeof
+ loop cc1
+ pop eax
+ pop ecx
+ pop esi
+ ret
+
+
+; setsamp - start a sample
+; es:esi start of channel
+; es:edi start of sampinfo
+; ax sample number
+;
+; trashes ax, dx
+
+setsamp:
+ movzx eax,al
+ mov [es:esi+ch_samp],ax
+ dec ax
+ imul ax,30
+ push ebx
+ mov ebx,eax
+ mov ax,[es:edi+ebx]
+ xchg ah,al
+ add ax,ax
+ mov [es:esi+ch_send],ax
+ mov ax,[es:edi+ebx+4]
+ xchg ah,al
+ add ax,ax
+ mov [es:esi+ch_roff],ax
+ mov dx,[es:edi+ebx+6]
+ xchg dh,dl
+ add dx,dx
+ mov [es:esi+ch_rend],dx
+ add ax,dx
+ mov dx,[es:esi+ch_send]
+ dec ax
+ dec ax
+ cmp ax,dx
+ jna ss13
+ shr word [es:esi+ch_roff],1
+ss13:
+ mov ax,[es:esi+ch_roff]
+ add ax,[es:esi+ch_rend]
+ cmp dx,[es:esi+ch_roff]
+ jnb ss14
+ss16:
+ xor eax,eax
+ mov [es:esi+ch_roff],ax
+ss14:
+ cmp dx,ax
+ jnb ss15
+ mov ax,dx
+ss15:
+ mov [es:esi+ch_rend],ax
+ dec ax
+ dec ax
+ jz ss16
+ mov al,[es:edi+ebx+2]
+ mov [es:esi+ch_finetune],al
+ mov al,[es:edi+ebx+3]
+ mov [es:esi+ch_volume],al
+ pop ebx
+ ret
+
+
+; the big picture: four mod players
+;
+; init - initialize everything
+;
+; es:esi start of area
+
+init:
+ mov edi,esi
+ xor eax,eax
+ mov ecx,ar_sizeof
+ rep stosb
+ not eax
+ xor ebx,ebx
+ push esi
+ add esi,ar_players
+ mov ecx,4
+ii2:
+ call vo_setvol
+ add esi,pl_sizeof
+ loop ii2
+ pop esi
+ add esi,ar_volume
+ mov ax,32767
+ call vo_setvol
+ ret
+
+
+; setpl - get player offset
+; eax player no.
+;
+; return:
+; esi player offset
+
+setpl:
+ add esi,ar_players
+ imul eax,pl_sizeof
+ add esi,eax
+ ret
+
+
+; loadmod - load a mod into one of the players
+; es:esi start of area
+; es:edi start of mod
+; eax player no.
+
+loadmod:
+ call setpl
+ call pl_loadmod
+ ret
+
+
+; playmod - play a modfile
+; es:esi start of area
+; eax player no.
+; bx start of song
+
+playmod:
+ call setpl
+ mov eax,ebx
+ call pl_playmod
+ ret
+
+
+; playsamp - play a sample
+; es:esi start of area
+; eax player no.
+; bx channel number
+; cx sample number
+; dx pitch
+
+playsamp:
+ call setpl
+ mov eax,ebx
+ mov ebx,ecx
+ mov ecx,edx
+ call pl_playsamp
+ ret
+
+
+; getstate - get state of player
+; es:esi start of area
+; eax player no.
+
+getstate:
+ call setpl
+ call pl_getstate
+ ret
+
+
+; stop - stop a player
+; es:esi start of area
+; eax player no.
+
+stop:
+ call setpl
+ call pl_stop
+ ret
+
+
+; play - generate samples
+; es:esi start of area
+
+play:
+ push esi
+ xor eax,eax
+ mov ecx,ar_volume
+ap1:
+ mov [es:esi],al
+ inc esi
+ loop ap1
+ call fixvol
+ pop esi
+ push esi
+ add esi,ar_ssamps
+ mov edi,esi
+ mov ecx,ar_sizeof-ar_ssamps
+ap2:
+ mov [es:esi],al
+ inc esi
+ loop ap2
+ pop esi
+ push esi
+ mov ecx,4
+ xor ebx,ebx
+ add esi,ar_players
+ap4:
+ mov ax,[es:esi+pl_state]
+ or ax,ax
+ jz ap3
+ call pl_play
+ mov ax,[es:esi+pl_volume]
+ or ax,ax
+ jz ap3
+ mov bl,1
+ap3:
+ add esi,pl_sizeof
+ loop ap4
+ pop esi
+ movzx eax,word [es:esi+ar_volume]
+ or ax,ax
+ jz ap5
+ mov [es:esi+ar_hassamp],bl
+ mov ecx,320
+ xor ebx,ebx
+ap6:
+ movsx edx,word [es:esi+ebx+ar_ssamps]
+
+ imul edx,eax
+
+ sar edx,16-2
+
+ cmp edx,32767
+ jl ap7
+ mov edx,32767
+ap7:
+ cmp edx,-32768
+ jg ap8
+ mov edx,-32768
+
+ap8:
+ add dh,128
+ push ebx
+ xor ebx,ebx
+ mov bl,dh
+ mov dl,[pctab+ebx]
+ pop ebx
+ mov [es:esi+ar_samps],dl
+ inc esi
+ inc ebx
+ loop ap6
+ap5:
+ ret
+
+
+pctab db 64, 64, 64, 64, 64, 64, 64, 64
+ db 64, 64, 63, 63, 63, 63, 63, 63
+ db 63, 63, 63, 63, 63, 63, 62, 62
+ db 62, 62, 62, 62, 62, 62, 62, 62
+ db 61, 61, 61, 61, 61, 61, 61, 61
+ db 61, 60, 60, 60, 60, 60, 60, 60
+ db 60, 60, 60, 59, 59, 59, 59, 59
+ db 59, 59, 59, 59, 59, 58, 58, 58
+ db 58, 58, 58, 58, 58, 58, 58, 57
+ db 57, 57, 57, 57, 57, 57, 57, 57
+ db 57, 56, 56, 56, 56, 56, 56, 56
+ db 56, 55, 55, 55, 55, 55, 54, 54
+ db 54, 54, 53, 53, 53, 53, 52, 52
+ db 52, 51, 51, 50, 50, 49, 49, 48
+ db 48, 47, 46, 45, 44, 43, 42, 41
+ db 40, 39, 38, 37, 36, 35, 34, 33
+ db 32, 31, 30, 29, 28, 27, 26, 25
+ db 24, 23, 22, 21, 20, 19, 18, 17
+ db 17, 16, 16, 15, 15, 14, 14, 13
+ db 13, 13, 12, 12, 12, 12, 11, 11
+ db 11, 11, 10, 10, 10, 10, 10, 9
+ db 9, 9, 9, 9, 9, 9, 9, 9
+ db 8, 8, 8, 8, 8, 8, 8, 8
+ db 8, 8, 8, 8, 7, 7, 7, 7
+ db 7, 7, 7, 6, 6, 6, 6, 6
+ db 6, 6, 6, 6, 6, 6, 5, 5
+ db 5, 5, 5, 5, 5, 5, 5, 5
+ db 4, 4, 4, 4, 4, 4, 4, 4
+ db 4, 4, 3, 3, 3, 3, 3, 3
+ db 3, 3, 3, 3, 2, 2, 2, 2
+ db 2, 2, 2, 2, 2, 1, 1, 1
+ db 1, 1, 1, 1, 1, 1, 1, 1
+
+
+; setvol - set volume
+; es:esi start of area
+; eax player no.
+; bx goal
+; cx rate 0=immediate 50=one sec
+
+setvol:
+ call setplvl
+ mov eax,ebx
+ mov ebx,ecx
+ call vo_setvol
+ ret
+
+
+; getvol - get volume
+; es:esi start of area
+; eax player no.
+;
+; return:
+; ax volume
+
+getvol:
+ call setplvl
+ call vo_getvol
+ ret
+
+
+; setplvl - get volume offset
+; eax player no.
+
+setplvl:
+ or eax,eax
+ jns setpl
+ add esi,ar_volume
+ ret
+
diff --git a/modplay_defines.inc b/modplay_defines.inc
new file mode 100644
index 0000000..c56374c
--- /dev/null
+++ b/modplay_defines.inc
@@ -0,0 +1,92 @@
+; MOD player (c) 2002 mls
+;
+; generates samples for 11000 HZ
+; bpm always 125
+
+STATE_OFF equ 0
+STATE_PLAY equ 1
+STATE_SAMPLE equ 2
+
+; struct volume
+vo_volume equ 0
+vo_volumegoal equ vo_volume + 2
+vo_volumerate equ vo_volumegoal + 2
+vo_sizeof equ vo_volumerate + 2
+
+; struct channel
+ch_samp equ 0
+ch_startseg equ ch_samp + 2
+ch_pitch equ ch_startseg + 2
+ch_finetune equ ch_pitch + 2
+ch_volume equ ch_finetune + 2
+
+ch_start equ ch_volume + 2 ; pointer, rel to ch_startseg
+ch_pointer equ ch_start + 4
+ch_pointer8 equ ch_pointer + 2
+ch_end equ ch_pointer8 + 2
+ch_send equ ch_end + 2
+ch_roff equ ch_send + 2
+ch_rend equ ch_roff + 2
+ch_step equ ch_rend + 2
+ch_step8 equ ch_step + 2
+
+ch_slide equ ch_step8 + 2
+ch_vibrate equ ch_slide + 2
+ch_viboffset equ ch_vibrate + 2
+ch_vibdepth equ ch_viboffset + 2
+ch_pitchgoal equ ch_vibdepth + 2
+ch_pitchrate equ ch_pitchgoal + 2
+ch_volumerate equ ch_pitchrate + 2
+ch_arpindex equ ch_volumerate + 2
+ch_arp equ ch_arpindex + 2
+ch_current equ ch_arp + 3 * 2
+ch_retrig equ ch_current + 2
+ch_latesamp equ ch_retrig + 2
+ch_effect equ ch_latesamp + 2
+ch_player equ ch_effect + 2 ; pointer to player data, rel to ds
+ch_sizeof equ ch_player + 4
+
+; struct player
+pl_volume equ 0
+pl_state equ pl_volume + vo_sizeof
+pl_songlen equ pl_state + 2
+pl_speed equ pl_songlen + 2
+pl_effpos equ pl_speed + 2
+pl_nextsongnum equ pl_effpos + 2
+pl_nextnotenum equ pl_nextsongnum + 2
+pl_songnum equ pl_nextnotenum + 2
+pl_notenum equ pl_songnum + 2
+pl_loop_notenum equ pl_notenum + 2
+pl_loop_counter equ pl_loop_notenum + 2
+pl_seg equ pl_loop_counter + 2
+pl_song equ pl_seg + 2 ; pointer, rel to pl_seg
+pl_patterns equ pl_song + 4 ; pointer, rel to pl_seg
+pl_sampinfo equ pl_patterns + 4 ; pointer, rel to pl_seg
+pl_sampd equ pl_sampinfo + 4 ; pointer array, rel to pl_sampdseg
+pl_sampdseg equ pl_sampd + 4 * 32
+pl_channs equ pl_sampdseg + 2 * 32
+pl_loaded equ pl_channs + 4 * ch_sizeof
+pl_sizeof equ pl_loaded + 2
+
+EFF_ARP equ 1
+EFF_SLIDE equ 2
+EFF_PORTA equ 3
+EFF_VIBRA equ 4
+EFF_RETRIG equ 5
+EFF_CUT equ 6
+EFF_LATESTART equ 7
+EFF_SLIDEVOL equ 8
+EFF_PORTASLIDE equ 8 + 3
+EFF_VIBRASLIDE equ 8 + 4
+
+ ; _must_ be 320
+num_samples equ 320
+
+; struct area
+ar_hassamp equ 0
+ar_samps equ ar_hassamp + 1
+ar_volume equ ar_samps + num_samples + 1
+ar_players equ ar_volume + vo_sizeof
+ar_ssamps equ ar_players + pl_sizeof * 4
+ar_sizeof equ ar_ssamps + num_samples * 2
+
diff --git a/patches/gfxboot_c32.diff b/patches/gfxboot_c32.diff
new file mode 100644
index 0000000..4dae3ea
--- /dev/null
+++ b/patches/gfxboot_c32.diff
@@ -0,0 +1,1080 @@
+diff --git a/Makefile b/Makefile
+index 76abff5..c964e8d 100644
+--- a/Makefile
++++ b/Makefile
+@@ -32,7 +32,7 @@ include $(topdir)/MCONFIG
+ # List of module objects that should be installed for all derivatives
+ MODULES = memdisk/memdisk memdump/memdump.com modules/*.com \
+ com32/menu/*.c32 com32/modules/*.c32 com32/mboot/*.c32 \
+- com32/hdt/*.c32 com32/rosh/*.c32
++ com32/hdt/*.c32 com32/rosh/*.c32 com32/gfxboot/*.c32
+
+ # syslinux.exe is BTARGET so as to not require everyone to have the
+ # mingw suite installed
+diff --git a/com32/Makefile b/com32/Makefile
+index 4a58485..69a125e 100644
+--- a/com32/Makefile
++++ b/com32/Makefile
+@@ -1,3 +1,3 @@
+-SUBDIRS = lib gpllib libutil modules mboot menu samples rosh cmenu hdt
++SUBDIRS = lib gpllib libutil modules mboot menu samples rosh cmenu hdt gfxboot
+ all tidy dist clean spotless install:
+ set -e; for d in $(SUBDIRS); do $(MAKE) -C $$d $@; done
+diff --git a/com32/gfxboot/Makefile b/com32/gfxboot/Makefile
+new file mode 100644
+index 0000000..2affcde
+--- /dev/null
++++ b/com32/gfxboot/Makefile
+@@ -0,0 +1,44 @@
++## -----------------------------------------------------------------------
++##
++## Copyright 2001-2009 H. Peter Anvin - All Rights Reserved
++## Copyright 2009 Intel Corporation; author: H. Peter Anvin
++##
++## 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, Inc., 53 Temple Place Ste 330,
++## Boston MA 02111-1307, USA; either version 2 of the License, or
++## (at your option) any later version; incorporated herein by reference.
++##
++## -----------------------------------------------------------------------
++
++topdir = ../..
++include ../MCONFIG
++
++MODULES = gfxboot.c32
++
++all: $(MODULES)
++
++gfxboot.elf : gfxboot.o realmode_callback.o $(LIBS) $(C_LIBS)
++ $(LD) $(LDFLAGS) -o $@ $^
++
++realmode_callback.o: realmode_callback.asm
++ nasm -f bin -O99 -o $*.tmp -l $*.lst $<
++ objcopy -B i386 -I binary -O elf32-i386 \
++ --redefine-sym _binary_$*_tmp_start=$*_start \
++ --redefine-sym _binary_$*_tmp_end=$*_end \
++ --strip-symbol _binary_$*_tmp_size \
++ $*.tmp $@
++
++tidy dist:
++ rm -f *.o *.lo *.a *.lst *.elf .*.d *.tmp
++
++clean: tidy
++ rm -f *.lnx
++
++spotless: clean
++ rm -f *.lss *.c32 *.com
++ rm -f *~ \#*
++
++install:
++
++-include .*.d
+diff --git a/com32/gfxboot/gfxboot.c b/com32/gfxboot/gfxboot.c
+new file mode 100644
+index 0000000..e1b865a
+--- /dev/null
++++ b/com32/gfxboot/gfxboot.c
+@@ -0,0 +1,806 @@
++/*
++ *
++ * gfxboot.c
++ *
++ * A com32 module to load gfxboot graphics.
++ *
++ * Copyright (c) 2009 Steffen Winterfeldt.
++ *
++ * 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, Inc., 53 Temple Place Ste 330, Boston MA
++ * 02111-1307, USA; either version 2 of the License, or (at your option) any
++ * later version; incorporated herein by reference.
++ *
++ */
++
++#include <stdio.h>
++#include <stdlib.h>
++#include <unistd.h>
++#include <string.h>
++#include <fcntl.h>
++#include <sys/types.h>
++#include <sys/stat.h>
++
++#include <syslinux/loadfile.h>
++#include <syslinux/config.h>
++#include <syslinux/linux.h>
++#include <syslinux/boot.h>
++#include <console.h>
++#include <com32.h>
++
++
++// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
++#define MAX_CONFIG_LINE_LEN 2048
++#define MAX_CMDLINE_LEN 2048
++
++// buffer for realmode callback
++// must be at least block size; can in theory be larger than 4k, but there's
++// not enough space left
++#define REALMODE_BUF_SIZE 4096
++
++// gfxboot working memory in MB
++#define GFX_MEMORY_SIZE 7
++
++// read chunk size for progress bar
++#define CHUNK_SIZE (64 << 10)
++
++// callback function numbers
++#define GFX_CB_INIT 0
++#define GFX_CB_DONE 1
++#define GFX_CB_INPUT 2
++#define GFX_CB_MENU_INIT 3
++#define GFX_CB_INFOBOX_INIT 4
++#define GFX_CB_INFOBOX_DONE 5
++#define GFX_CB_PROGRESS_INIT 6
++#define GFX_CB_PROGRESS_DONE 7
++#define GFX_CB_PROGRESS_UPDATE 8
++#define GFX_CB_PROGRESS_LIMIT 9 // unused
++#define GFX_CB_PASSWORD_INIT 10
++#define GFX_CB_PASSWORD_DONE 11
++
++// real mode code chunk, will be placed into bounce buffer
++extern void realmode_callback_start, realmode_callback_end;
++
++// gets in the way
++#undef linux
++
++
++// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
++// gfxboot config data (64 bytes)
++typedef struct __attribute__ ((packed)) {
++ uint8_t bootloader; // 0: boot loader type (0: lilo, 1: syslinux, 2: grub)
++ uint8_t sector_shift; // 1: sector shift
++ uint8_t media_type; // 2: media type (0: disk, 1: floppy, 2: cdrom)
++ uint8_t failsafe; // 3: turn on failsafe mode (bitmask)
++ // 0: SHIFT pressed
++ // 1: skip gfxboot
++ // 2: skip monitor detection
++ uint8_t sysconfig_size; // 4: size of sysconfig data
++ uint8_t boot_drive; // 5: BIOS boot drive
++ uint16_t callback; // 6: offset to callback handler
++ uint16_t bootloader_seg; // 8: code/data segment used by bootloader; must follow gfx_callback
++ uint16_t serial_port; // 10: syslinux initialized serial port from 'serial' option
++ uint32_t user_info_0; // 12: data for info box
++ uint32_t user_info_1; // 16: data for info box
++ uint32_t bios_mem_size; // 20: BIOS memory size (in bytes)
++ uint16_t xmem_0; // 24: extended mem area 0 (start:size in MB; 12:4 bits) - obsolete
++ uint16_t xmem_1; // 26: extended mem area 1 - obsolete
++ uint16_t xmem_2; // 28: extended mem area 2 - obsolete
++ uint16_t xmem_3; // 30: extended mem area 3 - obsolete
++ uint32_t file; // 32: start of gfx file
++ uint32_t archive_start; // 36: start of cpio archive
++ uint32_t archive_end; // 40: end of cpio archive
++ uint32_t mem0_start; // 44: low free memory start
++ uint32_t mem0_end; // 48: low free memory end
++ uint32_t xmem_start; // 52: extended mem start
++ uint32_t xmem_end; // 56: extended mem end
++ uint16_t features; // 60: feature flags returned by GFX_CB_INIT
++ // 0: GFX_CB_MENU_INIT accepts 32 bit addresses
++ // 1: knows about xmem_start, xmem_end
++ uint16_t reserved_1; // 62:
++} gfx_config_t;
++
++
++// gfxboot menu description (18 bytes)
++typedef struct __attribute__ ((packed)) {
++ uint16_t entries;
++ char *default_entry;
++ char *label_list;
++ uint16_t label_size;
++ char *arg_list;
++ uint16_t arg_size;
++} gfx_menu_t;
++
++
++// menu description
++typedef struct menu_s {
++ struct menu_s *next;
++ char *label;
++ char *kernel;
++ char *linux;
++ char *localboot;
++ char *initrd;
++ char *append;
++ char *ipappend;
++} menu_t;
++
++
++// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
++gfx_config_t gfx_config;
++gfx_menu_t gfx_menu;
++
++menu_t *menu;
++menu_t *menu_default;
++
++struct {
++ uint32_t jmp_table[12];
++ uint16_t code_seg;
++ char fname_buf[64];
++} gfx;
++
++void *lowmem_buf;
++unsigned lowmem_buf_size;
++
++int timeout;
++
++char cmdline[MAX_CMDLINE_LEN];
++
++void *save_buf;
++unsigned save_buf_size;
++
++
++// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
++void show_message(char *file);
++char *get_config_file_name(void);
++char *skip_spaces(char *s);
++char *skip_nonspaces(char *s);
++void chop_line(char *s);
++int read_config_file(void);
++unsigned magic_ok(unsigned char *buf, unsigned *code_size);
++unsigned find_file(unsigned char *buf, unsigned len, unsigned *gfx_file_start, unsigned *file_len, unsigned *code_size);
++int gfx_init(char *file);
++int gfx_menu_init(void);
++void gfx_done(void);
++int gfx_input(void);
++ssize_t save_read(int fd, void *buf, size_t size);
++void *load_one(char *file, ssize_t *file_size);
++void boot(void);
++void boot_entry(menu_t *menu_ptr, char *arg);
++
++
++// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
++int main(int argc, char **argv)
++{
++ int menu_index;
++ enum syslinux_filesystem syslinux_id;
++ com32sys_t r;
++
++ openconsole(&dev_stdcon_r, &dev_stdcon_w);
++
++ syslinux_id = syslinux_version()->filesystem;
++
++ lowmem_buf = __com32.cs_bounce;
++ lowmem_buf_size = __com32.cs_bounce_size;
++
++ r.eax.l = 0x0a; // Get Derivative-Specific Information
++ r.ecx.l = 9;
++ __intcall(0x22, &r, &r);
++ gfx_config.sector_shift = (uint8_t) r.ecx.l;
++ gfx_config.boot_drive = (uint8_t) r.edx.l;
++
++ if(syslinux_id == SYSLINUX_FS_PXELINUX) {
++ gfx_config.sector_shift = 11;
++ gfx_config.boot_drive = 0;
++ }
++
++ gfx_config.bootloader = 1;
++ gfx_config.sysconfig_size = sizeof gfx_config;
++ gfx_config.bootloader_seg = 0; // apparently not needed
++
++ save_buf_size = lowmem_buf_size;
++ save_buf = malloc(save_buf_size);
++
++ if(argc < 2) {
++ printf("Usage: gfxboot.c32 bootlogo_file [message_file]\n");
++ if(argc > 2) show_message(argv[2]);
++
++ return 0;
++ }
++
++ if(read_config_file()) {
++ printf("Error reading config file\n");
++ if(argc > 2) show_message(argv[2]);
++
++ return 0;
++ }
++
++ if(gfx_init(argv[1])) {
++ printf("Error setting up gfxboot\n");
++ if(argc > 2) show_message(argv[2]);
++
++ return 0;
++ }
++
++ gfx_menu_init();
++
++ for(;;) {
++ menu_index = gfx_input();
++
++ // abort gfx, return to text mode prompt
++ if(menu_index == -1) {
++ gfx_done();
++ break;
++ }
++
++ // does not return if it succeeds
++ boot();
++ }
++
++ if(argc > 2) show_message(argv[2]);
++
++ return 0;
++}
++
++
++// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
++void show_message(char *file)
++{
++ int c;
++ FILE *f;
++
++ if(!(f = fopen(file, "r"))) return;
++
++ while((c = getc(f)) != EOF) {
++ if(c < ' ' && c != '\n' && c != '\t') continue;
++ printf("%c", c);
++ }
++
++ fclose(f);
++}
++
++
++// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
++char *skip_spaces(char *s)
++{
++ while(*s && (*s == ' ' || *s == '\t')) s++;
++
++ return s;
++}
++
++
++// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
++char *skip_nonspaces(char *s)
++{
++ while(*s && *s != ' ' && *s != '\t') s++;
++
++ return s;
++}
++
++
++// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
++void chop_line(char *s)
++{
++ int i = strlen(s);
++
++ if(!i) return;
++
++ while(--i >= 0) {
++ if(s[i] == ' ' || s[i] == '\t' || s[i] == '\n') {
++ s[i] = 0;
++ }
++ else {
++ break;
++ }
++ }
++}
++
++
++// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
++// Read and parse syslinux config file.
++//
++// return:
++// 0: ok, 1: error
++//
++int read_config_file(void)
++{
++ FILE *f;
++ char *s, *t, buf[MAX_CONFIG_LINE_LEN];
++ unsigned u, menu_idx = 0, label_size = 0, append_size = 0;
++ menu_t *menu_ptr = NULL, **menu_next = &menu;
++
++ menu_default = calloc(1, sizeof *menu_default);
++
++ if(!(f = fopen(syslinux_config_file(), "r"))) return 1;
++
++ while((s = fgets(buf, sizeof buf, f))) {
++ chop_line(s);
++ s = skip_spaces(s);
++ if(!*s || *s == '#') continue;
++ t = skip_nonspaces(s);
++ if(*t) *t++ = 0;
++ t = skip_spaces(t);
++
++ if(!strcmp(s, "timeout")) {
++ timeout = atoi(t);
++ continue;
++ }
++
++ if(!strcmp(s, "default")) {
++ menu_default->label = strdup(t);
++ u = strlen(t);
++ if(u > label_size) label_size = u;
++ continue;
++ }
++
++ if(!strcmp(s, "label")) {
++ menu_ptr = *menu_next = calloc(1, sizeof **menu_next);
++ menu_next = &menu_ptr->next;
++ menu_idx++;
++ menu_ptr->label = strdup(t);
++ u = strlen(t);
++ if(u > label_size) label_size = u;
++ continue;
++ }
++
++ if(!strcmp(s, "kernel") && menu_ptr) {
++ menu_ptr->kernel = strdup(t);
++ continue;
++ }
++
++ if(!strcmp(s, "linux") && menu_ptr) {
++ menu_ptr->linux = strdup(t);
++ continue;
++ }
++
++ if(!strcmp(s, "localboot") && menu_ptr) {
++ menu_ptr->localboot = strdup(t);
++ continue;
++ }
++
++ if(!strcmp(s, "initrd") && menu_ptr) {
++ menu_ptr->initrd = strdup(t);
++ continue;
++ }
++
++ if(!strcmp(s, "append")) {
++ (menu_ptr ?: menu_default)->append = strdup(t);
++ u = strlen(t);
++ if(u > append_size) append_size = u;
++ continue;
++ }
++
++ if(!strcmp(s, "ipappend")) {
++ (menu_ptr ?: menu_default)->ipappend = strdup(t);
++ continue;
++ }
++ }
++
++ fclose(f);
++
++ // final '\0'
++ label_size++;
++ append_size++;
++
++ gfx_menu.entries = menu_idx;
++ gfx_menu.label_size = label_size;
++ gfx_menu.arg_size = append_size;
++
++ gfx_menu.default_entry = menu_default->label;
++ if(!gfx_menu.default_entry && menu) {
++ gfx_menu.default_entry = menu->label;
++ }
++
++ gfx_menu.label_list = calloc(menu_idx, label_size);
++ gfx_menu.arg_list = calloc(menu_idx, append_size);
++
++ for(u = 0, menu_ptr = menu; menu_ptr; menu_ptr = menu_ptr->next, u++) {
++ if(!menu_ptr->append) menu_ptr->append = menu_default->append;
++ if(!menu_ptr->ipappend) menu_ptr->ipappend = menu_default->ipappend;
++
++ if(menu_ptr->label) strcpy(gfx_menu.label_list + u * label_size, menu_ptr->label);
++ if(menu_ptr->append) strcpy(gfx_menu.arg_list + u * append_size, menu_ptr->append);
++ }
++
++ return 0;
++}
++
++
++// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
++// Check header and return code start offset.
++//
++unsigned magic_ok(unsigned char *buf, unsigned *code_size)
++{
++ if(
++ *(unsigned *) buf == 0x0b2d97f00 && // magic id
++ (buf[4] == 8) // version 8
++ ) {
++ *code_size = *(unsigned *) (buf + 12);
++ return *(unsigned *) (buf + 8);
++ }
++
++ return 0;
++}
++
++
++// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
++// Search cpio archive for gfx file.
++//
++unsigned find_file(unsigned char *buf, unsigned len, unsigned *gfx_file_start, unsigned *file_len, unsigned *code_size)
++{
++ unsigned i, fname_len, code_start = 0;
++
++ *gfx_file_start = 0;
++ *code_size = 0;
++
++ for(i = 0; i < len;) {
++ if((len - i) >= 0x1a && (buf[i] + (buf[i + 1] << 8)) == 0x71c7) {
++ fname_len = *(unsigned short *) (buf + i + 20);
++ *file_len = *(unsigned short *) (buf + i + 24) + (*(unsigned short *) (buf + i + 22) << 16);
++ i += 26 + fname_len;
++ i = ((i + 1) & ~1);
++ if((code_start = magic_ok(buf + i, code_size))) {
++ *gfx_file_start = i;
++ return code_start;
++ }
++ i += *file_len;
++ i = ((i + 1) & ~1);
++ }
++ else {
++ break;
++ }
++ }
++
++ return code_start;
++}
++
++
++// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
++// Initialize gfxboot code.
++//
++// return:
++// 0: ok, 1: error
++//
++int gfx_init(char *file)
++{
++ size_t archive_size = 0;
++ void *archive;
++ unsigned code_start, code_size, file_start, file_len, u;
++ com32sys_t r;
++ void *lowmem = lowmem_buf;
++ unsigned lowmem_size = lowmem_buf_size;
++
++ printf("Loading %s...\n", file);
++ if(loadfile(file, &archive, &archive_size)) return 1;
++
++ if(!archive_size) return 1;
++
++ // printf("%s: %d\n", file, archive_size);
++
++ gfx_config.archive_start = (uint32_t) archive;
++ gfx_config.archive_end = gfx_config.archive_start + archive_size;
++
++ // locate file inside cpio archive
++ if(!(code_start = find_file(archive, archive_size, &file_start, &file_len, &code_size))) {
++ printf("%s: invalid file format\n", file);
++ return 1;
++ }
++
++#if 0
++ printf(
++ "code_start = 0x%x, code_size = 0x%x\n"
++ "archive_start = 0x%x, archive size = 0x%x\n"
++ "file_start = 0x%x, file_len = 0x%x\n",
++ code_start, code_size,
++ gfx_config.archive_start, archive_size,
++ file_start, file_len
++ );
++#endif
++
++ gfx_config.file = gfx_config.archive_start + file_start;
++
++ u = &realmode_callback_end - &realmode_callback_start;
++ u = (u + REALMODE_BUF_SIZE + 0xf) & ~0xf;
++
++ if(u + code_size > lowmem_size) {
++ printf("bounce buffer too small: size %u, needed %u\n", lowmem_size, u + code_size);
++ return 1;
++ }
++
++ memcpy(lowmem + REALMODE_BUF_SIZE, &realmode_callback_start, &realmode_callback_end - &realmode_callback_start);
++
++ // fill in buffer size and location
++ *(uint16_t *) (lowmem + REALMODE_BUF_SIZE) = REALMODE_BUF_SIZE;
++ *(uint16_t *) (lowmem + REALMODE_BUF_SIZE + 2) = (uint32_t) lowmem >> 4;
++
++ gfx_config.bootloader_seg = ((uint32_t) lowmem + REALMODE_BUF_SIZE) >> 4;
++ gfx_config.callback = 4; // start address
++
++ lowmem += u;
++ lowmem_size -= u;
++
++ memcpy(lowmem, archive + file_start + code_start, code_size);
++
++ gfx_config.mem0_start = (uint32_t) lowmem + code_size;
++ gfx_config.mem0_end = (uint32_t) lowmem + lowmem_size;
++ // align a bit
++ gfx_config.mem0_start = (gfx_config.mem0_start + 0xf) & ~0xf;
++
++ gfx_config.xmem_start = (uint32_t) malloc(GFX_MEMORY_SIZE << 20);
++ if(gfx_config.xmem_start) {
++ gfx_config.xmem_end = gfx_config.xmem_start + (GFX_MEMORY_SIZE << 20);
++ }
++
++ // fake; not used anyway
++ gfx_config.bios_mem_size = 256 << 20;
++
++ gfx.code_seg = (uint32_t) lowmem >> 4;
++
++ for(u = 0; u < sizeof gfx.jmp_table / sizeof *gfx.jmp_table; u++) {
++ gfx.jmp_table[u] = (gfx.code_seg << 16) + *(uint16_t *) (lowmem + 2 * u);
++ }
++
++#if 0
++ for(u = 0; u < sizeof gfx.jmp_table / sizeof *gfx.jmp_table; u++) {
++ printf("%d: 0x%08x\n", u, gfx.jmp_table[u]);
++ }
++#endif
++
++ // we are ready to start
++
++ r.esi.l = (uint32_t) &gfx_config;
++ __farcall(gfx.code_seg, gfx.jmp_table[GFX_CB_INIT], &r, &r);
++
++ if((r.eflags.l & EFLAGS_CF)) {
++ printf("graphics initialization failed\n");
++
++ return 1;
++ }
++
++ if((gfx_config.features & 3) != 3) {
++ gfx_done();
++
++ printf("%s: boot graphics code too old, please use newer version\n", file);
++
++ return 1;
++ }
++
++
++ return 0;
++}
++
++
++// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
++int gfx_menu_init()
++{
++ com32sys_t r;
++
++ r.esi.l = (uint32_t) &gfx_menu;
++ __farcall(gfx.code_seg, gfx.jmp_table[GFX_CB_MENU_INIT], &r, &r);
++
++ return 0;
++}
++
++
++// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
++void gfx_done()
++{
++ com32sys_t r;
++
++ __farcall(gfx.code_seg, gfx.jmp_table[GFX_CB_DONE], &r, &r);
++}
++
++
++// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
++// Run gfxboot main loop.
++//
++// return:
++// boot menu index (-1: go to text mode prompt)
++//
++int gfx_input()
++{
++ com32sys_t r;
++
++ r.edi.l = (uint32_t) cmdline;
++ r.ecx.l = sizeof cmdline;
++ r.eax.l = timeout * 182 / 100;
++ timeout = 0; // use timeout only first time
++ __farcall(gfx.code_seg, gfx.jmp_table[GFX_CB_INPUT], &r, &r);
++ if((r.eflags.l & EFLAGS_CF)) r.eax.l = 1;
++
++ if(r.eax.l == 1) return -1;
++
++ return r.ebx.l;
++}
++
++
++// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
++// Like read(2) but preserve bounce buffer.
++//
++ssize_t save_read(int fd, void *buf, size_t size)
++{
++ ssize_t i;
++
++ memcpy(save_buf, lowmem_buf, save_buf_size);
++ i = read(fd, buf, size);
++ memcpy(lowmem_buf, save_buf, save_buf_size);
++
++ return i;
++}
++
++
++// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
++// Read file and update progress bar.
++//
++void *load_one(char *file, ssize_t *file_size)
++{
++ int fd;
++ void *buf = NULL;
++ struct stat sbuf;
++ ssize_t size = 0, cur, i;
++ com32sys_t r;
++
++ *file_size = 0;
++
++ if((fd = open(file, O_RDONLY)) == -1) {
++ printf("%s: file not found\n", file);
++ return buf;
++ }
++
++ if(!fstat(fd, &sbuf) && S_ISREG(sbuf.st_mode)) size = sbuf.st_size;
++
++ i = 0;
++
++ if(size) {
++ buf = malloc(size);
++ for(i = 1, cur = 0 ; cur < size && i > 0; cur += i) {
++ i = save_read(fd, buf + cur, CHUNK_SIZE);
++ r.eax.l = i >> gfx_config.sector_shift;
++ __farcall(gfx.code_seg, gfx.jmp_table[GFX_CB_PROGRESS_UPDATE], &r, &r);
++ }
++ }
++ else {
++ do {
++ buf = realloc(buf, size + CHUNK_SIZE);
++ i = save_read(fd, buf + size, CHUNK_SIZE);
++ size += i;
++ r.eax.l = i >> gfx_config.sector_shift;
++ __farcall(gfx.code_seg, gfx.jmp_table[GFX_CB_PROGRESS_UPDATE], &r, &r);
++ } while(i > 0);
++ }
++
++ close(fd);
++
++ if(i == -1) {
++ free(buf);
++ buf = NULL;
++ size = 0;
++ }
++
++ *file_size = size;
++
++ return buf;
++}
++
++
++// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
++// Locate menu entry and boot.
++//
++void boot()
++{
++ char *label, *arg, *s;
++ menu_t *menu_ptr;
++
++ label = skip_spaces(cmdline);
++ arg = skip_spaces(s = skip_nonspaces(label));
++ *s = 0;
++
++ for(menu_ptr = menu; menu_ptr; menu_ptr = menu_ptr->next) {
++ if(menu_ptr->label && !strcmp(menu_ptr->label, label)) break;
++ }
++
++ boot_entry(menu_ptr, arg);
++}
++
++
++// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
++// Load & run kernel.
++//
++// Returns only on error.
++//
++void boot_entry(menu_t *menu_ptr, char *arg)
++{
++ void *kernel, *initrd_buf;
++ ssize_t kernel_size = 0, initrd_size = 0;
++ struct initramfs *initrd = NULL;
++ char *file, *cmd_buf;
++ int fd;
++ struct stat sbuf;
++ com32sys_t r;
++ char *s, *s0, *t, *initrd_arg;
++
++ if(!menu_ptr) return;
++
++ if(menu_ptr->localboot) {
++ gfx_done();
++ syslinux_local_boot(atoi(arg));
++
++ return;
++ }
++
++ file = menu_ptr->kernel;
++ if(!file) file = menu_ptr->linux;
++ if(!file) return;
++
++ // first, load kernel
++
++ r.eax.l = 0; // kernel size in sectors
++
++ if((fd = open(file, O_RDONLY)) >= 0) {
++ if(!fstat(fd, &sbuf) && S_ISREG(sbuf.st_mode)) r.eax.l = sbuf.st_size >> gfx_config.sector_shift;
++ close(fd);
++ }
++
++ r.esi.l = (uint32_t) file;
++ __farcall(gfx.code_seg, gfx.jmp_table[GFX_CB_PROGRESS_INIT], &r, &r);
++
++ kernel = load_one(file, &kernel_size);
++
++ if(!kernel) {
++ gfx_done();
++ printf("%s: read error\n", file);
++ return;
++ }
++
++ if(kernel_size < 1024 || *(uint32_t *) (kernel + 0x202) != 0x53726448) {
++ // not a linux kernel
++ gfx_done();
++ asprintf(&cmd_buf, "%s %s", menu_ptr->label, arg);
++ syslinux_run_command(cmd_buf);
++ return;
++ }
++
++ // printf("kernel = %p, size = %d\n", kernel, kernel_size);
++
++ // parse cmdline for "initrd" option
++
++ initrd_arg = menu_ptr->initrd;
++
++ s = s0 = strdup(arg);
++
++ while(*s && strncmp(s, "initrd=", sizeof "initrd=" - 1)) {
++ s = skip_spaces(skip_nonspaces(s));
++ }
++
++ if(*s) {
++ s += sizeof "initrd=" - 1;
++ *skip_nonspaces(s) = 0;
++ initrd_arg = s;
++ }
++
++ if(initrd_arg) {
++ initrd = initramfs_init();
++
++ while((t = strsep(&s, ","))) {
++ initrd_buf = load_one(t, &initrd_size);
++
++ if(!initrd_buf) {
++ printf("%s: read error\n", t);
++ free(s0);
++ return;
++ }
++
++ initramfs_add_data(initrd, initrd_buf, initrd_size, initrd_size, 4);
++
++ // printf("initrd = %p, size = %d\n", initrd_buf, initrd_size);
++ }
++ }
++
++ free(s0);
++
++ __farcall(gfx.code_seg, gfx.jmp_table[GFX_CB_PROGRESS_DONE], &r, &r);
++
++ syslinux_boot_linux(kernel, kernel_size, initrd, arg);
++}
++
++
+diff --git a/com32/gfxboot/realmode_callback.asm b/com32/gfxboot/realmode_callback.asm
+new file mode 100644
+index 0000000..fb5461d
+--- /dev/null
++++ b/com32/gfxboot/realmode_callback.asm
+@@ -0,0 +1,190 @@
++ bits 16
++
++ section .text
++
++ ; must be filled in
++f_buf_size dw 0
++f_buf_seg dw 0
++
++
++; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
++gfx_cb:
++ push cs
++ pop ds
++
++ cmp al,cb_len
++ jae gfx_cb_80
++
++ movzx bx,al
++ add bx,bx
++ call word [bx+cb_table]
++ jmp gfx_cb_90
++
++gfx_cb_80:
++ mov al,0ffh
++gfx_cb_90:
++ retf
++
++
++; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
++; Return status info.
++;
++; return:
++; edx filename buffer (64 bytes)
++;
++cb_status:
++ mov edx,cs
++ shl edx,4
++ add edx,f_name
++ xor al,al
++ ret
++
++
++; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
++; Open file.
++;
++; return:
++; al 0: ok, 1: file not found
++; ecx file length (al = 0)
++;
++cb_fopen:
++ mov si,f_name
++ push ds
++ pop es
++ mov ax,6
++ int 22h
++ xchg edx,eax
++ mov al,1
++ jc cb_fopen_90
++ cmp cx,[f_buf_size]
++ ja cb_fopen_90
++ or cx,cx
++ jz cb_fopen_90
++ mov [f_block_size],cx
++ or edx,edx
++ jz cb_fopen_90
++ mov [f_handle],si
++ mov [f_size],edx
++ mov ecx,edx
++ mov ax,[f_buf_size]
++ cwd
++ div word [f_block_size]
++ mov [f_blocks],ax
++
++ xor al,al
++cb_fopen_90:
++ ret
++
++
++; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
++; Read next chunk.
++;
++; return:
++; edx buffer address (linear)
++; ecx data length (< 64k)
++;
++cb_fread:
++ xor ecx,ecx
++ mov si,[f_handle]
++ or si,si
++ jz cb_fread_80
++ mov cx,[f_blocks]
++ mov es,[f_buf_seg]
++ xor bx,bx
++ mov ax,7
++ int 22h
++ mov [f_handle],si
++ mov al,1
++ jc cb_fread_90
++cb_fread_80:
++ xor al,al
++cb_fread_90:
++ movzx edx,word [f_buf_seg]
++ shl edx,4
++ ret
++
++
++; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
++; Return current working directory.
++;
++; return:
++; edx filename
++;
++cb_getcwd:
++ mov ax,15h
++ int 22h
++ mov edx,es
++ shl edx,4
++ movzx ebx,bx
++ add edx,ebx
++ xor al,al
++ ret
++
++
++; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
++; Set current working directory.
++;
++cb_chdir:
++ mov bx,f_name
++ push ds
++ pop es
++ mov ax,25h
++ int 22h
++ xor al,al
++ ret
++
++
++; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
++; read sector
++;
++; edx sector
++;
++; return:
++; edx buffer (linear address)
++;
++; Note: does not return on error!
++;
++cb_readsector:
++ xor edi,edi
++ xor esi,esi
++ mov cx,1
++ mov es,[f_buf_seg]
++ xor bx,bx
++ mov ax,19h
++ int 22h
++ movzx edx,word [f_buf_seg]
++ shl edx,4
++ xor al,al
++ ret
++
++
++; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
++; Re-read fs structures.
++;
++cb_mount:
++ mov ax,26h
++ int 22h
++ setc al
++ ret
++
++
++; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
++;
++ align 2, db 0
++
++cb_table dw cb_status
++ dw cb_fopen
++ dw cb_fread
++ dw cb_getcwd
++ dw cb_chdir
++ dw cb_readsector
++ dw cb_mount
++cb_len equ ($-cb_table)/2
++
++f_handle dw 0
++f_block_size dw 0
++f_blocks dw 0
++f_size dd 0
++f_name times 64 db 0
++f_name_len equ $ - f_name
++
diff --git a/patches/grub-0.97.diff b/patches/grub-0.97.diff
new file mode 100644
index 0000000..6874b06
--- /dev/null
+++ b/patches/grub-0.97.diff
@@ -0,0 +1,1006 @@
+--- docs/grub.texi
++++ docs/grub.texi
+@@ -2118,6 +2118,7 @@
+ * default:: Set the default entry
+ * fallback:: Set the fallback entry
+ * hiddenmenu:: Hide the menu interface
++* gfxmenu:: Use graphical menu interface
+ * timeout:: Set the timeout
+ * title:: Start a menu entry
+ @end menu
+@@ -2150,6 +2151,15 @@
+ @end deffn
+
+
++@node gfxmenu
++@subsection gfxmenu
++
++@deffn Command gfxmenu file
++Use the graphical menu interface. The graphics data are taken from
++@var{file} and must be created using 'mkbootmsg' from the gfxboot package.
++@end deffn
++
++
+ @node hiddenmenu
+ @subsection hiddenmenu
+
+--- grub/asmstub.c
++++ grub/asmstub.c
+@@ -498,6 +498,32 @@
+ return 0;
+ }
+
++/* graphical menu functions . */
++int
++gfx_init (gfx_data_t *gfx_data)
++{
++ return 0;
++}
++
++int
++gfx_done (gfx_data_t *gfx_data)
++{
++ return 0;
++}
++
++int
++gfx_input (gfx_data_t *gfx_data, int *menu_entry)
++{
++ return 0;
++}
++
++int
++gfx_setup_menu (gfx_data_t *gfx_data)
++{
++ return 0;
++}
++
++
+ /* low-level timing info */
+ int
+ getrtsecs (void)
+--- stage2/asm.S
++++ stage2/asm.S
+@@ -1614,6 +1614,286 @@
+ popl %ebp
+ ret
+
++
++/*
++ * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
++ *
++ * graphical menu functions
++ *
++ */
++
++/*
++ * int gfx_init (gfx_data_t *gfx_data)
++ *
++ * init gfx things
++ *
++ * return vales:
++ * 0: ok
++ * 1: failed
++ * sets gfx_data->ok
++ */
++
++ENTRY(gfx_init)
++ pushl %ebp
++ movl %esp, %ebp
++
++ pushl %edi
++ pushl %esi
++ pushl %ebx
++
++ movl 8(%ebp),%edx
++ movl %edx,%edi
++ leal gfx_ofs_sys_cfg(%edx),%esi
++ andl $0xf,%edi
++ shrl $4,%edx
++
++ pushl %ebp
++
++ call EXT_C(prot_to_real)
++ .code16
++
++ pushw %ds
++ movw %dx,%ds
++
++ lcall *gfx_ofs_jmp_table + 4 * 0 (%di)
++
++ sbbl %ebx,%ebx
++ negl %ebx
++
++ popw %ds
++
++ DATA32 call EXT_C(real_to_prot)
++ .code32
++
++ popl %ebp
++
++ movl %ebx,%eax
++ xorl $1,%ebx
++ movl 8(%ebp),%edx
++ movl %ebx,gfx_ofs_ok(%edx)
++
++ popl %ebx
++ popl %esi
++ popl %edi
++
++ popl %ebp
++ ret
++
++
++/*
++ * int gfx_done (gfx_data_t *gfx_data)
++ *
++ * shut down gfx things
++ *
++ * return vales:
++ * always 0
++ * sets gfx_data->ok
++ */
++
++ENTRY(gfx_done)
++ pushl %ebp
++ movl %esp, %ebp
++
++ pushl %edi
++ pushl %esi
++ pushl %ebx
++
++ movl 8(%ebp),%edx
++ movl %edx,%ebx
++ andl $0xf,%ebx
++ shrl $4,%edx
++
++ pushl %ebp
++
++ call EXT_C(prot_to_real)
++ .code16
++
++ pushw %ds
++
++ movw %dx,%ds
++
++ lcall *gfx_ofs_jmp_table + 4 * 1 (%bx)
++
++ popw %ds
++
++ DATA32 call EXT_C(real_to_prot)
++ .code32
++
++ popl %ebp
++
++ xorl %eax,%eax
++ movl 8(%ebp),%edx
++ movl %eax,gfx_ofs_ok(%edx)
++
++ popl %ebx
++ popl %esi
++ popl %edi
++
++ popl %ebp
++ ret
++
++
++/*
++ * int gfx_input (gfx_data_t *gfx_data, int *menu_entry)
++ *
++ * let user enter a command line
++ *
++ * uses gfx_data->cmdline as buffer
++ *
++ * return values:
++ * 1: abort
++ * 2: boot
++ * menu_entry: selected entry
++ */
++
++ENTRY(gfx_input)
++ pushl %ebp
++ movl %esp, %ebp
++
++ pushl %edi
++ pushl %esi
++ pushl %ebx
++
++ movl 8(%ebp),%edx
++ movl %edx,%ebx
++ leal gfx_ofs_sys_cfg(%edx),%esi
++ andl $0xf,%ebx
++ shrl $4,%edx
++
++ pushl %ebp
++
++ call EXT_C(prot_to_real)
++ .code16
++
++ pushw %ds
++
++ movw %dx,%ds
++
++ movl gfx_ofs_cmdline(%bx),%edi
++ movl gfx_ofs_cmdline_len(%bx),%ecx
++ movl gfx_ofs_timeout(%bx),%eax
++ imull $18,%eax
++
++ lcall *gfx_ofs_jmp_table + 4 * 2 (%bx)
++
++ movl %eax,%ecx
++
++ popw %ds
++
++ DATA32 call EXT_C(real_to_prot)
++ .code32
++
++ popl %ebp
++
++ movl 12(%ebp),%edx
++ movl %ebx,(%edx)
++
++ movl %ecx,%eax
++
++ popl %ebx
++ popl %esi
++ popl %edi
++
++ popl %ebp
++ ret
++
++
++/*
++ * int gfx_setup_menu (gfx_data_t *gfx_data)
++ *
++ * draw boot menu
++ *
++ * return values:
++ * always 0
++ */
++
++/* menu entry descriptor */
++#define menu_entries 0
++#define menu_default 2 /* seg:ofs */
++#define menu_ent_list 6 /* seg:ofs */
++#define menu_ent_size 10
++#define menu_arg_list 12 /* seg:ofs */
++#define menu_arg_size 16
++#define sizeof_menu_desc 18
++
++ENTRY(gfx_setup_menu)
++ pushl %ebp
++ movl %esp, %ebp
++
++ pushl %edi
++ pushl %esi
++ pushl %ebx
++
++ movl 8(%ebp),%edx
++ movl %edx,%ebx
++ andl $0xf,%ebx
++ shrl $4,%edx
++
++ call EXT_C(prot_to_real)
++ .code16
++
++ pushw %ds
++
++ movw %dx,%ds
++ shll $4,%edx
++
++ subw $sizeof_menu_desc,%sp
++ movw %esp,%ebp
++
++ movl gfx_ofs_menu_entries(%bx),%eax
++ movw %ax,menu_entries(%bp)
++
++ movl gfx_ofs_menu_default_entry(%bx),%eax
++ subl %edx,%eax
++ movw %ax,menu_default(%bp)
++ movw %ds,menu_default+2(%bp)
++
++ movl gfx_ofs_menu_list(%bx),%eax
++ subl %edx,%eax
++ movw %ax,menu_ent_list(%bp)
++ movw %ds,menu_ent_list+2(%bp)
++
++ movl gfx_ofs_menu_entry_len(%bx),%eax
++ movw %ax,menu_ent_size(%bp)
++
++ movl gfx_ofs_args_list(%bx),%eax
++ subl %edx,%eax
++ movw %ax,menu_arg_list(%bp)
++ movw %ds,menu_arg_list+2(%bp)
++
++ movl gfx_ofs_args_entry_len(%bx),%eax
++ movw %ax,menu_arg_size(%bp)
++
++ movl %ss,%esi
++ shll $4,%esi
++ addl %ebp,%esi
++
++ lcall %ds: *gfx_ofs_jmp_table + 4 * 3 (%bx)
++
++ addw $sizeof_menu_desc,%sp
++
++ popw %ds
++
++ DATA32 call EXT_C(real_to_prot)
++ .code32
++
++ xorl %eax,%eax
++
++ popl %ebx
++ popl %esi
++ popl %edi
++
++ popl %ebp
++ ret
++
++
++/*
++ *
++ * end graphics stuff
++ *
++ * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
++ */
++
+
+ /*
+ * gateA20(int linear)
+--- stage2/builtins.c
++++ stage2/builtins.c
+@@ -63,6 +63,8 @@
+ int fallback_entries[MAX_FALLBACK_ENTRIES];
+ /* The number of current entry. */
+ int current_entryno;
++/* graphics file */
++char graphics_file[64];
+ /* The address for Multiboot command-line buffer. */
+ static char *mb_cmdline;
+ /* The password. */
+@@ -1351,6 +1353,26 @@
+ };
+
+
++/* graphics */
++static int
++gfxmenu_func (char *arg, int flags)
++{
++ memmove(graphics_file, arg, sizeof graphics_file - 1);
++ graphics_file[sizeof graphics_file - 1] = 0;
++
++ return 0;
++}
++
++static struct builtin builtin_gfxmenu =
++{
++ "gfxmenu",
++ gfxmenu_func,
++ BUILTIN_MENU | BUILTIN_HELP_LIST,
++ "gfxmenu FILE",
++ "Use the graphical menu from FILE."
++};
++
++
+ /* geometry */
+ static int
+ geometry_func (char *arg, int flags)
+@@ -4874,6 +4896,7 @@
+ &builtin_find,
+ &builtin_fstest,
+ &builtin_geometry,
++ &builtin_gfxmenu,
+ &builtin_halt,
+ &builtin_help,
+ &builtin_hiddenmenu,
+--- stage2/shared.h
++++ stage2/shared.h
+@@ -374,6 +374,22 @@
+ #endif /* WITHOUT_LIBC_STUBS */
+
+
++/* see typedef gfx_data_t below */
++#define gfx_ofs_ok 0x00
++#define gfx_ofs_code_seg 0x04
++#define gfx_ofs_jmp_table 0x08
++#define gfx_ofs_sys_cfg 0x38
++#define gfx_ofs_cmdline 0x6c
++#define gfx_ofs_cmdline_len 0x70
++#define gfx_ofs_menu_list 0x74
++#define gfx_ofs_menu_default_entry 0x78
++#define gfx_ofs_menu_entries 0x7c
++#define gfx_ofs_menu_entry_len 0x80
++#define gfx_ofs_args_list 0x84
++#define gfx_ofs_args_entry_len 0x88
++#define gfx_ofs_timeout 0x8c
++
++
+ #ifndef ASM_FILE
+ /*
+ * Below this should be ONLY defines and other constructs for C code.
+@@ -595,6 +611,38 @@
+ extern int default_entry;
+ extern int current_entryno;
+
++
++/*
++ * graphics menu stuff
++ *
++ * Note: gfx_data and all data referred to in it must lie within a 64k area.
++ */
++typedef struct {
++ unsigned ok; /* set while we're in graphics mode */
++ unsigned code_seg; /* code segment of binary graphics code */
++ unsigned jmp_table[12]; /* link to graphics functions */
++ unsigned char sys_cfg[52]; /* sys_cfg[0]: identifies boot loader (grub == 2) */
++ char *cmdline; /* command line returned by gfx_input() */
++ unsigned cmdline_len; /* length of the above */
++ char *menu_list; /* list of menu entries, each of fixed length (menu_entry_len) */
++ char *menu_default_entry; /* the default entry */
++ unsigned menu_entries; /* number of entries in menu_list */
++ unsigned menu_entry_len; /* one entry */
++ char *args_list; /* same structure as menu_list, menu_entries entries */
++ unsigned args_entry_len; /* one entry */
++ unsigned timeout; /* in seconds (0: no timeout) */
++} __attribute__ ((packed)) gfx_data_t;
++
++extern gfx_data_t *graphics_data;
++
++/* pointer to graphics image data */
++extern char graphics_file[64];
++
++int gfx_init(gfx_data_t *gfx_data);
++int gfx_done(gfx_data_t *gfx_data);
++int gfx_input(gfx_data_t *gfx_data, int *menu_entry);
++int gfx_setup_menu(gfx_data_t *gfx_data);
++
+ /* The constants for password types. */
+ typedef enum
+ {
+--- stage2/stage2.c
++++ stage2/stage2.c
+@@ -22,6 +22,8 @@
+
+ grub_jmp_buf restart_env;
+
++gfx_data_t *graphics_data;
++
+ #if defined(PRESET_MENU_STRING) || defined(SUPPORT_DISKLESS)
+
+ # if defined(PRESET_MENU_STRING)
+@@ -310,6 +312,12 @@
+
+ if (! auth && password)
+ {
++ if (*graphics_file)
++ {
++ printf ("\
++ WARNING: graphical menu doesn\'t work\
++ in conjunction with the password feature\n" );
++ }
+ printf ("\
+ Press enter to boot the selected OS or \'p\' to enter a\n\
+ password to unlock the next set of features.");
+@@ -753,6 +761,493 @@
+ }
+
+
++
++#if 0
++/* for debugging */
++static void hexdump(unsigned char *buf, unsigned len)
++{
++ int i, j = 0;
++ char s[17];
++ unsigned addr = (unsigned) buf;
++
++ s[16] = 0;
++ while(len--) {
++ i = buf[j];
++ i = i & 0xff;
++ s[j & 15] = (i >= 0x20 && i <= 0x7e) ? i : '.';
++ if(!(j & 15)) {
++ printf("%x ", j + addr);
++ }
++ if(!(j & 7) && (j & 15)) printf(" ");
++ /* stupid grub_printf */
++ printf("%x", (i >> 4) & 0x0f);
++ printf("%x ", i & 0x0f);
++ if(!(++j & 15)) {
++ printf(" %s\n", s);
++ }
++ }
++
++ if(j & 15) {
++ s[j & 15] = 0;
++ if(!(j & 8)) printf(" ");
++ i = 1 + 3 * (16 - (j & 15));
++ while(i--) printf(" ");
++ printf("%s\n", s);
++ }
++}
++#endif
++
++
++/* kernel + (grub-)module options */
++#define GFX_CMD_BUF_SIZE 512
++
++/* command line separator char */
++#define GFX_CMD_SEP 1
++
++/*
++ * Go through config entry and find kernel args, if any.
++ * Put things into buf and return it.
++ */
++static char *get_kernel_args(char *cfg, char *buf)
++{
++ int i, j;
++ char *s, *t = "", *p, *t2;
++
++ *(p = buf) = 0;
++
++ for(j = 0; ; j++) {
++ s = get_entry(cfg, j, 0);
++ if(!*s) break;
++ if(
++ (!memcmp(s, "kernel", 6) || !memcmp(s, "module", 6)) &&
++ (s[6] == ' ' || s[6] == '\t')
++ ) {
++ t = skip_to(0, s);
++ t2 = s[0] == 'm' ? strstr(t, "initrd") : NULL;
++ if(*t) t = skip_to(0, t);
++ if(t2 && t2 < t) break; /* module is likely a normal initrd -> skip */
++ i = strlen(t);
++ if(p - buf + i > GFX_CMD_BUF_SIZE - 2) break;
++ *p++ = GFX_CMD_SEP;
++ strcpy(p, t);
++ p += i;
++
++ continue;
++ }
++ }
++
++ if(*buf) buf++; /* skip initial separator char */
++
++ return buf;
++}
++
++
++/*
++ * Check header and return code start offset.
++ */
++static unsigned magic_ok(unsigned char *buf)
++{
++ if(
++ *(unsigned *) buf == 0x0b2d97f00 && /* magic id */
++ (buf[4] == 8) /* version 8 */
++ ) {
++ return *(unsigned *) (buf + 8);
++ }
++
++ return 0;
++}
++
++
++/*
++ * Search cpio archive for gfx file.
++ */
++static unsigned find_file(unsigned char *buf, unsigned len, unsigned *gfx_file_start, unsigned *file_len)
++{
++ unsigned i, fname_len, code_start = 0;
++
++ *gfx_file_start = 0;
++
++ for(i = 0; i < len;) {
++ if((len - i) >= 0x1a && (buf[i] + (buf[i + 1] << 8)) == 0x71c7) {
++ fname_len = *(unsigned short *) (buf + i + 20);
++ *file_len = *(unsigned short *) (buf + i + 24) + (*(unsigned short *) (buf + i + 22) << 16);
++ i += 26 + fname_len;
++ i = ((i + 1) & ~1);
++ if((code_start = magic_ok(buf + i))) {
++ *gfx_file_start = i;
++ return code_start;
++ }
++ i += *file_len;
++ i = ((i + 1) & ~1);
++ }
++ else {
++ break;
++ }
++ }
++
++ return code_start;
++}
++
++static inline unsigned char * stack_ptr(void)
++{
++ unsigned char * u;
++
++ asm("movl %%esp, %0" : "=r" (u));
++
++ return u;
++}
++
++static void sleep(int delay)
++{
++ int tick, last_tick = currticks();
++
++ delay *= 18;
++
++ while(delay--) {
++ while((tick = currticks()) == last_tick) { }
++ last_tick = tick;
++ }
++}
++
++static void wait_for_key()
++{
++ printf("Press a key to continue...");
++ getkey();
++ printf("\r \r");
++}
++
++
++/*
++ * Leave that much space on the heap. Everything else goes to the graphics
++ * functions.
++ *
++ * 0x2000 is _not_ enough
++ */
++#define MIN_HEAP_SIZE 0x4000
++#define MIN_GFX_FREE 0x1000
++
++#define SC_BOOTLOADER 0
++#define SC_FAILSAFE 3
++#define SC_SYSCONFIG_SIZE 4
++#define SC_BOOTLOADER_SEG 8
++#define SC_XMEM_0 24
++#define SC_XMEM_1 26
++#define SC_XMEM_2 28
++#define SC_XMEM_3 30
++#define SC_FILE 32
++#define SC_ARCHIVE_START 36
++#define SC_ARCHIVE_END 40
++#define SC_MEM0_START 44
++#define SC_MEM0_END 48
++
++/*
++ * Does normally not return.
++ */
++static void
++run_graphics_menu (char *menu_entries, char *config_entries, int num_entries,
++ char *heap, int entryno)
++{
++ unsigned char *buf, *buf_ext;
++ unsigned buf_size, buf_ext_size, code_start, file_start;
++ char *s, *t, *t2, *cfg, *new_config, *p;
++ char *saved_heap;
++ int i, j, max_len, gfx_file_size, verbose;
++ int selected_entry;
++ gfx_data_t *gfx_data;
++ char *cmd_buf;
++ unsigned mem0_start, mem0_end, file_len;
++
++ /*
++ * check gfx_data_t struct offsets for consistency; gcc will optimize away
++ * the whole block
++ */
++
++ /* dummy function to make ld fail */
++ {
++ extern void wrong_struct_size(void);
++ #define gfx_ofs_check(a) if(gfx_ofs_##a != (char *) &gfx_data->a - (char *) gfx_data) wrong_struct_size();
++ gfx_ofs_check(ok);
++ gfx_ofs_check(code_seg);
++ gfx_ofs_check(jmp_table);
++ gfx_ofs_check(sys_cfg);
++ gfx_ofs_check(cmdline);
++ gfx_ofs_check(cmdline_len);
++ gfx_ofs_check(menu_list);
++ gfx_ofs_check(menu_default_entry);
++ gfx_ofs_check(menu_entries);
++ gfx_ofs_check(menu_entry_len);
++ gfx_ofs_check(args_list);
++ gfx_ofs_check(args_entry_len);
++ gfx_ofs_check(timeout);
++ #undef gfx_ofs_check
++ }
++
++ if(!num_entries) return;
++
++ graphics_data = gfx_data = (gfx_data_t *) heap;
++ heap += sizeof *gfx_data;
++ memset(gfx_data, 0, sizeof *gfx_data);
++
++ gfx_data->sys_cfg[SC_BOOTLOADER] = 2; /* bootloader: grub */
++ gfx_data->sys_cfg[SC_SYSCONFIG_SIZE] = 52; /* config data size */
++ *(unsigned short *) (gfx_data->sys_cfg + SC_BOOTLOADER_SEG) = (unsigned) gfx_data >> 4; /* segment */
++ gfx_data->sys_cfg[SC_XMEM_0] = 0x21; /* 1MB @ 2MB */
++ gfx_data->sys_cfg[SC_XMEM_1] = 0x41; /* 1MB @ 4MB */
++ verbose = (*(unsigned char *) 0x417) & 3 ? 1 : 0; /* SHIFT pressed */
++ gfx_data->sys_cfg[SC_FAILSAFE] = verbose;
++
++ gfx_data->timeout = grub_timeout >= 0 ? grub_timeout : 0;
++
++
++ /* setup command line edit buffer */
++
++ gfx_data->cmdline_len = 256;
++
++ gfx_data->cmdline = heap;
++ heap += gfx_data->cmdline_len;
++ memset(gfx_data->cmdline, 0, gfx_data->cmdline_len);
++
++ cmd_buf = heap;
++ heap += GFX_CMD_BUF_SIZE;
++
++ /* setup menu entries */
++
++ for(i = max_len = 0; i < num_entries; i++) {
++ j = strlen(get_entry(menu_entries, i, 0));
++ if(j > max_len) max_len = j;
++ }
++
++ if(!max_len) return;
++
++ gfx_data->menu_entry_len = max_len + 1;
++ gfx_data->menu_entries = num_entries;
++
++ gfx_data->menu_list = heap;
++ heap += gfx_data->menu_entry_len * gfx_data->menu_entries;
++
++ memset(gfx_data->menu_list, 0, gfx_data->menu_entry_len * gfx_data->menu_entries);
++
++ for(i = 0; i < (int) gfx_data->menu_entries; i++) {
++ strcpy(gfx_data->menu_list + i * gfx_data->menu_entry_len, get_entry(menu_entries, i, 0));
++ }
++
++ gfx_data->menu_default_entry = gfx_data->menu_list + entryno * gfx_data->menu_entry_len;
++
++
++ /* setup list of kernel args */
++
++ for(i = max_len = 0; i < num_entries; i++) {
++ s = get_kernel_args(get_entry(config_entries, i, 1), cmd_buf);
++ j = strlen(s);
++ if(j > max_len) max_len = j;
++ }
++
++ gfx_data->args_entry_len = max_len + 1;
++
++ gfx_data->args_list = heap;
++ heap += gfx_data->args_entry_len * gfx_data->menu_entries;
++
++ memset(gfx_data->args_list, 0, gfx_data->args_entry_len * gfx_data->menu_entries);
++
++ for(i = 0; i < (int) gfx_data->menu_entries; i++) {
++ strcpy(gfx_data->args_list + i* gfx_data->args_entry_len, get_kernel_args(get_entry(config_entries, i, 1), cmd_buf));
++ }
++
++
++ /* go back here when we no longer need the graphics data */
++ saved_heap = heap;
++
++
++ /* get memory area to be used by graphics functions */
++
++ /* use 1MB starting at 2MB as file buffer */
++ buf_ext = (unsigned char *) (2 << 20);
++ buf_ext_size = 1 << 20;
++
++ /* must be 16-byte aligned */
++ buf = (unsigned char *) (((unsigned) heap + 0xf) & ~0xf);
++
++ buf_size = stack_ptr() - buf - MIN_HEAP_SIZE;
++ buf_size &= ~0xf;
++
++ mem0_start = (unsigned) buf;
++ mem0_end = mem0_start + buf_size;
++
++ if(verbose) {
++ printf("low memory 0x%x - 0x%x (%d bytes)\n", mem0_start, mem0_end, buf_size);
++ wait_for_key();
++ }
++
++ heap += buf_size;
++
++ /* read the file */
++
++ if(!grub_open(graphics_file)) {
++ printf("%s: file not found\n", graphics_file);
++ sleep(5);
++ heap = saved_heap;
++ return;
++ }
++
++ gfx_file_size = grub_read(buf_ext, buf_ext_size);
++
++ grub_close();
++
++ if(gfx_file_size <= 0) {
++ printf("%s: read error\n", graphics_file);
++ sleep(5);
++ heap = saved_heap;
++ return;
++ }
++
++ if(verbose) {
++ printf("%s: %d bytes (%d bytes left)\n", graphics_file, gfx_file_size, buf_ext_size - gfx_file_size);
++ wait_for_key();
++ }
++
++ /* locate file inside cpio archive */
++ if(!(code_start = find_file(buf_ext, gfx_file_size, &file_start, &file_len))) {
++ printf("%s: invalid file format\n", graphics_file);
++ sleep(5);
++ heap = saved_heap;
++ return;
++ }
++
++ if(verbose) {
++ printf("init: start 0x%x, len %d; code offset 0x%x\n", file_start, file_len, code_start);
++ wait_for_key();
++ }
++
++ if(file_len - code_start + MIN_GFX_FREE > buf_size) {
++ printf("not enough free memory: %d extra bytes need\n", file_len - code_start + MIN_GFX_FREE - buf_size);
++ sleep(5);
++ heap = saved_heap;
++ return;
++ }
++
++ memcpy((void *) buf, (void *) (buf_ext + file_start + code_start), file_len - code_start);
++
++ mem0_start += file_len - code_start;
++ mem0_start = (mem0_start + 3) & ~3; /* align */
++
++ /* init interface to graphics functions */
++
++ *(unsigned *) (gfx_data->sys_cfg + SC_FILE) = (unsigned) buf_ext + file_start;
++ *(unsigned *) (gfx_data->sys_cfg + SC_ARCHIVE_START) = (unsigned) buf_ext;
++ *(unsigned *) (gfx_data->sys_cfg + SC_ARCHIVE_END) = (unsigned) buf_ext + gfx_file_size;
++ *(unsigned *) (gfx_data->sys_cfg + SC_MEM0_START) = mem0_start;
++ *(unsigned *) (gfx_data->sys_cfg + SC_MEM0_END) = mem0_end;
++
++ gfx_data->code_seg = (unsigned) buf >> 4;
++
++ if(verbose) {
++ printf("init 0x%x, archive 0x%x - 0x%x, low mem 0x%x - 0x%x\ncode seg 0x%x\n",
++ (unsigned) buf_ext + file_start,
++ (unsigned) buf_ext, (unsigned) buf_ext + gfx_file_size,
++ mem0_start, mem0_end, gfx_data->code_seg
++ );
++ wait_for_key();
++ }
++
++ for(i = 0; (unsigned) i < sizeof gfx_data->jmp_table / sizeof *gfx_data->jmp_table; i++) {
++ gfx_data->jmp_table[i] = (gfx_data->code_seg << 16) + ((unsigned short *) buf)[i];
++ }
++
++ if(verbose) {
++ for(i = 0; i < 12; i++) {
++ printf("%d: 0x%x\n", i, gfx_data->jmp_table[i]);
++ }
++
++ for(i = 0; i < gfx_data->menu_entries; i++) {
++ printf("\"%s\" -- \"%s\"\n",
++ gfx_data->menu_list + i * gfx_data->menu_entry_len,
++ gfx_data->args_list + i * gfx_data->args_entry_len
++ );
++ }
++
++ printf("default: \"%s\"\n", gfx_data->menu_default_entry);
++ wait_for_key();
++ }
++
++ /* switch to graphics mode */
++
++ if(gfx_init(gfx_data)) {
++ printf("graphics initialization failed\n");
++ sleep(5);
++ heap = saved_heap;
++ return;
++ }
++
++ gfx_setup_menu(gfx_data);
++
++ i = gfx_input(gfx_data, &selected_entry);
++
++ /* ESC -> show text menu */
++ if(i == 1) {
++ gfx_done(gfx_data);
++ grub_timeout = -1;
++
++ heap = saved_heap;
++ return;
++ }
++
++ gfx_done(gfx_data);
++
++ heap = saved_heap; /* free most of the graphics data */
++
++ // printf("cmdline: >%s<, entry = %d\n", gfx_data->cmdline, selected_entry);
++
++ if(selected_entry < 0 || selected_entry > num_entries) return;
++
++
++ /* create new config with modified kernel option */
++
++ cfg = get_entry(config_entries, selected_entry, 1);
++
++ new_config = heap;
++
++ for(p = gfx_data->cmdline, i = 0; ; i++) {
++ s = get_entry(cfg, i, 0);
++ if(!*s) {
++ if(!i) *heap++ = 0;
++ *heap++ = 0;
++ break;
++ }
++ /* note: must match get_kernel_args() */
++ if(
++ (!memcmp(s, "kernel", 6) || !memcmp(s, "module", 6)) &&
++ (s[6] == ' ' || s[6] == '\t')
++ ) {
++ t = skip_to(0, s);
++ t2 = s[0] == 'm' ? strstr(t, "initrd") : NULL;
++ if(*t) t = skip_to(0, t);
++ if(t2 && t2 < t) { /* module is likely a normal initrd -> skip */
++ strcpy(heap, s);
++ heap += strlen(s) + 1;
++ continue;
++ }
++ memmove(heap, s, t - s);
++ heap += t - s;
++ *heap++ = ' ';
++ while(*p && *p != GFX_CMD_SEP) *heap++ = *p++;
++ *heap++ = 0;
++ if(*p == GFX_CMD_SEP) p++;
++ }
++ else {
++ strcpy(heap, s);
++ heap += strlen(s) + 1;
++ }
++ }
++
++ *heap++ = 0;
++
++ // hexdump(new_config, heap - new_config);
++ // getkey();
++
++ run_script(new_config, heap);
++}
++
++
+ static int
+ get_line_from_config (char *cmdline, int maxlen, int read_from_file)
+ {
+@@ -1062,9 +1557,12 @@
+ }
+ else
+ {
+- /* Run menu interface. */
+- run_menu (menu_entries, config_entries, num_entries,
+- menu_entries + menu_len, default_entry);
++ if (*graphics_file && !password && show_menu && grub_timeout)
++ {
++ run_graphics_menu(menu_entries, config_entries, num_entries,menu_entries + menu_len, default_entry);
++ }
++ /* Run menu interface. */
++ run_menu (menu_entries, config_entries, num_entries, menu_entries + menu_len, default_entry);
+ }
+ }
+ }
+--- stage2/stage2.c
++++ stage2/stage2.c
+@@ -1199,6 +1199,9 @@
+
+ if(selected_entry < 0 || selected_entry > num_entries) return;
+
++ /* for 'savedefault' */
++ current_entryno = selected_entry;
++
+
+ /* create new config with modified kernel option */
+
diff --git a/patches/lilo-22.7.diff b/patches/lilo-22.7.diff
new file mode 100644
index 0000000..a1bdc20
--- /dev/null
+++ b/patches/lilo-22.7.diff
@@ -0,0 +1,1133 @@
+--- Makefile
++++ Makefile
+@@ -330,15 +330,15 @@
+ first.s: first.S lilo.h version.h Makefile
+ $(CPP) $(PCONFIG) -DFIRST=0x199d1f05 -o first.s first.S
+
+-second.s: second.S read.S volume.S mapper.S biosdata.S shs3.S bdata.h lilo.h version.h \
++second.s: second.S gfxlogo.S read.S volume.S mapper.S biosdata.S shs3.S bdata.h lilo.h version.h \
+ graph.S menu.S strlen.S bitmap.S crt.S display4.S Makefile
+ $(CPP) $(PCONFIG) -DTEXT=0x8bd7820b second.S -o second.s
+
+-third.s: second.S read.S volume.S mapper.S biosdata.S shs3.S bdata.h lilo.h version.h \
++third.s: second.S gfxlogo.S read.S volume.S mapper.S biosdata.S shs3.S bdata.h lilo.h version.h \
+ graph.S menu.S strlen.S bitmap.S crt.S display4.S Makefile
+ $(CPP) $(PCONFIG) -DMENU=0x7920a7c2 second.S -o third.s
+
+-bitmap.s: second.S read.S volume.S mapper.S biosdata.S shs3.S bdata.h lilo.h version.h \
++bitmap.s: second.S gfxlogo.S read.S volume.S mapper.S biosdata.S shs3.S bdata.h lilo.h version.h \
+ graph.S menu.S strlen.S bitmap.S crt.S display4.S Makefile
+ $(CPP) $(PCONFIG) -DBITMAP=0xf54f8b9d second.S -o bitmap.s
+
+--- bsect.c
++++ bsect.c
+@@ -774,6 +774,7 @@
+ if (st.st_size > i)
+ die("%s is too big (> %d bytes)",message,i);
+ param2.msg_len = bitmap ? (st.st_size+15)/16 : st.st_size;
++ if(!bitmap) param2.msg_len = st.st_size > 0xffff ? 0xffff : st.st_size;
+ map_begin_section();
+ #ifndef LCF_UNIFY
+ map_add(&geo,0,((st.st_size)+SECTOR_SIZE-1)/SECTOR_SIZE);
+--- gfxlogo.S
++++ gfxlogo.S
+@@ -0,0 +1,764 @@
++; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
++;
++; gfx stuff
++;
++; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
++
++; != 0 -> everything is fine
++gfx_ok: .byte 0
++
++; we need it at some point
++gfx_tmp: .word 0
++
++; the memory area we are working with
++gfx_mem: .long 0 ; linear address
++
++; interface to loadable gfx extension (seg:ofs values)
++gfx_bc_jt: .long 0
++
++gfx_bc_init: .long 0
++gfx_bc_done: .long 0
++gfx_bc_input: .long 0
++gfx_bc_menu_init: .long 0
++gfx_bc_infobox_init: .long 0
++gfx_bc_infobox_done: .long 0
++gfx_bc_progress_init: .long 0
++gfx_bc_progress_done: .long 0
++gfx_bc_progress_update: .long 0
++gfx_bc_progress_limit: .long 0
++gfx_bc_password_init: .long 0
++gfx_bc_password_done: .long 0
++
++; system config data (52 bytes)
++gfx_sysconfig:
++gfx_bootloader: .byte 0
++gfx_sector_shift: .byte 0
++gfx_media_type: .byte 0
++gfx_failsafe: .byte 0
++gfx_sysconfig_size: .byte gfx_sysconfig_end-gfx_sysconfig
++gfx_boot_drive: .byte 0
++gfx_callback: .word 0
++gfx_bootloader_seg: .word 0
++gfx_reserved_1: .word 0
++gfx_user_info_0: .long 0
++gfx_user_info_1: .long 0
++gfx_bios_mem_size: .long 0
++gfx_xmem_0: .word 0x21 ; extended mem area 0 (start:size in MB; 12:4 bits)
++gfx_xmem_1: .word 0x41
++gfx_xmem_2: .word 0
++gfx_xmem_3: .word 0
++gfx_file: .long 0
++gfx_archive_start: .long 0
++gfx_archive_end: .long 0
++gfx_mem0_start: .long 0
++gfx_mem0_end: .long 0
++gfx_sysconfig_end:
++
++; menu entry descriptor
++menu_entries equ 0
++menu_default equ 2 ; seg:ofs
++menu_ent_list equ 6 ; seg:ofs
++menu_ent_size equ 10
++menu_arg_list equ 12 ; seg:ofs
++menu_arg_size equ 16
++sizeof_menu_desc equ 18
++
++menu_desc: .blkb sizeof_menu_desc
++
++; 64 dummy entries (all "")
++gfx_args_entry: .blkb 64
++
++gfx_password_buf: .blkb 32
++gfx_msg_wrong_image: .ascii "Could not find kernel image: "
++ .byte 0
++gfx_msg_wrong_password: .ascii "Sorry, incorrect password."
++ .byte 0
++
++; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
++;
++; I really have no idea how to get as86 to do this properly
++
++ macro farcall
++ .byte 0xff
++ .byte 0x1e
++ .word ?1
++ mend
++
++; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
++;
++gfx_get_sysconfig:
++ xor ax,ax
++ ret
++
++; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
++;
++gfx_set_sysconfig:
++ ret
++
++; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
++;
++; Initialize graphics code. Load and display graphics data.
++;
++; edi file length
++;
++; return: [gfx_ok] = 0/1
++;
++gfx_init:
++ push es
++
++ cld
++
++ mov byte gfx_ok,#0
++
++ ; no gfx if we use a serial line
++ cmp byte par2_port,#0
++ jnz near gfx_init_90
++
++ mov gfx_bootloader_seg,cs
++ mov gfx_archive_end,edi
++
++ ; define our memory area
++ ; gfx_mem _must_ be 16-byte aligned
++ mov dword gfx_mem,#0x10000
++ add edi,gfx_mem
++ add edi,#15 ; add space for alignment
++ mov gfx_mem0_start,edi
++ mov dword gfx_mem0_end,#0x80000
++
++ sub edi,gfx_mem0_end
++ neg edi
++ cmp edi,#0x1000 ; we need some minimum space
++ jc near gfx_init_80
++
++ ; align 4
++ mov eax,gfx_mem0_start
++ add eax,#3
++ and eax,#~3
++ mov gfx_mem0_start,eax
++
++ call find_file
++ or eax,eax
++ jz near gfx_init_80
++
++ push edi
++ push eax
++ add eax,edi
++ call align_it
++ pop eax
++ pop edi
++
++ sub edi,gfx_mem
++ mov ecx,gfx_archive_start
++ add edi,ecx
++ mov gfx_file,edi
++ add gfx_archive_end,ecx
++ add eax,edi
++ shr eax,4
++ mov gfx_bc_jt+2,ax
++
++ ; setup jump table
++ les bx,gfx_bc_jt
++
++ seg es
++ mov ax,(bx)
++ mov gfx_bc_init,ax
++ mov gfx_bc_init+2,es
++
++ seg es
++ mov ax,(bx+2)
++ mov gfx_bc_done,ax
++ mov gfx_bc_done+2,es
++
++ seg es
++ mov ax,(bx+4)
++ mov gfx_bc_input,ax
++ mov gfx_bc_input+2,es
++
++ seg es
++ mov ax,(bx+6)
++ mov gfx_bc_menu_init,ax
++ mov gfx_bc_menu_init+2,es
++
++ seg es
++ mov ax,(bx+8)
++ mov gfx_bc_infobox_init,ax
++ mov gfx_bc_infobox_init+2,es
++
++ seg es
++ mov ax,(bx+10)
++ mov gfx_bc_infobox_done,ax
++ mov gfx_bc_infobox_done+2,es
++
++ seg es
++ mov ax,(bx+12)
++ mov gfx_bc_progress_init,ax
++ mov gfx_bc_progress_init+2,es
++
++ seg es
++ mov ax,(bx+14)
++ mov gfx_bc_progress_done,ax
++ mov gfx_bc_progress_done+2,es
++
++ seg es
++ mov ax,(bx+16)
++ mov gfx_bc_progress_update,ax
++ mov gfx_bc_progress_update+2,es
++
++ seg es
++ mov ax,(bx+18)
++ mov gfx_bc_progress_limit,ax
++ mov gfx_bc_progress_limit+2,es
++
++ seg es
++ mov ax,(bx+20)
++ mov gfx_bc_password_init,ax
++ mov gfx_bc_password_init+2,es
++
++ seg es
++ mov ax,(bx+22)
++ mov gfx_bc_password_done,ax
++ mov gfx_bc_password_done+2,es
++
++ ; esi sysconfig data
++ .byte 0x66
++ mov si,ds ; mov esi,ds
++ shl esi,4
++ add esi,#gfx_sysconfig
++
++ farcall(gfx_bc_init)
++
++ jc gfx_init_80
++
++ mov byte gfx_ok,#1
++
++ jmp gfx_init_90
++
++gfx_init_80:
++ mov byte gfx_ok,#0
++gfx_init_90:
++ pop es
++ ret
++
++
++; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
++;
++; Back to text mode.
++;
++; return: [gfx_ok] = 0
++;
++gfx_done:
++ cmp byte gfx_ok,#0
++ jz gfx_done_90
++ farcall(gfx_bc_done)
++ mov byte gfx_ok,#0
++ call gfx_set_sysconfig
++gfx_done_90:
++ ret
++
++
++; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
++;
++gfx_input:
++ cmp byte gfx_ok,#0
++ jz gfx_input_90
++ call gfx_get_sysconfig
++
++ mov ax,#0xffff
++ xchg ax,par2_timeout
++
++ ; map 0xffff -> 0
++ add ax,#1
++ cmc
++ sbb ax,#0
++
++gfx_input_20:
++ .byte 0x66
++ mov di,ds ; mov edi,ds
++ shl edi,4
++ add edi,#cmdline
++ mov ecx,#CL_LENGTH
++ movzx eax,ax
++
++ ; edi buffer (0: no buffer)
++ ; ecx buffer size
++ ; eax timeout value (0: no timeout)
++
++ farcall(gfx_bc_input)
++
++ pushf
++ call gfx_set_sysconfig
++ popf
++ jnc gfx_input_50
++ mov ax,#1
++gfx_input_50:
++ cmp ax,#1
++ jz gfx_input_80
++
++ call find_boot_image
++ jnc gfx_input_90
++
++ .byte 0x66
++ mov cx,ds ; mov ecx,ds
++ shl ecx,4
++ lea esi,(ecx+gfx_msg_wrong_image)
++ lea edi,(ecx+cmdline)
++
++ mov al,#0
++ call gfx_infobox
++
++ xor ax,ax
++ jmp gfx_input_20
++gfx_input_80:
++ push ax
++ call gfx_done
++ pop ax
++gfx_input_90:
++ ret
++
++
++; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
++;
++gfx_setup_menu:
++ cmp byte gfx_ok,#0
++ jz gfx_setup_menu_90
++
++ mov si,#DESCR0
++ mov di,si
++ xor ax,ax
++ mov cx,#IMAGES
++gfx_setup_menu_20:
++ cmp byte (si),#0
++ jz gfx_setup_menu_30
++ inc ax
++ add si,#id_size
++ loop gfx_setup_menu_20
++gfx_setup_menu_30:
++ mov esi,#menu_desc
++
++ xor ah,ah
++ mov (si+menu_entries),ax
++
++ mov (si+menu_default),di
++ mov (si+menu_default+2),ds
++
++ mov (si+menu_ent_list),di
++ mov (si+menu_ent_list+2),ds
++ mov word (si+menu_ent_size),#id_size
++
++ mov word (si+menu_arg_list),#gfx_args_entry
++ mov (si+menu_arg_list+2),ds
++ mov word (si+menu_arg_size),#1
++
++ .byte 0x66
++ mov ax,ds ; mov eax,ds
++ shl eax,4
++ add esi,eax
++
++ farcall(gfx_bc_menu_init)
++gfx_setup_menu_90:
++ ret
++
++
++; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
++;
++gfx_infobox:
++ pushad
++ cmp byte gfx_ok,#0
++ jz gfx_infobox_90
++ farcall(gfx_bc_infobox_init)
++ xor edi,edi
++ xor eax,eax
++ farcall(gfx_bc_input)
++ farcall(gfx_bc_infobox_done)
++gfx_infobox_90:
++ popad
++ ret
++
++
++; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
++;
++gfx_progress_init:
++ pushad
++ cmp byte gfx_ok,#0
++ jz gfx_progress_init_90
++ movzx eax,ax
++ farcall(gfx_bc_progress_init)
++gfx_progress_init_90:
++ popad
++ ret
++
++
++; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
++;
++gfx_progress_done:
++ pushad
++ cmp byte gfx_ok,#0
++ jz gfx_progress_done_90
++ farcall(gfx_bc_progress_done)
++gfx_progress_done_90:
++ popad
++ ret
++
++
++; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
++;
++gfx_progress_update:
++ pushad
++ cmp byte gfx_ok,#0
++ jz gfx_progress_update_90
++ movzx eax,cx
++ farcall(gfx_bc_progress_update)
++gfx_progress_update_90:
++ popad
++ ret
++
++
++; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
++;
++gfx_progress_limit:
++ pushad
++ cmp byte gfx_ok,#0
++ jz gfx_progress_limit_90
++ movzx eax,ax
++ farcall(gfx_bc_progress_limit)
++gfx_progress_limit_90:
++ popad
++ ret
++
++
++; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
++;
++; ds:di image descr
++;
++gfx_password:
++ push es
++ pushad
++ cmp byte gfx_ok,#0
++ stc
++ jz gfx_password_90
++ push di
++ .byte 0x66
++ mov cx,ds ; mov ecx,ds
++ shl ecx,4
++ lea esi,(ecx+gfx_password_buf) ; not used
++ movzx edi,di
++ add edi,ecx
++ farcall(gfx_bc_password_init)
++ .byte 0x66
++ mov di,ds ; mov edi,ds
++ shl edi,4
++ add edi,#gfx_password_buf
++ mov ecx,#32
++ xor eax,eax
++ farcall(gfx_bc_input)
++ .byte 0x66
++ mov si,ds ; mov esi,ds
++ shl esi,4
++ add esi,#gfx_password_buf
++ farcall(gfx_bc_password_done)
++ pop di
++ call check_password
++ jnc gfx_password_90
++ .byte 0x66
++ mov si,ds ; mov esi,ds
++ shl esi,4
++ add esi,#gfx_msg_wrong_password
++ xor edi,edi
++ mov al,#0
++ farcall(gfx_bc_infobox_init)
++ xor edi,edi
++ xor eax,eax
++ farcall(gfx_bc_input)
++ farcall(gfx_bc_infobox_done)
++ stc
++gfx_password_90:
++ popad
++ pop es
++ ret
++
++
++; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
++;
++; Convert 32bit linear address to seg:ofs.
++;
++; dword [esp + 2]: linear address
++;
++; return:
++; dword [esp + 2]: seg:ofs
++;
++; Notes:
++; - changes no regs
++;
++gfx_l2so:
++ push eax
++ mov eax,(esp + 6)
++ shr eax,4
++ mov (esp + 8),ax
++ and word (esp + 6),#0xf
++ pop eax
++ ret
++
++; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
++;
++; locate the boot image
++;
++; return:
++; bx boot image index
++; CF error (image not found)
++;
++find_boot_image:
++ mov dx,#DESCR0
++ mov cx,#IMAGES
++
++ xor bx,bx
++
++find_boot_image_10:
++ mov si,dx
++ mov di,#cmdline
++find_boot_image_20:
++ mov al,(si)
++ or al,al
++ jz find_boot_image_60
++ cmp al,(di)
++ jnz find_boot_image_30
++ inc si
++ inc di
++ jmp find_boot_image_20
++find_boot_image_30:
++ inc bx
++ add dx,#id_size
++ cmp bx,cx
++ jb find_boot_image_10
++ ; not found, strip options for fancy error message
++
++ mov si,#cmdline
++ mov cx,#MAX_IMAGE_NAME+1
++find_boot_image_40:
++ cmp byte (si),#0x20+1
++ inc si
++ jb find_boot_image_50
++ loop find_boot_image_40
++find_boot_image_50:
++ mov byte (si-1),#0
++ jmp find_boot_image_80
++find_boot_image_60:
++ mov al,(di)
++ cmp al,#0x20
++ ja find_boot_image_30
++ imul bx,bx,#id_size
++ add bx,#DESCR0
++ jmp find_boot_image_90
++find_boot_image_80:
++ stc
++find_boot_image_90:
++ ret
++
++
++; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
++;
++; ds:di image descr
++;
++; CF = 0: password valid
++;
++check_password:
++#if defined(SHS_PASSWORDS)
++ mov bp,di
++ mov di,#gfx_password_buf
++ mov si,di
++ push ds
++ pop es
++ mov cx,#32 - 1
++ xor al,al
++ repne
++ scasb
++ sub cx,#32 - 1
++ not cx
++ mov bx,cx
++
++ push ss
++ pop es
++ mov cx,#32
++ sub sp,cx
++ mov di,sp
++ rep
++ movsb
++ mov si,sp
++
++ push bp
++
++ push bx ; length
++ push si ; ss:si password
++ call _shsInit
++ call _shsUpdate
++ call _shsFinal
++ pop si
++ pop bx
++
++ pop di
++
++ add di,#id_password_crc
++ mov si,#shs_digest
++ mov cx,#MAX_PW_CRC*4
++ push ds
++ pop es
++ repe
++ cmpsb
++ je check_pw_50
++ inc cx
++check_pw_50:
++ add sp,#32
++ pushad ; clear password buffer
++ mov di,#gfx_password_buf
++ mov cx,#32
++ xor al,al
++ rep
++ stosb
++ popad
++ cmp cx,#1
++ cmc
++#endif
++ ret
++
++
++; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
++;
++; locate graphics file
++;
++; return: eax: code offset (0 -> no file found)
++; edi: gfx file start
++;
++find_file:
++ mov edi,gfx_mem
++ push edi
++ call gfx_l2so
++ pop bx
++ pop es
++ call magic_ok
++ or eax,eax
++ jnz find_file_90
++
++ ; ok, maybe it's a cpio archive
++
++ ; note: edi must be properly aligned (2)!
++
++find_file_20:
++ mov ecx,gfx_mem0_start
++ sub ecx,#26 + 12 ; min cpio header + gfx header
++ cmp edi,ecx
++ jae find_file_90
++
++ push edi
++ call gfx_l2so
++ pop bx
++ pop es
++ seg es
++ cmp word (bx),#0x71c7
++ jnz find_file_90 ; no cpio record
++
++ seg es
++ movzx esi,word (bx+20) ; file name size
++
++ inc si
++ and si,#~1 ; align
++
++ seg es
++ mov ecx,(bx+22) ; data size
++ rol ecx,#16 ; get word order right
++
++ inc ecx
++ and ecx,#~1 ; align
++
++ add si,#26 ; skip header
++
++ add edi,esi
++ add bx,si
++ call magic_ok
++ or eax,eax
++ jnz find_file_90
++
++ add edi,ecx
++ jmp find_file_20
++
++find_file_90:
++ ret
++
++
++; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
++;
++; es:bx file start
++;
++; return: eax: offset to code entry
++;
++; Notes:
++; - changes no regs except eax
++;
++magic_ok:
++ xor eax,eax
++ seg es
++ cmp dword (bx),#0x0b2d97f00 ; header.magic_id
++ jnz magic_ok_90
++ ; version 8
++ seg es
++ cmp byte (bx+4),#8 ; header.version
++ jb magic_ok_90
++ seg es
++ cmp byte (bx+4),#8 ; header.version
++ ja magic_ok_90
++ seg es
++ mov eax,(bx+8)
++magic_ok_90:
++ ret
++
++
++; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
++;
++; eax address to be aligned
++;
++align_it:
++ push dword gfx_mem
++ pop dword gfx_archive_start
++ neg al
++ and eax,#0x0f
++ jz align_it_90
++ add gfx_archive_start,eax
++ mov esi,gfx_mem
++ mov ebx,gfx_mem0_start
++ sub ebx,esi
++ sub ebx,#0x0f
++ add esi,ebx
++ dec esi
++
++ std
++
++align_it_30:
++ or ebx,ebx
++ jz align_it_60
++ mov ecx,ebx
++ cmp ebx,#0x8000
++ jb align_it_40
++ mov ecx,#0x8000
++align_it_40:
++ push esi
++ sub ebx,ecx
++ sub (esp),ecx
++ push esi
++ call gfx_l2so
++ pop si
++ add si,#0x8000
++ sub word (esp),#0x8000 >> 4
++ pop es
++ mov di,si
++ add di,ax
++ seg es
++ rep
++ movsb
++ pop esi
++ jmp align_it_30
++align_it_60:
++
++ cld
++
++align_it_90:
++ ret
++
++
+--- lilo.h
++++ lilo.h
+@@ -331,7 +331,7 @@
+ #define DC_MAGIC 0xf4f2 /* magic number of default cmd. line sector */
+ #define DC_MGOFF 0x6b6d /* magic number for disabled line */
+
+-#define MAX_MESSAGE 65535 /* maximum message length */
++#define MAX_MESSAGE 8*64*1024-1 /* maximum message length (512k) */
+ #define MAX_MENU_TITLE 37 /* maximum MENU title length */
+
+ #define NEW_HDR_SIG "HdrS" /* setup header signature */
+--- second.S
++++ second.S
+@@ -618,7 +618,8 @@
+ seg es
+ cmp byte ptr (si),#0 ! empty ?
+ je iloop ! yes -> enter interactive mode
+- jmp niloop ! enter non-interactive mode
++niloop0:
++ br niloop ! enter non-interactive mode
+
+ ! No external parameters after timeout -> boot first image
+
+@@ -626,7 +627,7 @@
+ pop es
+ mov si,#DFLCMD+2 ! default command line ?
+ cmp byte ptr (si),#0
+- jne niloop ! yes -> use it
++ jne niloop0 ! yes -> use it
+ mov ax,nodfl ! no idea how to tell as86 to do jmp (addr) :-(
+ jmp ax ! fall through
+
+@@ -634,16 +635,23 @@
+ ! Command input processor
+
+ iloop:
+-#if defined(MENU) || defined(BITMAP)
++#ifdef BITMAP
+ call menu_setup
+ #endif
+
+ #ifndef BITMAP
++ cmp byte gfx_ok,#0
++ jnz iloop_gfx
++
++ ; load message before doing anything else
++ ; the graphics/text stuff is mixed in a rather messy way...
++
+ ;; BEG_FS
+ ;; SEG_FS ! message disabled ?
+ cmp word ptr par2_msg_len,#0 ;MSG_OFF+SSDIFF,#0
+ ;; END_FS
+- je nomsg ! yes -> skip this
++ ; _must_ be 'jz'!
++ jz iloop_20 ! yes -> skip this
+ call crlf
+ ;BEG_FS
+ ;SEG_FS ! load the message file
+@@ -657,13 +665,96 @@
+ call sread
+ call loadfile
+
++ ; es:bx points to file end
++ movzx ebx,bx
++ xor edi,edi
++ mov di,es
++ shl edi,4
++ add edi,ebx
++ sub edi,#SYSSEG * 16
++
++ ; edi -> message file size
++
+ xor bx,bx ! set the terminating NUL and disable further
+ ! messages
+ xchg bx,par2_msg_len ;MSG_OFF+SSDIFF
+
+ push #SYSSEG
+ pop ds
+- mov byte ptr (bx),#0
++
++ cmp word ptr 0,#0x71c7 ; cpio header
++ jz iloop_cpio
++
++ cmp dword ptr 0,#0x0b2d97f00 ; magic header
++ ; _must_ be 'jnz'!
++ jnz iloop_10
++
++iloop_cpio:
++
++ push cs
++ pop ds
++
++ ; graphical message
++
++ call gfx_init
++ push cs
++ pop es
++ cmp byte gfx_ok,#0
++ jz iloop
++ call gfx_setup_menu
++iloop_gfx:
++ push cs
++ pop es
++ call gfx_input
++ cmp ax,#1
++ jz iloop ; text mode
++ mov gfx_tmp,bx
++ jmp near scan_cmdline
++
++ ; normal text message
++iloop_10:
++ ; keep the zero flag!
++ mov byte ptr (bx),#0
++ push cs
++ pop ds
++
++iloop_20:
++#ifdef MENU
++ pushf
++ call menu_setup
++ popf
++#endif
++ jnz totxt
++
++ mov ax,showit
++ mov dx,showit+2
++ mov bx,ax
++ or bx,dx
++ jz iloop_40
++ push ds
++ shl dx,12
++ mov bx,ax
++ and bx,#0xf
++ shr ax,4
++ add ax,dx
++ add ax,#SYSSEG
++ mov ds,ax
++ call say
++ pop ds
++ xor ax,ax
++ mov showit,ax
++ mov showit+2,ax
++iloop_40:
++
++ jmp nomsg
++
++showit:
++ .long 0
++
++totxt:
++ push #SYSSEG
++ pop ds
++
+ xor bx,bx ! display the message
+ call say
+
+@@ -699,12 +790,6 @@
+ mov al,(si)
+ inc si
+ jmp gotinp ! go on
+-
+-tolist:
+-#ifdef BITMAP
+- call menu_exit
+-#endif
+- br list ! ...
+
+ kbinp:
+ mov cx,#brto ! get a key
+@@ -733,7 +818,7 @@
+ cmp al,#8 ! BS ?
+ je todelch ! yes -> erase one character
+ cmp al,#13 ! CR ?
+- je cr ! yes -> go on
++ je near cr ! yes -> go on
+ cmp al,#127 ! DEL ?
+ je todelch ! yes -> erase one character
+ ja input ! non-printable -> ignore it
+@@ -783,6 +868,11 @@
+
+ todelch:br delch ! ...
+ todell: br delline ! ...
++tolist:
++#ifdef BITMAP
++ call menu_exit
++#endif
++ br list ! ...
+
+ ! End of input, process the command line
+
+@@ -825,6 +915,8 @@
+ or al,al ! at end ?
+ jnz cpsav ! no -> go on
+
++
++scan_cmdline:
+ cmp bx,#cmdline ! empty line ?
+ je notrspc ! yes -> boot first image
+ cmp byte ptr (bx-1),#32 ! trailing space ?
+@@ -882,6 +974,11 @@
+ je chkvga ! yes -> look for options again
+ or al,al ! at end ?
+ jnz vsknb ! no -> go on
++
++ mov bx,gfx_tmp
++ cmp byte gfx_ok,#0
++ jnz near boot
++
+ call crlf ! write CR/LF
+ cmp di,#cmdline+1 ! empty line ?
+ emptyl: je bfirst ! yes -> boot first image
+@@ -1073,6 +1170,16 @@
+ ;; SEG_FS
+ mov word ptr par2_timeout,#0xffff ; cancel timeout
+ ;; END_FS
++
++ cmp byte gfx_ok,#0
++ jz dopw_nogfx
++ mov di,bx
++ call gfx_password
++ pop bx
++ jnc toboot
++ jmp near iloop
++dopw_nogfx:
++
+ mov bx,#msg_pw ! display a prompt
+ call say
+
+@@ -1450,7 +1557,9 @@
+
+ ! Boot the image BX points to
+
+-doboot: mov byte ptr prechr,#61 ! switch to equal sign
++doboot:
++ call gfx_done
++ mov byte ptr prechr,#61 ! switch to equal sign
+ push bx ! save image descr
+ mov bx,#msg_l ! say hi
+ call say
+@@ -3274,6 +3383,8 @@
+
+
+
++#include "gfxlogo.S"
++
+ #ifdef SHS_PASSWORDS
+ #include "shs3.S"
+ #endif
+@@ -3421,6 +3532,8 @@
+ jmp vgaput1
+ #else
+ xor cx,cx
++ mov bh,ch
++ mov bl,#10 ; bx: base (_not_ bl!)
+ mov ah,cl
+ test byte ptr (si),#0xff ! no value ?
+ jz vgaerr ! yes -> error
+@@ -3429,17 +3542,47 @@
+ jz vgaput ! yes -> done
+ cmp al,#32
+ je vgaput
+- cmp al,#48 ! is it a digit ? (0x30=48="0")
+- jb vgaerr ! no -> error
+- cmp al,#57 ! 57=0x39="9"
+- ja vgaerr
+- sub al,#48 ! cx = cx*10+al-'0'
+- imul cx,#10
++ cmp al,#0x61
++ jb vgadig_10
++ sub al,#0x20 ; upper case
++vgadig_10:
++ or cx,cx
++ jnz vgadig_20
++ cmp al,#0x58
++ jnz vgadig_20
++ mov bl,#16 ; hex
++ jmp vgadig
++vgadig_20:
++ cmp al,#0x3a
++ jb vgadig_30
++ sub al,#7
++vgadig_30:
++ sub al,#0x30
++ jb vgaerr ; not a digit
++ cmp al,bl
++ jae vgaerr ; larger than current base
++ imul cx,bx
+ add cx,ax
+ jnc vgadig ! next one
+ #endif
+
+-vgaerr: mov bx,#msg_v ! display an error message
++vgaerr:
++ mov bx,#msg_v ! display an error message
++ cmp byte gfx_ok,#0
++ jz vgaerr_txt
++ lea esi,(bx+1) ; skip initial NL
++ .byte 0x66
++ mov di,ds ; mov edi,ds
++ shl edi,4
++ add esi,edi
++ xor edi,edi
++ mov al,#0
++ mov msg_v1,al ; drop final NL
++ call gfx_infobox
++ mov byte msg_v1,#10 ; put it back
++ stc
++ ret
++vgaerr_txt:
+ call say
+ /* ifdef HIGHMEM_MAX */
+ xor eax,eax
+@@ -3583,8 +3726,10 @@
+ xor dx,dx
+ mov cx,#10 ! default radix is decimal
+ cmp byte ptr (si),#0x39
+- ja s2lbad ! error if > '9'
++ /* Those were changed to jna and previously */
++ ja s2lbad ! error if > '9'
+ cmp byte ptr (si),#0x30 ! == '0'?
++ /* Likewise */
+ jb s2lbad ! error if < '0'
+ jne s2lnext
+ inc si
+@@ -3890,8 +4035,8 @@
+
+ msg_v: .byte 10
+ .ascii "Valid vga values are ASK, NORMAL, EXTENDED or a "
+- .ascii "decimal number."
+- .byte 10,0
++ .ascii "number."
++msg_v1: .byte 10,0
+
+ msg_pks:.byte 10
+ .ascii "Invalid hexadecimal number. - Ignoring remaining items."
diff --git a/patches/syslinux-3.63.diff b/patches/syslinux-3.63.diff
new file mode 100644
index 0000000..ab9d657
--- /dev/null
+++ b/patches/syslinux-3.63.diff
@@ -0,0 +1,2352 @@
+--- Makefile
++++ Makefile
+@@ -146,15 +146,16 @@
+ $(PERL) genhash.pl < keywords > kwdhash.gen
+
+ # Standard rule for {isolinux,isolinux-debug}.bin
+-iso%.bin: iso%.asm kwdhash.gen version.gen
++iso%.bin: iso%.asm kwdhash.gen version.gen gfxboot.inc
+ $(NASM) $(NASMOPT) -f bin -DDATE_STR="'$(DATE)'" -DHEXDATE="$(HEXDATE)" \
+ -DMAP=$(@:.bin=.map) -l $(@:.bin=.lsr) -o $@ $<
+ $(PERL) lstadjust.pl $(@:.bin=.lsr) $(@:.bin=.map) $(@:.bin=.lst)
+ $(PERL) checksumiso.pl $@
+ $(PERL) checkov.pl $(@:.bin=.map) $@
++ -./add_crc $@
+
+ # Standard rule for {ldlinux,pxelinux,extlinux}.bin
+-%.bin: %.asm kwdhash.gen version.gen
++%.bin: %.asm kwdhash.gen version.gen gfxboot.inc
+ $(NASM) $(NASMOPT) -f bin -DDATE_STR="'$(DATE)'" -DHEXDATE="$(HEXDATE)" \
+ -DMAP=$(@:.bin=.map) -l $(@:.bin=.lsr) -o $@ $<
+ $(PERL) lstadjust.pl $(@:.bin=.lsr) $(@:.bin=.map) $(@:.bin=.lst)
+--- README.gfxboot
++++ README.gfxboot
+@@ -0,0 +1,41 @@
++Graphical boot screen
++=====================
++
++ syslinux/isolinux support a graphical boot screen using VESA BIOS
++ extensions. (Note that this is different from the graphics support that
++ syslinux comes with).
++
++ To use it you have to prepare a special boot logo file and put a line like
++ this into syslinux.cfg/isolinux.cfg:
++
++ gfxboot foo
++
++ The tools to create 'foo' from the above example are in the gfxboot
++ package. Please _do_ have a look at its documentation before you begin.
++
++ Note that you cannot use comboot images and graphics at the same time as
++ the memory used overlaps the comboot loading area.
++
++ If you encouter problems with the graphics code, hold down SHIFT while
++ syslinux starts. This will put it into 'failsafe' mode that lets you
++ interactively skip critical parts (like monitor detection).
++
++
++
++Spread boot images over several floppy disks (syslinux)
++=======================================================
++
++ You can prepare boot disks with a file system that spans several disks.
++ The 'mkbootdisk' script from the openSUSE project can create a suitable
++ file system.
++
++ syslinux will ask you for disk changes if necessary. To enable this
++ feature, use
++
++ disksize <size_of_single_disk_in_sectors>
++
++ Note that every individual disk must have at least a valid FAT boot
++ sector. syslinux will use the serial number stored there to verify that
++ the correct disk has been inserted (its last hex digit is the zero based
++ disk number).
++
+--- abort.inc
++++ abort.inc
+@@ -21,6 +21,11 @@
+ ; abort_check: let the user abort with <ESC> or <Ctrl-C>
+ ;
+ abort_check:
++%ifdef WITH_GFX
++ ; don't
++ cmp byte [gfx_ok],0
++ jnz .ret1
++%endif
+ call pollchar
+ jz .ret1
+ pusha
+--- add_crc
++++ add_crc
+@@ -0,0 +1,57 @@
++#! /usr/bin/perl
++
++use integer;
++
++# for isolinux
++#
++# Ensure checksum over (first sector - 64 bytes) [internally: FirstSecSum]
++# is 0 by adjusting the variable csum_value.
++#
++# Though isolinux checks the integrity with a separate checksum after all
++# data has been loaded this does not help with BIOSes that don't get even
++# the first 2k right. Hence this additional check. :-(
++#
++
++$file = shift;
++$list = "$file";
++$list =~ s/\.bin$/.lsr/;
++
++open F, $list;
++
++while(<F>) {
++ if(/^\s*\d+\s*(\S+)\s*0+\s*(\<\d+\>\s*)?csum_value\s*dd\s*0/) {
++ $ofs = hex $1;
++ }
++}
++close F;
++
++die "oops 1\n" unless $ofs && !($ofs & 3);
++
++# print "$ofs\n";
++
++open F, $file or die "$file: $!\n";
++
++$file_size = -s $file;
++
++sysread F, $buf, $file_size;
++
++close F;
++
++die "oops 1\n" if $file_size != length($buf);
++
++@x = unpack "V512", $buf;
++
++for ($sum = 0, $i = 16; $i < 512; $i++) {
++ $sum += $x[$i];
++}
++
++# printf "0x%08x\n", $sum;
++
++$ns = pack "V", -$sum;
++
++substr($buf, $ofs, 4) = $ns;
++
++open F, ">$file" or die "$file: $!\n";
++
++syswrite F, $buf;
++
+--- com32/libutil/get_key.c
++++ com32/libutil/get_key.c
+@@ -42,6 +42,10 @@
+ #include <getkey.h>
+ #include <libutil.h>
+
++#ifndef CLK_TCK
++# define CLK_TCK __sysconf(2)
++#endif
++
+ struct keycode {
+ int code;
+ int seqlen;
+--- com32/modules/cpuid.c
++++ com32/modules/cpuid.c
+@@ -254,7 +254,7 @@
+
+ static int smp_scan_config (unsigned long base, unsigned long length)
+ {
+- unsigned long *bp = base;
++ unsigned long *bp = (unsigned long *) base;
+ struct intel_mp_floating *mpf;
+
+ // printf("Scan SMP from %p for %ld bytes.\n", bp,length);
+--- com32/samples/keytest.c
++++ com32/samples/keytest.c
+@@ -25,6 +25,10 @@
+ #include <consoles.h> /* Provided by libutil */
+ #include <getkey.h>
+
++#ifndef CLK_TCK
++# define CLK_TCK __sysconf(2)
++#endif
++
+ static void cooked_keys(void)
+ {
+ int key;
+--- conio.inc
++++ conio.inc
+@@ -49,6 +49,14 @@
+ ; Assumes CS == DS == ES.
+ ;
+ get_msg_file:
++%ifdef WITH_GFX
++ ; don't load if graphics code is active
++ cmp byte [gfx_ok],0
++ jz .nogfx
++ jmp close
++.nogfx:
++%endif
++
+ mov byte [TextAttribute],07h ; Default grey on white
+ mov byte [DisplayMask],07h ; Display text in all modes
+ call msg_initvars
+--- doc/syslinux.txt
++++ doc/syslinux.txt
+@@ -230,7 +230,7 @@
+ Append nothing. APPEND with a single hyphen as argument in a
+ LABEL section can be used to override a global APPEND.
+
+- LOCALBOOT type [ISOLINUX, PXELINUX]
++ LOCALBOOT type [ISOLINUX, SYSLINUX, PXELINUX]
+ On PXELINUX, specifying "LOCALBOOT 0" instead of a "KERNEL"
+ option means invoking this particular label will cause a local
+ disk boot instead of booting a kernel.
+@@ -244,12 +244,11 @@
+ UNDI or PXE stacks are, don't worry -- you don't want them,
+ just specify 0.
+
+- On ISOLINUX, the "type" specifies the local drive number to
+- boot from; 0x00 is the primary floppy drive and 0x80 is the
+- primary hard drive. The special value -1 causes ISOLINUX to
+- report failure to the BIOS, which, on recent BIOSes, should
+- mean that the next boot device in the boot sequence should be
+- activated.
++ On ISOLINUX and SYSLINUX, the "type" specifies the local drive
++ number to boot from; 0x00 is the primary floppy drive and 0x80 is
++ the primary hard drive. The special value -1 causes them to report
++ failure to the BIOS, which, on recent BIOSes, should mean that the
++ next boot device in the boot sequence should be activated.
+
+ IMPLICIT flag_val
+ If flag_val is 0, do not load a kernel image unless it has been
+--- gfxboot.inc
++++ gfxboot.inc
+@@ -0,0 +1,1355 @@
++ section .text
++
++load_gfx_msg db 'Loading...', 0
++no_msg db 0
++
++; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
++; do a reboot
++;
++do_reboot:
++ call gfx_done
++ mov word [472h],1234h
++ push word 0ffffh
++ push word 0
++ retf
++ int 19h
++ jmp $
++
++
++; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
++;
++; wait for 'enter' key pressed
++;
++wait_for_key:
++ pusha
++wait_for_key_10:
++ mov ah,0
++ int 16h
++ cmp al,13
++ jnz wait_for_key_10
++ popa
++ ret
++
++
++; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
++; read gfx data
++get_gfx_file:
++ push si
++ mov si,load_gfx_msg
++ call cwritestr
++ pop si
++ mov word [gfx_mem_start_seg],first_free_seg
++ push ds
++ push 40h
++ pop ds
++ mov bx,[13h] ; mem size in kb
++ pop ds
++ shl bx,6
++ mov word [gfx_mem_end_seg],bx
++
++ call gfx_init ; Load and display file
++ cmp byte [gfx_ok],0
++ jz .done
++ mov si,crlf_msg
++ call cwritestr
++.done:
++ ret
++
++; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
++; read from disk, ask for disk change, if necessary
++
++; EAX - Linear sector number
++; ES:BX - Target buffer
++; BP - Sector count
++;
++; (es:)bx gets updated
++
++%if IS_SYSLINUX
++
++; %define DEBUG_XXX
++
++getlinsec3:
++%ifdef DEBUG_XXX
++ mov si,txt0
++ call dump_params
++ call crlf
++%endif
++ mov cx,[DiskSize]
++ or cx,cx
++ jz getlinsec3_70 ; unlimited
++
++ xor dx,dx
++ div cx
++ xchg ax,dx
++ movzx eax,ax
++
++ mov si,ax
++ add si,bp
++ sub si,cx
++ jbe getlinsec3_40
++ ; split
++
++ sub bp,si
++ movzx ebp,bp
++ push ebp
++ push eax
++ push si
++ push dx
++ call getlinsec3_40
++ pop dx
++ pop bp
++ pop eax
++ pop esi
++ add eax,esi
++ movzx ebp,bp
++ inc dl
++
++getlinsec3_40:
++ push es
++ pushad
++ call disk_change
++ popad
++ pop es
++ jc kaboom
++getlinsec3_70:
++%ifdef DEBUG_XXX
++ mov si,txt1
++ call dump_params
++ mov si,txt3
++ call cwritestr
++ push ax
++ mov al,[CurrentDisk]
++ call writehex2
++ pop ax
++ call crlf
++ pushad
++ call getchar
++ popad
++%endif
++ xor edx,edx
++ call getlinsec.jmp
++ ret
++
++%ifdef DEBUG_XXX
++dump_params:
++ push eax
++ call cwritestr
++ mov ax,es
++ call writehex4
++ mov si,txt2
++ call cwritestr
++ mov ax,bx
++ call writehex4
++ mov si,txt3
++ call cwritestr
++ pop eax
++ push eax
++ call writehex8
++ mov si,txt3
++ call cwritestr
++ mov ax,bp
++ call writehex4
++ pop eax
++ ret
++
++txt0 db 'linsec3: ', 0
++txt1 db 'linsec: ', 0
++txt2 db ':', 0
++txt3 db ', ', 0
++
++%include "writehex.inc"
++
++%endif
++
++
++; dl: new disk
++; return: CF = 1 -> error
++disk_change:
++ cmp dl,[CurrentDisk]
++ jz disk_change_90
++
++ mov [CurrentDisk],dl
++ movzx eax,dl
++ mov [gfx_user_info_0],eax
++ add dl,'1'
++ mov [boot_disk_msg0],dl
++ mov [boot_ndisk_msg0],dl
++
++disk_change_20:
++ cmp byte [gfx_ok],0
++ jz disk_change_40
++ mov al,3
++ xor di,di
++ xor si,si
++ call gfx_infobox
++
++ jmp disk_change_50
++disk_change_40:
++ mov si,clrln_msg
++ call cwritestr
++ mov si,boot_disk_msg
++ call cwritestr
++ call wait_for_key
++ mov si,clrln_msg
++ call cwritestr
++disk_change_50:
++ xor eax,eax
++ mov bp,1
++ push bx
++ xor edx,edx
++ call getlinsec.jmp
++ pop bx
++ mov eax,[es:bx+27h]
++ sub eax,[bsVolumeID]
++ movzx edx,byte [CurrentDisk]
++ cmp eax,edx
++ jz disk_change_90
++ mov [gfx_user_info_1],eax
++
++ cmp byte [gfx_ok],0
++ jz disk_change_70
++ mov al,4
++ xor di,di
++ xor si,si
++ call gfx_infobox
++
++ jmp disk_change_50
++disk_change_70:
++ mov si,clrln_msg
++ call cwritestr
++ mov si,boot_ndisk_msg
++ call cwritestr
++; mov eax,[es:bx+27h]
++; call writehex8
++ call wait_for_key
++ mov si,clrln_msg
++ call cwritestr
++
++ jmp disk_change_20
++disk_change_90:
++ ret
++
++
++bsVolumeID equ bsHugeSectors+7
++
++boot_disk_msg db 'Please insert boot disk '
++boot_disk_msg0 db '0; then press ENTER to continue.', 0
++boot_ndisk_msg db 'This is not boot disk '
++boot_ndisk_msg0 db '0. Press ENTER to continue.', 0
++
++DiskSize dw 0 ; unlimited
++CurrentDisk db 0 ; current disk
++
++clrln_msg db 0dh, ' ', 0dh, 0
++
++
++cache_metadata:
++ cmp word [DiskSize],0
++ jz cache_md_90
++
++ mov eax,[FAT]
++ mov ecx,[bxFATsecs]
++cache_md_20:
++ push eax
++ push cx
++ call getcachesector
++ pop cx
++ pop eax
++ inc eax
++ loop cache_md_20
++
++ mov eax,[RootDir]
++cache_md_40:
++ push eax
++ call getcachesector
++ pop eax
++ call nextsector
++ jnc cache_md_40
++
++cache_md_90:
++ ret
++
++
++%endif
++
++
++
++
++; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
++;
++; gfx stuff
++;
++; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
++
++; != 0 -> graphics active
++gfx_ok db 0
++gfx_cwritestr_old db 0c3h ; 'ret'
++gfx_cpio_swab db 0
++gfx_cd_changed db 0
++
++gfx_mem_start_seg dw 0
++gfx_mem_end_seg dw 0
++
++ align 4, db 0
++; the memory area we are working with
++gfx_mem dd 0 ; linear address
++
++gfx_save_area1 dd 0 ; 64k
++gfx_save_area1_used db 0 ; != 0 if area1 is in use
++
++; interface to loadable gfx extension (seg:ofs values)
++gfx_bc_jt dd 0
++
++gfx_bc_init dd 0
++gfx_bc_done dd 0
++gfx_bc_input dd 0
++gfx_bc_menu_init dd 0
++gfx_bc_infobox_init dd 0
++gfx_bc_infobox_done dd 0
++gfx_bc_progress_init dd 0
++gfx_bc_progress_done dd 0
++gfx_bc_progress_update dd 0
++gfx_bc_progress_limit dd 0
++gfx_bc_password_init dd 0
++gfx_bc_password_done dd 0
++
++; menu entry descriptor
++menu_entries equ 0
++menu_default equ 2 ; seg:ofs
++menu_ent_list equ 6 ; seg:ofs
++menu_ent_size equ 10
++menu_arg_list equ 12 ; seg:ofs
++menu_arg_size equ 16
++sizeof_menu_desc equ 18
++
++menu_desc zb sizeof_menu_desc
++
++; system config data (52 bytes)
++gfx_sysconfig equ $
++gfx_bootloader db 1 ; 0: boot loader type (0: lilo, 1: syslinux, 2: grub)
++gfx_sector_shift db SECTOR_SHIFT ; 1: sector shift
++gfx_media_type db 0 ; 2: media type (0: disk, 1: floppy, 2: cdrom)
++gfx_failsafe db 0 ; 3: turn on failsafe mode (bitmask)
++ ; 0: SHIFT pressed
++ ; 1: skip gfxboot
++ ; 2: skip monitor detection
++gfx_sysconfig_size db gfx_sysconfig_end-gfx_sysconfig ; 4: size of sysconfig data
++gfx_boot_drive db 0 ; 5: BIOS boot drive
++gfx_callback dw gfx_cb ; 6: offset to callback handler
++gfx_bootloader_seg dw 0 ; 8: code/data segment used by bootloader; must follow gfx_callback
++gfx_reserved_1 dw 0 ; 10
++gfx_user_info_0 dd 0 ; 12: data for info box
++gfx_user_info_1 dd 0 ; 16: data for info box
++gfx_bios_mem_size dd 0 ; 20: BIOS memory size (in bytes)
++gfx_xmem_0 dw 0 ; 24: extended mem area 0 (start:size in MB; 12:4 bits)
++gfx_xmem_1 dw 0 ; 26: extended mem area 1
++gfx_xmem_2 dw 0 ; 28: extended mem area 2
++gfx_xmem_3 dw 0 ; 20: extended mem area 3
++gfx_file dd 0 ; 32: start of gfx file
++gfx_archive_start dd 0 ; 36: start of cpio archive
++gfx_archive_end dd 0 ; 40: end of cpio archive
++gfx_mem0_start dd 0 ; 44: low free memory start
++gfx_mem0_end dd 0 ; 48: low free memory end
++gfx_sysconfig_end equ $
++
++gfx_slash db '/', 0
++
++%macro lin2segofs 3
++ push %1
++ call gfx_l2so
++ pop %3
++ pop %2
++%endmacro
++
++; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
++; must not change registers!
++;
++gfx_get_sysconfig:
++ push ax
++ mov al,[DriveNumber]
++ mov [gfx_boot_drive],al
++
++%if IS_ISOLINUX
++ mov ah,2
++%else
++ mov ah,0
++%endif
++ cmp al,80h ; floppy ?
++ jae gfx_get_sysconfig_20
++ mov ah,1
++gfx_get_sysconfig_20:
++
++ mov [gfx_media_type],ah
++
++ mov [gfx_bootloader_seg],cs
++
++ pop ax
++ ret
++
++; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
++;
++; Initialize graphics code. Load and display graphics data.
++;
++; dx:ax file length
++; si start cluster
++;
++; return: [gfx_ok] = 0/1
++;
++gfx_init:
++ push es
++
++ test byte [KbdFlags],3
++ jz gfx_init_10
++ mov byte [gfx_failsafe],1
++ call ask_user
++gfx_init_10:
++
++ test byte [gfx_failsafe],2
++ jnz gfx_init_80
++
++ call highmemsize
++
++ ; setup extended memory areas
++ pusha
++ mov eax,[HighMemSize]
++ mov [gfx_bios_mem_size],eax
++ mov eax,[VKernelEnd]
++ shr eax,20
++ cmp ax,16
++ jb gfx_init_40 ; at least 16MB
++ mov word [gfx_xmem_0],81h ; 1MB at 8MB
++ mov word [gfx_xmem_1],0a1h ; 1MB at 10MB
++
++ mov dword [gfx_save_area1],7f0000h ; 8MB-64k
++gfx_init_40:
++ popa
++
++ cld
++
++ movzx ebx,word [gfx_mem_start_seg]
++ shl ebx,4
++ jz gfx_init_80
++
++ movzx ecx,word [gfx_mem_end_seg]
++ shl ecx,4
++ jz gfx_init_80
++
++ cmp ecx,ebx
++ jbe gfx_init_80
++
++ ; define our memory area
++ ; gfx_mem _must_ be 16-byte aligned
++ mov dword [gfx_mem],ebx
++ mov dword [gfx_mem0_start],ebx
++ mov dword [gfx_mem0_end],ecx
++
++ call gfx_read_file
++ cmp byte [gfx_ok],0
++ jz near gfx_init_90
++
++ call gfx_get_sysconfig
++
++ ; align 4
++ mov eax,[gfx_mem0_start]
++ add eax,3
++ and eax,~3
++ mov [gfx_mem0_start],eax
++
++ ; setup jump table
++ les bx,[gfx_bc_jt]
++
++ mov ax,[es:bx]
++ mov [gfx_bc_init],ax
++ mov [gfx_bc_init+2],es
++
++ mov ax,[es:bx+2]
++ mov [gfx_bc_done],ax
++ mov [gfx_bc_done+2],es
++
++ mov ax,[es:bx+4]
++ mov [gfx_bc_input],ax
++ mov [gfx_bc_input+2],es
++
++ mov ax,[es:bx+6]
++ mov [gfx_bc_menu_init],ax
++ mov [gfx_bc_menu_init+2],es
++
++ mov ax,[es:bx+8]
++ mov [gfx_bc_infobox_init],ax
++ mov [gfx_bc_infobox_init+2],es
++
++ mov ax,[es:bx+10]
++ mov [gfx_bc_infobox_done],ax
++ mov [gfx_bc_infobox_done+2],es
++
++ mov ax,[es:bx+12]
++ mov [gfx_bc_progress_init],ax
++ mov [gfx_bc_progress_init+2],es
++
++ mov ax,[es:bx+14]
++ mov [gfx_bc_progress_done],ax
++ mov [gfx_bc_progress_done+2],es
++
++ mov ax,[es:bx+16]
++ mov [gfx_bc_progress_update],ax
++ mov [gfx_bc_progress_update+2],es
++
++ mov ax,[es:bx+18]
++ mov [gfx_bc_progress_limit],ax
++ mov [gfx_bc_progress_limit+2],es
++
++ mov ax,[es:bx+20]
++ mov [gfx_bc_password_init],ax
++ mov [gfx_bc_password_init+2],es
++
++ mov ax,[es:bx+22]
++ mov [gfx_bc_password_done],ax
++ mov [gfx_bc_password_done+2],es
++
++ mov esi,cs
++ shl esi,4
++ add esi,gfx_sysconfig
++ call far [gfx_bc_init]
++ jc gfx_init_80
++
++ mov byte [gfx_ok],1
++
++ ; turn off 'cwritestr'
++ mov al,[cwritestr]
++ cmp al,0c3h
++ jz gfx_init_90
++ mov [gfx_cwritestr_old],al
++ mov byte [cwritestr],0c3h
++
++ jmp gfx_init_90
++
++gfx_init_80:
++ mov byte [gfx_ok],0
++gfx_init_90:
++ pop es
++ ret
++
++
++; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
++;
++; Back to text mode.
++;
++; return: [gfx_ok] = 0
++;
++gfx_done:
++ push ax
++ cmp byte [gfx_ok],0
++ jz gfx_done_90
++ call far [gfx_bc_done]
++ mov byte [gfx_ok],0
++
++ ; reactivate 'cwritestr'
++ mov al,[gfx_cwritestr_old]
++ cmp al,0c3h
++ jz gfx_done_90
++ mov [cwritestr],al
++gfx_done_90:
++ pop ax
++ ret
++
++
++; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
++;
++gfx_input:
++ cmp byte [gfx_ok],0
++ jz gfx_input_90
++ cmp byte [gfx_save_area1_used],0
++ jz gfx_input_10
++ ; recover saved menu layout, gfxboot has references into it
++ pushad
++ mov esi,[gfx_save_area1]
++ mov edi,gfx_menu_seg << 4
++ mov ecx,10000h
++ call bcopy
++ popad
++gfx_input_10:
++ call far [gfx_bc_input]
++ jnc gfx_input_50
++ mov ax,1
++gfx_input_50:
++ cmp ax,1
++ jnz gfx_input_90
++ push ax
++ call gfx_done
++ pop ax
++gfx_input_90:
++ ret
++
++
++; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
++;
++; es:di string
++; return:
++; cx length
++gfx_strlen:
++ mov cx,-1
++ mov al,0
++ repnz scasb
++ not cx
++ dec cx
++ ret
++
++; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
++;
++gfx_setup_menu:
++ push es
++ cmp byte [gfx_ok],0
++ jz gfx_setup_menu_90
++
++ mov dword [menu_desc+menu_default],gfx_menu_seg << 16
++
++ push ds
++ pop es
++ mov si,default_cmd
++ mov di,trackbuf
++ call mangle_name
++ mov si,trackbuf
++ les di,[menu_desc+menu_default]
++ call unmangle_name
++ inc di
++
++ mov [menu_desc+menu_ent_list],di
++ mov [menu_desc+menu_ent_list+2],es
++ mov [menu_desc+menu_arg_list],di
++ mov [menu_desc+menu_arg_list+2],es
++
++ ; first, count entries and find max kernel and append length
++
++ push ds
++ pop es
++
++ mov esi,[HighMemSize]
++ jmp gfx_setup_menu_20
++gfx_setup_menu_10:
++ mov di,VKernelBuf
++ call rllunpack
++
++ ; count only non empty entries
++ cmp byte [VKernelBuf],0
++ jz gfx_setup_menu_20
++
++ inc word [menu_desc+menu_entries]
++
++ push esi
++ mov si,VKernelBuf
++ mov di,KernelCName
++ push di
++ call unmangle_name
++ pop di
++ pop esi
++
++ call gfx_strlen
++
++ cmp cx,[menu_desc+menu_ent_size]
++ jbe gfx_setup_menu_15
++ mov [menu_desc+menu_ent_size],cx
++gfx_setup_menu_15:
++ mov ax,[VKernelBuf+vk_appendlen]
++ cmp ax,[menu_desc+menu_arg_size]
++ jbe gfx_setup_menu_20
++ mov [menu_desc+menu_arg_size],ax
++
++gfx_setup_menu_20:
++ cmp esi,[VKernelEnd]
++ ja gfx_setup_menu_10
++
++ inc word [menu_desc+menu_ent_size]
++ mov ax,[menu_desc+menu_ent_size]
++ inc ax
++ add [menu_desc+menu_arg_size],ax
++
++ ; ...and again, but this time copy entries
++
++ mov word [menu_desc+menu_entries],0
++
++ mov esi,[HighMemSize]
++ jmp gfx_setup_menu_60
++gfx_setup_menu_30:
++ mov di,VKernelBuf
++ call rllunpack
++
++ ; count only non empty entries
++ cmp byte [VKernelBuf],0
++ jz gfx_setup_menu_60
++
++ mov di,[menu_desc+menu_arg_list]
++ add di,[menu_desc+menu_arg_size]
++ jc gfx_setup_menu_60
++
++ inc word [menu_desc+menu_entries]
++
++ push esi
++
++ mov si,VKernelBuf
++ mov di,KernelCName
++ push di
++ call unmangle_name
++ pop si
++ mov cx,[menu_desc+menu_ent_size]
++ les di,[menu_desc+menu_arg_list]
++
++ rep movsb
++
++ mov cx,[VKernelBuf+vk_appendlen]
++ mov si,VKernelBuf+vk_append
++ rep movsb
++ mov byte [es:di],0
++
++ pop esi
++
++ push ds
++ pop es
++
++ mov ax,[menu_desc+menu_arg_size]
++ add [menu_desc+menu_arg_list],ax
++
++gfx_setup_menu_60:
++ cmp esi,[VKernelEnd]
++ ja gfx_setup_menu_30
++
++ mov ax,[menu_desc+menu_ent_size]
++ mov bx,[menu_desc+menu_arg_size]
++ mov [menu_desc+menu_ent_size],bx
++ add ax,[menu_desc+menu_ent_list]
++ mov [menu_desc+menu_arg_list],ax
++
++ mov esi,ds
++ shl esi,4
++ add esi,menu_desc
++
++ call far [gfx_bc_menu_init]
++
++ ; save menu structure, gfxboot uses references into it
++ mov edi,[gfx_save_area1]
++ or edi,edi
++ jz gfx_setup_menu_90
++ mov esi,gfx_menu_seg << 4
++ mov ecx,10000h
++ call bcopy
++ mov byte [gfx_save_area1_used],1
++
++gfx_setup_menu_90:
++ pop es
++ ret
++
++
++; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
++;
++gfx_infobox:
++ pushad
++ cmp byte [gfx_ok],0
++ jz gfx_infobox_90
++ mov ecx,ds
++ shl ecx,4
++ movzx esi,si
++ movzx edi,di
++ or si,si
++ jz gfx_infobox_20
++ add esi,ecx
++gfx_infobox_20:
++ or di,di
++ jz gfx_infobox_30
++ add edi,ecx
++gfx_infobox_30:
++ call far [gfx_bc_infobox_init]
++ xor edi,edi
++ xor eax,eax
++ call far [gfx_bc_input]
++ call far [gfx_bc_infobox_done]
++gfx_infobox_90:
++ popad
++ ret
++
++
++; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
++;
++gfx_progress_init:
++ pushad
++ cmp byte [gfx_ok],0
++ jz gfx_progress_init_90
++ call far [gfx_bc_progress_init]
++gfx_progress_init_90:
++ popad
++ ret
++
++
++; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
++;
++gfx_progress_done:
++ pushad
++ cmp byte [gfx_ok],0
++ jz gfx_progress_done_90
++ call far [gfx_bc_progress_done]
++gfx_progress_done_90:
++ popad
++ ret
++
++
++; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
++;
++gfx_progress_update:
++ pushad
++ cmp byte [gfx_ok],0
++ jz gfx_progress_update_90
++ movzx eax,cx
++ call far [gfx_bc_progress_update]
++gfx_progress_update_90:
++ popad
++ ret
++
++
++; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
++;
++gfx_progress_limit:
++ pushad
++ cmp byte [gfx_ok],0
++ jz gfx_progress_limit_90
++ movzx eax,ax
++ movzx edx,dx
++ call far [gfx_bc_progress_limit]
++gfx_progress_limit_90:
++ popad
++ ret
++
++
++%if 0
++; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
++;
++gfx_password:
++ pushad
++ cmp byte [gfx_ok],0
++ stc
++ jz gfx_password_90
++ call far [gfx_bc_password_init]
++ mov edi,ds
++ shl edi,4
++ add edi,gfx_password_buf
++ mov ecx,32
++ xor eax,eax
++ call far [gfx_bc_input]
++ mov esi,ds
++ shl esi,4
++ add esi,gfx_password_buf
++ call far [gfx_bc_password_done]
++ jnc gfx_password_90
++ mov esi,ds
++ shl esi,4
++ add esi,gfx_msg_wrong_password
++ xor edi,edi
++ mov al,0
++ call far [gfx_bc_infobox_init]
++ xor edi,edi
++ xor eax,eax
++ call far [gfx_bc_input]
++ call far [gfx_bc_infobox_done]
++ stc
++gfx_password_90:
++ popad
++ ret
++%endif
++
++; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
++;
++; Read graphics data and store them at [gfx_mem].
++;
++; dx:ax file length
++; si start cluster
++;
++; return: [gfx_ok] = 0/1
++;
++gfx_read_file:
++ push es
++ mov byte [gfx_ok],0
++ mov edi,[gfx_mem]
++ push dx ; DX:AX = length of file
++ push ax
++ pop edx
++ mov [gfx_archive_end],edx
++ mov eax,[gfx_mem0_start]
++ lea eax,[eax+edx+0fh] ; add space for alignment
++ cmp eax,[gfx_mem0_end] ; max. length
++ ja near gfx_read_file_90
++ mov [gfx_mem0_start],eax
++
++gfx_read_file_10:
++ mov bx,trackbuf
++ mov cx,[BufSafe]
++ push edi
++ push edx
++ call getfssec
++ pop edx
++ pop edi
++ movzx ecx,word [BufSafeBytes]
++ cmp edx,ecx
++ jae gfx_read_file_20
++ mov ecx,edx
++gfx_read_file_20:
++ push ecx
++ push edi
++ push si ; Save current cluster
++ push es
++ mov si,trackbuf
++ push edi
++ call gfx_l2so
++ pop di
++ pop es
++ rep movsb
++ pop es
++ pop si
++ pop edi
++ pop ecx
++ add edi,ecx
++ sub edx,ecx
++ ja gfx_read_file_10
++
++ call find_file
++ or eax,eax
++ jz gfx_read_file_90
++ push edi
++ push eax
++ add eax,edi
++ call align_it
++ pop eax
++ pop edi
++ sub edi,[gfx_mem]
++ mov ecx,[gfx_archive_start]
++ add edi,ecx
++ mov [gfx_file],edi
++ add [gfx_archive_end],ecx
++ add eax,edi
++ shr eax,4
++ mov [gfx_bc_jt+2],ax
++
++ mov byte [gfx_ok],1
++
++gfx_read_file_90:
++ pop es
++ ret
++
++
++; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
++;
++; locate graphics file
++;
++; return: eax: code offset (0 -> no file found)
++; edi: gfx file start
++;
++find_file:
++ mov edi,[gfx_mem]
++ lin2segofs edi,es,bx
++ call magic_ok
++ or eax,eax
++ jnz find_file_90
++
++ ; ok, maybe it's a cpio archive
++
++ ; note: edi must be properly aligned (2)!
++
++find_file_20:
++ mov ecx,[gfx_mem0_start]
++ sub ecx,26 + 12 ; min cpio header + gfx header
++ cmp edi,ecx
++ jae find_file_90
++
++ lin2segofs edi,es,bx
++ cmp word [es:bx],71c7h
++ jz find_file_30 ; normal cpio record
++ cmp word [es:bx],0c771h ; maybe byte-swapped?
++ jnz find_file_90 ; no cpio record
++ mov byte [gfx_cpio_swab],1
++
++find_file_30:
++ mov ax,[es:bx+20] ; file name size
++ call cpio_swab
++ movzx esi,ax
++
++ inc si
++ and si,~1 ; align
++
++ mov eax,[es:bx+22] ; data size
++ call cpio_swab
++ rol eax,16 ; get word order right
++ call cpio_swab
++ mov ecx,eax
++
++ inc ecx
++ and ecx,byte ~1 ; align
++
++ add si,26 ; skip header
++
++ add edi,esi
++ add bx,si
++ call magic_ok
++ or eax,eax
++ jnz find_file_90
++
++ add edi,ecx
++ jmp find_file_20
++
++find_file_90:
++ ret
++
++
++; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
++;
++; byte-swap cpio data if appropriate
++;
++; ax: word to swap
++;
++; return: ax: swapped if [gfx_cpio_swab], otherwise same as input
++;
++cpio_swab:
++ cmp byte [gfx_cpio_swab],0
++ jz cpio_swab_90
++ xchg ah,al
++
++cpio_swab_90:
++ ret
++
++
++; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
++;
++; es:bx file start
++;
++; return: eax: offset to code entry
++;
++; Notes:
++; - changes no regs except eax
++;
++magic_ok:
++ xor eax,eax
++ cmp dword [es:bx],0b2d97f00h ; header.magic_id
++ jnz magic_ok_90
++ cmp byte [es:bx+4],8 ; header.version
++ jnz magic_ok_90
++ mov eax,[es:bx+8]
++magic_ok_90:
++ ret
++
++
++; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
++;
++; eax address to be aligned
++;
++align_it:
++ push dword [gfx_mem]
++ pop dword [gfx_archive_start]
++ neg al
++ and eax,byte 0fh
++ jz align_it_90
++ add [gfx_archive_start],eax
++ mov esi,[gfx_mem]
++ mov ebx,[gfx_mem0_start]
++ sub ebx,esi
++ sub ebx,byte 0fh
++ add esi,ebx
++ dec esi
++
++ std
++
++align_it_30:
++ or ebx,ebx
++ jz align_it_60
++ mov ecx,ebx
++ cmp ebx,8000h
++ jb align_it_40
++ mov ecx,8000h
++align_it_40:
++ push esi
++ sub ebx,ecx
++ sub [esp],ecx
++ push esi
++ call gfx_l2so
++ pop si
++ add si,8000h
++ sub word [esp],(8000h >> 4)
++ pop es
++ mov di,si
++ add di,ax
++ es rep movsb
++ pop esi
++ jmp align_it_30
++align_it_60:
++
++ cld
++
++align_it_90:
++ ret
++
++
++; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
++;
++; Ask user whether to continue.
++;
++; don't change regs
++;
++ask_user:
++ pushad
++
++ mov si,failsafe_msg_0
++ call cwritestr
++
++ mov dx,2
++ mov si,failsafe_msg_1
++ call ask_question
++
++ test byte [gfx_failsafe],2
++ jnz ask_user_90
++
++ mov dx,4
++ mov si,failsafe_msg_2
++ call ask_question
++
++ask_user_90:
++
++ popad
++ ret
++
++
++; si: text
++; dh: 'yes'-mask
++; dl: 'no'-mask
++ask_question:
++ push dx
++ call cwritestr
++ mov si,failsafe_msg_q
++ call cwritestr
++ pop dx
++
++ask_question_20:
++ push dx
++ mov ah,0
++ int 16h
++ pop dx
++
++ cmp al,13
++ jnz ask_question_30
++ mov al,'y'
++ask_question_30:
++ or al,20h ; force lower case
++
++ cmp al,'y'
++ jz ask_question_40
++ cmp al,'n'
++ jnz ask_question_20
++ or byte [gfx_failsafe],dl
++ jmp ask_question_50
++ask_question_40:
++ or byte [gfx_failsafe],dh
++ask_question_50:
++
++ mov si,failsafe_key
++ mov [si],al
++ call cwritestr
++
++ ret
++
++failsafe_msg_q db ' (y/n)? y', 8, 0
++
++failsafe_msg_0 db 13, 10, 10, 10, 0
++failsafe_msg_1 db 'Load boot graphics', 0
++failsafe_msg_2 db 'Detect display size', 0
++
++failsafe_key db 0, 13, 10, 0
++
++
++; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
++;
++; Convert 32bit linear address to seg:ofs.
++;
++; dword [esp + 2]: linear address
++;
++; return:
++; dword [esp + 2]: seg:ofs
++;
++; Notes:
++; - changes no regs
++;
++gfx_l2so:
++ push eax
++ mov eax,[esp + 6]
++ shr eax,4
++ mov [esp + 8],ax
++ and word [esp + 6],byte 0fh
++ pop eax
++ ret
++
++
++; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
++;
++cb_table dw cb_status
++ dw cb_fopen
++ dw cb_fread
++ dw cb_getcwd
++ dw cb_chdir
++ dw cb_readsector
++cb_len equ ($-cb_table)/2
++
++f_handle dw 0
++f_size dd 0
++fname_buf times 64 db 0
++fname_buf_len equ $ - fname_buf
++
++
++gfx_cb:
++ push cs
++ pop ds
++
++ cmp al,cb_len
++ jae gfx_cb_80
++
++ movzx bx,al
++ add bx,bx
++ call word [bx+cb_table]
++ jmp gfx_cb_90
++
++gfx_cb_80:
++ mov al,0ffh
++gfx_cb_90:
++ retf
++
++
++; Return status info.
++;
++; return:
++; edx filename buffer (64 bytes)
++;
++cb_status:
++ mov edx,cs
++ shl edx,4
++ add edx,fname_buf
++
++ xor al,al
++ ret
++
++; Open file.
++;
++; return:
++; al 0: ok, 1: file not found
++; ecx file length (al = 0)
++;
++cb_fopen:
++ mov si,fname_buf
++ mov di,VGAFileMBuf ; we just need some space
++ push ds
++ pop es
++ push di
++ call mangle_name
++ pop di
++ call searchdir
++ xchg ax,bx
++ mov al,1
++ jz cb_fopen_90
++ mov [f_handle],si
++ mov cx,dx
++ shl ecx,16
++ mov cx,bx
++ mov [f_size],ecx
++cb_fopen_80:
++ xor al,al
++cb_fopen_90:
++ ret
++
++
++; Read next chunk.
++;
++; return:
++; edx buffer address (linear)
++; ecx data length (< 64k)
++;
++cb_fread:
++ cmp dword [f_size],0
++ jz cb_fread_80
++ push cs
++ pop es
++ mov bx,trackbuf
++ mov cx,[BufSafe]
++ mov si,[f_handle]
++ call getfssec
++ mov [f_handle],si
++ mov ecx,[f_size]
++ movzx edx,word [BufSafeBytes]
++ cmp ecx,edx
++ jbe cb_fread_50
++ mov ecx,edx
++cb_fread_50:
++ sub [f_size],ecx
++ mov edx,cs
++ shl edx,4
++ add edx,trackbuf
++
++cb_fread_80:
++ xor al,al
++cb_fread_90:
++ ret
++
++
++; Return current working directory.
++;
++; return:
++; edx filename
++;
++cb_getcwd:
++ mov edx,cs
++ shl edx,4
++%if IS_ISOLINUX
++ add edx,isolinux_dir
++%else
++ add edx,gfx_slash
++%endif
++ xor al,al
++ ret
++
++
++; Set current working directory.
++;
++cb_chdir:
++%if IS_ISOLINUX
++
++ push cs
++ pop es
++ mov si,fname_buf
++ mov di,isolinux_dir
++cb_chdir_20:
++ lodsb
++ stosb
++ or al,al
++ jz cb_chdir_60
++ cmp di,config_name - 1
++ jb cb_chdir_20
++ xor al,al
++ stosb
++cb_chdir_60:
++ call get_fs_structures
++
++%endif
++ xor al,al
++ ret
++
++
++; read sector
++;
++; edx sector
++;
++; return:
++; edx buffer (linear address)
++;
++; Note: does not return on error!
++;
++cb_readsector:
++ mov eax,edx
++ push ds
++ pop es
++ mov bx,trackbuf
++ call getonesec
++ mov edx,ds
++ shl edx,4
++ add edx,trackbuf
++ xor al,al
++ ret
++
+--- isolinux.asm
++++ isolinux.asm
+@@ -19,6 +19,10 @@
+ ; ****************************************************************************
+
+ %define IS_ISOLINUX 1
++
++%define WITH_GFX 1
++; %define DEBUG_DISKIO
++
+ %include "head.inc"
+
+ ;
+@@ -70,6 +74,8 @@
+ real_mode_seg equ 2000h
+ xfer_buf_seg equ 1000h ; Bounce buffer for I/O to high mem
+ comboot_seg equ real_mode_seg ; COMBOOT image loading zone
++gfx_menu_seg equ 3000h ; temporary storage to setup menu
++first_free_seg equ 4000h ; end of isolinux used memory
+
+ ;
+ ; File structure. This holds the information for each currently open file.
+@@ -259,6 +265,21 @@
+ mov [FirstSecSum],edi
+
+ mov [DriveNumber],dl
++
++ ; check whether the BIOS did load us correctly
++ cmp dl,80h ; some BIOSes try to do floppy emulation...
++ jb bios_err
++ cmp dword [FirstSecSum], byte 0
++ jz bios_ok
++bios_err:
++ mov si,broken_bios_msg
++ call writemsg
++ jmp short $
++broken_bios_msg db 13, 10, 'Cannot boot from this CD. Please try a BIOS update.', 13, 10, 0
++ align 4
++csum_value dd 0
++bios_ok:
++
+ %ifdef DEBUG_MESSAGES
+ mov si,startup_msg
+ call writemsg
+@@ -283,6 +304,9 @@
+ ; Other nonzero fields
+ inc word [dsp_sectors]
+
++%if 0
++ ; Some BIOSes don't like that call.
++
+ ; Now figure out what we're actually doing
+ ; Note: use passed-in DL value rather than 7Fh because
+ ; at least some BIOSes will get the wrong value otherwise
+@@ -303,6 +327,8 @@
+ call crlf
+ %endif
+
++%endif
++
+ found_drive:
+ ; Alright, we have found the drive. Now, try to find the
+ ; boot file itself. If we have a boot info table, life is
+@@ -427,6 +453,9 @@
+ %endif
+ jmp all_read ; Jump to main code
+
++%if 0
++ ; doesn't work anyway, see above
++
+ ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+ ;; Start of BrokenAwardHack --- 10-nov-2002 Knut_Petersen@t-online.de
+ ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+@@ -618,6 +647,7 @@
+ mov si,trysbm_msg
+ call writemsg
+ jmp .found_drive ; Pray that this works...
++%endif
+
+ fatal_error:
+ mov si,nothing_msg
+@@ -694,10 +724,17 @@
+ ;
+ getlinsec:
+ mov si,dapa ; Load up the DAPA
+- mov [si+4],bx
+- mov bx,es
+- mov [si+6],bx
+ mov [si+8],eax
++ ; seems that some BIOSes have problems if the target
++ ; segment is 0 (don't ask); to avoid this, we normalize
++ ; the buffer address here
++ ; -> seen on Acer TravelMate C102Ti
++ mov [si+4],bx
++ and word [si+4],0fh
++ mov ax,es
++ shr bx,4
++ add ax,bx
++ mov [si+6],ax
+ .loop:
+ push bp ; Sectors left
+ cmp bp,[MaxTransfer]
+@@ -724,15 +761,78 @@
+ ; INT 13h with retry
+ xint13: mov byte [RetryCount],retry_count
+ .try: pushad
++%ifdef DEBUG_DISKIO
++ pushad
++ mov cx,16
++.zap:
++ lodsb
++ call writehex2
++ mov al,' '
++ call writechr
++ loop .zap
++ mov ah,0
++ int 16h
++ popad
++%endif
++ ; seen buggy bios that overwrites buffer address on error...
++ push dword [dapa + 4]
+ call int13
++ pop dword [dapa + 4]
++%ifdef DEBUG_DISKIO
++ pushad
++ pushf
++ push ax
++ mov al,':'
++ call writechr
++ mov al,' '
++ call writechr
++ pop ax
++ sbb al,al
++ call writehex4
++ call crlf
++ mov ah,0
++ int 16h
++ popf
++ popad
++%endif
+ jc .error
++.noerror:
+ add sp,byte 8*4 ; Clean up stack
+ ret
+ .error:
++ or ah,ah
++ jz .noerror
+ mov [DiskError],ah ; Save error code
+ popad
+ mov [DiskSys],ax ; Save system call number
+- dec byte [RetryCount]
++
++%if 0
++ ; eject currently not supported - doesn't work anyway with
++ ; most BIOSes
++
++ test byte [gfx_user_note],1
++ jz .noeject
++ cmp byte [RetryCount],4
++ ja .noeject
++ cmp byte [DiskError],0aah ; drive not ready
++ jnz .noeject
++ ; might have been cdrom eject, wait a bit
++ cmp byte [gfx_ok],0
++ jz .noeject
++ push si
++ push di
++ push ax
++ mov si,err_not_ready
++ xor di,di
++ mov al,0
++ call gfx_infobox
++ pop ax
++ pop di
++ pop si
++%endif
++.noeject:
++
++ dec byte [RetryCount]
+ jz .real_error
+ push ax
+ mov al,[RetryCount]
+@@ -774,6 +874,17 @@
+ ;
+ kaboom:
+ RESET_STACK_AND_SEGS AX
++
++ cmp byte [gfx_ok],0
++ jz .nogfx
++ mov si,err_failed_gfx
++ xor di,di
++ mov al,1
++ call gfx_infobox
++ call gfx_done
++ call do_reboot
++.nogfx:
++
+ mov si,err_bootfailed
+ call cwritestr
+ call getchar
+@@ -825,6 +936,9 @@
+ crlf_msg db CR, LF
+ null_msg db 0
+
++err_failed_gfx db 'Error reading boot CD.', 0
++err_not_ready db 'CDROM drive not ready.', 0
++
+ alignb 4, db 0
+ MaxTransfer dw 32 ; Max sectors per transfer
+
+@@ -882,6 +996,9 @@
+ ; (which will be at 16 only for a single-session disk!); from the PVD
+ ; we should be able to find the rest of what we need to know.
+ ;
++ call get_fs_structures
++ jmp get_fs_struct_done
++
+ get_fs_structures:
+ mov eax,[bi_pvd]
+ mov bx,trackbuf
+@@ -907,10 +1024,15 @@
+ ; Look for an isolinux directory, and if found,
+ ; make it the current directory instead of the root
+ ; directory.
++
++ cmp byte [gfx_ok],0 ; don't look at both
++ jnz .gfx
++
+ mov di,boot_dir ; Search for /boot/isolinux
+ mov al,02h
+ call searchdir_iso
+ jnz .found_dir
++.gfx:
+ mov di,isolinux_dir
+ mov al,02h ; Search for /isolinux
+ call searchdir_iso
+@@ -931,6 +1053,9 @@
+ call crlf
+ %endif
+ .no_isolinux_dir:
++ ret
++
++get_fs_struct_done:
+
+ ;
+ ; Locate the configuration file
+@@ -1096,6 +1221,9 @@
+ ; 0xFFFF in case we should execute INT 18h ("next device.")
+ ;
+ local_boot:
++%ifdef WITH_GFX
++ call gfx_done
++%endif
+ call vgaclearmode
+ lss sp,[cs:Stack] ; Restore stack pointer
+ xor dx,dx
+@@ -1113,7 +1241,7 @@
+ xor dh,dh
+ push dx
+ xor ax,ax ; Reset drive
+- call xint13
++ int 13h ; we don't care about errors here...
+ mov ax,0201h ; Read one sector
+ mov cx,0001h ; C/H/S = 0/0/1 (first sector)
+ mov bx,trackbuf
+@@ -1488,6 +1616,9 @@
+ %include "rawcon.inc" ; Console I/O w/o using the console functions
+ %include "adv.inc" ; Auxillary Data Vector
+
++%include "gfxboot.inc" ; add gfx things
++
++
+ ; -----------------------------------------------------------------------------
+ ; Begin data section
+ ; -----------------------------------------------------------------------------
+@@ -1499,6 +1630,7 @@
+ default_len equ ($-default_str)
+ boot_dir db '/boot' ; /boot/isolinux
+ isolinux_dir db '/isolinux', 0
++zb 64
+ config_name db 'isolinux.cfg', 0
+ err_disk_image db 'Cannot load disk image (invalid file)?', CR, LF, 0
+
+--- keywords
++++ keywords
+@@ -42,3 +42,5 @@
+ f10
+ f11
+ f12
++gfxboot
++disksize
+--- keywords.inc
++++ keywords.inc
+@@ -90,8 +90,15 @@
+ %if IS_PXELINUX
+ keyword ipappend, pc_ipappend
+ %endif
+-%if IS_PXELINUX || IS_ISOLINUX
++%if IS_PXELINUX || IS_ISOLINUX || IS_SYSLINUX
+ keyword localboot, pc_localboot
+ %endif
+
++%ifdef WITH_GFX
++ keyword gfxboot, pc_filecmd, get_gfx_file
++%if IS_SYSLINUX
++ keyword disksize, pc_disksize, DiskSize
++%endif
++%endif
++
+ keywd_count equ ($-keywd_table)/keywd_size
+--- layout.inc
++++ layout.inc
+@@ -88,7 +88,11 @@
+ section .uibss nobits align=16 follows=.adv
+
+ ; Normal bss...
++%if IS_ISOLINUX
++ section .bss1 nobits align=16 follows=.bss2
++%else
+ section .bss1 nobits align=16 follows=.uibss
++%endif
+
+ ; Reserve space for stack
+ section .stack nobits align=16 start=STACK_START
+--- ldlinux.asm
++++ ldlinux.asm
+@@ -24,6 +24,9 @@
+ %ifndef IS_MDSLINUX
+ %define IS_SYSLINUX 1
+ %endif
++
++%define WITH_GFX 1
++
+ %include "head.inc"
+
+ ;
+@@ -82,6 +85,8 @@
+ cache_seg equ 2000h ; 64K area for metadata cache
+ xfer_buf_seg equ 1000h ; Bounce buffer for I/O to high mem
+ comboot_seg equ real_mode_seg ; COMBOOT image loading zone
++gfx_menu_seg equ 4000h ; temporary storage to setup menu
++first_free_seg equ 5000h ; end of syslinux used memory
+
+ ;
+ ; File structure. This holds the information for each currently open file.
+@@ -357,6 +362,8 @@
+ add eax,[bsHidden] ; Add partition offset
+ xor edx,edx ; Zero-extend LBA (eventually allow 64 bits)
+
++.patch: jmp strict near .jmp
++
+ .jmp: jmp strict short getlinsec_cbios
+
+ ;
+@@ -906,6 +913,48 @@
+ ;
+ %include "ui.inc"
+
++; Boot a specified local disk. AX specifies the BIOS disk number; or
++; 0xFFFF in case we should execute INT 18h ("next device.")
++;
++local_boot:
++%ifdef WITH_GFX
++ call gfx_done
++%endif
++ call vgaclearmode
++ lss sp,[cs:Stack] ; Restore stack pointer
++ xor dx,dx
++ mov ds,dx
++ mov es,dx
++ mov fs,dx
++ mov gs,dx
++ mov si,localboot_msg
++ call cwritestr
++ cmp ax,-1
++ je .int18
++
++ ; Load boot sector from the specified BIOS device and jump to it.
++ mov dl,al
++ xor dh,dh
++ push dx
++ xor ax,ax ; Reset drive
++ int 13h
++ mov ax,0201h ; Read one sector
++ mov cx,0001h ; C/H/S = 0/0/1 (first sector)
++ mov bx,trackbuf
++ int 13h
++ pop dx
++ cli ; Abandon hope, ye who enter here
++ mov si,trackbuf
++ mov di,07C00h
++ mov cx,512 ; Probably overkill, but should be safe
++ rep movsd
++ mov ss,cx
++ mov sp,7c00h
++ jmp 0:07C00h ; Jump to new boot sector
++.int18:
++ int 18h ; Hope this does the right thing...
++ jmp kaboom ; If we returned, oh boy...
++
+ ;
+ ; allocate_file: Allocate a file structure
+ ;
+@@ -1126,6 +1175,15 @@
+ ; starting with "kaboom.patch" with this part
+
+ kaboom2:
++ cmp byte [gfx_ok],0
++ jz .nogfx
++ mov si,err_failed_gfx
++ xor di,di
++ mov al,1
++ call gfx_infobox
++ call gfx_done
++ call do_reboot
++.nogfx:
+ mov si,err_bootfailed
+ call cwritestr
+ cmp byte [kaboom.again+1],18h ; INT 18h version?
+@@ -1530,6 +1588,8 @@
+ %include "cache.inc" ; Metadata disk cache
+ %include "adv.inc" ; Auxillary Data Vector
+
++%include "gfxboot.inc" ; add gfx things
++
+ ; -----------------------------------------------------------------------------
+ ; Begin data section
+ ; -----------------------------------------------------------------------------
+@@ -1539,6 +1599,8 @@
+ db CR, LF, 0
+ err_bootfailed db CR, LF, 'Boot failed: please change disks and press '
+ db 'a key to continue.', CR, LF, 0
++err_failed_gfx db 'Error reading from disk.', 0
++localboot_msg db 'Booting from local disk...', CR, LF, 0
+ syslinux_cfg1 db '/boot' ; /boot/syslinux/syslinux.cfg
+ syslinux_cfg2 db '/syslinux' ; /syslinux/syslinux.cfg
+ syslinux_cfg3 db '/' ; /syslinux.cfg
+--- loadhigh.inc
++++ loadhigh.inc
+@@ -47,7 +47,12 @@
+ .read_loop:
+ and si,si ; If SI == 0 then we have end of file
+ jz .eof
++%ifdef WITH_GFX
++ cmp byte [gfx_ok],0
++ jnz .no_message
++%endif
+ call bx
++.no_message:
+ push bx ; <AA> Pausebird function
+
+ push eax ; <A> Total bytes to transfer
+@@ -63,7 +68,15 @@
+ push edi ; <C> Target buffer
+ mov cx,ax
+ xor bx,bx ; ES:0
++
++%ifdef WITH_GFX
++ call gfx_progress_update
++%endif
++
++ push dx
+ call getfssec ; Load the data into xfer_buf_seg
++ ; getfssec destroys dx!
++ pop dx
+ pop edi ; <C> Target buffer
+ pop ecx ; <B> Byte count this round
+ push ecx ; <B> Byte count this round
+--- parsecmd.inc
++++ parsecmd.inc
+@@ -107,6 +107,14 @@
+ FKeyName resb MAX_FKEYS*FILENAME_MAX ; File names for F-key help
+ KernelCNameLen resw 1 ; Length of unmangled kernel name
+ InitRDCNameLen resw 1 ; Length of unmangled initrd name
++
++%if IS_ISOLINUX
++%ifdef DEBUG_MESSAGES
++; we need to rearrange memory a bit to make isolinux-debug.bin fit
++ section .bss
++%endif
++%endif
++
+ %if IS_SYSLINUX
+ KernelName resb FILENAME_MAX+1 ; Mangled name for kernel
+ KernelCName resb FILENAME_MAX+2 ; Unmangled kernel name
+--- parseconfig.inc
++++ parseconfig.inc
+@@ -81,7 +81,7 @@
+ ;
+ ; "localboot" command (PXELINUX, ISOLINUX)
+ ;
+-%if IS_PXELINUX || IS_ISOLINUX
++%if IS_PXELINUX || IS_ISOLINUX || IS_SYSLINUX
+ pc_localboot: call getint
+ cmp byte [VKernel],0 ; ("label" section only)
+ je .err
+@@ -286,6 +286,25 @@
+ mov [SerialPort], word 0
+ ret
+
++%ifdef WITH_GFX
++%if IS_SYSLINUX
++;
++; like pc_setint16, but patch sector read funtion, too
++;
++pc_disksize:
++ push ax
++ call getint
++ pop si
++ jc .err
++ mov [si],bx
++ mov word [getlinsec.patch+1], getlinsec3 - getlinsec.patch - 3
++ or bx,bx
++ jz .err
++ call cache_metadata
++.err: ret
++%endif
++%endif
++
+ ;
+ ; "F"-key command
+ ;
+--- pxelinux.asm
++++ pxelinux.asm
+@@ -846,6 +846,9 @@
+ ; AX contains the appropriate return code.
+ ;
+ local_boot:
++%ifdef WITH_GFX
++ call gfx_done
++%endif
+ push cs
+ pop ds
+ mov [LocalBootType],ax
+--- runkernel.inc
++++ runkernel.inc
+@@ -206,6 +206,15 @@
+ pop ds
+ sub si,cmd_line_here
+ mov [CmdLineLen],si ; Length including final null
++
++%ifdef WITH_GFX
++ mov eax,[KernelSects]
++ mov esi,ds
++ shl esi,4
++ add esi,KernelCName
++ call gfx_progress_init
++%endif
++
+ ;
+ ; Now check if we have a large kernel, which needs to be loaded high
+ ;
+@@ -312,6 +321,19 @@
+ jz nk_noinitrd
+ call parse_load_initrd
+ nk_noinitrd:
++
++%ifdef WITH_GFX
++ call gfx_progress_done
++
++ cmp byte [gfx_cd_changed],0
++ jz .no_cd_change
++ mov al,6
++ xor si,si
++ xor di,di
++ call gfx_infobox
++.no_cd_change:
++%endif
++
+ ;
+ ; Abandon hope, ye that enter here! We do no longer permit aborts.
+ ;
+@@ -320,6 +342,10 @@
+ mov si,ready_msg
+ call cwritestr
+
++%ifdef WITH_GFX
++ call gfx_done
++%endif
++
+ call vgaclearmode ; We can't trust ourselves after this
+
+ UNLOAD_PREP ; Module-specific hook
+@@ -552,6 +578,34 @@
+
+ .got_start:
+ push si
++
++%ifdef WITH_GFX
++ cmp byte [si],'+'
++ jnz .got_start_10
++ mov byte [cs:gfx_cd_changed],1
++ inc si
++ push es
++ push ds
++ push si
++ push cs
++ pop es
++ mov cx,100h
++ mov di,trackbuf
++ push di
++ rep movsb
++ mov byte [es:di],0
++ pop si
++ xor di,di
++ mov al,5 ; ask for cd change
++ push cs
++ pop ds
++ call gfx_infobox
++ pop si
++ pop ds
++ pop es
++.got_start_10:
++%endif
++
+ mov di,InitRD ; Target buffer for mangled name
+ call mangle_name
+ call loadinitrd
+@@ -645,6 +699,20 @@
+ ret
+
+ .notthere:
++
++%ifdef WITH_GFX
++ cmp byte [gfx_ok],0
++ jz .nogfx
++ mov si,InitRDCName
++ xor di,di
++ mov al,2
++ call gfx_infobox
++ call gfx_progress_done
++ mov si,no_msg
++ jmp abort_load
++.nogfx:
++%endif
++
+ mov si,err_noinitrd
+ call cwritestr
+ mov si,InitRDCName
+@@ -653,7 +721,21 @@
+ jmp abort_load
+
+ no_high_mem: ; Error routine
++
++%ifdef WITH_GFX
++ cmp byte [gfx_ok],0
++ jz .nogfx
+ mov si,err_nohighmem
++ xor di,di
++ mov al,0
++ call gfx_infobox
++ call gfx_progress_done
++ mov si,no_msg
++ jmp abort_load
++.nogfx:
++%endif
++
++ mov si,err_nohighmem
+ jmp abort_load
+
+ ret
+@@ -666,7 +748,8 @@
+ ready_msg db 'ready.', CR, LF, 0
+ err_oldkernel db 'Cannot load a ramdisk with an old kernel image.'
+ db CR, LF, 0
+-err_noinitrd db CR, LF, 'Could not find ramdisk image: ', 0
++err_noinitrd db CR, LF
++err_noinitrda db 'Could not find ramdisk image: ', 0
+ err_nohighmem db 'Not enough memory to load specified kernel.', CR, LF, 0
+
+ boot_image db 'BOOT_IMAGE='
+--- ui.inc
++++ ui.inc
+@@ -44,6 +44,11 @@
+
+ .no_bootonce:
+
++%ifdef WITH_GFX
++ ; build gfx menu
++ call gfx_setup_menu
++%endif
++
+ ;
+ ; Check whether or not we are supposed to display the boot prompt.
+ ;
+@@ -57,6 +62,21 @@
+ cmp word [NoEscape],0 ; If NOESCAPE, no prompt,
+ jne auto_boot ; always run default cmd
+
++%ifdef WITH_GFX
++ cmp byte [gfx_ok],0
++ jz .nogfx
++ mov edi,ds
++ shl edi,4
++ add edi,command_line
++ mov ecx,max_cmd_len
++ xor eax,eax
++ xchg eax,[KbdTimeout] ; only the first time
++ call gfx_input
++ cmp ax,1
++ jnz load_kernel
++.nogfx:
++%endif
++
+ mov si,boot_prompt
+ call cwritestr
+
+@@ -323,9 +343,21 @@
+ push word real_mode_seg
+ pop es
+ mov di,cmd_line_here
++
++%ifdef WITH_GFX
++ ; gfx code includes them
++ cmp byte [gfx_ok],0
++ jnz .isgfx
++%endif
++
+ mov si,VKernelBuf+vk_append
+ mov cx,[VKernelBuf+vk_appendlen]
+ rep movsb
++
++%ifdef WITH_GFX
++.isgfx:
++%endif
++
+ mov [CmdLinePtr],di ; Where to add rest of cmd
+ pop es
+ mov di,KernelName
+@@ -343,7 +375,7 @@
+ mov al, [VKernelBuf+vk_type]
+ mov [KernelType], al
+
+-%if IS_PXELINUX || IS_ISOLINUX
++%if IS_PXELINUX || IS_ISOLINUX || IS_SYSLINUX
+ ; Is this a "localboot" pseudo-kernel?
+ %if IS_PXELINUX
+ cmp byte [VKernelBuf+vk_rname+4], 0
+@@ -421,6 +453,19 @@
+ push di
+ call unmangle_name ; Get human form
+ mov si,err_notfound ; Complain about missing kernel
++
++%ifdef WITH_GFX
++ cmp byte [gfx_ok],0
++ jz .nogfx
++ pop si
++ xor di,di
++ mov al,2
++ call gfx_infobox
++ mov si,no_msg
++ jmp abort_load
++.nogfx:
++%endif
++
+ call cwritestr
+ pop si ; KernelCName
+ call cwritestr
+--- gfxboot.inc
++++ gfxboot.inc
+@@ -417,8 +417,10 @@
+ shr eax,20
+ cmp ax,16
+ jb gfx_init_40 ; at least 16MB
+- mov word [gfx_xmem_0],81h ; 1MB at 8MB
++ mov word [gfx_xmem_0], 81h ; 1MB at 8MB
+ mov word [gfx_xmem_1],0a1h ; 1MB at 10MB
++ mov word [gfx_xmem_2],0c1h ; 1MB at 12MB
++ mov word [gfx_xmem_3],0e1h ; 1MB at 14MB
+
+ mov dword [gfx_save_area1],7f0000h ; 8MB-64k
+ gfx_init_40:
diff --git a/patches/syslinux-3.82/01_isolinux_mount_chdir.diff b/patches/syslinux-3.82/01_isolinux_mount_chdir.diff
new file mode 100644
index 0000000..3881586
--- /dev/null
+++ b/patches/syslinux-3.82/01_isolinux_mount_chdir.diff
@@ -0,0 +1,175 @@
+diff --git a/core/isolinux.asm b/core/isolinux.asm
+index 2627c2d..a0910fb 100644
+--- a/core/isolinux.asm
++++ b/core/isolinux.asm
+@@ -1135,73 +1135,23 @@ all_read:
+ ; (which will be at 16 only for a single-session disk!); from the PVD
+ ; we should be able to find the rest of what we need to know.
+ ;
+-get_fs_structures:
+- mov eax,[bi_pvd]
+- mov bx,trackbuf
+- call getonesec
+-
+- mov eax,[trackbuf+156+2]
+- mov [RootDir+dir_lba],eax
+- mov [CurrentDir+dir_lba],eax
+-%ifdef DEBUG_MESSAGES
+- mov si,dbg_rootdir_msg
+- call writemsg
+- call writehex8
+- call crlf
+-%endif
+- mov eax,[trackbuf+156+10]
+- mov [RootDir+dir_len],eax
+- mov [CurrentDir+dir_len],eax
+- add eax,SECTOR_SIZE-1
+- shr eax,SECTOR_SHIFT
+- mov [RootDir+dir_clust],eax
+- mov [CurrentDir+dir_clust],eax
+-
+- ; Look for an isolinux directory, and if found,
+- ; make it the current directory instead of the root
+- ; directory.
+- ; Also copy the name of the directory to CurrentDirName
+- mov word [CurrentDirName],ROOT_DIR_WORD ; Write '/',0 to the CurrentDirName
++ call iso_mount
+ mov di,boot_dir ; Search for /boot/isolinux
+- mov al,02h
+- push di
+- call searchdir_iso
+- pop di
+- jnz .found_dir
+- mov di,isolinux_dir
+- mov al,02h ; Search for /isolinux
+- push di
+- call searchdir_iso
+- pop di
+- jz .no_isolinux_dir
++ call setcwd
++ jnc .found_dir
++ mov di,isolinux_dir ; Search for /isolinux
++ call setcwd
+ .found_dir:
+- ; Copy current directory name to CurrentDirName
+- push si
+- push di
+- mov si,di
+- mov di,CurrentDirName
+- call strcpy
+- mov byte [di],0 ;done in case it's not word aligned
+- dec di
+- mov byte [di],'/'
+- pop di
+- pop si
+
+- mov [CurrentDir+dir_len],eax
+- mov eax,[si+file_left]
+- mov [CurrentDir+dir_clust],eax
+- xor eax,eax ; Free this file pointer entry
+- xchg eax,[si+file_sector]
+- mov [CurrentDir+dir_lba],eax
+ %ifdef DEBUG_MESSAGES
+ push si
+ mov si,dbg_isodir_msg
+ call writemsg
+ pop si
++ mov eax,[CurrentDir+dir_lba]
+ call writehex8
+ call crlf
+ %endif
+-.no_isolinux_dir:
+
+ ;
+ ; Locate the configuration file
+@@ -1706,6 +1656,90 @@ getfssec:
+ TRACER 'f'
+ ret
+
++;
++; setcwd: Set current working directory.
++;
++; On entry:
++; DI -> directory name
++; On exit:
++; CF = 1 -> error
++;
++; On error, the old working directory is kept.
++;
++setcwd:
++ mov al,02h
++ push di
++ call searchdir_iso
++ pop di
++ stc
++ jz .err
++ mov [CurrentDir+dir_len],eax
++ mov eax,[si+file_left]
++ mov [CurrentDir+dir_clust],eax
++ xor eax,eax
++ xchg eax,[si+file_sector]
++ mov [CurrentDir+dir_lba],eax
++ mov si,di
++ mov di,CurrentDirName
++ cmp si,di
++ jz .ok
++ mov cx,FILENAME_MAX
++ push ds
++ pop es
++.copy:
++ lodsb
++ stosb
++ or al,al
++ loopnz .copy
++ mov byte [di-1],0
++ jnz .err
++.ok:
++ clc
++.err:
++ ret
++
++;
++; Read fs meta data and setup RootDir and CurrentDir.
++;
++; On exit:
++; CF = 1 -> error
++;
++iso_mount:
++ mov eax,[bi_pvd]
++ mov bx,trackbuf
++ call getonesec
++
++ mov eax,[trackbuf+156+10]
++ mov [RootDir+dir_len],eax
++ add eax,SECTOR_SIZE-1
++ shr eax,SECTOR_SHIFT
++ mov [RootDir+dir_clust],eax
++ mov eax,[trackbuf+156+2]
++ mov [RootDir+dir_lba],eax
++
++ push ds
++ pop es
++ mov si,RootDir
++ mov di,CurrentDir
++ mov cx,dir_t_size
++ rep movsb
++
++%ifdef DEBUG_MESSAGES
++ mov si,dbg_rootdir_msg
++ call writemsg
++ call writehex8
++ call crlf
++%endif
++
++ mov di,CurrentDirName
++ call setcwd
++ jnc .ok
++ mov word [CurrentDirName],ROOT_DIR_WORD
++.ok:
++ clc
++ ret
++
++
+ ; -----------------------------------------------------------------------------
+ ; Common modules
+ ; -----------------------------------------------------------------------------
diff --git a/patches/syslinux-3.82/02_comboot_hooks.diff b/patches/syslinux-3.82/02_comboot_hooks.diff
new file mode 100644
index 0000000..52c9465
--- /dev/null
+++ b/patches/syslinux-3.82/02_comboot_hooks.diff
@@ -0,0 +1,117 @@
+diff --git a/core/abort.inc b/core/abort.inc
+index 5b16b9d..cc59fa7 100644
+--- a/core/abort.inc
++++ b/core/abort.inc
+@@ -24,6 +24,10 @@
+ ; assumes CS == DS
+ ;
+ dot_pause:
++ push ax
++ mov al,5
++ call [comboot_hook]
++ pop ax
+ push si
+ mov si,dot_msg
+ call writestr_qchk
+@@ -63,6 +67,8 @@ abort_check:
+ abort_load:
+ mov bx,error_or_command
+ abort_load_chain:
++ mov al,80h
++ call [comboot_hook] ; may not return
+ RESET_STACK_AND_SEGS AX
+ call writestr ; Expects SI -> error msg
+
+diff --git a/core/loadhigh.inc b/core/loadhigh.inc
+index 8ff9da1..91061fc 100644
+--- a/core/loadhigh.inc
++++ b/core/loadhigh.inc
+@@ -101,6 +101,8 @@ load_high:
+ ret
+
+ .overflow: mov si,err_nohighmem
++ mov al,83h
++ call [comboot_hook] ; may not return
+ jmp abort_load
+
+ section .data
+diff --git a/core/runkernel.inc b/core/runkernel.inc
+index 8bfc8b8..f458fc7 100644
+--- a/core/runkernel.inc
++++ b/core/runkernel.inc
+@@ -228,6 +228,8 @@ new_kernel:
+ mov [LoadFlags],al
+
+ any_kernel:
++ mov al,4
++ call [comboot_hook]
+ mov si,loading_msg
+ call writestr_qchk
+ mov si,KernelCName ; Print kernel name part of
+@@ -319,6 +321,9 @@ load_initrd:
+ ;
+ call abort_check ; Last chance!!
+
++ mov al,6
++ call [comboot_hook]
++
+ mov si,ready_msg
+ call writestr_qchk
+
+@@ -489,6 +494,8 @@ old_kernel:
+ xor ax,ax
+ cmp word [InitRDPtr],ax ; Old kernel can't have initrd
+ je .load
++ mov al,82h
++ call [comboot_hook] ; may not return
+ mov si,err_oldkernel
+ jmp abort_load
+ .load:
+@@ -613,6 +620,8 @@ loadinitrd:
+ ret
+
+ .notthere:
++ mov al,81h
++ call [comboot_hook] ; may not return
+ mov si,err_noinitrd
+ call writestr
+ mov si,InitRDCName
+diff --git a/core/ui.inc b/core/ui.inc
+index 1b40717..9413f16 100644
+--- a/core/ui.inc
++++ b/core/ui.inc
+@@ -402,8 +402,12 @@ vk_check:
+ %if HAS_LOCALBOOT
+ ; Is this a "localboot" pseudo-kernel?
+ cmp al,VK_LOCALBOOT ; al == KernelType
++ jne .no_local_boot
++ mov al,7
++ call [comboot_hook]
+ mov ax,[VKernelBuf+vk_rname] ; Possible localboot type
+- je local_boot
++ jmp local_boot
++.no_local_boot:
+ %endif
+ jmp get_kernel
+
+@@ -468,6 +472,8 @@ bad_kernel:
+ .really:
+ mov si,KernelName
+ mov di,KernelCName
++ mov al,81h
++ call [comboot_hook] ; may not return
+ push di
+ call unmangle_name ; Get human form
+ mov si,err_notfound ; Complain about missing kernel
+@@ -510,7 +516,10 @@ on_error:
+ ;
+ ; kernel_corrupt: Called if the kernel file does not seem healthy
+ ;
+-kernel_corrupt: mov si,err_notkernel
++kernel_corrupt:
++ mov al,82h
++ call [comboot_hook] ; may not return
++ mov si,err_notkernel
+ jmp abort_load
+
+ ;
diff --git a/patches/syslinux-3.82/03_comboot_ne_real_mode_seg.diff b/patches/syslinux-3.82/03_comboot_ne_real_mode_seg.diff
new file mode 100644
index 0000000..fe319bf
--- /dev/null
+++ b/patches/syslinux-3.82/03_comboot_ne_real_mode_seg.diff
@@ -0,0 +1,44 @@
+diff --git a/core/comboot.inc b/core/comboot.inc
+index cdba16d..1a1dbfe 100644
+--- a/core/comboot.inc
++++ b/core/comboot.inc
+@@ -96,24 +96,23 @@ is_comboot_image:
+ shl ax,6 ; Kilobytes -> paragraphs
+ mov word [es:02h],ax
+
+-%ifndef DEPEND
+-%if real_mode_seg != comboot_seg
+-%error "This code assumes real_mode_seg == comboot_seg"
+-%endif
+-%endif
+ ; Copy the command line from high memory
++ push word real_mode_seg
++ pop ds
+ mov si,cmd_line_here
+ mov cx,125 ; Max cmdline len (minus space and CR)
+ mov di,081h ; Offset in PSP for command line
+ mov al,' ' ; DOS command lines begin with a space
+ stosb
+
+-.loop: es lodsb
++.loop: lodsb
+ and al,al
+ jz .done
+ stosb
+ loop .loop
+ .done:
++ push cs
++ pop ds
+
+ mov al,0Dh ; CR after last character
+ stosb
+diff --git a/core/layout.inc b/core/layout.inc
+index 8c2e248..ca95d2b 100644
+--- a/core/layout.inc
++++ b/core/layout.inc
+@@ -123,4 +123,4 @@ real_mode_seg equ cache_seg + 1000h
+ pktbuf_seg equ cache_seg ; PXELINUX packet buffers
+ %endif
+
+-comboot_seg equ real_mode_seg ; COMBOOT image loading zone
++comboot_seg equ real_mode_seg + 1000h ; COMBOOT image loading zone
diff --git a/patches/syslinux-3.82/04_new_quiet_flag.diff b/patches/syslinux-3.82/04_new_quiet_flag.diff
new file mode 100644
index 0000000..b63ed99
--- /dev/null
+++ b/patches/syslinux-3.82/04_new_quiet_flag.diff
@@ -0,0 +1,43 @@
+diff --git a/core/runkernel.inc b/core/runkernel.inc
+index f458fc7..f6ed644 100644
+--- a/core/runkernel.inc
++++ b/core/runkernel.inc
+@@ -165,7 +165,7 @@ opt_mem:
+ ret
+
+ opt_quiet:
+- mov byte [QuietBoot],1
++ or byte [QuietBoot],1
+ ret
+
+ %if IS_PXELINUX
+@@ -634,7 +634,7 @@ loadinitrd:
+ ; assumes CS == DS
+ ;
+ writestr_qchk:
+- test byte [QuietBoot],01h
++ test byte [QuietBoot],03h
+ jz writestr
+ ret
+
+@@ -689,4 +689,6 @@ KernelVersion resw 1 ; Kernel protocol version
+ ;
+ InitRDPtr resw 1 ; Pointer to initrd= option in command line
+ LoadFlags resb 1 ; Loadflags from kernel
+-QuietBoot resb 1 ; Set if a quiet boot is requested
++
++ section .data
++QuietBoot db 0 ; Set if a quiet boot is requested
+diff --git a/core/ui.inc b/core/ui.inc
+index 9413f16..353d59a 100644
+--- a/core/ui.inc
++++ b/core/ui.inc
+@@ -600,7 +600,7 @@ kernel_good:
+ ;
+ xor ax,ax
+ mov [InitRDPtr],ax
+- mov [QuietBoot],al
++ and byte [QuietBoot],~1
+ %if IS_PXELINUX
+ mov [KeepPXE],al
+ %endif
diff --git a/patches/syslinux-3.82/05_variable_kernel_address.diff b/patches/syslinux-3.82/05_variable_kernel_address.diff
new file mode 100644
index 0000000..a494529
--- /dev/null
+++ b/patches/syslinux-3.82/05_variable_kernel_address.diff
@@ -0,0 +1,42 @@
+diff --git a/core/runkernel.inc b/core/runkernel.inc
+index f6ed644..286c9c8 100644
+--- a/core/runkernel.inc
++++ b/core/runkernel.inc
+@@ -259,7 +259,7 @@ read_kernel:
+ mov ecx,8000h ; 32K
+ sub ecx,esi ; Number of bytes to copy
+ add esi,(real_mode_seg << 4) ; Pointer to source
+- mov edi,100000h ; Copy to address 100000h
++ mov edi,[KernelStart] ; Copy to kernel address
+
+ call bcopy ; Transfer to high memory
+
+@@ -431,7 +431,7 @@ setup_move:
+
+ mov eax,10000h ; Target address of low kernel
+ stosd
+- mov eax,100000h ; Where currently loaded
++ mov eax,[KernelStart] ; Where currently loaded
+ stosd
+ neg eax
+ add eax,[KernelEnd]
+@@ -439,9 +439,13 @@ setup_move:
+ inc cx
+
+ mov bx,9000h ; Revised real mode segment
++ jmp .loading_initrd
+
+ .loading_high:
++ mov eax,[KernelStart]
++ mov [fs:su_code32start],eax
+
++.loading_initrd:
+ cmp word [InitRDPtr],0 ; Did we have an initrd?
+ je .no_initrd
+
+@@ -692,3 +696,5 @@ LoadFlags resb 1 ; Loadflags from kernel
+
+ section .data
+ QuietBoot db 0 ; Set if a quiet boot is requested
++ alignz 4
++KernelStart dd 100000h
diff --git a/patches/syslinux-3.82/06_comboot_new_api.diff b/patches/syslinux-3.82/06_comboot_new_api.diff
new file mode 100644
index 0000000..2cea657
--- /dev/null
+++ b/patches/syslinux-3.82/06_comboot_new_api.diff
@@ -0,0 +1,189 @@
+diff --git a/core/comboot.inc b/core/comboot.inc
+index 1a1dbfe..1923308 100644
+--- a/core/comboot.inc
++++ b/core/comboot.inc
+@@ -962,6 +962,45 @@ comapi_shufraw:
+ mov ecx,P_ECX
+ jmp shuffle_and_boot_raw
+
++
++;
++; INT 22h AX=0025h Set current working directory
++;
++%if IS_ISOLINUX
++comapi_setcwd:
++ mov si,P_BX
++ mov di,TmpDirName
++ mov cx,FILENAME_MAX
++ mov ds,P_ES
++.copy:
++ lodsb
++ stosb
++ or al,al
++ loopnz .copy
++ push cs
++ pop ds
++ stc
++ jnz .err
++ mov di,TmpDirName
++ call setcwd
++.err:
++ ret
++%else
++comapi_setcwd equ comapi_err
++%endif
++
++
++;
++; INT 22h AX=0026h Read filesystem meta data
++;
++%if IS_ISOLINUX
++comapi_mount:
++; call iso_mount
++ ret
++%else
++comapi_mount equ comapi_err
++%endif
++
+ section .data
+
+ %macro int21 2
+@@ -969,6 +1008,109 @@ comapi_shufraw:
+ dw %2
+ %endmacro
+
++
++;
++; INT 22h AX=0027h Run command, return on error
++;
++; Terminates the COMBOOT program and executes the command line in
++; ES:BX as if it had been entered by the user.
++; CS:SI: comboot callback (via far call)
++; EDI kernel load address
++; EDX memory end (sets MyHighMemSize if != 0)
++;
++comapi_run2:
++ push word P_CS
++ push word P_SI
++ pop dword [comboot_far]
++ push dword P_EDI
++ pop dword [KernelStart]
++ mov edx,P_EDX
++ or edx,edx
++ jz .nohimemsize
++%if HIGHMEM_SLOP != 0
++ sub edx,HIGHMEM_SLOP
++%endif
++.nohimemsize:
++ mov [AltHighMemSize],edx
++ mov ds,P_ES
++ mov si,P_BX
++ mov di,command_line
++ call strcpy
++ push cs
++ pop ds
++ push cs
++ pop es
++ mov [comboot_sp_save],sp ; save stack pointer
++ mov word [comboot_hook],comboot_hook_entry
++ or byte [QuietBoot],2
++ jmp load_kernel ; Run a new kernel
++
++comapi_run2_cont:
++ mov word [comboot_hook],comboot_hook_nop
++ mov sp,[comboot_sp_save] ; fix stack pointer
++ and byte [QuietBoot],~2
++ clc
++ ret
++
++
++;
++; INT 22h AX=0028h Get memory size
++;
++comapi_memsize:
++ push dword [HighMemSize]
++ pop dword P_EAX
++ clc
++ ret
++
++
++;
++; Callback function used at various places during kernel/initrd loading.
++;
++; The function either returns or continues at comapi_run2_cont.
++;
++; AL:
++; bit 7: 0/1 return/don't return
++; bit 0-6: function code
++; 0: abort kernel/initrd loading
++; 1: kernel/initrd not found
++; 2: kernel corrupt
++; 3: out of memory (while initrd loading)
++; 4: progress start
++; 5: progress increment
++; 6: progress end: kernel loaded, stop gfxboot
++; 7: stop gfxboot
++;
++comboot_hook_entry:
++ pushad
++ push gs
++ push fs
++ push es
++ push ds
++ call far [comboot_far]
++ pop ds
++ pop es
++ pop fs
++ pop gs
++ popad
++ pushad
++ and al,7fh
++ cmp al,6
++ jnz .notlast
++ push es
++ mov si,DOSSaveVectors
++ mov di,4*20h
++ mov cx,20h
++ push word 0
++ pop es
++ rep movsd ; Restore DOS-range vectors
++ pop es
++.notlast:
++ popad
++ test al,80h
++ jnz comapi_run2_cont
++comboot_hook_nop:
++ ret
++
+ int21_table:
+ int21 00h, comboot_return
+ int21 01h, comboot_getkey
+@@ -1021,8 +1163,16 @@ int22_table:
+ dw comapi_closedir ; 0022 close directory
+ dw comapi_shufsize ; 0023 query shuffler size
+ dw comapi_shufraw ; 0024 cleanup, shuffle and boot raw
++ dw comapi_setcwd ; 0025 set current working directory
++ dw comapi_mount ; 0026 read fs structures (aka mount)
++ dw comapi_run2 ; 0027 like 0003, but return on error
++ dw comapi_memsize ; 0028 get memory size
+ int22_count equ ($-int22_table)/2
+
++comboot_sp_save dw 0
++comboot_hook dw comboot_hook_nop
++comboot_far dd 0
++
+ APIKeyWait db 0
+ APIKeyFlag db 0
+
+@@ -1041,8 +1191,10 @@ feature_flags_len equ ($-feature_flags)
+ err_notdos db ': attempted DOS system call INT ',0
+ err_comlarge db 'COMBOOT image too large.', CR, LF, 0
+
+- section .bss1
++ section .bss2
+ alignb 4
++AltHighMemSize resd 1
+ DOSErrTramp resd 33 ; Error trampolines
++TmpDirName resb FILENAME_MAX
+ ConfigName resb FILENAME_MAX
+ CurrentDirName resb FILENAME_MAX
diff --git a/patches/syslinux-3.82/07_no_append.diff b/patches/syslinux-3.82/07_no_append.diff
new file mode 100644
index 0000000..f06b3b4
--- /dev/null
+++ b/patches/syslinux-3.82/07_no_append.diff
@@ -0,0 +1,45 @@
+diff --git a/core/comboot.inc b/core/comboot.inc
+index 1923308..f39bfb1 100644
+--- a/core/comboot.inc
++++ b/core/comboot.inc
+@@ -1043,12 +1043,14 @@ comapi_run2:
+ mov [comboot_sp_save],sp ; save stack pointer
+ mov word [comboot_hook],comboot_hook_entry
+ or byte [QuietBoot],2
++ mov byte [comboot_run2_active],1
+ jmp load_kernel ; Run a new kernel
+
+ comapi_run2_cont:
+ mov word [comboot_hook],comboot_hook_nop
+ mov sp,[comboot_sp_save] ; fix stack pointer
+ and byte [QuietBoot],~2
++ mov byte [comboot_run2_active],0
+ clc
+ ret
+
+@@ -1172,6 +1174,7 @@ int22_count equ ($-int22_table)/2
+ comboot_sp_save dw 0
+ comboot_hook dw comboot_hook_nop
+ comboot_far dd 0
++comboot_run2_active db 0
+
+ APIKeyWait db 0
+ APIKeyFlag db 0
+diff --git a/core/ui.inc b/core/ui.inc
+index 353d59a..e37f2a7 100644
+--- a/core/ui.inc
++++ b/core/ui.inc
+@@ -379,9 +379,13 @@ vk_check:
+ push word real_mode_seg
+ pop es
+ mov di,cmd_line_here
++ ; append line already included in this case
++ cmp byte [comboot_run2_active],0
++ jnz .no_append_copy
+ mov si,VKernelBuf+vk_append
+ mov cx,[VKernelBuf+vk_appendlen]
+ rep movsb
++.no_append_copy:
+ mov [CmdLinePtr],di ; Where to add rest of cmd
+ pop es
+ mov di,KernelName
diff --git a/patches/syslinux-3.82/08_kernel_size.diff b/patches/syslinux-3.82/08_kernel_size.diff
new file mode 100644
index 0000000..e6b868d
--- /dev/null
+++ b/patches/syslinux-3.82/08_kernel_size.diff
@@ -0,0 +1,36 @@
+diff --git a/core/comboot.inc b/core/comboot.inc
+index f39bfb1..0874526 100644
+--- a/core/comboot.inc
++++ b/core/comboot.inc
+@@ -1088,6 +1088,7 @@ comboot_hook_entry:
+ push fs
+ push es
+ push ds
++ mov ecx,[KernelSize]
+ call far [comboot_far]
+ pop ds
+ pop es
+diff --git a/core/ui.inc b/core/ui.inc
+index e37f2a7..6137dc9 100644
+--- a/core/ui.inc
++++ b/core/ui.inc
+@@ -616,7 +616,11 @@ kernel_good:
+ mov [KernelCNameLen],di
+
+ ; Default memory limit, can be overridden by image loaders
++ mov eax,[AltHighMemSize]
++ or eax,eax
++ jnz .altsize
+ mov eax,[HighMemRsvd]
++.altsize:
+ mov [MyHighMemSize],eax
+
+ popad
+@@ -637,6 +641,7 @@ kernel_good:
+ ; At this point, EAX contains the size of the kernel, SI contains
+ ; the file handle/cluster pointer, and ECX contains the extension (if any.)
+ ;
++ mov [KernelSize],eax
+ movzx di,byte [KernelType]
+ add di,di
+ jmp [kerneltype_table+di]
diff --git a/patches/syslinux-3.82/09_doc.diff b/patches/syslinux-3.82/09_doc.diff
new file mode 100644
index 0000000..6f8a8cf
--- /dev/null
+++ b/patches/syslinux-3.82/09_doc.diff
@@ -0,0 +1,43 @@
+diff --git a/doc/comboot.txt b/doc/comboot.txt
+index f5fefda..1450021 100644
+--- a/doc/comboot.txt
++++ b/doc/comboot.txt
+@@ -955,3 +955,38 @@ AX=0024h [3.80] Cleanup, shuffle and boot, raw version
+ with read/write data segments, matching the respective code
+ segment. For mode 0, B=0 and the limits will be 64K, for mode
+ 1, B=1 and the limits will be 4 GB.
++
++
++AX=0025h [3.84] Set current working directory
++ Input: AX 00025h
++ ES:BX null-terminated directory name string
++ Output: None
++
++ Sets the current working directory. For SYSLINUX, ISOLINUX,
++ and PXELINUX, this will be an absolute path.
++
++
++AX=0026h [3.84] Read file system metadata [ISOLINUX]
++ Input: AX 00026h
++ Output: None
++
++ Reads filesystem data (e.g. after a CDROM change).
++
++
++AX=0027h [3.84] Run command
++ Input: AX 0027h
++ ES:BX null-terminated command string
++ SI comboot callback function (called via far call)
++ EDI kernel load address
++ EDX if != 0: initrd load address (that is: memory end)
++ Output: Does not return if the kernel loads correctly.
++
++ Executes the command line as if it had been entered by the user.
++ Note that this function does return (with CF = 0) if there are
++ problems or the user aborted the load. Else it terminates the
++ COMBOOT program and starts the kernel.
++
++AX=0028h [3.84] Get memory size
++ Input: AX 0028h
++ Output: EAX high memory size (in bytes)
++
diff --git a/patches/syslinux-3.82/10_gfxboot_c.diff b/patches/syslinux-3.82/10_gfxboot_c.diff
new file mode 100644
index 0000000..1c0d251
--- /dev/null
+++ b/patches/syslinux-3.82/10_gfxboot_c.diff
@@ -0,0 +1,2099 @@
+diff --git a/modules/Makefile b/modules/Makefile
+index 80eb995..65661a4 100644
+--- a/modules/Makefile
++++ b/modules/Makefile
+@@ -19,6 +19,11 @@ include $(topdir)/MCONFIG.embedded
+
+ INCLUDES = -I$(com32)/include
+
++CFLAGS_COM = -O2 -Wall -Wno-pointer-sign -fomit-frame-pointer -m32 -march=i386 \
++ -fno-align-functions -fno-align-labels -fno-align-jumps -fno-align-loops \
++ -fno-builtin -nostdinc -I .
++ASMFLAGS_COM = -O99 -felf
++
+ BINS = pxechain.com gfxboot.com poweroff.com
+
+ all: $(BINS)
+@@ -49,6 +54,15 @@ $(LIB): $(LIBOBJS)
+ %.ppm.gz: %.png
+ $(PNGTOPNM) $< | gzip -9 > $@
+
++libio.o: libio.asm
++ nasm $(ASMFLAGS_COM) -o $@ -l $*.lst $<
++
++gfxboot.o: gfxboot.c libio.h
++ $(CC) -g $(CFLAGS_COM) -c -o $@ $<
++
++gfxboot.com: gfxboot.o libio.o
++ ld -M -Tcom.ld -o $@ $^ >$*.map
++
+ tidy dist:
+ rm -f *.o *.a *.lst *.elf *.map .*.d
+
+diff --git a/modules/com.ld b/modules/com.ld
+new file mode 100644
+index 0000000..a98f9aa
+--- /dev/null
++++ b/modules/com.ld
+@@ -0,0 +1,16 @@
++/*
++ linker script for DOS program (.COM)
++ */
++
++OUTPUT_FORMAT("binary")
++OUTPUT_ARCH(i386)
++SEARCH_DIR(".")
++ENTRY(_start)
++SECTIONS
++{
++ .init 0x100 : { *(.init) }
++ .text : { *(.text) }
++ .rodata : { *(.rodata*) }
++ .data : { *(.data) }
++ .bss : { __bss_start = .; *(.bss) }
++}
+diff --git a/modules/gfxboot.c b/modules/gfxboot.c
+new file mode 100644
+index 0000000..a59da40
+--- /dev/null
++++ b/modules/gfxboot.c
+@@ -0,0 +1,1040 @@
++/*
++ *
++ * gfxboot.c
++ *
++ * A comboot program to load gfxboot graphics.
++ *
++ * It is based on work done by Sebastian Herbszt in gfxboot.asm.
++ *
++ * Copyright (c) 2009 Steffen Winterfeldt.
++ *
++ * 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, Inc., 53 Temple Place Ste 330, Boston MA
++ * 02111-1307, USA; either version 2 of the License, or (at your option) any
++ * later version; incorporated herein by reference.
++ *
++ */
++
++#include <libio.h>
++
++#define ID_SYSLINUX 0x31
++#define ID_PXELINUX 0x32
++#define ID_ISOLINUX 0x33
++#define ID_EXTLINUX 0x34
++
++#define MAX_CONFIG_LINE_LEN 2048
++#define MAX_CMDLINE_LEN 1024
++
++// basic memory layout in MB
++#define GFX_MEMORY_START 1
++#define GFX_MEMORY_SIZE 7
++// assume initrd needs at least that much
++#define INITRD_MIN_MEMORY 64
++
++#define GFX_BC_INIT 0
++#define GFX_BC_DONE 1
++#define GFX_BC_INPUT 2
++#define GFX_BC_MENU_INIT 3
++#define GFX_BC_INFOBOX_INIT 4
++#define GFX_BC_INFOBOX_DONE 5
++#define GFX_BC_PROGRESS_INIT 6
++#define GFX_BC_PROGRESS_DONE 7
++#define GFX_BC_PROGRESS_UPDATE 8
++#define GFX_BC_PROGRESS_LIMIT 9 // unused
++#define GFX_BC_PASSWORD_INIT 10
++#define GFX_BC_PASSWORD_DONE 11
++
++// for now, static values
++#define MENU_LABEL_SIZE 128
++#define MENU_ARG_SIZE 512
++#define MENU_ENTRY_SIZE (MENU_LABEL_SIZE + MENU_ARG_SIZE)
++// entry 0 is reserved for the default entry
++#define MAX_MENU_ENTRIES (0x10000 / MENU_ENTRY_SIZE)
++
++
++typedef struct {
++ uint16_t handle;
++ uint16_t block_size;
++ int file_size; // file size (-1: unknown)
++ uint32_t buf; // must be block_size
++ unsigned buf_size; // in block_size units
++ unsigned data_len; // valid bytes in buf
++ unsigned buf_idx; // read pos in buffer
++} fd_t;
++
++
++// gfx config data (52 bytes)
++typedef struct __attribute__ ((packed)) {
++ uint8_t bootloader; // 0: boot loader type (0: lilo, 1: syslinux, 2: grub)
++ uint8_t sector_shift; // 1: sector shift
++ uint8_t media_type; // 2: media type (0: disk, 1: floppy, 2: cdrom)
++ uint8_t failsafe; // 3: turn on failsafe mode (bitmask)
++ // 0: SHIFT pressed
++ // 1: skip gfxboot
++ // 2: skip monitor detection
++ uint8_t sysconfig_size; // 4: size of sysconfig data
++ uint8_t boot_drive; // 5: BIOS boot drive
++ uint16_t callback; // 6: offset to callback handler
++ uint16_t bootloader_seg; // 8: code/data segment used by bootloader; must follow gfx_callback
++ uint16_t reserved_1; // 10
++ uint32_t user_info_0; // 12: data for info box
++ uint32_t user_info_1; // 16: data for info box
++ uint32_t bios_mem_size; // 20: BIOS memory size (in bytes)
++ uint16_t xmem_0; // 24: extended mem area 0 (start:size in MB; 12:4 bits)
++ uint16_t xmem_1; // 26: extended mem area 1
++ uint16_t xmem_2; // 28: extended mem area 2
++ uint16_t xmem_3; // 30: extended mem area 3
++ uint32_t file; // 32: start of gfx file
++ uint32_t archive_start; // 36: start of cpio archive
++ uint32_t archive_end; // 40: end of cpio archive
++ uint32_t mem0_start; // 44: low free memory start
++ uint32_t mem0_end; // 48: low free memory end
++} gfx_config_t;
++
++
++// menu description (18 bytes)
++typedef struct __attribute__ ((packed)) {
++ uint16_t entries;
++ uint32_t default_entry; // seg:ofs
++ uint32_t label_list; // seg:ofs
++ uint16_t label_size;
++ uint32_t arg_list; // seg:ofs
++ uint16_t arg_size;
++} menu_t;
++
++
++// e820 mem descriptor
++typedef struct __attribute__ ((packed)) {
++ uint64_t base;
++ uint64_t len;
++ uint32_t type;
++ uint32_t cont;
++} mem_info_t;
++
++
++// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
++// global file descriptor, implicitly used by read(), getc(), fgets()
++fd_t fd;
++
++gfx_config_t gfx_config;
++menu_t menu;
++
++struct {
++ uint32_t jmp_table[12];
++ uint16_t code_seg;
++ char fname_buf[64];
++} gfx;
++
++unsigned comboot, comboot_len;
++unsigned io_buf, io_buf_len;
++unsigned menu_buf, menu_buf_len;
++unsigned freemem, freemem_len;
++
++unsigned initrd_end;
++unsigned kernel_start;
++
++int timeout;
++
++char cmdline[MAX_CMDLINE_LEN];
++char current_label[64];
++
++// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
++
++int open(char *name);
++int open32(uint32_t name);
++int read(void *buf, int size);
++int read32(uint32_t buf, int size);
++int getc(void);
++char *fgets(char *s, int size);
++
++int strlen(char *s);
++int strcmp(char *s1, char *s2);
++char *skip_spaces(char *s);
++char *skip_nonspaces(char *s);
++void chop_line(char *s);
++
++int atoi(char *s);
++
++uint32_t get_config_file_name32(void);
++int read_config_file(void);
++
++unsigned magic_ok(uint32_t buf);
++unsigned find_file(uint32_t buf, unsigned len, unsigned *gfx_file_start, unsigned *file_len);
++
++int get_mem_info(mem_info_t *mi);
++int gfx_init(char *file);
++void gfx_done(void);
++int gfx_input(void);
++int gfx_menu_init(void);
++
++void gfx_infobox32(int type, uint32_t str1, uint32_t str2);
++void gfx_infobox(int type, char *str1, char *str2);
++
++void boot(void);
++void show_message(char *file);
++
++
++// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
++int main(int argc, char **argv)
++{
++ x86regs_t r;
++ uint8_t syslinux_id;
++ int menu_index;
++
++ r.eax = 0x0a; // Get Derivative-Specific Information
++ r.ecx = 9;
++ x86int(0x22, &r);
++ syslinux_id = (uint8_t) r.eax;
++ gfx_config.sector_shift = (uint8_t) r.ecx;
++ gfx_config.boot_drive = (uint8_t) r.edx;
++
++ // define our memory layout
++ // all must be at least 16 bytes aligned
++
++ // 64k comboot code
++ comboot = comboot_seg() << 4;
++ comboot_len = 0x10000;
++
++ // 16k file io buffer
++ io_buf = comboot + comboot_len;
++ io_buf_len = 0x4000;
++
++ // 64k for parsed menu data
++ menu_buf = io_buf + io_buf_len;
++ menu_buf_len = 0x10000;
++
++ // use remaining mem for gfx core
++ freemem = menu_buf + menu_buf_len;
++ // comboot api passes low memory end at address 2
++ freemem_len = ((*(uint16_t *) 2) << 4) - freemem;
++
++ gfx_config.bootloader = 1;
++ gfx_config.sysconfig_size = sizeof gfx_config;
++ gfx_config.bootloader_seg = comboot >> 4;
++
++ // not gfx_cb() directly, we need a wrapper
++ gfx_config.callback = (uint32_t) _gfx_cb;
++
++ if(syslinux_id == ID_PXELINUX) {
++ gfx_config.sector_shift = 11;
++ gfx_config.boot_drive = 0;
++ }
++
++ if(argc < 2) {
++ printf("Usage: gfxboot.com bootlogo_file [message_file]\n");
++ if(argc > 2) show_message(argv[2]);
++
++ return 0;
++ }
++
++ if(read_config_file()) {
++ printf("Error reading config file\n");
++ if(argc > 2) show_message(argv[2]);
++
++ return 0;
++ }
++
++ if(gfx_init(argv[1])) {
++ printf("Error setting up gfxboot\n");
++ if(argc > 2) show_message(argv[2]);
++
++ return 0;
++ }
++
++ gfx_menu_init();
++
++ for(;;) {
++ menu_index = gfx_input();
++
++ // abort gfx, return to text mode prompt
++ if(menu_index == -1) {
++ gfx_done();
++ break;
++ }
++
++ // get label name, is needed later for messages etc.
++ memcpy(current_label, cmdline, sizeof current_label);
++ current_label[sizeof current_label - 1] = 0;
++ *skip_nonspaces(current_label) = 0;
++
++ // does not return if it succeeds
++ boot();
++ }
++
++ if(argc > 2) show_message(argv[2]);
++
++ return 0;
++}
++
++
++// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
++//
++// return:
++// 0: ok, -1: error
++//
++int open32(uint32_t name)
++{
++ x86regs_t r;
++
++ fd.handle = 0;
++ fd.data_len = fd.buf_idx = 0;
++
++ r.esi = name & 0xf;
++ r.eax = 0x06; // Open file
++ r.es = name >> 4;
++ x86int(0x22, &r);
++
++ fd.block_size = r.ecx;
++ fd.file_size = r.eax;
++
++ if(
++ (r.eflags & X86_CF) ||
++ !fd.file_size || !fd.block_size || fd.block_size > io_buf_len
++ ) return -1;
++
++ fd.handle = r.esi;
++
++ fd.buf = io_buf;
++ fd.buf_size = io_buf_len / fd.block_size;
++
++ // printf("block size = 0x%x, file size = %d\n", fd.block_size, fd.file_size);
++
++ return 0;
++}
++
++
++// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
++//
++// return:
++// 0: ok, -1: error
++//
++int open(char *name)
++{
++ return open32((uint32_t) name + comboot);
++}
++
++
++// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
++//
++// Note: buf is 32bit address
++//
++int read32(uint32_t buf, int size)
++{
++ x86regs_t r;
++ int i, len = 0;
++
++ while(size) {
++ i = fd.data_len - fd.buf_idx;
++
++ if(i > 0) {
++ i = i < size ? i : size;
++ memcpy32(buf, fd.buf + fd.buf_idx, i);
++ len += i;
++ buf += i;
++ size -= i;
++ fd.buf_idx += i;
++ }
++
++ if(!size || !fd.handle) break;
++
++ r.eax = 0x07; // Read file
++ r.ecx = fd.buf_size;
++ r.ebx = 0;
++ r.es = fd.buf >> 4;
++ r.esi = fd.handle;
++ x86int(0x22, &r);
++ fd.handle = r.esi;
++ fd.data_len = r.ecx;
++ fd.buf_idx = 0;
++ }
++
++ return len;
++}
++
++
++// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
++int read(void *buf, int size)
++{
++ return read32((uint32_t) buf + comboot, size);
++}
++
++
++// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
++int getc()
++{
++ char buf[1];
++
++ return read(buf, 1) ? *buf : EOF;
++}
++
++
++// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
++char *fgets(char *s, int size)
++{
++ char *buf = s;
++ int c = EOF;
++
++ while(size--) {
++ c = getc();
++ if(c == EOF) break;
++ *buf++ = c;
++ if(c == 0x0a) break;
++ }
++
++ *buf = 0;
++
++ return c == EOF && s == buf ? 0 : s;
++}
++
++
++// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
++int strlen(char *s)
++{
++ char *s0 = s + 1;
++
++ while(*s++);
++
++ return s - s0;
++}
++
++
++// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
++int strcmp(char *s1, char *s2)
++{
++ while(*s1 && *s1 == *s2) s1++, s2++;
++
++ return (uint8_t) *s1 - (uint8_t) *s2;
++}
++
++
++// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
++char *skip_spaces(char *s)
++{
++ while(*s && (*s == ' ' || *s == '\t')) s++;
++
++ return s;
++}
++
++
++// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
++char *skip_nonspaces(char *s)
++{
++ while(*s && *s != ' ' && *s != '\t') s++;
++
++ return s;
++}
++
++
++// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
++void chop_line(char *s)
++{
++ int i = strlen(s);
++
++ if(!i) return;
++
++ while(--i >= 0) {
++ if(s[i] == ' ' || s[i] == '\t' || s[i] == '\n') {
++ s[i] = 0;
++ }
++ else {
++ break;
++ }
++ }
++}
++
++
++// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
++int atoi(char *s)
++{
++ int i = 0, sign = 1;
++
++ if(*s == '-') s++, sign = -1;
++ if(*s == '+') s++;
++
++ while(*s >= '0' && *s <= '9') {
++ i = 10 * i + *s++ - '0';
++ }
++
++ return sign * i;
++}
++
++
++// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
++//
++// return:
++// config file name (32 bit address)
++//
++uint32_t get_config_file_name32()
++{
++ x86regs_t r;
++
++ r.eax = 0x0e; // Get configuration file name
++ x86int(0x22, &r);
++
++ return (r.es << 4) + (uint16_t) r.ebx;
++}
++
++
++// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
++// Read and parse syslinux config file.
++//
++// return:
++// 0: ok, 1: error
++//
++int read_config_file(void)
++{
++ char *s, *t, buf[MAX_CONFIG_LINE_LEN];
++ unsigned u;
++ int menu_idx = 0;
++
++ // clear memory before we start
++ memset32(menu_buf, 0, menu_buf_len);
++
++ if(open32(get_config_file_name32()) == -1) return 1;
++
++ while((s = fgets(buf, sizeof buf))) {
++ chop_line(s);
++ s = skip_spaces(s);
++ if(!*s || *s == '#') continue;
++ t = skip_nonspaces(s);
++ if(*t) *t++ = 0;
++ t = skip_spaces(t);
++
++ if(!strcmp(s, "timeout")) {
++ timeout = atoi(t);
++ }
++
++ if(!strcmp(s, "default")) {
++ u = strlen(t);
++ if(u > MENU_LABEL_SIZE - 1) u = MENU_LABEL_SIZE - 1;
++ memcpy32(menu_buf, comboot + (uint32_t) t, u);
++ }
++
++ if(!strcmp(s, "label")) {
++ menu_idx++;
++ if(menu_idx < MAX_MENU_ENTRIES) {
++ u = strlen(t);
++ if(u > MENU_LABEL_SIZE - 1) u = MENU_LABEL_SIZE - 1;
++ memcpy32(
++ menu_buf + menu_idx * MENU_LABEL_SIZE,
++ comboot + (uint32_t) t,
++ u
++ );
++ }
++ }
++
++ if(!strcmp(s, "append")) {
++ if(menu_idx < MAX_MENU_ENTRIES) {
++ u = strlen(t);
++ if(u > MENU_ARG_SIZE - 1) u = MENU_ARG_SIZE - 1;
++ memcpy32(
++ menu_buf + menu_idx * MENU_ARG_SIZE + MAX_MENU_ENTRIES * MENU_LABEL_SIZE,
++ comboot + (uint32_t) t,
++ u
++ );
++ }
++ }
++ }
++
++ menu.entries = menu_idx;
++ menu.label_size = MENU_LABEL_SIZE;
++ menu.arg_size = MENU_ARG_SIZE;
++ menu.default_entry = ((menu_buf >> 4) << 16) + (menu_buf & 0xf);
++ u = menu_buf + MENU_LABEL_SIZE;
++ menu.label_list = ((u >> 4) << 16) + (u & 0xf);
++ u = menu_buf + MAX_MENU_ENTRIES * MENU_LABEL_SIZE + MENU_ARG_SIZE;
++ menu.arg_list = ((u >> 4) << 16) + (u & 0xf);
++
++ return 0;
++}
++
++
++// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
++// Check header and return code start offset.
++//
++// Note: buf is 32bit address
++//
++unsigned magic_ok(uint32_t buf)
++{
++ if(
++ _mem32(buf) == 0x0b2d97f00 && /* magic id */
++ (_mem8(buf + 4) == 8) /* version 8 */
++ ) {
++ return _mem32(buf + 8);
++ }
++
++ return 0;
++}
++
++
++// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
++//
++// Search cpio archive for gfx file.
++//
++// Note: buf is 32bit address
++//
++unsigned find_file(uint32_t buf, unsigned len, unsigned *gfx_file_start, unsigned *file_len)
++{
++ unsigned i, fname_len, code_start = 0;
++
++ *gfx_file_start = 0;
++
++ for(i = 0; i < len;) {
++ if((len - i) >= 0x1a && _mem16(buf + i) == 0x71c7) {
++ fname_len = _mem16(buf + i + 20);
++ *file_len = _mem16(buf + i + 24) + (_mem16(buf + i + 22) << 16);
++ i += 26 + fname_len;
++ i = ((i + 1) & ~1);
++ if((code_start = magic_ok(buf + i))) {
++ *gfx_file_start = i;
++ return code_start;
++ }
++ i += *file_len;
++ i = ((i + 1) & ~1);
++ }
++ else {
++ break;
++ }
++ }
++
++ return code_start;
++}
++
++
++// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
++void gfx_cb(x86regs_t *r)
++{
++ uint8_t f_nr = r->eax;
++
++ switch(f_nr) {
++ case 0: // cb_status
++ // edx = filename buffer (64 bytes)
++ r->edx = comboot + (uint32_t) gfx.fname_buf;
++ r->eax = 0;
++ // printf("<0x%x, %p + 0x%x>", r->edx, gfx.fname_buf, comboot);
++ break;
++
++ case 1: // cb_fopen
++ // file name in gfx.fname_buf
++ // al = 0: ok, 1: file not found
++ // ecx = file length (al = 0)
++ if(open(gfx.fname_buf) == -1) {
++ r->eax = 1;
++ }
++ else {
++ r->eax = 0;
++ r->ecx = fd.file_size;
++ }
++ break;
++
++ case 2: // cb_fread
++ // edx = buffer address (linear)
++ // ecx = data length (< 64k)
++ if(!fd.handle) {
++ r->eax = r->ecx = 0;
++ break;
++ }
++ r->esi = fd.handle;
++ r->ebx = 0;
++ r->es = io_buf >> 4;
++ r->ecx = io_buf_len / fd.block_size;
++ r->eax = 7;
++ x86int(0x22, r);
++ fd.handle = r->esi;
++ if((r->eflags & X86_CF)) {
++ r->eax = 1;
++ }
++ else {
++ r->edx = io_buf;
++ r->eax = 0;
++ }
++ break;
++
++ case 3: // cb_getcwd
++ // edx filename
++ r->eax = 0x1f; // Get current working directory
++ x86int(0x22, r);
++ r->edx = (r->es << 4) + (uint16_t) r->ebx;
++ r->eax = 0;
++ break;
++
++ case 4: // cb_chdir
++ r->es = comboot >> 4;
++ r->ebx = (uint32_t) gfx.fname_buf;
++ r->eax = 0x25; // Get current working directory
++ x86int(0x22, r);
++ r->eax = (r->eflags & X86_CF) ? 1 : 0;
++ break;
++
++ case 5: // cb_readsector
++ // in: edx = sector
++ // out: edx = buffer (linear address)
++ r->esi = r->edi = 0;
++ r->ebx = 0;
++ r->es = io_buf >> 4;
++ r->ecx = 1;
++ r->eax = 0x19; // Read disk
++ x86int(0x22, r);
++ r->eax = 0;
++ r->edx = io_buf;
++ break;
++
++ case 6: // cb_mount
++ r->eax = 0x26;
++ x86int(0x22, r);
++ r->eax = (r->eflags & X86_CF) ? 1 : 0;
++ break;
++
++ default:
++ r->eax = 0xff;
++ }
++}
++
++
++// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
++//
++// return:
++// 0: ok, 1: error
++//
++int get_mem_info(mem_info_t *mi)
++{
++ x86regs_t r;
++
++ mi->base = mi->len = mi->type = 0;
++
++ r.eax = 0xe820;
++ r.edx = 0x534d4150;
++ r.ebx = mi->cont;
++ r.ecx = 20;
++ r.es = comboot >> 4;
++ r.edi = (unsigned) mi;
++ x86int(0x15, &r);
++
++ mi->cont = 0;
++ if(r.eax != 0x534d4150 || (r.eflags & X86_CF)) return 1;
++ mi->cont = r.ebx;
++
++ return 0;
++}
++
++
++// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
++//
++// return:
++// 0: ok, 1: error
++//
++int gfx_init(char *file)
++{
++ x86regs_t r;
++ int file_max, file_size, ofs;
++ unsigned u, code_start, file_start = 0, file_len = 0;
++ unsigned start2, len2, end2;
++ mem_info_t mi;
++
++ gfx_config.mem0_start = freemem;
++ gfx_config.mem0_end = freemem + freemem_len;
++
++ kernel_start = (GFX_MEMORY_START + GFX_MEMORY_SIZE) << 20;
++ initrd_end = 0;
++
++ gfx_config.xmem_0 = (GFX_MEMORY_START << 4) + GFX_MEMORY_SIZE;
++
++ r.eax = 0x28; // Get memory size
++ x86int(0x22, &r);
++ u = (r.eflags & X86_CF) ? 0 : r.eax;
++
++ // round up
++ gfx_config.bios_mem_size = u ? ((u + 0xfffff) >> 20) << 20 : 256;
++
++ if(u > 0) {
++ // new interface
++
++ if(u < INITRD_MIN_MEMORY << 20) {
++ // ok, maybe there is a bigger block...
++
++ mi.cont = 0;
++ start2 = len2 = 0;
++ while(!get_mem_info(&mi)) {
++#if 0
++ printf(
++ "%08x%08x %08x%08x %08x %08x\n",
++ (unsigned) (mi.base >> 32), (unsigned) mi.base,
++ (unsigned) (mi.len >> 32), (unsigned) mi.len,
++ mi.type, mi.cont
++ );
++#endif
++ if(mi.type == 1) {
++ if((mi.base >> 32) || (mi.base + mi.len) >> 32) break;
++ if(mi.len > len2) {
++ start2 = mi.base;
++ len2 = mi.len;
++ }
++ }
++
++ if(!mi.cont) break;
++ }
++
++#if 0
++ printf("largest: %08x %08x\n", start2, len2);
++ getchar();
++#endif
++
++ if(len2 && len2 > 2 << 20 && len2 > u) {
++ // align to full MBs
++ end2 = (start2 + len2) & ~0xfffff;
++ start2 = (start2 + 0xfffff) & ~0xfffff;
++ len2 = end2 - start2;
++ }
++ else {
++ start2 = len2 = 0;
++ }
++
++ if(len2) {
++ u = len2;
++ initrd_end = end2;
++ // we could relocate the kernel as well...
++ // kernel_start = start2;
++ }
++ }
++
++ if(u < INITRD_MIN_MEMORY << 20) {
++ // a bit too small for us
++ printf("%u MB RAM is a bit small... - giving up\n", u >> 20);
++
++ return 1;
++ }
++ }
++
++#if 0
++ printf("mem = 0x%05x, mem0_start = 0x%05x, mem0_end = 0x%05x\n",
++ gfx.mem, gfx_config.mem0_start, gfx_config.mem0_end
++ );
++#endif
++
++ if(open(file) == -1) return 1;
++
++ // leave room for later alignment
++ gfx_config.archive_start = gfx_config.mem0_start + 0x10;
++
++ // read at most that much
++ file_size = file_max = gfx_config.mem0_end - gfx_config.archive_start;
++
++ if(fd.file_size != -1 && fd.file_size > file_size) return 1;
++
++ // if we have the real size, use it
++ if(fd.file_size != -1) file_size = fd.file_size;
++
++ file_size = read32(gfx_config.archive_start, file_size);
++
++ if(!file_size || file_size == file_max) return 1;
++
++ gfx_config.archive_end = gfx_config.archive_start + file_size;
++
++ // update free mem pointer & align it a bit
++ gfx_config.mem0_start = (gfx_config.archive_end + 3) & ~3;
++
++ // locate file inside cpio archive
++ if(!(code_start = find_file(gfx_config.archive_start, file_size, &file_start, &file_len))) {
++ printf("%s: invalid file format\n", file);
++
++ return 1;
++ }
++
++#if 0
++ printf("code_start = 0x%x, archive_start = 0x%x, file size = 0x%x, file_start = 0x%x, file_len = 0x%x\n",
++ code_start, gfx_config.archive_start, file_size, file_start, file_len
++ );
++#endif
++
++ if((ofs = (gfx_config.archive_start + file_start + code_start) & 0xf)) {
++ printf("oops: needs to be aligned!\n");
++
++ memcpy32(gfx_config.archive_start - ofs, gfx_config.archive_start, file_size);
++ gfx_config.archive_start -= ofs;
++ gfx_config.archive_end -= ofs;
++
++ return 1;
++ }
++
++ gfx_config.file = gfx_config.archive_start + file_start;
++ gfx.code_seg = (gfx_config.file + code_start) >> 4;
++
++ for(u = 0; u < sizeof gfx.jmp_table / sizeof *gfx.jmp_table; u++) {
++ gfx.jmp_table[u] = (gfx.code_seg << 16) + _mem16(gfx_config.file + code_start + 2 * u);
++ }
++
++#if 0
++ for(u = 0; u < sizeof gfx.jmp_table / sizeof *gfx.jmp_table; u++) {
++ printf("%d: 0x%08x\n", u, gfx.jmp_table[u]);
++ }
++#endif
++
++ // we are ready to start
++
++ r.esi = comboot + (uint32_t) &gfx_config;
++ farcall(gfx.jmp_table[GFX_BC_INIT], &r);
++
++ if((r.eflags & X86_CF)) {
++ printf("graphics initialization failed\n");
++
++ return 1;
++ }
++
++ return 0;
++}
++
++
++// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
++void gfx_done()
++{
++ x86regs_t r;
++
++ farcall(gfx.jmp_table[GFX_BC_DONE], &r);
++}
++
++
++// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
++//
++// return:
++// boot menu index (-1: go to text mode prompt)
++//
++int gfx_input()
++{
++ x86regs_t r;
++
++ r.edi = comboot + (uint32_t) cmdline;
++ r.ecx = sizeof cmdline;
++ r.eax = timeout * 182 / 100;
++ timeout = 0; // use timeout only first time
++ farcall(gfx.jmp_table[GFX_BC_INPUT], &r);
++ if((r.eflags & X86_CF)) r.eax = 1;
++
++ if(r.eax == 1) return -1;
++
++ return r.ebx;
++}
++
++
++// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
++int gfx_menu_init()
++{
++ x86regs_t r;
++
++ r.esi = comboot + (uint32_t) &menu;
++ farcall(gfx.jmp_table[GFX_BC_MENU_INIT], &r);
++
++ return 0;
++}
++
++
++// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
++void gfx_infobox(int type, char *str1, char *str2)
++{
++ gfx_infobox32(type, comboot + (uint32_t) str1, str2 ? comboot + (uint32_t) str2 : 0);
++}
++
++
++// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
++void gfx_infobox32(int type, uint32_t str1, uint32_t str2)
++{
++ x86regs_t r;
++
++ r.eax = type;
++ r.esi = str1;
++ r.edi = str2;
++ farcall(gfx.jmp_table[GFX_BC_INFOBOX_INIT], &r);
++ r.edi = r.eax = 0;
++ farcall(gfx.jmp_table[GFX_BC_INPUT], &r);
++ farcall(gfx.jmp_table[GFX_BC_INFOBOX_DONE], &r);
++}
++
++
++// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
++// Load & run kernel.
++//
++// Returns only on error.
++//
++void boot()
++{
++ x86regs_t r;
++
++ r.es = comboot >> 4;
++ r.ebx = (uint32_t) cmdline;
++ r.edi = kernel_start; // kernel load address
++ r.edx = initrd_end; // end of initrd load area (or 0)
++ r.esi = (uint32_t) _syslinux_hook; // cs:si = syslinux callbacks
++ r.eax = 0x27; // Load & run kernel (extended API)
++
++ x86int(0x22, &r);
++ if(!(r.eflags & X86_CF)) return;
++
++ r.es = comboot >> 4;
++ r.ebx = (uint32_t) cmdline;
++ r.eax = 3; // Run command
++ x86int(0x22, &r);
++}
++
++
++// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
++void syslinux_hook(x86regs_t *r)
++{
++ uint8_t f_nr = r->eax;
++
++ // bit 7: 0/1 continue/don't continue kernel loading in syslinux
++
++ switch(f_nr & 0x7f) {
++ case 0: // abort kernel/initrd loading
++ gfx_infobox(0, "abort kernel loading", 0);
++ break;
++
++ case 1: // kernel/initrd not found
++ gfx_infobox(0, "kernel not found: ", current_label);
++ break;
++
++ case 2: // kernel corrupt
++ gfx_infobox(0, "kernel broken", 0);
++ break;
++
++ case 3: // out of memory (while initrd loading)
++ gfx_infobox(0, "out of memory", 0);
++ break;
++
++ case 4: // progress start
++ r->eax = r->ecx >> gfx_config.sector_shift; // kernel size in sectors
++ r->esi = comboot + (uint32_t) current_label;
++ farcall(gfx.jmp_table[GFX_BC_PROGRESS_INIT], r);
++ break;
++
++ case 5: // progress increment
++ // always 64k
++ r->eax = 0x10000 >> gfx_config.sector_shift;
++ farcall(gfx.jmp_table[GFX_BC_PROGRESS_UPDATE], r);
++ break;
++
++ case 6: // progress end: kernel loaded, stop gfxboot
++ farcall(gfx.jmp_table[GFX_BC_PROGRESS_DONE], r);
++ gfx_done();
++ break;
++
++ case 7: // stop gfxboot
++ gfx_done();
++ break;
++ }
++}
++
++
++// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
++void show_message(char *file)
++{
++ int c;
++
++ if(open(file) == -1) return;
++
++ while((c = getc()) != EOF) {
++ if(c < ' ' && c != '\n' && c != '\t') continue;
++ printf("%c", c);
++ }
++}
++
++
+diff --git a/modules/libio.asm b/modules/libio.asm
+new file mode 100644
+index 0000000..1f77b44
+--- /dev/null
++++ b/modules/libio.asm
+@@ -0,0 +1,854 @@
++;
++; libio.asm
++;
++; A very minimalistic libc fragment.
++;
++; Copyright (c) 2009 Steffen Winterfeldt.
++;
++; 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, Inc., 53 Temple Place Ste 330, Boston MA 02111-1307,
++; USA; either version 2 of the License, or (at your option) any later
++; version; incorporated herein by reference.
++;
++
++
++; max argv elements passed to main()
++%define MAX_ARGS 8
++
++
++ bits 16
++
++; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
++; interface functions
++;
++; Make sure not to modify registers!
++;
++
++ global printf
++ global getchar
++ global clrscr
++ global memcpy
++ global memcpy32
++ global memset
++ global memset32
++ global x86int
++ global farcall
++ global reboot
++
++ global _gfx_cb
++ extern gfx_cb
++ global _syslinux_hook
++ extern syslinux_hook
++
++ global _start
++ extern _main
++
++ extern __bss_start
++
++ section .init
++
++_start:
++ cld
++
++ ; clear static memory
++ mov di,__bss_start
++ mov cx,sp
++ sub cx,di
++ xor ax,ax
++ rep stosb
++
++ ; parse args
++ mov ebx,80h
++ movzx si,byte [bx]
++ mov byte [si+81h],0dh ; just make sure
++ xor ecx,ecx
++ sub sp,MAX_ARGS * 4
++ mov ebp,esp
++ inc cx
++cmd_10:
++ inc bx
++ call skip_spaces
++ cmp al,0dh
++ jz cmd_60
++ imul si,cx,4
++ mov [bp+si],ebx
++ call skip_nonspaces
++ mov byte [bx],0
++ inc cx
++ cmp cx,MAX_ARGS
++ jae cmd_60
++ cmp al,0dh
++ jnz cmd_10
++cmd_60:
++ mov byte [bx],0
++
++ mov [bp],ebx ; argv[0] = ""
++
++ push ebp
++ push ecx
++
++ call dword _main
++
++ add sp,MAX_ARGS * 4 + 8
++
++ ret
++
++; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
++skip_spaces:
++ mov al,[bx]
++ cmp al,0dh
++ jz skip_spaces_90
++ cmp al,' '
++ jz skip_spaces_10
++ cmp al,9
++ jnz skip_spaces_90
++skip_spaces_10:
++ inc bx
++ jmp skip_spaces
++skip_spaces_90:
++ ret
++
++skip_nonspaces:
++ mov al,[bx]
++ cmp al,0dh
++ jz skip_nonspaces_90
++ cmp al,' '
++ jz skip_nonspaces_90
++ cmp al,9
++ jz skip_nonspaces_90
++ inc bx
++ jmp skip_nonspaces
++skip_nonspaces_90:
++ ret
++
++
++; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
++ section .text
++
++; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
++; Write text to console.
++;
++; args on stack
++;
++; Note: 32 bit call/ret!
++;
++printf:
++ mov [pf_args],sp
++
++ pushad
++
++ call pf_next_arg
++ call pf_next_arg
++ mov si,ax
++printf_10:
++ lodsb
++ or al,al
++ jz printf_90
++ cmp al,'%'
++ jnz printf_70
++ mov byte [pf_pad],' '
++ lodsb
++ dec si
++ cmp al,'0'
++ jnz printf_20
++ mov [pf_pad],al
++printf_20:
++ call get_number
++ mov [pf_num],ecx
++ lodsb
++ or al,al
++ jz printf_90
++ cmp al,'%'
++ jz printf_70
++
++ cmp al,'S'
++ jnz printf_23
++ mov byte [pf_raw_char],1
++ jmp printf_24
++printf_23:
++ cmp al,'s'
++ jnz printf_30
++printf_24:
++ push si
++
++ call pf_next_arg
++ mov si,ax
++ call puts
++
++ sub ecx,[pf_num]
++ neg ecx
++ mov al,' '
++ call putc_n
++
++ pop si
++
++ mov byte [pf_raw_char],0
++ jmp printf_10
++
++printf_30:
++ cmp al,'u'
++ jnz printf_35
++
++ mov dx,10
++printf_31:
++ push si
++
++ call pf_next_arg
++ or dh,dh
++ jz printf_34
++ test eax,eax
++ jns printf_34
++ neg eax
++ push eax
++ mov al,'-'
++ call putc
++ pop eax
++printf_34:
++ mov cl,[pf_num]
++ mov ch,[pf_pad]
++ call number
++ call puts
++
++ pop si
++
++ jmp printf_10
++
++printf_35:
++ cmp al,'x'
++ jnz printf_36
++
++printf_35a:
++ mov dx,10h
++ jmp printf_31
++
++printf_36:
++ cmp al,'d'
++ jnz printf_37
++printf_36a:
++ mov dx,10ah
++ jmp printf_31
++
++printf_37:
++ cmp al,'i'
++ jz printf_36a
++
++ cmp al,'p'
++ jnz printf_40
++ mov al,'0'
++ call putc
++ mov al,'x'
++ call putc
++ jmp printf_35a
++
++printf_40:
++ cmp al,'c'
++ jnz printf_45
++
++ push si
++ call pf_next_arg
++ call putc
++ pop si
++ jmp printf_10
++printf_45:
++
++ ; more ...
++
++
++printf_70:
++ call putc
++ jmp printf_10
++printf_90:
++ popad
++
++ o32 ret
++
++
++; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
++; Get next printf arg from [pf_args].
++;
++; return:
++; eax arg
++;
++; changes no regs
++;
++pf_next_arg:
++ movzx eax,word [pf_args]
++ add word [pf_args],4
++ mov eax,[eax]
++ ret
++
++
++; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
++; Convert string to number.
++;
++; si string
++;
++; return:
++; ecx number
++; si points past number
++; CF not a number
++;
++get_number:
++
++ xor ecx,ecx
++ mov ah,1
++get_number_10:
++ lodsb
++ or al,al
++ jz get_number_90
++ sub al,'0'
++ jb get_number_90
++ cmp al,9
++ ja get_number_90
++ movzx eax,al
++ imul ecx,ecx,10
++ add ecx,eax
++ jmp get_number_10
++get_number_90:
++ dec si
++ shr ah,1
++ ret
++
++
++; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
++; Convert a number to string.
++;
++; eax number
++; cl field size
++; ch padding char
++; dl base
++;
++; return:
++; si string
++;
++number:
++ mov di,num_buf
++ push ax
++ push cx
++ mov al,ch
++ mov cx,num_buf_end - num_buf
++ rep stosb
++ pop cx
++ pop ax
++ movzx cx,cl
++ movzx ebx,dl
++number_10:
++ xor edx,edx
++ div ebx
++ cmp dl,9
++ jbe number_20
++ add dl,27h
++number_20:
++ add dl,'0'
++ dec edi
++ mov [di],dl
++ or eax,eax
++ jz number_30
++ cmp di,num_buf
++ ja number_10
++number_30:
++ mov si,di
++ or cx,cx
++ jz number_90
++ cmp cx,num_buf_end - num_buf
++ jae number_90
++ mov si,num_buf_end
++ sub si,cx
++number_90:
++ ret
++
++
++; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
++; Write string.
++;
++; si text
++;
++; return:
++; cx length
++;
++puts:
++ xor cx,cx
++puts_10:
++ lodsb
++ or al,al
++ jz puts_90
++ call putc
++ inc cx
++ jmp puts_10
++puts_90:
++ ret
++
++
++; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
++; Write char multiple times.
++;
++; al char
++; cx count (does nothing if count <= 0)
++;
++putc_n:
++ cmp cx,0
++ jle putc_n_90
++ call putc
++ dec cx
++ jmp putc_n
++putc_n_90:
++ ret
++
++
++; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
++; Print char.
++;
++; al char
++;
++putc:
++ pusha
++ cmp al,0ah
++ jnz putc_30
++ push ax
++ mov al,0dh
++ call putc_50
++ pop ax
++putc_30:
++ call putc_50
++ popa
++ ret
++putc_50:
++ mov bx,7
++ mov ah,0eh
++ int 10h
++ ret
++
++
++; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
++; Read char from stdin.
++;
++; return:
++; eax char
++;
++; Note: 32 bit call/ret!
++;
++getchar:
++ pushad
++ mov ah,10h
++ int 16h
++ mov [gc_tmp],al
++ popad
++ movzx eax,byte [gc_tmp]
++ o32 ret
++
++
++; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
++; Clear screen.
++;
++; Note: 32 bit call/ret!
++;
++clrscr:
++ pushad
++ push es
++ push word 40h
++ pop es
++ mov ax,600h
++ mov bh,7
++ xor cx,cx
++ mov dl,[es:4ah]
++ or dl,dl
++ jnz clrscr_20
++ mov dl,80
++clrscr_20:
++ dec dl
++ mov dh,[es:84h]
++ or dh,dh
++ jnz clrscr_30
++ mov dh,24
++clrscr_30:
++ int 10h
++ mov ah,2
++ mov bh,[es:62h]
++ xor dx,dx
++ int 10h
++ pop es
++ popad
++ o32 ret
++
++
++; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
++; dst = memcpy(dst, src, size).
++;
++; args on stack
++;
++; return:
++; eax dst
++;
++; Note: 32 bit call/ret!
++;
++memcpy:
++ pushad
++
++ mov edi,[esp+0x20+4]
++ mov esi,[esp+0x20+8]
++ mov ecx,[esp+0x20+12]
++
++ rep movsb
++
++ popad
++
++ mov eax,[esp+4]
++
++ o32 ret
++
++
++; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
++; dst = memset(dst, val, size).
++;
++; args on stack
++;
++; return:
++; eax dst
++;
++; Note: 32 bit call/ret!
++;
++memset:
++ pushad
++
++ mov edi,[esp+0x20+4]
++ mov al,[esp+0x20+8]
++ mov ecx,[esp+0x20+12]
++
++ rep stosb
++
++ popad
++
++ mov eax,[esp+4]
++
++ o32 ret
++
++
++; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
++; dst = memset32(dst, val, size).
++;
++; args on stack
++;
++; return:
++; eax dst
++;
++; Note: 32 bit call/ret!
++;
++memset32:
++ pushad
++
++ push es
++
++ mov ebx,[esp+0x22+4] ; edi
++ mov al,[esp+0x22+8]
++ mov edx,[esp+0x22+12]
++
++memset32_20:
++ mov edi,ebx
++ mov ecx,ebx
++ and di,0fh
++ shr ecx,4
++ mov es,cx
++
++ mov ecx,0fff0h
++ cmp edx,ecx
++ ja memset32_40
++ mov ecx,edx
++memset32_40:
++ add ebx,ecx
++ sub edx,ecx
++
++ rep stosb
++
++ jnz memset32_20
++
++ pop es
++
++ popad
++
++ mov eax,[esp+4]
++
++ o32 ret
++
++
++; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
++; dst = memcpy32(dst, src, size).
++;
++; dst, src are 32bit linear addresses
++;
++; args on stack
++;
++; return:
++; eax dst
++;
++; Note: 32 bit call/ret!
++;
++memcpy32:
++ pushad
++
++ push ds
++ push es
++
++ mov ebx,[esp+0x24+4] ; edi
++ mov eax,[esp+0x24+8] ; esi
++ mov edx,[esp+0x24+12]
++
++memcpy32_20:
++ mov edi,ebx
++ mov ecx,ebx
++ and di,0fh
++ shr ecx,4
++ mov es,cx
++
++ mov esi,eax
++ mov ecx,eax
++ and si,0fh
++ shr ecx,4
++ mov ds,cx
++
++ mov ecx,0fff0h
++ cmp edx,ecx
++ ja memcpy32_40
++ mov ecx,edx
++memcpy32_40:
++ add ebx,ecx
++ add eax,ecx
++ sub edx,ecx
++
++ rep movsb
++
++ jnz memcpy32_20
++
++ pop es
++ pop ds
++
++ popad
++
++ mov eax,[esp+4]
++
++ o32 ret
++
++
++; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
++; x86int(int, *regs).
++;
++; args on stack
++;
++; Note: 32 bit call/ret!
++;
++x86int:
++ pushad
++
++ mov al,[esp+0x20+4]
++ mov [x86int_p],al
++ mov ebx,[esp+0x20+8]
++
++ mov ecx,[bx+8]
++ mov edx,[bx+0ch]
++ mov esi,[bx+10h]
++ mov edi,[bx+14h]
++ mov ebp,[bx+18h]
++ mov ah,[bx+1ch] ; eflags
++ sahf
++ mov eax,[bx]
++
++ mov es,[bx+22h]
++ mov fs,[bx+24h]
++ mov gs,[bx+26h]
++ mov ds,[bx+20h]
++
++ mov ebx,[cs:bx+4]
++
++ int 0h
++x86int_p equ $-1
++
++ push ebx
++ mov ebx,[esp+0x24+8]
++ pop dword [cs:bx+4]
++
++ mov [cs:bx],eax
++ mov [cs:bx+20h],ds
++
++ mov ax,cs
++ mov ds,ax
++
++ mov [cs:bx+22h],es
++ mov [cs:bx+24h],fs
++ mov [cs:bx+26h],gs
++
++ mov es,ax
++ mov fs,ax
++ mov gs,ax
++
++ mov [bx+8],ecx
++ mov [bx+0ch],edx
++ mov [bx+10h],esi
++ mov [bx+14h],edi
++ mov [bx+18h],ebp
++ pushfd
++ pop dword [bx+1ch]
++
++ popad
++
++ o32 ret
++
++
++; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
++; farcall(addr, *regs).
++;
++; args on stack
++;
++; Note: 32 bit call/ret!
++;
++farcall:
++ pushad
++
++ mov ebx,[esp+0x20+8]
++
++ mov ecx,[bx+8]
++ mov edx,[bx+0ch]
++ mov esi,[bx+10h]
++ mov edi,[bx+14h]
++ mov ebp,[bx+18h]
++ mov ah,[bx+1ch] ; eflags
++ sahf
++ mov eax,[bx]
++
++ mov [farcall_stack],sp
++ sub word [farcall_stack],1000h ; 4k stack should be enough for gfxboot
++ mov [farcall_stack+2],ss
++
++ mov es,[bx+22h]
++ mov fs,[bx+24h]
++ mov gs,[bx+26h]
++ mov ds,[bx+20h]
++
++ mov ebx,[cs:bx+4]
++
++ call far [esp+0x20+4]
++
++ push ebx
++ mov ebx,[esp+0x24+8]
++ pop dword [cs:bx+4]
++
++ mov [cs:bx],eax
++ mov [cs:bx+20h],ds
++
++ mov ax,cs
++ mov ds,ax
++
++ mov [cs:bx+22h],es
++ mov [cs:bx+24h],fs
++ mov [cs:bx+26h],gs
++
++ mov es,ax
++ mov fs,ax
++ mov gs,ax
++
++ mov [bx+8],ecx
++ mov [bx+0ch],edx
++ mov [bx+10h],esi
++ mov [bx+14h],edi
++ mov [bx+18h],ebp
++ pushfd
++ pop dword [bx+1ch]
++
++ popad
++
++ o32 ret
++
++; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
++; wrapper around gfx_cb()
++;
++; we need to switch stack to ensure ss = cs = ds = es for gcc
++;
++_gfx_cb:
++ push cs
++ pop ds
++ push cs
++ pop es
++ mov [cb_stack],sp
++ mov [cb_stack+2],ss
++ lss sp,[farcall_stack]
++ sub sp,28h ; sizeof x86regs_t
++ mov [esp+18h],ebp
++ mov ebp,esp
++ push ebp
++ mov [bp],eax
++ mov [bp+4],ebx
++ mov [bp+8],ecx
++ mov [bp+0ch],edx
++ mov [bp+10h],esi
++ mov [bp+14h],edi
++ call dword gfx_cb
++ lea ebp,[esp+4]
++ mov eax,[bp]
++ mov ebx,[bp+4]
++ mov ecx,[bp+8]
++ mov edx,[bp+0ch]
++ mov esi,[bp+10h]
++ mov edi,[bp+14h]
++ mov ebp,[bp+18h]
++ lss sp,[cb_stack]
++ retf
++
++
++; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
++; wrapper around syslinux_hook()
++;
++; ensure cs = ds = es for gcc
++;
++_syslinux_hook:
++ push cs
++ pop ds
++ push cs
++ pop es
++ sub sp,28h ; sizeof x86regs_t
++ mov [esp+18h],ebp
++ mov ebp,esp
++ push ebp
++ mov [bp],eax
++ mov [bp+4],ebx
++ mov [bp+8],ecx
++ mov [bp+0ch],edx
++ mov [bp+10h],esi
++ mov [bp+14h],edi
++ call dword syslinux_hook
++ lea ebp,[esp+4]
++ mov eax,[bp]
++ mov ebx,[bp+4]
++ mov ecx,[bp+8]
++ mov edx,[bp+0ch]
++ mov esi,[bp+10h]
++ mov edi,[bp+14h]
++ mov ebp,[bp+18h]
++ add sp,28h+4
++ retf
++
++; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
++reboot:
++ mov word [472h],1234h
++ jmp 0ffffh:0
++ int 19h
++ jmp $
++
++
++; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
++ section .data
++
++farcall_stack dd 0
++cb_stack dd 0
++
++; buffer for number conversions
++; must be large enough for ps_status_info()
++num_buf times 23h db 0
++num_buf_end db 0
++
++; temp data for printf
++pf_args dw 0
++pf_num dd 0
++pf_sig db 0
++pf_pad db 0
++pf_raw_char db 0
++gc_tmp db 0
++
+diff --git a/modules/libio.h b/modules/libio.h
+new file mode 100644
+index 0000000..16af520
+--- /dev/null
++++ b/modules/libio.h
+@@ -0,0 +1,133 @@
++/*
++ *
++ * libio.h include file for libio
++ *
++ * Copyright (c) 2009 Steffen Winterfeldt.
++ *
++ * 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, Inc., 53 Temple Place Ste 330, Boston MA
++ * 02111-1307, USA; either version 2 of the License, or (at your option) any
++ * later version; incorporated herein by reference.
++ *
++ */
++
++#ifndef _LIBIO_H
++#define _LIBIO_H
++
++
++asm(".code16gcc\n");
++
++
++#define int8_t char
++#define int16_t short
++#define int32_t int
++#define int64_t long long
++#define uint8_t unsigned char
++#define uint16_t unsigned short
++#define uint32_t unsigned
++#define uint64_t unsigned long long
++
++#define X86_CF 0x0001
++#define X86_PF 0x0004
++#define X86_AF 0x0010
++#define X86_ZF 0x0040
++#define X86_SF 0x0080
++#define X86_TF 0x0100
++#define X86_IF 0x0200
++#define X86_DF 0x0400
++#define X86_OF 0x0800
++
++#define EOF -1
++
++#define main _main
++
++
++typedef struct __attribute ((packed)) {
++ uint32_t eax, ebx, ecx, edx, esi, edi, ebp, eflags;
++ uint16_t ds, es, fs, gs;
++} x86regs_t;
++
++
++static inline uint16_t comboot_seg(void)
++{
++ uint16_t u;
++
++ asm("mov %%cs, %0" : "=r" (u));
++
++ return u;
++}
++
++
++static inline uint8_t _mem8(uint32_t p)
++{
++ uint8_t u;
++
++ asm(
++ "movl %1,%%esi\n"
++ "shrl $4,%%esi\n"
++ "mov %%si,%%fs\n"
++ "movl %1,%%esi\n"
++ "and $15, %%si\n"
++ "movb %%fs:(%%si),%0\n"
++ : "=abcd" (u) : "r" (p) : "si"
++ );
++
++ return u;
++}
++
++
++static inline uint16_t _mem16(uint32_t p)
++{
++ uint16_t u;
++
++ asm(
++ "movl %1,%%esi\n"
++ "shrl $4,%%esi\n"
++ "mov %%si,%%fs\n"
++ "movl %1,%%esi\n"
++ "and $15, %%si\n"
++ "movw %%fs:(%%si),%0\n"
++ : "=r" (u) : "r" (p) : "si"
++ );
++
++ return u;
++}
++
++
++static inline uint32_t _mem32(uint32_t p)
++{
++ uint32_t u;
++
++ asm(
++ "movl %1,%%esi\n"
++ "shrl $4,%%esi\n"
++ "mov %%si,%%fs\n"
++ "movl %1,%%esi\n"
++ "and $15, %%si\n"
++ "movl %%fs:(%%si),%0\n"
++ : "=r" (u) : "r" (p) : "si"
++ );
++
++ return u;
++}
++
++
++int _main(int argc, char **argv);
++void printf(char *format, ...) __attribute__ ((format (printf, 1, 2)));
++int getchar(void);
++void clrscr(void);
++void *memcpy(void *dest, const void *src, int n);
++uint32_t memcpy32(uint32_t dest, uint32_t src, int n);
++void *memset(void *dest, int c, int n);
++uint32_t memset32(uint32_t dest, int c, int n);
++void x86int(unsigned intr, x86regs_t *regs);
++void farcall(uint32_t seg_ofs, x86regs_t *regs);
++void gfx_cb(x86regs_t *r);
++void _gfx_cb(void);
++void syslinux_hook(x86regs_t *r);
++void _syslinux_hook(void);
++void reboot(void);
++
++#endif /* _LIBIO_H */
++
diff --git a/patches/syslinux-3.83/01_isolinux_mount_chdir.diff b/patches/syslinux-3.83/01_isolinux_mount_chdir.diff
new file mode 100644
index 0000000..3881586
--- /dev/null
+++ b/patches/syslinux-3.83/01_isolinux_mount_chdir.diff
@@ -0,0 +1,175 @@
+diff --git a/core/isolinux.asm b/core/isolinux.asm
+index 2627c2d..a0910fb 100644
+--- a/core/isolinux.asm
++++ b/core/isolinux.asm
+@@ -1135,73 +1135,23 @@ all_read:
+ ; (which will be at 16 only for a single-session disk!); from the PVD
+ ; we should be able to find the rest of what we need to know.
+ ;
+-get_fs_structures:
+- mov eax,[bi_pvd]
+- mov bx,trackbuf
+- call getonesec
+-
+- mov eax,[trackbuf+156+2]
+- mov [RootDir+dir_lba],eax
+- mov [CurrentDir+dir_lba],eax
+-%ifdef DEBUG_MESSAGES
+- mov si,dbg_rootdir_msg
+- call writemsg
+- call writehex8
+- call crlf
+-%endif
+- mov eax,[trackbuf+156+10]
+- mov [RootDir+dir_len],eax
+- mov [CurrentDir+dir_len],eax
+- add eax,SECTOR_SIZE-1
+- shr eax,SECTOR_SHIFT
+- mov [RootDir+dir_clust],eax
+- mov [CurrentDir+dir_clust],eax
+-
+- ; Look for an isolinux directory, and if found,
+- ; make it the current directory instead of the root
+- ; directory.
+- ; Also copy the name of the directory to CurrentDirName
+- mov word [CurrentDirName],ROOT_DIR_WORD ; Write '/',0 to the CurrentDirName
++ call iso_mount
+ mov di,boot_dir ; Search for /boot/isolinux
+- mov al,02h
+- push di
+- call searchdir_iso
+- pop di
+- jnz .found_dir
+- mov di,isolinux_dir
+- mov al,02h ; Search for /isolinux
+- push di
+- call searchdir_iso
+- pop di
+- jz .no_isolinux_dir
++ call setcwd
++ jnc .found_dir
++ mov di,isolinux_dir ; Search for /isolinux
++ call setcwd
+ .found_dir:
+- ; Copy current directory name to CurrentDirName
+- push si
+- push di
+- mov si,di
+- mov di,CurrentDirName
+- call strcpy
+- mov byte [di],0 ;done in case it's not word aligned
+- dec di
+- mov byte [di],'/'
+- pop di
+- pop si
+
+- mov [CurrentDir+dir_len],eax
+- mov eax,[si+file_left]
+- mov [CurrentDir+dir_clust],eax
+- xor eax,eax ; Free this file pointer entry
+- xchg eax,[si+file_sector]
+- mov [CurrentDir+dir_lba],eax
+ %ifdef DEBUG_MESSAGES
+ push si
+ mov si,dbg_isodir_msg
+ call writemsg
+ pop si
++ mov eax,[CurrentDir+dir_lba]
+ call writehex8
+ call crlf
+ %endif
+-.no_isolinux_dir:
+
+ ;
+ ; Locate the configuration file
+@@ -1706,6 +1656,90 @@ getfssec:
+ TRACER 'f'
+ ret
+
++;
++; setcwd: Set current working directory.
++;
++; On entry:
++; DI -> directory name
++; On exit:
++; CF = 1 -> error
++;
++; On error, the old working directory is kept.
++;
++setcwd:
++ mov al,02h
++ push di
++ call searchdir_iso
++ pop di
++ stc
++ jz .err
++ mov [CurrentDir+dir_len],eax
++ mov eax,[si+file_left]
++ mov [CurrentDir+dir_clust],eax
++ xor eax,eax
++ xchg eax,[si+file_sector]
++ mov [CurrentDir+dir_lba],eax
++ mov si,di
++ mov di,CurrentDirName
++ cmp si,di
++ jz .ok
++ mov cx,FILENAME_MAX
++ push ds
++ pop es
++.copy:
++ lodsb
++ stosb
++ or al,al
++ loopnz .copy
++ mov byte [di-1],0
++ jnz .err
++.ok:
++ clc
++.err:
++ ret
++
++;
++; Read fs meta data and setup RootDir and CurrentDir.
++;
++; On exit:
++; CF = 1 -> error
++;
++iso_mount:
++ mov eax,[bi_pvd]
++ mov bx,trackbuf
++ call getonesec
++
++ mov eax,[trackbuf+156+10]
++ mov [RootDir+dir_len],eax
++ add eax,SECTOR_SIZE-1
++ shr eax,SECTOR_SHIFT
++ mov [RootDir+dir_clust],eax
++ mov eax,[trackbuf+156+2]
++ mov [RootDir+dir_lba],eax
++
++ push ds
++ pop es
++ mov si,RootDir
++ mov di,CurrentDir
++ mov cx,dir_t_size
++ rep movsb
++
++%ifdef DEBUG_MESSAGES
++ mov si,dbg_rootdir_msg
++ call writemsg
++ call writehex8
++ call crlf
++%endif
++
++ mov di,CurrentDirName
++ call setcwd
++ jnc .ok
++ mov word [CurrentDirName],ROOT_DIR_WORD
++.ok:
++ clc
++ ret
++
++
+ ; -----------------------------------------------------------------------------
+ ; Common modules
+ ; -----------------------------------------------------------------------------
diff --git a/patches/syslinux-3.83/02_comboot_hooks.diff b/patches/syslinux-3.83/02_comboot_hooks.diff
new file mode 100644
index 0000000..52c9465
--- /dev/null
+++ b/patches/syslinux-3.83/02_comboot_hooks.diff
@@ -0,0 +1,117 @@
+diff --git a/core/abort.inc b/core/abort.inc
+index 5b16b9d..cc59fa7 100644
+--- a/core/abort.inc
++++ b/core/abort.inc
+@@ -24,6 +24,10 @@
+ ; assumes CS == DS
+ ;
+ dot_pause:
++ push ax
++ mov al,5
++ call [comboot_hook]
++ pop ax
+ push si
+ mov si,dot_msg
+ call writestr_qchk
+@@ -63,6 +67,8 @@ abort_check:
+ abort_load:
+ mov bx,error_or_command
+ abort_load_chain:
++ mov al,80h
++ call [comboot_hook] ; may not return
+ RESET_STACK_AND_SEGS AX
+ call writestr ; Expects SI -> error msg
+
+diff --git a/core/loadhigh.inc b/core/loadhigh.inc
+index 8ff9da1..91061fc 100644
+--- a/core/loadhigh.inc
++++ b/core/loadhigh.inc
+@@ -101,6 +101,8 @@ load_high:
+ ret
+
+ .overflow: mov si,err_nohighmem
++ mov al,83h
++ call [comboot_hook] ; may not return
+ jmp abort_load
+
+ section .data
+diff --git a/core/runkernel.inc b/core/runkernel.inc
+index 8bfc8b8..f458fc7 100644
+--- a/core/runkernel.inc
++++ b/core/runkernel.inc
+@@ -228,6 +228,8 @@ new_kernel:
+ mov [LoadFlags],al
+
+ any_kernel:
++ mov al,4
++ call [comboot_hook]
+ mov si,loading_msg
+ call writestr_qchk
+ mov si,KernelCName ; Print kernel name part of
+@@ -319,6 +321,9 @@ load_initrd:
+ ;
+ call abort_check ; Last chance!!
+
++ mov al,6
++ call [comboot_hook]
++
+ mov si,ready_msg
+ call writestr_qchk
+
+@@ -489,6 +494,8 @@ old_kernel:
+ xor ax,ax
+ cmp word [InitRDPtr],ax ; Old kernel can't have initrd
+ je .load
++ mov al,82h
++ call [comboot_hook] ; may not return
+ mov si,err_oldkernel
+ jmp abort_load
+ .load:
+@@ -613,6 +620,8 @@ loadinitrd:
+ ret
+
+ .notthere:
++ mov al,81h
++ call [comboot_hook] ; may not return
+ mov si,err_noinitrd
+ call writestr
+ mov si,InitRDCName
+diff --git a/core/ui.inc b/core/ui.inc
+index 1b40717..9413f16 100644
+--- a/core/ui.inc
++++ b/core/ui.inc
+@@ -402,8 +402,12 @@ vk_check:
+ %if HAS_LOCALBOOT
+ ; Is this a "localboot" pseudo-kernel?
+ cmp al,VK_LOCALBOOT ; al == KernelType
++ jne .no_local_boot
++ mov al,7
++ call [comboot_hook]
+ mov ax,[VKernelBuf+vk_rname] ; Possible localboot type
+- je local_boot
++ jmp local_boot
++.no_local_boot:
+ %endif
+ jmp get_kernel
+
+@@ -468,6 +472,8 @@ bad_kernel:
+ .really:
+ mov si,KernelName
+ mov di,KernelCName
++ mov al,81h
++ call [comboot_hook] ; may not return
+ push di
+ call unmangle_name ; Get human form
+ mov si,err_notfound ; Complain about missing kernel
+@@ -510,7 +516,10 @@ on_error:
+ ;
+ ; kernel_corrupt: Called if the kernel file does not seem healthy
+ ;
+-kernel_corrupt: mov si,err_notkernel
++kernel_corrupt:
++ mov al,82h
++ call [comboot_hook] ; may not return
++ mov si,err_notkernel
+ jmp abort_load
+
+ ;
diff --git a/patches/syslinux-3.83/03_comboot_ne_real_mode_seg.diff b/patches/syslinux-3.83/03_comboot_ne_real_mode_seg.diff
new file mode 100644
index 0000000..fe319bf
--- /dev/null
+++ b/patches/syslinux-3.83/03_comboot_ne_real_mode_seg.diff
@@ -0,0 +1,44 @@
+diff --git a/core/comboot.inc b/core/comboot.inc
+index cdba16d..1a1dbfe 100644
+--- a/core/comboot.inc
++++ b/core/comboot.inc
+@@ -96,24 +96,23 @@ is_comboot_image:
+ shl ax,6 ; Kilobytes -> paragraphs
+ mov word [es:02h],ax
+
+-%ifndef DEPEND
+-%if real_mode_seg != comboot_seg
+-%error "This code assumes real_mode_seg == comboot_seg"
+-%endif
+-%endif
+ ; Copy the command line from high memory
++ push word real_mode_seg
++ pop ds
+ mov si,cmd_line_here
+ mov cx,125 ; Max cmdline len (minus space and CR)
+ mov di,081h ; Offset in PSP for command line
+ mov al,' ' ; DOS command lines begin with a space
+ stosb
+
+-.loop: es lodsb
++.loop: lodsb
+ and al,al
+ jz .done
+ stosb
+ loop .loop
+ .done:
++ push cs
++ pop ds
+
+ mov al,0Dh ; CR after last character
+ stosb
+diff --git a/core/layout.inc b/core/layout.inc
+index 8c2e248..ca95d2b 100644
+--- a/core/layout.inc
++++ b/core/layout.inc
+@@ -123,4 +123,4 @@ real_mode_seg equ cache_seg + 1000h
+ pktbuf_seg equ cache_seg ; PXELINUX packet buffers
+ %endif
+
+-comboot_seg equ real_mode_seg ; COMBOOT image loading zone
++comboot_seg equ real_mode_seg + 1000h ; COMBOOT image loading zone
diff --git a/patches/syslinux-3.83/04_new_quiet_flag.diff b/patches/syslinux-3.83/04_new_quiet_flag.diff
new file mode 100644
index 0000000..b63ed99
--- /dev/null
+++ b/patches/syslinux-3.83/04_new_quiet_flag.diff
@@ -0,0 +1,43 @@
+diff --git a/core/runkernel.inc b/core/runkernel.inc
+index f458fc7..f6ed644 100644
+--- a/core/runkernel.inc
++++ b/core/runkernel.inc
+@@ -165,7 +165,7 @@ opt_mem:
+ ret
+
+ opt_quiet:
+- mov byte [QuietBoot],1
++ or byte [QuietBoot],1
+ ret
+
+ %if IS_PXELINUX
+@@ -634,7 +634,7 @@ loadinitrd:
+ ; assumes CS == DS
+ ;
+ writestr_qchk:
+- test byte [QuietBoot],01h
++ test byte [QuietBoot],03h
+ jz writestr
+ ret
+
+@@ -689,4 +689,6 @@ KernelVersion resw 1 ; Kernel protocol version
+ ;
+ InitRDPtr resw 1 ; Pointer to initrd= option in command line
+ LoadFlags resb 1 ; Loadflags from kernel
+-QuietBoot resb 1 ; Set if a quiet boot is requested
++
++ section .data
++QuietBoot db 0 ; Set if a quiet boot is requested
+diff --git a/core/ui.inc b/core/ui.inc
+index 9413f16..353d59a 100644
+--- a/core/ui.inc
++++ b/core/ui.inc
+@@ -600,7 +600,7 @@ kernel_good:
+ ;
+ xor ax,ax
+ mov [InitRDPtr],ax
+- mov [QuietBoot],al
++ and byte [QuietBoot],~1
+ %if IS_PXELINUX
+ mov [KeepPXE],al
+ %endif
diff --git a/patches/syslinux-3.83/05_variable_kernel_address.diff b/patches/syslinux-3.83/05_variable_kernel_address.diff
new file mode 100644
index 0000000..a494529
--- /dev/null
+++ b/patches/syslinux-3.83/05_variable_kernel_address.diff
@@ -0,0 +1,42 @@
+diff --git a/core/runkernel.inc b/core/runkernel.inc
+index f6ed644..286c9c8 100644
+--- a/core/runkernel.inc
++++ b/core/runkernel.inc
+@@ -259,7 +259,7 @@ read_kernel:
+ mov ecx,8000h ; 32K
+ sub ecx,esi ; Number of bytes to copy
+ add esi,(real_mode_seg << 4) ; Pointer to source
+- mov edi,100000h ; Copy to address 100000h
++ mov edi,[KernelStart] ; Copy to kernel address
+
+ call bcopy ; Transfer to high memory
+
+@@ -431,7 +431,7 @@ setup_move:
+
+ mov eax,10000h ; Target address of low kernel
+ stosd
+- mov eax,100000h ; Where currently loaded
++ mov eax,[KernelStart] ; Where currently loaded
+ stosd
+ neg eax
+ add eax,[KernelEnd]
+@@ -439,9 +439,13 @@ setup_move:
+ inc cx
+
+ mov bx,9000h ; Revised real mode segment
++ jmp .loading_initrd
+
+ .loading_high:
++ mov eax,[KernelStart]
++ mov [fs:su_code32start],eax
+
++.loading_initrd:
+ cmp word [InitRDPtr],0 ; Did we have an initrd?
+ je .no_initrd
+
+@@ -692,3 +696,5 @@ LoadFlags resb 1 ; Loadflags from kernel
+
+ section .data
+ QuietBoot db 0 ; Set if a quiet boot is requested
++ alignz 4
++KernelStart dd 100000h
diff --git a/patches/syslinux-3.83/06_comboot_new_api.diff b/patches/syslinux-3.83/06_comboot_new_api.diff
new file mode 100644
index 0000000..2cea657
--- /dev/null
+++ b/patches/syslinux-3.83/06_comboot_new_api.diff
@@ -0,0 +1,189 @@
+diff --git a/core/comboot.inc b/core/comboot.inc
+index 1a1dbfe..1923308 100644
+--- a/core/comboot.inc
++++ b/core/comboot.inc
+@@ -962,6 +962,45 @@ comapi_shufraw:
+ mov ecx,P_ECX
+ jmp shuffle_and_boot_raw
+
++
++;
++; INT 22h AX=0025h Set current working directory
++;
++%if IS_ISOLINUX
++comapi_setcwd:
++ mov si,P_BX
++ mov di,TmpDirName
++ mov cx,FILENAME_MAX
++ mov ds,P_ES
++.copy:
++ lodsb
++ stosb
++ or al,al
++ loopnz .copy
++ push cs
++ pop ds
++ stc
++ jnz .err
++ mov di,TmpDirName
++ call setcwd
++.err:
++ ret
++%else
++comapi_setcwd equ comapi_err
++%endif
++
++
++;
++; INT 22h AX=0026h Read filesystem meta data
++;
++%if IS_ISOLINUX
++comapi_mount:
++; call iso_mount
++ ret
++%else
++comapi_mount equ comapi_err
++%endif
++
+ section .data
+
+ %macro int21 2
+@@ -969,6 +1008,109 @@ comapi_shufraw:
+ dw %2
+ %endmacro
+
++
++;
++; INT 22h AX=0027h Run command, return on error
++;
++; Terminates the COMBOOT program and executes the command line in
++; ES:BX as if it had been entered by the user.
++; CS:SI: comboot callback (via far call)
++; EDI kernel load address
++; EDX memory end (sets MyHighMemSize if != 0)
++;
++comapi_run2:
++ push word P_CS
++ push word P_SI
++ pop dword [comboot_far]
++ push dword P_EDI
++ pop dword [KernelStart]
++ mov edx,P_EDX
++ or edx,edx
++ jz .nohimemsize
++%if HIGHMEM_SLOP != 0
++ sub edx,HIGHMEM_SLOP
++%endif
++.nohimemsize:
++ mov [AltHighMemSize],edx
++ mov ds,P_ES
++ mov si,P_BX
++ mov di,command_line
++ call strcpy
++ push cs
++ pop ds
++ push cs
++ pop es
++ mov [comboot_sp_save],sp ; save stack pointer
++ mov word [comboot_hook],comboot_hook_entry
++ or byte [QuietBoot],2
++ jmp load_kernel ; Run a new kernel
++
++comapi_run2_cont:
++ mov word [comboot_hook],comboot_hook_nop
++ mov sp,[comboot_sp_save] ; fix stack pointer
++ and byte [QuietBoot],~2
++ clc
++ ret
++
++
++;
++; INT 22h AX=0028h Get memory size
++;
++comapi_memsize:
++ push dword [HighMemSize]
++ pop dword P_EAX
++ clc
++ ret
++
++
++;
++; Callback function used at various places during kernel/initrd loading.
++;
++; The function either returns or continues at comapi_run2_cont.
++;
++; AL:
++; bit 7: 0/1 return/don't return
++; bit 0-6: function code
++; 0: abort kernel/initrd loading
++; 1: kernel/initrd not found
++; 2: kernel corrupt
++; 3: out of memory (while initrd loading)
++; 4: progress start
++; 5: progress increment
++; 6: progress end: kernel loaded, stop gfxboot
++; 7: stop gfxboot
++;
++comboot_hook_entry:
++ pushad
++ push gs
++ push fs
++ push es
++ push ds
++ call far [comboot_far]
++ pop ds
++ pop es
++ pop fs
++ pop gs
++ popad
++ pushad
++ and al,7fh
++ cmp al,6
++ jnz .notlast
++ push es
++ mov si,DOSSaveVectors
++ mov di,4*20h
++ mov cx,20h
++ push word 0
++ pop es
++ rep movsd ; Restore DOS-range vectors
++ pop es
++.notlast:
++ popad
++ test al,80h
++ jnz comapi_run2_cont
++comboot_hook_nop:
++ ret
++
+ int21_table:
+ int21 00h, comboot_return
+ int21 01h, comboot_getkey
+@@ -1021,8 +1163,16 @@ int22_table:
+ dw comapi_closedir ; 0022 close directory
+ dw comapi_shufsize ; 0023 query shuffler size
+ dw comapi_shufraw ; 0024 cleanup, shuffle and boot raw
++ dw comapi_setcwd ; 0025 set current working directory
++ dw comapi_mount ; 0026 read fs structures (aka mount)
++ dw comapi_run2 ; 0027 like 0003, but return on error
++ dw comapi_memsize ; 0028 get memory size
+ int22_count equ ($-int22_table)/2
+
++comboot_sp_save dw 0
++comboot_hook dw comboot_hook_nop
++comboot_far dd 0
++
+ APIKeyWait db 0
+ APIKeyFlag db 0
+
+@@ -1041,8 +1191,10 @@ feature_flags_len equ ($-feature_flags)
+ err_notdos db ': attempted DOS system call INT ',0
+ err_comlarge db 'COMBOOT image too large.', CR, LF, 0
+
+- section .bss1
++ section .bss2
+ alignb 4
++AltHighMemSize resd 1
+ DOSErrTramp resd 33 ; Error trampolines
++TmpDirName resb FILENAME_MAX
+ ConfigName resb FILENAME_MAX
+ CurrentDirName resb FILENAME_MAX
diff --git a/patches/syslinux-3.83/07_no_append.diff b/patches/syslinux-3.83/07_no_append.diff
new file mode 100644
index 0000000..f06b3b4
--- /dev/null
+++ b/patches/syslinux-3.83/07_no_append.diff
@@ -0,0 +1,45 @@
+diff --git a/core/comboot.inc b/core/comboot.inc
+index 1923308..f39bfb1 100644
+--- a/core/comboot.inc
++++ b/core/comboot.inc
+@@ -1043,12 +1043,14 @@ comapi_run2:
+ mov [comboot_sp_save],sp ; save stack pointer
+ mov word [comboot_hook],comboot_hook_entry
+ or byte [QuietBoot],2
++ mov byte [comboot_run2_active],1
+ jmp load_kernel ; Run a new kernel
+
+ comapi_run2_cont:
+ mov word [comboot_hook],comboot_hook_nop
+ mov sp,[comboot_sp_save] ; fix stack pointer
+ and byte [QuietBoot],~2
++ mov byte [comboot_run2_active],0
+ clc
+ ret
+
+@@ -1172,6 +1174,7 @@ int22_count equ ($-int22_table)/2
+ comboot_sp_save dw 0
+ comboot_hook dw comboot_hook_nop
+ comboot_far dd 0
++comboot_run2_active db 0
+
+ APIKeyWait db 0
+ APIKeyFlag db 0
+diff --git a/core/ui.inc b/core/ui.inc
+index 353d59a..e37f2a7 100644
+--- a/core/ui.inc
++++ b/core/ui.inc
+@@ -379,9 +379,13 @@ vk_check:
+ push word real_mode_seg
+ pop es
+ mov di,cmd_line_here
++ ; append line already included in this case
++ cmp byte [comboot_run2_active],0
++ jnz .no_append_copy
+ mov si,VKernelBuf+vk_append
+ mov cx,[VKernelBuf+vk_appendlen]
+ rep movsb
++.no_append_copy:
+ mov [CmdLinePtr],di ; Where to add rest of cmd
+ pop es
+ mov di,KernelName
diff --git a/patches/syslinux-3.83/08_kernel_size.diff b/patches/syslinux-3.83/08_kernel_size.diff
new file mode 100644
index 0000000..e6b868d
--- /dev/null
+++ b/patches/syslinux-3.83/08_kernel_size.diff
@@ -0,0 +1,36 @@
+diff --git a/core/comboot.inc b/core/comboot.inc
+index f39bfb1..0874526 100644
+--- a/core/comboot.inc
++++ b/core/comboot.inc
+@@ -1088,6 +1088,7 @@ comboot_hook_entry:
+ push fs
+ push es
+ push ds
++ mov ecx,[KernelSize]
+ call far [comboot_far]
+ pop ds
+ pop es
+diff --git a/core/ui.inc b/core/ui.inc
+index e37f2a7..6137dc9 100644
+--- a/core/ui.inc
++++ b/core/ui.inc
+@@ -616,7 +616,11 @@ kernel_good:
+ mov [KernelCNameLen],di
+
+ ; Default memory limit, can be overridden by image loaders
++ mov eax,[AltHighMemSize]
++ or eax,eax
++ jnz .altsize
+ mov eax,[HighMemRsvd]
++.altsize:
+ mov [MyHighMemSize],eax
+
+ popad
+@@ -637,6 +641,7 @@ kernel_good:
+ ; At this point, EAX contains the size of the kernel, SI contains
+ ; the file handle/cluster pointer, and ECX contains the extension (if any.)
+ ;
++ mov [KernelSize],eax
+ movzx di,byte [KernelType]
+ add di,di
+ jmp [kerneltype_table+di]
diff --git a/patches/syslinux-3.83/09_doc.diff b/patches/syslinux-3.83/09_doc.diff
new file mode 100644
index 0000000..6f8a8cf
--- /dev/null
+++ b/patches/syslinux-3.83/09_doc.diff
@@ -0,0 +1,43 @@
+diff --git a/doc/comboot.txt b/doc/comboot.txt
+index f5fefda..1450021 100644
+--- a/doc/comboot.txt
++++ b/doc/comboot.txt
+@@ -955,3 +955,38 @@ AX=0024h [3.80] Cleanup, shuffle and boot, raw version
+ with read/write data segments, matching the respective code
+ segment. For mode 0, B=0 and the limits will be 64K, for mode
+ 1, B=1 and the limits will be 4 GB.
++
++
++AX=0025h [3.84] Set current working directory
++ Input: AX 00025h
++ ES:BX null-terminated directory name string
++ Output: None
++
++ Sets the current working directory. For SYSLINUX, ISOLINUX,
++ and PXELINUX, this will be an absolute path.
++
++
++AX=0026h [3.84] Read file system metadata [ISOLINUX]
++ Input: AX 00026h
++ Output: None
++
++ Reads filesystem data (e.g. after a CDROM change).
++
++
++AX=0027h [3.84] Run command
++ Input: AX 0027h
++ ES:BX null-terminated command string
++ SI comboot callback function (called via far call)
++ EDI kernel load address
++ EDX if != 0: initrd load address (that is: memory end)
++ Output: Does not return if the kernel loads correctly.
++
++ Executes the command line as if it had been entered by the user.
++ Note that this function does return (with CF = 0) if there are
++ problems or the user aborted the load. Else it terminates the
++ COMBOOT program and starts the kernel.
++
++AX=0028h [3.84] Get memory size
++ Input: AX 0028h
++ Output: EAX high memory size (in bytes)
++
diff --git a/patches/syslinux-3.83/10_gfxboot_c.diff b/patches/syslinux-3.83/10_gfxboot_c.diff
new file mode 100644
index 0000000..4383445
--- /dev/null
+++ b/patches/syslinux-3.83/10_gfxboot_c.diff
@@ -0,0 +1,2099 @@
+diff --git a/modules/Makefile b/modules/Makefile
+index 77020ea..e6e7905 100644
+--- a/modules/Makefile
++++ b/modules/Makefile
+@@ -19,6 +19,11 @@ include $(topdir)/MCONFIG.embedded
+
+ INCLUDES = -I$(com32)/include
+
++CFLAGS_COM = -O2 -Wall -Wno-pointer-sign -fomit-frame-pointer -m32 -march=i386 \
++ -fno-align-functions -fno-align-labels -fno-align-jumps -fno-align-loops \
++ -fno-builtin -nostdinc -I .
++ASMFLAGS_COM = -O99 -felf
++
+ BINS = pxechain.com gfxboot.com poweroff.com int18.com
+
+ all: $(BINS)
+@@ -49,6 +54,15 @@ $(LIB): $(LIBOBJS)
+ %.ppm.gz: %.png
+ $(PNGTOPNM) $< | gzip -9 > $@
+
++libio.o: libio.asm
++ nasm $(ASMFLAGS_COM) -o $@ -l $*.lst $<
++
++gfxboot.o: gfxboot.c libio.h
++ $(CC) -g $(CFLAGS_COM) -c -o $@ $<
++
++gfxboot.com: gfxboot.o libio.o
++ ld -M -Tcom.ld -o $@ $^ >$*.map
++
+ tidy dist:
+ rm -f *.o *.a *.lst *.elf *.map .*.d
+
+diff --git a/modules/com.ld b/modules/com.ld
+new file mode 100644
+index 0000000..a98f9aa
+--- /dev/null
++++ b/modules/com.ld
+@@ -0,0 +1,16 @@
++/*
++ linker script for DOS program (.COM)
++ */
++
++OUTPUT_FORMAT("binary")
++OUTPUT_ARCH(i386)
++SEARCH_DIR(".")
++ENTRY(_start)
++SECTIONS
++{
++ .init 0x100 : { *(.init) }
++ .text : { *(.text) }
++ .rodata : { *(.rodata*) }
++ .data : { *(.data) }
++ .bss : { __bss_start = .; *(.bss) }
++}
+diff --git a/modules/gfxboot.c b/modules/gfxboot.c
+new file mode 100644
+index 0000000..a59da40
+--- /dev/null
++++ b/modules/gfxboot.c
+@@ -0,0 +1,1040 @@
++/*
++ *
++ * gfxboot.c
++ *
++ * A comboot program to load gfxboot graphics.
++ *
++ * It is based on work done by Sebastian Herbszt in gfxboot.asm.
++ *
++ * Copyright (c) 2009 Steffen Winterfeldt.
++ *
++ * 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, Inc., 53 Temple Place Ste 330, Boston MA
++ * 02111-1307, USA; either version 2 of the License, or (at your option) any
++ * later version; incorporated herein by reference.
++ *
++ */
++
++#include <libio.h>
++
++#define ID_SYSLINUX 0x31
++#define ID_PXELINUX 0x32
++#define ID_ISOLINUX 0x33
++#define ID_EXTLINUX 0x34
++
++#define MAX_CONFIG_LINE_LEN 2048
++#define MAX_CMDLINE_LEN 1024
++
++// basic memory layout in MB
++#define GFX_MEMORY_START 1
++#define GFX_MEMORY_SIZE 7
++// assume initrd needs at least that much
++#define INITRD_MIN_MEMORY 64
++
++#define GFX_BC_INIT 0
++#define GFX_BC_DONE 1
++#define GFX_BC_INPUT 2
++#define GFX_BC_MENU_INIT 3
++#define GFX_BC_INFOBOX_INIT 4
++#define GFX_BC_INFOBOX_DONE 5
++#define GFX_BC_PROGRESS_INIT 6
++#define GFX_BC_PROGRESS_DONE 7
++#define GFX_BC_PROGRESS_UPDATE 8
++#define GFX_BC_PROGRESS_LIMIT 9 // unused
++#define GFX_BC_PASSWORD_INIT 10
++#define GFX_BC_PASSWORD_DONE 11
++
++// for now, static values
++#define MENU_LABEL_SIZE 128
++#define MENU_ARG_SIZE 512
++#define MENU_ENTRY_SIZE (MENU_LABEL_SIZE + MENU_ARG_SIZE)
++// entry 0 is reserved for the default entry
++#define MAX_MENU_ENTRIES (0x10000 / MENU_ENTRY_SIZE)
++
++
++typedef struct {
++ uint16_t handle;
++ uint16_t block_size;
++ int file_size; // file size (-1: unknown)
++ uint32_t buf; // must be block_size
++ unsigned buf_size; // in block_size units
++ unsigned data_len; // valid bytes in buf
++ unsigned buf_idx; // read pos in buffer
++} fd_t;
++
++
++// gfx config data (52 bytes)
++typedef struct __attribute__ ((packed)) {
++ uint8_t bootloader; // 0: boot loader type (0: lilo, 1: syslinux, 2: grub)
++ uint8_t sector_shift; // 1: sector shift
++ uint8_t media_type; // 2: media type (0: disk, 1: floppy, 2: cdrom)
++ uint8_t failsafe; // 3: turn on failsafe mode (bitmask)
++ // 0: SHIFT pressed
++ // 1: skip gfxboot
++ // 2: skip monitor detection
++ uint8_t sysconfig_size; // 4: size of sysconfig data
++ uint8_t boot_drive; // 5: BIOS boot drive
++ uint16_t callback; // 6: offset to callback handler
++ uint16_t bootloader_seg; // 8: code/data segment used by bootloader; must follow gfx_callback
++ uint16_t reserved_1; // 10
++ uint32_t user_info_0; // 12: data for info box
++ uint32_t user_info_1; // 16: data for info box
++ uint32_t bios_mem_size; // 20: BIOS memory size (in bytes)
++ uint16_t xmem_0; // 24: extended mem area 0 (start:size in MB; 12:4 bits)
++ uint16_t xmem_1; // 26: extended mem area 1
++ uint16_t xmem_2; // 28: extended mem area 2
++ uint16_t xmem_3; // 30: extended mem area 3
++ uint32_t file; // 32: start of gfx file
++ uint32_t archive_start; // 36: start of cpio archive
++ uint32_t archive_end; // 40: end of cpio archive
++ uint32_t mem0_start; // 44: low free memory start
++ uint32_t mem0_end; // 48: low free memory end
++} gfx_config_t;
++
++
++// menu description (18 bytes)
++typedef struct __attribute__ ((packed)) {
++ uint16_t entries;
++ uint32_t default_entry; // seg:ofs
++ uint32_t label_list; // seg:ofs
++ uint16_t label_size;
++ uint32_t arg_list; // seg:ofs
++ uint16_t arg_size;
++} menu_t;
++
++
++// e820 mem descriptor
++typedef struct __attribute__ ((packed)) {
++ uint64_t base;
++ uint64_t len;
++ uint32_t type;
++ uint32_t cont;
++} mem_info_t;
++
++
++// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
++// global file descriptor, implicitly used by read(), getc(), fgets()
++fd_t fd;
++
++gfx_config_t gfx_config;
++menu_t menu;
++
++struct {
++ uint32_t jmp_table[12];
++ uint16_t code_seg;
++ char fname_buf[64];
++} gfx;
++
++unsigned comboot, comboot_len;
++unsigned io_buf, io_buf_len;
++unsigned menu_buf, menu_buf_len;
++unsigned freemem, freemem_len;
++
++unsigned initrd_end;
++unsigned kernel_start;
++
++int timeout;
++
++char cmdline[MAX_CMDLINE_LEN];
++char current_label[64];
++
++// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
++
++int open(char *name);
++int open32(uint32_t name);
++int read(void *buf, int size);
++int read32(uint32_t buf, int size);
++int getc(void);
++char *fgets(char *s, int size);
++
++int strlen(char *s);
++int strcmp(char *s1, char *s2);
++char *skip_spaces(char *s);
++char *skip_nonspaces(char *s);
++void chop_line(char *s);
++
++int atoi(char *s);
++
++uint32_t get_config_file_name32(void);
++int read_config_file(void);
++
++unsigned magic_ok(uint32_t buf);
++unsigned find_file(uint32_t buf, unsigned len, unsigned *gfx_file_start, unsigned *file_len);
++
++int get_mem_info(mem_info_t *mi);
++int gfx_init(char *file);
++void gfx_done(void);
++int gfx_input(void);
++int gfx_menu_init(void);
++
++void gfx_infobox32(int type, uint32_t str1, uint32_t str2);
++void gfx_infobox(int type, char *str1, char *str2);
++
++void boot(void);
++void show_message(char *file);
++
++
++// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
++int main(int argc, char **argv)
++{
++ x86regs_t r;
++ uint8_t syslinux_id;
++ int menu_index;
++
++ r.eax = 0x0a; // Get Derivative-Specific Information
++ r.ecx = 9;
++ x86int(0x22, &r);
++ syslinux_id = (uint8_t) r.eax;
++ gfx_config.sector_shift = (uint8_t) r.ecx;
++ gfx_config.boot_drive = (uint8_t) r.edx;
++
++ // define our memory layout
++ // all must be at least 16 bytes aligned
++
++ // 64k comboot code
++ comboot = comboot_seg() << 4;
++ comboot_len = 0x10000;
++
++ // 16k file io buffer
++ io_buf = comboot + comboot_len;
++ io_buf_len = 0x4000;
++
++ // 64k for parsed menu data
++ menu_buf = io_buf + io_buf_len;
++ menu_buf_len = 0x10000;
++
++ // use remaining mem for gfx core
++ freemem = menu_buf + menu_buf_len;
++ // comboot api passes low memory end at address 2
++ freemem_len = ((*(uint16_t *) 2) << 4) - freemem;
++
++ gfx_config.bootloader = 1;
++ gfx_config.sysconfig_size = sizeof gfx_config;
++ gfx_config.bootloader_seg = comboot >> 4;
++
++ // not gfx_cb() directly, we need a wrapper
++ gfx_config.callback = (uint32_t) _gfx_cb;
++
++ if(syslinux_id == ID_PXELINUX) {
++ gfx_config.sector_shift = 11;
++ gfx_config.boot_drive = 0;
++ }
++
++ if(argc < 2) {
++ printf("Usage: gfxboot.com bootlogo_file [message_file]\n");
++ if(argc > 2) show_message(argv[2]);
++
++ return 0;
++ }
++
++ if(read_config_file()) {
++ printf("Error reading config file\n");
++ if(argc > 2) show_message(argv[2]);
++
++ return 0;
++ }
++
++ if(gfx_init(argv[1])) {
++ printf("Error setting up gfxboot\n");
++ if(argc > 2) show_message(argv[2]);
++
++ return 0;
++ }
++
++ gfx_menu_init();
++
++ for(;;) {
++ menu_index = gfx_input();
++
++ // abort gfx, return to text mode prompt
++ if(menu_index == -1) {
++ gfx_done();
++ break;
++ }
++
++ // get label name, is needed later for messages etc.
++ memcpy(current_label, cmdline, sizeof current_label);
++ current_label[sizeof current_label - 1] = 0;
++ *skip_nonspaces(current_label) = 0;
++
++ // does not return if it succeeds
++ boot();
++ }
++
++ if(argc > 2) show_message(argv[2]);
++
++ return 0;
++}
++
++
++// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
++//
++// return:
++// 0: ok, -1: error
++//
++int open32(uint32_t name)
++{
++ x86regs_t r;
++
++ fd.handle = 0;
++ fd.data_len = fd.buf_idx = 0;
++
++ r.esi = name & 0xf;
++ r.eax = 0x06; // Open file
++ r.es = name >> 4;
++ x86int(0x22, &r);
++
++ fd.block_size = r.ecx;
++ fd.file_size = r.eax;
++
++ if(
++ (r.eflags & X86_CF) ||
++ !fd.file_size || !fd.block_size || fd.block_size > io_buf_len
++ ) return -1;
++
++ fd.handle = r.esi;
++
++ fd.buf = io_buf;
++ fd.buf_size = io_buf_len / fd.block_size;
++
++ // printf("block size = 0x%x, file size = %d\n", fd.block_size, fd.file_size);
++
++ return 0;
++}
++
++
++// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
++//
++// return:
++// 0: ok, -1: error
++//
++int open(char *name)
++{
++ return open32((uint32_t) name + comboot);
++}
++
++
++// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
++//
++// Note: buf is 32bit address
++//
++int read32(uint32_t buf, int size)
++{
++ x86regs_t r;
++ int i, len = 0;
++
++ while(size) {
++ i = fd.data_len - fd.buf_idx;
++
++ if(i > 0) {
++ i = i < size ? i : size;
++ memcpy32(buf, fd.buf + fd.buf_idx, i);
++ len += i;
++ buf += i;
++ size -= i;
++ fd.buf_idx += i;
++ }
++
++ if(!size || !fd.handle) break;
++
++ r.eax = 0x07; // Read file
++ r.ecx = fd.buf_size;
++ r.ebx = 0;
++ r.es = fd.buf >> 4;
++ r.esi = fd.handle;
++ x86int(0x22, &r);
++ fd.handle = r.esi;
++ fd.data_len = r.ecx;
++ fd.buf_idx = 0;
++ }
++
++ return len;
++}
++
++
++// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
++int read(void *buf, int size)
++{
++ return read32((uint32_t) buf + comboot, size);
++}
++
++
++// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
++int getc()
++{
++ char buf[1];
++
++ return read(buf, 1) ? *buf : EOF;
++}
++
++
++// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
++char *fgets(char *s, int size)
++{
++ char *buf = s;
++ int c = EOF;
++
++ while(size--) {
++ c = getc();
++ if(c == EOF) break;
++ *buf++ = c;
++ if(c == 0x0a) break;
++ }
++
++ *buf = 0;
++
++ return c == EOF && s == buf ? 0 : s;
++}
++
++
++// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
++int strlen(char *s)
++{
++ char *s0 = s + 1;
++
++ while(*s++);
++
++ return s - s0;
++}
++
++
++// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
++int strcmp(char *s1, char *s2)
++{
++ while(*s1 && *s1 == *s2) s1++, s2++;
++
++ return (uint8_t) *s1 - (uint8_t) *s2;
++}
++
++
++// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
++char *skip_spaces(char *s)
++{
++ while(*s && (*s == ' ' || *s == '\t')) s++;
++
++ return s;
++}
++
++
++// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
++char *skip_nonspaces(char *s)
++{
++ while(*s && *s != ' ' && *s != '\t') s++;
++
++ return s;
++}
++
++
++// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
++void chop_line(char *s)
++{
++ int i = strlen(s);
++
++ if(!i) return;
++
++ while(--i >= 0) {
++ if(s[i] == ' ' || s[i] == '\t' || s[i] == '\n') {
++ s[i] = 0;
++ }
++ else {
++ break;
++ }
++ }
++}
++
++
++// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
++int atoi(char *s)
++{
++ int i = 0, sign = 1;
++
++ if(*s == '-') s++, sign = -1;
++ if(*s == '+') s++;
++
++ while(*s >= '0' && *s <= '9') {
++ i = 10 * i + *s++ - '0';
++ }
++
++ return sign * i;
++}
++
++
++// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
++//
++// return:
++// config file name (32 bit address)
++//
++uint32_t get_config_file_name32()
++{
++ x86regs_t r;
++
++ r.eax = 0x0e; // Get configuration file name
++ x86int(0x22, &r);
++
++ return (r.es << 4) + (uint16_t) r.ebx;
++}
++
++
++// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
++// Read and parse syslinux config file.
++//
++// return:
++// 0: ok, 1: error
++//
++int read_config_file(void)
++{
++ char *s, *t, buf[MAX_CONFIG_LINE_LEN];
++ unsigned u;
++ int menu_idx = 0;
++
++ // clear memory before we start
++ memset32(menu_buf, 0, menu_buf_len);
++
++ if(open32(get_config_file_name32()) == -1) return 1;
++
++ while((s = fgets(buf, sizeof buf))) {
++ chop_line(s);
++ s = skip_spaces(s);
++ if(!*s || *s == '#') continue;
++ t = skip_nonspaces(s);
++ if(*t) *t++ = 0;
++ t = skip_spaces(t);
++
++ if(!strcmp(s, "timeout")) {
++ timeout = atoi(t);
++ }
++
++ if(!strcmp(s, "default")) {
++ u = strlen(t);
++ if(u > MENU_LABEL_SIZE - 1) u = MENU_LABEL_SIZE - 1;
++ memcpy32(menu_buf, comboot + (uint32_t) t, u);
++ }
++
++ if(!strcmp(s, "label")) {
++ menu_idx++;
++ if(menu_idx < MAX_MENU_ENTRIES) {
++ u = strlen(t);
++ if(u > MENU_LABEL_SIZE - 1) u = MENU_LABEL_SIZE - 1;
++ memcpy32(
++ menu_buf + menu_idx * MENU_LABEL_SIZE,
++ comboot + (uint32_t) t,
++ u
++ );
++ }
++ }
++
++ if(!strcmp(s, "append")) {
++ if(menu_idx < MAX_MENU_ENTRIES) {
++ u = strlen(t);
++ if(u > MENU_ARG_SIZE - 1) u = MENU_ARG_SIZE - 1;
++ memcpy32(
++ menu_buf + menu_idx * MENU_ARG_SIZE + MAX_MENU_ENTRIES * MENU_LABEL_SIZE,
++ comboot + (uint32_t) t,
++ u
++ );
++ }
++ }
++ }
++
++ menu.entries = menu_idx;
++ menu.label_size = MENU_LABEL_SIZE;
++ menu.arg_size = MENU_ARG_SIZE;
++ menu.default_entry = ((menu_buf >> 4) << 16) + (menu_buf & 0xf);
++ u = menu_buf + MENU_LABEL_SIZE;
++ menu.label_list = ((u >> 4) << 16) + (u & 0xf);
++ u = menu_buf + MAX_MENU_ENTRIES * MENU_LABEL_SIZE + MENU_ARG_SIZE;
++ menu.arg_list = ((u >> 4) << 16) + (u & 0xf);
++
++ return 0;
++}
++
++
++// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
++// Check header and return code start offset.
++//
++// Note: buf is 32bit address
++//
++unsigned magic_ok(uint32_t buf)
++{
++ if(
++ _mem32(buf) == 0x0b2d97f00 && /* magic id */
++ (_mem8(buf + 4) == 8) /* version 8 */
++ ) {
++ return _mem32(buf + 8);
++ }
++
++ return 0;
++}
++
++
++// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
++//
++// Search cpio archive for gfx file.
++//
++// Note: buf is 32bit address
++//
++unsigned find_file(uint32_t buf, unsigned len, unsigned *gfx_file_start, unsigned *file_len)
++{
++ unsigned i, fname_len, code_start = 0;
++
++ *gfx_file_start = 0;
++
++ for(i = 0; i < len;) {
++ if((len - i) >= 0x1a && _mem16(buf + i) == 0x71c7) {
++ fname_len = _mem16(buf + i + 20);
++ *file_len = _mem16(buf + i + 24) + (_mem16(buf + i + 22) << 16);
++ i += 26 + fname_len;
++ i = ((i + 1) & ~1);
++ if((code_start = magic_ok(buf + i))) {
++ *gfx_file_start = i;
++ return code_start;
++ }
++ i += *file_len;
++ i = ((i + 1) & ~1);
++ }
++ else {
++ break;
++ }
++ }
++
++ return code_start;
++}
++
++
++// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
++void gfx_cb(x86regs_t *r)
++{
++ uint8_t f_nr = r->eax;
++
++ switch(f_nr) {
++ case 0: // cb_status
++ // edx = filename buffer (64 bytes)
++ r->edx = comboot + (uint32_t) gfx.fname_buf;
++ r->eax = 0;
++ // printf("<0x%x, %p + 0x%x>", r->edx, gfx.fname_buf, comboot);
++ break;
++
++ case 1: // cb_fopen
++ // file name in gfx.fname_buf
++ // al = 0: ok, 1: file not found
++ // ecx = file length (al = 0)
++ if(open(gfx.fname_buf) == -1) {
++ r->eax = 1;
++ }
++ else {
++ r->eax = 0;
++ r->ecx = fd.file_size;
++ }
++ break;
++
++ case 2: // cb_fread
++ // edx = buffer address (linear)
++ // ecx = data length (< 64k)
++ if(!fd.handle) {
++ r->eax = r->ecx = 0;
++ break;
++ }
++ r->esi = fd.handle;
++ r->ebx = 0;
++ r->es = io_buf >> 4;
++ r->ecx = io_buf_len / fd.block_size;
++ r->eax = 7;
++ x86int(0x22, r);
++ fd.handle = r->esi;
++ if((r->eflags & X86_CF)) {
++ r->eax = 1;
++ }
++ else {
++ r->edx = io_buf;
++ r->eax = 0;
++ }
++ break;
++
++ case 3: // cb_getcwd
++ // edx filename
++ r->eax = 0x1f; // Get current working directory
++ x86int(0x22, r);
++ r->edx = (r->es << 4) + (uint16_t) r->ebx;
++ r->eax = 0;
++ break;
++
++ case 4: // cb_chdir
++ r->es = comboot >> 4;
++ r->ebx = (uint32_t) gfx.fname_buf;
++ r->eax = 0x25; // Get current working directory
++ x86int(0x22, r);
++ r->eax = (r->eflags & X86_CF) ? 1 : 0;
++ break;
++
++ case 5: // cb_readsector
++ // in: edx = sector
++ // out: edx = buffer (linear address)
++ r->esi = r->edi = 0;
++ r->ebx = 0;
++ r->es = io_buf >> 4;
++ r->ecx = 1;
++ r->eax = 0x19; // Read disk
++ x86int(0x22, r);
++ r->eax = 0;
++ r->edx = io_buf;
++ break;
++
++ case 6: // cb_mount
++ r->eax = 0x26;
++ x86int(0x22, r);
++ r->eax = (r->eflags & X86_CF) ? 1 : 0;
++ break;
++
++ default:
++ r->eax = 0xff;
++ }
++}
++
++
++// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
++//
++// return:
++// 0: ok, 1: error
++//
++int get_mem_info(mem_info_t *mi)
++{
++ x86regs_t r;
++
++ mi->base = mi->len = mi->type = 0;
++
++ r.eax = 0xe820;
++ r.edx = 0x534d4150;
++ r.ebx = mi->cont;
++ r.ecx = 20;
++ r.es = comboot >> 4;
++ r.edi = (unsigned) mi;
++ x86int(0x15, &r);
++
++ mi->cont = 0;
++ if(r.eax != 0x534d4150 || (r.eflags & X86_CF)) return 1;
++ mi->cont = r.ebx;
++
++ return 0;
++}
++
++
++// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
++//
++// return:
++// 0: ok, 1: error
++//
++int gfx_init(char *file)
++{
++ x86regs_t r;
++ int file_max, file_size, ofs;
++ unsigned u, code_start, file_start = 0, file_len = 0;
++ unsigned start2, len2, end2;
++ mem_info_t mi;
++
++ gfx_config.mem0_start = freemem;
++ gfx_config.mem0_end = freemem + freemem_len;
++
++ kernel_start = (GFX_MEMORY_START + GFX_MEMORY_SIZE) << 20;
++ initrd_end = 0;
++
++ gfx_config.xmem_0 = (GFX_MEMORY_START << 4) + GFX_MEMORY_SIZE;
++
++ r.eax = 0x28; // Get memory size
++ x86int(0x22, &r);
++ u = (r.eflags & X86_CF) ? 0 : r.eax;
++
++ // round up
++ gfx_config.bios_mem_size = u ? ((u + 0xfffff) >> 20) << 20 : 256;
++
++ if(u > 0) {
++ // new interface
++
++ if(u < INITRD_MIN_MEMORY << 20) {
++ // ok, maybe there is a bigger block...
++
++ mi.cont = 0;
++ start2 = len2 = 0;
++ while(!get_mem_info(&mi)) {
++#if 0
++ printf(
++ "%08x%08x %08x%08x %08x %08x\n",
++ (unsigned) (mi.base >> 32), (unsigned) mi.base,
++ (unsigned) (mi.len >> 32), (unsigned) mi.len,
++ mi.type, mi.cont
++ );
++#endif
++ if(mi.type == 1) {
++ if((mi.base >> 32) || (mi.base + mi.len) >> 32) break;
++ if(mi.len > len2) {
++ start2 = mi.base;
++ len2 = mi.len;
++ }
++ }
++
++ if(!mi.cont) break;
++ }
++
++#if 0
++ printf("largest: %08x %08x\n", start2, len2);
++ getchar();
++#endif
++
++ if(len2 && len2 > 2 << 20 && len2 > u) {
++ // align to full MBs
++ end2 = (start2 + len2) & ~0xfffff;
++ start2 = (start2 + 0xfffff) & ~0xfffff;
++ len2 = end2 - start2;
++ }
++ else {
++ start2 = len2 = 0;
++ }
++
++ if(len2) {
++ u = len2;
++ initrd_end = end2;
++ // we could relocate the kernel as well...
++ // kernel_start = start2;
++ }
++ }
++
++ if(u < INITRD_MIN_MEMORY << 20) {
++ // a bit too small for us
++ printf("%u MB RAM is a bit small... - giving up\n", u >> 20);
++
++ return 1;
++ }
++ }
++
++#if 0
++ printf("mem = 0x%05x, mem0_start = 0x%05x, mem0_end = 0x%05x\n",
++ gfx.mem, gfx_config.mem0_start, gfx_config.mem0_end
++ );
++#endif
++
++ if(open(file) == -1) return 1;
++
++ // leave room for later alignment
++ gfx_config.archive_start = gfx_config.mem0_start + 0x10;
++
++ // read at most that much
++ file_size = file_max = gfx_config.mem0_end - gfx_config.archive_start;
++
++ if(fd.file_size != -1 && fd.file_size > file_size) return 1;
++
++ // if we have the real size, use it
++ if(fd.file_size != -1) file_size = fd.file_size;
++
++ file_size = read32(gfx_config.archive_start, file_size);
++
++ if(!file_size || file_size == file_max) return 1;
++
++ gfx_config.archive_end = gfx_config.archive_start + file_size;
++
++ // update free mem pointer & align it a bit
++ gfx_config.mem0_start = (gfx_config.archive_end + 3) & ~3;
++
++ // locate file inside cpio archive
++ if(!(code_start = find_file(gfx_config.archive_start, file_size, &file_start, &file_len))) {
++ printf("%s: invalid file format\n", file);
++
++ return 1;
++ }
++
++#if 0
++ printf("code_start = 0x%x, archive_start = 0x%x, file size = 0x%x, file_start = 0x%x, file_len = 0x%x\n",
++ code_start, gfx_config.archive_start, file_size, file_start, file_len
++ );
++#endif
++
++ if((ofs = (gfx_config.archive_start + file_start + code_start) & 0xf)) {
++ printf("oops: needs to be aligned!\n");
++
++ memcpy32(gfx_config.archive_start - ofs, gfx_config.archive_start, file_size);
++ gfx_config.archive_start -= ofs;
++ gfx_config.archive_end -= ofs;
++
++ return 1;
++ }
++
++ gfx_config.file = gfx_config.archive_start + file_start;
++ gfx.code_seg = (gfx_config.file + code_start) >> 4;
++
++ for(u = 0; u < sizeof gfx.jmp_table / sizeof *gfx.jmp_table; u++) {
++ gfx.jmp_table[u] = (gfx.code_seg << 16) + _mem16(gfx_config.file + code_start + 2 * u);
++ }
++
++#if 0
++ for(u = 0; u < sizeof gfx.jmp_table / sizeof *gfx.jmp_table; u++) {
++ printf("%d: 0x%08x\n", u, gfx.jmp_table[u]);
++ }
++#endif
++
++ // we are ready to start
++
++ r.esi = comboot + (uint32_t) &gfx_config;
++ farcall(gfx.jmp_table[GFX_BC_INIT], &r);
++
++ if((r.eflags & X86_CF)) {
++ printf("graphics initialization failed\n");
++
++ return 1;
++ }
++
++ return 0;
++}
++
++
++// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
++void gfx_done()
++{
++ x86regs_t r;
++
++ farcall(gfx.jmp_table[GFX_BC_DONE], &r);
++}
++
++
++// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
++//
++// return:
++// boot menu index (-1: go to text mode prompt)
++//
++int gfx_input()
++{
++ x86regs_t r;
++
++ r.edi = comboot + (uint32_t) cmdline;
++ r.ecx = sizeof cmdline;
++ r.eax = timeout * 182 / 100;
++ timeout = 0; // use timeout only first time
++ farcall(gfx.jmp_table[GFX_BC_INPUT], &r);
++ if((r.eflags & X86_CF)) r.eax = 1;
++
++ if(r.eax == 1) return -1;
++
++ return r.ebx;
++}
++
++
++// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
++int gfx_menu_init()
++{
++ x86regs_t r;
++
++ r.esi = comboot + (uint32_t) &menu;
++ farcall(gfx.jmp_table[GFX_BC_MENU_INIT], &r);
++
++ return 0;
++}
++
++
++// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
++void gfx_infobox(int type, char *str1, char *str2)
++{
++ gfx_infobox32(type, comboot + (uint32_t) str1, str2 ? comboot + (uint32_t) str2 : 0);
++}
++
++
++// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
++void gfx_infobox32(int type, uint32_t str1, uint32_t str2)
++{
++ x86regs_t r;
++
++ r.eax = type;
++ r.esi = str1;
++ r.edi = str2;
++ farcall(gfx.jmp_table[GFX_BC_INFOBOX_INIT], &r);
++ r.edi = r.eax = 0;
++ farcall(gfx.jmp_table[GFX_BC_INPUT], &r);
++ farcall(gfx.jmp_table[GFX_BC_INFOBOX_DONE], &r);
++}
++
++
++// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
++// Load & run kernel.
++//
++// Returns only on error.
++//
++void boot()
++{
++ x86regs_t r;
++
++ r.es = comboot >> 4;
++ r.ebx = (uint32_t) cmdline;
++ r.edi = kernel_start; // kernel load address
++ r.edx = initrd_end; // end of initrd load area (or 0)
++ r.esi = (uint32_t) _syslinux_hook; // cs:si = syslinux callbacks
++ r.eax = 0x27; // Load & run kernel (extended API)
++
++ x86int(0x22, &r);
++ if(!(r.eflags & X86_CF)) return;
++
++ r.es = comboot >> 4;
++ r.ebx = (uint32_t) cmdline;
++ r.eax = 3; // Run command
++ x86int(0x22, &r);
++}
++
++
++// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
++void syslinux_hook(x86regs_t *r)
++{
++ uint8_t f_nr = r->eax;
++
++ // bit 7: 0/1 continue/don't continue kernel loading in syslinux
++
++ switch(f_nr & 0x7f) {
++ case 0: // abort kernel/initrd loading
++ gfx_infobox(0, "abort kernel loading", 0);
++ break;
++
++ case 1: // kernel/initrd not found
++ gfx_infobox(0, "kernel not found: ", current_label);
++ break;
++
++ case 2: // kernel corrupt
++ gfx_infobox(0, "kernel broken", 0);
++ break;
++
++ case 3: // out of memory (while initrd loading)
++ gfx_infobox(0, "out of memory", 0);
++ break;
++
++ case 4: // progress start
++ r->eax = r->ecx >> gfx_config.sector_shift; // kernel size in sectors
++ r->esi = comboot + (uint32_t) current_label;
++ farcall(gfx.jmp_table[GFX_BC_PROGRESS_INIT], r);
++ break;
++
++ case 5: // progress increment
++ // always 64k
++ r->eax = 0x10000 >> gfx_config.sector_shift;
++ farcall(gfx.jmp_table[GFX_BC_PROGRESS_UPDATE], r);
++ break;
++
++ case 6: // progress end: kernel loaded, stop gfxboot
++ farcall(gfx.jmp_table[GFX_BC_PROGRESS_DONE], r);
++ gfx_done();
++ break;
++
++ case 7: // stop gfxboot
++ gfx_done();
++ break;
++ }
++}
++
++
++// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
++void show_message(char *file)
++{
++ int c;
++
++ if(open(file) == -1) return;
++
++ while((c = getc()) != EOF) {
++ if(c < ' ' && c != '\n' && c != '\t') continue;
++ printf("%c", c);
++ }
++}
++
++
+diff --git a/modules/libio.asm b/modules/libio.asm
+new file mode 100644
+index 0000000..1f77b44
+--- /dev/null
++++ b/modules/libio.asm
+@@ -0,0 +1,854 @@
++;
++; libio.asm
++;
++; A very minimalistic libc fragment.
++;
++; Copyright (c) 2009 Steffen Winterfeldt.
++;
++; 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, Inc., 53 Temple Place Ste 330, Boston MA 02111-1307,
++; USA; either version 2 of the License, or (at your option) any later
++; version; incorporated herein by reference.
++;
++
++
++; max argv elements passed to main()
++%define MAX_ARGS 8
++
++
++ bits 16
++
++; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
++; interface functions
++;
++; Make sure not to modify registers!
++;
++
++ global printf
++ global getchar
++ global clrscr
++ global memcpy
++ global memcpy32
++ global memset
++ global memset32
++ global x86int
++ global farcall
++ global reboot
++
++ global _gfx_cb
++ extern gfx_cb
++ global _syslinux_hook
++ extern syslinux_hook
++
++ global _start
++ extern _main
++
++ extern __bss_start
++
++ section .init
++
++_start:
++ cld
++
++ ; clear static memory
++ mov di,__bss_start
++ mov cx,sp
++ sub cx,di
++ xor ax,ax
++ rep stosb
++
++ ; parse args
++ mov ebx,80h
++ movzx si,byte [bx]
++ mov byte [si+81h],0dh ; just make sure
++ xor ecx,ecx
++ sub sp,MAX_ARGS * 4
++ mov ebp,esp
++ inc cx
++cmd_10:
++ inc bx
++ call skip_spaces
++ cmp al,0dh
++ jz cmd_60
++ imul si,cx,4
++ mov [bp+si],ebx
++ call skip_nonspaces
++ mov byte [bx],0
++ inc cx
++ cmp cx,MAX_ARGS
++ jae cmd_60
++ cmp al,0dh
++ jnz cmd_10
++cmd_60:
++ mov byte [bx],0
++
++ mov [bp],ebx ; argv[0] = ""
++
++ push ebp
++ push ecx
++
++ call dword _main
++
++ add sp,MAX_ARGS * 4 + 8
++
++ ret
++
++; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
++skip_spaces:
++ mov al,[bx]
++ cmp al,0dh
++ jz skip_spaces_90
++ cmp al,' '
++ jz skip_spaces_10
++ cmp al,9
++ jnz skip_spaces_90
++skip_spaces_10:
++ inc bx
++ jmp skip_spaces
++skip_spaces_90:
++ ret
++
++skip_nonspaces:
++ mov al,[bx]
++ cmp al,0dh
++ jz skip_nonspaces_90
++ cmp al,' '
++ jz skip_nonspaces_90
++ cmp al,9
++ jz skip_nonspaces_90
++ inc bx
++ jmp skip_nonspaces
++skip_nonspaces_90:
++ ret
++
++
++; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
++ section .text
++
++; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
++; Write text to console.
++;
++; args on stack
++;
++; Note: 32 bit call/ret!
++;
++printf:
++ mov [pf_args],sp
++
++ pushad
++
++ call pf_next_arg
++ call pf_next_arg
++ mov si,ax
++printf_10:
++ lodsb
++ or al,al
++ jz printf_90
++ cmp al,'%'
++ jnz printf_70
++ mov byte [pf_pad],' '
++ lodsb
++ dec si
++ cmp al,'0'
++ jnz printf_20
++ mov [pf_pad],al
++printf_20:
++ call get_number
++ mov [pf_num],ecx
++ lodsb
++ or al,al
++ jz printf_90
++ cmp al,'%'
++ jz printf_70
++
++ cmp al,'S'
++ jnz printf_23
++ mov byte [pf_raw_char],1
++ jmp printf_24
++printf_23:
++ cmp al,'s'
++ jnz printf_30
++printf_24:
++ push si
++
++ call pf_next_arg
++ mov si,ax
++ call puts
++
++ sub ecx,[pf_num]
++ neg ecx
++ mov al,' '
++ call putc_n
++
++ pop si
++
++ mov byte [pf_raw_char],0
++ jmp printf_10
++
++printf_30:
++ cmp al,'u'
++ jnz printf_35
++
++ mov dx,10
++printf_31:
++ push si
++
++ call pf_next_arg
++ or dh,dh
++ jz printf_34
++ test eax,eax
++ jns printf_34
++ neg eax
++ push eax
++ mov al,'-'
++ call putc
++ pop eax
++printf_34:
++ mov cl,[pf_num]
++ mov ch,[pf_pad]
++ call number
++ call puts
++
++ pop si
++
++ jmp printf_10
++
++printf_35:
++ cmp al,'x'
++ jnz printf_36
++
++printf_35a:
++ mov dx,10h
++ jmp printf_31
++
++printf_36:
++ cmp al,'d'
++ jnz printf_37
++printf_36a:
++ mov dx,10ah
++ jmp printf_31
++
++printf_37:
++ cmp al,'i'
++ jz printf_36a
++
++ cmp al,'p'
++ jnz printf_40
++ mov al,'0'
++ call putc
++ mov al,'x'
++ call putc
++ jmp printf_35a
++
++printf_40:
++ cmp al,'c'
++ jnz printf_45
++
++ push si
++ call pf_next_arg
++ call putc
++ pop si
++ jmp printf_10
++printf_45:
++
++ ; more ...
++
++
++printf_70:
++ call putc
++ jmp printf_10
++printf_90:
++ popad
++
++ o32 ret
++
++
++; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
++; Get next printf arg from [pf_args].
++;
++; return:
++; eax arg
++;
++; changes no regs
++;
++pf_next_arg:
++ movzx eax,word [pf_args]
++ add word [pf_args],4
++ mov eax,[eax]
++ ret
++
++
++; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
++; Convert string to number.
++;
++; si string
++;
++; return:
++; ecx number
++; si points past number
++; CF not a number
++;
++get_number:
++
++ xor ecx,ecx
++ mov ah,1
++get_number_10:
++ lodsb
++ or al,al
++ jz get_number_90
++ sub al,'0'
++ jb get_number_90
++ cmp al,9
++ ja get_number_90
++ movzx eax,al
++ imul ecx,ecx,10
++ add ecx,eax
++ jmp get_number_10
++get_number_90:
++ dec si
++ shr ah,1
++ ret
++
++
++; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
++; Convert a number to string.
++;
++; eax number
++; cl field size
++; ch padding char
++; dl base
++;
++; return:
++; si string
++;
++number:
++ mov di,num_buf
++ push ax
++ push cx
++ mov al,ch
++ mov cx,num_buf_end - num_buf
++ rep stosb
++ pop cx
++ pop ax
++ movzx cx,cl
++ movzx ebx,dl
++number_10:
++ xor edx,edx
++ div ebx
++ cmp dl,9
++ jbe number_20
++ add dl,27h
++number_20:
++ add dl,'0'
++ dec edi
++ mov [di],dl
++ or eax,eax
++ jz number_30
++ cmp di,num_buf
++ ja number_10
++number_30:
++ mov si,di
++ or cx,cx
++ jz number_90
++ cmp cx,num_buf_end - num_buf
++ jae number_90
++ mov si,num_buf_end
++ sub si,cx
++number_90:
++ ret
++
++
++; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
++; Write string.
++;
++; si text
++;
++; return:
++; cx length
++;
++puts:
++ xor cx,cx
++puts_10:
++ lodsb
++ or al,al
++ jz puts_90
++ call putc
++ inc cx
++ jmp puts_10
++puts_90:
++ ret
++
++
++; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
++; Write char multiple times.
++;
++; al char
++; cx count (does nothing if count <= 0)
++;
++putc_n:
++ cmp cx,0
++ jle putc_n_90
++ call putc
++ dec cx
++ jmp putc_n
++putc_n_90:
++ ret
++
++
++; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
++; Print char.
++;
++; al char
++;
++putc:
++ pusha
++ cmp al,0ah
++ jnz putc_30
++ push ax
++ mov al,0dh
++ call putc_50
++ pop ax
++putc_30:
++ call putc_50
++ popa
++ ret
++putc_50:
++ mov bx,7
++ mov ah,0eh
++ int 10h
++ ret
++
++
++; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
++; Read char from stdin.
++;
++; return:
++; eax char
++;
++; Note: 32 bit call/ret!
++;
++getchar:
++ pushad
++ mov ah,10h
++ int 16h
++ mov [gc_tmp],al
++ popad
++ movzx eax,byte [gc_tmp]
++ o32 ret
++
++
++; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
++; Clear screen.
++;
++; Note: 32 bit call/ret!
++;
++clrscr:
++ pushad
++ push es
++ push word 40h
++ pop es
++ mov ax,600h
++ mov bh,7
++ xor cx,cx
++ mov dl,[es:4ah]
++ or dl,dl
++ jnz clrscr_20
++ mov dl,80
++clrscr_20:
++ dec dl
++ mov dh,[es:84h]
++ or dh,dh
++ jnz clrscr_30
++ mov dh,24
++clrscr_30:
++ int 10h
++ mov ah,2
++ mov bh,[es:62h]
++ xor dx,dx
++ int 10h
++ pop es
++ popad
++ o32 ret
++
++
++; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
++; dst = memcpy(dst, src, size).
++;
++; args on stack
++;
++; return:
++; eax dst
++;
++; Note: 32 bit call/ret!
++;
++memcpy:
++ pushad
++
++ mov edi,[esp+0x20+4]
++ mov esi,[esp+0x20+8]
++ mov ecx,[esp+0x20+12]
++
++ rep movsb
++
++ popad
++
++ mov eax,[esp+4]
++
++ o32 ret
++
++
++; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
++; dst = memset(dst, val, size).
++;
++; args on stack
++;
++; return:
++; eax dst
++;
++; Note: 32 bit call/ret!
++;
++memset:
++ pushad
++
++ mov edi,[esp+0x20+4]
++ mov al,[esp+0x20+8]
++ mov ecx,[esp+0x20+12]
++
++ rep stosb
++
++ popad
++
++ mov eax,[esp+4]
++
++ o32 ret
++
++
++; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
++; dst = memset32(dst, val, size).
++;
++; args on stack
++;
++; return:
++; eax dst
++;
++; Note: 32 bit call/ret!
++;
++memset32:
++ pushad
++
++ push es
++
++ mov ebx,[esp+0x22+4] ; edi
++ mov al,[esp+0x22+8]
++ mov edx,[esp+0x22+12]
++
++memset32_20:
++ mov edi,ebx
++ mov ecx,ebx
++ and di,0fh
++ shr ecx,4
++ mov es,cx
++
++ mov ecx,0fff0h
++ cmp edx,ecx
++ ja memset32_40
++ mov ecx,edx
++memset32_40:
++ add ebx,ecx
++ sub edx,ecx
++
++ rep stosb
++
++ jnz memset32_20
++
++ pop es
++
++ popad
++
++ mov eax,[esp+4]
++
++ o32 ret
++
++
++; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
++; dst = memcpy32(dst, src, size).
++;
++; dst, src are 32bit linear addresses
++;
++; args on stack
++;
++; return:
++; eax dst
++;
++; Note: 32 bit call/ret!
++;
++memcpy32:
++ pushad
++
++ push ds
++ push es
++
++ mov ebx,[esp+0x24+4] ; edi
++ mov eax,[esp+0x24+8] ; esi
++ mov edx,[esp+0x24+12]
++
++memcpy32_20:
++ mov edi,ebx
++ mov ecx,ebx
++ and di,0fh
++ shr ecx,4
++ mov es,cx
++
++ mov esi,eax
++ mov ecx,eax
++ and si,0fh
++ shr ecx,4
++ mov ds,cx
++
++ mov ecx,0fff0h
++ cmp edx,ecx
++ ja memcpy32_40
++ mov ecx,edx
++memcpy32_40:
++ add ebx,ecx
++ add eax,ecx
++ sub edx,ecx
++
++ rep movsb
++
++ jnz memcpy32_20
++
++ pop es
++ pop ds
++
++ popad
++
++ mov eax,[esp+4]
++
++ o32 ret
++
++
++; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
++; x86int(int, *regs).
++;
++; args on stack
++;
++; Note: 32 bit call/ret!
++;
++x86int:
++ pushad
++
++ mov al,[esp+0x20+4]
++ mov [x86int_p],al
++ mov ebx,[esp+0x20+8]
++
++ mov ecx,[bx+8]
++ mov edx,[bx+0ch]
++ mov esi,[bx+10h]
++ mov edi,[bx+14h]
++ mov ebp,[bx+18h]
++ mov ah,[bx+1ch] ; eflags
++ sahf
++ mov eax,[bx]
++
++ mov es,[bx+22h]
++ mov fs,[bx+24h]
++ mov gs,[bx+26h]
++ mov ds,[bx+20h]
++
++ mov ebx,[cs:bx+4]
++
++ int 0h
++x86int_p equ $-1
++
++ push ebx
++ mov ebx,[esp+0x24+8]
++ pop dword [cs:bx+4]
++
++ mov [cs:bx],eax
++ mov [cs:bx+20h],ds
++
++ mov ax,cs
++ mov ds,ax
++
++ mov [cs:bx+22h],es
++ mov [cs:bx+24h],fs
++ mov [cs:bx+26h],gs
++
++ mov es,ax
++ mov fs,ax
++ mov gs,ax
++
++ mov [bx+8],ecx
++ mov [bx+0ch],edx
++ mov [bx+10h],esi
++ mov [bx+14h],edi
++ mov [bx+18h],ebp
++ pushfd
++ pop dword [bx+1ch]
++
++ popad
++
++ o32 ret
++
++
++; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
++; farcall(addr, *regs).
++;
++; args on stack
++;
++; Note: 32 bit call/ret!
++;
++farcall:
++ pushad
++
++ mov ebx,[esp+0x20+8]
++
++ mov ecx,[bx+8]
++ mov edx,[bx+0ch]
++ mov esi,[bx+10h]
++ mov edi,[bx+14h]
++ mov ebp,[bx+18h]
++ mov ah,[bx+1ch] ; eflags
++ sahf
++ mov eax,[bx]
++
++ mov [farcall_stack],sp
++ sub word [farcall_stack],1000h ; 4k stack should be enough for gfxboot
++ mov [farcall_stack+2],ss
++
++ mov es,[bx+22h]
++ mov fs,[bx+24h]
++ mov gs,[bx+26h]
++ mov ds,[bx+20h]
++
++ mov ebx,[cs:bx+4]
++
++ call far [esp+0x20+4]
++
++ push ebx
++ mov ebx,[esp+0x24+8]
++ pop dword [cs:bx+4]
++
++ mov [cs:bx],eax
++ mov [cs:bx+20h],ds
++
++ mov ax,cs
++ mov ds,ax
++
++ mov [cs:bx+22h],es
++ mov [cs:bx+24h],fs
++ mov [cs:bx+26h],gs
++
++ mov es,ax
++ mov fs,ax
++ mov gs,ax
++
++ mov [bx+8],ecx
++ mov [bx+0ch],edx
++ mov [bx+10h],esi
++ mov [bx+14h],edi
++ mov [bx+18h],ebp
++ pushfd
++ pop dword [bx+1ch]
++
++ popad
++
++ o32 ret
++
++; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
++; wrapper around gfx_cb()
++;
++; we need to switch stack to ensure ss = cs = ds = es for gcc
++;
++_gfx_cb:
++ push cs
++ pop ds
++ push cs
++ pop es
++ mov [cb_stack],sp
++ mov [cb_stack+2],ss
++ lss sp,[farcall_stack]
++ sub sp,28h ; sizeof x86regs_t
++ mov [esp+18h],ebp
++ mov ebp,esp
++ push ebp
++ mov [bp],eax
++ mov [bp+4],ebx
++ mov [bp+8],ecx
++ mov [bp+0ch],edx
++ mov [bp+10h],esi
++ mov [bp+14h],edi
++ call dword gfx_cb
++ lea ebp,[esp+4]
++ mov eax,[bp]
++ mov ebx,[bp+4]
++ mov ecx,[bp+8]
++ mov edx,[bp+0ch]
++ mov esi,[bp+10h]
++ mov edi,[bp+14h]
++ mov ebp,[bp+18h]
++ lss sp,[cb_stack]
++ retf
++
++
++; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
++; wrapper around syslinux_hook()
++;
++; ensure cs = ds = es for gcc
++;
++_syslinux_hook:
++ push cs
++ pop ds
++ push cs
++ pop es
++ sub sp,28h ; sizeof x86regs_t
++ mov [esp+18h],ebp
++ mov ebp,esp
++ push ebp
++ mov [bp],eax
++ mov [bp+4],ebx
++ mov [bp+8],ecx
++ mov [bp+0ch],edx
++ mov [bp+10h],esi
++ mov [bp+14h],edi
++ call dword syslinux_hook
++ lea ebp,[esp+4]
++ mov eax,[bp]
++ mov ebx,[bp+4]
++ mov ecx,[bp+8]
++ mov edx,[bp+0ch]
++ mov esi,[bp+10h]
++ mov edi,[bp+14h]
++ mov ebp,[bp+18h]
++ add sp,28h+4
++ retf
++
++; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
++reboot:
++ mov word [472h],1234h
++ jmp 0ffffh:0
++ int 19h
++ jmp $
++
++
++; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
++ section .data
++
++farcall_stack dd 0
++cb_stack dd 0
++
++; buffer for number conversions
++; must be large enough for ps_status_info()
++num_buf times 23h db 0
++num_buf_end db 0
++
++; temp data for printf
++pf_args dw 0
++pf_num dd 0
++pf_sig db 0
++pf_pad db 0
++pf_raw_char db 0
++gc_tmp db 0
++
+diff --git a/modules/libio.h b/modules/libio.h
+new file mode 100644
+index 0000000..16af520
+--- /dev/null
++++ b/modules/libio.h
+@@ -0,0 +1,133 @@
++/*
++ *
++ * libio.h include file for libio
++ *
++ * Copyright (c) 2009 Steffen Winterfeldt.
++ *
++ * 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, Inc., 53 Temple Place Ste 330, Boston MA
++ * 02111-1307, USA; either version 2 of the License, or (at your option) any
++ * later version; incorporated herein by reference.
++ *
++ */
++
++#ifndef _LIBIO_H
++#define _LIBIO_H
++
++
++asm(".code16gcc\n");
++
++
++#define int8_t char
++#define int16_t short
++#define int32_t int
++#define int64_t long long
++#define uint8_t unsigned char
++#define uint16_t unsigned short
++#define uint32_t unsigned
++#define uint64_t unsigned long long
++
++#define X86_CF 0x0001
++#define X86_PF 0x0004
++#define X86_AF 0x0010
++#define X86_ZF 0x0040
++#define X86_SF 0x0080
++#define X86_TF 0x0100
++#define X86_IF 0x0200
++#define X86_DF 0x0400
++#define X86_OF 0x0800
++
++#define EOF -1
++
++#define main _main
++
++
++typedef struct __attribute ((packed)) {
++ uint32_t eax, ebx, ecx, edx, esi, edi, ebp, eflags;
++ uint16_t ds, es, fs, gs;
++} x86regs_t;
++
++
++static inline uint16_t comboot_seg(void)
++{
++ uint16_t u;
++
++ asm("mov %%cs, %0" : "=r" (u));
++
++ return u;
++}
++
++
++static inline uint8_t _mem8(uint32_t p)
++{
++ uint8_t u;
++
++ asm(
++ "movl %1,%%esi\n"
++ "shrl $4,%%esi\n"
++ "mov %%si,%%fs\n"
++ "movl %1,%%esi\n"
++ "and $15, %%si\n"
++ "movb %%fs:(%%si),%0\n"
++ : "=abcd" (u) : "r" (p) : "si"
++ );
++
++ return u;
++}
++
++
++static inline uint16_t _mem16(uint32_t p)
++{
++ uint16_t u;
++
++ asm(
++ "movl %1,%%esi\n"
++ "shrl $4,%%esi\n"
++ "mov %%si,%%fs\n"
++ "movl %1,%%esi\n"
++ "and $15, %%si\n"
++ "movw %%fs:(%%si),%0\n"
++ : "=r" (u) : "r" (p) : "si"
++ );
++
++ return u;
++}
++
++
++static inline uint32_t _mem32(uint32_t p)
++{
++ uint32_t u;
++
++ asm(
++ "movl %1,%%esi\n"
++ "shrl $4,%%esi\n"
++ "mov %%si,%%fs\n"
++ "movl %1,%%esi\n"
++ "and $15, %%si\n"
++ "movl %%fs:(%%si),%0\n"
++ : "=r" (u) : "r" (p) : "si"
++ );
++
++ return u;
++}
++
++
++int _main(int argc, char **argv);
++void printf(char *format, ...) __attribute__ ((format (printf, 1, 2)));
++int getchar(void);
++void clrscr(void);
++void *memcpy(void *dest, const void *src, int n);
++uint32_t memcpy32(uint32_t dest, uint32_t src, int n);
++void *memset(void *dest, int c, int n);
++uint32_t memset32(uint32_t dest, int c, int n);
++void x86int(unsigned intr, x86regs_t *regs);
++void farcall(uint32_t seg_ofs, x86regs_t *regs);
++void gfx_cb(x86regs_t *r);
++void _gfx_cb(void);
++void syslinux_hook(x86regs_t *r);
++void _syslinux_hook(void);
++void reboot(void);
++
++#endif /* _LIBIO_H */
++
diff --git a/patches/syslinux-3.86/01_isolinux_mount_chdir.diff b/patches/syslinux-3.86/01_isolinux_mount_chdir.diff
new file mode 100644
index 0000000..3e11cb3
--- /dev/null
+++ b/patches/syslinux-3.86/01_isolinux_mount_chdir.diff
@@ -0,0 +1,175 @@
+diff --git a/core/isolinux.asm b/core/isolinux.asm
+index 23429bd..54f2e19 100644
+--- a/core/isolinux.asm
++++ b/core/isolinux.asm
+@@ -1135,73 +1135,23 @@ all_read:
+ ; (which will be at 16 only for a single-session disk!); from the PVD
+ ; we should be able to find the rest of what we need to know.
+ ;
+-get_fs_structures:
+- mov eax,[bi_pvd]
+- mov bx,trackbuf
+- call getonesec
+-
+- mov eax,[trackbuf+156+2]
+- mov [RootDir+dir_lba],eax
+- mov [CurrentDir+dir_lba],eax
+-%ifdef DEBUG_MESSAGES
+- mov si,dbg_rootdir_msg
+- call writemsg
+- call writehex8
+- call crlf
+-%endif
+- mov eax,[trackbuf+156+10]
+- mov [RootDir+dir_len],eax
+- mov [CurrentDir+dir_len],eax
+- add eax,SECTOR_SIZE-1
+- shr eax,SECTOR_SHIFT
+- mov [RootDir+dir_clust],eax
+- mov [CurrentDir+dir_clust],eax
+-
+- ; Look for an isolinux directory, and if found,
+- ; make it the current directory instead of the root
+- ; directory.
+- ; Also copy the name of the directory to CurrentDirName
+- mov word [CurrentDirName],ROOT_DIR_WORD ; Write '/',0 to the CurrentDirName
++ call iso_mount
+ mov di,boot_dir ; Search for /boot/isolinux
+- mov al,02h
+- push di
+- call searchdir_iso
+- pop di
+- jnz .found_dir
+- mov di,isolinux_dir
+- mov al,02h ; Search for /isolinux
+- push di
+- call searchdir_iso
+- pop di
+- jz .no_isolinux_dir
++ call setcwd
++ jnc .found_dir
++ mov di,isolinux_dir ; Search for /isolinux
++ call setcwd
+ .found_dir:
+- ; Copy current directory name to CurrentDirName
+- push si
+- push di
+- mov si,di
+- mov di,CurrentDirName
+- call strcpy
+- mov byte [di],0 ;done in case it's not word aligned
+- dec di
+- mov byte [di],'/'
+- pop di
+- pop si
+
+- mov [CurrentDir+dir_len],eax
+- mov eax,[si+file_left]
+- mov [CurrentDir+dir_clust],eax
+- xor eax,eax ; Free this file pointer entry
+- xchg eax,[si+file_sector]
+- mov [CurrentDir+dir_lba],eax
+ %ifdef DEBUG_MESSAGES
+ push si
+ mov si,dbg_isodir_msg
+ call writemsg
+ pop si
++ mov eax,[CurrentDir+dir_lba]
+ call writehex8
+ call crlf
+ %endif
+-.no_isolinux_dir:
+
+ ;
+ ; Locate the configuration file
+@@ -1706,6 +1656,90 @@ getfssec:
+ TRACER 'f'
+ ret
+
++;
++; setcwd: Set current working directory.
++;
++; On entry:
++; DI -> directory name
++; On exit:
++; CF = 1 -> error
++;
++; On error, the old working directory is kept.
++;
++setcwd:
++ mov al,02h
++ push di
++ call searchdir_iso
++ pop di
++ stc
++ jz .err
++ mov [CurrentDir+dir_len],eax
++ mov eax,[si+file_left]
++ mov [CurrentDir+dir_clust],eax
++ xor eax,eax
++ xchg eax,[si+file_sector]
++ mov [CurrentDir+dir_lba],eax
++ mov si,di
++ mov di,CurrentDirName
++ cmp si,di
++ jz .ok
++ mov cx,FILENAME_MAX
++ push ds
++ pop es
++.copy:
++ lodsb
++ stosb
++ or al,al
++ loopnz .copy
++ mov byte [di-1],0
++ jnz .err
++.ok:
++ clc
++.err:
++ ret
++
++;
++; Read fs meta data and setup RootDir and CurrentDir.
++;
++; On exit:
++; CF = 1 -> error
++;
++iso_mount:
++ mov eax,[bi_pvd]
++ mov bx,trackbuf
++ call getonesec
++
++ mov eax,[trackbuf+156+10]
++ mov [RootDir+dir_len],eax
++ add eax,SECTOR_SIZE-1
++ shr eax,SECTOR_SHIFT
++ mov [RootDir+dir_clust],eax
++ mov eax,[trackbuf+156+2]
++ mov [RootDir+dir_lba],eax
++
++ push ds
++ pop es
++ mov si,RootDir
++ mov di,CurrentDir
++ mov cx,dir_t_size
++ rep movsb
++
++%ifdef DEBUG_MESSAGES
++ mov si,dbg_rootdir_msg
++ call writemsg
++ call writehex8
++ call crlf
++%endif
++
++ mov di,CurrentDirName
++ call setcwd
++ jnc .ok
++ mov word [CurrentDirName],ROOT_DIR_WORD
++.ok:
++ clc
++ ret
++
++
+ ; -----------------------------------------------------------------------------
+ ; Common modules
+ ; -----------------------------------------------------------------------------
diff --git a/patches/syslinux-3.86/02_comboot_new_api.diff b/patches/syslinux-3.86/02_comboot_new_api.diff
new file mode 100644
index 0000000..af3c263
--- /dev/null
+++ b/patches/syslinux-3.86/02_comboot_new_api.diff
@@ -0,0 +1,70 @@
+diff --git a/core/comboot.inc b/core/comboot.inc
+index f8a7853..37bd0f2 100644
+--- a/core/comboot.inc
++++ b/core/comboot.inc
+@@ -970,6 +970,45 @@ comapi_shufraw:
+ mov ecx,P_ECX
+ jmp shuffle_and_boot_raw
+
++
++;
++; INT 22h AX=0025h Set current working directory
++;
++%if IS_ISOLINUX
++comapi_setcwd:
++ mov si,P_BX
++ mov di,TmpDirName
++ mov cx,FILENAME_MAX
++ mov ds,P_ES
++.copy:
++ lodsb
++ stosb
++ or al,al
++ loopnz .copy
++ push cs
++ pop ds
++ stc
++ jnz .err
++ mov di,TmpDirName
++ call setcwd
++.err:
++ ret
++%else
++comapi_setcwd equ comapi_err
++%endif
++
++
++;
++; INT 22h AX=0026h Read filesystem meta data
++;
++%if IS_ISOLINUX
++comapi_mount:
++; call iso_mount
++ ret
++%else
++comapi_mount equ comapi_err
++%endif
++
+ section .data
+
+ %macro int21 2
+@@ -1029,6 +1068,8 @@ int22_table:
+ dw comapi_closedir ; 0022 close directory
+ dw comapi_shufsize ; 0023 query shuffler size
+ dw comapi_shufraw ; 0024 cleanup, shuffle and boot raw
++ dw comapi_setcwd ; 0025 set current working directory
++ dw comapi_mount ; 0026 read fs structures (aka mount)
+ int22_count equ ($-int22_table)/2
+
+ APIKeyWait db 0
+@@ -1049,8 +1090,9 @@ feature_flags_len equ ($-feature_flags)
+ err_notdos db ': attempted DOS system call INT ',0
+ err_comlarge db 'COMBOOT image too large.', CR, LF, 0
+
+- section .bss1
++ section .bss2
+ alignb 4
+ DOSErrTramp resd 33 ; Error trampolines
++TmpDirName resb FILENAME_MAX
+ ConfigName resb FILENAME_MAX
+ CurrentDirName resb FILENAME_MAX
diff --git a/patches/syslinux-3.86/03_doc.diff b/patches/syslinux-3.86/03_doc.diff
new file mode 100644
index 0000000..ca4d37a
--- /dev/null
+++ b/patches/syslinux-3.86/03_doc.diff
@@ -0,0 +1,25 @@
+diff --git a/doc/comboot.txt b/doc/comboot.txt
+index eb43708..13d18f6 100644
+--- a/doc/comboot.txt
++++ b/doc/comboot.txt
+@@ -949,3 +949,20 @@ AX=0024h [3.80] Cleanup, shuffle and boot, raw version
+ with read/write data segments, matching the respective code
+ segment. For mode 0, B=0 and the limits will be 64K, for mode
+ 1, B=1 and the limits will be 4 GB.
++
++
++AX=0025h [3.84] Set current working directory
++ Input: AX 00025h
++ ES:BX null-terminated directory name string
++ Output: None
++
++ Sets the current working directory. For SYSLINUX, ISOLINUX,
++ and PXELINUX, this will be an absolute path.
++
++
++AX=0026h [3.84] Read file system metadata [ISOLINUX]
++ Input: AX 00026h
++ Output: None
++
++ Reads filesystem data (e.g. after a CDROM change).
++
diff --git a/patches/syslinux-3.86/04_no_gfxboot_com.diff b/patches/syslinux-3.86/04_no_gfxboot_com.diff
new file mode 100644
index 0000000..032713f
--- /dev/null
+++ b/patches/syslinux-3.86/04_no_gfxboot_com.diff
@@ -0,0 +1,13 @@
+diff --git a/modules/Makefile b/modules/Makefile
+index 77020ea..f318364 100644
+--- a/modules/Makefile
++++ b/modules/Makefile
+@@ -19,7 +19,7 @@ include $(topdir)/MCONFIG.embedded
+
+ INCLUDES = -I$(com32)/include
+
+-BINS = pxechain.com gfxboot.com poweroff.com int18.com
++BINS = pxechain.com poweroff.com int18.com
+
+ all: $(BINS)
+
diff --git a/test/c32/gfxtest.config b/test/c32/gfxtest.config
new file mode 100644
index 0000000..f043184
--- /dev/null
+++ b/test/c32/gfxtest.config
@@ -0,0 +1,15 @@
+# all files in this directory ex this config file are added
+# to the bootloader directory
+
+# archive file name in theme directory
+archive=bootlogo
+
+# setup function name in 'gfxtest' script
+setup=isolinux
+
+# list of files to remove in bootloader directory
+rm_files="gfxboot.com"
+
+# additional 'gfxboot' args
+args=""
+
diff --git a/test/c32_pxe/gfxtest.config b/test/c32_pxe/gfxtest.config
new file mode 100644
index 0000000..1749f57
--- /dev/null
+++ b/test/c32_pxe/gfxtest.config
@@ -0,0 +1,15 @@
+# all files in this directory ex this config file are added
+# to the bootloader directory
+
+# archive file name in theme directory
+archive=bootlogo
+
+# setup function name in 'gfxtest' script
+setup=pxelinux
+
+# list of files to remove in bootloader directory
+rm_files="gfxboot.com"
+
+# additional 'gfxboot' args
+args=""
+
diff --git a/test/cdrom/gfxtest.config b/test/cdrom/gfxtest.config
new file mode 100644
index 0000000..2590441
--- /dev/null
+++ b/test/cdrom/gfxtest.config
@@ -0,0 +1,15 @@
+# all files in this directory ex this config file are added
+# to the bootloader directory
+
+# archive file name in theme directory
+archive=bootlogo
+
+# setup function name in 'gfxtest' script
+setup=isolinux
+
+# list of files to remove in bootloader directory
+rm_files=""
+
+# additional 'gfxboot' args
+args=""
+
diff --git a/test/ddc/ddc b/test/ddc/ddc
new file mode 100644
index 0000000..6f4c640
--- /dev/null
+++ b/test/ddc/ddc
Binary files differ
diff --git a/test/ddc/gfxtest.config b/test/ddc/gfxtest.config
new file mode 100644
index 0000000..2590441
--- /dev/null
+++ b/test/ddc/gfxtest.config
@@ -0,0 +1,15 @@
+# all files in this directory ex this config file are added
+# to the bootloader directory
+
+# archive file name in theme directory
+archive=bootlogo
+
+# setup function name in 'gfxtest' script
+setup=isolinux
+
+# list of files to remove in bootloader directory
+rm_files=""
+
+# additional 'gfxboot' args
+args=""
+
diff --git a/test/grub/gfxtest.config b/test/grub/gfxtest.config
new file mode 100644
index 0000000..639f8af
--- /dev/null
+++ b/test/grub/gfxtest.config
@@ -0,0 +1,15 @@
+# all files in this directory ex this config file are added
+# to the bootloader directory
+
+# archive file name in theme directory
+archive=message
+
+# setup function name in 'gfxtest' script
+setup=grub
+
+# list of files to remove in bootloader directory
+rm_files=""
+
+# additional 'gfxboot' args
+args=""
+
diff --git a/test/lilo/gfxtest.config b/test/lilo/gfxtest.config
new file mode 100644
index 0000000..e03ab6e
--- /dev/null
+++ b/test/lilo/gfxtest.config
@@ -0,0 +1,15 @@
+# all files in this directory ex this config file are added
+# to the bootloader directory
+
+# archive file name in theme directory
+archive=message
+
+# setup function name in 'gfxtest' script
+setup=lilo
+
+# list of files to remove in bootloader directory
+rm_files=""
+
+# additional 'gfxboot' args
+args=""
+
diff --git a/test/pxe/gfxtest.config b/test/pxe/gfxtest.config
new file mode 100644
index 0000000..f9e6cf4
--- /dev/null
+++ b/test/pxe/gfxtest.config
@@ -0,0 +1,15 @@
+# all files in this directory ex this config file are added
+# to the bootloader directory
+
+# archive file name in theme directory
+archive=bootlogo
+
+# setup function name in 'gfxtest' script
+setup=pxelinux
+
+# list of files to remove in bootloader directory
+rm_files=""
+
+# additional 'gfxboot' args
+args=""
+
diff --git a/test/syslinux/gfxtest.config b/test/syslinux/gfxtest.config
new file mode 100644
index 0000000..6b0aafc
--- /dev/null
+++ b/test/syslinux/gfxtest.config
@@ -0,0 +1,15 @@
+# all files in this directory ex this config file are added
+# to the bootloader directory
+
+# archive file name in theme directory
+archive=bootlogo
+
+# setup function name in 'gfxtest' script
+setup=syslinux
+
+# list of files to remove in bootloader directory
+rm_files=""
+
+# additional 'gfxboot' args
+args=""
+
diff --git a/themes/KDE/Makefile b/themes/KDE/Makefile
new file mode 120000
index 0000000..de7f369
--- /dev/null
+++ b/themes/KDE/Makefile
@@ -0,0 +1 @@
+../openSUSE/Makefile \ No newline at end of file
diff --git a/themes/KDE/config b/themes/KDE/config
new file mode 100644
index 0000000..e45c386
--- /dev/null
+++ b/themes/KDE/config
@@ -0,0 +1,2 @@
+product=KDE
+based_on=openSUSE
diff --git a/themes/KDE/data-boot/back.jpg b/themes/KDE/data-boot/back.jpg
new file mode 100644
index 0000000..e204ccd
--- /dev/null
+++ b/themes/KDE/data-boot/back.jpg
Binary files differ
diff --git a/themes/KDE/data-install/back.jpg b/themes/KDE/data-install/back.jpg
new file mode 100644
index 0000000..e204ccd
--- /dev/null
+++ b/themes/KDE/data-install/back.jpg
Binary files differ
diff --git a/themes/KDE/data-install/welcome.jpg b/themes/KDE/data-install/welcome.jpg
new file mode 100644
index 0000000..8a27c1a
--- /dev/null
+++ b/themes/KDE/data-install/welcome.jpg
Binary files differ
diff --git a/themes/SLED/Makefile b/themes/SLED/Makefile
new file mode 120000
index 0000000..de7f369
--- /dev/null
+++ b/themes/SLED/Makefile
@@ -0,0 +1 @@
+../openSUSE/Makefile \ No newline at end of file
diff --git a/themes/SLED/config b/themes/SLED/config
new file mode 100644
index 0000000..58667cf
--- /dev/null
+++ b/themes/SLED/config
@@ -0,0 +1,2 @@
+product=SLED 12
+based_on=openSUSE
diff --git a/themes/SLED/data-boot/back.jpg b/themes/SLED/data-boot/back.jpg
new file mode 100644
index 0000000..ac7ce13
--- /dev/null
+++ b/themes/SLED/data-boot/back.jpg
Binary files differ
diff --git a/themes/SLED/data-install/back.jpg b/themes/SLED/data-install/back.jpg
new file mode 100644
index 0000000..ac7ce13
--- /dev/null
+++ b/themes/SLED/data-install/back.jpg
Binary files differ
diff --git a/themes/SLED/data-install/text.jpg b/themes/SLED/data-install/text.jpg
new file mode 100644
index 0000000..4809088
--- /dev/null
+++ b/themes/SLED/data-install/text.jpg
Binary files differ
diff --git a/themes/SLED/data-install/welcome.jpg b/themes/SLED/data-install/welcome.jpg
new file mode 100644
index 0000000..44f1d3b
--- /dev/null
+++ b/themes/SLED/data-install/welcome.jpg
Binary files differ
diff --git a/themes/SLES/Makefile b/themes/SLES/Makefile
new file mode 120000
index 0000000..de7f369
--- /dev/null
+++ b/themes/SLES/Makefile
@@ -0,0 +1 @@
+../openSUSE/Makefile \ No newline at end of file
diff --git a/themes/SLES/config b/themes/SLES/config
new file mode 100644
index 0000000..3e4ace9
--- /dev/null
+++ b/themes/SLES/config
@@ -0,0 +1,2 @@
+product=SLES 12
+based_on=openSUSE
diff --git a/themes/SLES/data-boot/back.jpg b/themes/SLES/data-boot/back.jpg
new file mode 100644
index 0000000..7f195d7
--- /dev/null
+++ b/themes/SLES/data-boot/back.jpg
Binary files differ
diff --git a/themes/SLES/data-install/back.jpg b/themes/SLES/data-install/back.jpg
new file mode 100644
index 0000000..7f195d7
--- /dev/null
+++ b/themes/SLES/data-install/back.jpg
Binary files differ
diff --git a/themes/SLES/data-install/text.jpg b/themes/SLES/data-install/text.jpg
new file mode 100644
index 0000000..4809088
--- /dev/null
+++ b/themes/SLES/data-install/text.jpg
Binary files differ
diff --git a/themes/SLES/data-install/welcome.jpg b/themes/SLES/data-install/welcome.jpg
new file mode 100644
index 0000000..386f626
--- /dev/null
+++ b/themes/SLES/data-install/welcome.jpg
Binary files differ
diff --git a/themes/example_01/Makefile b/themes/example_01/Makefile
new file mode 100644
index 0000000..a3d1be4
--- /dev/null
+++ b/themes/example_01/Makefile
@@ -0,0 +1,21 @@
+BINDIR := $(shell [ -x ../../gfxboot-compile ] && echo ../../ )
+GFXBOOT_COMPILE = $(BINDIR)gfxboot-compile
+GFXBOOT_FONT = $(BINDIR)gfxboot-font
+GFXBOOT = $(BINDIR)gfxboot
+BFLAGS = -O -v -L ../..
+
+.PHONY: all themes clean distclean
+
+all: bootlogo
+
+bootlogo: example_*.bc
+ @rm -rf $@.dir
+ @mkdir $@.dir
+ $(GFXBOOT_COMPILE) $(BFLAGS) -l $@.log -c $< $@.dir/init
+ $(GFXBOOT) --archive $@.dir --pack-archive $@
+
+clean:
+ rm -rf *~ *.log *.dir bootlogo
+
+distclean: clean
+
diff --git a/themes/example_01/example_01.bc b/themes/example_01/example_01.bc
new file mode 100644
index 0000000..c7e9842
--- /dev/null
+++ b/themes/example_01/example_01.bc
@@ -0,0 +1,108 @@
+% example_01.bc
+%
+% Very minimalistic demo. Writes a short message in text mode and lets you
+% boot linux or start from local disk.
+%
+% Notes:
+%
+% General work flow:
+% - this code is run during initialization and must leave either 'true'
+% or 'false' on the top of stack (TOS)
+%
+% - it must define (at least) a callback function 'KeyEvent' that is
+% called later from the bootloader whenever a key is pressed
+%
+% - 'KeyEvent' returns a status code telling the bootloader how to
+% proceed (e.g. boot or wait for more input)
+%
+% Test with (from top level dir [/usr/share/gfxboot]) 'gfxtest -t example_01'.
+%
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Some constants we probably need.
+%
+/true 0 0 eq def
+/false 0 0 ne def
+
+% pointer type
+/t_ptr 12 def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Convert integer to pointer.
+%
+% ( int1 -- ptr1 )
+%
+/cvp { t_ptr settype } def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Clear VGA text screen.
+%
+% ( -- )
+%
+/clearscreen {
+ % text screen starts at 0xb8000, two bytes per char (value + attribute)
+ % typical size: 25 x 80
+ % write spaces + attribute 7 (= light gray on black)
+ 0xb8000 2 0xb8000 160 25 mul add 1 sub {
+ cvp 0x0720 putword
+ } for
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Write to VGA text screen.
+%
+% ( x y text -- )
+%
+/print {
+ exch 80 mul
+ rot add 2 mul 0xb8000 add cvp
+ exch { over exch putbyte 2 add } forall
+ pop
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Input event handling.
+%
+% ( key -- input_buffer menu_entry action )
+%
+% key
+% bit 0-7 ascii
+% bit 8-15 scan code
+% bit 16-32 status bits (ctrl, shift...)
+%
+% action
+% 0: ok, stay in input loop
+% 1: switch to text mode (that is, continue with the non-gfxboot bootloader interface)
+% >=2: boot
+%
+% Notes:
+% - key = 0 indicates the bootloader timeout is up.
+% - input_buffer is the command line that you would have normally entered in the bootloader.
+% note that for syslinux it must start with the menu label string but not for grub
+% - menu_entry is the number of the menu entry you want to boot
+%
+/KeyEvent {
+ /key exch def
+
+ % 'linux' & 'harddisk' are labels in our test bootloader config (created by 'gfxtest')
+ key 0xff and 'l' eq { "linux" 1 2 return } if
+ key 0xff and 'd' eq { "harddisk" 0 2 return } if
+
+ "" 0 0
+} def
+
+
+% clear screen
+clearscreen
+
+% write some message
+10 12 "Press 'l' to start linux or 'd' to boot from disk." print
+
+% say we're fine ('false' tells bootloader not to use gfxboot)
+true
+
diff --git a/themes/example_02/Makefile b/themes/example_02/Makefile
new file mode 100644
index 0000000..0fb4640
--- /dev/null
+++ b/themes/example_02/Makefile
@@ -0,0 +1,25 @@
+BINDIR := $(shell [ -x ../../gfxboot-compile ] && echo ../../ )
+GFXBOOT_COMPILE = $(BINDIR)gfxboot-compile
+GFXBOOT_FONT = $(BINDIR)gfxboot-font
+GFXBOOT = $(BINDIR)gfxboot
+BFLAGS = -O -v -L ../..
+
+.PHONY: all themes clean distclean
+
+all: bootlogo
+
+bootlogo: example_*.bc font
+ @rm -rf $@.dir
+ @mkdir $@.dir
+ $(GFXBOOT_COMPILE) $(BFLAGS) -l $@.log -c $< $@.dir/init
+ @cp font.fnt $@.dir
+ $(GFXBOOT) --archive $@.dir --pack-archive $@
+
+font:
+ $(GFXBOOT_FONT) -v -f DejaVuSans:size=20 font.fnt >font.log
+
+clean:
+ rm -rf *~ *.log *.dir bootlogo *.fnt
+
+distclean: clean
+
diff --git a/themes/example_02/example_02.bc b/themes/example_02/example_02.bc
new file mode 100644
index 0000000..c2d848d
--- /dev/null
+++ b/themes/example_02/example_02.bc
@@ -0,0 +1,83 @@
+% example_02.bc
+%
+% Very minimalistic demo. Writes a short message in graphics mode and lets you
+% boot linux or start from local disk.
+%
+% Notes:
+% - the only difference to example_01 is that we use graphics mode
+%
+% Test with (from top level dir [/usr/share/gfxboot]) 'gfxtest -t example_02'.
+%
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Some constants we probably need.
+%
+/true 0 0 eq def
+/false 0 0 ne def
+
+% pointer type
+/t_ptr 12 def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Convert integer to pointer.
+%
+% ( int1 -- ptr1 )
+%
+/cvp { t_ptr settype } def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Input event handling.
+%
+% ( key -- input_buffer menu_entry action )
+%
+% key
+% bit 0-7 ascii
+% bit 8-15 scan code
+% bit 16-32 status bits (ctrl, shift...)
+%
+% action
+% 0: ok, stay in input loop
+% 1: switch to text mode (that is, continue with the non-gfxboot bootloader interface)
+% >=2: boot
+%
+% Notes:
+% - key = 0 indicates the bootloader timeout is up.
+% - input_buffer is the command line that you would have normally entered in the bootloader.
+% note that for syslinux it must start with the menu label string but not for grub
+% - menu_entry is the number of the menu entry you want to boot
+%
+/KeyEvent {
+ /key exch def
+
+ % 'linux' & 'harddisk' are labels in our test bootloader config (created by 'gfxtest')
+ key 0xff and 'l' eq { "linux" 1 2 return } if
+ key 0xff and 'd' eq {
+ % return to text mode first so you can see the error message
+ 3 setmode pop
+ "harddisk" 0 2 return
+ } if
+
+ "" 0 0
+} def
+
+
+% set graphics mode
+% 0x114 = 800x600, 16 bit
+0x114 setmode pop
+
+% load and set font
+"font.fnt" findfile setfont
+
+% set default color, e.g. yellow
+0xe8e800 setcolor
+
+% write some message
+70 280 moveto
+"Press 'l' to start linux or 'd' to boot from disk." show
+
+% say we're fine ('false' tells bootloader not to use gfxboot)
+true
+
diff --git a/themes/example_03/Makefile b/themes/example_03/Makefile
new file mode 100644
index 0000000..cffce2e
--- /dev/null
+++ b/themes/example_03/Makefile
@@ -0,0 +1,25 @@
+BINDIR := $(shell [ -x ../../gfxboot-compile ] && echo ../../ )
+GFXBOOT_COMPILE = $(BINDIR)gfxboot-compile
+GFXBOOT_FONT = $(BINDIR)gfxboot-font
+GFXBOOT = $(BINDIR)gfxboot
+BFLAGS = -O -v -L ../..
+
+.PHONY: all themes clean distclean
+
+all: bootlogo
+
+bootlogo: example_*.bc font
+ @rm -rf $@.dir
+ @mkdir $@.dir
+ $(GFXBOOT_COMPILE) $(BFLAGS) -l $@.log -c $< $@.dir/init
+ @cp clouds.jpg font.fnt $@.dir
+ $(GFXBOOT) --archive $@.dir --pack-archive $@
+
+font:
+ $(GFXBOOT_FONT) -v -f DejaVuSans:size=20 font.fnt >font.log
+
+clean:
+ rm -rf *~ *.log *.dir bootlogo *.fnt
+
+distclean: clean
+
diff --git a/themes/example_03/clouds.jpg b/themes/example_03/clouds.jpg
new file mode 100644
index 0000000..8ddca7c
--- /dev/null
+++ b/themes/example_03/clouds.jpg
Binary files differ
diff --git a/themes/example_03/example_03.bc b/themes/example_03/example_03.bc
new file mode 100644
index 0000000..75aea69
--- /dev/null
+++ b/themes/example_03/example_03.bc
@@ -0,0 +1,133 @@
+% example_03.bc
+%
+% Very minimalistic demo. Writes a short message in graphics mode and lets you
+% boot linux or start from local disk.
+%
+% Notes:
+% - the video mode number is no longer hardcoded and we exit if the video mode
+% could not be set
+%
+% - we use a background picture
+%
+% Test with (from top level dir [/usr/share/gfxboot]) 'gfxtest -t example_03'.
+%
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Some constants we probably need.
+%
+/true 0 0 eq def
+/false 0 0 ne def
+
+% type values
+/t_none 0 def
+/t_end 11 def
+/t_ptr 12 def
+
+% undefined (nil) value
+/.undef 0 t_none settype def
+
+% end token, stops execution
+/.end 0 t_end settype def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Convert integer to pointer.
+%
+% ( int1 -- ptr1 )
+%
+/cvp { t_ptr settype } def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+%% findmode - find video mode number
+%
+% ( int1 int2 int3 -- int4 )
+%
+% int1, int2: width, height
+% int3: color bits
+% int4: mode number (or .undef)
+%
+% example
+% 1024 768 16 findmode setmode % 1024x768, 16-bit color mode
+%
+/findmode {
+ 0 1 videomodes {
+ videomodeinfo dup .undef eq {
+ pop pop pop pop
+ } {
+ % compare width, height, colors
+ 6 index 4 index eq 6 index 4 index eq and 5 index 3 index eq and {
+ 7 1 roll 6 { pop } repeat 0xbfff and return
+ } {
+ pop pop pop pop
+ } ifelse
+ } ifelse
+ } for
+
+ pop pop pop .undef
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Input event handling.
+%
+% ( key -- input_buffer menu_entry action )
+%
+% key
+% bit 0-7 ascii
+% bit 8-15 scan code
+% bit 16-32 status bits (ctrl, shift...)
+%
+% action
+% 0: ok, stay in input loop
+% 1: switch to text mode (that is, continue with the non-gfxboot bootloader interface)
+% >=2: boot
+%
+% Notes:
+% - key = 0 indicates the bootloader timeout is up.
+% - input_buffer is the command line that you would have normally entered in the bootloader.
+% note that for syslinux it must start with the menu label string but not for grub
+% - menu_entry is the number of the menu entry you want to boot
+%
+/KeyEvent {
+ /key exch def
+
+ % 'linux' & 'harddisk' are labels in our test bootloader config (created by 'gfxtest')
+ key 0xff and 'l' eq { "linux" 1 2 return } if
+ key 0xff and 'd' eq {
+ % return to text mode first so you can see the error message
+ 3 setmode pop
+ "harddisk" 0 2 return
+ } if
+
+ "" 0 0
+} def
+
+
+% set 800x600 graphics mode
+% try 32 bit first; if no mode can be found, exit and continue without gfxboot
+800 600 32 findmode setmode not {
+ 800 600 16 findmode setmode not {
+ false .end
+ } if
+} if
+
+% load and set font
+"font.fnt" findfile setfont
+
+% load and set background image
+"clouds.jpg" findfile setimage
+0 0 moveto
+0 0 image.size image
+
+% set default color, e.g. yellow
+0xe8e800 setcolor
+
+% write some message
+70 280 moveto
+"Press 'l' to start linux or 'd' to boot from disk." show
+
+% say we're fine ('false' tells bootloader not to use gfxboot)
+true
+
diff --git a/themes/example_04/Makefile b/themes/example_04/Makefile
new file mode 100644
index 0000000..07357a5
--- /dev/null
+++ b/themes/example_04/Makefile
@@ -0,0 +1,25 @@
+BINDIR := $(shell [ -x ../../gfxboot-compile ] && echo ../../ )
+GFXBOOT_COMPILE = $(BINDIR)gfxboot-compile
+GFXBOOT_FONT = $(BINDIR)gfxboot-font
+GFXBOOT = $(BINDIR)gfxboot
+BFLAGS = -O -v -L ../..
+
+.PHONY: all themes clean distclean
+
+all: bootlogo
+
+bootlogo: example_*.bc font
+ @rm -rf $@.dir
+ @mkdir $@.dir
+ $(GFXBOOT_COMPILE) $(BFLAGS) -l $@.log -c $< $@.dir/init
+ @cp clouds.jpg font.fnt $@.dir
+ $(GFXBOOT) --archive $@.dir --pack-archive $@
+
+font:
+ $(GFXBOOT_FONT) -v -f DejaVuSans:size=32 font.fnt >font.log
+
+clean:
+ rm -rf *~ *.log *.dir bootlogo *.fnt
+
+distclean: clean
+
diff --git a/themes/example_04/clouds.jpg b/themes/example_04/clouds.jpg
new file mode 100644
index 0000000..8ddca7c
--- /dev/null
+++ b/themes/example_04/clouds.jpg
Binary files differ
diff --git a/themes/example_04/example_04.bc b/themes/example_04/example_04.bc
new file mode 100644
index 0000000..6d6fbf6
--- /dev/null
+++ b/themes/example_04/example_04.bc
@@ -0,0 +1,226 @@
+% example_04.bc
+%
+% Draws simple menu and lets you select an entry.
+%
+% Notes:
+% - 'MenuInit' is, like 'KeyEvent' a callback function; it must be defined
+% if you want the menu data
+%
+% - also, we process the keycode a bit to get the ASCII value
+%
+% Test with (from top level dir [/usr/share/gfxboot]) 'gfxtest -t example_04'.
+%
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Some constants we probably need.
+%
+/true 0 0 eq def
+/false 0 0 ne def
+
+% some key codes
+/keyEsc 0x0000001b def
+/keyEnter 0x0000000d def
+/keyUp 0x48000000 def
+/keyLeft 0x4b000000 def
+/keyRight 0x4d000000 def
+/keyDown 0x50000000 def
+
+% type values
+/t_none 0 def
+/t_end 11 def
+/t_ptr 12 def
+
+% undefined (nil) value
+/.undef 0 t_none settype def
+
+% end token, stops execution
+/.end 0 t_end settype def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Convert integer to pointer.
+%
+% ( int1 -- ptr1 )
+%
+/cvp { t_ptr settype } def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% findmode - find video mode number
+%
+% ( int1 int2 int3 -- int4 )
+%
+% int1, int2: width, height
+% int3: color bits
+% int4: mode number (or .undef)
+%
+% example
+% 1024 768 16 findmode setmode % 1024x768, 16-bit color mode
+%
+/findmode {
+ 0 1 videomodes {
+ videomodeinfo dup .undef eq {
+ pop pop pop pop
+ } {
+ % compare width, height, colors
+ 6 index 4 index eq 6 index 4 index eq and 5 index 3 index eq and {
+ 7 1 roll 6 { pop } repeat 0xbfff and return
+ } {
+ pop pop pop pop
+ } ifelse
+ } ifelse
+ } for
+
+ pop pop pop .undef
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Input event handling.
+%
+% ( key -- input_buffer menu_entry action )
+%
+% key
+% bit 0-7 ascii
+% bit 8-15 scan code
+% bit 16-32 status bits (ctrl, shift...)
+%
+% action
+% 0: ok, stay in input loop
+% 1: switch to text mode (that is, continue with the non-gfxboot bootloader interface)
+% >=2: boot
+%
+% Notes:
+% - key = 0 indicates the bootloader timeout is up.
+% - input_buffer is the command line that you would have normally entered in the bootloader.
+% note that for syslinux it must start with the menu label string but not for grub
+% - menu_entry is the number of the menu entry you want to boot
+%
+/KeyEvent {
+ % pre-process keycode a bit
+ dup 0xff00 and 16 shl exch 0xff and dup 0xe0 eq { pop 0 } if add
+ dup 0xff and { 0xff and } if
+ /key exch def
+
+ % 'key' now holds the ASCII code for 'normal' keys and the scan code in the
+ % upper 8 bits if there is no ASCII code (e.g. F-keys, cursor keys)
+
+ % process key events...
+ key keyDown eq {
+ menu.entry menu.texts length 1 sub lt {
+ menu.entry menu.deselect
+ /menu.entry menu.entry 1 add def
+ menu.entry menu.select
+ } if
+ } if
+
+ key keyUp eq {
+ menu.entry 0 gt {
+ menu.entry menu.deselect
+ /menu.entry menu.entry 1 sub def
+ menu.entry menu.select
+ } if
+ } if
+
+ key keyEnter eq {
+ menu.texts menu.entry get menu.entry 2 return
+ } if
+
+ "" 0 0
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Setup boot menu.
+%
+% ( menu_entries_array cmdline_args_array defaultentry -- )
+%
+% This function is called before the first key event and gets passed the
+% bootloader config data.
+%
+/MenuInit {
+ % this is a string
+ /menu.default_entry exch def
+
+ % both are arrays
+ /menu.args exch def
+ /menu.texts exch def
+
+ % find index of the default entry
+ /menu.entry 0 def
+ 0 1 menu.texts length 1 sub {
+ menu.texts over get
+ menu.default_entry eq { /menu.entry exch def exit } if
+ pop
+ } for
+
+ % menu position
+ /menu.x 300 def
+ /menu.y 150 def
+
+ % 1.5 * font size
+ /menu.dy fontheight dup 2 div add def
+
+ % yellow
+ 0xe0e000 setcolor
+
+ % draw menu
+ menu.x menu.y moveto
+ menu.texts {
+ show
+ currentpoint exch pop menu.dy add menu.x exch moveto
+ } forall
+
+ % mark default entry
+ menu.entry menu.select
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Show selected item.
+%
+% ( index -- )
+%
+/menu.select {
+ menu.dy mul menu.y add
+ menu.x exch moveto
+ ">" dup strsize pop neg 10 sub 0 rmoveto
+ 0xffffff setcolor
+ show
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Show deselected item.
+%
+% ( index -- )
+%
+/menu.deselect {
+ menu.dy mul menu.y add
+ menu.x exch moveto
+ ">" dup strsize pop neg 10 sub 0 rmoveto
+ currentpoint rot strsize image
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% set 800x600 graphics mode
+% try 32 bit first; if no mode can be found, exit and continue without gfxboot
+800 600 32 findmode setmode not {
+ 800 600 16 findmode setmode not {
+ false .end
+ } if
+} if
+
+% load and set font
+"font.fnt" findfile setfont
+
+% load and set background image
+"clouds.jpg" findfile setimage
+0 0 moveto
+0 0 image.size image
+
+% say we're fine ('false' tells bootloader not to use gfxboot)
+true
+
diff --git a/themes/example_05/Makefile b/themes/example_05/Makefile
new file mode 100644
index 0000000..07357a5
--- /dev/null
+++ b/themes/example_05/Makefile
@@ -0,0 +1,25 @@
+BINDIR := $(shell [ -x ../../gfxboot-compile ] && echo ../../ )
+GFXBOOT_COMPILE = $(BINDIR)gfxboot-compile
+GFXBOOT_FONT = $(BINDIR)gfxboot-font
+GFXBOOT = $(BINDIR)gfxboot
+BFLAGS = -O -v -L ../..
+
+.PHONY: all themes clean distclean
+
+all: bootlogo
+
+bootlogo: example_*.bc font
+ @rm -rf $@.dir
+ @mkdir $@.dir
+ $(GFXBOOT_COMPILE) $(BFLAGS) -l $@.log -c $< $@.dir/init
+ @cp clouds.jpg font.fnt $@.dir
+ $(GFXBOOT) --archive $@.dir --pack-archive $@
+
+font:
+ $(GFXBOOT_FONT) -v -f DejaVuSans:size=32 font.fnt >font.log
+
+clean:
+ rm -rf *~ *.log *.dir bootlogo *.fnt
+
+distclean: clean
+
diff --git a/themes/example_05/clouds.jpg b/themes/example_05/clouds.jpg
new file mode 100644
index 0000000..c9a2592
--- /dev/null
+++ b/themes/example_05/clouds.jpg
Binary files differ
diff --git a/themes/example_05/example_05.bc b/themes/example_05/example_05.bc
new file mode 100644
index 0000000..a3c2e4a
--- /dev/null
+++ b/themes/example_05/example_05.bc
@@ -0,0 +1,326 @@
+% example_05.bc
+%
+% Draws simple menu and lets you select an entry and an boot option edit line.
+%
+% To use this example to boot from a real CD-ROM, do:
+%
+% # make -C themes/example_05
+% # mkdir /tmp/foo
+% # gfxboot -a themes/example_05/bootlogo --expand-archive /tmp/foo
+% # cp /tmp/foo/* to_the_dir_on_your_ISO_where_isolinux.bin_is
+%
+% and add a line 'ui gfxboot bootlogo' to isolinux.cfg.
+%
+% Notes:
+% - 'edit.init' must be called first before using 'edit.input'
+%
+% - 'edit.input' uses current color & font settings
+%
+% - the final command line buffer that gets passed back to the bootloader
+% depends a bit on the bootloader type: syslinux & co expect
+% '<label> <args>', grub expects only '<args>'
+%
+% Test with (from top level dir [/usr/share/gfxboot]) 'gfxtest -t example_05'.
+%
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Some constants we probably need.
+%
+/true 0 0 eq def
+/false 0 0 ne def
+
+% some key codes
+/keyEsc 0x0000001b def
+/keyEnter 0x0000000d def
+/keyUp 0x48000000 def
+/keyLeft 0x4b000000 def
+/keyRight 0x4d000000 def
+/keyDown 0x50000000 def
+
+% type values
+/t_none 0 def
+/t_string 4 def
+/t_end 11 def
+/t_ptr 12 def
+
+% undefined (nil) value
+/.undef 0 t_none settype def
+
+% end token, stops execution
+/.end 0 t_end settype def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Convert integer to pointer.
+%
+% ( int1 -- ptr1 )
+%
+/cvp { t_ptr settype } def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Convert object to string.
+%
+% ( obj ) ==> ( string )
+%
+/cvs { t_string settype } def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Allocate new string.
+%
+% ( size -- string )
+%
+/string {
+ 1 add malloc cvs
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Arguments like snprintf.
+%
+% ( obj_1 ... obj_n string_1 string_2 -- )
+%
+/sprintf {
+ dup cvp length exch snprintf
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% findmode - find video mode number
+%
+% ( int1 int2 int3 -- int4 )
+%
+% int1, int2: width, height
+% int3: color bits
+% int4: mode number (or .undef)
+%
+% example
+% 1024 768 16 findmode setmode % 1024x768, 16-bit color mode
+%
+/findmode {
+ 0 1 videomodes {
+ videomodeinfo dup .undef eq {
+ pop pop pop pop
+ } {
+ % compare width, height, colors
+ 6 index 4 index eq 6 index 4 index eq and 5 index 3 index eq and {
+ 7 1 roll 6 { pop } repeat 0xbfff and return
+ } {
+ pop pop pop pop
+ } ifelse
+ } ifelse
+ } for
+
+ pop pop pop .undef
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Input event handling.
+%
+% ( key -- input_buffer menu_entry action )
+%
+% key
+% bit 0-7 ascii
+% bit 8-15 scan code
+% bit 16-32 status bits (ctrl, shift...)
+%
+% action
+% 0: ok, stay in input loop
+% 1: switch to text mode (that is, continue with the non-gfxboot
+% bootloader interface)
+% >=2: boot
+%
+% Notes:
+% - key = 0 indicates the bootloader timeout is up.
+% - input_buffer is the command line that you would have normally entered in the bootloader.
+% note that for syslinux it must start with the menu label string but not for grub
+% - menu_entry is the number of the menu entry you want to boot
+%
+/KeyEvent {
+ % pre-process keycode a bit
+ dup 0xff00 and 16 shl exch 0xff and dup 0xe0 eq { pop 0 } if add
+ dup 0xff and { 0xff and } if
+ /key exch def
+
+ % 'key' now holds the ASCII code for 'normal' keys and the scan code in
+ % the upper 8 bits if there is no ASCII code (e.g. F-keys, cursor keys)
+
+ % process key events...
+ key keyDown eq {
+ menu.entry menu.texts length 1 sub lt {
+ menu.entry menu.deselect
+ /menu.entry menu.entry 1 add def
+ menu.entry menu.select
+ } if
+ } if
+
+ key keyUp eq {
+ menu.entry 0 gt {
+ menu.entry menu.deselect
+ /menu.entry menu.entry 1 sub def
+ menu.entry menu.select
+ } if
+ } if
+
+ key keyEnter eq {
+ % construct command line:
+ % syslinux expects '<label> <args>', so put the two strings together...
+ cmdline
+ menu.args menu.entry get
+ menu.texts menu.entry get
+ "%s %s %s" cmdtmp sprintf
+ cmdtmp menu.entry 2 return
+ } if
+
+ % maybe it's a printable char...
+ % remember to set the correct color (and font if necessary)
+ input_color setcolor
+ edit_obj key edit.input
+
+ "" 0 0
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Setup boot menu.
+%
+% ( menu_entries_array cmdline_args_array defaultentry -- )
+%
+% This function is called before the first key event and gets passed the
+% bootloader config data.
+%
+/MenuInit {
+ % this is a string
+ /menu.default_entry exch def
+
+ % both are arrays
+ /menu.args exch def
+ /menu.texts exch def
+
+ % find index of the default entry
+ /menu.entry 0 def
+ 0 1 menu.texts length 1 sub {
+ menu.texts over get
+ menu.default_entry eq { /menu.entry exch def exit } if
+ pop
+ } for
+
+ % menu position
+ /menu.x 300 def
+ /menu.y 100 def
+
+ % 1.5 * font size
+ /menu.dy fontheight dup 2 div add def
+
+ menu_color setcolor
+
+ % draw menu
+ menu.x menu.y moveto
+ menu.texts {
+ % add black shadow
+ shadow_show
+ currentpoint exch pop menu.dy add menu.x exch moveto
+ } forall
+
+ % mark default entry
+ menu.entry menu.select
+
+ % draw boot option field
+ label_color setcolor
+ 10 500 moveto "Boot:" shadow_show
+
+ input_color setcolor
+
+ % intialize edit object; you can set the edit buffer to some initial value
+ edit_obj "vga=0x317" edit.init
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Like 'show', but with black shadow.
+%
+% ( string -- )
+%
+/shadow_show {
+ currentcolor currentpoint
+ 1 1 rmoveto
+ 0 setcolor
+ 3 index show
+ moveto setcolor
+ show
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Show selected item.
+%
+% ( index -- )
+%
+/menu.select {
+ menu.dy mul menu.y add
+ menu.x exch moveto
+ ">" dup strsize pop neg 10 sub 0 rmoveto
+ arrow_color setcolor
+ show
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Show deselected item.
+%
+% ( index -- )
+%
+/menu.deselect {
+ menu.dy mul menu.y add
+ menu.x exch moveto
+ ">" dup strsize pop neg 10 sub 0 rmoveto
+ currentpoint rot strsize image
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% set 800x600 graphics mode
+% try 32 bit first; if no mode can be found, exit and continue without gfxboot
+%
+800 600 32 findmode setmode not {
+ 800 600 16 findmode setmode not {
+ false .end
+ } if
+} if
+
+% load and set font
+"font.fnt" findfile setfont
+
+% load and set background image
+"clouds.jpg" findfile setimage
+0 0 moveto
+0 0 image.size image
+
+% input command line
+/cmdline 1024 string def
+
+% used in KeyEvent
+/cmdtmp 1024 string def
+
+% our input line
+/edit_obj [
+ 110 % x
+ 500 % y
+ moveto currentpoint 600 fontheight savescreen % background image, defines input field size
+ cmdline % input buffer
+ dup cvp length 1 sub % buffer size
+ .undef % for internal use
+] def
+
+% our colors
+/input_color 0x000000 def
+/menu_color 0xe0e000 def
+/arrow_color 0xffffff def
+/label_color 0x00a000 def
+
+% say we're fine ('false' tells bootloader not to use gfxboot)
+true
+
diff --git a/themes/example_06/Makefile b/themes/example_06/Makefile
new file mode 100644
index 0000000..bf21c5d
--- /dev/null
+++ b/themes/example_06/Makefile
@@ -0,0 +1,29 @@
+BINDIR := $(shell [ -x ../../gfxboot-compile ] && echo ../../ )
+GFXBOOT_COMPILE = $(BINDIR)gfxboot-compile
+GFXBOOT_FONT = $(BINDIR)gfxboot-font
+GFXBOOT = $(BINDIR)gfxboot
+BFLAGS = -O -v -L ../..
+
+# the files we need
+FILES = clouds.jpg font.fnt
+
+.PHONY: all themes clean distclean
+
+all: bootlogo
+
+bootlogo: example_*.bc font
+ @rm -rf $@.dir
+ @mkdir $@.dir
+ $(GFXBOOT_COMPILE) $(BFLAGS) -l $@.log -c $< $@.dir/init
+ @cp $(FILES) $@.dir
+ $(GFXBOOT) --archive $@.dir --pack-archive $@
+ @ln -snf bootlogo message
+
+font:
+ $(GFXBOOT_FONT) -v -f DejaVuSans:size=32 font.fnt >font.log
+
+clean:
+ rm -rf *~ *.log *.dir bootlogo message *.fnt
+
+distclean: clean
+
diff --git a/themes/example_06/clouds.jpg b/themes/example_06/clouds.jpg
new file mode 100644
index 0000000..c9a2592
--- /dev/null
+++ b/themes/example_06/clouds.jpg
Binary files differ
diff --git a/themes/example_06/example_06.bc b/themes/example_06/example_06.bc
new file mode 100644
index 0000000..6f4313b
--- /dev/null
+++ b/themes/example_06/example_06.bc
@@ -0,0 +1,387 @@
+% example_06.bc
+%
+% Draws simple menu and lets you select an entry and an boot option edit line.
+%
+% To use this example to boot from a real CD-ROM, do:
+%
+% # make -C themes/example_06
+% # mkdir /tmp/foo
+% # gfxboot -a themes/example_06/bootlogo --expand-archive /tmp/foo
+% # cp /tmp/foo/* to_the_dir_on_your_ISO_where_isolinux.bin_is
+%
+% and add a line 'ui gfxboot bootlogo' to isolinux.cfg.
+%
+% To use this example with grub, do:
+% # make -C themes/example_06
+% # cp themes/example_06/message /boot/message
+%
+% and add a line like 'gfxmenu (hdX,Y)/boot/message' to menu.lst (replace
+% X and Y with real values).
+%
+% Notes:
+% - use 'Timeout' callback to display timeout countdown
+%
+% - boot when the timeout is up
+%
+% - pass kernel args correctly to grub
+%
+% Test with (from top level dir [/usr/share/gfxboot]) with
+% 'gfxtest -t example_06' (isolinux) or
+% 'gfxtest -t example_06 grub' (grub).
+%
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Some constants we probably need.
+%
+/true 0 0 eq def
+/false 0 0 ne def
+
+% some key codes
+/keyEsc 0x0000001b def
+/keyEnter 0x0000000d def
+/keyUp 0x48000000 def
+/keyLeft 0x4b000000 def
+/keyRight 0x4d000000 def
+/keyDown 0x50000000 def
+
+% type values
+/t_none 0 def
+/t_string 4 def
+/t_end 11 def
+/t_ptr 12 def
+
+% undefined (nil) value
+/.undef 0 t_none settype def
+
+% end token, stops execution
+/.end 0 t_end settype def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Convert integer to pointer.
+%
+% ( int1 -- ptr1 )
+%
+/cvp { t_ptr settype } def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Convert object to string.
+%
+% ( obj ) ==> ( string )
+%
+/cvs { t_string settype } def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Allocate new string.
+%
+% ( size -- string )
+%
+/string {
+ 1 add malloc cvs
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Arguments like snprintf.
+%
+% ( obj_1 ... obj_n string_1 string_2 -- )
+%
+/sprintf {
+ dup cvp length exch snprintf
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% bootloader - boot loader type
+%
+% ( -- int1 )
+%
+% int1: boot loader type (0: lilo, 1:syslinux/isolinux, 2: grub)
+%
+/bootloader sysconfig getbyte def
+
+/lilo bootloader 0 eq def
+/syslinux bootloader 1 eq def
+/grub bootloader 2 eq def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% findmode - find video mode number
+%
+% ( int1 int2 int3 -- int4 )
+%
+% int1, int2: width, height
+% int3: color bits
+% int4: mode number (or .undef)
+%
+% example
+% 1024 768 16 findmode setmode % 1024x768, 16-bit color mode
+%
+/findmode {
+ 0 1 videomodes {
+ videomodeinfo dup .undef eq {
+ pop pop pop pop
+ } {
+ % compare width, height, colors
+ 6 index 4 index eq 6 index 4 index eq and 5 index 3 index eq and {
+ 7 1 roll 6 { pop } repeat 0xbfff and return
+ } {
+ pop pop pop pop
+ } ifelse
+ } ifelse
+ } for
+
+ pop pop pop .undef
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Input event handling.
+%
+% ( key -- input_buffer menu_entry action )
+%
+% key
+% bit 0-7 ascii
+% bit 8-15 scan code
+% bit 16-32 status bits (ctrl, shift...)
+%
+% action
+% 0: ok, stay in input loop
+% 1: switch to text mode (that is, continue with the non-gfxboot
+% bootloader interface)
+% >=2: boot
+%
+% Notes:
+% - key = 0 indicates the bootloader timeout is up.
+% - input_buffer is the command line that you would have normally entered in the bootloader.
+% note that for syslinux it must start with the menu label string but not for grub
+% - menu_entry is the number of the menu entry you want to boot
+%
+/KeyEvent {
+ % pre-process keycode a bit
+ dup 0xff00 and 16 shl exch 0xff and dup 0xe0 eq { pop 0 } if add
+ dup 0xff and { 0xff and } if
+ /key exch def
+
+ % 'key' now holds the ASCII code for 'normal' keys and the scan code in
+ % the upper 8 bits if there is no ASCII code (e.g. F-keys, cursor keys)
+
+ % process key events...
+ key keyDown eq {
+ menu.entry menu.texts length 1 sub lt {
+ menu.entry menu.deselect
+ /menu.entry menu.entry 1 add def
+ menu.entry menu.select
+ } if
+ } if
+
+ key keyUp eq {
+ menu.entry 0 gt {
+ menu.entry menu.deselect
+ /menu.entry menu.entry 1 sub def
+ menu.entry menu.select
+ } if
+ } if
+
+ % enter or timeout
+ key keyEnter eq key 0 eq or {
+ % construct command line: [label] + append_args + user_args
+ grub {
+ % grub expects just '<args>'
+ cmdline
+ menu.args menu.entry get
+ "%s %s" cmdtmp sprintf
+ } {
+ % syslinux expects '<label> <args>'
+ cmdline
+ menu.args menu.entry get
+ menu.texts menu.entry get
+ "%s %s %s" cmdtmp sprintf
+ } ifelse
+ cmdtmp menu.entry 2 return
+ } if
+
+ % maybe it's a printable char...
+ % remember to set the correct color (and font if necessary)
+ input_color setcolor
+ edit_obj key edit.input
+
+ "" 0 0
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Setup boot menu.
+%
+% ( menu_entries_array cmdline_args_array defaultentry -- )
+%
+% This function is called before the first key event and gets passed the
+% bootloader config data.
+%
+/MenuInit {
+ % this is a string
+ /menu.default_entry exch def
+
+ % both are arrays
+ /menu.args exch def
+ /menu.texts exch def
+
+ % find index of the default entry
+ /menu.entry 0 def
+ 0 1 menu.texts length 1 sub {
+ menu.texts over get
+ menu.default_entry eq { /menu.entry exch def exit } if
+ pop
+ } for
+
+ % menu position
+ /menu.x 300 def
+ /menu.y 100 def
+
+ % 1.5 * font size
+ /menu.dy fontheight dup 2 div add def
+
+ menu_color setcolor
+
+ % draw menu
+ menu.x menu.y moveto
+ menu.texts {
+ % add black shadow
+ shadow_show
+ currentpoint exch pop menu.dy add menu.x exch moveto
+ } forall
+
+ % mark default entry
+ menu.entry menu.select
+
+ % draw boot option field
+ label_color setcolor
+ 10 500 moveto "Boot:" shadow_show
+
+ input_color setcolor
+
+ % intialize edit object; you can set the edit buffer to some initial value
+ edit_obj "vga=0x317" edit.init
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Like 'show', but with black shadow.
+%
+% ( string -- )
+%
+/shadow_show {
+ currentcolor currentpoint
+ 1 1 rmoveto
+ 0 setcolor
+ 3 index show
+ moveto setcolor
+ show
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Show selected item.
+%
+% ( index -- )
+%
+/menu.select {
+ menu.dy mul menu.y add
+ menu.x exch moveto
+ ">" dup strsize pop neg 10 sub 0 rmoveto
+ arrow_color setcolor
+ show
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Show deselected item.
+%
+% ( index -- )
+%
+/menu.deselect {
+ menu.dy mul menu.y add
+ menu.x exch moveto
+ ">" dup strsize pop neg 10 sub 0 rmoveto
+ currentpoint rot strsize image
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Boot timeout counter.
+%
+% ( timeout time -- )
+%
+% timeout: total time in 18.2Hz steps, time: current value.
+%
+% Note: if the user hits a key to stop the timeout this function is called
+% with time = 0.
+%
+/Timeout {
+ /timeout.s.last timeout.s def
+ /timeout.s exch 10 mul 150 add 182 div def
+
+ pop % we don't need it
+
+ timeout.s timeout.s.last ne {
+ % clear old value
+ 720 20 moveto currentpoint fontheight 5 mul fontheight image
+ timeout.s 0 ne {
+ timeout.s "%us" time_str sprintf
+ timeout_color setcolor
+ time_str shadow_show
+ } if
+ } if
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% set 800x600 graphics mode
+% try 32 bit first; if no mode can be found, exit and continue without gfxboot
+%
+800 600 32 findmode setmode not {
+ 800 600 16 findmode setmode not {
+ false .end
+ } if
+} if
+
+% load and set font
+"font.fnt" findfile setfont
+
+% load and set background image
+"clouds.jpg" findfile setimage
+0 0 moveto
+0 0 image.size image
+
+% input command line
+/cmdline 1024 string def
+
+% used in KeyEvent
+/cmdtmp 1024 string def
+
+% to display timeout
+/time_str 10 string def
+
+% our input line
+/edit_obj [
+ 110 % x
+ 500 % y
+ moveto currentpoint 600 fontheight savescreen % background image, defines input field size
+ cmdline % input buffer
+ dup cvp length 1 sub % buffer size
+ .undef % for internal use
+] def
+
+% our colors
+/input_color 0x000000 def
+/menu_color 0xe0e000 def
+/arrow_color 0xffffff def
+/label_color 0x00a000 def
+/timeout_color 0xf0f0f0 def
+
+% say we're fine ('false' tells bootloader not to use gfxboot)
+true
+
diff --git a/themes/example_07/Makefile b/themes/example_07/Makefile
new file mode 100644
index 0000000..bf21c5d
--- /dev/null
+++ b/themes/example_07/Makefile
@@ -0,0 +1,29 @@
+BINDIR := $(shell [ -x ../../gfxboot-compile ] && echo ../../ )
+GFXBOOT_COMPILE = $(BINDIR)gfxboot-compile
+GFXBOOT_FONT = $(BINDIR)gfxboot-font
+GFXBOOT = $(BINDIR)gfxboot
+BFLAGS = -O -v -L ../..
+
+# the files we need
+FILES = clouds.jpg font.fnt
+
+.PHONY: all themes clean distclean
+
+all: bootlogo
+
+bootlogo: example_*.bc font
+ @rm -rf $@.dir
+ @mkdir $@.dir
+ $(GFXBOOT_COMPILE) $(BFLAGS) -l $@.log -c $< $@.dir/init
+ @cp $(FILES) $@.dir
+ $(GFXBOOT) --archive $@.dir --pack-archive $@
+ @ln -snf bootlogo message
+
+font:
+ $(GFXBOOT_FONT) -v -f DejaVuSans:size=32 font.fnt >font.log
+
+clean:
+ rm -rf *~ *.log *.dir bootlogo message *.fnt
+
+distclean: clean
+
diff --git a/themes/example_07/clouds.jpg b/themes/example_07/clouds.jpg
new file mode 100644
index 0000000..c9a2592
--- /dev/null
+++ b/themes/example_07/clouds.jpg
Binary files differ
diff --git a/themes/example_07/example_07.bc b/themes/example_07/example_07.bc
new file mode 100644
index 0000000..d0bf96c
--- /dev/null
+++ b/themes/example_07/example_07.bc
@@ -0,0 +1,411 @@
+% example_07.bc
+%
+% Draws simple menu and lets you select an entry and an boot option edit line.
+%
+% To use this example to boot from a real CD-ROM, do:
+%
+% # make -C themes/example_07
+% # mkdir /tmp/foo
+% # gfxboot -a themes/example_07/bootlogo --expand-archive /tmp/foo
+% # cp /tmp/foo/* to_the_dir_on_your_ISO_where_isolinux.bin_is
+%
+% and add a line 'ui gfxboot bootlogo' to isolinux.cfg.
+%
+% To use this example with grub, do:
+% # make -C themes/example_07
+% # cp themes/example_07/message /boot/message
+%
+% and add a line like 'gfxmenu (hdX,Y)/boot/message' to menu.lst (replace
+% X and Y with real values).
+%
+% Notes:
+% - use 'Timer' callback to display system time
+%
+% Test with (from top level dir [/usr/share/gfxboot]) with
+% 'gfxtest -t example_07' (isolinux) or
+% 'gfxtest -t example_07 grub' (grub).
+%
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Some constants we probably need.
+%
+/true 0 0 eq def
+/false 0 0 ne def
+
+% some key codes
+/keyEsc 0x0000001b def
+/keyEnter 0x0000000d def
+/keyUp 0x48000000 def
+/keyLeft 0x4b000000 def
+/keyRight 0x4d000000 def
+/keyDown 0x50000000 def
+
+% type values
+/t_none 0 def
+/t_string 4 def
+/t_end 11 def
+/t_ptr 12 def
+
+% undefined (nil) value
+/.undef 0 t_none settype def
+
+% end token, stops execution
+/.end 0 t_end settype def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Convert integer to pointer.
+%
+% ( int1 -- ptr1 )
+%
+/cvp { t_ptr settype } def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Convert object to string.
+%
+% ( obj ) ==> ( string )
+%
+/cvs { t_string settype } def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Allocate new string.
+%
+% ( size -- string )
+%
+/string {
+ 1 add malloc cvs
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Arguments like snprintf.
+%
+% ( obj_1 ... obj_n string_1 string_2 -- )
+%
+/sprintf {
+ dup cvp length exch snprintf
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% bootloader - boot loader type
+%
+% ( -- int1 )
+%
+% int1: boot loader type (0: lilo, 1:syslinux/isolinux, 2: grub)
+%
+/bootloader sysconfig getbyte def
+
+/lilo bootloader 0 eq def
+/syslinux bootloader 1 eq def
+/grub bootloader 2 eq def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% findmode - find video mode number
+%
+% ( int1 int2 int3 -- int4 )
+%
+% int1, int2: width, height
+% int3: color bits
+% int4: mode number (or .undef)
+%
+% example
+% 1024 768 16 findmode setmode % 1024x768, 16-bit color mode
+%
+/findmode {
+ 0 1 videomodes {
+ videomodeinfo dup .undef eq {
+ pop pop pop pop
+ } {
+ % compare width, height, colors
+ 6 index 4 index eq 6 index 4 index eq and 5 index 3 index eq and {
+ 7 1 roll 6 { pop } repeat 0xbfff and return
+ } {
+ pop pop pop pop
+ } ifelse
+ } ifelse
+ } for
+
+ pop pop pop .undef
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Input event handling.
+%
+% ( key -- input_buffer menu_entry action )
+%
+% key
+% bit 0-7 ascii
+% bit 8-15 scan code
+% bit 16-32 status bits (ctrl, shift...)
+%
+% action
+% 0: ok, stay in input loop
+% 1: switch to text mode (that is, continue with the non-gfxboot
+% bootloader interface)
+% >=2: boot
+%
+% Notes:
+% - key = 0 indicates the bootloader timeout is up.
+% - input_buffer is the command line that you would have normally entered in the bootloader.
+% note that for syslinux it must start with the menu label string but not for grub
+% - menu_entry is the number of the menu entry you want to boot
+%
+/KeyEvent {
+ % pre-process keycode a bit
+ dup 0xff00 and 16 shl exch 0xff and dup 0xe0 eq { pop 0 } if add
+ dup 0xff and { 0xff and } if
+ /key exch def
+
+ % 'key' now holds the ASCII code for 'normal' keys and the scan code in
+ % the upper 8 bits if there is no ASCII code (e.g. F-keys, cursor keys)
+
+ % process key events...
+ key keyDown eq {
+ menu.entry menu.texts length 1 sub lt {
+ menu.entry menu.deselect
+ /menu.entry menu.entry 1 add def
+ menu.entry menu.select
+ } if
+ } if
+
+ key keyUp eq {
+ menu.entry 0 gt {
+ menu.entry menu.deselect
+ /menu.entry menu.entry 1 sub def
+ menu.entry menu.select
+ } if
+ } if
+
+ % enter or timeout
+ key keyEnter eq key 0 eq or {
+ % construct command line: [label] + append_args + user_args
+ grub {
+ % grub expects just '<args>'
+ cmdline
+ menu.args menu.entry get
+ "%s %s" cmdtmp sprintf
+ } {
+ % syslinux expects '<label> <args>'
+ cmdline
+ menu.args menu.entry get
+ menu.texts menu.entry get
+ "%s %s %s" cmdtmp sprintf
+ } ifelse
+ cmdtmp menu.entry 2 return
+ } if
+
+ % maybe it's a printable char...
+ % remember to set the correct color (and font if necessary)
+ input_color setcolor
+ edit_obj key edit.input
+
+ "" 0 0
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Setup boot menu.
+%
+% ( menu_entries_array cmdline_args_array defaultentry -- )
+%
+% This function is called before the first key event and gets passed the
+% bootloader config data.
+%
+/MenuInit {
+ % this is a string
+ /menu.default_entry exch def
+
+ % both are arrays
+ /menu.args exch def
+ /menu.texts exch def
+
+ % find index of the default entry
+ /menu.entry 0 def
+ 0 1 menu.texts length 1 sub {
+ menu.texts over get
+ menu.default_entry eq { /menu.entry exch def exit } if
+ pop
+ } for
+
+ % menu position
+ /menu.x 300 def
+ /menu.y 100 def
+
+ % 1.5 * font size
+ /menu.dy fontheight dup 2 div add def
+
+ menu_color setcolor
+
+ % draw menu
+ menu.x menu.y moveto
+ menu.texts {
+ % add black shadow
+ shadow_show
+ currentpoint exch pop menu.dy add menu.x exch moveto
+ } forall
+
+ % mark default entry
+ menu.entry menu.select
+
+ % draw boot option field
+ label_color setcolor
+ 10 500 moveto "Boot:" shadow_show
+
+ input_color setcolor
+
+ % intialize edit object; you can set the edit buffer to some initial value
+ edit_obj "vga=0x317" edit.init
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Like 'show', but with black shadow.
+%
+% ( string -- )
+%
+/shadow_show {
+ currentcolor currentpoint
+ 1 1 rmoveto
+ 0 setcolor
+ 3 index show
+ moveto setcolor
+ show
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Show selected item.
+%
+% ( index -- )
+%
+/menu.select {
+ menu.dy mul menu.y add
+ menu.x exch moveto
+ ">" dup strsize pop neg 10 sub 0 rmoveto
+ arrow_color setcolor
+ show
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Show deselected item.
+%
+% ( index -- )
+%
+/menu.deselect {
+ menu.dy mul menu.y add
+ menu.x exch moveto
+ ">" dup strsize pop neg 10 sub 0 rmoveto
+ currentpoint rot strsize image
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Boot timeout counter.
+%
+% ( timeout time -- )
+%
+% timeout: total time in 18.2Hz steps, time: current value.
+%
+% Note: if the user hits a key to stop the timeout this function is called
+% with time = 0.
+%
+/Timeout {
+ /timeout.s.last timeout.s def
+ /timeout.s exch 10 mul 150 add 182 div def
+
+ pop % we don't need it
+
+ timeout.s timeout.s.last ne {
+ % clear old value
+ 720 20 moveto currentpoint fontheight 5 mul fontheight image
+ timeout.s 0 ne {
+ timeout.s "%us" time_str sprintf
+ timeout_color setcolor
+ time_str shadow_show
+ } if
+ } if
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Timer function.
+%
+% ( time -- )
+%
+% 18.2Hz timer. Or, more accurately: 528/29Hz.
+%
+/Timer {
+ /time.s.last time.s def
+
+ /time.s exch 29 mul 528 div def
+ /time.m time.s 60 div def
+ /time.h time.m 60 div 24 mod def
+
+ /time.s time.s 60 mod def
+ /time.m time.m 60 mod def
+
+ time.s time.s.last ne {
+ % clear old value
+ 640 560 moveto currentpoint fontheight 8 mul fontheight image
+ time.s time.m time.h "%02u:%02u:%02u" timer_str sprintf
+ timeout_color setcolor
+ timer_str shadow_show
+ } if
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% set 800x600 graphics mode
+% try 32 bit first; if no mode can be found, exit and continue without gfxboot
+%
+800 600 32 findmode setmode not {
+ 800 600 16 findmode setmode not {
+ false .end
+ } if
+} if
+
+% load and set font
+"font.fnt" findfile setfont
+
+% load and set background image
+"clouds.jpg" findfile setimage
+0 0 moveto
+0 0 image.size image
+
+% input command line
+/cmdline 1024 string def
+
+% used in KeyEvent
+/cmdtmp 1024 string def
+
+% to display timeout
+/time_str 10 string def
+/timer_str 100 string def
+
+% our input line
+/edit_obj [
+ 110 % x
+ 500 % y
+ moveto currentpoint 600 fontheight savescreen % background image, defines input field size
+ cmdline % input buffer
+ dup cvp length 1 sub % buffer size
+ .undef % for internal use
+] def
+
+% our colors
+/input_color 0x000000 def
+/menu_color 0xe0e000 def
+/arrow_color 0xffffff def
+/label_color 0x00a000 def
+/timeout_color 0xf0f0f0 def
+
+% say we're fine ('false' tells bootloader not to use gfxboot)
+true
+
diff --git a/themes/openSUSE/Makefile b/themes/openSUSE/Makefile
new file mode 100644
index 0000000..9372629
--- /dev/null
+++ b/themes/openSUSE/Makefile
@@ -0,0 +1,87 @@
+BINDIR := $(shell [ -x ../../gfxboot-compile ] && echo ../../ )
+
+BASED_ON = $(shell perl -ne 'print if s/^based_on=//' config)
+
+PRODUCT = $(shell perl -ne 'print if s/^product=//' config)
+
+ifeq ($(BASED_ON),)
+PREPARED = 1
+else
+PREPARED = $(shell [ -f .prepared ] && echo 1)
+endif
+
+ADDDIR = ../../bin/adddir
+BFLAGS = -O -v -L ../..
+
+SUBDIRS = fonts help-boot help-install po src
+
+THEME = $(shell basename `pwd`)
+
+DEFAULT_LANG =
+
+.PHONY: all clean distclean themes $(SUBDIRS)
+
+ifeq ($(PREPARED), 1)
+
+ all: bootlogo message
+
+else
+
+ all:
+ $(ADDDIR) ../$(BASED_ON) .
+ make clean
+ touch .prepared
+ make
+
+endif
+
+themes: all
+
+%/.ready: %
+ make -C $*
+
+src/main.bin: src
+ make -C src
+
+bootlogo: src/main.bin src/gfxboot.cfg help-install/.ready po/.ready fonts/.ready
+ @rm -rf bootlogo.dir
+ @mkdir bootlogo.dir
+ perl -p -e 's/^(layout=.*)/$$1,install/' src/gfxboot.cfg >bootlogo.dir/gfxboot.cfg
+ perl -pi -e 's/^(theme=).*/$$1$(THEME)/' bootlogo.dir/gfxboot.cfg
+ perl -pi -e 's/^(product=).*/$$1$(PRODUCT)/' bootlogo.dir/gfxboot.cfg
+ cp -rL data-install/* fonts/*.fnt po/*.tr bootlogo.dir
+ cp -rL help-install/*.hlp bootlogo.dir
+ cp src/main.bin bootlogo.dir/init
+ifdef DEFAULT_LANG
+ @echo $(DEFAULT_LANG) >bootlogo.dir/lang
+endif
+ @sh -c 'cd bootlogo.dir; chmod +t * ; chmod -t init languages'
+ @sh -c 'cd bootlogo.dir; echo * | sed -e "s/ /\n/g" | cpio --quiet -o >../bootlogo'
+
+message: src/main.bin src/gfxboot.cfg help-boot/.ready po/.ready fonts/.ready
+ @rm -rf message.dir
+ @mkdir message.dir
+ perl -p -e 's/^(layout=.*)/$$1,boot/' src/gfxboot.cfg >message.dir/gfxboot.cfg
+ perl -pi -e 's/^(theme=).*/$$1$(THEME)/' message.dir/gfxboot.cfg
+ cp -rL data-boot/* fonts/*.fnt message.dir
+ cp -rL po/en.tr help-boot/en.hlp message.dir
+ cp src/main.bin message.dir/init
+ifdef DEFAULT_LANG
+ cp -rL po/$(DEFAULT_LANG).tr help-boot/$(DEFAULT_LANG).hlp message.dir
+ @echo $(DEFAULT_LANG) >message.dir/lang
+ @echo $(DEFAULT_LANG) >>message.dir/languages
+endif
+ @sh -c 'cd message.dir; echo * | sed -e "s/ /\n/g" | cpio --quiet -o >../message'
+
+clean:
+ @for i in $(SUBDIRS) ; do [ ! -f $$i/Makefile ] || make -C $$i clean || break ; done
+ rm -rf bootlogo bootlogo.dir message message.dir *~
+
+distclean: clean
+ifneq ($(BASED_ON),)
+ rm -f .prepared
+ rm -f `find -type l \! -wholename ./Makefile`
+ rmdir `find -depth -type d \! -name . \! -name .svn \! -wholename './.svn/*' \! -wholename './*/.svn/*'` 2>/dev/null || true
+endif
+
+ \ No newline at end of file
diff --git a/themes/openSUSE/config b/themes/openSUSE/config
new file mode 100644
index 0000000..d154073
--- /dev/null
+++ b/themes/openSUSE/config
@@ -0,0 +1,2 @@
+product=openSUSE 13.2
+based_on=
diff --git a/themes/openSUSE/data-boot/back.jpg b/themes/openSUSE/data-boot/back.jpg
new file mode 100644
index 0000000..e75374e
--- /dev/null
+++ b/themes/openSUSE/data-boot/back.jpg
Binary files differ
diff --git a/themes/openSUSE/data-boot/languages b/themes/openSUSE/data-boot/languages
new file mode 100644
index 0000000..7741b83
--- /dev/null
+++ b/themes/openSUSE/data-boot/languages
@@ -0,0 +1 @@
+en_US
diff --git a/themes/openSUSE/data-boot/pabout.txt b/themes/openSUSE/data-boot/pabout.txt
new file mode 100644
index 0000000..58ae8b5
--- /dev/null
+++ b/themes/openSUSE/data-boot/pabout.txt
@@ -0,0 +1,6 @@
+Penguin theme originally made by Raphael Quinet
+(http://www.gamers.org/~quinet/lilo/).
+Modernized for openSUSE by Steffen Winterfeldt.
+
+Like it or hate it? Edit gfxboot.cfg in /boot/message
+to have it always or to get rid of it.
diff --git a/themes/openSUSE/data-boot/panim.jpg b/themes/openSUSE/data-boot/panim.jpg
new file mode 100644
index 0000000..dfd5a55
--- /dev/null
+++ b/themes/openSUSE/data-boot/panim.jpg
Binary files differ
diff --git a/themes/openSUSE/data-boot/panim_a.jpg b/themes/openSUSE/data-boot/panim_a.jpg
new file mode 100644
index 0000000..dd87061
--- /dev/null
+++ b/themes/openSUSE/data-boot/panim_a.jpg
Binary files differ
diff --git a/themes/openSUSE/data-boot/pback.jpg b/themes/openSUSE/data-boot/pback.jpg
new file mode 100644
index 0000000..e7c36b5
--- /dev/null
+++ b/themes/openSUSE/data-boot/pback.jpg
Binary files differ
diff --git a/themes/openSUSE/data-boot/phead.jpg b/themes/openSUSE/data-boot/phead.jpg
new file mode 100644
index 0000000..a192ba1
--- /dev/null
+++ b/themes/openSUSE/data-boot/phead.jpg
Binary files differ
diff --git a/themes/openSUSE/data-boot/timer_a.jpg b/themes/openSUSE/data-boot/timer_a.jpg
new file mode 100644
index 0000000..fa021f3
--- /dev/null
+++ b/themes/openSUSE/data-boot/timer_a.jpg
Binary files differ
diff --git a/themes/openSUSE/data-install/back.jpg b/themes/openSUSE/data-install/back.jpg
new file mode 100644
index 0000000..bb93815
--- /dev/null
+++ b/themes/openSUSE/data-install/back.jpg
Binary files differ
diff --git a/themes/openSUSE/data-install/en.tlk b/themes/openSUSE/data-install/en.tlk
new file mode 100644
index 0000000..62e85cc
--- /dev/null
+++ b/themes/openSUSE/data-install/en.tlk
Binary files differ
diff --git a/themes/openSUSE/data-install/hapysuse.mod b/themes/openSUSE/data-install/hapysuse.mod
new file mode 100644
index 0000000..9efbefe
--- /dev/null
+++ b/themes/openSUSE/data-install/hapysuse.mod
Binary files differ
diff --git a/themes/openSUSE/data-install/kroete.dat b/themes/openSUSE/data-install/kroete.dat
new file mode 100644
index 0000000..448764b
--- /dev/null
+++ b/themes/openSUSE/data-install/kroete.dat
Binary files differ
diff --git a/themes/openSUSE/data-install/languages b/themes/openSUSE/data-install/languages
new file mode 100644
index 0000000..6c4008c
--- /dev/null
+++ b/themes/openSUSE/data-install/languages
@@ -0,0 +1,62 @@
+af_ZA
+ar_EG
+ast_ES
+bn_BD
+bs_BA
+bg_BG
+ca_ES
+cs_CZ
+cy_GB
+da_DK
+de_DE
+et_EE
+en_GB
+en_US
+es_ES
+fa_IR
+fr_FR
+gl_ES
+ka_GE
+gu_IN
+el_GR
+hi_IN
+id_ID
+hr_HR
+it_IT
+he_IL
+ja_JP
+jv_ID
+km_KH
+ko_KR
+ky_KG
+lo_LA
+lt_LT
+mr_IN
+hu_HU
+mk_MK
+nl_NL
+nb_NO
+nn_NO
+pl_PL
+pt_PT
+pt_BR
+pa_IN
+ro_RO
+ru_RU
+zh_CN
+si_LK
+sk_SK
+sl_SI
+sr_RS
+fi_FI
+sv_SE
+tg_TJ
+ta_IN
+th_TH
+vi_VN
+zh_TW
+tr_TR
+uk_UA
+wa_BE
+xh_ZA
+zu_ZA
diff --git a/themes/openSUSE/data-install/pabout.txt b/themes/openSUSE/data-install/pabout.txt
new file mode 100644
index 0000000..58ae8b5
--- /dev/null
+++ b/themes/openSUSE/data-install/pabout.txt
@@ -0,0 +1,6 @@
+Penguin theme originally made by Raphael Quinet
+(http://www.gamers.org/~quinet/lilo/).
+Modernized for openSUSE by Steffen Winterfeldt.
+
+Like it or hate it? Edit gfxboot.cfg in /boot/message
+to have it always or to get rid of it.
diff --git a/themes/openSUSE/data-install/panim.jpg b/themes/openSUSE/data-install/panim.jpg
new file mode 100644
index 0000000..dfd5a55
--- /dev/null
+++ b/themes/openSUSE/data-install/panim.jpg
Binary files differ
diff --git a/themes/openSUSE/data-install/panim_a.jpg b/themes/openSUSE/data-install/panim_a.jpg
new file mode 100644
index 0000000..dd87061
--- /dev/null
+++ b/themes/openSUSE/data-install/panim_a.jpg
Binary files differ
diff --git a/themes/openSUSE/data-install/pback.jpg b/themes/openSUSE/data-install/pback.jpg
new file mode 100644
index 0000000..e7c36b5
--- /dev/null
+++ b/themes/openSUSE/data-install/pback.jpg
Binary files differ
diff --git a/themes/openSUSE/data-install/phead.jpg b/themes/openSUSE/data-install/phead.jpg
new file mode 100644
index 0000000..a192ba1
--- /dev/null
+++ b/themes/openSUSE/data-install/phead.jpg
Binary files differ
diff --git a/themes/openSUSE/data-install/text.jpg b/themes/openSUSE/data-install/text.jpg
new file mode 100644
index 0000000..cfc7711
--- /dev/null
+++ b/themes/openSUSE/data-install/text.jpg
Binary files differ
diff --git a/themes/openSUSE/data-install/timer_a.jpg b/themes/openSUSE/data-install/timer_a.jpg
new file mode 100644
index 0000000..fa021f3
--- /dev/null
+++ b/themes/openSUSE/data-install/timer_a.jpg
Binary files differ
diff --git a/themes/openSUSE/data-install/welcome.jpg b/themes/openSUSE/data-install/welcome.jpg
new file mode 100644
index 0000000..38bc38c
--- /dev/null
+++ b/themes/openSUSE/data-install/welcome.jpg
Binary files differ
diff --git a/themes/openSUSE/fonts/16x16.fnt b/themes/openSUSE/fonts/16x16.fnt
new file mode 100644
index 0000000..628d0d5
--- /dev/null
+++ b/themes/openSUSE/fonts/16x16.fnt
Binary files differ
diff --git a/themes/openSUSE/fonts/16x16.fnt.log b/themes/openSUSE/fonts/16x16.fnt.log
new file mode 100644
index 0000000..a909d6e
--- /dev/null
+++ b/themes/openSUSE/fonts/16x16.fnt.log
@@ -0,0 +1,54654 @@
+Font List
+ #0 NachlieliCLM-Bold (ok)
+ File /usr/share/fonts/Type1/NachlieliCLM-Bold.pfa
+ Size 14
+ Height 9, Baseline 1
+ c 0x0590-0x05ff
+ #1 KacstBook (ok)
+ File /usr/share/fonts/truetype/KacstBook.ttf
+ Size 12, dY 2
+ Height 18, Baseline 3
+ c 0x0600-0x06ff
+ c 0xfe70-0xfefc
+ #2 MuktiNarrow (ok)
+ File /usr/share/fonts/truetype/MuktiNarrow.ttf
+ Size 18
+ Height 13, Baseline 0
+ c 0x0981-0x09fa
+ #3 lohit_hi (ok)
+ File /usr/share/fonts/truetype/lohit_hi.ttf
+ Size 16
+ Height 18, Baseline 3
+ c 0x0901-0x0970
+ #4 lohit_pa (ok)
+ File /usr/share/fonts/truetype/lohit_pa.ttf
+ Size 15
+ Height 19, Baseline 4
+ c 0x0a01-0x0a74
+ #5 lohit_gu (ok)
+ File /usr/share/fonts/truetype/lohit_gu.ttf
+ Size 15
+ Height 17, Baseline 4
+ c 0x0a81-0x0af1
+ #6 TSCu_Paranar (ok)
+ File /usr/share/fonts/truetype/TSCu_Paranar.ttf
+ Size 18, dY 2
+ Height 19, Baseline 4
+ c 0x0b82-0x0bfa
+ #7 lklug (ok)
+ File /usr/share/fonts/truetype/lklug.ttf
+ Size 17, dY 1
+ Height 19, Baseline 4
+ c 0x0d82-0x0df4
+ #8 Loma (ok)
+ File /usr/share/fonts/truetype/Loma.ttf
+ Size 13
+ Height 18, Baseline 3
+ c 0x0e01-0x0e7f
+ #9 Loma (ok)
+ File /usr/share/fonts/truetype/Loma.ttf
+ Size 17, dY -2
+ Height 0, Baseline 0
+ c 0x0e81-0x0eff
+ #10 KhmerOS_sys (ok)
+ File /usr/share/fonts/truetype/KhmerOS_sys.ttf
+ Size 16, dY -2
+ Height 0, Baseline 0
+ c 0x1780-0x17f9
+ #11 DejaVuSans-Bold (ok)
+ File /usr/share/fonts/truetype/DejaVuSans-Bold.ttf
+ Size 14
+ Height 18, Baseline 4
+ #12 FZHeiTi (ok)
+ File /usr/share/fonts/truetype/FZHeiTi.ttf
+ Size 17
+ Height 18, Baseline 3
+ #13 gulim (ok)
+ File /usr/share/fonts/truetype/gulim.ttf
+ Size 17
+ Height 16, Baseline 3
+
+Missing Chars
+ 0x0008-0x000a
+ 0x001b-0x001c
+ 0x0080-0x009f
+ 0x2029
+
+Top Chars
+ 0x064b
+ 0x0908
+ 0x0913-0x0914
+ 0x093f-0x0940
+ 0x0947-0x0948
+ 0x094b-0x094c
+ 0x0a10
+ 0x0a48
+ 0x0a4c
+ 0x0a70-0x0a71
+ 0x0bc0
+ 0x0bc2
+ 0x0bcd
+ 0x0dd2
+ 0x0e4a
+ 0x2558
+ 0x255a-0x255b
+ 0x255d
+ 0x2567
+ 0x2569
+ 0x256c
+ 0x305a
+ 0x3073
+ 0x30b2
+ 0x30c0
+ 0x30dd
+ 0x4ee4
+ 0x5148
+ 0x5617
+ 0x5831
+ 0x58ca
+ 0x66ab
+ 0x6703
+ 0x6e96
+ 0x7576
+ 0x7981
+ 0x7e8c
+ 0x820a
+ 0x8655
+ 0x87a2
+ 0x8a9e
+ 0x8cf4
+ 0x8edf
+ 0x9a57
+
+Bottom Chars
+ 0x0a0a
+ 0x0a42
+ 0x0a4d
+ 0x0ac1-0x0ac3
+ 0x0acd
+ 0x0b86
+ 0x0dbd
+ 0x2320-0x2321
+ 0x2584
+ 0x2588
+ 0x258c
+ 0x2590-0x2593
+
+Font Size
+ Height: 19
+ Baseline: 4
+ Line Height: 18
+
+Char 0x0020 ' '
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 0 x 0
+ Advance: 5
+ Offset: 0 x 0
+ _____
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ ->|.....|<-
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ -----
+
+Char 0x0021 '!'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 2 x 10
+ Advance: 6
+ Offset: 2 x 0
+ ______
+ |......|
+ |......|
+ |......|
+ |......|
+ |......|
+ |..##..|
+ |..##..|
+ |..##..|
+ |..##..|
+ |..##..|
+ |..cc..|
+ |..aa..|
+ |.. ..|
+ |..##..|
+ ->|..##..|<-
+ |......|
+ |......|
+ |......|
+ |......|
+ ------
+
+Char 0x0022 '"'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 5 x 4
+ Advance: 7
+ Offset: 1 x 6
+ _______
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.## ##.|
+ |.## ##.|
+ |.## ##.|
+ |.## ##.|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ ->|.......|<-
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ -------
+
+Char 0x0023 '#'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 10 x 10
+ Advance: 12
+ Offset: 1 x 0
+ ____________
+ |............|
+ |............|
+ |............|
+ |............|
+ |............|
+ |. 4#3 c8 .|
+ |. 7# 1#5 .|
+ |. ab 4#2 .|
+ |.2#########.|
+ |. 4#2 #8 .|
+ |. 8# 2#4 .|
+ |.#########2.|
+ |. 2#5 aa .|
+ |. 5#2 #7 .|
+ ->|. 8# 3#4 .|<-
+ |............|
+ |............|
+ |............|
+ |............|
+ ------------
+
+Char 0x0024 '$'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 7 x 13
+ Advance: 10
+ Offset: 2 x -2
+ __________
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |.. # .|
+ |.. # .|
+ |.. 8c#b4 .|
+ |..9#3#18 .|
+ |..##1# .|
+ |..c#c#51 .|
+ |..5#####5.|
+ |.. 26###c.|
+ |.. #1##.|
+ |..a4 #2#a.|
+ ->|..39##c91.|<-
+ |.. # .|
+ |.. # .|
+ |..........|
+ |..........|
+ ----------
+
+Char 0x0025 '%'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 13 x 10
+ Advance: 14
+ Offset: 1 x 0
+ ______________
+ |..............|
+ |..............|
+ |..............|
+ |..............|
+ |..............|
+ |.1a#a1 5##2 |
+ |.a#4#a 2##5 |
+ |.## ## b#8 |
+ |.## ## 8#b |
+ |.a#4#94##4a#a1|
+ |.1a#a3##5a#4#a|
+ |. a#8 ## ##|
+ |. 7#b ## ##|
+ |. 3##2 a#4#9|
+ ->|. 1c#5 1a#a1|<-
+ |..............|
+ |..............|
+ |..............|
+ |..............|
+ --------------
+
+Char 0x0026 '&'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 11 x 10
+ Advance: 13
+ Offset: 1 x 0
+ _____________
+ |.............|
+ |.............|
+ |.............|
+ |.............|
+ |.............|
+ |. 19##a4 .|
+ |. b#3 39 .|
+ |. ##2 .|
+ |. 1##b1 .|
+ |.1c#8#c1 #c.|
+ |.a#5 5#c21#9.|
+ |.## 5#c8#4.|
+ |.c#1 5##b .|
+ |.5#a2 28##a .|
+ ->|. 3a###b56#7.|<-
+ |.............|
+ |.............|
+ |.............|
+ |.............|
+ -------------
+
+Char 0x0027 '''
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 2 x 4
+ Advance: 4
+ Offset: 1 x 6
+ ____
+ |....|
+ |....|
+ |....|
+ |....|
+ |....|
+ |.##.|
+ |.##.|
+ |.##.|
+ |.##.|
+ |....|
+ |....|
+ |....|
+ |....|
+ |....|
+ ->|....|<-
+ |....|
+ |....|
+ |....|
+ |....|
+ ----
+
+Char 0x0028 '('
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 4 x 12
+ Advance: 6
+ Offset: 1 x -1
+ ______
+ |......|
+ |......|
+ |......|
+ |......|
+ |. 6#9.|
+ |. c#2.|
+ |.4#9 .|
+ |.9#5 .|
+ |.c#1 .|
+ |.## .|
+ |.## .|
+ |.c#1 .|
+ |.9#5 .|
+ |.5#9 .|
+ ->|. c#2.|<-
+ |. 6#9.|
+ |......|
+ |......|
+ |......|
+ ------
+
+Char 0x0029 ')'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 4 x 12
+ Advance: 6
+ Offset: 1 x -1
+ ______
+ |......|
+ |......|
+ |......|
+ |......|
+ |.9#6 .|
+ |.2#c .|
+ |. 9#4.|
+ |. 5#9.|
+ |. 1#c.|
+ |. ##.|
+ |. ##.|
+ |. 1#c.|
+ |. 5#9.|
+ |. 9#4.|
+ ->|.2#c .|<-
+ |.9#6 .|
+ |......|
+ |......|
+ |......|
+ ------
+
+Char 0x002a '*'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 7 x 7
+ Advance: 7
+ Offset: 0 x 3
+ _______
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ | # |
+ |86 # 68|
+ |5cb#bc5|
+ | 1c#c1 |
+ |5cb#bc5|
+ |86 # 68|
+ | # |
+ |.......|
+ |.......|
+ ->|.......|<-
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ -------
+
+Char 0x002b '+'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 8 x 8
+ Advance: 12
+ Offset: 2 x 0
+ ____________
+ |............|
+ |............|
+ |............|
+ |............|
+ |............|
+ |............|
+ |............|
+ |.. ## ..|
+ |.. ## ..|
+ |.. ## ..|
+ |..########..|
+ |..########..|
+ |.. ## ..|
+ |.. ## ..|
+ ->|.. ## ..|<-
+ |............|
+ |............|
+ |............|
+ |............|
+ ------------
+
+Char 0x002c ','
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 3 x 5
+ Advance: 5
+ Offset: 0 x -2
+ _____
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ | ##..|
+ | ##..|
+ ->|1#b..|<-
+ |6#1..|
+ |b5 ..|
+ |.....|
+ |.....|
+ -----
+
+Char 0x002d '-'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 4 x 2
+ Advance: 6
+ Offset: 1 x 3
+ ______
+ |......|
+ |......|
+ |......|
+ |......|
+ |......|
+ |......|
+ |......|
+ |......|
+ |......|
+ |......|
+ |.####.|
+ |.####.|
+ |......|
+ |......|
+ ->|......|<-
+ |......|
+ |......|
+ |......|
+ |......|
+ ------
+
+Char 0x002e '.'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 2 x 3
+ Advance: 5
+ Offset: 1 x 0
+ _____
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ |.##..|
+ |.##..|
+ ->|.##..|<-
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ -----
+
+Char 0x002f '/'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 5 x 12
+ Advance: 5
+ Offset: 0 x -2
+ _____
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ | 8b|
+ | c7|
+ | 3#3|
+ | 7# |
+ | b9 |
+ | 1#5 |
+ | 5#1 |
+ | 9b |
+ | #7 |
+ ->|3#3 |<-
+ |7c |
+ |b8 |
+ |.....|
+ |.....|
+ -----
+
+Char 0x0030 '0'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 8 x 10
+ Advance: 10
+ Offset: 1 x 0
+ __________
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |. 2a##a2 .|
+ |.1#a11a#1.|
+ |.8#3 3#8.|
+ |.c# 1#b.|
+ |.## ##.|
+ |.## ##.|
+ |.c#1 1#b.|
+ |.8#3 3#8.|
+ |.1#a11a#1.|
+ ->|. 2a##a2 .|<-
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ ----------
+
+Char 0x0031 '1'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 6 x 10
+ Advance: 10
+ Offset: 2 x 0
+ __________
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |..3a## ..|
+ |..a3## ..|
+ |.. ## ..|
+ |.. ## ..|
+ |.. ## ..|
+ |.. ## ..|
+ |.. ## ..|
+ |.. ## ..|
+ |.. ## ..|
+ ->|..######..|<-
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ ----------
+
+Char 0x0032 '2'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 7 x 10
+ Advance: 10
+ Offset: 1 x 0
+ __________
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |.39c#c7 ..|
+ |.a4 8#7..|
+ |. #c..|
+ |. 1##..|
+ |. 9#b..|
+ |. 8##4..|
+ |. 8##3 ..|
+ |. 7##3 ..|
+ |.7##4 ..|
+ ->|.#######..|<-
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ ----------
+
+Char 0x0033 '3'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 8 x 10
+ Advance: 10
+ Offset: 1 x 0
+ __________
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |.39c##b71.|
+ |.a41 17#a.|
+ |. ##.|
+ |. 17#8.|
+ |. ####b1.|
+ |. 29#9.|
+ |. 1##.|
+ |. 1#c.|
+ |.a41 19#6.|
+ ->|.39c#ca4 .|<-
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ ----------
+
+Char 0x0034 '4'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 8 x 10
+ Advance: 10
+ Offset: 1 x 0
+ __________
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |. 4c## .|
+ |. 2c2## .|
+ |. b5 ## .|
+ |. 97 ## .|
+ |.7a ## .|
+ |.c1 ## .|
+ |.########.|
+ |. ## .|
+ |. ## .|
+ ->|. ## .|<-
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ ----------
+
+Char 0x0035 '5'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 8 x 10
+ Advance: 10
+ Offset: 1 x 0
+ __________
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |.####### .|
+ |.## .|
+ |.## .|
+ |.####c93 .|
+ |.a41 3b#4.|
+ |. 2#b.|
+ |. ##.|
+ |. 2#b.|
+ |.a51 2b#4.|
+ ->|.39c##a3 .|<-
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ ----------
+
+Char 0x0036 '6'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 8 x 10
+ Advance: 10
+ Offset: 1 x 0
+ __________
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |. 7c#b4 .|
+ |. bb2 29 .|
+ |.6#2 .|
+ |.b#a##b5 .|
+ |.##9 9#6.|
+ |.##1 1#c.|
+ |.c# ##.|
+ |.8#1 1#b.|
+ |.1#9 9#4.|
+ ->|. 29##b4 .|<-
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ ----------
+
+Char 0x0037 '7'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 8 x 10
+ Advance: 10
+ Offset: 1 x 0
+ __________
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |.########.|
+ |. 3#c.|
+ |. a#6.|
+ |. 2## .|
+ |. 9#7 .|
+ |. 2##1 .|
+ |. 9#7 .|
+ |. 2##1 .|
+ |. 8#8 .|
+ ->|. 1##1 .|<-
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ ----------
+
+Char 0x0038 '8'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 8 x 10
+ Advance: 10
+ Offset: 1 x 0
+ __________
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |.18c##c81.|
+ |.a#6 6#a.|
+ |.## ##.|
+ |.9#6 6#9.|
+ |. b####b .|
+ |.8#8 8#8.|
+ |.## ##.|
+ |.## ##.|
+ |.8#8 8#8.|
+ ->|. 7b##b7 .|<-
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ ----------
+
+Char 0x0039 '9'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 8 x 10
+ Advance: 10
+ Offset: 1 x 0
+ __________
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |. 4b##92 .|
+ |.4#9119#1.|
+ |.b#1 1#8.|
+ |.## #c.|
+ |.c#1 1##.|
+ |.6#9 9##.|
+ |. 5b##a#b.|
+ |. 3#6.|
+ |. 92 2bb .|
+ ->|. 4b#c7 .|<-
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ ----------
+
+Char 0x003a ':'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 2 x 8
+ Advance: 6
+ Offset: 1 x 0
+ ______
+ |......|
+ |......|
+ |......|
+ |......|
+ |......|
+ |......|
+ |......|
+ |.##...|
+ |.##...|
+ |.##...|
+ |. ...|
+ |. ...|
+ |.##...|
+ |.##...|
+ ->|.##...|<-
+ |......|
+ |......|
+ |......|
+ |......|
+ ------
+
+Char 0x003b ';'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 3 x 10
+ Advance: 6
+ Offset: 0 x -2
+ ______
+ |......|
+ |......|
+ |......|
+ |......|
+ |......|
+ |......|
+ |......|
+ | ##...|
+ | ##...|
+ | ##...|
+ | ...|
+ | ...|
+ | ##...|
+ | ##...|
+ ->|1#b...|<-
+ |6#1...|
+ |b5 ...|
+ |......|
+ |......|
+ ------
+
+Char 0x003c '<'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 9 x 8
+ Advance: 12
+ Offset: 1 x 0
+ ____________
+ |............|
+ |............|
+ |............|
+ |............|
+ |............|
+ |............|
+ |............|
+ |. 16b..|
+ |. 5a##c..|
+ |. 49##c73 ..|
+ |.##c83 ..|
+ |.##c73 ..|
+ |. 49##c73 ..|
+ |. 15a##c..|
+ ->|. 16b..|<-
+ |............|
+ |............|
+ |............|
+ |............|
+ ------------
+
+Char 0x003d '='
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 9 x 6
+ Advance: 12
+ Offset: 1 x 2
+ ____________
+ |............|
+ |............|
+ |............|
+ |............|
+ |............|
+ |............|
+ |............|
+ |.#########..|
+ |.#########..|
+ |. ..|
+ |. ..|
+ |.#########..|
+ |.#########..|
+ |............|
+ ->|............|<-
+ |............|
+ |............|
+ |............|
+ |............|
+ ------------
+
+Char 0x003e '>'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 9 x 8
+ Advance: 12
+ Offset: 1 x 0
+ ____________
+ |............|
+ |............|
+ |............|
+ |............|
+ |............|
+ |............|
+ |............|
+ |.b61 ..|
+ |.c##a5 ..|
+ |. 37c##94 ..|
+ |. 37c##..|
+ |. 37c##..|
+ |. 37c##94 ..|
+ |.c##a51 ..|
+ ->|.b61 ..|<-
+ |............|
+ |............|
+ |............|
+ |............|
+ ------------
+
+Char 0x003f '?'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 6 x 10
+ Advance: 8
+ Offset: 1 x 0
+ ________
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ |.3a##91.|
+ |.93 4#a.|
+ |. 1##.|
+ |. a#9.|
+ |. 1b#9 .|
+ |. 9#8 .|
+ |. ## .|
+ |. .|
+ |. ## .|
+ ->|. ## .|<-
+ |........|
+ |........|
+ |........|
+ |........|
+ --------
+
+Char 0x0040 '@'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 12 x 12
+ Advance: 14
+ Offset: 1 x -2
+ ______________
+ |..............|
+ |..............|
+ |..............|
+ |..............|
+ |..............|
+ |. 5a##b71 .|
+ |. 1b93 27c4 .|
+ |. b6 2c2.|
+ |.69 1a#9## 69.|
+ |.b3 9#45## 1c.|
+ |.# ## ## #.|
+ |.# ## ## 3b.|
+ |.b3 9#45##2b3.|
+ |.69 1a#9##a3 .|
+ ->|. b6 .|<-
+ |. 1b93 279 .|
+ |. 5a##c82 .|
+ |..............|
+ |..............|
+ --------------
+
+Char 0x0041 'A'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 11 x 10
+ Advance: 11
+ Offset: 0 x 0
+ ___________
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ | 1###1 |
+ | 6###6 |
+ | c#4#b |
+ | 3#a a#3 |
+ | 9#4 4#9 |
+ | 1#c c#1 |
+ | 6#######6 |
+ | c#1 1#c |
+ |3#a a#3|
+ ->|9#4 4#9|<-
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ -----------
+
+Char 0x0042 'B'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 8 x 10
+ Advance: 10
+ Offset: 1 x 0
+ __________
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |.#####c81.|
+ |.## 6#a.|
+ |.## ##.|
+ |.## 6#a.|
+ |.#######2.|
+ |.## 7#9.|
+ |.## ##.|
+ |.## ##.|
+ |.## 7#9.|
+ ->|.#####c81.|<-
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ ----------
+
+Char 0x0043 'C'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 9 x 10
+ Advance: 11
+ Offset: 1 x 0
+ ___________
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ |. 39c##c9.|
+ |. 7#82 14a.|
+ |.5#9 .|
+ |.a#2 .|
+ |.## .|
+ |.## .|
+ |.a#2 .|
+ |.5#9 .|
+ |. 7#82 14a.|
+ ->|. 39c##ca.|<-
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ -----------
+
+Char 0x0044 'D'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 9 x 10
+ Advance: 11
+ Offset: 1 x 0
+ ___________
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ |.####c94 .|
+ |.## 29#8 .|
+ |.## 9#5.|
+ |.## 2#a.|
+ |.## ##.|
+ |.## ##.|
+ |.## 2#a.|
+ |.## 9#5.|
+ |.## 29#8 .|
+ ->|.####c94 .|<-
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ -----------
+
+Char 0x0045 'E'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 7 x 10
+ Advance: 9
+ Offset: 1 x 0
+ _________
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.#######.|
+ |.## .|
+ |.## .|
+ |.## .|
+ |.#######.|
+ |.## .|
+ |.## .|
+ |.## .|
+ |.## .|
+ ->|.#######.|<-
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ ---------
+
+Char 0x0046 'F'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 7 x 10
+ Advance: 9
+ Offset: 1 x 0
+ _________
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.#######.|
+ |.## .|
+ |.## .|
+ |.## .|
+ |.#######.|
+ |.## .|
+ |.## .|
+ |.## .|
+ |.## .|
+ ->|.## .|<-
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ ---------
+
+Char 0x0047 'G'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 10 x 10
+ Advance: 12
+ Offset: 1 x 0
+ ____________
+ |............|
+ |............|
+ |............|
+ |............|
+ |............|
+ |. 4ac##c9 .|
+ |. 9#71 14a .|
+ |.5#8 .|
+ |.b#2 .|
+ |.## ####.|
+ |.## ##.|
+ |.a#3 ##.|
+ |.5#9 ##.|
+ |. 8#a3 2##.|
+ ->|. 49c##ca8.|<-
+ |............|
+ |............|
+ |............|
+ |............|
+ ------------
+
+Char 0x0048 'H'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 9 x 10
+ Advance: 11
+ Offset: 1 x 0
+ ___________
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ |.## ##.|
+ |.## ##.|
+ |.## ##.|
+ |.## ##.|
+ |.#########.|
+ |.## ##.|
+ |.## ##.|
+ |.## ##.|
+ |.## ##.|
+ ->|.## ##.|<-
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ -----------
+
+Char 0x0049 'I'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 2 x 10
+ Advance: 4
+ Offset: 1 x 0
+ ____
+ |....|
+ |....|
+ |....|
+ |....|
+ |....|
+ |.##.|
+ |.##.|
+ |.##.|
+ |.##.|
+ |.##.|
+ |.##.|
+ |.##.|
+ |.##.|
+ |.##.|
+ ->|.##.|<-
+ |....|
+ |....|
+ |....|
+ |....|
+ ----
+
+Char 0x004a 'J'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 4 x 13
+ Advance: 4
+ Offset: -1 x -3
+ ____
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ | ##.|
+ | ##.|
+ | ##.|
+ | ##.|
+ | ##.|
+ | ##.|
+ | ##.|
+ | ##.|
+ | ##.|
+ ->| ##.|<-
+ | ##.|
+ | 7#9.|
+ |#c8 .|
+ |.....|
+ ----
+
+Char 0x004b 'K'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 10 x 10
+ Advance: 11
+ Offset: 1 x 0
+ ___________
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ |.## 3##6 |
+ |.## 3##5 |
+ |.## 4##4 |
+ |.##4##3 |
+ |.####5 |
+ |.##6##3 |
+ |.## 5##4 |
+ |.## 5##4 |
+ |.## 5##5 |
+ ->|.## 4##6|<-
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ -----------
+
+Char 0x004c 'L'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 7 x 10
+ Advance: 9
+ Offset: 1 x 0
+ _________
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.## .|
+ |.## .|
+ |.## .|
+ |.## .|
+ |.## .|
+ |.## .|
+ |.## .|
+ |.## .|
+ |.## .|
+ ->|.#######.|<-
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ ---------
+
+Char 0x004d 'M'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 11 x 10
+ Advance: 13
+ Offset: 1 x 0
+ _____________
+ |.............|
+ |.............|
+ |.............|
+ |.............|
+ |.............|
+ |.###2 2###.|
+ |.###8 9###.|
+ |.##c#1 1#c##.|
+ |.##6#8 8#6##.|
+ |.## c#2#c ##.|
+ |.## 6#c#6 ##.|
+ |.## c#c ##.|
+ |.## 5#5 ##.|
+ |.## ##.|
+ ->|.## ##.|<-
+ |.............|
+ |.............|
+ |.............|
+ |.............|
+ -------------
+
+Char 0x004e 'N'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 9 x 10
+ Advance: 11
+ Offset: 1 x 0
+ ___________
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ |.##8 ##.|
+ |.###3 ##.|
+ |.###b ##.|
+ |.##5#6 ##.|
+ |.## a#1 ##.|
+ |.## 2#a ##.|
+ |.## 7#5##.|
+ |.## bc##.|
+ |.## 3###.|
+ ->|.## 8##.|<-
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ -----------
+
+Char 0x004f 'O'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 10 x 10
+ Advance: 12
+ Offset: 1 x 0
+ ____________
+ |............|
+ |............|
+ |............|
+ |............|
+ |............|
+ |. 6b##b6 .|
+ |. a#6 6#a .|
+ |.6#7 7#6.|
+ |.b#2 2#b.|
+ |.## ##.|
+ |.## ##.|
+ |.b#2 2#b.|
+ |.6#7 7#6.|
+ |. a#5 6#a .|
+ ->|. 6b##b6 .|<-
+ |............|
+ |............|
+ |............|
+ |............|
+ ------------
+
+Char 0x0050 'P'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 8 x 10
+ Advance: 10
+ Offset: 1 x 0
+ __________
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |.#####b6 .|
+ |.## 19#6.|
+ |.## 1#c.|
+ |.## ##.|
+ |.## 2#c.|
+ |.## 19#6.|
+ |.#####b6 .|
+ |.## .|
+ |.## .|
+ ->|.## .|<-
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ ----------
+
+Char 0x0051 'Q'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 10 x 12
+ Advance: 12
+ Offset: 1 x -2
+ ____________
+ |............|
+ |............|
+ |............|
+ |............|
+ |............|
+ |. 6b##b6 .|
+ |. a#6 6#a .|
+ |.6#7 7#6.|
+ |.b#2 2#b.|
+ |.## ##.|
+ |.## ##.|
+ |.b#2 2#b.|
+ |.6#8 8#6.|
+ |. a#6 6#b .|
+ ->|. 6b###8 .|<-
+ |. 4#c2 .|
+ |. 6#c1.|
+ |............|
+ |............|
+ ------------
+
+Char 0x0052 'R'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 9 x 10
+ Advance: 10
+ Offset: 1 x 0
+ __________
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |.#####c8 |
+ |.## 18#9 |
+ |.## ## |
+ |.## #c |
+ |.## 18#8 |
+ |.######c |
+ |.## 2a#5 |
+ |.## 1#c |
+ |.## 9#4|
+ ->|.## 4#a|<-
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ ----------
+
+Char 0x0053 'S'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 8 x 10
+ Advance: 10
+ Offset: 1 x 0
+ __________
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |. 7c##cb .|
+ |.8#5 4a .|
+ |.c# .|
+ |.##b74 .|
+ |.4c####91.|
+ |. 38c##a.|
+ |. 7##.|
+ |. #c.|
+ |.b52 5#7.|
+ ->|.9b###b6 .|<-
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ ----------
+
+Char 0x0054 'T'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 8 x 10
+ Advance: 10
+ Offset: 1 x 0
+ __________
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |.########.|
+ |. ## .|
+ |. ## .|
+ |. ## .|
+ |. ## .|
+ |. ## .|
+ |. ## .|
+ |. ## .|
+ |. ## .|
+ ->|. ## .|<-
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ ----------
+
+Char 0x0055 'U'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 9 x 10
+ Advance: 11
+ Offset: 1 x 0
+ ___________
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ |.## ##.|
+ |.## ##.|
+ |.## ##.|
+ |.## ##.|
+ |.## ##.|
+ |.## ##.|
+ |.## ##.|
+ |.c#1 1#c.|
+ |.6#91 19#6.|
+ ->|. 5a###a5 .|<-
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ -----------
+
+Char 0x0056 'V'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 11 x 10
+ Advance: 11
+ Offset: 0 x 0
+ ___________
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ |b#3 3#b|
+ |5#8 8#5|
+ | ## ## |
+ | 8#6 6#8 |
+ | 3#b b#3 |
+ | b#3 3#b |
+ | 6#8 9#6 |
+ | 1##2##1 |
+ | 9#b#9 |
+ ->| 4###4 |<-
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ -----------
+
+Char 0x0057 'W'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 15 x 10
+ Advance: 15
+ Offset: 0 x 0
+ _______________
+ |...............|
+ |...............|
+ |...............|
+ |...............|
+ |...............|
+ |1#c 7#8 c#1|
+ | c#2 b#b 2#c |
+ | 8#5 1###1 5#8 |
+ | 5#8 5#a#5 8#5 |
+ | 1#b 9#2#9 b#1 |
+ | c#1#a a#1#c |
+ | 8#7#6 6#7#8 |
+ | 5###2 2###5 |
+ | 1##c b##2 |
+ ->| c#7 7#c |<-
+ |...............|
+ |...............|
+ |...............|
+ |...............|
+ ---------------
+
+Char 0x0058 'X'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 10 x 10
+ Advance: 10
+ Offset: 0 x 0
+ __________
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |9#a 9#9|
+ | c#3 3#c |
+ | 3#b b#3 |
+ | 7#55#7 |
+ | bccb |
+ | 1cbbc1 |
+ | 9#33#9 |
+ | 4#a a#4 |
+ |1c#2 2#c1|
+ ->|9#9 9#9|<-
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ ----------
+
+Char 0x0059 'Y'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 10 x 10
+ Advance: 10
+ Offset: 0 x 0
+ __________
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |9#9 9#9|
+ | c#3 3#c |
+ | 3#a a#3 |
+ | 8#44#8 |
+ | bccb |
+ | 2##2 |
+ | ## |
+ | ## |
+ | ## |
+ ->| ## |<-
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ ----------
+
+Char 0x005a 'Z'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 9 x 10
+ Advance: 11
+ Offset: 1 x 0
+ ___________
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ |.#########.|
+ |. 6##.|
+ |. 5##3.|
+ |. 5##3 .|
+ |. 5##4 .|
+ |. 4##4 .|
+ |. 4##4 .|
+ |.4##4 .|
+ |.##4 .|
+ ->|.#########.|<-
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ -----------
+
+Char 0x005b '['
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 4 x 12
+ Advance: 6
+ Offset: 1 x -1
+ ______
+ |......|
+ |......|
+ |......|
+ |......|
+ |.####.|
+ |.## .|
+ |.## .|
+ |.## .|
+ |.## .|
+ |.## .|
+ |.## .|
+ |.## .|
+ |.## .|
+ |.## .|
+ ->|.## .|<-
+ |.####.|
+ |......|
+ |......|
+ |......|
+ ------
+
+Char 0x005c '\'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 5 x 12
+ Advance: 5
+ Offset: 0 x -2
+ _____
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ |b8 |
+ |7c |
+ |3#3 |
+ | #7 |
+ | 9b |
+ | 5#1 |
+ | 1#5 |
+ | b9 |
+ | 7# |
+ ->| 3#3|<-
+ | c7|
+ | 8b|
+ |.....|
+ |.....|
+ -----
+
+Char 0x005d ']'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 4 x 12
+ Advance: 6
+ Offset: 1 x -1
+ ______
+ |......|
+ |......|
+ |......|
+ |......|
+ |.####.|
+ |. ##.|
+ |. ##.|
+ |. ##.|
+ |. ##.|
+ |. ##.|
+ |. ##.|
+ |. ##.|
+ |. ##.|
+ |. ##.|
+ ->|. ##.|<-
+ |.####.|
+ |......|
+ |......|
+ |......|
+ ------
+
+Char 0x005e '^'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 9 x 4
+ Advance: 12
+ Offset: 1 x 6
+ ____________
+ |............|
+ |............|
+ |............|
+ |............|
+ |............|
+ |. a#a ..|
+ |. 9###9 ..|
+ |. 8#8 8#8 ..|
+ |.7#5 5#7..|
+ |............|
+ |............|
+ |............|
+ |............|
+ |............|
+ ->|............|<-
+ |............|
+ |............|
+ |............|
+ |............|
+ ------------
+
+Char 0x005f '_'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 7 x 1
+ Advance: 7
+ Offset: 0 x -3
+ _______
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ ->|.......|<-
+ |.......|
+ |.......|
+ |#######|
+ |.......|
+ -------
+
+Char 0x0060 '`'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 4 x 3
+ Advance: 7
+ Offset: 1 x 9
+ _______
+ |.......|
+ |.......|
+ |.......|
+ |.7#4 ..|
+ |. 9c1..|
+ |. a9..|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ ->|.......|<-
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ -------
+
+Char 0x0061 'a'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 7 x 8
+ Advance: 9
+ Offset: 1 x 0
+ _________
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |. 6##c8 .|
+ |. 62 5#8.|
+ |. #c.|
+ |.29#####.|
+ |.b#5 ##.|
+ |.## 2##.|
+ |.b#4 9##.|
+ ->|.2b#c5##.|<-
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ ---------
+
+Char 0x0062 'b'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 8 x 11
+ Advance: 10
+ Offset: 1 x 0
+ __________
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |.## .|
+ |.## .|
+ |.## .|
+ |.##5b#c5 .|
+ |.##a11a#4.|
+ |.##2 2#a.|
+ |.## ##.|
+ |.## ##.|
+ |.##2 2#a.|
+ |.##a11a#4.|
+ ->|.##5b#c5 .|<-
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ ----------
+
+Char 0x0063 'c'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 7 x 8
+ Advance: 9
+ Offset: 1 x 0
+ _________
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |. 29c#b4.|
+ |.2#c3 29.|
+ |.a#3 .|
+ |.## .|
+ |.## .|
+ |.a#3 .|
+ |.3#c3 28.|
+ ->|. 29c#b4.|<-
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ ---------
+
+Char 0x0064 'd'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 8 x 11
+ Advance: 10
+ Offset: 1 x 0
+ __________
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |. ##.|
+ |. ##.|
+ |. ##.|
+ |. 5c#b5##.|
+ |.4#a11a##.|
+ |.a#2 2##.|
+ |.## ##.|
+ |.## ##.|
+ |.a#2 2##.|
+ |.4#a11a##.|
+ ->|. 5c#b5##.|<-
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ ----------
+
+Char 0x0065 'e'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 8 x 8
+ Advance: 10
+ Offset: 1 x 0
+ __________
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |. 3a##b4 .|
+ |.3#a1 8#5.|
+ |.a#2 #b.|
+ |.########.|
+ |.## .|
+ |.a#4 .|
+ |.3#b2 15a.|
+ ->|. 29c#c93.|<-
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ ----------
+
+Char 0x0066 'f'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 5 x 11
+ Advance: 6
+ Offset: 1 x 0
+ ______
+ |......|
+ |......|
+ |......|
+ |......|
+ |. 4c##|
+ |. c#2 |
+ |. ## |
+ |.#####|
+ |. ## |
+ |. ## |
+ |. ## |
+ |. ## |
+ |. ## |
+ |. ## |
+ ->|. ## |<-
+ |......|
+ |......|
+ |......|
+ |......|
+ ------
+
+Char 0x0067 'g'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 8 x 11
+ Advance: 10
+ Offset: 1 x -3
+ __________
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |. 4c#b5##.|
+ |.4#a11a##.|
+ |.a#2 3##.|
+ |.## ##.|
+ |.## ##.|
+ |.a#2 3##.|
+ |.4#a11a##.|
+ ->|. 4c#b5##.|<-
+ |. 2#b.|
+ |. 92 1a#5.|
+ |. 4b##a4 .|
+ |..........|
+ ----------
+
+Char 0x0068 'h'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 8 x 11
+ Advance: 10
+ Offset: 1 x 0
+ __________
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |.## .|
+ |.## .|
+ |.## .|
+ |.##4a##a2.|
+ |.##b2 6#a.|
+ |.##2 ##.|
+ |.## ##.|
+ |.## ##.|
+ |.## ##.|
+ |.## ##.|
+ ->|.## ##.|<-
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ ----------
+
+Char 0x0069 'i'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 2 x 11
+ Advance: 4
+ Offset: 1 x 0
+ ____
+ |....|
+ |....|
+ |....|
+ |....|
+ |.##.|
+ |.##.|
+ |. .|
+ |.##.|
+ |.##.|
+ |.##.|
+ |.##.|
+ |.##.|
+ |.##.|
+ |.##.|
+ ->|.##.|<-
+ |....|
+ |....|
+ |....|
+ |....|
+ ----
+
+Char 0x006a 'j'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 4 x 14
+ Advance: 4
+ Offset: -1 x -3
+ ____
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ | ##.|
+ | ##.|
+ | .|
+ | ##.|
+ | ##.|
+ | ##.|
+ | ##.|
+ | ##.|
+ | ##.|
+ | ##.|
+ ->| ##.|<-
+ | ##.|
+ | 4#b.|
+ |##b2.|
+ |.....|
+ ----
+
+Char 0x006b 'k'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 9 x 11
+ Advance: 9
+ Offset: 1 x 0
+ _________
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |.## |
+ |.## |
+ |.## |
+ |.## 3##6 |
+ |.## 3##5 |
+ |.##4##4 |
+ |.####4 |
+ |.##5#b1 |
+ |.## 5#c2 |
+ |.## 5#c2 |
+ ->|.## 5##3|<-
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ ---------
+
+Char 0x006c 'l'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 2 x 11
+ Advance: 4
+ Offset: 1 x 0
+ ____
+ |....|
+ |....|
+ |....|
+ |....|
+ |.##.|
+ |.##.|
+ |.##.|
+ |.##.|
+ |.##.|
+ |.##.|
+ |.##.|
+ |.##.|
+ |.##.|
+ |.##.|
+ ->|.##.|<-
+ |....|
+ |....|
+ |....|
+ |....|
+ ----
+
+Char 0x006d 'm'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 12 x 8
+ Advance: 14
+ Offset: 1 x 0
+ ______________
+ |..............|
+ |..............|
+ |..............|
+ |..............|
+ |..............|
+ |..............|
+ |..............|
+ |.##5c#b47c#a2.|
+ |.##9 4##9 4#b.|
+ |.##1 ##1 ##.|
+ |.## ## ##.|
+ |.## ## ##.|
+ |.## ## ##.|
+ |.## ## ##.|
+ ->|.## ## ##.|<-
+ |..............|
+ |..............|
+ |..............|
+ |..............|
+ --------------
+
+Char 0x006e 'n'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 8 x 8
+ Advance: 10
+ Offset: 1 x 0
+ __________
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |.##4a##a2.|
+ |.##b2 6#a.|
+ |.##2 ##.|
+ |.## ##.|
+ |.## ##.|
+ |.## ##.|
+ |.## ##.|
+ ->|.## ##.|<-
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ ----------
+
+Char 0x006f 'o'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 8 x 8
+ Advance: 10
+ Offset: 1 x 0
+ __________
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |. 3a##a3 .|
+ |.3#a11a#3.|
+ |.a#2 2#a.|
+ |.## ##.|
+ |.## ##.|
+ |.a#2 2#a.|
+ |.3#a11a#3.|
+ ->|. 3a##a3 .|<-
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ ----------
+
+Char 0x0070 'p'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 8 x 11
+ Advance: 10
+ Offset: 1 x -3
+ __________
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |.##5b#c5 .|
+ |.##a11a#4.|
+ |.##2 2#a.|
+ |.## ##.|
+ |.## ##.|
+ |.##2 2#a.|
+ |.##a11a#4.|
+ ->|.##5b#c5 .|<-
+ |.## .|
+ |.## .|
+ |.## .|
+ |..........|
+ ----------
+
+Char 0x0071 'q'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 8 x 11
+ Advance: 10
+ Offset: 1 x -3
+ __________
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |. 5c#b5##.|
+ |.4#a11a##.|
+ |.a#2 2##.|
+ |.## ##.|
+ |.## ##.|
+ |.a#2 2##.|
+ |.4#a11a##.|
+ ->|. 5c#b5##.|<-
+ |. ##.|
+ |. ##.|
+ |. ##.|
+ |..........|
+ ----------
+
+Char 0x0072 'r'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 6 x 8
+ Advance: 7
+ Offset: 1 x 0
+ _______
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.##4a##|
+ |.##a2 |
+ |.##2 |
+ |.## |
+ |.## |
+ |.## |
+ |.## |
+ ->|.## |<-
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ -------
+
+Char 0x0073 's'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 7 x 8
+ Advance: 9
+ Offset: 1 x 0
+ _________
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.19c#c93.|
+ |.b#4 14a.|
+ |.##3 .|
+ |.b###b71.|
+ |.18c###b.|
+ |. 4##.|
+ |.a41 3#a.|
+ ->|.39c#c91.|<-
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ ---------
+
+Char 0x0074 't'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 5 x 10
+ Advance: 6
+ Offset: 0 x 0
+ ______
+ |......|
+ |......|
+ |......|
+ |......|
+ |......|
+ | ## .|
+ | ## .|
+ |#####.|
+ | ## .|
+ | ## .|
+ | ## .|
+ | ## .|
+ | ## .|
+ | c#2 .|
+ ->| 5c##.|<-
+ |......|
+ |......|
+ |......|
+ |......|
+ ------
+
+Char 0x0075 'u'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 8 x 8
+ Advance: 10
+ Offset: 1 x 0
+ __________
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |.## ##.|
+ |.## ##.|
+ |.## ##.|
+ |.## ##.|
+ |.## ##.|
+ |.## 2##.|
+ |.b#6 2a##.|
+ ->|.2a##b4##.|<-
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ ----------
+
+Char 0x0076 'v'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 9 x 8
+ Advance: 9
+ Offset: 0 x 0
+ _________
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |b#4 4#b|
+ |5#9 9#5|
+ | ##1 1## |
+ | 8#6 6#8 |
+ | 3#b b#3 |
+ | b#5#b |
+ | 6###6 |
+ ->| 1###1 |<-
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ ---------
+
+Char 0x0077 'w'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 12 x 8
+ Advance: 14
+ Offset: 1 x 0
+ ______________
+ |..............|
+ |..............|
+ |..............|
+ |..............|
+ |..............|
+ |..............|
+ |..............|
+ |.b#2 cc 2#b.|
+ |.7#6 2##2 6#7.|
+ |.3#9 6##6 9#3.|
+ |. ## a##a ## .|
+ |. a#3#99#3#a .|
+ |. 6#a#55#a#6 .|
+ |. 2###11###2 .|
+ ->|. c#b a#c .|<-
+ |..............|
+ |..............|
+ |..............|
+ |..............|
+ --------------
+
+Char 0x0078 'x'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 9 x 8
+ Advance: 9
+ Offset: 0 x 0
+ _________
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |8#b b#8|
+ | b#5 5#b |
+ | 2#c2c#1 |
+ | 4#c#4 |
+ | 6#c#6 |
+ | 2#c1c#2 |
+ | b#5 4#b |
+ ->|8#a a#8|<-
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ ---------
+
+Char 0x0079 'y'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 9 x 11
+ Advance: 9
+ Offset: 0 x -3
+ _________
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |b#4 3#b|
+ |5#9 8#6|
+ | c# c#1|
+ | 7#5 2#a |
+ | 1#a 7#5 |
+ | 9#1b# |
+ | 4#8#9 |
+ ->| c##4 |<-
+ | 6#c |
+ | 9#7 |
+ | a#c7 |
+ |.........|
+ ---------
+
+Char 0x007a 'z'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 7 x 8
+ Advance: 9
+ Offset: 1 x 0
+ _________
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.#######.|
+ |. 4##.|
+ |. 4##4.|
+ |. 4##4 .|
+ |. 4##3 .|
+ |.4##3 .|
+ |.##3 .|
+ ->|.#######.|<-
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ ---------
+
+Char 0x007b '{'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 6 x 13
+ Advance: 10
+ Offset: 2 x -2
+ __________
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |.. 4c##..|
+ |.. c#4 ..|
+ |.. ## ..|
+ |.. ## ..|
+ |.. ## ..|
+ |.. 5#b ..|
+ |..###4 ..|
+ |.. 5#b ..|
+ |.. ## ..|
+ |.. ## ..|
+ ->|.. ## ..|<-
+ |.. c#4 ..|
+ |.. 4c##..|
+ |..........|
+ |..........|
+ ----------
+
+Char 0x007c '|'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 2 x 14
+ Advance: 5
+ Offset: 2 x -3
+ _____
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ |..##.|
+ |..##.|
+ |..##.|
+ |..##.|
+ |..##.|
+ |..##.|
+ |..##.|
+ |..##.|
+ |..##.|
+ |..##.|
+ ->|..##.|<-
+ |..##.|
+ |..##.|
+ |..##.|
+ |.....|
+ -----
+
+Char 0x007d '}'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 6 x 13
+ Advance: 10
+ Offset: 2 x -2
+ __________
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |..##c4 ..|
+ |.. 4#c ..|
+ |.. ## ..|
+ |.. ## ..|
+ |.. ## ..|
+ |.. b#5 ..|
+ |.. 4###..|
+ |.. b#5 ..|
+ |.. ## ..|
+ |.. ## ..|
+ ->|.. ## ..|<-
+ |.. 4#c ..|
+ |..##c4 ..|
+ |..........|
+ |..........|
+ ----------
+
+Char 0x007e '~'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 9 x 3
+ Advance: 12
+ Offset: 1 x 3
+ ____________
+ |............|
+ |............|
+ |............|
+ |............|
+ |............|
+ |............|
+ |............|
+ |............|
+ |............|
+ |.3a#c72 3a..|
+ |.#########..|
+ |.a2 27c#a3..|
+ |............|
+ |............|
+ ->|............|<-
+ |............|
+ |............|
+ |............|
+ |............|
+ ------------
+
+Char 0x007f ''
+ Font: #13 gulim (17)
+ Bitmap: 0 x 0
+ Advance: 17
+ Offset: 0 x 0
+ _________________
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ ->|.................|<-
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x00a0 ' '
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 0 x 0
+ Advance: 5
+ Offset: 0 x 0
+ _____
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ ->|.....|<-
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ -----
+
+Char 0x00a1 '¡'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 2 x 10
+ Advance: 6
+ Offset: 2 x 0
+ ______
+ |......|
+ |......|
+ |......|
+ |......|
+ |......|
+ |..##..|
+ |..##..|
+ |.. ..|
+ |..aa..|
+ |..cc..|
+ |..##..|
+ |..##..|
+ |..##..|
+ |..##..|
+ ->|..##..|<-
+ |......|
+ |......|
+ |......|
+ |......|
+ ------
+
+Char 0x00a2 '¢'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 6 x 12
+ Advance: 10
+ Offset: 1 x -2
+ __________
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |. # ...|
+ |. # ...|
+ |. 5c#c5...|
+ |.5#b#18...|
+ |.b#3# ...|
+ |.## # ...|
+ |.## # ...|
+ |.a#3# ...|
+ |.4#b#17...|
+ ->|. 4b#c5...|<-
+ |. # ...|
+ |. # ...|
+ |..........|
+ |..........|
+ ----------
+
+Char 0x00a3 '£'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 8 x 10
+ Advance: 10
+ Offset: 0 x 0
+ __________
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ | 18c#b4..|
+ | 9#7 18..|
+ | ## ..|
+ | ## ..|
+ | ###### ..|
+ | ## ..|
+ | ## ..|
+ | ## ..|
+ | ## ..|
+ ->|########..|<-
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ ----------
+
+Char 0x00a4 '¤'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 8 x 8
+ Advance: 9
+ Offset: 1 x 0
+ _________
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.65 56|
+ |.5#b##b#5|
+ |. b9119b |
+ |. #1 1# |
+ |. #1 1# |
+ |. b9119b |
+ |.5#b##b#5|
+ ->|.75 56|<-
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ ---------
+
+Char 0x00a5 '¥'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 8 x 10
+ Advance: 10
+ Offset: 1 x 0
+ __________
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |.9#9 9#9.|
+ |.1##44##1.|
+ |. 5#cc#5 .|
+ |.########.|
+ |. 1##1 .|
+ |.########.|
+ |. ## .|
+ |. ## .|
+ |. ## .|
+ ->|. ## .|<-
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ ----------
+
+Char 0x00a6 '¦'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 2 x 12
+ Advance: 5
+ Offset: 2 x -2
+ _____
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ |..##.|
+ |..##.|
+ |..##.|
+ |..##.|
+ |..##.|
+ |.. .|
+ |.. .|
+ |..##.|
+ |..##.|
+ ->|..##.|<-
+ |..##.|
+ |..##.|
+ |.....|
+ |.....|
+ -----
+
+Char 0x00a7 '§'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 7 x 11
+ Advance: 7
+ Offset: 1 x -1
+ _______
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ |. 3b##b |
+ |. c#219 |
+ |. ##6 |
+ |. 8##b5 |
+ |.8#87c#8|
+ |.##1 1##|
+ |.9#c67#9|
+ |. 6c##9 |
+ |. 7#c |
+ ->|. 921#c |<-
+ |. b##b3 |
+ |........|
+ |........|
+ |........|
+ -------
+
+Char 0x00a8 '¨'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 5 x 2
+ Advance: 7
+ Offset: 1 x 9
+ _______
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.## ##.|
+ |.## ##.|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ ->|.......|<-
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ -------
+
+Char 0x00a9 '©'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 10 x 10
+ Advance: 14
+ Offset: 2 x 0
+ ______________
+ |..............|
+ |..............|
+ |..............|
+ |..............|
+ |..............|
+ |.. 4a##a4 ..|
+ |.. 7b4 4b7 ..|
+ |..4b18c#c b4..|
+ |..a488118 4a..|
+ |..# # #..|
+ |..# # #..|
+ |..a488 4a..|
+ |..4b18c#c b4..|
+ |.. 7b4 4b7 ..|
+ ->|.. 4a##a4 ..|<-
+ |..............|
+ |..............|
+ |..............|
+ |..............|
+ --------------
+
+Char 0x00aa 'ª'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 6 x 8
+ Advance: 8
+ Offset: 1 x 2
+ ________
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ |.ac##92.|
+ |. 4#b.|
+ |.3b####.|
+ |.c#32##.|
+ |.##17##.|
+ |.5c#7##.|
+ |. .|
+ |.#####c.|
+ |........|
+ ->|........|<-
+ |........|
+ |........|
+ |........|
+ |........|
+ --------
+
+Char 0x00ab '«'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 6 x 6
+ Advance: 9
+ Offset: 1 x 1
+ _________
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |. 8 8..|
+ |.1ac1ac..|
+ |.ca1ca1..|
+ |.ca1ca1..|
+ |.1ac1ac..|
+ |. 8 8..|
+ ->|.........|<-
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ ---------
+
+Char 0x00ac '¬'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 9 x 4
+ Advance: 12
+ Offset: 1 x 2
+ ____________
+ |............|
+ |............|
+ |............|
+ |............|
+ |............|
+ |............|
+ |............|
+ |............|
+ |............|
+ |.#########..|
+ |.#########..|
+ |. ##..|
+ |. ##..|
+ |............|
+ ->|............|<-
+ |............|
+ |............|
+ |............|
+ |............|
+ ------------
+
+Char 0x00ad '­'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 4 x 2
+ Advance: 6
+ Offset: 1 x 3
+ ______
+ |......|
+ |......|
+ |......|
+ |......|
+ |......|
+ |......|
+ |......|
+ |......|
+ |......|
+ |......|
+ |.####.|
+ |.####.|
+ |......|
+ |......|
+ ->|......|<-
+ |......|
+ |......|
+ |......|
+ |......|
+ ------
+
+Char 0x00ae '®'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 10 x 10
+ Advance: 14
+ Offset: 2 x 0
+ ______________
+ |..............|
+ |..............|
+ |..............|
+ |..............|
+ |..............|
+ |.. 4a##a4 ..|
+ |.. 7b4 4b7 ..|
+ |..4b ###7 b4..|
+ |..a4 # 4# 4a..|
+ |..# ###7 #..|
+ |..# #2#7 #..|
+ |..a4 # 6b 4a..|
+ |..4b # #3b4..|
+ |.. 7b4 4b7 ..|
+ ->|.. 4a##a4 ..|<-
+ |..............|
+ |..............|
+ |..............|
+ |..............|
+ --------------
+
+Char 0x00af '¯'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 4 x 1
+ Advance: 7
+ Offset: 2 x 9
+ _______
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |..####.|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ ->|.......|<-
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ -------
+
+Char 0x00b0 '°'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 5 x 5
+ Advance: 7
+ Offset: 1 x 5
+ _______
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.1a#a1.|
+ |.a6 6a.|
+ |.# #.|
+ |.a6 6a.|
+ |.2a#a1.|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ ->|.......|<-
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ -------
+
+Char 0x00b1 '±'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 10 x 8
+ Advance: 12
+ Offset: 1 x 0
+ ____________
+ |............|
+ |............|
+ |............|
+ |............|
+ |............|
+ |............|
+ |............|
+ |. ## .|
+ |. ## .|
+ |.##########.|
+ |.##########.|
+ |. ## .|
+ |. ## .|
+ |.##########.|
+ ->|.##########.|<-
+ |............|
+ |............|
+ |............|
+ |............|
+ ------------
+
+Char 0x00b2 '²'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 5 x 6
+ Advance: 6
+ Offset: 1 x 4
+ ______
+ |......|
+ |......|
+ |......|
+ |......|
+ |......|
+ |.a##c4|
+ |.812##|
+ |. 2#a|
+ |. 2ca |
+ |.5#9 |
+ |.#####|
+ |......|
+ |......|
+ |......|
+ ->|......|<-
+ |......|
+ |......|
+ |......|
+ |......|
+ ------
+
+Char 0x00b3 '³'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 5 x 6
+ Advance: 6
+ Offset: 1 x 4
+ ______
+ |......|
+ |......|
+ |......|
+ |......|
+ |......|
+ |.b##c6|
+ |. 3#c|
+ |. ##c3|
+ |. 3#b|
+ |.7 3#c|
+ |.b##b4|
+ |......|
+ |......|
+ |......|
+ ->|......|<-
+ |......|
+ |......|
+ |......|
+ |......|
+ ------
+
+Char 0x00b4 '´'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 4 x 3
+ Advance: 7
+ Offset: 3 x 9
+ _______
+ |.......|
+ |.......|
+ |.......|
+ |... 4#7|
+ |...1c9 |
+ |...9a |
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ ->|.......|<-
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ -------
+
+Char 0x00b5 'µ'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 9 x 11
+ Advance: 10
+ Offset: 1 x -3
+ __________
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |.## ## |
+ |.## ## |
+ |.## ## |
+ |.## ## |
+ |.## ## |
+ |.## ## |
+ |.##7 7##1|
+ ->|.##b##b8##|<-
+ |.## |
+ |.## |
+ |.## |
+ |..........|
+ ----------
+
+Char 0x00b6 '¶'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 6 x 11
+ Advance: 9
+ Offset: 1 x -1
+ _________
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |. 7c###..|
+ |.8### #..|
+ |.#### #..|
+ |.#### #..|
+ |.8### #..|
+ |. 7c# #..|
+ |. # #..|
+ |. # #..|
+ |. # #..|
+ ->|. # #..|<-
+ |. # #..|
+ |.........|
+ |.........|
+ |.........|
+ ---------
+
+Char 0x00b7 '·'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 2 x 3
+ Advance: 5
+ Offset: 1 x 3
+ _____
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ |.##..|
+ |.##..|
+ |.##..|
+ |.....|
+ |.....|
+ ->|.....|<-
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ -----
+
+Char 0x00b8 '¸'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 3 x 3
+ Advance: 7
+ Offset: 2 x -3
+ _______
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ ->|.......|<-
+ |.. 48..|
+ |.. 1#..|
+ |..##8..|
+ |.......|
+ -------
+
+Char 0x00b9 '¹'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 5 x 6
+ Advance: 6
+ Offset: 0 x 4
+ ______
+ |......|
+ |......|
+ |......|
+ |......|
+ |......|
+ |ca## .|
+ | ## .|
+ | ## .|
+ | ## .|
+ | ## .|
+ | ####.|
+ |......|
+ |......|
+ |......|
+ ->|......|<-
+ |......|
+ |......|
+ |......|
+ |......|
+ ------
+
+Char 0x00ba 'º'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 6 x 8
+ Advance: 8
+ Offset: 1 x 2
+ ________
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ |. 9##9 .|
+ |.9#44#9.|
+ |.## ##.|
+ |.## ##.|
+ |.9#44#9.|
+ |.19##9 .|
+ |. .|
+ |.9####9.|
+ |........|
+ ->|........|<-
+ |........|
+ |........|
+ |........|
+ |........|
+ --------
+
+Char 0x00bb '»'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 6 x 6
+ Advance: 9
+ Offset: 1 x 1
+ _________
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.8 8 ..|
+ |.ca1ca1..|
+ |.1ac1ac..|
+ |.1ac1ac..|
+ |.ca1ca1..|
+ |.8 8 ..|
+ ->|.........|<-
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ ---------
+
+Char 0x00bc '¼'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 14 x 11
+ Advance: 15
+ Offset: 0 x -1
+ _______________
+ |...............|
+ |...............|
+ |...............|
+ |...............|
+ |...............|
+ |ca## 9#a .|
+ | ## 3##2 .|
+ | ## b#8 .|
+ | ## 4## .|
+ | ## c#6 32 .|
+ | ####6#b 8#8 .|
+ | 1##4 5a#8 .|
+ | 8#a 2b1#8 .|
+ | 2##2 8ca#c5.|
+ ->| a#8 244#a2.|<-
+ | 53 .|
+ |...............|
+ |...............|
+ |...............|
+ ---------------
+
+Char 0x00bd '½'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 14 x 11
+ Advance: 15
+ Offset: 0 x -1
+ _______________
+ |...............|
+ |...............|
+ |...............|
+ |...............|
+ |...............|
+ |ca## 9#a .|
+ | ## 3##2 .|
+ | ## b#8 .|
+ | ## 4## .|
+ | ## c#6 .|
+ | ####6#b a##c4.|
+ | 1##4 812##.|
+ | 8#a 2#a.|
+ | 2##2 2ca .|
+ ->| a#8 5#9 .|<-
+ | #####.|
+ |...............|
+ |...............|
+ |...............|
+ ---------------
+
+Char 0x00be '¾'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 13 x 11
+ Advance: 15
+ Offset: 1 x -1
+ _______________
+ |...............|
+ |...............|
+ |...............|
+ |...............|
+ |...............|
+ |.b##c6 9#a .|
+ |. 3#c 3##2 .|
+ |. ##c3 b#8 .|
+ |. 3#b4## .|
+ |.7 3##c#6 32 .|
+ |.b##ba#b 8#8 .|
+ |. 1##4 5a#8 .|
+ |. 8#a 2b1#8 .|
+ |. 2##2 8ca#c5.|
+ ->|. a#8 244#a2.|<-
+ |. 53 .|
+ |...............|
+ |...............|
+ |...............|
+ ---------------
+
+Char 0x00bf '¿'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 6 x 10
+ Advance: 8
+ Offset: 1 x 0
+ ________
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ |. ## .|
+ |. ## .|
+ |. .|
+ |. ## .|
+ |. 8#9 .|
+ |. 9#b1 .|
+ |.9#a .|
+ |.##1 .|
+ |.a#4 39.|
+ ->|.19##a4.|<-
+ |........|
+ |........|
+ |........|
+ |........|
+ --------
+
+Char 0x00c0 'À'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 11 x 14
+ Advance: 11
+ Offset: 0 x 0
+ ___________
+ |...........|
+ | 7#1 |
+ | 99 |
+ | |
+ | |
+ | 1###1 |
+ | 6###6 |
+ | c#4#b |
+ | 3#a a#3 |
+ | 9#4 4#9 |
+ | 1#c c#1 |
+ | 6#######6 |
+ | c#1 1#c |
+ |3#a a#3|
+ ->|9#4 4#9|<-
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ -----------
+
+Char 0x00c1 'Á'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 11 x 14
+ Advance: 11
+ Offset: 0 x 0
+ ___________
+ |...........|
+ | 1#7 |
+ | 99 |
+ | |
+ | |
+ | 1###1 |
+ | 6###6 |
+ | c#4#b |
+ | 3#a a#3 |
+ | 9#4 4#9 |
+ | 1#c c#1 |
+ | 6#######6 |
+ | c#1 1#c |
+ |3#a a#3|
+ ->|9#4 4#9|<-
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ -----------
+
+Char 0x00c2 'Â'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 11 x 14
+ Advance: 11
+ Offset: 0 x 0
+ ___________
+ |...........|
+ | b#b |
+ | 89 98 |
+ | |
+ | |
+ | 1###1 |
+ | 6###6 |
+ | c#4#b |
+ | 3#a a#3 |
+ | 9#4 4#9 |
+ | 1#c c#1 |
+ | 6#######6 |
+ | c#1 1#c |
+ |3#a a#3|
+ ->|9#4 4#9|<-
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ -----------
+
+Char 0x00c3 'Ã'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 11 x 14
+ Advance: 11
+ Offset: 0 x 0
+ ___________
+ |...........|
+ | 6#73b |
+ | b27#5 |
+ | |
+ | |
+ | 1###1 |
+ | 6###6 |
+ | c#4#b |
+ | 3#a a#3 |
+ | 9#4 4#9 |
+ | 1#c c#1 |
+ | 6#######6 |
+ | c#1 1#c |
+ |3#a a#3|
+ ->|9#4 4#9|<-
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ -----------
+
+Char 0x00c4 'Ä'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 11 x 14
+ Advance: 11
+ Offset: 0 x 0
+ ___________
+ |...........|
+ | c#3#c |
+ | c#3#c |
+ | |
+ | |
+ | 1###1 |
+ | 6###6 |
+ | c#4#b |
+ | 3#a a#3 |
+ | 9#4 4#9 |
+ | 1#c c#1 |
+ | 6#######6 |
+ | c#1 1#c |
+ |3#a a#3|
+ ->|9#4 4#9|<-
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ -----------
+
+Char 0x00c5 'Å'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 11 x 13
+ Advance: 11
+ Offset: 0 x 0
+ ___________
+ |...........|
+ |...........|
+ | 2b#b2 |
+ | c4 4c |
+ | c4 4c |
+ | 6#8#6 |
+ | b# #b |
+ | 2#8 8#2 |
+ | 8#3 4#8 |
+ | c# #c |
+ | 4#8 8#4 |
+ | 9#######9 |
+ |1#c c#1|
+ |6#8 8#6|
+ ->|b#3 3#b|<-
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ -----------
+
+Char 0x00c6 'Æ'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 14 x 10
+ Advance: 15
+ Offset: 0 x 0
+ _______________
+ |...............|
+ |...............|
+ |...............|
+ |...............|
+ |...............|
+ | c#c#######.|
+ | 4#b ## .|
+ | a#5 ## .|
+ | 2#c ## .|
+ | 8#6 #######.|
+ | 1## ## .|
+ | 6####### .|
+ | c#3 ## .|
+ |4#b ## .|
+ ->|a#5 #######.|<-
+ |...............|
+ |...............|
+ |...............|
+ |...............|
+ ---------------
+
+Char 0x00c7 'Ç'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 9 x 13
+ Advance: 11
+ Offset: 1 x -3
+ ___________
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ |. 39c##c9.|
+ |. 7#82 14a.|
+ |.5#9 .|
+ |.a#2 .|
+ |.## .|
+ |.## .|
+ |.a#2 .|
+ |.5#9 .|
+ |. 7#82 14a.|
+ ->|. 39c##ca.|<-
+ |. 48 .|
+ |. 1# .|
+ |. ##8 .|
+ |...........|
+ -----------
+
+Char 0x00c8 'È'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 7 x 14
+ Advance: 9
+ Offset: 1 x 0
+ _________
+ |.........|
+ |. 7#1 .|
+ |. 99 .|
+ |. .|
+ |. .|
+ |.#######.|
+ |.## .|
+ |.## .|
+ |.## .|
+ |.#######.|
+ |.## .|
+ |.## .|
+ |.## .|
+ |.## .|
+ ->|.#######.|<-
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ ---------
+
+Char 0x00c9 'É'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 7 x 14
+ Advance: 9
+ Offset: 1 x 0
+ _________
+ |.........|
+ |. 1#7 .|
+ |. 99 .|
+ |. .|
+ |. .|
+ |.#######.|
+ |.## .|
+ |.## .|
+ |.## .|
+ |.#######.|
+ |.## .|
+ |.## .|
+ |.## .|
+ |.## .|
+ ->|.#######.|<-
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ ---------
+
+Char 0x00ca 'Ê'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 7 x 14
+ Advance: 9
+ Offset: 1 x 0
+ _________
+ |.........|
+ |. b#b .|
+ |. 89 98 .|
+ |. .|
+ |. .|
+ |.#######.|
+ |.## .|
+ |.## .|
+ |.## .|
+ |.#######.|
+ |.## .|
+ |.## .|
+ |.## .|
+ |.## .|
+ ->|.#######.|<-
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ ---------
+
+Char 0x00cb 'Ë'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 7 x 14
+ Advance: 9
+ Offset: 1 x 0
+ _________
+ |.........|
+ |. ## ## .|
+ |. ## ## .|
+ |. .|
+ |. .|
+ |.#######.|
+ |.## .|
+ |.## .|
+ |.## .|
+ |.#######.|
+ |.## .|
+ |.## .|
+ |.## .|
+ |.## .|
+ ->|.#######.|<-
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ ---------
+
+Char 0x00cc 'Ì'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 3 x 14
+ Advance: 4
+ Offset: 0 x 0
+ ____
+ |....|
+ |7#1.|
+ | 99.|
+ | .|
+ | .|
+ | ##.|
+ | ##.|
+ | ##.|
+ | ##.|
+ | ##.|
+ | ##.|
+ | ##.|
+ | ##.|
+ | ##.|
+ ->| ##.|<-
+ |....|
+ |....|
+ |....|
+ |....|
+ ----
+
+Char 0x00cd 'Í'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 3 x 14
+ Advance: 4
+ Offset: 1 x 0
+ ____
+ |....|
+ |.1#7|
+ |.99 |
+ |. |
+ |. |
+ |.## |
+ |.## |
+ |.## |
+ |.## |
+ |.## |
+ |.## |
+ |.## |
+ |.## |
+ |.## |
+ ->|.## |<-
+ |....|
+ |....|
+ |....|
+ |....|
+ ----
+
+Char 0x00ce 'Î'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 6 x 14
+ Advance: 4
+ Offset: -1 x 0
+ ____
+ |......|
+ | 5##5 |
+ |2c33c2|
+ | |
+ | |
+ | ## |
+ | ## |
+ | ## |
+ | ## |
+ | ## |
+ | ## |
+ | ## |
+ | ## |
+ | ## |
+ ->| ## |<-
+ |......|
+ |......|
+ |......|
+ |......|
+ ----
+
+Char 0x00cf 'Ï'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 6 x 14
+ Advance: 4
+ Offset: -1 x 0
+ ____
+ |......|
+ |## ##|
+ |## ##|
+ | |
+ | |
+ | ## |
+ | ## |
+ | ## |
+ | ## |
+ | ## |
+ | ## |
+ | ## |
+ | ## |
+ | ## |
+ ->| ## |<-
+ |......|
+ |......|
+ |......|
+ |......|
+ ----
+
+Char 0x00d0 'Ð'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 10 x 10
+ Advance: 11
+ Offset: 0 x 0
+ ___________
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ | ####c94 .|
+ | ## 28#8 .|
+ | ## 8#5.|
+ | ## 2#a.|
+ |##### ##.|
+ | ## ##.|
+ | ## 2#a.|
+ | ## 9#5.|
+ | ## 28#8 .|
+ ->| ####c94 .|<-
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ -----------
+
+Char 0x00d1 'Ñ'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 9 x 14
+ Advance: 11
+ Offset: 1 x 0
+ ___________
+ |...........|
+ |. 7#71# .|
+ |. #27#7 .|
+ |. .|
+ |. .|
+ |.##8 ##.|
+ |.###3 ##.|
+ |.###b ##.|
+ |.##5#6 ##.|
+ |.## a#1 ##.|
+ |.## 2#a ##.|
+ |.## 7#5##.|
+ |.## bc##.|
+ |.## 3###.|
+ ->|.## 8##.|<-
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ -----------
+
+Char 0x00d2 'Ò'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 10 x 14
+ Advance: 12
+ Offset: 1 x 0
+ ____________
+ |............|
+ |. 7#1 .|
+ |. 99 .|
+ |. .|
+ |. .|
+ |. 6b##b6 .|
+ |. a#6 6#a .|
+ |.6#7 7#6.|
+ |.b#2 2#b.|
+ |.## ##.|
+ |.## ##.|
+ |.b#2 2#b.|
+ |.6#7 7#6.|
+ |. a#5 6#a .|
+ ->|. 6b##b6 .|<-
+ |............|
+ |............|
+ |............|
+ |............|
+ ------------
+
+Char 0x00d3 'Ó'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 10 x 14
+ Advance: 12
+ Offset: 1 x 0
+ ____________
+ |............|
+ |. 1#7 .|
+ |. 99 .|
+ |. .|
+ |. .|
+ |. 6b##b6 .|
+ |. a#6 6#a .|
+ |.6#7 7#6.|
+ |.b#2 2#b.|
+ |.## ##.|
+ |.## ##.|
+ |.b#2 2#b.|
+ |.6#7 7#6.|
+ |. a#5 6#a .|
+ ->|. 6b##b6 .|<-
+ |............|
+ |............|
+ |............|
+ |............|
+ ------------
+
+Char 0x00d4 'Ô'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 10 x 14
+ Advance: 12
+ Offset: 1 x 0
+ ____________
+ |............|
+ |. b#b .|
+ |. 89 98 .|
+ |. .|
+ |. .|
+ |. 6b##b6 .|
+ |. a#6 6#a .|
+ |.6#7 7#6.|
+ |.b#2 2#b.|
+ |.## ##.|
+ |.## ##.|
+ |.b#2 2#b.|
+ |.6#7 7#6.|
+ |. a#5 6#a .|
+ ->|. 6b##b6 .|<-
+ |............|
+ |............|
+ |............|
+ |............|
+ ------------
+
+Char 0x00d5 'Õ'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 10 x 14
+ Advance: 12
+ Offset: 1 x 0
+ ____________
+ |............|
+ |. 8c2b .|
+ |. b2c8 .|
+ |. .|
+ |. .|
+ |. 6b##b6 .|
+ |. a#6 6#a .|
+ |.6#7 7#6.|
+ |.b#2 2#b.|
+ |.## ##.|
+ |.## ##.|
+ |.b#2 2#b.|
+ |.6#7 7#6.|
+ |. a#5 6#a .|
+ ->|. 6b##b6 .|<-
+ |............|
+ |............|
+ |............|
+ |............|
+ ------------
+
+Char 0x00d6 'Ö'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 10 x 14
+ Advance: 12
+ Offset: 1 x 0
+ ____________
+ |............|
+ |. ## ## .|
+ |. ## ## .|
+ |. .|
+ |. .|
+ |. 6b##b6 .|
+ |. a#6 6#a .|
+ |.6#7 7#6.|
+ |.b#2 2#b.|
+ |.## ##.|
+ |.## ##.|
+ |.b#2 2#b.|
+ |.6#7 7#6.|
+ |. a#5 6#a .|
+ ->|. 6b##b6 .|<-
+ |............|
+ |............|
+ |............|
+ |............|
+ ------------
+
+Char 0x00d7 '×'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 8 x 8
+ Advance: 12
+ Offset: 2 x 1
+ ____________
+ |............|
+ |............|
+ |............|
+ |............|
+ |............|
+ |............|
+ |..58 85..|
+ |..8#8 8#8..|
+ |.. 8#88#8 ..|
+ |.. 8##8 ..|
+ |.. 8##8 ..|
+ |.. 8#88#8 ..|
+ |..8#8 8#8..|
+ |..58 85..|
+ ->|............|<-
+ |............|
+ |............|
+ |............|
+ |............|
+ ------------
+
+Char 0x00d8 'Ø'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 12 x 12
+ Advance: 12
+ Offset: 0 x -1
+ ____________
+ |............|
+ |............|
+ |............|
+ |............|
+ | 1 |
+ | 4a##a43b1|
+ | 8#6 6##3 |
+ | 4#7 6##5 |
+ | a#2 6#7#a |
+ | c# 6#5 ## |
+ | ## 6#5 #c |
+ | c#8#5 2#a |
+ | 6##5 7#4 |
+ | 4##6 6#8 |
+ ->|2c76b##a4 |<-
+ | 1 |
+ |............|
+ |............|
+ |............|
+ ------------
+
+Char 0x00d9 'Ù'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 9 x 14
+ Advance: 11
+ Offset: 1 x 0
+ ___________
+ |...........|
+ |. 7#1 .|
+ |. 99 .|
+ |. .|
+ |. .|
+ |.## ##.|
+ |.## ##.|
+ |.## ##.|
+ |.## ##.|
+ |.## ##.|
+ |.## ##.|
+ |.## ##.|
+ |.c#1 1#c.|
+ |.6#91 19#6.|
+ ->|. 5a###a5 .|<-
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ -----------
+
+Char 0x00da 'Ú'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 9 x 14
+ Advance: 11
+ Offset: 1 x 0
+ ___________
+ |...........|
+ |. 1#7 .|
+ |. 99 .|
+ |. .|
+ |. .|
+ |.## ##.|
+ |.## ##.|
+ |.## ##.|
+ |.## ##.|
+ |.## ##.|
+ |.## ##.|
+ |.## ##.|
+ |.c#1 1#c.|
+ |.6#91 19#6.|
+ ->|. 5a###a5 .|<-
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ -----------
+
+Char 0x00db 'Û'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 9 x 14
+ Advance: 11
+ Offset: 1 x 0
+ ___________
+ |...........|
+ |. b#b .|
+ |. 89 98 .|
+ |. .|
+ |. .|
+ |.## ##.|
+ |.## ##.|
+ |.## ##.|
+ |.## ##.|
+ |.## ##.|
+ |.## ##.|
+ |.## ##.|
+ |.c#1 1#c.|
+ |.6#91 19#6.|
+ ->|. 5a###a5 .|<-
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ -----------
+
+Char 0x00dc 'Ü'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 9 x 14
+ Advance: 11
+ Offset: 1 x 0
+ ___________
+ |...........|
+ |. ## ## .|
+ |. ## ## .|
+ |. .|
+ |. .|
+ |.## ##.|
+ |.## ##.|
+ |.## ##.|
+ |.## ##.|
+ |.## ##.|
+ |.## ##.|
+ |.## ##.|
+ |.c#1 1#c.|
+ |.6#91 19#6.|
+ ->|. 5a###a5 .|<-
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ -----------
+
+Char 0x00dd 'Ý'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 10 x 14
+ Advance: 10
+ Offset: 0 x 0
+ __________
+ |..........|
+ | 1#7 |
+ | 99 |
+ | |
+ | |
+ |9#9 9#9|
+ | c#3 3#c |
+ | 3#a a#3 |
+ | 8#44#8 |
+ | bccb |
+ | 2##2 |
+ | ## |
+ | ## |
+ | ## |
+ ->| ## |<-
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ ----------
+
+Char 0x00de 'Þ'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 8 x 10
+ Advance: 10
+ Offset: 1 x 0
+ __________
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |.## .|
+ |.#####b6 .|
+ |.## 19#6.|
+ |.## 2#c.|
+ |.## ##.|
+ |.## 1#c.|
+ |.## 19#6.|
+ |.#####b6 .|
+ |.## .|
+ ->|.## .|<-
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ ----------
+
+Char 0x00df 'ß'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 8 x 11
+ Advance: 10
+ Offset: 1 x 0
+ __________
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |.18c#c81 .|
+ |.a#6 5#a .|
+ |.## 3## .|
+ |.## 5#b6 .|
+ |.## c#1 .|
+ |.## ##7 .|
+ |.## 9##a1.|
+ |.## 1a##a.|
+ |.## 5##.|
+ |.## 3#b.|
+ ->|.## c##a2.|<-
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ ----------
+
+Char 0x00e0 'à'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 7 x 12
+ Advance: 9
+ Offset: 1 x 0
+ _________
+ |.........|
+ |.........|
+ |.........|
+ |. 7#4 .|
+ |. 9c1 .|
+ |. a9 .|
+ |. .|
+ |. 6##c8 .|
+ |. 62 5#8.|
+ |. #c.|
+ |.29#####.|
+ |.b#5 ##.|
+ |.## 2##.|
+ |.b#4 9##.|
+ ->|.2b#c5##.|<-
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ ---------
+
+Char 0x00e1 'á'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 7 x 12
+ Advance: 9
+ Offset: 1 x 0
+ _________
+ |.........|
+ |.........|
+ |.........|
+ |. 4#7.|
+ |. 1c9 .|
+ |. 9a .|
+ |. .|
+ |. 6##c8 .|
+ |. 62 5#8.|
+ |. #c.|
+ |.29#####.|
+ |.b#5 ##.|
+ |.## 2##.|
+ |.b#4 9##.|
+ ->|.2b#c5##.|<-
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ ---------
+
+Char 0x00e2 'â'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 7 x 12
+ Advance: 9
+ Offset: 1 x 0
+ _________
+ |.........|
+ |.........|
+ |.........|
+ |. 8#8 .|
+ |. 2#7#2 .|
+ |. a7 7a .|
+ |. .|
+ |. 6##c8 .|
+ |. 62 5#8.|
+ |. #c.|
+ |.29#####.|
+ |.b#5 ##.|
+ |.## 2##.|
+ |.b#4 9##.|
+ ->|.2b#c5##.|<-
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ ---------
+
+Char 0x00e3 'ã'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 7 x 12
+ Advance: 9
+ Offset: 1 x 0
+ _________
+ |.........|
+ |.........|
+ |.........|
+ |. 7a a .|
+ |. b54b .|
+ |. a a7 .|
+ |. .|
+ |. 6##c8 .|
+ |. 62 5#8.|
+ |. #c.|
+ |.29#####.|
+ |.b#5 ##.|
+ |.## 2##.|
+ |.b#4 9##.|
+ ->|.2b#c5##.|<-
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ ---------
+
+Char 0x00e4 'ä'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 7 x 11
+ Advance: 9
+ Offset: 1 x 0
+ _________
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |. ## ## .|
+ |. ## ## .|
+ |. .|
+ |. 6##c8 .|
+ |. 62 5#8.|
+ |. #c.|
+ |.29#####.|
+ |.b#5 ##.|
+ |.## 2##.|
+ |.b#4 9##.|
+ ->|.2b#c5##.|<-
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ ---------
+
+Char 0x00e5 'å'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 7 x 13
+ Advance: 9
+ Offset: 1 x 0
+ _________
+ |.........|
+ |.........|
+ |. 4cc4 .|
+ |. c33c .|
+ |. c33c .|
+ |. 4cc4 .|
+ |. .|
+ |. 6##c8 .|
+ |. 62 5#8.|
+ |. #c.|
+ |.29#####.|
+ |.b#5 ##.|
+ |.## 2##.|
+ |.b#4 9##.|
+ ->|.2b#c5##.|<-
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ ---------
+
+Char 0x00e6 'æ'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 14 x 8
+ Advance: 16
+ Offset: 1 x 0
+ ________________
+ |................|
+ |................|
+ |................|
+ |................|
+ |................|
+ |................|
+ |................|
+ |. 4###b63a##a3 .|
+ |. 74 6##a1 8#4.|
+ |. ##2 #b.|
+ |.18c###########.|
+ |.a#7 ## .|
+ |.## 4##4 .|
+ |.a#6 2c##c2 15a.|
+ ->|.19##c827b##c83.|<-
+ |................|
+ |................|
+ |................|
+ |................|
+ ----------------
+
+Char 0x00e7 'ç'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 7 x 11
+ Advance: 9
+ Offset: 1 x -3
+ _________
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |. 29c#b4.|
+ |.2#c3 29.|
+ |.a#3 .|
+ |.## .|
+ |.## .|
+ |.a#3 .|
+ |.3#c3 28.|
+ ->|. 29c#b4.|<-
+ |. 48 .|
+ |. 1# .|
+ |. ##8 .|
+ |.........|
+ ---------
+
+Char 0x00e8 'è'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 8 x 12
+ Advance: 10
+ Offset: 1 x 0
+ __________
+ |..........|
+ |..........|
+ |..........|
+ |. 7#4 .|
+ |. 9c1 .|
+ |. a9 .|
+ |. .|
+ |. 3a##b4 .|
+ |.3#a1 8#5.|
+ |.a#2 #b.|
+ |.########.|
+ |.## .|
+ |.a#4 .|
+ |.3#b2 15a.|
+ ->|. 29c#c93.|<-
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ ----------
+
+Char 0x00e9 'é'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 8 x 12
+ Advance: 10
+ Offset: 1 x 0
+ __________
+ |..........|
+ |..........|
+ |..........|
+ |. 4#7 .|
+ |. 1c9 .|
+ |. 9a .|
+ |. .|
+ |. 3a##b4 .|
+ |.3#a1 8#5.|
+ |.a#2 #b.|
+ |.########.|
+ |.## .|
+ |.a#4 .|
+ |.3#b2 15a.|
+ ->|. 29c#c93.|<-
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ ----------
+
+Char 0x00ea 'ê'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 8 x 12
+ Advance: 10
+ Offset: 1 x 0
+ __________
+ |..........|
+ |..........|
+ |..........|
+ |. 8#8 .|
+ |. 2#7#2 .|
+ |. a7 7a .|
+ |. .|
+ |. 3a##b4 .|
+ |.3#a1 8#5.|
+ |.a#2 #b.|
+ |.########.|
+ |.## .|
+ |.a#4 .|
+ |.3#b2 15a.|
+ ->|. 29c#c93.|<-
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ ----------
+
+Char 0x00eb 'ë'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 8 x 11
+ Advance: 10
+ Offset: 1 x 0
+ __________
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |. ## ## .|
+ |. ## ## .|
+ |. .|
+ |. 3a##b4 .|
+ |.3#a1 8#5.|
+ |.a#2 #b.|
+ |.########.|
+ |.## .|
+ |.a#4 .|
+ |.3#b2 15a.|
+ ->|. 29c#c93.|<-
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ ----------
+
+Char 0x00ec 'ì'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 4 x 12
+ Advance: 4
+ Offset: 0 x 0
+ ____
+ |....|
+ |....|
+ |....|
+ |7#4 |
+ | 9c1|
+ | a9|
+ | |
+ | ## |
+ | ## |
+ | ## |
+ | ## |
+ | ## |
+ | ## |
+ | ## |
+ ->| ## |<-
+ |....|
+ |....|
+ |....|
+ |....|
+ ----
+
+Char 0x00ed 'í'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 5 x 12
+ Advance: 4
+ Offset: 1 x 0
+ ____
+ |......|
+ |......|
+ |......|
+ |. 4#7|
+ |. 1c9 |
+ |. 9a |
+ |. |
+ |.## |
+ |.## |
+ |.## |
+ |.## |
+ |.## |
+ |.## |
+ |.## |
+ ->|.## |<-
+ |......|
+ |......|
+ |......|
+ |......|
+ ----
+
+Char 0x00ee 'î'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 6 x 12
+ Advance: 4
+ Offset: -1 x 0
+ ____
+ |......|
+ |......|
+ |......|
+ | 1##1 |
+ | 9aa9 |
+ |3c11c3|
+ | |
+ | ## |
+ | ## |
+ | ## |
+ | ## |
+ | ## |
+ | ## |
+ | ## |
+ ->| ## |<-
+ |......|
+ |......|
+ |......|
+ |......|
+ ----
+
+Char 0x00ef 'ï'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 6 x 11
+ Advance: 4
+ Offset: -1 x 0
+ ____
+ |......|
+ |......|
+ |......|
+ |......|
+ |## ##|
+ |## ##|
+ | |
+ | ## |
+ | ## |
+ | ## |
+ | ## |
+ | ## |
+ | ## |
+ | ## |
+ ->| ## |<-
+ |......|
+ |......|
+ |......|
+ |......|
+ ----
+
+Char 0x00f0 'ð'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 8 x 11
+ Advance: 10
+ Offset: 1 x 0
+ __________
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |. 3##5393.|
+ |. 6##c5 .|
+ |. ac9#c1 .|
+ |. 3 9#9 .|
+ |. 6b####4.|
+ |.7#91 5#a.|
+ |.c#1 ##.|
+ |.## ##.|
+ |.b#2 2#b.|
+ |.4#a11a#4.|
+ ->|. 4a##a4 .|<-
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ ----------
+
+Char 0x00f1 'ñ'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 8 x 12
+ Advance: 10
+ Offset: 1 x 0
+ __________
+ |..........|
+ |..........|
+ |..........|
+ |. 5c3 # .|
+ |. b3a3b .|
+ |. # 3#5 .|
+ |. .|
+ |.##4a##a2.|
+ |.##b2 6#a.|
+ |.##2 ##.|
+ |.## ##.|
+ |.## ##.|
+ |.## ##.|
+ |.## ##.|
+ ->|.## ##.|<-
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ ----------
+
+Char 0x00f2 'ò'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 8 x 12
+ Advance: 10
+ Offset: 1 x 0
+ __________
+ |..........|
+ |..........|
+ |..........|
+ |. 7#4 .|
+ |. 9c1 .|
+ |. a9 .|
+ |. .|
+ |. 3a##a3 .|
+ |.3#a11a#3.|
+ |.a#2 2#a.|
+ |.## ##.|
+ |.## ##.|
+ |.a#2 2#a.|
+ |.3#a11a#3.|
+ ->|. 3a##a3 .|<-
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ ----------
+
+Char 0x00f3 'ó'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 8 x 12
+ Advance: 10
+ Offset: 1 x 0
+ __________
+ |..........|
+ |..........|
+ |..........|
+ |. 4#7 .|
+ |. 1c9 .|
+ |. 9a .|
+ |. .|
+ |. 3a##a3 .|
+ |.3#a11a#3.|
+ |.a#2 2#a.|
+ |.## ##.|
+ |.## ##.|
+ |.a#2 2#a.|
+ |.3#a11a#3.|
+ ->|. 3a##a3 .|<-
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ ----------
+
+Char 0x00f4 'ô'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 8 x 12
+ Advance: 10
+ Offset: 1 x 0
+ __________
+ |..........|
+ |..........|
+ |..........|
+ |. 1##1 .|
+ |. 8aa9 .|
+ |. 2#11c3 .|
+ |. .|
+ |. 3a##a3 .|
+ |.3#a11a#3.|
+ |.a#2 2#a.|
+ |.## ##.|
+ |.## ##.|
+ |.a#2 2#a.|
+ |.3#a11a#3.|
+ ->|. 3a##a3 .|<-
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ ----------
+
+Char 0x00f5 'õ'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 8 x 12
+ Advance: 10
+ Offset: 1 x 0
+ __________
+ |..........|
+ |..........|
+ |..........|
+ |. 4#8 3# .|
+ |. b5765b .|
+ |. #2 8#4 .|
+ |. .|
+ |. 3a##a3 .|
+ |.3#a11a#3.|
+ |.a#2 2#a.|
+ |.## ##.|
+ |.## ##.|
+ |.a#2 2#a.|
+ |.3#a11a#3.|
+ ->|. 3a##a3 .|<-
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ ----------
+
+Char 0x00f6 'ö'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 8 x 11
+ Advance: 10
+ Offset: 1 x 0
+ __________
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |. ## ## .|
+ |. ## ## .|
+ |. .|
+ |. 3a##a3 .|
+ |.3#a11a#3.|
+ |.a#2 2#a.|
+ |.## ##.|
+ |.## ##.|
+ |.a#2 2#a.|
+ |.3#a11a#3.|
+ ->|. 3a##a3 .|<-
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ ----------
+
+Char 0x00f7 '÷'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 8 x 8
+ Advance: 12
+ Offset: 2 x 0
+ ____________
+ |............|
+ |............|
+ |............|
+ |............|
+ |............|
+ |............|
+ |............|
+ |.. ## ..|
+ |.. ## ..|
+ |.. ..|
+ |..########..|
+ |..########..|
+ |.. ..|
+ |.. ## ..|
+ ->|.. ## ..|<-
+ |............|
+ |............|
+ |............|
+ |............|
+ ------------
+
+Char 0x00f8 'ø'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 8 x 10
+ Advance: 10
+ Offset: 1 x -1
+ __________
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |. 2.|
+ |. 29##c87.|
+ |.2#a11##4.|
+ |.9#2 8##a.|
+ |.## 6#3##.|
+ |.##4#5 ##.|
+ |.a##7 2#9.|
+ |.5#c11a#2.|
+ ->|.778##92 .|<-
+ |.3 .|
+ |..........|
+ |..........|
+ |..........|
+ ----------
+
+Char 0x00f9 'ù'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 8 x 12
+ Advance: 10
+ Offset: 1 x 0
+ __________
+ |..........|
+ |..........|
+ |..........|
+ |. 7#4 .|
+ |. 9c1 .|
+ |. a9 .|
+ |. .|
+ |.## ##.|
+ |.## ##.|
+ |.## ##.|
+ |.## ##.|
+ |.## ##.|
+ |.## 2##.|
+ |.b#6 2a##.|
+ ->|.2a##b4##.|<-
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ ----------
+
+Char 0x00fa 'ú'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 8 x 12
+ Advance: 10
+ Offset: 1 x 0
+ __________
+ |..........|
+ |..........|
+ |..........|
+ |. 4#7.|
+ |. 1c9 .|
+ |. 9a .|
+ |. .|
+ |.## ##.|
+ |.## ##.|
+ |.## ##.|
+ |.## ##.|
+ |.## ##.|
+ |.## 2##.|
+ |.b#6 2a##.|
+ ->|.2a##b4##.|<-
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ ----------
+
+Char 0x00fb 'û'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 8 x 12
+ Advance: 10
+ Offset: 1 x 0
+ __________
+ |..........|
+ |..........|
+ |..........|
+ |. 1##1 .|
+ |. 9aa9 .|
+ |. 3c11c3 .|
+ |. .|
+ |.## ##.|
+ |.## ##.|
+ |.## ##.|
+ |.## ##.|
+ |.## ##.|
+ |.## 2##.|
+ |.b#6 2a##.|
+ ->|.2a##b4##.|<-
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ ----------
+
+Char 0x00fc 'ü'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 8 x 11
+ Advance: 10
+ Offset: 1 x 0
+ __________
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |. ## ## .|
+ |. ## ## .|
+ |. .|
+ |.## ##.|
+ |.## ##.|
+ |.## ##.|
+ |.## ##.|
+ |.## ##.|
+ |.## 2##.|
+ |.b#6 2a##.|
+ ->|.2a##b4##.|<-
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ ----------
+
+Char 0x00fd 'ý'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 9 x 15
+ Advance: 9
+ Offset: 0 x -3
+ _________
+ |.........|
+ |.........|
+ |.........|
+ | 4#7 |
+ | 1c9 |
+ | 9a |
+ | |
+ |b#4 3#b|
+ |5#9 8#6|
+ | c# c#1|
+ | 7#5 2#a |
+ | 1#a 7#5 |
+ | 9#1b# |
+ | 4#8#9 |
+ ->| c##4 |<-
+ | 6#c |
+ | 9#7 |
+ | a#c7 |
+ |.........|
+ ---------
+
+Char 0x00fe 'þ'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 8 x 14
+ Advance: 10
+ Offset: 1 x -3
+ __________
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |.## .|
+ |.## .|
+ |.## .|
+ |.##5b#c5 .|
+ |.##a11a#4.|
+ |.##2 2#a.|
+ |.## ##.|
+ |.## ##.|
+ |.##2 2#a.|
+ |.##a11a#4.|
+ ->|.##5b#c5 .|<-
+ |.## .|
+ |.## .|
+ |.## .|
+ |..........|
+ ----------
+
+Char 0x00ff 'ÿ'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 9 x 14
+ Advance: 9
+ Offset: 0 x -3
+ _________
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ | ## ## |
+ | ## ## |
+ | |
+ |b#4 3#b|
+ |5#9 8#6|
+ | c# c#1|
+ | 7#5 2#a |
+ | 1#a 7#5 |
+ | 9#1b# |
+ | 4#8#9 |
+ ->| c##4 |<-
+ | 6#c |
+ | 9#7 |
+ | a#c7 |
+ |.........|
+ ---------
+
+Char 0x0102 'Ă'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 11 x 13
+ Advance: 11
+ Offset: 0 x 0
+ ___________
+ |...........|
+ |...........|
+ | a5 5a |
+ | 3b#b3 |
+ | |
+ | 1###1 |
+ | 6###6 |
+ | c#4#b |
+ | 3#a a#3 |
+ | 9#4 4#9 |
+ | 1#c c#1 |
+ | 6#######6 |
+ | c#1 1#c |
+ |3#a a#3|
+ ->|9#4 4#9|<-
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ -----------
+
+Char 0x0103 'ă'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 7 x 11
+ Advance: 9
+ Offset: 1 x 0
+ _________
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |. c4 4c .|
+ |. 4b#b3 .|
+ |. .|
+ |. 6##c8 .|
+ |. 62 5#8.|
+ |. #c.|
+ |.29#####.|
+ |.b#5 ##.|
+ |.## 2##.|
+ |.b#4 9##.|
+ ->|.2b#c5##.|<-
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ ---------
+
+Char 0x0104 'Ą'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 11 x 13
+ Advance: 11
+ Offset: 0 x -3
+ ___________
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ | 1###1 |
+ | 6###6 |
+ | c#4#b |
+ | 3#a a#3 |
+ | 9#4 4#9 |
+ | 1#c c#1 |
+ | 6#######6 |
+ | c#1 1#c |
+ |3#a a#3|
+ ->|9#4 4#9|<-
+ | 84 |
+ | #1 |
+ | 8## |
+ |...........|
+ -----------
+
+Char 0x0105 'ą'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 7 x 11
+ Advance: 9
+ Offset: 1 x -3
+ _________
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |. 6##c8 .|
+ |. 62 5#8.|
+ |. #c.|
+ |.29#####.|
+ |.b#5 ##.|
+ |.## 2##.|
+ |.b#4 9##.|
+ ->|.2b#c5##.|<-
+ |. 84 .|
+ |. #1 .|
+ |. 8##.|
+ |.........|
+ ---------
+
+Char 0x0106 'Ć'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 9 x 14
+ Advance: 11
+ Offset: 1 x 0
+ ___________
+ |...........|
+ |. 1#7 .|
+ |. 99 .|
+ |. .|
+ |. .|
+ |. 39c##c9.|
+ |. 7#82 14a.|
+ |.5#9 .|
+ |.a#2 .|
+ |.## .|
+ |.## .|
+ |.a#2 .|
+ |.5#9 .|
+ |. 7#82 14a.|
+ ->|. 39c##ca.|<-
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ -----------
+
+Char 0x0107 'ć'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 7 x 12
+ Advance: 9
+ Offset: 1 x 0
+ _________
+ |.........|
+ |.........|
+ |.........|
+ |. 4#7.|
+ |. 1c9 .|
+ |. 9a .|
+ |. .|
+ |. 29c#b4.|
+ |.2#c3 29.|
+ |.a#3 .|
+ |.## .|
+ |.## .|
+ |.a#3 .|
+ |.3#c3 28.|
+ ->|. 29c#b4.|<-
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ ---------
+
+Char 0x010c 'Č'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 9 x 14
+ Advance: 11
+ Offset: 1 x 0
+ ___________
+ |...........|
+ |. 89 98 .|
+ |. b#b .|
+ |. .|
+ |. .|
+ |. 39c##c9.|
+ |. 7#82 14a.|
+ |.5#9 .|
+ |.a#2 .|
+ |.## .|
+ |.## .|
+ |.a#2 .|
+ |.5#9 .|
+ |. 7#82 14a.|
+ ->|. 39c##ca.|<-
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ -----------
+
+Char 0x010d 'č'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 7 x 12
+ Advance: 9
+ Offset: 1 x 0
+ _________
+ |.........|
+ |.........|
+ |.........|
+ |. a7 7a .|
+ |. 2#7#2 .|
+ |. 8#8 .|
+ |. .|
+ |. 29c#b4.|
+ |.2#c3 29.|
+ |.a#3 .|
+ |.## .|
+ |.## .|
+ |.a#3 .|
+ |.3#c3 28.|
+ ->|. 29c#b4.|<-
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ ---------
+
+Char 0x010e 'Ď'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 9 x 14
+ Advance: 11
+ Offset: 1 x 0
+ ___________
+ |...........|
+ |. 89 98 .|
+ |. b#b .|
+ |. .|
+ |. .|
+ |.####c94 .|
+ |.## 29#8 .|
+ |.## 9#5.|
+ |.## 2#a.|
+ |.## ##.|
+ |.## ##.|
+ |.## 2#a.|
+ |.## 9#5.|
+ |.## 29#8 .|
+ ->|.####c94 .|<-
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ -----------
+
+Char 0x010f 'ď'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 10 x 11
+ Advance: 10
+ Offset: 1 x 0
+ __________
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ |. ##8b|
+ |. ##a7|
+ |. ##c3|
+ |. 5c#b5## |
+ |.4#a11a## |
+ |.a#2 2## |
+ |.## ## |
+ |.## ## |
+ |.a#2 2## |
+ |.4#a11a## |
+ ->|. 5c#b5## |<-
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ ----------
+
+Char 0x0110 'Đ'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 10 x 10
+ Advance: 12
+ Offset: 0 x 0
+ ____________
+ |............|
+ |............|
+ |............|
+ |............|
+ |............|
+ | ####c94 ..|
+ | ## 28#8 ..|
+ | ## 8#5..|
+ | ## 2#a..|
+ |##### ##..|
+ | ## ##..|
+ | ## 2#a..|
+ | ## 9#5..|
+ | ## 28#8 ..|
+ ->| ####c94 ..|<-
+ |............|
+ |............|
+ |............|
+ |............|
+ ------------
+
+Char 0x0111 'đ'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 9 x 11
+ Advance: 10
+ Offset: 1 x 0
+ __________
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |. ## |
+ |. #####|
+ |. ## |
+ |. 5c#b5## |
+ |.4#a11a## |
+ |.a#2 2## |
+ |.## ## |
+ |.## ## |
+ |.a#2 2## |
+ |.4#a11a## |
+ ->|. 5c#b5## |<-
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ ----------
+
+Char 0x0117 'ė'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 8 x 11
+ Advance: 10
+ Offset: 1 x 0
+ __________
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |. ## .|
+ |. ## .|
+ |. .|
+ |. 3a##b4 .|
+ |.3#a1 8#5.|
+ |.a#2 #b.|
+ |.########.|
+ |.## .|
+ |.a#4 .|
+ |.3#b2 15a.|
+ ->|. 29c#c93.|<-
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ ----------
+
+Char 0x0118 'Ę'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 7 x 13
+ Advance: 9
+ Offset: 1 x -3
+ _________
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.#######.|
+ |.## .|
+ |.## .|
+ |.## .|
+ |.#######.|
+ |.## .|
+ |.## .|
+ |.## .|
+ |.## .|
+ ->|.#######.|<-
+ |. 84 .|
+ |. #1 .|
+ |. 8##.|
+ |.........|
+ ---------
+
+Char 0x0119 'ę'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 8 x 11
+ Advance: 10
+ Offset: 1 x -3
+ __________
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |. 3a##b4 .|
+ |.3#a1 8#5.|
+ |.a#2 #b.|
+ |.########.|
+ |.## .|
+ |.a#4 .|
+ |.3#b2 15a.|
+ ->|. 29c#c93.|<-
+ |. 84 .|
+ |. #1 .|
+ |. 8## .|
+ |..........|
+ ----------
+
+Char 0x011a 'Ě'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 7 x 14
+ Advance: 9
+ Offset: 1 x 0
+ _________
+ |.........|
+ |. 89 98 .|
+ |. b#b .|
+ |. .|
+ |. .|
+ |.#######.|
+ |.## .|
+ |.## .|
+ |.## .|
+ |.#######.|
+ |.## .|
+ |.## .|
+ |.## .|
+ |.## .|
+ ->|.#######.|<-
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ ---------
+
+Char 0x011b 'ě'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 8 x 12
+ Advance: 10
+ Offset: 1 x 0
+ __________
+ |..........|
+ |..........|
+ |..........|
+ |. a7 7a .|
+ |. 2#7#2 .|
+ |. 8#8 .|
+ |. .|
+ |. 3a##b4 .|
+ |.3#a1 8#5.|
+ |.a#2 #b.|
+ |.########.|
+ |.## .|
+ |.a#4 .|
+ |.3#b2 15a.|
+ ->|. 29c#c93.|<-
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ ----------
+
+Char 0x011e 'Ğ'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 10 x 14
+ Advance: 12
+ Offset: 1 x 0
+ ____________
+ |............|
+ |. c5 5c .|
+ |. 3b#b3 .|
+ |. .|
+ |. .|
+ |. 4ac##c9 .|
+ |. 9#71 14a .|
+ |.5#8 .|
+ |.b#2 .|
+ |.## ####.|
+ |.## ##.|
+ |.a#3 ##.|
+ |.5#9 ##.|
+ |. 8#a3 2##.|
+ ->|. 49c##ca8.|<-
+ |............|
+ |............|
+ |............|
+ |............|
+ ------------
+
+Char 0x011f 'ğ'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 8 x 14
+ Advance: 10
+ Offset: 1 x -3
+ __________
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |. c4 4c .|
+ |. 4b#b3 .|
+ |. .|
+ |. 4c#b5##.|
+ |.4#a11a##.|
+ |.a#2 3##.|
+ |.## ##.|
+ |.## ##.|
+ |.a#2 3##.|
+ |.4#a11a##.|
+ ->|. 4c#b5##.|<-
+ |. 2#b.|
+ |. 92 1a#5.|
+ |. 4b##a4 .|
+ |..........|
+ ----------
+
+Char 0x012e 'Į'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 4 x 13
+ Advance: 4
+ Offset: 1 x -3
+ ____
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ |.## |
+ |.## |
+ |.## |
+ |.## |
+ |.## |
+ |.## |
+ |.## |
+ |.## |
+ |.## |
+ ->|.## |<-
+ |. 84 |
+ |. #1 |
+ |. 8##|
+ |.....|
+ ----
+
+Char 0x012f 'į'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 4 x 14
+ Advance: 4
+ Offset: 1 x -3
+ ____
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ |.## |
+ |.## |
+ |. |
+ |.## |
+ |.## |
+ |.## |
+ |.## |
+ |.## |
+ |.## |
+ |.## |
+ ->|.## |<-
+ |. 84 |
+ |. #1 |
+ |. 8##|
+ |.....|
+ ----
+
+Char 0x0130 'İ'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 2 x 14
+ Advance: 4
+ Offset: 1 x 0
+ ____
+ |....|
+ |.##.|
+ |.##.|
+ |. .|
+ |. .|
+ |.##.|
+ |.##.|
+ |.##.|
+ |.##.|
+ |.##.|
+ |.##.|
+ |.##.|
+ |.##.|
+ |.##.|
+ ->|.##.|<-
+ |....|
+ |....|
+ |....|
+ |....|
+ ----
+
+Char 0x0131 'ı'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 2 x 8
+ Advance: 4
+ Offset: 1 x 0
+ ____
+ |....|
+ |....|
+ |....|
+ |....|
+ |....|
+ |....|
+ |....|
+ |.##.|
+ |.##.|
+ |.##.|
+ |.##.|
+ |.##.|
+ |.##.|
+ |.##.|
+ ->|.##.|<-
+ |....|
+ |....|
+ |....|
+ |....|
+ ----
+
+Char 0x0139 'Ĺ'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 7 x 14
+ Advance: 9
+ Offset: 1 x 0
+ _________
+ |.........|
+ |.1#7 .|
+ |.99 .|
+ |. .|
+ |. .|
+ |.## .|
+ |.## .|
+ |.## .|
+ |.## .|
+ |.## .|
+ |.## .|
+ |.## .|
+ |.## .|
+ |.## .|
+ ->|.#######.|<-
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ ---------
+
+Char 0x013a 'ĺ'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 3 x 14
+ Advance: 4
+ Offset: 1 x 0
+ ____
+ |....|
+ |.1#7|
+ |.99 |
+ |. |
+ |.## |
+ |.## |
+ |.## |
+ |.## |
+ |.## |
+ |.## |
+ |.## |
+ |.## |
+ |.## |
+ |.## |
+ ->|.## |<-
+ |....|
+ |....|
+ |....|
+ |....|
+ ----
+
+Char 0x013d 'Ľ'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 7 x 11
+ Advance: 9
+ Offset: 1 x 0
+ _________
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |. 8b.|
+ |.## a7.|
+ |.## c3.|
+ |.## .|
+ |.## .|
+ |.## .|
+ |.## .|
+ |.## .|
+ |.## .|
+ |.## .|
+ ->|.#######.|<-
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ ---------
+
+Char 0x013e 'ľ'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 5 x 11
+ Advance: 7
+ Offset: 1 x 0
+ _______
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.## 8b.|
+ |.## a7.|
+ |.## c3.|
+ |.## .|
+ |.## .|
+ |.## .|
+ |.## .|
+ |.## .|
+ |.## .|
+ |.## .|
+ ->|.## .|<-
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ -------
+
+Char 0x0141 'Ł'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 9 x 10
+ Advance: 9
+ Offset: -1 x 0
+ _________
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ | ## .|
+ | ## .|
+ | ##1b6 .|
+ | ####6 .|
+ | ##b2 .|
+ | 3## .|
+ |4### .|
+ |19## .|
+ | ## .|
+ ->| #######.|<-
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ ---------
+
+Char 0x0142 'ł'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 5 x 11
+ Advance: 4
+ Offset: 0 x 0
+ ____
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ | ## |
+ | ## |
+ | ## |
+ | ##a3|
+ | ##b2|
+ |9## |
+ |a## |
+ | ## |
+ | ## |
+ | ## |
+ ->| ## |<-
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ ----
+
+Char 0x0143 'Ń'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 9 x 14
+ Advance: 11
+ Offset: 1 x 0
+ ___________
+ |...........|
+ |. 1#7 .|
+ |. 99 .|
+ |. .|
+ |. .|
+ |.##8 ##.|
+ |.###3 ##.|
+ |.###b ##.|
+ |.##5#6 ##.|
+ |.## a#1 ##.|
+ |.## 2#a ##.|
+ |.## 7#5##.|
+ |.## bc##.|
+ |.## 3###.|
+ ->|.## 8##.|<-
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ -----------
+
+Char 0x0144 'ń'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 8 x 12
+ Advance: 10
+ Offset: 1 x 0
+ __________
+ |..........|
+ |..........|
+ |..........|
+ |. 4#7 .|
+ |. 1c9 .|
+ |. 9a .|
+ |. .|
+ |.##4a##a2.|
+ |.##b2 6#a.|
+ |.##2 ##.|
+ |.## ##.|
+ |.## ##.|
+ |.## ##.|
+ |.## ##.|
+ ->|.## ##.|<-
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ ----------
+
+Char 0x0147 'Ň'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 9 x 14
+ Advance: 11
+ Offset: 1 x 0
+ ___________
+ |...........|
+ |. 89 98 .|
+ |. b#b .|
+ |. .|
+ |. .|
+ |.##8 ##.|
+ |.###3 ##.|
+ |.###b ##.|
+ |.##5#6 ##.|
+ |.## a#1 ##.|
+ |.## 2#a ##.|
+ |.## 7#5##.|
+ |.## bc##.|
+ |.## 3###.|
+ ->|.## 8##.|<-
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ -----------
+
+Char 0x0148 'ň'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 8 x 12
+ Advance: 10
+ Offset: 1 x 0
+ __________
+ |..........|
+ |..........|
+ |..........|
+ |. a7 7a .|
+ |. 2#7#2 .|
+ |. 8#8 .|
+ |. .|
+ |.##4a##a2.|
+ |.##b2 6#a.|
+ |.##2 ##.|
+ |.## ##.|
+ |.## ##.|
+ |.## ##.|
+ |.## ##.|
+ ->|.## ##.|<-
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ ----------
+
+Char 0x0150 'Ő'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 10 x 14
+ Advance: 12
+ Offset: 1 x 0
+ ____________
+ |............|
+ |. 1#71#7 .|
+ |. 99 99 .|
+ |. .|
+ |. .|
+ |. 6b##b6 .|
+ |. a#6 6#a .|
+ |.6#7 7#6.|
+ |.b#2 2#b.|
+ |.## ##.|
+ |.## ##.|
+ |.b#2 2#b.|
+ |.6#7 7#6.|
+ |. a#5 6#a .|
+ ->|. 6b##b6 .|<-
+ |............|
+ |............|
+ |............|
+ |............|
+ ------------
+
+Char 0x0151 'ő'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 8 x 12
+ Advance: 10
+ Offset: 1 x 0
+ __________
+ |..........|
+ |..........|
+ |..........|
+ |. b9 a9 .|
+ |. 4#13#1 .|
+ |. a6 a6 .|
+ |. .|
+ |. 3a##a3 .|
+ |.3#a11a#3.|
+ |.a#2 2#a.|
+ |.## ##.|
+ |.## ##.|
+ |.a#2 2#a.|
+ |.3#a11a#3.|
+ ->|. 3a##a3 .|<-
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ ----------
+
+Char 0x0152 'Œ'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 15 x 10
+ Advance: 17
+ Offset: 1 x 0
+ _________________
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ |. 27b##########.|
+ |. 6#b51 ## .|
+ |.4#a ## .|
+ |.a#3 ## .|
+ |.## #######.|
+ |.## ## .|
+ |.a#3 ## .|
+ |.4#a ## .|
+ |. 6#b51 ## .|
+ ->|. 28b##########.|<-
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x0153 'œ'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 14 x 8
+ Advance: 16
+ Offset: 1 x 0
+ ________________
+ |................|
+ |................|
+ |................|
+ |................|
+ |................|
+ |................|
+ |................|
+ |. 3a##c77c##a4 .|
+ |.3#a11a##a1 8#4.|
+ |.a#2 2##2 #b.|
+ |.## ########.|
+ |.## ## .|
+ |.a#2 2##4 .|
+ |.3#a11a##b2 15a.|
+ ->|. 3a##b54a##c83.|<-
+ |................|
+ |................|
+ |................|
+ |................|
+ ----------------
+
+Char 0x0154 'Ŕ'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 9 x 14
+ Advance: 10
+ Offset: 1 x 0
+ __________
+ |..........|
+ |. 1#7 |
+ |. 99 |
+ |. |
+ |. |
+ |.#####c8 |
+ |.## 18#9 |
+ |.## ## |
+ |.## #c |
+ |.## 18#8 |
+ |.######c |
+ |.## 2a#5 |
+ |.## 1#c |
+ |.## 9#4|
+ ->|.## 4#a|<-
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ ----------
+
+Char 0x0155 'ŕ'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 7 x 12
+ Advance: 7
+ Offset: 1 x 0
+ _______
+ |........|
+ |........|
+ |........|
+ |. 4#7|
+ |. 1c9 |
+ |. 9a |
+ |. |
+ |.##4a## |
+ |.##a2 |
+ |.##2 |
+ |.## |
+ |.## |
+ |.## |
+ |.## |
+ ->|.## |<-
+ |........|
+ |........|
+ |........|
+ |........|
+ -------
+
+Char 0x0158 'Ř'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 9 x 14
+ Advance: 10
+ Offset: 1 x 0
+ __________
+ |..........|
+ |. 89 98 |
+ |. b#b |
+ |. |
+ |. |
+ |.#####c8 |
+ |.## 18#9 |
+ |.## ## |
+ |.## #c |
+ |.## 18#8 |
+ |.######c |
+ |.## 2a#5 |
+ |.## 1#c |
+ |.## 9#4|
+ ->|.## 4#a|<-
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ ----------
+
+Char 0x0159 'ř'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 6 x 12
+ Advance: 7
+ Offset: 1 x 0
+ _______
+ |.......|
+ |.......|
+ |.......|
+ |. a7 7a|
+ |. 2#7#2|
+ |. 8#8 |
+ |. |
+ |.##4a##|
+ |.##a2 |
+ |.##2 |
+ |.## |
+ |.## |
+ |.## |
+ |.## |
+ ->|.## |<-
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ -------
+
+Char 0x015a 'Ś'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 8 x 14
+ Advance: 10
+ Offset: 1 x 0
+ __________
+ |..........|
+ |. 1#7 .|
+ |. 99 .|
+ |. .|
+ |. .|
+ |. 7c##cb .|
+ |.8#5 4a .|
+ |.c# .|
+ |.##b74 .|
+ |.4c####91.|
+ |. 38c##a.|
+ |. 7##.|
+ |. #c.|
+ |.b52 5#7.|
+ ->|.9b###b6 .|<-
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ ----------
+
+Char 0x015b 'ś'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 7 x 12
+ Advance: 9
+ Offset: 1 x 0
+ _________
+ |.........|
+ |.........|
+ |.........|
+ |. 4#7.|
+ |. 1c9 .|
+ |. 9a .|
+ |. .|
+ |.19c#c93.|
+ |.b#4 14a.|
+ |.##3 .|
+ |.b###b71.|
+ |.18c###b.|
+ |. 4##.|
+ |.a41 3#a.|
+ ->|.39c#c91.|<-
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ ---------
+
+Char 0x015e 'Ş'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 8 x 13
+ Advance: 10
+ Offset: 1 x -3
+ __________
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |. 7c##cb .|
+ |.8#5 4a .|
+ |.c# .|
+ |.##b74 .|
+ |.4c####91.|
+ |. 38c##a.|
+ |. 7##.|
+ |. #c.|
+ |.b52 5#7.|
+ ->|.9b###b6 .|<-
+ |. 48 .|
+ |. 1# .|
+ |. ##8 .|
+ |..........|
+ ----------
+
+Char 0x015f 'ş'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 7 x 11
+ Advance: 9
+ Offset: 1 x -3
+ _________
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.19c#c93.|
+ |.b#4 14a.|
+ |.##3 .|
+ |.b###b71.|
+ |.18c###b.|
+ |. 4##.|
+ |.a41 3#a.|
+ ->|.39c#c91.|<-
+ |. 48 .|
+ |. 1# .|
+ |. ##8 .|
+ |.........|
+ ---------
+
+Char 0x0160 'Š'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 8 x 14
+ Advance: 10
+ Offset: 1 x 0
+ __________
+ |..........|
+ |. 89 98 .|
+ |. b#b .|
+ |. .|
+ |. .|
+ |. 7c##cb .|
+ |.8#5 4a .|
+ |.c# .|
+ |.##b74 .|
+ |.4c####91.|
+ |. 38c##a.|
+ |. 7##.|
+ |. #c.|
+ |.b52 5#7.|
+ ->|.9b###b6 .|<-
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ ----------
+
+Char 0x0161 'š'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 7 x 12
+ Advance: 9
+ Offset: 1 x 0
+ _________
+ |.........|
+ |.........|
+ |.........|
+ |. a7 7a .|
+ |. 2#7#2 .|
+ |. 8#8 .|
+ |. .|
+ |.19c#c93.|
+ |.b#4 14a.|
+ |.##3 .|
+ |.b###b71.|
+ |.18c###b.|
+ |. 4##.|
+ |.a41 3#a.|
+ ->|.39c#c91.|<-
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ ---------
+
+Char 0x0162 'Ţ'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 8 x 13
+ Advance: 10
+ Offset: 1 x -3
+ __________
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |.########.|
+ |. ## .|
+ |. ## .|
+ |. ## .|
+ |. ## .|
+ |. ## .|
+ |. ## .|
+ |. ## .|
+ |. ## .|
+ ->|. ## .|<-
+ |. 48 .|
+ |. 1# .|
+ |. ##8 .|
+ |..........|
+ ----------
+
+Char 0x0163 'ţ'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 5 x 13
+ Advance: 6
+ Offset: 0 x -3
+ ______
+ |......|
+ |......|
+ |......|
+ |......|
+ |......|
+ | ## .|
+ | ## .|
+ |#####.|
+ | ## .|
+ | ## .|
+ | ## .|
+ | ## .|
+ | ## .|
+ | c#2 .|
+ ->| 5c##.|<-
+ | 48.|
+ | 1#.|
+ | ##8.|
+ |......|
+ ------
+
+Char 0x0164 'Ť'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 8 x 14
+ Advance: 10
+ Offset: 1 x 0
+ __________
+ |..........|
+ |. 9559 .|
+ |. 1##1 .|
+ |. .|
+ |. .|
+ |.########.|
+ |. ## .|
+ |. ## .|
+ |. ## .|
+ |. ## .|
+ |. ## .|
+ |. ## .|
+ |. ## .|
+ |. ## .|
+ ->|. ## .|<-
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ ----------
+
+Char 0x0165 'ť'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 6 x 12
+ Advance: 6
+ Offset: 0 x 0
+ ______
+ |......|
+ |......|
+ |......|
+ | 8b|
+ | a7|
+ | ## c3|
+ | ## |
+ |##### |
+ | ## |
+ | ## |
+ | ## |
+ | ## |
+ | ## |
+ | c#2 |
+ ->| 5c## |<-
+ |......|
+ |......|
+ |......|
+ |......|
+ ------
+
+Char 0x016b 'ū'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 8 x 10
+ Advance: 10
+ Offset: 1 x 0
+ __________
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |. #### .|
+ |. .|
+ |.## ##.|
+ |.## ##.|
+ |.## ##.|
+ |.## ##.|
+ |.## ##.|
+ |.## 2##.|
+ |.b#6 2a##.|
+ ->|.2a##b4##.|<-
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ ----------
+
+Char 0x016e 'Ů'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 9 x 14
+ Advance: 11
+ Offset: 1 x 0
+ ___________
+ |...........|
+ |. 4cc4 .|
+ |. c33c .|
+ |. c33c .|
+ |. 4cc4 .|
+ |.## ##.|
+ |.## ##.|
+ |.## ##.|
+ |.## ##.|
+ |.## ##.|
+ |.## ##.|
+ |.## ##.|
+ |.c#1 1#c.|
+ |.6#91 19#6.|
+ ->|. 5a###a5 .|<-
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ -----------
+
+Char 0x016f 'ů'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 8 x 13
+ Advance: 10
+ Offset: 1 x 0
+ __________
+ |..........|
+ |..........|
+ |. 4cc4 .|
+ |. c33c .|
+ |. c33c .|
+ |. 4cc4 .|
+ |. .|
+ |.## ##.|
+ |.## ##.|
+ |.## ##.|
+ |.## ##.|
+ |.## ##.|
+ |.## 2##.|
+ |.b#6 2a##.|
+ ->|.2a##b4##.|<-
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ ----------
+
+Char 0x0170 'Ű'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 9 x 14
+ Advance: 11
+ Offset: 1 x 0
+ ___________
+ |...........|
+ |. 1#71#7 .|
+ |. 99 99 .|
+ |. .|
+ |. .|
+ |.## ##.|
+ |.## ##.|
+ |.## ##.|
+ |.## ##.|
+ |.## ##.|
+ |.## ##.|
+ |.## ##.|
+ |.c#1 1#c.|
+ |.6#91 19#6.|
+ ->|. 5a###a5 .|<-
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ -----------
+
+Char 0x0171 'ű'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 8 x 12
+ Advance: 10
+ Offset: 1 x 0
+ __________
+ |..........|
+ |..........|
+ |..........|
+ |. b9 a9.|
+ |. 4#13#1.|
+ |. a6 a6 .|
+ |. .|
+ |.## ##.|
+ |.## ##.|
+ |.## ##.|
+ |.## ##.|
+ |.## ##.|
+ |.## 2##.|
+ |.b#6 2a##.|
+ ->|.2a##b4##.|<-
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ ----------
+
+Char 0x0173 'ų'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 9 x 11
+ Advance: 10
+ Offset: 1 x -3
+ __________
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |.## ## |
+ |.## ## |
+ |.## ## |
+ |.## ## |
+ |.## ## |
+ |.## 2## |
+ |.b#6 2a## |
+ ->|.2a##b4## |<-
+ |. 84 |
+ |. #1 |
+ |. 8##|
+ |..........|
+ ----------
+
+Char 0x0178 'Ÿ'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 10 x 14
+ Advance: 10
+ Offset: 0 x 0
+ __________
+ |..........|
+ | ## ## |
+ | ## ## |
+ | |
+ | |
+ |9#9 9#9|
+ | c#3 3#c |
+ | 3#a a#3 |
+ | 8#44#8 |
+ | bccb |
+ | 2##2 |
+ | ## |
+ | ## |
+ | ## |
+ ->| ## |<-
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ ----------
+
+Char 0x0179 'Ź'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 9 x 14
+ Advance: 11
+ Offset: 1 x 0
+ ___________
+ |...........|
+ |. 1#7 .|
+ |. 99 .|
+ |. .|
+ |. .|
+ |.#########.|
+ |. 6##.|
+ |. 5##3.|
+ |. 5##3 .|
+ |. 5##4 .|
+ |. 4##4 .|
+ |. 4##4 .|
+ |.4##4 .|
+ |.##4 .|
+ ->|.#########.|<-
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ -----------
+
+Char 0x017a 'ź'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 7 x 12
+ Advance: 9
+ Offset: 1 x 0
+ _________
+ |.........|
+ |.........|
+ |.........|
+ |. 4#7.|
+ |. 1c9 .|
+ |. 9a .|
+ |. .|
+ |.#######.|
+ |. 4##.|
+ |. 4##4.|
+ |. 4##4 .|
+ |. 4##3 .|
+ |.4##3 .|
+ |.##3 .|
+ ->|.#######.|<-
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ ---------
+
+Char 0x017b 'Ż'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 9 x 14
+ Advance: 11
+ Offset: 1 x 0
+ ___________
+ |...........|
+ |. ## .|
+ |. ## .|
+ |. .|
+ |. .|
+ |.#########.|
+ |. 6##.|
+ |. 5##3.|
+ |. 5##3 .|
+ |. 5##4 .|
+ |. 4##4 .|
+ |. 4##4 .|
+ |.4##4 .|
+ |.##4 .|
+ ->|.#########.|<-
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ -----------
+
+Char 0x017c 'ż'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 7 x 11
+ Advance: 9
+ Offset: 1 x 0
+ _________
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |. ## .|
+ |. ## .|
+ |. .|
+ |.#######.|
+ |. 4##.|
+ |. 4##4.|
+ |. 4##4 .|
+ |. 4##3 .|
+ |.4##3 .|
+ |.##3 .|
+ ->|.#######.|<-
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ ---------
+
+Char 0x017d 'Ž'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 9 x 14
+ Advance: 11
+ Offset: 1 x 0
+ ___________
+ |...........|
+ |. 89 98 .|
+ |. b#b .|
+ |. .|
+ |. .|
+ |.#########.|
+ |. 6##.|
+ |. 5##3.|
+ |. 5##3 .|
+ |. 5##4 .|
+ |. 4##4 .|
+ |. 4##4 .|
+ |.4##4 .|
+ |.##4 .|
+ ->|.#########.|<-
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ -----------
+
+Char 0x017e 'ž'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 7 x 12
+ Advance: 9
+ Offset: 1 x 0
+ _________
+ |.........|
+ |.........|
+ |.........|
+ |. a7 7a .|
+ |. 2#7#2 .|
+ |. 8#8 .|
+ |. .|
+ |.#######.|
+ |. 4##.|
+ |. 4##4.|
+ |. 4##4 .|
+ |. 4##3 .|
+ |.4##3 .|
+ |.##3 .|
+ ->|.#######.|<-
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ ---------
+
+Char 0x02c7 'ˇ'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 5 x 3
+ Advance: 7
+ Offset: 1 x 9
+ _______
+ |.......|
+ |.......|
+ |.......|
+ |.a7 7a.|
+ |.2#7#2.|
+ |. 8#8 .|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ ->|.......|<-
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ -------
+
+Char 0x02d8 '˘'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 5 x 2
+ Advance: 7
+ Offset: 1 x 9
+ _______
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.c4 4c.|
+ |.4b#b3.|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ ->|.......|<-
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ -------
+
+Char 0x02d9 '˙'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 2 x 2
+ Advance: 7
+ Offset: 3 x 9
+ _______
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |...##..|
+ |...##..|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ ->|.......|<-
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ -------
+
+Char 0x02db '˛'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 3 x 3
+ Advance: 7
+ Offset: 2 x -3
+ _______
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ ->|.......|<-
+ |..84 ..|
+ |..#1 ..|
+ |..8##..|
+ |.......|
+ -------
+
+Char 0x02dd '˝'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 6 x 3
+ Advance: 7
+ Offset: 1 x 9
+ _______
+ |.......|
+ |.......|
+ |.......|
+ |. b9 a9|
+ |.4#13#1|
+ |.a6 a6 |
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ ->|.......|<-
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ -------
+
+Char 0x0386 'Ά'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 11 x 12
+ Advance: 11
+ Offset: 0 x 0
+ ___________
+ |...........|
+ |...........|
+ |...........|
+ | 4#7 |
+ |1c9 |
+ |9a 1###1 |
+ | 6###6 |
+ | c#4#b |
+ | 3#a a#3 |
+ | 9#4 4#9 |
+ | 1#c c#1 |
+ | 6#######6 |
+ | c#1 1#c |
+ |3#a a#3|
+ ->|9#4 4#9|<-
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ -----------
+
+Char 0x0388 'Έ'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 11 x 12
+ Advance: 12
+ Offset: -1 x 0
+ ____________
+ |.............|
+ |.............|
+ |.............|
+ | 4#7 ..|
+ |1c9 ..|
+ |9a #######..|
+ | ## ..|
+ | ## ..|
+ | ## ..|
+ | #######..|
+ | ## ..|
+ | ## ..|
+ | ## ..|
+ | ## ..|
+ ->| #######..|<-
+ |.............|
+ |.............|
+ |.............|
+ |.............|
+ ------------
+
+Char 0x038c 'Ό'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 13 x 12
+ Advance: 12
+ Offset: -1 x 0
+ ____________
+ |.............|
+ |.............|
+ |.............|
+ | 4#7 |
+ |1c9 |
+ |9a 6b##b6 |
+ | a#6 6#a |
+ | 6#7 7#6|
+ | b#2 2#b|
+ | ## ##|
+ | ## ##|
+ | b#2 2#b|
+ | 6#7 7#6|
+ | a#5 6#a |
+ ->| 6b##b6 |<-
+ |.............|
+ |.............|
+ |.............|
+ |.............|
+ ------------
+
+Char 0x0391 'Α'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 11 x 10
+ Advance: 11
+ Offset: 0 x 0
+ ___________
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ | 1###1 |
+ | 6###6 |
+ | c#4#b |
+ | 3#a a#3 |
+ | 9#4 4#9 |
+ | 1#c c#1 |
+ | 6#######6 |
+ | c#1 1#c |
+ |3#a a#3|
+ ->|9#4 4#9|<-
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ -----------
+
+Char 0x0392 'Β'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 8 x 10
+ Advance: 10
+ Offset: 1 x 0
+ __________
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |.#####c81.|
+ |.## 6#a.|
+ |.## ##.|
+ |.## 6#a.|
+ |.#######2.|
+ |.## 7#9.|
+ |.## ##.|
+ |.## ##.|
+ |.## 7#9.|
+ ->|.#####c81.|<-
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ ----------
+
+Char 0x0393 'Γ'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 7 x 10
+ Advance: 9
+ Offset: 1 x 0
+ _________
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.#######.|
+ |.## .|
+ |.## .|
+ |.## .|
+ |.## .|
+ |.## .|
+ |.## .|
+ |.## .|
+ |.## .|
+ ->|.## .|<-
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ ---------
+
+Char 0x0394 'Δ'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 11 x 10
+ Advance: 11
+ Offset: 0 x 0
+ ___________
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ | 1###1 |
+ | 6###6 |
+ | c#4#b |
+ | 3#a a#3 |
+ | 9#4 4#9 |
+ | 1#c c#1 |
+ | 6#7 7#6 |
+ | c#1 1#c |
+ |3#a a#3|
+ ->|9#########9|<-
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ -----------
+
+Char 0x0395 'Ε'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 7 x 10
+ Advance: 9
+ Offset: 1 x 0
+ _________
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.#######.|
+ |.## .|
+ |.## .|
+ |.## .|
+ |.#######.|
+ |.## .|
+ |.## .|
+ |.## .|
+ |.## .|
+ ->|.#######.|<-
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ ---------
+
+Char 0x0396 'Ζ'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 9 x 10
+ Advance: 11
+ Offset: 1 x 0
+ ___________
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ |.#########.|
+ |. 6##.|
+ |. 5##3.|
+ |. 5##3 .|
+ |. 5##4 .|
+ |. 4##4 .|
+ |. 4##4 .|
+ |.4##4 .|
+ |.##4 .|
+ ->|.#########.|<-
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ -----------
+
+Char 0x0398 'Θ'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 10 x 10
+ Advance: 12
+ Offset: 1 x 0
+ ____________
+ |............|
+ |............|
+ |............|
+ |............|
+ |............|
+ |. 6b##b6 .|
+ |. a#6 6#a .|
+ |.6#7 7#6.|
+ |.b#2 2#b.|
+ |.## #### ##.|
+ |.## ##.|
+ |.b#2 2#b.|
+ |.6#7 7#6.|
+ |. a#5 6#a .|
+ ->|. 6b##b6 .|<-
+ |............|
+ |............|
+ |............|
+ |............|
+ ------------
+
+Char 0x0399 'Ι'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 2 x 10
+ Advance: 4
+ Offset: 1 x 0
+ ____
+ |....|
+ |....|
+ |....|
+ |....|
+ |....|
+ |.##.|
+ |.##.|
+ |.##.|
+ |.##.|
+ |.##.|
+ |.##.|
+ |.##.|
+ |.##.|
+ |.##.|
+ ->|.##.|<-
+ |....|
+ |....|
+ |....|
+ |....|
+ ----
+
+Char 0x039a 'Κ'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 10 x 10
+ Advance: 11
+ Offset: 1 x 0
+ ___________
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ |.## 3##6 |
+ |.## 3##5 |
+ |.## 4##4 |
+ |.##4##3 |
+ |.####5 |
+ |.##6##3 |
+ |.## 5##4 |
+ |.## 5##4 |
+ |.## 5##5 |
+ ->|.## 4##6|<-
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ -----------
+
+Char 0x039b 'Λ'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 11 x 10
+ Advance: 11
+ Offset: 0 x 0
+ ___________
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ | 1###1 |
+ | 6###6 |
+ | c#4#b |
+ | 3#a a#3 |
+ | 9#4 4#9 |
+ | 1#c c#1 |
+ | 6#7 7#6 |
+ | c#2 2#c |
+ |3#a a#3|
+ ->|9#4 4#9|<-
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ -----------
+
+Char 0x039c 'Μ'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 11 x 10
+ Advance: 13
+ Offset: 1 x 0
+ _____________
+ |.............|
+ |.............|
+ |.............|
+ |.............|
+ |.............|
+ |.###2 2###.|
+ |.###8 9###.|
+ |.##c#1 1#c##.|
+ |.##6#8 8#6##.|
+ |.## c#2#c ##.|
+ |.## 6#c#6 ##.|
+ |.## c#c ##.|
+ |.## 5#5 ##.|
+ |.## ##.|
+ ->|.## ##.|<-
+ |.............|
+ |.............|
+ |.............|
+ |.............|
+ -------------
+
+Char 0x039d 'Ν'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 9 x 10
+ Advance: 11
+ Offset: 1 x 0
+ ___________
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ |.##8 ##.|
+ |.###3 ##.|
+ |.###b ##.|
+ |.##5#6 ##.|
+ |.## a#1 ##.|
+ |.## 2#a ##.|
+ |.## 7#5##.|
+ |.## bc##.|
+ |.## 3###.|
+ ->|.## 8##.|<-
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ -----------
+
+Char 0x039f 'Ο'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 10 x 10
+ Advance: 12
+ Offset: 1 x 0
+ ____________
+ |............|
+ |............|
+ |............|
+ |............|
+ |............|
+ |. 6b##b6 .|
+ |. a#6 6#a .|
+ |.6#7 7#6.|
+ |.b#2 2#b.|
+ |.## ##.|
+ |.## ##.|
+ |.b#2 2#b.|
+ |.6#7 7#6.|
+ |. a#5 6#a .|
+ ->|. 6b##b6 .|<-
+ |............|
+ |............|
+ |............|
+ |............|
+ ------------
+
+Char 0x03a0 'Π'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 9 x 10
+ Advance: 12
+ Offset: 1 x 0
+ ____________
+ |............|
+ |............|
+ |............|
+ |............|
+ |............|
+ |.#########..|
+ |.## ##..|
+ |.## ##..|
+ |.## ##..|
+ |.## ##..|
+ |.## ##..|
+ |.## ##..|
+ |.## ##..|
+ |.## ##..|
+ ->|.## ##..|<-
+ |............|
+ |............|
+ |............|
+ |............|
+ ------------
+
+Char 0x03a1 'Ρ'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 8 x 10
+ Advance: 10
+ Offset: 1 x 0
+ __________
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |.#####b6 .|
+ |.## 19#6.|
+ |.## 1#c.|
+ |.## ##.|
+ |.## 2#c.|
+ |.## 19#6.|
+ |.#####b6 .|
+ |.## .|
+ |.## .|
+ ->|.## .|<-
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ ----------
+
+Char 0x03a3 'Σ'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 7 x 10
+ Advance: 9
+ Offset: 1 x 0
+ _________
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.#######.|
+ |.8#c2 .|
+ |. 9#c1 .|
+ |. a#b1 .|
+ |. c#a .|
+ |. 4##4 .|
+ |. 2##6 .|
+ |. b#9 .|
+ |.9#b .|
+ ->|.#######.|<-
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ ---------
+
+Char 0x03a4 'Τ'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 8 x 10
+ Advance: 10
+ Offset: 1 x 0
+ __________
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |.########.|
+ |. ## .|
+ |. ## .|
+ |. ## .|
+ |. ## .|
+ |. ## .|
+ |. ## .|
+ |. ## .|
+ |. ## .|
+ ->|. ## .|<-
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ ----------
+
+Char 0x03a5 'Υ'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 10 x 10
+ Advance: 10
+ Offset: 0 x 0
+ __________
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |9#9 9#9|
+ | c#3 3#c |
+ | 3#a a#3 |
+ | 8#44#8 |
+ | bccb |
+ | 2##2 |
+ | ## |
+ | ## |
+ | ## |
+ ->| ## |<-
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ ----------
+
+Char 0x03a7 'Χ'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 10 x 10
+ Advance: 10
+ Offset: 0 x 0
+ __________
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |9#a 9#9|
+ | c#3 3#c |
+ | 3#b b#3 |
+ | 7#55#7 |
+ | bccb |
+ | 1cbbc1 |
+ | 9#33#9 |
+ | 4#a a#4 |
+ |1c#2 2#c1|
+ ->|9#9 9#9|<-
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ ----------
+
+Char 0x03ac 'ά'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 8 x 12
+ Advance: 10
+ Offset: 1 x 0
+ __________
+ |..........|
+ |..........|
+ |..........|
+ |. 4#7 .|
+ |. 1c9 .|
+ |. 9a .|
+ |. .|
+ |. 6b#c8#c.|
+ |.6#9 6##9.|
+ |.c#2 ##6.|
+ |.## ##3.|
+ |.## ## .|
+ |.b#2 ##1.|
+ |.6#9 6##4.|
+ ->|. 7c##7a#.|<-
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ ----------
+
+Char 0x03ad 'έ'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 6 x 12
+ Advance: 8
+ Offset: 1 x 0
+ ________
+ |........|
+ |........|
+ |........|
+ |. 4#7.|
+ |. 1c9 .|
+ |. 9a .|
+ |. .|
+ |.3a##b4.|
+ |.c#5 29.|
+ |.c#4 .|
+ |.3c### .|
+ |.9#7 .|
+ |.## .|
+ |.b#6 28.|
+ ->|.19c#b4.|<-
+ |........|
+ |........|
+ |........|
+ |........|
+ --------
+
+Char 0x03ae 'ή'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 8 x 15
+ Advance: 10
+ Offset: 1 x -3
+ __________
+ |..........|
+ |..........|
+ |..........|
+ |. 4#7 .|
+ |. 1c9 .|
+ |. 9a .|
+ |. .|
+ |.##4a##a2.|
+ |.##b2 6#a.|
+ |.##2 ##.|
+ |.## ##.|
+ |.## ##.|
+ |.## ##.|
+ |.## ##.|
+ ->|.## ##.|<-
+ |. ##.|
+ |. ##.|
+ |. ##.|
+ |..........|
+ ----------
+
+Char 0x03af 'ί'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 4 x 12
+ Advance: 5
+ Offset: 1 x 0
+ _____
+ |.....|
+ |.....|
+ |.....|
+ |. 4#7|
+ |.1c9 |
+ |.9a |
+ |. |
+ |.## |
+ |.## |
+ |.## |
+ |.## |
+ |.## |
+ |.## |
+ |.##1 |
+ ->|.8## |<-
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ -----
+
+Char 0x03b1 'α'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 8 x 8
+ Advance: 10
+ Offset: 1 x 0
+ __________
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |. 6b#c8#c.|
+ |.6#9 6##9.|
+ |.c#2 ##6.|
+ |.## ##3.|
+ |.## ## .|
+ |.b#2 ##1.|
+ |.6#9 6##4.|
+ ->|. 7c##7a#.|<-
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ ----------
+
+Char 0x03b2 'β'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 8 x 14
+ Advance: 10
+ Offset: 1 x -3
+ __________
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |. 3a#c7 .|
+ |.3#7 6#8 .|
+ |.a#1 ## .|
+ |.## 1## .|
+ |.## 19#7 .|
+ |.## ##c5 .|
+ |.## 2b#7.|
+ |.## 2#c.|
+ |.##2 ##.|
+ |.##91 7#8.|
+ ->|.##3a#c7 .|<-
+ |.## .|
+ |.## .|
+ |.## .|
+ |..........|
+ ----------
+
+Char 0x03b3 'γ'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 9 x 11
+ Advance: 10
+ Offset: 0 x -3
+ __________
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |#c6 4#b.|
+ | a#3 8#6.|
+ | 1#9 c#1.|
+ | a# 2#9 .|
+ | 4#56#4 .|
+ | caac .|
+ | 7##7 .|
+ ->| 2##2 .|<-
+ | ## .|
+ | ## .|
+ | ## .|
+ |..........|
+ ----------
+
+Char 0x03b4 'δ'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 8 x 11
+ Advance: 10
+ Offset: 1 x 0
+ __________
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |. 3a##b5 .|
+ |. c#2 28 .|
+ |. c#5 .|
+ |. a###a3 .|
+ |.5#b11a#4.|
+ |.b#3 2#b.|
+ |.## ##.|
+ |.## ##.|
+ |.9#3 3#a.|
+ |.3#a11b#3.|
+ ->|. 3a##a3 .|<-
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ ----------
+
+Char 0x03b5 'ε'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 6 x 8
+ Advance: 8
+ Offset: 1 x 0
+ ________
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ |.3a##b4.|
+ |.c#5 29.|
+ |.c#4 .|
+ |.3c### .|
+ |.9#7 .|
+ |.## .|
+ |.b#6 28.|
+ ->|.19c#b4.|<-
+ |........|
+ |........|
+ |........|
+ |........|
+ --------
+
+Char 0x03b7 'η'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 8 x 11
+ Advance: 10
+ Offset: 1 x -3
+ __________
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |.##4a##a2.|
+ |.##b2 6#a.|
+ |.##2 ##.|
+ |.## ##.|
+ |.## ##.|
+ |.## ##.|
+ |.## ##.|
+ ->|.## ##.|<-
+ |. ##.|
+ |. ##.|
+ |. ##.|
+ |..........|
+ ----------
+
+Char 0x03b8 'θ'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 8 x 11
+ Advance: 10
+ Offset: 1 x 0
+ __________
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |. 2a##a2 .|
+ |.1##22##1.|
+ |.7#7 7#7.|
+ |.b#2 2#b.|
+ |.## ##.|
+ |.########.|
+ |.## ##.|
+ |.b#2 2#b.|
+ |.7#6 6#7.|
+ |.1##22##1.|
+ ->|. 2a##a2 .|<-
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ ----------
+
+Char 0x03b9 'ι'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 3 x 8
+ Advance: 5
+ Offset: 1 x 0
+ _____
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ |.## .|
+ |.## .|
+ |.## .|
+ |.## .|
+ |.## .|
+ |.## .|
+ |.##1.|
+ ->|.8##.|<-
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ -----
+
+Char 0x03ba 'κ'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 8 x 8
+ Advance: 10
+ Offset: 1 x 0
+ __________
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |.## 7c2.|
+ |.## 8b1 .|
+ |.## ab .|
+ |.##b##1 .|
+ |.##69#a .|
+ |.## 1##5 .|
+ |.## 5#c1.|
+ ->|.## a#9.|<-
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ ----------
+
+Char 0x03bb 'λ'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 8 x 11
+ Advance: 9
+ Offset: 0 x 0
+ _________
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |###7 .|
+ | a#6 .|
+ | 3#c .|
+ | c#3 .|
+ | 1##8 .|
+ | 7### .|
+ | c#c#5 .|
+ | 5#a5#a .|
+ | b#4 ##1.|
+ |4#c 9#6.|
+ ->|a#5 4#b.|<-
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ ---------
+
+Char 0x03bc 'μ'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 9 x 11
+ Advance: 10
+ Offset: 1 x -3
+ __________
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |.## ## |
+ |.## ## |
+ |.## ## |
+ |.## ## |
+ |.## ## |
+ |.## ## |
+ |.##7 7##1|
+ ->|.##b##b8##|<-
+ |.## |
+ |.## |
+ |.## |
+ |..........|
+ ----------
+
+Char 0x03bd 'ν'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 9 x 8
+ Advance: 10
+ Offset: 0 x 0
+ __________
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |b#4 8#3.|
+ |5#a 2#a.|
+ | ##1 ##.|
+ | 8#7 #c.|
+ | 3#c 4#8.|
+ | b#4 b#1.|
+ | 6#99#3 .|
+ ->| 1###5 .|<-
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ ----------
+
+Char 0x03be 'ξ'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 7 x 14
+ Advance: 8
+ Offset: 1 x -3
+ ________
+ |........|
+ |........|
+ |........|
+ |........|
+ |.#######|
+ |. 4cb41 |
+ |. c#1 |
+ |. ## |
+ |. 9#92 |
+ |. 6#### |
+ |.8#c51 |
+ |.##2 |
+ |.## |
+ |.8#81 |
+ ->|. 6b##b3|<-
+ |. 2#c|
+ |. 2#c|
+ |. #b3|
+ |........|
+ --------
+
+Char 0x03bf 'ο'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 8 x 8
+ Advance: 10
+ Offset: 1 x 0
+ __________
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |. 3a##a3 .|
+ |.3#a11a#3.|
+ |.a#2 2#a.|
+ |.## ##.|
+ |.## ##.|
+ |.a#2 2#a.|
+ |.3#a11a#3.|
+ ->|. 3a##a3 .|<-
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ ----------
+
+Char 0x03c0 'π'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 9 x 8
+ Advance: 11
+ Offset: 1 x 0
+ ___________
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ |.#########.|
+ |. ## ## .|
+ |. ## ## .|
+ |. ## ## .|
+ |. ## ## .|
+ |. ## ## .|
+ |. ## ##1.|
+ ->|. ## 7##.|<-
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ -----------
+
+Char 0x03c1 'ρ'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 8 x 11
+ Advance: 10
+ Offset: 1 x -3
+ __________
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |. 29c#b4 .|
+ |.2#a11a#4.|
+ |.a#2 2#b.|
+ |.## ##.|
+ |.## ##.|
+ |.##2 2#a.|
+ |.##911a#4.|
+ ->|.##3b#c5 .|<-
+ |.## .|
+ |.## .|
+ |.## .|
+ |..........|
+ ----------
+
+Char 0x03c2 'ς'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 7 x 11
+ Advance: 9
+ Offset: 1 x -3
+ _________
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |. 29c#b4.|
+ |.2#c3 29.|
+ |.9#4 .|
+ |.## .|
+ |.## .|
+ |.b#3 .|
+ |.4#b3 .|
+ ->|. 5b##b3.|<-
+ |. 2#c.|
+ |. 2#c.|
+ |. #b3.|
+ |.........|
+ ---------
+
+Char 0x03c3 'σ'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 9 x 8
+ Advance: 11
+ Offset: 1 x 0
+ ___________
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ |. 5b######.|
+ |.5#a11a#9 .|
+ |.b#2 2#c .|
+ |.## ## .|
+ |.## ## .|
+ |.a#2 2#a .|
+ |.3#a11a#3 .|
+ ->|. 3a##a3 .|<-
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ -----------
+
+Char 0x03c4 'τ'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 8 x 8
+ Advance: 8
+ Offset: 0 x 0
+ ________
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ |########|
+ | ## |
+ | ## |
+ | ## |
+ | ## |
+ | ## |
+ | ##1 |
+ ->| 7## |<-
+ |........|
+ |........|
+ |........|
+ |........|
+ --------
+
+Char 0x03c5 'υ'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 8 x 8
+ Advance: 10
+ Offset: 1 x 0
+ __________
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |.## 8#1.|
+ |.## 3#8.|
+ |.## #c.|
+ |.## ##.|
+ |.## #c.|
+ |.## 3#9.|
+ |.a#3 3b#3.|
+ ->|.29###a4 .|<-
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ ----------
+
+Char 0x03c6 'φ'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 10 x 11
+ Advance: 12
+ Offset: 1 x -3
+ ____________
+ |............|
+ |............|
+ |............|
+ |............|
+ |............|
+ |............|
+ |............|
+ |. 29#1a#b4 .|
+ |.2#c38#36#3.|
+ |.a#4 c# 1#a.|
+ |.## ## ##.|
+ |.## ## 1##.|
+ |.a#5 ## 6#a.|
+ |.3##4##4##3.|
+ ->|. 29c##c92 .|<-
+ |. ## .|
+ |. ## .|
+ |. ## .|
+ |............|
+ ------------
+
+Char 0x03c7 'χ'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 8 x 11
+ Advance: 9
+ Offset: 0 x -3
+ _________
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |##9 6#a.|
+ | 8#71##2.|
+ | 1##8#9 .|
+ | a###2 .|
+ | 5##8 .|
+ | 2##2 .|
+ | 9##5 .|
+ ->| 2###a .|<-
+ | 9#8##1 .|
+ |3## 7#7 .|
+ |a#6 9##.|
+ |.........|
+ ---------
+
+Char 0x03c9 'ω'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 10 x 8
+ Advance: 12
+ Offset: 1 x 0
+ ____________
+ |............|
+ |............|
+ |............|
+ |............|
+ |............|
+ |............|
+ |............|
+ |.2#7 7#2.|
+ |.8#4 4#7.|
+ |.b#1 1#b.|
+ |.## ## ##.|
+ |.## ## ##.|
+ |.b# 1##11#b.|
+ |.7#55cc55#7.|
+ ->|. 9#c44c#9 .|<-
+ |............|
+ |............|
+ |............|
+ |............|
+ ------------
+
+Char 0x03cc 'ό'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 8 x 12
+ Advance: 10
+ Offset: 1 x 0
+ __________
+ |..........|
+ |..........|
+ |..........|
+ |. 4#7 .|
+ |. 1c9 .|
+ |. 9a .|
+ |. .|
+ |. 3a##a3 .|
+ |.3#a11a#3.|
+ |.a#2 2#a.|
+ |.## ##.|
+ |.## ##.|
+ |.a#2 2#a.|
+ |.3#a11a#3.|
+ ->|. 3a##a3 .|<-
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ ----------
+
+Char 0x03cd 'ύ'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 8 x 12
+ Advance: 10
+ Offset: 1 x 0
+ __________
+ |..........|
+ |..........|
+ |..........|
+ |. 4#7 .|
+ |. 1c9 .|
+ |. 9a .|
+ |. .|
+ |.## 8#1.|
+ |.## 3#8.|
+ |.## #c.|
+ |.## ##.|
+ |.## #c.|
+ |.## 3#9.|
+ |.a#3 3b#3.|
+ ->|.29###a4 .|<-
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ ----------
+
+Char 0x03ce 'ώ'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 10 x 12
+ Advance: 12
+ Offset: 1 x 0
+ ____________
+ |............|
+ |............|
+ |............|
+ |. 4#7 .|
+ |. 1c9 .|
+ |. 9a .|
+ |. .|
+ |.2#7 7#2.|
+ |.8#4 4#7.|
+ |.b#1 1#b.|
+ |.## ## ##.|
+ |.## ## ##.|
+ |.b# 1##11#b.|
+ |.7#55cc55#7.|
+ ->|. 9#c44c#9 .|<-
+ |............|
+ |............|
+ |............|
+ |............|
+ ------------
+
+Char 0x0401 'Ё'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 7 x 14
+ Advance: 9
+ Offset: 1 x 0
+ _________
+ |.........|
+ |. ## ## .|
+ |. ## ## .|
+ |. .|
+ |. .|
+ |.#######.|
+ |.## .|
+ |.## .|
+ |.## .|
+ |.#######.|
+ |.## .|
+ |.## .|
+ |.## .|
+ |.## .|
+ ->|.#######.|<-
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ ---------
+
+Char 0x0404 'Є'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 9 x 10
+ Advance: 10
+ Offset: 1 x 0
+ __________
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |. 39c##c9|
+ |. 7#71 14a|
+ |.5#8 |
+ |.a#1 |
+ |.####### |
+ |.##1 |
+ |.a#5 |
+ |.5#b |
+ |. 7#92 14a|
+ ->|. 39c##b8|<-
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ ----------
+
+Char 0x0406 'І'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 2 x 10
+ Advance: 4
+ Offset: 1 x 0
+ ____
+ |....|
+ |....|
+ |....|
+ |....|
+ |....|
+ |.##.|
+ |.##.|
+ |.##.|
+ |.##.|
+ |.##.|
+ |.##.|
+ |.##.|
+ |.##.|
+ |.##.|
+ ->|.##.|<-
+ |....|
+ |....|
+ |....|
+ |....|
+ ----
+
+Char 0x0408 'Ј'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 4 x 13
+ Advance: 4
+ Offset: -1 x -3
+ ____
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ | ##.|
+ | ##.|
+ | ##.|
+ | ##.|
+ | ##.|
+ | ##.|
+ | ##.|
+ | ##.|
+ | ##.|
+ ->| ##.|<-
+ | ##.|
+ | 7#9.|
+ |#c8 .|
+ |.....|
+ ----
+
+Char 0x0410 'А'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 11 x 10
+ Advance: 11
+ Offset: 0 x 0
+ ___________
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ | 1###1 |
+ | 6###6 |
+ | c#4#b |
+ | 3#a a#3 |
+ | 9#4 4#9 |
+ | 1#c c#1 |
+ | 6#######6 |
+ | c#1 1#c |
+ |3#a a#3|
+ ->|9#4 4#9|<-
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ -----------
+
+Char 0x0411 'Б'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 8 x 10
+ Advance: 11
+ Offset: 1 x 0
+ ___________
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ |.####### ..|
+ |.## ..|
+ |.## ..|
+ |.## ..|
+ |.#####b6 ..|
+ |.## 7#8..|
+ |.## ##..|
+ |.## ##..|
+ |.## 7#8..|
+ ->|.#####c7 ..|<-
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ -----------
+
+Char 0x0412 'В'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 8 x 10
+ Advance: 10
+ Offset: 1 x 0
+ __________
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |.#####c81.|
+ |.## 6#a.|
+ |.## ##.|
+ |.## 6#a.|
+ |.#######2.|
+ |.## 7#9.|
+ |.## ##.|
+ |.## ##.|
+ |.## 7#9.|
+ ->|.#####c81.|<-
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ ----------
+
+Char 0x0413 'Г'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 7 x 10
+ Advance: 9
+ Offset: 1 x 0
+ _________
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.#######.|
+ |.## .|
+ |.## .|
+ |.## .|
+ |.## .|
+ |.## .|
+ |.## .|
+ |.## .|
+ |.## .|
+ ->|.## .|<-
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ ---------
+
+Char 0x0414 'Д'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 11 x 12
+ Advance: 12
+ Offset: 1 x -2
+ ____________
+ |............|
+ |............|
+ |............|
+ |............|
+ |............|
+ |. ######## |
+ |. ## ## |
+ |. ## ## |
+ |. ## ## |
+ |. ## ## |
+ |. #c ## |
+ |. 1#b ## |
+ |. 2#9 ## |
+ |. 9#7 ## |
+ ->|.###########|<-
+ |.## ##|
+ |.## ##|
+ |............|
+ |............|
+ ------------
+
+Char 0x0415 'Е'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 7 x 10
+ Advance: 9
+ Offset: 1 x 0
+ _________
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.#######.|
+ |.## .|
+ |.## .|
+ |.## .|
+ |.#######.|
+ |.## .|
+ |.## .|
+ |.## .|
+ |.## .|
+ ->|.#######.|<-
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ ---------
+
+Char 0x0416 'Ж'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 18 x 10
+ Advance: 17
+ Offset: -1 x 0
+ _________________
+ |..................|
+ |..................|
+ |..................|
+ |..................|
+ |..................|
+ |6##7 ## 7##6|
+ | 4##9 ## 9##4 |
+ | 3##a ## a##3 |
+ | 2c#b1##1b#c2 |
+ | b##c##c##b |
+ | 8#ba####ab#8 |
+ | 5##2 9##8 2##5 |
+ | 2##5 ## 5##2 |
+ | b#8 ## 8#b |
+ ->|8#b ## b#8|<-
+ |..................|
+ |..................|
+ |..................|
+ |..................|
+ -----------------
+
+Char 0x0417 'З'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 8 x 10
+ Advance: 10
+ Offset: 1 x 0
+ __________
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |.39c##b7 .|
+ |.a41 7#a.|
+ |. ##.|
+ |. 16#8.|
+ |. ####b1.|
+ |. 19#9.|
+ |. ##.|
+ |. #c.|
+ |.a41 19#7.|
+ ->|.3a###a5 .|<-
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ ----------
+
+Char 0x0418 'И'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 9 x 10
+ Advance: 12
+ Offset: 1 x 0
+ ____________
+ |............|
+ |............|
+ |............|
+ |............|
+ |............|
+ |.## b##..|
+ |.## 6###..|
+ |.## 1####..|
+ |.## a#8##..|
+ |.## 4#c1##..|
+ |.## c#5 ##..|
+ |.##8#a ##..|
+ |.####1 ##..|
+ |.###6 ##..|
+ ->|.##b ##..|<-
+ |............|
+ |............|
+ |............|
+ |............|
+ ------------
+
+Char 0x0419 'Й'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 9 x 14
+ Advance: 12
+ Offset: 1 x 0
+ ____________
+ |............|
+ |. c5 5c ..|
+ |. 3b#b3 ..|
+ |. ..|
+ |. ..|
+ |.## b##..|
+ |.## 6###..|
+ |.## 1####..|
+ |.## a#8##..|
+ |.## 4#c1##..|
+ |.## c#5 ##..|
+ |.##8#a ##..|
+ |.####1 ##..|
+ |.###6 ##..|
+ ->|.##b ##..|<-
+ |............|
+ |............|
+ |............|
+ |............|
+ ------------
+
+Char 0x041a 'К'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 10 x 10
+ Advance: 11
+ Offset: 1 x 0
+ ___________
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ |.## 7##6|
+ |.## 9##4 |
+ |.## a##3 |
+ |.##1b#c2 |
+ |.##c##a |
+ |.###ac#7 |
+ |.##9 3##4 |
+ |.## 6##1 |
+ |.## 9#b |
+ ->|.## b#8|<-
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ -----------
+
+Char 0x041b 'Л'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 9 x 10
+ Advance: 12
+ Offset: 1 x 0
+ ____________
+ |............|
+ |............|
+ |............|
+ |............|
+ |............|
+ |. #######..|
+ |. ## ##..|
+ |. ## ##..|
+ |. ## ##..|
+ |. #c ##..|
+ |. #b ##..|
+ |. 2#9 ##..|
+ |. 4#7 ##..|
+ |.2b#1 ##..|
+ ->|.c81 ##..|<-
+ |............|
+ |............|
+ |............|
+ |............|
+ ------------
+
+Char 0x041c 'М'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 11 x 10
+ Advance: 13
+ Offset: 1 x 0
+ _____________
+ |.............|
+ |.............|
+ |.............|
+ |.............|
+ |.............|
+ |.###2 2###.|
+ |.###8 9###.|
+ |.##c#1 1#c##.|
+ |.##6#8 8#6##.|
+ |.## c#2#c ##.|
+ |.## 6#c#6 ##.|
+ |.## c#c ##.|
+ |.## 5#5 ##.|
+ |.## ##.|
+ ->|.## ##.|<-
+ |.............|
+ |.............|
+ |.............|
+ |.............|
+ -------------
+
+Char 0x041d 'Н'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 9 x 10
+ Advance: 11
+ Offset: 1 x 0
+ ___________
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ |.## ##.|
+ |.## ##.|
+ |.## ##.|
+ |.## ##.|
+ |.#########.|
+ |.## ##.|
+ |.## ##.|
+ |.## ##.|
+ |.## ##.|
+ ->|.## ##.|<-
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ -----------
+
+Char 0x041e 'О'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 10 x 10
+ Advance: 12
+ Offset: 1 x 0
+ ____________
+ |............|
+ |............|
+ |............|
+ |............|
+ |............|
+ |. 6b##b6 .|
+ |. a#6 6#a .|
+ |.6#7 7#6.|
+ |.b#2 2#b.|
+ |.## ##.|
+ |.## ##.|
+ |.b#2 2#b.|
+ |.6#7 7#6.|
+ |. a#5 6#a .|
+ ->|. 6b##b6 .|<-
+ |............|
+ |............|
+ |............|
+ |............|
+ ------------
+
+Char 0x041f 'П'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 9 x 10
+ Advance: 12
+ Offset: 1 x 0
+ ____________
+ |............|
+ |............|
+ |............|
+ |............|
+ |............|
+ |.#########..|
+ |.## ##..|
+ |.## ##..|
+ |.## ##..|
+ |.## ##..|
+ |.## ##..|
+ |.## ##..|
+ |.## ##..|
+ |.## ##..|
+ ->|.## ##..|<-
+ |............|
+ |............|
+ |............|
+ |............|
+ ------------
+
+Char 0x0420 'Р'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 8 x 10
+ Advance: 10
+ Offset: 1 x 0
+ __________
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |.#####b6 .|
+ |.## 19#6.|
+ |.## 1#c.|
+ |.## ##.|
+ |.## 2#c.|
+ |.## 19#6.|
+ |.#####b6 .|
+ |.## .|
+ |.## .|
+ ->|.## .|<-
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ ----------
+
+Char 0x0421 'С'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 9 x 10
+ Advance: 11
+ Offset: 1 x 0
+ ___________
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ |. 39c##c9.|
+ |. 7#82 14a.|
+ |.5#9 .|
+ |.a#2 .|
+ |.## .|
+ |.## .|
+ |.a#2 .|
+ |.5#9 .|
+ |. 7#82 14a.|
+ ->|. 39c##ca.|<-
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ -----------
+
+Char 0x0422 'Т'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 8 x 10
+ Advance: 10
+ Offset: 1 x 0
+ __________
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |.########.|
+ |. ## .|
+ |. ## .|
+ |. ## .|
+ |. ## .|
+ |. ## .|
+ |. ## .|
+ |. ## .|
+ |. ## .|
+ ->|. ## .|<-
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ ----------
+
+Char 0x0423 'У'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 10 x 10
+ Advance: 11
+ Offset: 0 x 0
+ ___________
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ |a#6 6#a.|
+ |3#c c#4.|
+ | a#6 5#b .|
+ | 4#c b#5 .|
+ | b#53#c .|
+ | 4#ca#6 .|
+ | b### .|
+ | 5##7 .|
+ | 3##1 .|
+ ->| ##a3 .|<-
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ -----------
+
+Char 0x0424 'Ф'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 14 x 10
+ Advance: 14
+ Offset: 1 x 0
+ ______________
+ |...............|
+ |...............|
+ |...............|
+ |...............|
+ |...............|
+ |. ## |
+ |. 48b####b84 |
+ |.1b#73 ## 37#b1|
+ |.9#5 ## 5#9|
+ |.## ## ##|
+ |.## ## ##|
+ |.9#5 ## 5#9|
+ |.1b#72 ## 27#b1|
+ |. 48b####b84 |
+ ->|. ## |<-
+ |...............|
+ |...............|
+ |...............|
+ |...............|
+ --------------
+
+Char 0x0425 'Х'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 10 x 10
+ Advance: 10
+ Offset: 0 x 0
+ __________
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |9#a 9#9|
+ | c#3 3#c |
+ | 3#b b#3 |
+ | 7#55#7 |
+ | bccb |
+ | 1cbbc1 |
+ | 9#33#9 |
+ | 4#a a#4 |
+ |1c#2 2#c1|
+ ->|9#9 9#9|<-
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ ----------
+
+Char 0x0426 'Ц'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 11 x 12
+ Advance: 13
+ Offset: 1 x -2
+ _____________
+ |.............|
+ |.............|
+ |.............|
+ |.............|
+ |.............|
+ |.## ## .|
+ |.## ## .|
+ |.## ## .|
+ |.## ## .|
+ |.## ## .|
+ |.## ## .|
+ |.## ## .|
+ |.## ## .|
+ |.## ## .|
+ ->|.###########.|<-
+ |. ##.|
+ |. ##.|
+ |.............|
+ |.............|
+ -------------
+
+Char 0x0427 'Ч'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 9 x 10
+ Advance: 11
+ Offset: 1 x 0
+ ___________
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ |.## ##.|
+ |.## ##.|
+ |.## ##.|
+ |.b#5 ##.|
+ |.2a#######.|
+ |. ##.|
+ |. ##.|
+ |. ##.|
+ |. ##.|
+ ->|. ##.|<-
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ -----------
+
+Char 0x0428 'Ш'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 16 x 10
+ Advance: 17
+ Offset: 1 x 0
+ _________________
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ |.## ## ##|
+ |.## ## ##|
+ |.## ## ##|
+ |.## ## ##|
+ |.## ## ##|
+ |.## ## ##|
+ |.## ## ##|
+ |.## ## ##|
+ |.## ## ##|
+ ->|.################|<-
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x0429 'Щ'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 18 x 12
+ Advance: 19
+ Offset: 1 x -2
+ ___________________
+ |...................|
+ |...................|
+ |...................|
+ |...................|
+ |...................|
+ |.## ## ## |
+ |.## ## ## |
+ |.## ## ## |
+ |.## ## ## |
+ |.## ## ## |
+ |.## ## ## |
+ |.## ## ## |
+ |.## ## ## |
+ |.## ## ## |
+ ->|.##################|<-
+ |. ##|
+ |. ##|
+ |...................|
+ |...................|
+ -------------------
+
+Char 0x042a 'Ъ'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 13 x 11
+ Advance: 13
+ Offset: 0 x 0
+ _____________
+ |.............|
+ |.............|
+ |.............|
+ |.............|
+ | 222221 |
+ |4#####9 |
+ |3aaa##9 |
+ | ##9 |
+ | ##a443 |
+ | #######5 |
+ | ##c99###2|
+ | ##9 4##5|
+ | ##9 4##5|
+ | ###bb###1|
+ ->| #####c92 |<-
+ |.............|
+ |.............|
+ |.............|
+ |.............|
+ -------------
+
+Char 0x042b 'Ы'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 11 x 10
+ Advance: 15
+ Offset: 1 x 0
+ _______________
+ |...............|
+ |...............|
+ |...............|
+ |...............|
+ |...............|
+ |.## ##...|
+ |.## ##...|
+ |.## ##...|
+ |.## ##...|
+ |.#####c7 ##...|
+ |.## 7#9 ##...|
+ |.## ## ##...|
+ |.## ## ##...|
+ |.## 7#9 ##...|
+ ->|.#####c7 ##...|<-
+ |...............|
+ |...............|
+ |...............|
+ |...............|
+ ---------------
+
+Char 0x042c 'Ь'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 8 x 10
+ Advance: 11
+ Offset: 1 x 0
+ ___________
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ |.## ..|
+ |.## ..|
+ |.## ..|
+ |.## ..|
+ |.#####c7 ..|
+ |.## 7#9..|
+ |.## ##..|
+ |.## ##..|
+ |.## 7#9..|
+ ->|.#####c7 ..|<-
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ -----------
+
+Char 0x042d 'Э'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 10 x 12
+ Advance: 10
+ Offset: 0 x -1
+ __________
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ | 2443 |
+ | c####c5 |
+ |1#a78c##6 |
+ | 2 1c##1|
+ | 11116##5|
+ | b######7|
+ | acccc##7|
+ | 6##5|
+ | 4 2c## |
+ |1#caa###4 |
+ ->| 9####a3 |<-
+ | 22 |
+ |..........|
+ |..........|
+ |..........|
+ ----------
+
+Char 0x042e 'Ю'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 14 x 10
+ Advance: 16
+ Offset: 1 x 0
+ ________________
+ |................|
+ |................|
+ |................|
+ |................|
+ |................|
+ |.## 7b##b6 .|
+ |.## b#6 6#a .|
+ |.## 7#7 7#6.|
+ |.## c#2 2#b.|
+ |.###### ##.|
+ |.## c# ##.|
+ |.## 9#2 2#b.|
+ |.## 3#7 7#6.|
+ |.## 7#5 6#a .|
+ ->|.## 5b##b6 .|<-
+ |................|
+ |................|
+ |................|
+ |................|
+ ----------------
+
+Char 0x042f 'Я'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 8 x 10
+ Advance: 11
+ Offset: 1 x 0
+ ___________
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ |. 7c#####..|
+ |.8#7 ##..|
+ |.## ##..|
+ |.c# ##..|
+ |.5#7 ##..|
+ |. 4######..|
+ |. 4#c ##..|
+ |. a#6 ##..|
+ |.3#c ##..|
+ ->|.a#6 ##..|<-
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ -----------
+
+Char 0x0430 'а'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 7 x 8
+ Advance: 9
+ Offset: 1 x 0
+ _________
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |. 6##c8 .|
+ |. 62 5#8.|
+ |. #c.|
+ |.29#####.|
+ |.b#5 ##.|
+ |.## 2##.|
+ |.b#4 9##.|
+ ->|.2b#c5##.|<-
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ ---------
+
+Char 0x0431 'б'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 8 x 11
+ Advance: 10
+ Offset: 1 x 0
+ __________
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |. 38bcc6 .|
+ |.2#b2 .|
+ |.9#3 .|
+ |.c#8c#b4 .|
+ |.##a11a#4.|
+ |.##2 2#a.|
+ |.## ##.|
+ |.## ##.|
+ |.a#2 2#a.|
+ |.4#a11a#3.|
+ ->|. 4a##a3 .|<-
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ ----------
+
+Char 0x0432 'в'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 7 x 8
+ Advance: 9
+ Offset: 1 x 0
+ _________
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.#####a3.|
+ |.## 3#c.|
+ |.## 3#c.|
+ |.######5.|
+ |.## 5#a.|
+ |.## ##.|
+ |.## 5#b.|
+ ->|.#####a2.|<-
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ ---------
+
+Char 0x0433 'г'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 6 x 8
+ Advance: 7
+ Offset: 1 x 0
+ _______
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.######|
+ |.## |
+ |.## |
+ |.## |
+ |.## |
+ |.## |
+ |.## |
+ ->|.## |<-
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ -------
+
+Char 0x0434 'д'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 10 x 10
+ Advance: 11
+ Offset: 1 x -2
+ ___________
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ |. ####### |
+ |. ## ## |
+ |. ## ## |
+ |. ## ## |
+ |. 1#b ## |
+ |. 4#a ## |
+ |.1b#7 ## |
+ ->|.##########|<-
+ |.## ##|
+ |.## ##|
+ |...........|
+ |...........|
+ -----------
+
+Char 0x0435 'е'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 8 x 8
+ Advance: 10
+ Offset: 1 x 0
+ __________
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |. 3a##b4 .|
+ |.3#a1 8#5.|
+ |.a#2 #b.|
+ |.########.|
+ |.## .|
+ |.a#4 .|
+ |.3#b2 15a.|
+ ->|. 29c#c93.|<-
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ ----------
+
+Char 0x0436 'ж'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 14 x 8
+ Advance: 14
+ Offset: 0 x 0
+ ______________
+ |..............|
+ |..............|
+ |..............|
+ |..............|
+ |..............|
+ |..............|
+ |..............|
+ |6##7 ## 7##6|
+ | 4##9 ## 9##4 |
+ | 3##a##a##3 |
+ | 8######8 |
+ | 4##b##b##4 |
+ | 1##6 ## 6##1 |
+ | b#9 ## 9#b |
+ ->|8#b ## b#8|<-
+ |..............|
+ |..............|
+ |..............|
+ |..............|
+ --------------
+
+Char 0x0437 'з'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 7 x 8
+ Advance: 8
+ Offset: 1 x 0
+ ________
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ |.3a##ca3|
+ |.92 4#c|
+ |. 5#c|
+ |. ####c3|
+ |. 17#8|
+ |. ##|
+ |.a4 7#b|
+ ->|.4a##c81|<-
+ |........|
+ |........|
+ |........|
+ |........|
+ --------
+
+Char 0x0438 'и'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 7 x 8
+ Advance: 10
+ Offset: 1 x 0
+ __________
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |.## 5##..|
+ |.## 1###..|
+ |.## 9###..|
+ |.##4####..|
+ |.##c#5##..|
+ |.###a ##..|
+ |.###1 ##..|
+ ->|.##6 ##..|<-
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ ----------
+
+Char 0x0439 'й'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 7 x 11
+ Advance: 10
+ Offset: 1 x 0
+ __________
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |. c4 4c ..|
+ |. 4b#b3 ..|
+ |. ..|
+ |.## 5##..|
+ |.## 1###..|
+ |.## 9###..|
+ |.##4####..|
+ |.##c#5##..|
+ |.###a ##..|
+ |.###1 ##..|
+ ->|.##6 ##..|<-
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ ----------
+
+Char 0x043a 'к'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 8 x 8
+ Advance: 10
+ Offset: 1 x 0
+ __________
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |.## 7##6.|
+ |.## 9##4 .|
+ |.##a##3 .|
+ |.####8 .|
+ |.##c##4 .|
+ |.##15##2 .|
+ |.## 9#b .|
+ ->|.## b#8.|<-
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ ----------
+
+Char 0x043b 'л'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 9 x 8
+ Advance: 10
+ Offset: 1 x 0
+ __________
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |. #######|
+ |. ## ##|
+ |. ## ##|
+ |. ## ##|
+ |. 1#b ##|
+ |. 2#9 ##|
+ |.2a#2 ##|
+ ->|.#a3 ##|<-
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ ----------
+
+Char 0x043c 'м'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 9 x 8
+ Advance: 11
+ Offset: 1 x 0
+ ___________
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ |.##b b##.|
+ |.###4 4###.|
+ |.###a a###.|
+ |.####5####.|
+ |.##7###7##.|
+ |.##1###1##.|
+ |.## 9#9 ##.|
+ ->|.## ##.|<-
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ -----------
+
+Char 0x043d 'н'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 7 x 8
+ Advance: 10
+ Offset: 1 x 0
+ __________
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |.## ##..|
+ |.## ##..|
+ |.## ##..|
+ |.#######..|
+ |.## ##..|
+ |.## ##..|
+ |.## ##..|
+ ->|.## ##..|<-
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ ----------
+
+Char 0x043e 'о'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 8 x 8
+ Advance: 10
+ Offset: 1 x 0
+ __________
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |. 3a##a3 .|
+ |.3#a11a#3.|
+ |.a#2 2#a.|
+ |.## ##.|
+ |.## ##.|
+ |.a#2 2#a.|
+ |.3#a11a#3.|
+ ->|. 3a##a3 .|<-
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ ----------
+
+Char 0x043f 'п'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 7 x 8
+ Advance: 10
+ Offset: 1 x 0
+ __________
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |.#######..|
+ |.## ##..|
+ |.## ##..|
+ |.## ##..|
+ |.## ##..|
+ |.## ##..|
+ |.## ##..|
+ ->|.## ##..|<-
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ ----------
+
+Char 0x0440 'р'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 8 x 11
+ Advance: 10
+ Offset: 1 x -3
+ __________
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |.##5b#c5 .|
+ |.##a11a#4.|
+ |.##2 2#a.|
+ |.## ##.|
+ |.## ##.|
+ |.##2 2#a.|
+ |.##a11a#4.|
+ ->|.##5b#c5 .|<-
+ |.## .|
+ |.## .|
+ |.## .|
+ |..........|
+ ----------
+
+Char 0x0441 'с'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 7 x 8
+ Advance: 9
+ Offset: 1 x 0
+ _________
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |. 29c#b4.|
+ |.2#c3 29.|
+ |.a#3 .|
+ |.## .|
+ |.## .|
+ |.a#3 .|
+ |.3#c3 28.|
+ ->|. 29c#b4.|<-
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ ---------
+
+Char 0x0442 'т'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 8 x 8
+ Advance: 8
+ Offset: 0 x 0
+ ________
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ |########|
+ | ## |
+ | ## |
+ | ## |
+ | ## |
+ | ## |
+ | ## |
+ ->| ## |<-
+ |........|
+ |........|
+ |........|
+ |........|
+ --------
+
+Char 0x0443 'у'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 9 x 11
+ Advance: 9
+ Offset: 0 x -3
+ _________
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |b#4 3#b|
+ |5#9 8#6|
+ | c# c#1|
+ | 7#5 2#a |
+ | 1#a 7#5 |
+ | 9#1b# |
+ | 4#8#9 |
+ ->| c##4 |<-
+ | 6#c |
+ | 9#7 |
+ | a#c7 |
+ |.........|
+ ---------
+
+Char 0x0444 'ф'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 12 x 14
+ Advance: 14
+ Offset: 1 x -3
+ ______________
+ |..............|
+ |..............|
+ |..............|
+ |..............|
+ |. ## .|
+ |. ## .|
+ |. ## .|
+ |. 5c#6##6#c5 .|
+ |.4#a 3##3 a#4.|
+ |.a#2 ## 2#a.|
+ |.## ## ##.|
+ |.## ## ##.|
+ |.a#2 ## 2#a.|
+ |.4#a 3##3 a#4.|
+ ->|. 5c#6##6#c5 .|<-
+ |. ## .|
+ |. ## .|
+ |. ## .|
+ |..............|
+ --------------
+
+Char 0x0445 'х'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 9 x 8
+ Advance: 9
+ Offset: 0 x 0
+ _________
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |8#b b#8|
+ | b#5 5#b |
+ | 2#c2c#1 |
+ | 4#c#4 |
+ | 6#c#6 |
+ | 2#c1c#2 |
+ | b#5 4#b |
+ ->|8#a a#8|<-
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ ---------
+
+Char 0x0446 'ц'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 8 x 10
+ Advance: 10
+ Offset: 1 x -2
+ __________
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |.## ## .|
+ |.## ## .|
+ |.## ## .|
+ |.## ## .|
+ |.## ## .|
+ |.## ## .|
+ |.## ## .|
+ ->|.########.|<-
+ |. ##.|
+ |. ##.|
+ |..........|
+ |..........|
+ ----------
+
+Char 0x0447 'ч'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 7 x 8
+ Advance: 10
+ Offset: 1 x 0
+ __________
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |.## ##..|
+ |.## ##..|
+ |.## ##..|
+ |.b#4 ##..|
+ |.3c#####..|
+ |. ##..|
+ |. ##..|
+ ->|. ##..|<-
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ ----------
+
+Char 0x0448 'ш'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 12 x 8
+ Advance: 15
+ Offset: 1 x 0
+ _______________
+ |...............|
+ |...............|
+ |...............|
+ |...............|
+ |...............|
+ |...............|
+ |...............|
+ |.## ## ##..|
+ |.## ## ##..|
+ |.## ## ##..|
+ |.## ## ##..|
+ |.## ## ##..|
+ |.## ## ##..|
+ |.## ## ##..|
+ ->|.############..|<-
+ |...............|
+ |...............|
+ |...............|
+ |...............|
+ ---------------
+
+Char 0x0449 'щ'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 13 x 10
+ Advance: 15
+ Offset: 1 x -2
+ _______________
+ |...............|
+ |...............|
+ |...............|
+ |...............|
+ |...............|
+ |...............|
+ |...............|
+ |.## ## ## .|
+ |.## ## ## .|
+ |.## ## ## .|
+ |.## ## ## .|
+ |.## ## ## .|
+ |.## ## ## .|
+ |.## ## ## .|
+ ->|.#############.|<-
+ |. ##.|
+ |. ##.|
+ |...............|
+ |...............|
+ ---------------
+
+Char 0x044a 'ъ'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 10 x 8
+ Advance: 11
+ Offset: 0 x 0
+ ___________
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ |699993 .|
+ |8cc##4 .|
+ | 1##4 .|
+ | 1##ba96 .|
+ | 1##ba##9.|
+ | 1##4 5#c.|
+ | 1##97b#a.|
+ ->| 1#####a2.|<-
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ -----------
+
+Char 0x044b 'ы'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 10 x 8
+ Advance: 13
+ Offset: 1 x 0
+ _____________
+ |.............|
+ |.............|
+ |.............|
+ |.............|
+ |.............|
+ |.............|
+ |.............|
+ |.## ##..|
+ |.## ##..|
+ |.## ##..|
+ |.####c91 ##..|
+ |.## 5#a ##..|
+ |.## ## ##..|
+ |.## 5#b ##..|
+ ->|.#####a2 ##..|<-
+ |.............|
+ |.............|
+ |.............|
+ |.............|
+ -------------
+
+Char 0x044c 'ь'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 7 x 8
+ Advance: 9
+ Offset: 1 x 0
+ _________
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.## .|
+ |.## .|
+ |.## .|
+ |.####c91.|
+ |.## 5#a.|
+ |.## ##.|
+ |.## 5#b.|
+ ->|.#####a2.|<-
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ ---------
+
+Char 0x044d 'э'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 7 x 9
+ Advance: 8
+ Offset: 1 x -1
+ ________
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ |.7aba5 |
+ |.#####a |
+ |.3 7##5|
+ |.1777##8|
+ |.2bbb##9|
+ |. 3##7|
+ |.c88###1|
+ ->|.c###a2 |<-
+ |. 121 |
+ |........|
+ |........|
+ |........|
+ --------
+
+Char 0x044e 'ю'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 11 x 8
+ Advance: 14
+ Offset: 1 x 0
+ ______________
+ |..............|
+ |..............|
+ |..............|
+ |..............|
+ |..............|
+ |..............|
+ |..............|
+ |.## 4a##a3 ..|
+ |.## 4#a11a#3..|
+ |.## b#2 2#a..|
+ |.##c## ##..|
+ |.##a## ##..|
+ |.## b#2 2#a..|
+ |.## 4#a11a#3..|
+ ->|.## 4b##a3 ..|<-
+ |..............|
+ |..............|
+ |..............|
+ |..............|
+ --------------
+
+Char 0x044f 'я'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 8 x 8
+ Advance: 9
+ Offset: 0 x 0
+ _________
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ | 3a#####.|
+ | c#5 ##.|
+ | ## ##.|
+ | 8#5 ##.|
+ | b#####.|
+ | 3##3 ##.|
+ | c#7 ##.|
+ ->|8#b ##.|<-
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ ---------
+
+Char 0x0451 'ё'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 8 x 11
+ Advance: 10
+ Offset: 1 x 0
+ __________
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |. ## ## .|
+ |. ## ## .|
+ |. .|
+ |. 3a##b4 .|
+ |.3#a1 8#5.|
+ |.a#2 #b.|
+ |.########.|
+ |.## .|
+ |.a#4 .|
+ |.3#b2 15a.|
+ ->|. 29c#c93.|<-
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ ----------
+
+Char 0x0454 'є'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 7 x 8
+ Advance: 9
+ Offset: 1 x 0
+ _________
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |. 29c#b4.|
+ |.2#b2 29.|
+ |.a#2 .|
+ |.##### .|
+ |.##1 .|
+ |.a#6 .|
+ |.3##3 18.|
+ ->|. 29c#b4.|<-
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ ---------
+
+Char 0x0456 'і'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 2 x 11
+ Advance: 4
+ Offset: 1 x 0
+ ____
+ |....|
+ |....|
+ |....|
+ |....|
+ |.##.|
+ |.##.|
+ |. .|
+ |.##.|
+ |.##.|
+ |.##.|
+ |.##.|
+ |.##.|
+ |.##.|
+ |.##.|
+ ->|.##.|<-
+ |....|
+ |....|
+ |....|
+ |....|
+ ----
+
+Char 0x0457 'ї'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 6 x 11
+ Advance: 5
+ Offset: -1 x 0
+ _____
+ |......|
+ |......|
+ |......|
+ |......|
+ |## ##|
+ |## ##|
+ | |
+ | ## |
+ | ## |
+ | ## |
+ | ## |
+ | ## |
+ | ## |
+ | ## |
+ ->| ## |<-
+ |......|
+ |......|
+ |......|
+ |......|
+ -----
+
+Char 0x0458 'ј'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 4 x 14
+ Advance: 4
+ Offset: -1 x -3
+ ____
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ | ##.|
+ | ##.|
+ | .|
+ | ##.|
+ | ##.|
+ | ##.|
+ | ##.|
+ | ##.|
+ | ##.|
+ | ##.|
+ ->| ##.|<-
+ | ##.|
+ | 4#b.|
+ |##b2.|
+ |.....|
+ ----
+
+Char 0x0459 'љ'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 14 x 8
+ Advance: 14
+ Offset: 0 x 0
+ ______________
+ |..............|
+ |..............|
+ |..............|
+ |..............|
+ |..............|
+ |..............|
+ |..............|
+ | 6999998 |
+ | 9#####c |
+ | 9#a18#c |
+ | a#a 7##aa71 |
+ | b#9 7##ac#c |
+ | 2##7 7#c 2##2|
+ |4###1 7##7a## |
+ ->|5c92 7####b3 |<-
+ |..............|
+ |..............|
+ |..............|
+ |..............|
+ --------------
+
+Char 0x045a 'њ'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 12 x 8
+ Advance: 13
+ Offset: 1 x 0
+ _____________
+ |.............|
+ |.............|
+ |.............|
+ |.............|
+ |.............|
+ |.............|
+ |.............|
+ |.795 894 |
+ |.b#8 ##7 |
+ |.b#8 ##7 |
+ |.b#caa##ca95 |
+ |.b#caa##cb##6|
+ |.b#8 ##7 8#a|
+ |.b#8 ##a7c#8|
+ ->|.b#8 ####c81|<-
+ |.............|
+ |.............|
+ |.............|
+ |.............|
+ -------------
+
+Char 0x045b 'ћ'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 10 x 11
+ Advance: 10
+ Offset: 0 x 0
+ __________
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ | 488 |
+ | 7## |
+ | 7## |
+ |6b##9993 |
+ |8###ccc3 |
+ | 7## 353 |
+ | 7##9###7 |
+ | 7##b6b## |
+ | 7##2 4##2|
+ | 7## 3##2|
+ ->| 7## 3##2|<-
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ ----------
+
+Char 0x0493 'ғ'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 8 x 8
+ Advance: 8
+ Offset: 0 x 0
+ ________
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ | 4999992|
+ | 7##ccc3|
+ | 7#c |
+ |5b##881 |
+ |9#####3 |
+ | 7#c |
+ | 7#c |
+ ->| 7#c |<-
+ |........|
+ |........|
+ |........|
+ |........|
+ --------
+
+Char 0x04a3 'ң'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 10 x 10
+ Advance: 11
+ Offset: 1 x -2
+ ___________
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ |.795 894 |
+ |.b#8 ##7 |
+ |.b#8 ##7 |
+ |.b#caa##7 |
+ |.b#caa##7 |
+ |.b#8 ##7 |
+ |.b#8 ##a76|
+ ->|.b#8 #####|<-
+ |. 6##|
+ |. 6#c|
+ |...........|
+ |...........|
+ -----------
+
+Char 0x04af 'ү'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 9 x 11
+ Advance: 9
+ Offset: 0 x -3
+ _________
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |696 696|
+ |4##1 ##5|
+ | c#6 4#c |
+ | 6#c 9#7 |
+ | 1##4##1 |
+ | 8#c#9 |
+ | 2###3 |
+ ->| a#b |<-
+ | 5#6 |
+ | 5#6 |
+ | 5#6 |
+ |.........|
+ ---------
+
+Char 0x04b2 'Ҳ'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 11 x 14
+ Advance: 11
+ Offset: 0 x -3
+ ___________
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ |122 122 |
+ |2##8 b#b |
+ | 6##4 7##3 |
+ | a#c4##7 |
+ | 1####b |
+ | 5###2 |
+ | 9###6 |
+ | 4##b##2 |
+ | 1c#9 c#a |
+ | 9##1 3###7|
+ ->|5##4 8##7|<-
+ | 6#7|
+ | 6#7|
+ | 121|
+ |...........|
+ -----------
+
+Char 0x04b3 'ҳ'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 9 x 10
+ Advance: 9
+ Offset: 0 x -2
+ _________
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |3991 1994|
+ | a#a a#b |
+ | 1##a##1 |
+ | 4###4 |
+ | 3###3 |
+ | c#c#c1 |
+ | 9#b b#a5|
+ ->|5##2 2##b|<-
+ | 8#b|
+ | 8#a|
+ |.........|
+ |.........|
+ ---------
+
+Char 0x04b7 'ҷ'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 11 x 10
+ Advance: 10
+ Offset: 0 x -2
+ __________
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ | 993 399 |
+ |1##4 5## |
+ |1##5 5## |
+ | c##ab## |
+ | 29aac## |
+ | 5## |
+ | 5##773|
+ ->| 5####6|<-
+ | ##6|
+ | c#6|
+ |...........|
+ |...........|
+ ----------
+
+Char 0x04e3 'ӣ'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 7 x 10
+ Advance: 10
+ Offset: 1 x 0
+ __________
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |. #### ..|
+ |. ..|
+ |.## 5##..|
+ |.## 1###..|
+ |.## 9###..|
+ |.##4####..|
+ |.##c#5##..|
+ |.###a ##..|
+ |.###1 ##..|
+ ->|.##6 ##..|<-
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ ----------
+
+Char 0x04e8 'Ө'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 10 x 10
+ Advance: 12
+ Offset: 1 x 0
+ ____________
+ |............|
+ |............|
+ |............|
+ |............|
+ |............|
+ |. 6b##b6 .|
+ |. a#8118#a .|
+ |.6#a a#6.|
+ |.b#4 4#b.|
+ |.##1 1##.|
+ |.##########.|
+ |.b# #b.|
+ |.6#4 4#6.|
+ |. a#4 4#a .|
+ ->|. 6b##b6 .|<-
+ |............|
+ |............|
+ |............|
+ |............|
+ ------------
+
+Char 0x04e9 'ө'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 8 x 8
+ Advance: 10
+ Offset: 1 x 0
+ __________
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |. 3a##a3 .|
+ |.3#911a#3.|
+ |.a#2 2#a.|
+ |.########.|
+ |.## ##.|
+ |.a#3 3#a.|
+ |.3#a11b#3.|
+ ->|. 3a##a3 .|<-
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ ----------
+
+Char 0x04ef 'ӯ'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 9 x 13
+ Advance: 9
+ Offset: 0 x -3
+ _________
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ | #### |
+ | |
+ |b#4 3#b|
+ |5#9 8#6|
+ | c# c#1|
+ | 7#5 2#a |
+ | 1#a 7#5 |
+ | 9#1b# |
+ | 4#8#9 |
+ ->| c##4 |<-
+ | 6#c |
+ | 9#7 |
+ | a#c7 |
+ |.........|
+ ---------
+
+Char 0x05d1 'ב'
+ Font: #0 NachlieliCLM-Bold (14)
+ Bitmap: 7 x 8
+ Advance: 8
+ Offset: 1 x 0
+ ________
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ |.c##b4 |
+ |.667c#4 |
+ |. 2#a |
+ |. #b |
+ |. #b |
+ |. #b |
+ |.6666#c6|
+ ->|.c######|<-
+ |........|
+ |........|
+ |........|
+ |........|
+ --------
+
+Char 0x05d9 'י'
+ Font: #0 NachlieliCLM-Bold (14)
+ Bitmap: 2 x 4
+ Advance: 4
+ Offset: 1 x 4
+ ____
+ |....|
+ |....|
+ |....|
+ |....|
+ |....|
+ |....|
+ |....|
+ |.#b.|
+ |.#b.|
+ |.#b.|
+ |.#7.|
+ |....|
+ |....|
+ |....|
+ ->|....|<-
+ |....|
+ |....|
+ |....|
+ |....|
+ ----
+
+Char 0x05e2 'ע'
+ Font: #0 NachlieliCLM-Bold (14)
+ Bitmap: 8 x 9
+ Advance: 8
+ Offset: 0 x -1
+ ________
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ | 9#2 #b|
+ | 6#6 #b|
+ | 3#9 #b|
+ | ## #b|
+ | b#3 #b|
+ | 7#78#7|
+ | 49###a |
+ ->|4##b73 |<-
+ |13 |
+ |........|
+ |........|
+ |........|
+ --------
+
+Char 0x05e8 'ר'
+ Font: #0 NachlieliCLM-Bold (14)
+ Bitmap: 7 x 8
+ Advance: 8
+ Offset: 0 x 0
+ ________
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ |3###b4 .|
+ |1667c#4.|
+ | 2#a.|
+ | #b.|
+ | #b.|
+ | #b.|
+ | #b.|
+ ->| #b.|<-
+ |........|
+ |........|
+ |........|
+ |........|
+ --------
+
+Char 0x05ea 'ת'
+ Font: #0 NachlieliCLM-Bold (14)
+ Bitmap: 9 x 8
+ Advance: 10
+ Offset: 0 x 0
+ __________
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ | 8####b4 .|
+ | 4#c67c#4.|
+ | #b 2#a.|
+ | #b #b.|
+ | #b #b.|
+ | #b #b.|
+ |18#8 #b.|
+ ->|3#a1 #b.|<-
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ ----------
+
+Char 0x060c '،'
+ Font: #1 KacstBook (12)
+ Bitmap: 2 x 2
+ Advance: 2
+ Offset: 0 x 2
+ __
+ |..|
+ |..|
+ |..|
+ |..|
+ |..|
+ |..|
+ |..|
+ |..|
+ |..|
+ |..|
+ |..|
+ |1 |
+ |3a|
+ |..|
+ ->|..|<-
+ |..|
+ |..|
+ |..|
+ |..|
+ --
+
+Char 0x061f '؟'
+ Font: #1 KacstBook (12)
+ Bitmap: 4 x 7
+ Advance: 3
+ Offset: 0 x 2
+ ___
+ |....|
+ |....|
+ |....|
+ |....|
+ |....|
+ |....|
+ | 33 |
+ |5463|
+ |6871|
+ | a |
+ | 2 |
+ | |
+ | 65 |
+ |....|
+ ->|....|<-
+ |....|
+ |....|
+ |....|
+ |....|
+ ---
+
+Char 0x0621 'ء'
+ Font: #1 KacstBook (12)
+ Bitmap: 3 x 3
+ Advance: 3
+ Offset: 0 x 2
+ ___
+ |...|
+ |...|
+ |...|
+ |...|
+ |...|
+ |...|
+ |...|
+ |...|
+ |...|
+ |...|
+ | 3 |
+ |362|
+ |151|
+ |...|
+ ->|...|<-
+ |...|
+ |...|
+ |...|
+ |...|
+ ---
+
+Char 0x0622 'آ'
+ Font: #1 KacstBook (12)
+ Bitmap: 4 x 8
+ Advance: 3
+ Offset: 0 x 2
+ ___
+ |....|
+ |....|
+ |....|
+ |....|
+ |....|
+ | 11|
+ |574 |
+ |13 |
+ |25 |
+ | 6 |
+ | 7 |
+ | 6 |
+ | 4 |
+ |....|
+ ->|....|<-
+ |....|
+ |....|
+ |....|
+ |....|
+ ---
+
+Char 0x0623 'أ'
+ Font: #1 KacstBook (12)
+ Bitmap: 2 x 9
+ Advance: 2
+ Offset: 0 x 2
+ __
+ |..|
+ |..|
+ |..|
+ |..|
+ | 1|
+ |54|
+ |43|
+ |13|
+ |25|
+ | 6|
+ | 7|
+ | 6|
+ | 4|
+ |..|
+ ->|..|<-
+ |..|
+ |..|
+ |..|
+ |..|
+ --
+
+Char 0x0625 'إ'
+ Font: #1 KacstBook (12)
+ Bitmap: 2 x 9
+ Advance: 2
+ Offset: 0 x -1
+ __
+ |..|
+ |..|
+ |..|
+ |..|
+ |..|
+ |..|
+ |..|
+ |13|
+ |25|
+ | 6|
+ | 7|
+ | 6|
+ | 4|
+ |13|
+ ->|56|<-
+ |2 |
+ |..|
+ |..|
+ |..|
+ --
+
+Char 0x0627 'ا'
+ Font: #1 KacstBook (12)
+ Bitmap: 2 x 6
+ Advance: 2
+ Offset: 0 x 2
+ __
+ |..|
+ |..|
+ |..|
+ |..|
+ |..|
+ |..|
+ |..|
+ |13|
+ |25|
+ | 6|
+ | 7|
+ | 6|
+ | 4|
+ |..|
+ ->|..|<-
+ |..|
+ |..|
+ |..|
+ |..|
+ --
+
+Char 0x0628 'ب'
+ Font: #1 KacstBook (12)
+ Bitmap: 8 x 6
+ Advance: 8
+ Offset: 0 x -1
+ ________
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ |2 7|
+ |62 25|
+ |2bbaba7 |
+ | 1 |
+ ->| 1 |<-
+ | 9 |
+ |........|
+ |........|
+ |........|
+ --------
+
+Char 0x0629 'ة'
+ Font: #1 KacstBook (12)
+ Bitmap: 3 x 5
+ Advance: 3
+ Offset: 0 x 2
+ ___
+ |...|
+ |...|
+ |...|
+ |...|
+ |...|
+ |...|
+ |...|
+ |...|
+ |584|
+ | |
+ | 93|
+ |326|
+ |5b4|
+ |...|
+ ->|...|<-
+ |...|
+ |...|
+ |...|
+ |...|
+ ---
+
+Char 0x062a 'ت'
+ Font: #1 KacstBook (12)
+ Bitmap: 8 x 5
+ Advance: 8
+ Offset: 0 x 1
+ ________
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ | 98 |
+ |2 7|
+ |62 25|
+ |2bbaba7 |
+ | 1 |
+ ->|........|<-
+ |........|
+ |........|
+ |........|
+ |........|
+ --------
+
+Char 0x062b 'ث'
+ Font: #1 KacstBook (12)
+ Bitmap: 8 x 7
+ Advance: 8
+ Offset: 0 x 1
+ ________
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ | 1 |
+ | 43 |
+ | 98 |
+ |2 7|
+ |62 25|
+ |2bbaba7 |
+ | 1 |
+ ->|........|<-
+ |........|
+ |........|
+ |........|
+ |........|
+ --------
+
+Char 0x062c 'ج'
+ Font: #1 KacstBook (12)
+ Bitmap: 7 x 8
+ Advance: 7
+ Offset: 0 x -3
+ _______
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ | 78543 |
+ | 28962 |
+ | 52 |
+ |23 |
+ ->|5 a |<-
+ |52 |
+ |1b41 1|
+ | 17a961|
+ |.......|
+ -------
+
+Char 0x062d 'ح'
+ Font: #1 KacstBook (12)
+ Bitmap: 7 x 8
+ Advance: 7
+ Offset: 0 x -3
+ _______
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ | 78543 |
+ | 28962 |
+ | 52 |
+ |23 |
+ ->|5 |<-
+ |52 |
+ |1b41 11|
+ | 17a961|
+ |.......|
+ -------
+
+Char 0x062e 'خ'
+ Font: #1 KacstBook (12)
+ Bitmap: 7 x 11
+ Advance: 7
+ Offset: 0 x -3
+ _______
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ | 1 |
+ | 9 |
+ | |
+ | 78543 |
+ | 28962 |
+ | 52 |
+ |23 |
+ ->|5 |<-
+ |52 |
+ |1b41 11|
+ | 17a961|
+ |.......|
+ -------
+
+Char 0x062f 'د'
+ Font: #1 KacstBook (12)
+ Bitmap: 4 x 4
+ Advance: 4
+ Offset: 0 x 2
+ ____
+ |....|
+ |....|
+ |....|
+ |....|
+ |....|
+ |....|
+ |....|
+ |....|
+ |....|
+ | 24 |
+ | 9 |
+ | 24|
+ |6ba1|
+ |....|
+ ->|....|<-
+ |....|
+ |....|
+ |....|
+ |....|
+ ----
+
+Char 0x0630 'ذ'
+ Font: #1 KacstBook (12)
+ Bitmap: 4 x 7
+ Advance: 3
+ Offset: 0 x 2
+ ___
+ |....|
+ |....|
+ |....|
+ |....|
+ |....|
+ |....|
+ | 2 |
+ | 8 |
+ | |
+ | 24 |
+ | 9 |
+ | 24|
+ |6ba1|
+ |....|
+ ->|....|<-
+ |....|
+ |....|
+ |....|
+ |....|
+ ---
+
+Char 0x0631 'ر'
+ Font: #1 KacstBook (12)
+ Bitmap: 5 x 5
+ Advance: 4
+ Offset: 0 x 0
+ ____
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ | 2 |
+ | 7 |
+ | 31|
+ | 7 |
+ ->|36a2 |<-
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ ----
+
+Char 0x0632 'ز'
+ Font: #1 KacstBook (12)
+ Bitmap: 5 x 7
+ Advance: 4
+ Offset: 0 x 0
+ ____
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ | 54 |
+ | |
+ | 2 |
+ | 7 |
+ | 31|
+ | 7 |
+ ->|36a2 |<-
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ ----
+
+Char 0x0633 'س'
+ Font: #1 KacstBook (12)
+ Bitmap: 9 x 6
+ Advance: 9
+ Offset: 0 x -1
+ _________
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ | 2|
+ | 3 176|
+ | 6c964|
+ |3 32 |
+ ->|6 5 |<-
+ |2baa3 |
+ |.........|
+ |.........|
+ |.........|
+ ---------
+
+Char 0x0634 'ش'
+ Font: #1 KacstBook (12)
+ Bitmap: 9 x 9
+ Advance: 9
+ Offset: 0 x -1
+ _________
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ | 6 |
+ | 55 |
+ | 64 |
+ | 2|
+ | 3 176|
+ | 6c964|
+ |3 32 |
+ ->|6 5 |<-
+ |2baa3 |
+ |.........|
+ |.........|
+ |.........|
+ ---------
+
+Char 0x0635 'ص'
+ Font: #1 KacstBook (12)
+ Bitmap: 11 x 8
+ Advance: 11
+ Offset: 0 x -2
+ ___________
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ | 1 |
+ | 6ab|
+ | 3 6228|
+ | 6ccca6 |
+ |3 332 |
+ ->|6 5 |<-
+ |3caa3 |
+ | 1 |
+ |...........|
+ |...........|
+ -----------
+
+Char 0x0636 'ض'
+ Font: #1 KacstBook (12)
+ Bitmap: 11 x 9
+ Advance: 11
+ Offset: 0 x -1
+ ___________
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ | 1 |
+ | 63 |
+ | 1 |
+ | 6ab|
+ | 3 6238|
+ | 6ccca6 |
+ |3 332 |
+ ->|6 5 |<-
+ |3cba3 |
+ |...........|
+ |...........|
+ |...........|
+ -----------
+
+Char 0x0637 'ط'
+ Font: #1 KacstBook (12)
+ Bitmap: 7 x 7
+ Advance: 7
+ Offset: 0 x 2
+ _______
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ | 5 |
+ | 8 |
+ | 6 |
+ | 41 1 |
+ | 339a4|
+ | 54281|
+ |3b#a82 |
+ |.......|
+ ->|.......|<-
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ -------
+
+Char 0x0638 'ظ'
+ Font: #1 KacstBook (12)
+ Bitmap: 7 x 7
+ Advance: 7
+ Offset: 0 x 2
+ _______
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ | 5 |
+ | 8 61 |
+ | 6 3 |
+ | 41 1 |
+ | 339b4|
+ | 54281|
+ |3b#a82 |
+ |.......|
+ ->|.......|<-
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ -------
+
+Char 0x0639 'ع'
+ Font: #1 KacstBook (12)
+ Bitmap: 7 x 9
+ Advance: 7
+ Offset: 0 x -3
+ _______
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ | 67 |
+ |16 41 |
+ | 8c4 |
+ | 71 |
+ |23 |
+ ->|5 |<-
+ |62 |
+ |2b41 1|
+ | 38a961|
+ |.......|
+ -------
+
+Char 0x063a 'غ'
+ Font: #1 KacstBook (12)
+ Bitmap: 7 x 12
+ Advance: 7
+ Offset: 0 x -3
+ _______
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ | 1 |
+ | 44 |
+ | |
+ | 67 |
+ |16 41 |
+ | 8c4 |
+ | 71 |
+ |23 |
+ ->|5 |<-
+ |62 |
+ |2b41 1|
+ | 38a961|
+ |.......|
+ -------
+
+Char 0x0641 'ف'
+ Font: #1 KacstBook (12)
+ Bitmap: 8 x 7
+ Advance: 8
+ Offset: 0 x 1
+ ________
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ | 9 |
+ | 1 |
+ | a5|
+ |3 189|
+ |62 66|
+ |2bbaaaa4|
+ | 121 |
+ ->|........|<-
+ |........|
+ |........|
+ |........|
+ |........|
+ --------
+
+Char 0x0642 'ق'
+ Font: #1 KacstBook (12)
+ Bitmap: 6 x 9
+ Advance: 6
+ Offset: 0 x 0
+ ______
+ |......|
+ |......|
+ |......|
+ |......|
+ |......|
+ |......|
+ | 1 |
+ | 87 |
+ | |
+ | 92|
+ | 468|
+ |3 296|
+ |6 5|
+ |5a57a1|
+ ->| 364 |<-
+ |......|
+ |......|
+ |......|
+ |......|
+ ------
+
+Char 0x0643 'ك'
+ Font: #1 KacstBook (12)
+ Bitmap: 8 x 8
+ Advance: 7
+ Offset: 0 x 1
+ _______
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ | 1|
+ | 1 43|
+ | 51 24|
+ | 67 14|
+ |3 31 5|
+ |72 34|
+ |2ba9a96 |
+ | 11 |
+ ->|........|<-
+ |........|
+ |........|
+ |........|
+ |........|
+ -------
+
+Char 0x0644 'ل'
+ Font: #1 KacstBook (12)
+ Bitmap: 5 x 8
+ Advance: 5
+ Offset: 0 x 1
+ _____
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ | 6|
+ | 9|
+ | 6|
+ | 6|
+ | 1 5|
+ |4 5|
+ |62 26|
+ |1ab81|
+ ->|.....|<-
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ -----
+
+Char 0x0645 'م'
+ Font: #1 KacstBook (12)
+ Bitmap: 4 x 8
+ Advance: 4
+ Offset: 0 x -3
+ ____
+ |....|
+ |....|
+ |....|
+ |....|
+ |....|
+ |....|
+ |....|
+ |....|
+ |....|
+ |....|
+ | 5a2|
+ | 6aa|
+ |3311|
+ |5 |
+ ->|41 |<-
+ |15 |
+ | 5 |
+ | 1 |
+ |....|
+ ----
+
+Char 0x0646 'ن'
+ Font: #1 KacstBook (12)
+ Bitmap: 5 x 7
+ Advance: 5
+ Offset: 0 x 1
+ _____
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ | 25 |
+ | 2 |
+ | 25|
+ |1 7|
+ |4 4|
+ |65264|
+ | 794 |
+ ->|.....|<-
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ -----
+
+Char 0x0647 'ه'
+ Font: #1 KacstBook (12)
+ Bitmap: 3 x 3
+ Advance: 3
+ Offset: 0 x 2
+ ___
+ |...|
+ |...|
+ |...|
+ |...|
+ |...|
+ |...|
+ |...|
+ |...|
+ |...|
+ |...|
+ | 93|
+ |326|
+ |5a3|
+ |...|
+ ->|...|<-
+ |...|
+ |...|
+ |...|
+ |...|
+ ---
+
+Char 0x0648 'و'
+ Font: #1 KacstBook (12)
+ Bitmap: 5 x 5
+ Advance: 4
+ Offset: 0 x 0
+ ____
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ | 2a |
+ | 673|
+ | 262|
+ | 7 |
+ ->|36a2 |<-
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ ----
+
+Char 0x0649 'ى'
+ Font: #1 KacstBook (12)
+ Bitmap: 7 x 6
+ Advance: 7
+ Offset: 0 x 0
+ _______
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ | 1a6|
+ | 6 |
+ | 2 33 |
+ |4 29b2|
+ |62 17 |
+ ->|1bba71 |<-
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ -------
+
+Char 0x064a 'ي'
+ Font: #1 KacstBook (12)
+ Bitmap: 7 x 8
+ Advance: 7
+ Offset: 0 x -2
+ _______
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ | 1a6|
+ | 6 |
+ | 2 33 |
+ |4 29b2|
+ |62 17 |
+ ->|1bba71 |<-
+ | 1 |
+ | 98 |
+ |.......|
+ |.......|
+ -------
+
+Char 0x064b 'ً' top
+ Font: #1 KacstBook (12)
+ Bitmap: 3 x 3
+ Advance: 0
+ Offset: 0 x 12
+
+ | 41|
+ |361|
+ |32 |
+ |...|
+ |...|
+ |...|
+ |...|
+ |...|
+ |...|
+ |...|
+ |...|
+ |...|
+ |...|
+ |...|
+ ->|...|<-
+ |...|
+ |...|
+ |...|
+ |...|
+
+
+Char 0x064e 'َ'
+ Font: #1 KacstBook (12)
+ Bitmap: 2 x 1
+ Advance: 0
+ Offset: 0 x 12
+
+ |..|
+ |..|
+ |32|
+ |..|
+ |..|
+ |..|
+ |..|
+ |..|
+ |..|
+ |..|
+ |..|
+ |..|
+ |..|
+ |..|
+ ->|..|<-
+ |..|
+ |..|
+ |..|
+ |..|
+
+
+Char 0x0650 'ِ'
+ Font: #1 KacstBook (12)
+ Bitmap: 2 x 1
+ Advance: 0
+ Offset: 0 x -3
+
+ |..|
+ |..|
+ |..|
+ |..|
+ |..|
+ |..|
+ |..|
+ |..|
+ |..|
+ |..|
+ |..|
+ |..|
+ |..|
+ |..|
+ ->|..|<-
+ |..|
+ |..|
+ |23|
+ |..|
+
+
+Char 0x0651 'ّ'
+ Font: #1 KacstBook (12)
+ Bitmap: 2 x 1
+ Advance: 0
+ Offset: 0 x 11
+
+ |..|
+ |..|
+ |..|
+ |57|
+ |..|
+ |..|
+ |..|
+ |..|
+ |..|
+ |..|
+ |..|
+ |..|
+ |..|
+ |..|
+ ->|..|<-
+ |..|
+ |..|
+ |..|
+ |..|
+
+
+Char 0x0902 'ं'
+ Font: #3 lohit_hi (16)
+ Bitmap: 4 x 1
+ Advance: 0
+ Offset: -4 x 13
+
+ |....|
+ |1##4|
+ |....|
+ |....|
+ |....|
+ |....|
+ |....|
+ |....|
+ |....|
+ |....|
+ |....|
+ |....|
+ |....|
+ |....|
+ ->|....|<-
+ |....|
+ |....|
+ |....|
+ |....|
+
+
+Char 0x0903 'ः'
+ Font: #3 lohit_hi (16)
+ Bitmap: 4 x 7
+ Advance: 6
+ Offset: 1 x 1
+ ______
+ |......|
+ |......|
+ |......|
+ |......|
+ |......|
+ |......|
+ |......|
+ |.4##4.|
+ |.6##6.|
+ |. 33 .|
+ |. .|
+ |. 32 .|
+ |.8##4.|
+ |.6##2.|
+ ->|......|<-
+ |......|
+ |......|
+ |......|
+ |......|
+ ------
+
+Char 0x0905 'अ'
+ Font: #3 lohit_hi (16)
+ Bitmap: 13 x 10
+ Advance: 13
+ Offset: -1 x 0
+ _____________
+ |..............|
+ |..............|
+ |..............|
+ |..............|
+ |..............|
+ | 1a###68#####.|
+ | b#81c#3 a#3 .|
+ | 11 9#5 a#3 .|
+ | 6##1 a#3 .|
+ | a###3 b#3 .|
+ |792 3#####3 .|
+ |3#b b#3a#3 .|
+ | 5#a 1##1a#3 .|
+ | 3####6 a#3 .|
+ ->| 352 a#3 .|<-
+ |..............|
+ |..............|
+ |..............|
+ |..............|
+ -------------
+
+Char 0x0906 'आ'
+ Font: #3 lohit_hi (16)
+ Bitmap: 18 x 10
+ Advance: 17
+ Offset: -1 x 0
+ _________________
+ |..................|
+ |..................|
+ |..................|
+ |..................|
+ |..................|
+ | 1a###68#########3|
+ | b#71##3 a#3 7#7 |
+ | 11 9#5 a#3 7#7 |
+ | 6##1 a#3 7#7 |
+ | a###3 b#3 7#7 |
+ |8b3 2#####3 7#7 |
+ |3#c b#3a#3 7#7 |
+ | 5#b11##1a#3 7#7 |
+ | 3####6 a#3 7#7 |
+ ->| 352 a#3 7#7 |<-
+ |..................|
+ |..................|
+ |..................|
+ |..................|
+ -----------------
+
+Char 0x0907 'इ'
+ Font: #3 lohit_hi (16)
+ Bitmap: 10 x 13
+ Advance: 9
+ Offset: 0 x -3
+ _________
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |b########6|
+ | 6#9 |
+ | 5bc##9 |
+ | 8#####5 |
+ | 8#8 |
+ | b####b |
+ | 7#ac#6 |
+ | 385 9#5 |
+ | c##b5##1 |
+ ->| 3#####2 |<-
+ | c#5 |
+ | 1b#a1 |
+ | 56 |
+ |..........|
+ ---------
+
+Char 0x0908 'ई' top
+ Font: #3 lohit_hi (16)
+ Bitmap: 10 x 17
+ Advance: 9
+ Offset: -1 x -2
+ _________
+ | a##9 |
+ | 8#911 |
+ | b#3 |
+ | 9#5 |
+ | 2##1 |
+ |b########5|
+ | 7#7 |
+ | 29####7 |
+ | c##aa82 |
+ | 9#9 11 |
+ | 9#####1 |
+ | 2528#6 |
+ | 9#c2 c#3 |
+ | c#####9 |
+ ->| 4b##4 |<-
+ | 5##3 |
+ | 1cc1 |
+ |..........|
+ |..........|
+ ---------
+
+Char 0x0909 'उ'
+ Font: #3 lohit_hi (16)
+ Bitmap: 12 x 10
+ Advance: 11
+ Offset: 0 x 0
+ ___________
+ |............|
+ |............|
+ |............|
+ |............|
+ |............|
+ |b##########6|
+ | 8#8 |
+ | 3#b |
+ | 76 7#9 |
+ | c#18####2 |
+ | 5#8 17#b |
+ | c#2 b#2 |
+ | 3##1 b#3 |
+ | 6##46#c |
+ ->| 4####2 |<-
+ |............|
+ |............|
+ |............|
+ |............|
+ -----------
+
+Char 0x090a 'ऊ'
+ Font: #3 lohit_hi (16)
+ Bitmap: 16 x 10
+ Advance: 15
+ Offset: 0 x 0
+ _______________
+ |................|
+ |................|
+ |................|
+ |................|
+ |................|
+ |b###############|
+ | a#7 |
+ | 3#b |
+ | bb 8#8 22 |
+ | b#39####5####4 |
+ | 6#9 18###23## |
+ | ##3 c#7 ##1|
+ | 4#c c#2 2## |
+ | 7##48#b b#6 |
+ ->| 5###c1 66 |<-
+ |................|
+ |................|
+ |................|
+ |................|
+ ---------------
+
+Char 0x090f 'ए'
+ Font: #3 lohit_hi (16)
+ Bitmap: 10 x 11
+ Advance: 9
+ Offset: 0 x -1
+ _________
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |b########2|
+ | 9#5 1## |
+ | 9#5 1## |
+ | 9#5 1## |
+ | 9#5 6#a |
+ | 7#c1351 |
+ | 1c##2 |
+ | a##4 |
+ | 9##6 |
+ ->| 7##3 |<-
+ | 2cb1 |
+ |..........|
+ |..........|
+ |..........|
+ ---------
+
+Char 0x0913 'ओ' top
+ Font: #3 lohit_hi (16)
+ Bitmap: 18 x 15
+ Advance: 17
+ Offset: -1 x 0
+ _________________
+ | 1ba |
+ | 7#8 |
+ | a#5 |
+ | b#3 |
+ | 1c#1 |
+ | 1b###78#########3|
+ | b#71##3 a#3 7#7 |
+ | 11 9#5 a#3 7#7 |
+ | 6##1 a#3 7#7 |
+ | a###62##3 7#7 |
+ |8b3 3#####3 7#7 |
+ |3#c b#3a#3 7#7 |
+ | 5#b11##1a#3 7#7 |
+ | 3####6 a#3 7#7 |
+ ->| 352 a#3 7#7 |<-
+ |..................|
+ |..................|
+ |..................|
+ |..................|
+ -----------------
+
+Char 0x0914 'औ' top
+ Font: #3 lohit_hi (16)
+ Bitmap: 18 x 15
+ Advance: 17
+ Offset: -1 x 0
+ _________________
+ | 1ba |
+ | 44 b#4 |
+ | 1b#a5#8 |
+ | 5###a |
+ | 1a##4 |
+ | 1c###68#########3|
+ | b#62##3 a#3 7#7 |
+ | 9#5 a#3 7#7 |
+ | 6##1 a#3 7#7 |
+ | a###73##3 7#7 |
+ |8b3 3#####3 7#7 |
+ |3#c b#3a#3 7#7 |
+ | 5#b11##1a#3 7#7 |
+ | 3####6 a#3 7#7 |
+ ->| 352 a#3 7#7 |<-
+ |..................|
+ |..................|
+ |..................|
+ |..................|
+ -----------------
+
+Char 0x0915 'क'
+ Font: #3 lohit_hi (16)
+ Bitmap: 14 x 10
+ Advance: 13
+ Offset: 0 x 0
+ _____________
+ |..............|
+ |..............|
+ |..............|
+ |..............|
+ |..............|
+ |b############4|
+ | 2#b |
+ | 29#b##8#81 |
+ | 4###9#####c |
+ | b#3 2##3 a#4 |
+ | ##1 3#b 9#5 |
+ | 9#b5##b 1##1 |
+ | 9####b b#7 |
+ | 2#b186 |
+ ->| 2#b |<-
+ |..............|
+ |..............|
+ |..............|
+ |..............|
+ -------------
+
+Char 0x0916 'ख'
+ Font: #3 lohit_hi (16)
+ Bitmap: 15 x 10
+ Advance: 14
+ Offset: 0 x 0
+ ______________
+ |...............|
+ |...............|
+ |...............|
+ |...............|
+ |...............|
+ |b#############6|
+ | ba 7#a |
+ | ba 9####a |
+ | bb2b96#b39#a |
+ | b###38#6 8#a |
+ | 5#a1 3#####a |
+ | bc1 17ac#a |
+ | 3#a 3##a |
+ | 5#c2 7###a |
+ ->| 3####a6#a |<-
+ |...............|
+ |...............|
+ |...............|
+ |...............|
+ --------------
+
+Char 0x0917 'ग'
+ Font: #3 lohit_hi (16)
+ Bitmap: 10 x 10
+ Advance: 9
+ Offset: 0 x 0
+ _________
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |b########8|
+ | a#41## |
+ | a#41## |
+ | 4##41## |
+ |2###41## |
+ | 5##41## |
+ | 34 1## |
+ | 1## |
+ | 1## |
+ ->| 1## |<-
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ ---------
+
+Char 0x0918 'घ'
+ Font: #3 lohit_hi (16)
+ Bitmap: 12 x 10
+ Advance: 11
+ Offset: 0 x 0
+ ___________
+ |............|
+ |............|
+ |............|
+ |............|
+ |............|
+ |b##########7|
+ | 8a1 6#b |
+ | 9#5 6#b |
+ | 2####36#b |
+ | a#51 6#b |
+ | 5b5 9#b |
+ | 4#a 1b##b |
+ | 8######b |
+ | 15513#b |
+ ->| 3#b |<-
+ |............|
+ |............|
+ |............|
+ |............|
+ -----------
+
+Char 0x091a 'च'
+ Font: #3 lohit_hi (16)
+ Bitmap: 12 x 10
+ Advance: 11
+ Offset: 0 x 0
+ ___________
+ |............|
+ |............|
+ |............|
+ |............|
+ |............|
+ |b##########7|
+ | 3#b |
+ |27bbbb97#b |
+ |3b#####9#b |
+ | 2##1 3#b |
+ | 6#7 9#b |
+ | 5#a 8##b |
+ | a###c#b |
+ | 1313#b |
+ ->| 3#b |<-
+ |............|
+ |............|
+ |............|
+ |............|
+ -----------
+
+Char 0x091b 'छ'
+ Font: #3 lohit_hi (16)
+ Bitmap: 13 x 10
+ Advance: 12
+ Offset: -1 x 0
+ ____________
+ |.............|
+ |.............|
+ |.............|
+ |.............|
+ |.............|
+ |############6|
+ | a#8 99 |
+ | ##7 7##3 |
+ | 9###95##994 |
+ | a##c8#9 99 |
+ | 1##3 2#c4c8 |
+ | 5## 9###3 |
+ | 5##4 3##7 |
+ | c######8 |
+ ->| 8####4 |<-
+ |.............|
+ |.............|
+ |.............|
+ |.............|
+ ------------
+
+Char 0x091c 'ज'
+ Font: #3 lohit_hi (16)
+ Bitmap: 14 x 10
+ Advance: 12
+ Offset: -2 x 0
+ ____________
+ |..............|
+ |..............|
+ |..............|
+ |..............|
+ |..............|
+ |7############2|
+ | 8#5 |
+ | 8#5 |
+ | 9a1 9#####5 |
+ | 8#6 ##29#5 |
+ | 1## 7#78#5 |
+ | 4#9 5#98#5 |
+ | 5#b##68#5 |
+ | 3##7 8#5 |
+ ->| 8#5 |<-
+ |..............|
+ |..............|
+ |..............|
+ |..............|
+ ------------
+
+Char 0x091f 'ट'
+ Font: #3 lohit_hi (16)
+ Bitmap: 11 x 10
+ Advance: 10
+ Offset: -1 x 0
+ __________
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ |9#########6|
+ | 7#7 |
+ | 18#7 |
+ | a#####7 |
+ | 7#a |
+ | b#3 |
+ | a#4 |
+ | 5#a 22 |
+ | 8##33b#b |
+ ->| 5####8 |<-
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ ----------
+
+Char 0x0920 'ठ'
+ Font: #3 lohit_hi (16)
+ Bitmap: 11 x 10
+ Advance: 10
+ Offset: -1 x 0
+ __________
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ |##########5|
+ | c#2 |
+ | 244##2 |
+ | 3######1 |
+ | c#4 7#6 |
+ |2#c 1##1 |
+ | ## 9#5 |
+ | 8#7 a#4 |
+ | a#927#c |
+ ->| 5###b1 |<-
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ ----------
+
+Char 0x0921 'ड'
+ Font: #3 lohit_hi (16)
+ Bitmap: 12 x 10
+ Advance: 11
+ Offset: -1 x 0
+ ___________
+ |............|
+ |............|
+ |............|
+ |............|
+ |............|
+ |c##########3|
+ | 8#6 |
+ | 6bc##6 |
+ | 8####b3 |
+ | 8#7 |
+ |3b81c####8 |
+ | c#3 8#b##4 |
+ | 2##3 a#4 |
+ | 2##828#c |
+ ->| 7###b1 |<-
+ |............|
+ |............|
+ |............|
+ |............|
+ -----------
+
+Char 0x0922 'ढ'
+ Font: #3 lohit_hi (16)
+ Bitmap: 11 x 10
+ Advance: 10
+ Offset: 0 x 0
+ __________
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ |b#########8|
+ | 7#7 |
+ | 118#7 |
+ | 1c#####7 |
+ | 9#7 |
+ | c#2 29#6 |
+ | a#4 b#c#8 |
+ | 5#c2ca6#b |
+ | 8######7 |
+ ->| 5####6 |<-
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ ----------
+
+Char 0x0923 'ण'
+ Font: #3 lohit_hi (16)
+ Bitmap: 13 x 10
+ Advance: 11
+ Offset: -2 x 0
+ ___________
+ |.............|
+ |.............|
+ |.............|
+ |.............|
+ |.............|
+ |1###########9|
+ | c#8 88 ## |
+ | c#8 88 ## |
+ | c#8 88 ## |
+ | c#8 88 ## |
+ | b#a 99 ## |
+ | 4####7 ## |
+ | 2a#5 ## |
+ | ## |
+ ->| ## |<-
+ |.............|
+ |.............|
+ |.............|
+ |.............|
+ -----------
+
+Char 0x0924 'त'
+ Font: #3 lohit_hi (16)
+ Bitmap: 12 x 10
+ Advance: 11
+ Offset: -2 x 0
+ ___________
+ |.............|
+ |.............|
+ |.............|
+ |.............|
+ |.............|
+ |6##########4.|
+ | 6#8 .|
+ | 2555a#8 .|
+ | 8######8 .|
+ | 3a6 6#8 .|
+ | 8#6 6#8 .|
+ | 5#a 6#8 .|
+ | b#5 6#8 .|
+ | 2##3 6#8 .|
+ ->| 2c9 6#8 .|<-
+ |.............|
+ |.............|
+ |.............|
+ |.............|
+ -----------
+
+Char 0x0925 'थ'
+ Font: #3 lohit_hi (16)
+ Bitmap: 12 x 10
+ Advance: 12
+ Offset: 0 x 0
+ ____________
+ |............|
+ |............|
+ |............|
+ |............|
+ |............|
+ | a###64####6|
+ |7#93##34#a |
+ |8#917#74#a |
+ |1a#7a#54#a |
+ |268##a 4#a |
+ |7###6 7#a |
+ | b#3 8##a |
+ | 8####9#a |
+ | 4#a |
+ ->| 4#a |<-
+ |............|
+ |............|
+ |............|
+ |............|
+ ------------
+
+Char 0x0926 'द'
+ Font: #3 lohit_hi (16)
+ Bitmap: 11 x 10
+ Advance: 9
+ Offset: 0 x 0
+ _________
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ |a#########4|
+ | 5#9 |
+ | 4c####9 |
+ | 6#####b4 |
+ | b#3 |
+ | a#4 11 |
+ | 2c#2 7##1 |
+ | 8####b |
+ | 6#6 |
+ ->| bc1 |<-
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ ---------
+
+Char 0x0927 'ध'
+ Font: #3 lohit_hi (16)
+ Bitmap: 11 x 10
+ Advance: 11
+ Offset: 0 x 0
+ ___________
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ |1b##c######|
+ |8#6b#4 a#4 |
+ |8###b a#4 |
+ |2##553 a#4 |
+ | 4####4a#4 |
+ | 8#a b#4 |
+ | a#4 9##4 |
+ | 3#######4 |
+ | 485 a#4 |
+ ->| a#4 |<-
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ -----------
+
+Char 0x0928 'न'
+ Font: #3 lohit_hi (16)
+ Bitmap: 12 x 10
+ Advance: 10
+ Offset: -2 x 0
+ __________
+ |............|
+ |............|
+ |............|
+ |............|
+ |............|
+ |3##########3|
+ | 5c7 |
+ | 297 |
+ | 4b######7 |
+ | 8#######7 |
+ | c#b 7#7 |
+ | 154 7#7 |
+ | 7#7 |
+ | 7#7 |
+ ->| 7#7 |<-
+ |............|
+ |............|
+ |............|
+ |............|
+ ----------
+
+Char 0x092a 'प'
+ Font: #3 lohit_hi (16)
+ Bitmap: 11 x 10
+ Advance: 9
+ Offset: -2 x 0
+ _________
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ |4#########8|
+ | 4##4 66 |
+ | 4##4 66 |
+ | 4##4 66 |
+ | 3##5 77 |
+ | 1###4a#8 |
+ | 4#####8 |
+ | 115#8 |
+ | 5#8 |
+ ->| 5#8 |<-
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ ---------
+
+Char 0x092b 'फ'
+ Font: #3 lohit_hi (16)
+ Bitmap: 14 x 10
+ Advance: 13
+ Offset: -1 x 0
+ _____________
+ |..............|
+ |..............|
+ |..............|
+ |..............|
+ |..............|
+ |a############a|
+ | a#8 aa |
+ | a#8 aa263 |
+ | a#8 a####c |
+ | a#9 c#5 8#7 |
+ | 6###### 4#9 |
+ | 6##### 6#8 |
+ | 1## c#3 |
+ | 1## 3b8 |
+ ->| 1## |<-
+ |..............|
+ |..............|
+ |..............|
+ |..............|
+ -------------
+
+Char 0x092c 'ब'
+ Font: #3 lohit_hi (16)
+ Bitmap: 11 x 10
+ Advance: 9
+ Offset: -1 x 0
+ _________
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ |5#########4|
+ | 6#8 |
+ | 18##c#8 |
+ | 1##b58#8 |
+ | 7###66#8 |
+ | 8#84###8 |
+ | 3######8 |
+ | 3#####8 |
+ | 6#8 |
+ ->| 6#8 |<-
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ ---------
+
+Char 0x092d 'भ'
+ Font: #3 lohit_hi (16)
+ Bitmap: 11 x 10
+ Advance: 11
+ Offset: 0 x 0
+ ___________
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ |6###9######|
+ |##6#a a#4 |
+ |b#a#b a#4 |
+ | 55#b a#4 |
+ | 4##33c#4 |
+ | 5#######4 |
+ | 6#a a#4 |
+ | a#4 |
+ | a#4 |
+ ->| a#4 |<-
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ -----------
+
+Char 0x092e 'म'
+ Font: #3 lohit_hi (16)
+ Bitmap: 11 x 10
+ Advance: 10
+ Offset: 0 x 0
+ __________
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ |b#########8|
+ | bb 4#c |
+ | bb 4#c |
+ | bc 5#c |
+ |2#######c |
+ | 9##656#c |
+ | 55 1#c |
+ | 1#c |
+ | 1#c |
+ ->| 1#c |<-
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ ----------
+
+Char 0x092f 'य'
+ Font: #3 lohit_hi (16)
+ Bitmap: 11 x 10
+ Advance: 10
+ Offset: 0 x 0
+ __________
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ |b#########b|
+ | 2#c 1##2 |
+ | 9c21##2 |
+ | ab 1##2 |
+ |19##3 1##2 |
+ |1#c 3##2 |
+ | 8#a25###2 |
+ | 7######2 |
+ | 1 c#2 |
+ ->| c#2 |<-
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ ----------
+
+Char 0x0930 'र'
+ Font: #3 lohit_hi (16)
+ Bitmap: 9 x 10
+ Advance: 8
+ Offset: 0 x 0
+ ________
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |b#######5|
+ | ## |
+ | ## |
+ |1##21## |
+ | 8####7 |
+ | 1##b3 |
+ | 4#c |
+ | 7#a |
+ | 8#a |
+ ->| 7c5 |<-
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ --------
+
+Char 0x0931 'ऱ'
+ Font: #3 lohit_hi (16)
+ Bitmap: 9 x 10
+ Advance: 8
+ Offset: -1 x 0
+ ________
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |3########|
+ | 5#8 |
+ | 21 5#8 |
+ | 6#b 6#8 |
+ | #####2 |
+ | 5##71 |
+ | 9#7 |
+ | c#4 |
+ | 243##5 |
+ ->| 7#51bb |<-
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ --------
+
+Char 0x0932 'ल'
+ Font: #3 lohit_hi (16)
+ Bitmap: 13 x 10
+ Advance: 12
+ Offset: 0 x 0
+ ____________
+ |.............|
+ |.............|
+ |.............|
+ |.............|
+ |.............|
+ |b###########c|
+ | b#2 |
+ | b#2 |
+ | 7####a###2 |
+ | 7#8 3##8b#2 |
+ | c#2 4#b b#2 |
+ | c#3 374 b#2 |
+ | 5#c b#2 |
+ | 7##3 b#2 |
+ ->| 3##4 b#2 |<-
+ |.............|
+ |.............|
+ |.............|
+ |.............|
+ ------------
+
+Char 0x0933 'ळ'
+ Font: #3 lohit_hi (16)
+ Bitmap: 14 x 9
+ Advance: 12
+ Offset: 0 x 1
+ ____________
+ |..............|
+ |..............|
+ |..............|
+ |..............|
+ |..............|
+ |b############1|
+ | ## |
+ | 12 1## |
+ | 9###7c###3 |
+ | 7b31##b14#c |
+ | bb 8#8 1##2 |
+ | bc1 c#c 2##1 |
+ | 7##c###ab#a |
+ | 8###28##c1 |
+ ->|..............|<-
+ |..............|
+ |..............|
+ |..............|
+ |..............|
+ ------------
+
+Char 0x0935 'व'
+ Font: #3 lohit_hi (16)
+ Bitmap: 11 x 10
+ Advance: 9
+ Offset: 0 x 0
+ _________
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ |b#########1|
+ | 9#4 |
+ | 2a#9b#4 |
+ | 5##b6b#4 |
+ | c#2 9#4 |
+ | ##1 c#4 |
+ | 7##8###4 |
+ | 5#####4 |
+ | 9#4 |
+ ->| 9#4 |<-
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ ---------
+
+Char 0x0936 'श'
+ Font: #3 lohit_hi (16)
+ Bitmap: 12 x 10
+ Advance: 12
+ Offset: 0 x 0
+ ____________
+ |............|
+ |............|
+ |............|
+ |............|
+ |............|
+ |2##b57#####3|
+ |b#8 66 7#7 |
+ |c##7#c 7#7 |
+ |6##### 7#7 |
+ | 267#b 7#7 |
+ |111##5 7#7 |
+ |9###5 7#7 |
+ | 8#6 7#7 |
+ | 7#a 7#7 |
+ ->| 5c7 7#7 |<-
+ |............|
+ |............|
+ |............|
+ |............|
+ ------------
+
+Char 0x0937 'ष'
+ Font: #3 lohit_hi (16)
+ Bitmap: 10 x 10
+ Advance: 9
+ Offset: 0 x 0
+ _________
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |b########c|
+ | a##5 ##2 |
+ | ac##6##2 |
+ | ab2a###2 |
+ | 9c2 9##2 |
+ | 6##6b##2 |
+ | 7#####2 |
+ | b#2 |
+ | b#2 |
+ ->| b#2 |<-
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ ---------
+
+Char 0x0938 'स'
+ Font: #3 lohit_hi (16)
+ Bitmap: 13 x 10
+ Advance: 12
+ Offset: 0 x 0
+ ____________
+ |.............|
+ |.............|
+ |.............|
+ |.............|
+ |.............|
+ |b###########8|
+ | a#3 1## |
+ | a#3 1## |
+ |1a8 b#3 2## |
+ | a######### |
+ | 1##8 1## |
+ | 3##1 1## |
+ | 6#9 1## |
+ | a#5 1## |
+ ->| 1cb 1## |<-
+ |.............|
+ |.............|
+ |.............|
+ |.............|
+ ------------
+
+Char 0x0939 'ह'
+ Font: #3 lohit_hi (16)
+ Bitmap: 10 x 10
+ Advance: 9
+ Offset: 0 x 0
+ _________
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |a########a|
+ | b#2 |
+ | 2c#####2 |
+ | 8#93332 |
+ | 3##b#93 |
+ | c#####6 |
+ | 7#8 2#c |
+ | 7#7 5#8 |
+ | 1c#b2 |
+ ->| 5###a |<-
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ ---------
+
+Char 0x093c '़'
+ Font: #3 lohit_hi (16)
+ Bitmap: 3 x 1
+ Advance: 0
+ Offset: -9 x -1
+
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ ->|.........|<-
+ |7b4......|
+ |.........|
+ |.........|
+ |.........|
+
+
+Char 0x093e 'ा'
+ Font: #3 lohit_hi (16)
+ Bitmap: 6 x 10
+ Advance: 5
+ Offset: 0 x 0
+ _____
+ |......|
+ |......|
+ |......|
+ |......|
+ |......|
+ |b####9|
+ | ## |
+ | ## |
+ | ## |
+ | ## |
+ | ## |
+ | ## |
+ | ## |
+ | ## |
+ ->| ## |<-
+ |......|
+ |......|
+ |......|
+ |......|
+ -----
+
+Char 0x093f 'ि' top
+ Font: #3 lohit_hi (16)
+ Bitmap: 12 x 15
+ Advance: 5
+ Offset: 0 x 0
+ _____
+ | 9###c2 |
+ | a#b37##6 |
+ | 2#c 1##5 |
+ | 4#9 2##2|
+ | 2#b 5#7|
+ |b####9 |
+ | ## |
+ | ## |
+ | ## |
+ | ## |
+ | ## |
+ | ## |
+ | ## |
+ | ## |
+ ->| ## |<-
+ |............|
+ |............|
+ |............|
+ |............|
+ -----
+
+Char 0x0940 'ी' top
+ Font: #3 lohit_hi (16)
+ Bitmap: 10 x 15
+ Advance: 5
+ Offset: -3 x 0
+ _____
+ | 7###3 |
+ |5#b6##1 |
+ |8#4 6#8 |
+ |7#7 ## |
+ |1ba a#3 |
+ | 5#####1|
+ | 9#5 |
+ | 9#5 |
+ | 9#5 |
+ | 9#5 |
+ | 9#5 |
+ | 9#5 |
+ | 9#5 |
+ | 9#5 |
+ ->| 9#5 |<-
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ -----
+
+Char 0x0941 'ु'
+ Font: #3 lohit_hi (16)
+ Bitmap: 10 x 3
+ Advance: 0
+ Offset: -8 x -3
+
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ ->|..........|<-
+ | 6###c2|
+ |1b#4 7#7|
+ | 29#####8 |
+ |..........|
+
+
+Char 0x0942 'ू'
+ Font: #3 lohit_hi (16)
+ Bitmap: 8 x 4
+ Advance: 0
+ Offset: -4 x -3
+
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ ->| 2b#6 |<-
+ |4512331 |
+ |##643583|
+ |7###6 ba|
+ |........|
+
+
+Char 0x0943 'ृ'
+ Font: #3 lohit_hi (16)
+ Bitmap: 6 x 3
+ Advance: 0
+ Offset: -4 x -3
+
+ |......|
+ |......|
+ |......|
+ |......|
+ |......|
+ |......|
+ |......|
+ |......|
+ |......|
+ |......|
+ |......|
+ |......|
+ |......|
+ |......|
+ ->|......|<-
+ |3c##7 |
+ |a#4 |
+ |5####a|
+ |......|
+
+
+Char 0x0945 'ॅ'
+ Font: #3 lohit_hi (16)
+ Bitmap: 8 x 2
+ Advance: 0
+ Offset: -5 x 12
+
+ |........|
+ |8#5 b#2|
+ | 793583 |
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ ->|........|<-
+ |........|
+ |........|
+ |........|
+ |........|
+
+
+Char 0x0947 'े' top
+ Font: #3 lohit_hi (16)
+ Bitmap: 7 x 5
+ Advance: 0
+ Offset: -6 x 10
+
+ |7#8 |
+ |2##6 |
+ | 2##4 |
+ | 2##2 |
+ | 3#c1|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ ->|.......|<-
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+
+
+Char 0x0948 'ै' top
+ Font: #3 lohit_hi (16)
+ Bitmap: 8 x 5
+ Advance: 0
+ Offset: -7 x 10
+
+ | 3c8 |
+ |2631##1 |
+ |7##77#5 |
+ | 1b#cca |
+ | 3c#c1|
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ ->|........|<-
+ |........|
+ |........|
+ |........|
+ |........|
+
+
+Char 0x0949 'ॉ'
+ Font: #3 lohit_hi (16)
+ Bitmap: 8 x 14
+ Advance: 5
+ Offset: -2 x 0
+ _____
+ |........|
+ |##1 1## |
+ |6#c3c#6 |
+ | 5###5 |
+ | |
+ | b####9|
+ | ## |
+ | ## |
+ | ## |
+ | ## |
+ | ## |
+ | ## |
+ | ## |
+ | ## |
+ ->| ## |<-
+ |........|
+ |........|
+ |........|
+ |........|
+ -----
+
+Char 0x094b 'ो' top
+ Font: #3 lohit_hi (16)
+ Bitmap: 9 x 15
+ Advance: 5
+ Offset: -4 x 0
+ _____
+ |2b9 |
+ | 8#7 |
+ | a#4 |
+ | c#2 |
+ | 1#c1 |
+ | 4#####3|
+ | 7#6 |
+ | 6#6 |
+ | 5c6 |
+ | 4b6 |
+ | 3a6 |
+ | 396 |
+ | 286 |
+ | 176 |
+ ->| 76 |<-
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ -----
+
+Char 0x094c 'ौ' top
+ Font: #3 lohit_hi (16)
+ Bitmap: 9 x 15
+ Advance: 5
+ Offset: -3 x 0
+ _____
+ | 7c4 |
+ |5725#9 |
+ |6##4c# |
+ | 2c#cb5 |
+ | 5##9 |
+ | c####7|
+ | 2#b |
+ | 2#b |
+ | 2#b |
+ | 2#b |
+ | 2#b |
+ | 2#b |
+ | 2#b |
+ | 2#b |
+ ->| 2#b |<-
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ -----
+
+Char 0x094d '्'
+ Font: #3 lohit_hi (16)
+ Bitmap: 6 x 2
+ Advance: 0
+ Offset: -3 x -2
+
+ |......|
+ |......|
+ |......|
+ |......|
+ |......|
+ |......|
+ |......|
+ |......|
+ |......|
+ |......|
+ |......|
+ |......|
+ |......|
+ |......|
+ ->|......|<-
+ |5##91 |
+ | 17#8|
+ |......|
+ |......|
+
+
+Char 0x0964 '।'
+ Font: #3 lohit_hi (16)
+ Bitmap: 3 x 10
+ Advance: 7
+ Offset: 2 x 0
+ _______
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.. cc..|
+ |.. cc..|
+ |.. #c..|
+ |.. #c..|
+ |.. #c..|
+ |.. #c..|
+ |..1#c..|
+ |..1#c..|
+ |..1#c..|
+ ->|..1#c..|<-
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ -------
+
+Char 0x0966 '०'
+ Font: #3 lohit_hi (16)
+ Bitmap: 9 x 8
+ Advance: 11
+ Offset: 0 x 1
+ ___________
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ | 2b###7 ..|
+ |1###99#7 ..|
+ |7##3 362..|
+ |b#c 44..|
+ |a## 55..|
+ |6##7 8a2..|
+ | a#####8 ..|
+ | 7###7 ..|
+ ->|...........|<-
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ -----------
+
+Char 0x0967 '१'
+ Font: #3 lohit_hi (16)
+ Bitmap: 8 x 11
+ Advance: 11
+ Offset: 2 x 0
+ ___________
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ |.. 5###a1 .|
+ |..3##29#a .|
+ |..7#7 2## .|
+ |..5#8 3##1.|
+ |.. b#9###1.|
+ |.. 496##1.|
+ |.. ##1.|
+ |.. ##1.|
+ |.. ##1.|
+ |.. ##1.|
+ ->|.. ##1.|<-
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ -----------
+
+Char 0x0968 '२'
+ Font: #3 lohit_hi (16)
+ Bitmap: 9 x 11
+ Advance: 11
+ Offset: 1 x 0
+ ___________
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ |. 4####91 .|
+ |.2##418#b .|
+ |. a#4.|
+ |. 8#5.|
+ |. b#3.|
+ |. 33 6#b .|
+ |. 8####c1 .|
+ |. 2a### .|
+ |. 9#9 .|
+ |. c#5 .|
+ ->|. 2ca .|<-
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ -----------
+
+Char 0x096b '५'
+ Font: #3 lohit_hi (16)
+ Bitmap: 9 x 12
+ Advance: 11
+ Offset: 0 x -1
+ ___________
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ | ac2 ..|
+ |2#c ..|
+ |4#9 7##1..|
+ |5#9 c##4..|
+ |2## c##1..|
+ | 7##a##8 ..|
+ | 3b###b ..|
+ | ##2..|
+ | 7#6..|
+ | 2#b..|
+ ->| 7#a..|<-
+ | bc1..|
+ |...........|
+ |...........|
+ |...........|
+ -----------
+
+Char 0x096c '६'
+ Font: #3 lohit_hi (16)
+ Bitmap: 9 x 12
+ Advance: 11
+ Offset: 0 x -2
+ ___________
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ | 3####8 ..|
+ | ##4 22 ..|
+ |1## ..|
+ | 9#a31 ..|
+ | 9###6 ..|
+ | 2#c1 ..|
+ | 197 11 ..|
+ | ##16##3..|
+ | 4#####1..|
+ ->| 2a#7 ..|<-
+ | 1##1..|
+ | 7b3..|
+ |...........|
+ |...........|
+ -----------
+
+Char 0x096e '८'
+ Font: #3 lohit_hi (16)
+ Bitmap: 8 x 10
+ Advance: 11
+ Offset: 2 x 0
+ ___________
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ |.. ac2.|
+ |.. a#8 .|
+ |.. a#8 .|
+ |.. b#8 .|
+ |.. b#8 .|
+ |..9#8 .|
+ |..##1 .|
+ |..##2 22.|
+ |..7##2 8#c.|
+ ->|.. 6####8 .|<-
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ -----------
+
+Char 0x096f '९'
+ Font: #3 lohit_hi (16)
+ Bitmap: 9 x 12
+ Advance: 11
+ Offset: 1 x -1
+ ___________
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ |. 4###b1 .|
+ |.3##23#b .|
+ |.7#9 b#2 .|
+ |.5#c ##1 .|
+ |. #####9 .|
+ |. 3###6 .|
+ |. 4##2 .|
+ |. 5##1 .|
+ |. 5##1 .|
+ |. 6#b .|
+ ->|. ##2.|<-
+ |. b#7 .|
+ |...........|
+ |...........|
+ |...........|
+ -----------
+
+Char 0x0982 'ং'
+ Font: #2 MuktiNarrow (18)
+ Bitmap: 9 x 12
+ Advance: 9
+ Offset: 1 x 0
+ _________
+ |..........|
+ |..........|
+ |..........|
+ |. 4###7 |
+ |. ##4## |
+ |.2##3## |
+ |. b###5 |
+ |. 451 |
+ |. a#2 |
+ |. 5##2 |
+ |. 5##2 |
+ |. 5##2 |
+ |. 5##2 |
+ |. 6##1|
+ ->|. 34 |<-
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ ---------
+
+Char 0x09ac 'ব'
+ Font: #2 MuktiNarrow (18)
+ Bitmap: 11 x 13
+ Advance: 10
+ Offset: -1 x 0
+ __________
+ |...........|
+ |...........|
+ | 1333333321|
+ |1#########a|
+ | a#6 |
+ | 1b##5 |
+ | 6####5 |
+ | 3##c2a#5 |
+ | 4##5 a#5 |
+ | b#a a#5 |
+ | 9#b a#5 |
+ | 8##b#5 |
+ | 7###5 |
+ | 5##5 |
+ ->| 23 |<-
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ ----------
+
+Char 0x09b2 'ল'
+ Font: #2 MuktiNarrow (18)
+ Bitmap: 15 x 13
+ Advance: 13
+ Offset: -1 x 0
+ _____________
+ |...............|
+ |...............|
+ | 1333333333332 |
+ |1#############7|
+ | ##2 |
+ | 3ab4 472##1 |
+ | 8##########1 |
+ | 3## a#a a##1 |
+ | 6#8 1 1##1 |
+ | 4#b ##1 |
+ | a##71 ##1 |
+ | 6#c3 ##1 |
+ | ##1 |
+ | ##1 |
+ ->| 55 |<-
+ |...............|
+ |...............|
+ |...............|
+ |...............|
+ -------------
+
+Char 0x09be 'া'
+ Font: #2 MuktiNarrow (18)
+ Bitmap: 7 x 13
+ Advance: 5
+ Offset: -1 x 0
+ _____
+ |.......|
+ |.......|
+ | 13331 |
+ |1#####3|
+ | 3## |
+ | 2#c |
+ | 2#c |
+ | 2#c |
+ | 2#c |
+ | 2#c |
+ | 2#c |
+ | 2#c |
+ | 2#c |
+ | 2#c |
+ ->| 11 |<-
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ -----
+
+Char 0x0a02 'ਂ'
+ Font: #4 lohit_pa (15)
+ Bitmap: 3 x 2
+ Advance: 0
+ Offset: -3 x 12
+
+ |...|
+ |9#7|
+ |b#9|
+ |...|
+ |...|
+ |...|
+ |...|
+ |...|
+ |...|
+ |...|
+ |...|
+ |...|
+ |...|
+ |...|
+ ->|...|<-
+ |...|
+ |...|
+ |...|
+ |...|
+
+
+Char 0x0a05 'ਅ'
+ Font: #4 lohit_pa (15)
+ Bitmap: 14 x 10
+ Advance: 13
+ Offset: 0 x 0
+ _____________
+ |..............|
+ |..............|
+ |..............|
+ |..............|
+ |..............|
+ |##b ###c|
+ | 7#82c#5 ## |
+ | 1#####9 ## |
+ | ##a2#c28## |
+ | 8## ###### |
+ |1##a 2##5 ## |
+ | c#4 a#c ## |
+ | ##9 ## |
+ | 462 ## |
+ ->| aa |<-
+ |..............|
+ |..............|
+ |..............|
+ |..............|
+ -------------
+
+Char 0x0a06 'ਆ'
+ Font: #4 lohit_pa (15)
+ Bitmap: 18 x 10
+ Advance: 18
+ Offset: 0 x 0
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |..................|
+ |..................|
+ |##b #######c|
+ | 7#82c#5 ## ## |
+ | 1#####9 ## ## |
+ | ##91#c28## ## |
+ | 8## ###### ## |
+ |1##a 2##5 ## 66 |
+ | c#4 a#c ## |
+ | ##9 ## |
+ | 462 ## |
+ ->| aa |<-
+ |..................|
+ |..................|
+ |..................|
+ |..................|
+ ------------------
+
+Char 0x0a07 'ਇ'
+ Font: #4 lohit_pa (15)
+ Bitmap: 15 x 14
+ Advance: 14
+ Offset: 0 x 0
+ ______________
+ |...............|
+ | 1b##b1 |
+ | a#76#9 |
+ | ## 88 |
+ | ## |
+ |##############a|
+ | ## ## ## |
+ | ## b#3 ## |
+ | ## 6##1 ## |
+ | ## b##### |
+ | ## 6##3 |
+ | ## ##3 |
+ | ## a#6 |
+ | ## 1##61793 |
+ ->| ## 1a###3 |<-
+ |...............|
+ |...............|
+ |...............|
+ |...............|
+ --------------
+
+Char 0x0a08 'ਈ'
+ Font: #4 lohit_pa (15)
+ Bitmap: 15 x 14
+ Advance: 14
+ Offset: 0 x 0
+ ______________
+ |...............|
+ | 1b##a1 |
+ | 8#68#9 |
+ | 88 ## |
+ | ## |
+ |##############a|
+ | ## ## ## |
+ | a#5 ## ## |
+ | 3##4 ## ## |
+ | 5###### ## |
+ | 2##6 ## |
+ | c#4 ## |
+ | 8#7 ## |
+ | a#a12992 ## |
+ ->| 6###b1 ## |<-
+ |...............|
+ |...............|
+ |...............|
+ |...............|
+ --------------
+
+Char 0x0a09 'ਉ'
+ Font: #4 lohit_pa (15)
+ Bitmap: 12 x 17
+ Advance: 11
+ Offset: 0 x -3
+ ___________
+ |............|
+ | 19####8 |
+ | 1##8119#c1 |
+ | 8#6 7#8 |
+ | c# 1#c |
+ |###########a|
+ | ## ## |
+ | c# 2#c |
+ | ac1 8#8 |
+ | 7b3 8##2 |
+ | 3#######3 |
+ | 98 1a#8 |
+ | 5a4 ## |
+ | 9#717#a |
+ ->| 7###a1 |<-
+ | |
+ | 451 153 |
+ | 8#####6 |
+ |............|
+ -----------
+
+Char 0x0a0a 'ਊ' bottom
+ Font: #4 lohit_pa (15)
+ Bitmap: 12 x 18
+ Advance: 11
+ Offset: 0 x -4
+ ___________
+ |............|
+ | 19####8 |
+ | 1##8119#c1 |
+ | 8#6 7#8 |
+ | c# 1#c |
+ |###########a|
+ | ## ## |
+ | c# 2#c |
+ | ac1 8#8 |
+ | 7b3 8##2 |
+ | 3#######3 |
+ | 98 1a#8 |
+ | 5a4 ## |
+ | 9#717#a |
+ ->| 7###a1 |<-
+ | 451 253 |
+ | 7#####6 |
+ | 681 285 |
+ | 7#####6 |
+ -----------
+
+Char 0x0a0f 'ਏ'
+ Font: #4 lohit_pa (15)
+ Bitmap: 12 x 14
+ Advance: 10
+ Offset: -1 x 0
+ __________
+ |............|
+ | 3###c2 |
+ | 18bb##4 |
+ | 681 |
+ | 33 |
+ |2##########1|
+ | ## ## |
+ | a#5 ## |
+ | 3##4 ## |
+ | 5###### |
+ | 2##6 |
+ | c#4 |
+ | 9#7 |
+ | a#a12981 |
+ ->| 7###a1 |<-
+ |............|
+ |............|
+ |............|
+ |............|
+ ----------
+
+Char 0x0a10 'ਐ' top
+ Font: #4 lohit_pa (15)
+ Bitmap: 14 x 15
+ Advance: 13
+ Offset: 0 x 0
+ _____________
+ | 7###5 |
+ | 1446c7 |
+ | 285 |
+ | 3#####82 |
+ | 561 395 |
+ |##b ###c|
+ | 7#82c#5 ## |
+ | 1#####9 ## |
+ | ##a2#c28## |
+ | 8## ###### |
+ |1##a 2##5 ## |
+ | c#4 9## ## |
+ | ##a ## |
+ | 7b3 ## |
+ ->| aa |<-
+ |..............|
+ |..............|
+ |..............|
+ |..............|
+ -------------
+
+Char 0x0a13 'ਓ'
+ Font: #4 lohit_pa (15)
+ Bitmap: 12 x 14
+ Advance: 11
+ Offset: 0 x 0
+ ___________
+ |............|
+ | 6######c |
+ | b#b2 |
+ | 8#7 |
+ | c#1 |
+ |###########a|
+ | ## ## |
+ | c# 2#c |
+ | ac1 8#8 |
+ | 7b3 8##2 |
+ | 3#######5 |
+ | 99 1a#8 |
+ | 5a5 ## |
+ | 9#717#a |
+ ->| 7###a1 |<-
+ |............|
+ |............|
+ |............|
+ |............|
+ -----------
+
+Char 0x0a15 'ਕ'
+ Font: #4 lohit_pa (15)
+ Bitmap: 11 x 10
+ Advance: 11
+ Offset: 0 x 0
+ ___________
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ |##########b|
+ | ## |
+ | #c |
+ | 2ca |
+ | 1c###8c7 |
+ | a#62c##3 |
+ | ## 3## |
+ | a#73###6 |
+ | 1b##b4#b |
+ ->| aa |<-
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ -----------
+
+Char 0x0a16 'ਖ'
+ Font: #4 lohit_pa (15)
+ Bitmap: 11 x 10
+ Advance: 10
+ Offset: 0 x 0
+ __________
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ |c##6 ###c|
+ | 3#a ## |
+ | ## ## |
+ | ####### |
+ | 5#9 ## |
+ | a#5 ## |
+ | 1##615## |
+ | 19##### |
+ | ## |
+ ->| aa |<-
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ ----------
+
+Char 0x0a17 'ਗ'
+ Font: #4 lohit_pa (15)
+ Bitmap: 13 x 10
+ Advance: 12
+ Offset: -1 x 0
+ ____________
+ |.............|
+ |.............|
+ |.............|
+ |.............|
+ |.............|
+ |2############|
+ | ## ## |
+ | ## ## |
+ | ## ## |
+ | 4##### ## |
+ | c#2 ## ## |
+ | c# ## ## |
+ | 6#7 ## ## |
+ | a#7#c ## |
+ ->| 9##4 aa |<-
+ |.............|
+ |.............|
+ |.............|
+ |.............|
+ ------------
+
+Char 0x0a18 'ਘ'
+ Font: #4 lohit_pa (15)
+ Bitmap: 13 x 10
+ Advance: 12
+ Offset: 0 x 0
+ ____________
+ |.............|
+ |.............|
+ |.............|
+ |.............|
+ |.............|
+ |###5 8#7 ###c|
+ | 4#a ##c ## |
+ | ##1### ## |
+ | 1#c1##c ## |
+ | 6#9 c#a ## |
+ | ##3 9#7 ## |
+ | 8##5###7## |
+ | 6###b#### |
+ | ## |
+ ->| aa |<-
+ |.............|
+ |.............|
+ |.............|
+ |.............|
+ ------------
+
+Char 0x0a1a 'ਚ'
+ Font: #4 lohit_pa (15)
+ Bitmap: 11 x 10
+ Advance: 11
+ Offset: 0 x 0
+ ___________
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ |###########|
+ | ## |
+ | ## |
+ | 3a7 ## |
+ |2### ## |
+ |6######## |
+ | c#1 ## |
+ | 6#8 ## |
+ | 9#a4#b |
+ ->| 6###3 |<-
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ -----------
+
+Char 0x0a1b 'ਛ'
+ Font: #4 lohit_pa (15)
+ Bitmap: 12 x 10
+ Advance: 11
+ Offset: 0 x 0
+ ___________
+ |............|
+ |............|
+ |............|
+ |............|
+ |............|
+ |###########6|
+ | ## |
+ | ## |
+ | 4####### |
+ | c#2 |
+ | ##1 |
+ | 2#######4 |
+ | b#4 ##2#c |
+ | c#3 ##2#c |
+ ->| 3#######4 |<-
+ |............|
+ |............|
+ |............|
+ |............|
+ -----------
+
+Char 0x0a1c 'ਜ'
+ Font: #4 lohit_pa (15)
+ Bitmap: 11 x 10
+ Advance: 10
+ Offset: 0 x 0
+ __________
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ |##########a|
+ | ## |
+ | ## |
+ | 65 ## |
+ | a## ## |
+ |2######## |
+ | ## ## |
+ | ## ## |
+ | ## ## |
+ ->| 99 99 |<-
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ ----------
+
+Char 0x0a1d 'ਝ'
+ Font: #4 lohit_pa (15)
+ Bitmap: 10 x 10
+ Advance: 10
+ Offset: 0 x 0
+ __________
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |#########c|
+ | a#2 ## |
+ | 4#9 3#a |
+ | 8#81b#5 |
+ | 7###### |
+ | 242 29#a |
+ | 1## |
+ | 7##a7##8 |
+ | 4#####7 |
+ ->| 8#b |<-
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ ----------
+
+Char 0x0a1f 'ਟ'
+ Font: #4 lohit_pa (15)
+ Bitmap: 10 x 10
+ Advance: 10
+ Offset: 0 x 0
+ __________
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |#########c|
+ | ## |
+ | ## |
+ | 7#### |
+ | 5##c51 |
+ | 6##1 |
+ |1##1 |
+ | 9#7 |
+ | b#913a91|
+ ->| 7###9 |<-
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ ----------
+
+Char 0x0a20 'ਠ'
+ Font: #4 lohit_pa (15)
+ Bitmap: 11 x 10
+ Advance: 10
+ Offset: 0 x 0
+ __________
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ |##########a|
+ | ## |
+ | ## |
+ | 4##6 |
+ | 7##c##2 |
+ | 5##1 2##3 |
+ | c#3 3#b |
+ | ## 1#c |
+ | 7##3 3##6 |
+ ->| 5#####4 |<-
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ ----------
+
+Char 0x0a21 'ਡ'
+ Font: #4 lohit_pa (15)
+ Bitmap: 11 x 10
+ Advance: 10
+ Offset: 0 x 0
+ __________
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ |##########9|
+ | ## |
+ | 2#c |
+ | 2c#####6 |
+ | 2######2 |
+ | 6#a |
+ | 4###91## |
+ | c#46###b |
+ | b#417##3 |
+ ->| 2####b2 |<-
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ ----------
+
+Char 0x0a22 'ਢ'
+ Font: #4 lohit_pa (15)
+ Bitmap: 13 x 10
+ Advance: 11
+ Offset: -1 x 0
+ ___________
+ |.............|
+ |.............|
+ |.............|
+ |.............|
+ |.............|
+ |2###########1|
+ | ## |
+ | 165 ## |
+ | b## ## |
+ | 1######### |
+ | ## |
+ | a#3 |
+ | 5#a5###6 |
+ | 9##81ca |
+ ->| 6####2 |<-
+ |.............|
+ |.............|
+ |.............|
+ |.............|
+ -----------
+
+Char 0x0a23 'ਣ'
+ Font: #4 lohit_pa (15)
+ Bitmap: 13 x 10
+ Advance: 11
+ Offset: -1 x 0
+ ___________
+ |.............|
+ |.............|
+ |.............|
+ |.............|
+ |.............|
+ |2###########1|
+ | a#9 |
+ | 9##2 |
+ | 1###9 |
+ | 5####9781 |
+ | 7##25b6 |
+ | 5#c |
+ | b#7 11 |
+ | 9##3 5c91 |
+ ->| 4####6 |<-
+ |.............|
+ |.............|
+ |.............|
+ |.............|
+ -----------
+
+Char 0x0a24 'ਤ'
+ Font: #4 lohit_pa (15)
+ Bitmap: 11 x 10
+ Advance: 10
+ Offset: 0 x 0
+ __________
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ |##########8|
+ | 2#a |
+ | 2#a |
+ | 7#7 |
+ | 2######1 |
+ | 3######2 |
+ | 5#b |
+ |362 ## |
+ | 7#a219#a |
+ ->| 3####a1 |<-
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ ----------
+
+Char 0x0a25 'ਥ'
+ Font: #4 lohit_pa (15)
+ Bitmap: 12 x 10
+ Advance: 10
+ Offset: -1 x 0
+ __________
+ |............|
+ |............|
+ |............|
+ |............|
+ |............|
+ |2##########3|
+ | b#1 ## |
+ | 7c5 ## |
+ | 7#6 ## |
+ | b###### |
+ | 3#c ## |
+ | 9#814## |
+ | 6##### |
+ | ## |
+ ->| aa |<-
+ |............|
+ |............|
+ |............|
+ |............|
+ ----------
+
+Char 0x0a26 'ਦ'
+ Font: #4 lohit_pa (15)
+ Bitmap: 13 x 10
+ Advance: 11
+ Offset: -1 x 0
+ ___________
+ |.............|
+ |.............|
+ |.............|
+ |.............|
+ |.............|
+ |2###########1|
+ | ## |
+ | ## |
+ | 66 ## |
+ | a## ## |
+ | 1######### |
+ | ## |
+ | 9#5 |
+ | 1##6 2981 |
+ ->| 1b###c2 |<-
+ |.............|
+ |.............|
+ |.............|
+ |.............|
+ -----------
+
+Char 0x0a27 'ਧ'
+ Font: #4 lohit_pa (15)
+ Bitmap: 12 x 10
+ Advance: 10
+ Offset: -1 x 0
+ __________
+ |............|
+ |............|
+ |............|
+ |............|
+ |............|
+ |2##########3|
+ | 6#7 ## |
+ | ## ## |
+ | 2#c ## |
+ | 8#8 ## |
+ | 1##3 ## |
+ | 4##35## |
+ | 3##### |
+ | ## |
+ ->| aa |<-
+ |............|
+ |............|
+ |............|
+ |............|
+ ----------
+
+Char 0x0a28 'ਨ'
+ Font: #4 lohit_pa (15)
+ Bitmap: 11 x 10
+ Advance: 10
+ Offset: 0 x 0
+ __________
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ |##########7|
+ | ## |
+ | ## |
+ | 7##a1 |
+ | a##7##5 |
+ | 7#c 1##4 |
+ | c#2 3#b |
+ | ## ## |
+ | 9#7 1a#7 |
+ ->| 1b#63##7 |<-
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ ----------
+
+Char 0x0a2a 'ਪ'
+ Font: #4 lohit_pa (15)
+ Bitmap: 11 x 10
+ Advance: 10
+ Offset: -1 x 0
+ __________
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ |1###1 ###c|
+ | 7#9 ## |
+ | 1## ## |
+ | 2#c ## |
+ | 8#7 ## |
+ | ##2 ## |
+ | 4##35## |
+ | 3##### |
+ | ## |
+ ->| aa |<-
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ ----------
+
+Char 0x0a2b 'ਫ'
+ Font: #4 lohit_pa (15)
+ Bitmap: 11 x 10
+ Advance: 10
+ Offset: -1 x 0
+ __________
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ |1##########|
+ | ## |
+ | ## |
+ | 2###### |
+ | a#6 |
+ | ## |
+ | bc8####2 |
+ | 4##815#b |
+ | 6#a23#c |
+ ->| 3####3 |<-
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ ----------
+
+Char 0x0a2c 'ਬ'
+ Font: #4 lohit_pa (15)
+ Bitmap: 11 x 10
+ Advance: 10
+ Offset: 0 x 0
+ __________
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ |##########b|
+ | ## ## |
+ | 8#6 ## |
+ | 1##81 ## |
+ | 3###### |
+ | 2##5 ## |
+ | a#8 ## |
+ | 2##63b## |
+ | 1b##### |
+ ->| aa |<-
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ ----------
+
+Char 0x0a2d 'ਭ'
+ Font: #4 lohit_pa (15)
+ Bitmap: 11 x 10
+ Advance: 10
+ Offset: -1 x 0
+ __________
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ |2##########|
+ | ## |
+ | ## |
+ | 3###9#c |
+ | c#36##8 |
+ | c#47##7 |
+ | 3###8#c |
+ | 1#c |
+ | 19b21a#7 |
+ ->| 1b###7 |<-
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ ----------
+
+Char 0x0a2e 'ਮ'
+ Font: #4 lohit_pa (15)
+ Bitmap: 12 x 10
+ Advance: 11
+ Offset: -1 x 0
+ ___________
+ |............|
+ |............|
+ |............|
+ |............|
+ |............|
+ |3###5 ###c|
+ | 3#a ## |
+ | ## ## |
+ | ## ## |
+ | ## ## |
+ | 1####### |
+ | 8## ## |
+ | ### ## |
+ | c#9 ## |
+ ->| 11 aa |<-
+ |............|
+ |............|
+ |............|
+ |............|
+ -----------
+
+Char 0x0a2f 'ਯ'
+ Font: #4 lohit_pa (15)
+ Bitmap: 13 x 10
+ Advance: 12
+ Offset: -1 x 0
+ ____________
+ |.............|
+ |.............|
+ |.............|
+ |.............|
+ |.............|
+ |1############|
+ | 5#a ## |
+ | ## ## |
+ | ## ## |
+ | 4#a ##### |
+ | 9#8 ## ## |
+ | 1##7## ## |
+ | 1a### ## |
+ | ## |
+ ->| aa |<-
+ |.............|
+ |.............|
+ |.............|
+ |.............|
+ ------------
+
+Char 0x0a30 'ਰ'
+ Font: #4 lohit_pa (15)
+ Bitmap: 10 x 10
+ Advance: 10
+ Offset: 0 x 0
+ __________
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |##########|
+ | ## |
+ | ## |
+ | ## |
+ | 4###### |
+ | ##2 ## |
+ | b#1 ## |
+ | 4#a ## |
+ | 7#b3#c |
+ ->| 5###4 |<-
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ ----------
+
+Char 0x0a32 'ਲ'
+ Font: #4 lohit_pa (15)
+ Bitmap: 12 x 10
+ Advance: 12
+ Offset: 0 x 0
+ ____________
+ |............|
+ |............|
+ |............|
+ |............|
+ |............|
+ |###########c|
+ | 7#7 7#6 |
+ | 2#b b#2 |
+ | b#55#b |
+ | 2########1 |
+ | a#43##36#a |
+ | ## ## |
+ | b#2 3#b |
+ | 4##3 3##4 |
+ ->| 4##99##3 |<-
+ |............|
+ |............|
+ |............|
+ |............|
+ ------------
+
+Char 0x0a35 'ਵ'
+ Font: #4 lohit_pa (15)
+ Bitmap: 11 x 10
+ Advance: 10
+ Offset: 0 x 0
+ __________
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ |##########7|
+ | ## |
+ | ## |
+ | 4####### |
+ | c#1 |
+ | c#1 |
+ | 5####### |
+ | c#1 |
+ | 7#9 |
+ ->| 8#### |<-
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ ----------
+
+Char 0x0a36 'ਸ਼'
+ Font: #4 lohit_pa (15)
+ Bitmap: 13 x 10
+ Advance: 11
+ Offset: -1 x 0
+ ___________
+ |.............|
+ |.............|
+ |.............|
+ |.............|
+ |.............|
+ |2###########1|
+ | a#3 ## |
+ | 5#8 ## |
+ | 1#b ## |
+ | cc ## |
+ | ####### |
+ | 8##1 ## |
+ | c## ## |
+ | c#a5#b## |
+ ->| 11 285aa |<-
+ |.............|
+ |.............|
+ |.............|
+ |.............|
+ -----------
+
+Char 0x0a38 'ਸ'
+ Font: #4 lohit_pa (15)
+ Bitmap: 13 x 10
+ Advance: 11
+ Offset: -1 x 0
+ ___________
+ |.............|
+ |.............|
+ |.............|
+ |.............|
+ |.............|
+ |2###########1|
+ | a#3 ## |
+ | 5#8 ## |
+ | 1#b ## |
+ | cc ## |
+ | ####### |
+ | 8##1 ## |
+ | c## ## |
+ | c#a ## |
+ ->| 11 aa |<-
+ |.............|
+ |.............|
+ |.............|
+ |.............|
+ -----------
+
+Char 0x0a39 'ਹ'
+ Font: #4 lohit_pa (15)
+ Bitmap: 12 x 10
+ Advance: 10
+ Offset: -1 x 0
+ __________
+ |............|
+ |............|
+ |............|
+ |............|
+ |............|
+ |2##########3|
+ | ## |
+ | ## |
+ | ## |
+ | 5##9 ## |
+ | ##2 ## |
+ | b#3 ## |
+ | 3##1 ## |
+ | 4##5#c |
+ ->| 2###5 |<-
+ |............|
+ |............|
+ |............|
+ |............|
+ ----------
+
+Char 0x0a3c '਼'
+ Font: #4 lohit_pa (15)
+ Bitmap: 3 x 2
+ Advance: 0
+ Offset: -5 x -3
+
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ ->|.....|<-
+ |.....|
+ |b#5..|
+ |582..|
+ |.....|
+
+
+Char 0x0a3e 'ਾ'
+ Font: #4 lohit_pa (15)
+ Bitmap: 6 x 6
+ Advance: 5
+ Offset: 0 x 4
+ _____
+ |......|
+ |......|
+ |......|
+ |......|
+ |......|
+ |#####b|
+ | ## |
+ | ## |
+ | ## |
+ | ## |
+ | 66 |
+ |......|
+ |......|
+ |......|
+ ->|......|<-
+ |......|
+ |......|
+ |......|
+ |......|
+ -----
+
+Char 0x0a3f 'ਿ'
+ Font: #4 lohit_pa (15)
+ Bitmap: 8 x 14
+ Advance: 5
+ Offset: 0 x 0
+ _____
+ |........|
+ | 1b##b1|
+ | a#76#9|
+ | ## 88|
+ | ## |
+ |#####b |
+ | ## |
+ | ## |
+ | ## |
+ | ## |
+ | ## |
+ | ## |
+ | ## |
+ | ## |
+ ->| aa |<-
+ |........|
+ |........|
+ |........|
+ |........|
+ -----
+
+Char 0x0a40 'ੀ'
+ Font: #4 lohit_pa (15)
+ Bitmap: 8 x 14
+ Advance: 5
+ Offset: -3 x 0
+ _____
+ |........|
+ |1b##b1 |
+ |9#77#9 |
+ |## ## |
+ |bb ## |
+ | b#####|
+ | ## |
+ | ## |
+ | ## |
+ | ## |
+ | ## |
+ | ## |
+ | ## |
+ | ## |
+ ->| aa |<-
+ |........|
+ |........|
+ |........|
+ |........|
+ -----
+
+Char 0x0a41 'ੁ'
+ Font: #4 lohit_pa (15)
+ Bitmap: 7 x 2
+ Advance: 0
+ Offset: -8 x -3
+
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ ->|........|<-
+ |........|
+ |561 164.|
+ |8#####6.|
+ |........|
+
+
+Char 0x0a42 'ੂ' bottom
+ Font: #4 lohit_pa (15)
+ Bitmap: 7 x 4
+ Advance: 0
+ Offset: -8 x -4
+
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ ->|........|<-
+ |572 275.|
+ |7#####6.|
+ |681 275.|
+ |7#####6.|
+
+
+Char 0x0a47 'ੇ'
+ Font: #4 lohit_pa (15)
+ Bitmap: 7 x 4
+ Advance: 0
+ Offset: -8 x 10
+
+ |........|
+ |9###5 .|
+ |4ab##7 .|
+ | 483.|
+ | 44.|
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ ->|........|<-
+ |........|
+ |........|
+ |........|
+ |........|
+
+
+Char 0x0a48 'ੈ' top
+ Font: #4 lohit_pa (15)
+ Bitmap: 7 x 5
+ Advance: 0
+ Offset: -8 x 10
+
+ |b##a1 .|
+ |244a91 .|
+ | 77 .|
+ |8####a5.|
+ |363 2a8.|
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ ->|........|<-
+ |........|
+ |........|
+ |........|
+ |........|
+
+
+Char 0x0a4b 'ੋ'
+ Font: #4 lohit_pa (15)
+ Bitmap: 7 x 4
+ Advance: 0
+ Offset: -8 x 10
+
+ |........|
+ |44 .|
+ |8c8###3.|
+ |3###8#9.|
+ | 88.|
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ ->|........|<-
+ |........|
+ |........|
+ |........|
+ |........|
+
+
+Char 0x0a4c 'ੌ' top
+ Font: #4 lohit_pa (15)
+ Bitmap: 8 x 5
+ Advance: 0
+ Offset: -7 x 10
+
+ |263 |
+ | 9#####2|
+ | c#5c8|
+ | 9a286|
+ | 353 |
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ ->|........|<-
+ |........|
+ |........|
+ |........|
+ |........|
+
+
+Char 0x0a4d '੍' bottom
+ Font: #4 lohit_pa (15)
+ Bitmap: 8 x 4
+ Advance: 0
+ Offset: -4 x -4
+
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ ->|........|<-
+ |4###3 |
+ | 57b#5 |
+ | 5#7 |
+ | 274|
+
+
+Char 0x0a5c 'ੜ'
+ Font: #4 lohit_pa (15)
+ Bitmap: 13 x 10
+ Advance: 11
+ Offset: -1 x 0
+ ___________
+ |.............|
+ |.............|
+ |.............|
+ |.............|
+ |.............|
+ |2###########2|
+ | 1#c |
+ | 3#b |
+ | 4#######3 |
+ | 4#######3 |
+ | 4#b |
+ | ## |
+ | 2##c512b#9 |
+ | 9#######1 |
+ ->| 1cc 1c#2 |<-
+ |.............|
+ |.............|
+ |.............|
+ |.............|
+ -----------
+
+Char 0x0a70 'ੰ' top
+ Font: #4 lohit_pa (15)
+ Bitmap: 5 x 4
+ Advance: 0
+ Offset: -4 x 11
+
+ |4###3|
+ |b#4#b|
+ |99 99|
+ |36553|
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ ->|.....|<-
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+
+
+Char 0x0a71 'ੱ' top
+ Font: #4 lohit_pa (15)
+ Bitmap: 7 x 4
+ Advance: 0
+ Offset: -5 x 11
+
+ |11 11|
+ |99 197|
+ |7#72b#2|
+ | 8###4 |
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ ->|.......|<-
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+
+
+Char 0x0a82 'ં'
+ Font: #5 lohit_gu (15)
+ Bitmap: 3 x 2
+ Advance: 0
+ Offset: -2 x 11
+
+ |...|
+ |...|
+ |a#a|
+ |##a|
+ |...|
+ |...|
+ |...|
+ |...|
+ |...|
+ |...|
+ |...|
+ |...|
+ |...|
+ |...|
+ ->|...|<-
+ |...|
+ |...|
+ |...|
+ |...|
+
+
+Char 0x0a85 'અ'
+ Font: #5 lohit_gu (15)
+ Bitmap: 13 x 9
+ Advance: 14
+ Offset: -1 x 0
+ ______________
+ |...............|
+ |...............|
+ |...............|
+ |...............|
+ |...............|
+ |...............|
+ |3####6 5#9..|
+ | 211c#6 5#9..|
+ | 5#89c25#9..|
+ | 1b#4b#68#9..|
+ |5####7 b####9..|
+ | 1a#6 ##15#9..|
+ | 3##a##8 5#9..|
+ | 2a##5 5#9..|
+ ->| 5#9..|<-
+ |...............|
+ |...............|
+ |...............|
+ |...............|
+ --------------
+
+Char 0x0a86 'આ'
+ Font: #5 lohit_gu (15)
+ Bitmap: 18 x 9
+ Advance: 18
+ Offset: -1 x 0
+ __________________
+ |...................|
+ |...................|
+ |...................|
+ |...................|
+ |...................|
+ |...................|
+ |3####6 5#9 9#5.|
+ | 111c#6 5#9 9#5.|
+ | 5#89c25#9 9#5.|
+ | 1b#4b#68#9 9#5.|
+ |5####5 b####9 9#5.|
+ | 1a#8 ## 5#9 9#5.|
+ | 3##a##8 5#9 9#5.|
+ | 3a##5 5#9 9#5.|
+ ->| 5#9 9#5.|<-
+ |...................|
+ |...................|
+ |...................|
+ |...................|
+ ------------------
+
+Char 0x0a87 'ઇ'
+ Font: #5 lohit_gu (15)
+ Bitmap: 10 x 12
+ Advance: 11
+ Offset: 1 x 0
+ ___________
+ |...........|
+ |...........|
+ |...........|
+ |. 7#9|
+ |. 5#c |
+ |. b#4 |
+ |.1a### ##1 |
+ |.9#7 ##1 |
+ |.a#5 c#2 |
+ |.3###6 b#3 |
+ |.2###6 b#3 |
+ |.9#6 b#3 |
+ |.b#4 1## |
+ |.6##21b#6 |
+ ->|. 5####5 |<-
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ -----------
+
+Char 0x0a88 'ઈ'
+ Font: #5 lohit_gu (15)
+ Bitmap: 12 x 12
+ Advance: 11
+ Offset: 0 x 0
+ ___________
+ |............|
+ |............|
+ |............|
+ | 2###3|
+ | b#6#c|
+ | 2#c 55|
+ | 4###74#a |
+ |1##1 4#a |
+ |1## 3#b |
+ | 6##933#b |
+ | 6##a42#c |
+ |1## 3#b |
+ |3#b 7#8 |
+ | b#7 3##1 |
+ ->| 8###c2 |<-
+ |............|
+ |............|
+ |............|
+ |............|
+ -----------
+
+Char 0x0a89 'ઉ'
+ Font: #5 lohit_gu (15)
+ Bitmap: 10 x 12
+ Advance: 11
+ Offset: 1 x 0
+ ___________
+ |...........|
+ |...........|
+ |...........|
+ |. 2b#b |
+ |. 4##2 |
+ |. 3#c |
+ |. b#6###c2 |
+ |.2#c 4#c |
+ |.5#9 2## |
+ |.5#9 5###5 |
+ |.4#a 4a##7 |
+ |.1## c#3|
+ |. a#7 a#4|
+ |. 2##6 4##1|
+ ->|. 2b###c2 |<-
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ -----------
+
+Char 0x0a8f 'એ'
+ Font: #5 lohit_gu (15)
+ Bitmap: 13 x 13
+ Advance: 14
+ Offset: -1 x 0
+ ______________
+ |...............|
+ |...............|
+ | 3##a1 ..|
+ | 5##6 ..|
+ | 1c#8 ..|
+ | 8#a..|
+ |3####6 5##..|
+ | 111c#6 5#9..|
+ | 5#89c25#9..|
+ | 1b#4b#68#9..|
+ |5####5 b####9..|
+ | 1a#8 ## 5#9..|
+ | 3##a##8 5#9..|
+ | 3a##5 5#9..|
+ ->| 5#9..|<-
+ |...............|
+ |...............|
+ |...............|
+ |...............|
+ --------------
+
+Char 0x0a93 'ઓ'
+ Font: #5 lohit_gu (15)
+ Bitmap: 18 x 13
+ Advance: 18
+ Offset: -1 x 0
+ __________________
+ |...................|
+ |...................|
+ | c#c3 .|
+ | 3##8 .|
+ | 8#b1 .|
+ | 5##1.|
+ |3####6 5#9 c#6.|
+ | 111c#6 5#9 9#5.|
+ | 5#89c25#9 9#5.|
+ | 1b#4b#68#9 9#5.|
+ |5####5 b####9 9#5.|
+ | 1a#8 ## 5#9 9#5.|
+ | 3##a##8 5#9 9#5.|
+ | 3a##5 5#9 9#5.|
+ ->| 5#9 9#5.|<-
+ |...................|
+ |...................|
+ |...................|
+ |...................|
+ ------------------
+
+Char 0x0a95 'ક'
+ Font: #5 lohit_gu (15)
+ Bitmap: 9 x 9
+ Advance: 10
+ Offset: 1 x 0
+ __________
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |. 4#####4 |
+ |.2##2 11 |
+ |.1##2 43 |
+ |. 2#####91|
+ |.3b####6 |
+ |.7c5 1c#7 |
+ |. 3#c |
+ |.9#5 9#9 |
+ ->|.19####8 |<-
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ ----------
+
+Char 0x0a96 'ખ'
+ Font: #5 lohit_gu (15)
+ Bitmap: 12 x 9
+ Advance: 12
+ Offset: -1 x 0
+ ____________
+ |.............|
+ |.............|
+ |.............|
+ |.............|
+ |.............|
+ |.............|
+ |3##a c#2.|
+ | ##1 11 c#2.|
+ | ##11## c#2.|
+ | ##11#####2.|
+ | ##11##3##2.|
+ | c#43#c c#2.|
+ | 4####5 c#2.|
+ | 2772 c#2.|
+ ->| c#2.|<-
+ |.............|
+ |.............|
+ |.............|
+ |.............|
+ ------------
+
+Char 0x0a97 'ગ'
+ Font: #5 lohit_gu (15)
+ Bitmap: 11 x 9
+ Advance: 11
+ Offset: -1 x 0
+ ___________
+ |............|
+ |............|
+ |............|
+ |............|
+ |............|
+ |............|
+ | 3####5 8#6.|
+ | 1533##48#6.|
+ | 5#a8#6.|
+ | 4#a8#6.|
+ |176 a#78#6.|
+ | 8####a 8#6.|
+ | 1783 8#6.|
+ | 8#6.|
+ ->| 8#6.|<-
+ |............|
+ |............|
+ |............|
+ |............|
+ -----------
+
+Char 0x0a98 'ઘ'
+ Font: #5 lohit_gu (15)
+ Bitmap: 10 x 9
+ Advance: 11
+ Offset: 0 x 0
+ ___________
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ | 6###7 ##1.|
+ |2##1 ##1.|
+ |2##1 ##1.|
+ | 7###9 ##1.|
+ | c#61 ##1.|
+ |3#b ##1.|
+ |2##1 1c##1.|
+ | 5#######1.|
+ ->| 463 ##1.|<-
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ -----------
+
+Char 0x0a9a 'ચ'
+ Font: #5 lohit_gu (15)
+ Bitmap: 12 x 9
+ Advance: 12
+ Offset: 0 x 0
+ ____________
+ |............|
+ |............|
+ |............|
+ |............|
+ |............|
+ |............|
+ |1b####2 c#3|
+ | 33 6## c#3|
+ | c#3 c#3|
+ | 3## c#3|
+ | 9####3 3##3|
+ | 3c#9 b##3|
+ | 2##31b###3|
+ | 4####6c#3|
+ ->| c#3|<-
+ |............|
+ |............|
+ |............|
+ |............|
+ ------------
+
+Char 0x0a9b 'છ'
+ Font: #5 lohit_gu (15)
+ Bitmap: 11 x 9
+ Advance: 12
+ Offset: 1 x 0
+ ____________
+ |............|
+ |............|
+ |............|
+ |............|
+ |............|
+ |............|
+ |. 9##a4###4 |
+ |.7#8 1##2##1|
+ |.8#7 4#9 a#4|
+ |.2###b#c1##4|
+ |.2##b46####3|
+ |.8#7 cc |
+ |.9#6 5#8 |
+ |.3##2 5#b |
+ ->|. 2b####8 |<-
+ |............|
+ |............|
+ |............|
+ |............|
+ ------------
+
+Char 0x0a9c 'જ'
+ Font: #5 lohit_gu (15)
+ Bitmap: 11 x 9
+ Advance: 12
+ Offset: 1 x 0
+ ____________
+ |............|
+ |............|
+ |............|
+ |............|
+ |............|
+ |............|
+ |.3###7 6#7|
+ |.c#49#a 4#c |
+ |.## 9#9#c1 |
+ |.9###8b##2 |
+ |. 4951##c |
+ |. 9###6 |
+ |. 1#c5#b |
+ |. 1#c6#c |
+ ->|. 6###4 |<-
+ |............|
+ |............|
+ |............|
+ |............|
+ ------------
+
+Char 0x0a9d 'ઝ'
+ Font: #5 lohit_gu (15)
+ Bitmap: 11 x 9
+ Advance: 12
+ Offset: 0 x 0
+ ____________
+ |............|
+ |............|
+ |............|
+ |............|
+ |............|
+ |............|
+ |2a##7 7c4.|
+ |6a6a#b a#7 .|
+ | a###5 .|
+ | 5###81 .|
+ | 4##b##3.|
+ | 8#7 3#a.|
+ | 4##1 1#c.|
+ |a####41 6#8.|
+ ->| 121 7###9 .|<-
+ |............|
+ |............|
+ |............|
+ |............|
+ ------------
+
+Char 0x0a9f 'ટ'
+ Font: #5 lohit_gu (15)
+ Bitmap: 9 x 9
+ Advance: 9
+ Offset: -1 x 0
+ _________
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ | 8###9 .|
+ | 286 a#6 .|
+ | 8#5 .|
+ | 18##6 .|
+ | 5##5 .|
+ |2##1 .|
+ |4#a 362.|
+ |1##3 3##1.|
+ ->| 2c###b1 .|<-
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ ---------
+
+Char 0x0aa0 'ઠ'
+ Font: #5 lohit_gu (15)
+ Bitmap: 10 x 9
+ Advance: 10
+ Offset: -1 x 0
+ __________
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ | a#####2 .|
+ | 5#9 .|
+ | a#c83 .|
+ | a####c2 .|
+ | 9##2 1ba .|
+ |1##7 781.|
+ | ##6 67 .|
+ | 8## 76 .|
+ ->| 6##ca5 .|<-
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ ----------
+
+Char 0x0aa1 'ડ'
+ Font: #5 lohit_gu (15)
+ Bitmap: 9 x 9
+ Advance: 10
+ Offset: 0 x 0
+ __________
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ | 1b####9 .|
+ | a#6 .|
+ | c#2 .|
+ | 7##8741 .|
+ | 3a####3.|
+ |33 4#c.|
+ |8#5 2#c.|
+ |1##5 b#6.|
+ ->| 8####5 .|<-
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ ----------
+
+Char 0x0aa2 'ઢ'
+ Font: #5 lohit_gu (15)
+ Bitmap: 9 x 9
+ Advance: 10
+ Offset: 1 x 0
+ __________
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |. 3####7 |
+ |. 121 b#5 |
+ |. 2##3 |
+ |. 6###3 |
+ |.2##b322 |
+ |.a#51c###1|
+ |.c#26c5c#6|
+ |.7#b3aa##2|
+ ->|. 6####c2 |<-
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ ----------
+
+Char 0x0aa3 'ણ'
+ Font: #5 lohit_gu (15)
+ Bitmap: 12 x 9
+ Advance: 15
+ Offset: 1 x 0
+ _______________
+ |...............|
+ |...............|
+ |...............|
+ |...............|
+ |...............|
+ |...............|
+ |.8#64###a ##..|
+ |.8#6 1 7#a ##..|
+ |.8#6 ##1##..|
+ |.8#6 ##1##..|
+ |.8#6 7#a ##..|
+ |.7#77###b1 ##..|
+ |.4#b 241 ##..|
+ |. 9#b1 364##..|
+ ->|. 5#####b3##..|<-
+ |...............|
+ |...............|
+ |...............|
+ |...............|
+ ---------------
+
+Char 0x0aa4 'ત'
+ Font: #5 lohit_gu (15)
+ Bitmap: 9 x 9
+ Advance: 11
+ Offset: 1 x 0
+ ___________
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ |. 3#c.|
+ |. 49ac#c.|
+ |. 5######c.|
+ |.5#c1 3#c.|
+ |.b#3 3#c.|
+ |.b#3 3#c.|
+ |.8#7 3#c.|
+ |.1##4 3#c.|
+ ->|. 1a##33#c.|<-
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ -----------
+
+Char 0x0aa5 'થ'
+ Font: #5 lohit_gu (15)
+ Bitmap: 10 x 10
+ Advance: 12
+ Offset: -1 x 0
+ ____________
+ |.............|
+ |.............|
+ |.............|
+ |.............|
+ |.............|
+ | 3###a3 ...|
+ | c#c 772#c...|
+ | b#c 772#c...|
+ | 3####82#c...|
+ |3a###b 2#c...|
+ |5##72 2#c...|
+ |1##1 8#c...|
+ | 4##54###c...|
+ | 3c###7#c...|
+ ->| 2#c...|<-
+ |.............|
+ |.............|
+ |.............|
+ |.............|
+ ------------
+
+Char 0x0aa6 'દ'
+ Font: #5 lohit_gu (15)
+ Bitmap: 9 x 9
+ Advance: 9
+ Offset: 1 x 0
+ _________
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |. 5####8 |
+ |.2##1 |
+ |.3#c |
+ |. 8###a |
+ |.3##731 |
+ |.a#5 |
+ |.b#4 23 |
+ |.5##2 4##1|
+ ->|. 4####c2 |<-
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ ---------
+
+Char 0x0aa7 'ધ'
+ Font: #5 lohit_gu (15)
+ Bitmap: 10 x 10
+ Advance: 12
+ Offset: 1 x 0
+ ____________
+ |............|
+ |............|
+ |............|
+ |............|
+ |............|
+ |. 6##8 .|
+ |.3####6 ##1.|
+ |.###5 ##1.|
+ |.c#1 ##1.|
+ |.154 ##1.|
+ |.6###c ##1.|
+ |.c##51 ##1.|
+ |.9c3 3##1.|
+ |.154 11##1.|
+ ->|. 11 ##1.|<-
+ |............|
+ |............|
+ |............|
+ |............|
+ ------------
+
+Char 0x0aa8 'ન'
+ Font: #5 lohit_gu (15)
+ Bitmap: 10 x 9
+ Advance: 12
+ Offset: 1 x 0
+ ____________
+ |............|
+ |............|
+ |............|
+ |............|
+ |............|
+ |............|
+ |. 9#5.|
+ |. 9#5.|
+ |. 5#######5.|
+ |.5#a6##3a#5.|
+ |.bc1 a#79#5.|
+ |.bb 9#89#5.|
+ |.7#62##49#5.|
+ |. 7###5 9#5.|
+ ->|. 9#5.|<-
+ |............|
+ |............|
+ |............|
+ |............|
+ ------------
+
+Char 0x0aaa 'પ'
+ Font: #5 lohit_gu (15)
+ Bitmap: 10 x 9
+ Advance: 11
+ Offset: -1 x 0
+ ___________
+ |............|
+ |............|
+ |............|
+ |............|
+ |............|
+ |............|
+ |6##8 4#a..|
+ | ##1 4#a..|
+ | ##2 4#a..|
+ | ##2 4#a..|
+ | ##3 6#a..|
+ | 7#c14##a..|
+ | 6#####a..|
+ | 4#a..|
+ ->| 4#a..|<-
+ |............|
+ |............|
+ |............|
+ |............|
+ -----------
+
+Char 0x0aab 'ફ'
+ Font: #5 lohit_gu (15)
+ Bitmap: 8 x 11
+ Advance: 9
+ Offset: 1 x -2
+ _________
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |. 3####c1|
+ |.1##3 11 |
+ |.1##1 242|
+ |. 5#####3|
+ |.3#####2 |
+ |.583 5##3|
+ |. 8#7|
+ |.7a4 3##3|
+ ->|.1a###c3 |<-
+ |. c#5 |
+ |. 1a#9 |
+ |.........|
+ |.........|
+ ---------
+
+Char 0x0aac 'બ'
+ Font: #5 lohit_gu (15)
+ Bitmap: 11 x 9
+ Advance: 13
+ Offset: 1 x 0
+ _____________
+ |.............|
+ |.............|
+ |.............|
+ |.............|
+ |.............|
+ |.............|
+ |. 4###9 5#9.|
+ |.4##3 5#9.|
+ |.a#5 3415#9.|
+ |.b#3 b#bc#9.|
+ |.a#5 b####9.|
+ |.4##11##15#9.|
+ |. 7####7 5#9.|
+ |. 1562 5#9.|
+ ->|. 5#9.|<-
+ |.............|
+ |.............|
+ |.............|
+ |.............|
+ -------------
+
+Char 0x0aad 'ભ'
+ Font: #5 lohit_gu (15)
+ Bitmap: 11 x 9
+ Advance: 14
+ Offset: 1 x 0
+ ______________
+ |..............|
+ |..............|
+ |..............|
+ |..............|
+ |..............|
+ |..............|
+ |. 4####4 2#c..|
+ |.4##12##22#c..|
+ |.c#3 b#42#c..|
+ |.## b#75#c..|
+ |.## 9#####c..|
+ |.b#4 8#c12#c..|
+ |.4#b 2#c..|
+ |. 8#9 2#c..|
+ ->|. 6#8 2#c..|<-
+ |..............|
+ |..............|
+ |..............|
+ |..............|
+ --------------
+
+Char 0x0aae 'મ'
+ Font: #5 lohit_gu (15)
+ Bitmap: 10 x 9
+ Advance: 11
+ Offset: -1 x 0
+ ___________
+ |............|
+ |............|
+ |............|
+ |............|
+ |............|
+ |............|
+ | ###6 9#6..|
+ | 1##1 9#7..|
+ | b#3 9#8..|
+ | b#3 9#9..|
+ | 7#######9..|
+ |5##873 9#a..|
+ |6##773 9#b..|
+ | c##a 9#c..|
+ ->| 9##..|<-
+ |............|
+ |............|
+ |............|
+ |............|
+ -----------
+
+Char 0x0aaf 'ય'
+ Font: #5 lohit_gu (15)
+ Bitmap: 10 x 9
+ Advance: 11
+ Offset: -1 x 0
+ ___________
+ |............|
+ |............|
+ |............|
+ |............|
+ |............|
+ |............|
+ |4###b1 ##1..|
+ | 9#9 ##1..|
+ | 6#a ##1..|
+ |2a###3 ##1..|
+ |7#b41 1##1..|
+ |3#c a##1..|
+ | 7##b####1..|
+ | 29#a3##1..|
+ ->| ##1..|<-
+ |............|
+ |............|
+ |............|
+ |............|
+ -----------
+
+Char 0x0ab0 'ર'
+ Font: #5 lohit_gu (15)
+ Bitmap: 7 x 9
+ Advance: 8
+ Offset: -1 x 0
+ ________
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |8####3 ..|
+ |3535##2..|
+ | 6c6..|
+ | a#5..|
+ | 239## ..|
+ |7###a1 ..|
+ | 5#a ..|
+ | 2## ..|
+ ->| 7###c..|<-
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ --------
+
+Char 0x0ab2 'લ'
+ Font: #5 lohit_gu (15)
+ Bitmap: 9 x 9
+ Advance: 12
+ Offset: 0 x 0
+ ____________
+ |............|
+ |............|
+ |............|
+ |............|
+ |............|
+ |............|
+ | 1a###4#c...|
+ | b#7 3#c...|
+ |5#a 3#c...|
+ |9#5278a#c...|
+ |a#41a###c...|
+ |9#5 3#c...|
+ |5#a 3#c...|
+ | b#7 3#c...|
+ ->| 1b###4#c...|<-
+ |............|
+ |............|
+ |............|
+ |............|
+ ------------
+
+Char 0x0ab3 'ળ'
+ Font: #5 lohit_gu (15)
+ Bitmap: 11 x 9
+ Advance: 13
+ Offset: 1 x 0
+ _____________
+ |.............|
+ |.............|
+ |.............|
+ |.............|
+ |.............|
+ |.............|
+ |. 5###6###a1.|
+ |.3##2 c#36#8.|
+ |.9#6 ## 3#b.|
+ |.b#3 ## 3#b.|
+ |.a#5 1#c 3#b.|
+ |.5#b 4#a 3#b.|
+ |. 8####3 3#b.|
+ |. 2541 3#b.|
+ ->|. 3#b.|<-
+ |.............|
+ |.............|
+ |.............|
+ |.............|
+ -------------
+
+Char 0x0ab5 'વ'
+ Font: #5 lohit_gu (15)
+ Bitmap: 9 x 9
+ Advance: 11
+ Offset: -1 x 0
+ ___________
+ |............|
+ |............|
+ |............|
+ |............|
+ |............|
+ |............|
+ | 4###72#c...|
+ |2##3 2#c...|
+ |7#7 2#c...|
+ |8#6 2#c...|
+ |5#b 2#c...|
+ | 9##88##c...|
+ | 4c##b#c...|
+ | 2#c...|
+ ->| 2#c...|<-
+ |............|
+ |............|
+ |............|
+ |............|
+ -----------
+
+Char 0x0ab6 'શ'
+ Font: #5 lohit_gu (15)
+ Bitmap: 10 x 9
+ Advance: 12
+ Offset: 0 x 0
+ ____________
+ |............|
+ |............|
+ |............|
+ |............|
+ |............|
+ |............|
+ |3####5 ##..|
+ |c#42##2 ##..|
+ |##3 a#4 ##..|
+ |4##6##2 ##..|
+ | 9#8 ##..|
+ |9###7 ##..|
+ | 2b#b ##..|
+ | 6#a ##..|
+ ->| a#4 ##..|<-
+ |............|
+ |............|
+ |............|
+ |............|
+ ------------
+
+Char 0x0ab7 'ષ'
+ Font: #5 lohit_gu (15)
+ Bitmap: 10 x 9
+ Advance: 11
+ Offset: -1 x 0
+ ___________
+ |............|
+ |............|
+ |............|
+ |............|
+ |............|
+ |............|
+ |2##6 7#7..|
+ | 4##5 7#7..|
+ | 3###a17#7..|
+ | 3##5b#c#7..|
+ | 2##4 6##7..|
+ | a##11c#7..|
+ | 1b#####7..|
+ | 1 7#7..|
+ ->| 7#7..|<-
+ |............|
+ |............|
+ |............|
+ |............|
+ -----------
+
+Char 0x0ab8 'સ'
+ Font: #5 lohit_gu (15)
+ Bitmap: 11 x 9
+ Advance: 12
+ Offset: 0 x 0
+ ____________
+ |............|
+ |............|
+ |............|
+ |............|
+ |............|
+ |............|
+ |6####5 8#6.|
+ |23 1##6 8#6.|
+ | 4#a 8#6.|
+ | 6##6c#6.|
+ | 126######6.|
+ |8###a2 8#6.|
+ | 6#7 8#6.|
+ | 4#a 8#6.|
+ ->| 9###a 8#6.|<-
+ |............|
+ |............|
+ |............|
+ |............|
+ ------------
+
+Char 0x0ab9 'હ'
+ Font: #5 lohit_gu (15)
+ Bitmap: 8 x 10
+ Advance: 9
+ Offset: 0 x -1
+ _________
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ | 6##### .|
+ |1## .|
+ | c###c3 .|
+ | b##8##5.|
+ |7#a 3#c.|
+ |a#4 4#b.|
+ |a#42c##3.|
+ |6#a 32 .|
+ ->| b#c2121.|<-
+ | 7####5.|
+ |.........|
+ |.........|
+ |.........|
+ ---------
+
+Char 0x0abe 'ા'
+ Font: #5 lohit_gu (15)
+ Bitmap: 3 x 9
+ Advance: 5
+ Offset: 0 x 0
+ _____
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ |a##..|
+ |a#c..|
+ |a#b..|
+ |a#a..|
+ |a#9..|
+ |a#7..|
+ |a#6..|
+ |a#5..|
+ ->|a#4..|<-
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ -----
+
+Char 0x0abf 'િ'
+ Font: #5 lohit_gu (15)
+ Bitmap: 12 x 13
+ Advance: 5
+ Offset: 0 x 0
+ _____
+ |............|
+ |............|
+ | 2b####91 |
+ | 2##4 8##2 |
+ | b#2 6#b |
+ |5#8 ##2|
+ |8#6 231|
+ |8#6 |
+ |8#6 |
+ |8#6 |
+ |8#6 |
+ |8#6 |
+ |8#6 |
+ |8#6 |
+ ->|8#6 |<-
+ |............|
+ |............|
+ |............|
+ |............|
+ -----
+
+Char 0x0ac0 'ી'
+ Font: #5 lohit_gu (15)
+ Bitmap: 7 x 13
+ Advance: 5
+ Offset: -4 x 0
+ _____
+ |.........|
+ |.........|
+ | 8###4 ..|
+ |7#92##1..|
+ |c#3 5b5..|
+ |##1 66..|
+ |11 176..|
+ | 286..|
+ | 396..|
+ | 3a6..|
+ | 4b6..|
+ | 5b6..|
+ | 6c6..|
+ | 7#6..|
+ ->| 8#6..|<-
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ -----
+
+Char 0x0ac1 'ુ' bottom
+ Font: #5 lohit_gu (15)
+ Bitmap: 10 x 4
+ Advance: 0
+ Offset: -7 x -4
+
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ ->|..........|<-
+ | 9###6 |
+ |9b2 11 ##1|
+ |4##7 2##1|
+ | 2a#####3 |
+
+
+Char 0x0ac2 'ૂ' bottom
+ Font: #5 lohit_gu (15)
+ Bitmap: 11 x 4
+ Advance: 0
+ Offset: -6 x -4
+
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ ->|...........|<-
+ | 6####81 |
+ |4#b1 6##5 |
+ |5#9143 9#8 |
+ | 8###4 561|
+
+
+Char 0x0ac3 'ૃ' bottom
+ Font: #5 lohit_gu (15)
+ Bitmap: 6 x 4
+ Advance: 0
+ Offset: -6 x -4
+
+ |......|
+ |......|
+ |......|
+ |......|
+ |......|
+ |......|
+ |......|
+ |......|
+ |......|
+ |......|
+ |......|
+ |......|
+ |......|
+ |......|
+ ->|......|<-
+ |2###c2|
+ |b#5 |
+ |b#4 |
+ |1b###9|
+
+
+Char 0x0ac7 'ે'
+ Font: #5 lohit_gu (15)
+ Bitmap: 8 x 4
+ Advance: 0
+ Offset: -8 x 9
+
+ |........|
+ |........|
+ |a##5 |
+ | 1a##2 |
+ | 3##4 |
+ | 1bc2|
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ ->|........|<-
+ |........|
+ |........|
+ |........|
+ |........|
+
+
+Char 0x0ac8 'ૈ'
+ Font: #5 lohit_gu (15)
+ Bitmap: 10 x 4
+ Advance: 0
+ Offset: -9 x 9
+
+ |..........|
+ |..........|
+ |a##46#9 |
+ | 19#a4c8 |
+ | 3#c595 |
+ | 1aa781|
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ ->|..........|<-
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+
+
+Char 0x0acb 'ો'
+ Font: #5 lohit_gu (15)
+ Bitmap: 8 x 13
+ Advance: 5
+ Offset: -3 x 0
+ _____
+ |........|
+ |........|
+ |b##5 |
+ | 2c##2 |
+ | 4##3 |
+ | 2##5|
+ | a#8|
+ | 9#5|
+ | 9#5|
+ | 9#5|
+ | 9#5|
+ | 9#5|
+ | 9#5|
+ | 9#5|
+ ->| 9#5|<-
+ |........|
+ |........|
+ |........|
+ |........|
+ -----
+
+Char 0x0acd '્' bottom
+ Font: #5 lohit_gu (15)
+ Bitmap: 7 x 4
+ Advance: 0
+ Offset: -4 x -4
+
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ ->|.......|<-
+ |a#c1 |
+ |35c#6 |
+ | 5#b1|
+ | 198|
+
+
+Char 0x0b83 'ஃ'
+ Font: #6 TSCu_Paranar (18)
+ Bitmap: 12 x 12
+ Advance: 14
+ Offset: 1 x 2
+ ______________
+ |..............|
+ |. 3####2 .|
+ |. c#65#c .|
+ |. c#55#c .|
+ |. 3####3 .|
+ |. .|
+ |. .|
+ |. .|
+ |. .|
+ |.3###3 4###3.|
+ |.c#7#c c#6#c.|
+ |.##5#c c#6#c.|
+ |.4###4 5###4.|
+ |..............|
+ ->|..............|<-
+ |..............|
+ |..............|
+ |..............|
+ |..............|
+ --------------
+
+Char 0x0b86 'ஆ' bottom
+ Font: #6 TSCu_Paranar (18)
+ Bitmap: 23 x 14
+ Advance: 24
+ Offset: 1 x -4
+ ________________________
+ |........................|
+ |........................|
+ |........................|
+ |........................|
+ |........................|
+ |. 5####c3 ##2 |
+ |. 6#######7 ##2 |
+ |. c########5##2 |
+ |. ##33##a##b##2 |
+ |. 9#55#96#####2 |
+ |. 1c##b16#####2 |
+ |.5#################2 |
+ |.##6 4##c #####9 |
+ |.8###931 26####2 ##916#a|
+ ->|. 7###########3 ## ##|<-
+ |. 17###########8## 5#b|
+ |. ##5c#9aa 4##3|
+ |. a#c35549###3 |
+ |. 8######c4 |
+ ------------------------
+
+Char 0x0b87 'இ'
+ Font: #6 TSCu_Paranar (18)
+ Bitmap: 14 x 15
+ Advance: 16
+ Offset: 0 x -1
+ ________________
+ |................|
+ | 4#####81 ..|
+ | 9###317##3 ..|
+ | 7##a 2##2..|
+ | 2###9###4 7#9..|
+ | 7########32#c..|
+ | b####a###9 ##..|
+ | #####9###c ##..|
+ | ###b###### ##..|
+ | c##4###5## ##..|
+ | 8##34##### ##..|
+ | 4############..|
+ | 4###2 a####c ..|
+ |7####43###b##4..|
+ ->|##4a#####b4##2..|<-
+ |5###########5 ..|
+ |................|
+ |................|
+ |................|
+ ----------------
+
+Char 0x0b89 'உ'
+ Font: #6 TSCu_Paranar (18)
+ Bitmap: 14 x 8
+ Advance: 16
+ Offset: 1 x 2
+ ________________
+ |................|
+ |................|
+ |................|
+ |................|
+ |................|
+ |.1a####4 .|
+ |.b######4 .|
+ |.##7##3#b .|
+ |.5###5 ## .|
+ |. 1#c .|
+ |. a#6 .|
+ |.8#####7 .|
+ |.9#############.|
+ |................|
+ ->|................|<-
+ |................|
+ |................|
+ |................|
+ |................|
+ ----------------
+
+Char 0x0b8e 'எ'
+ Font: #6 TSCu_Paranar (18)
+ Bitmap: 13 x 8
+ Advance: 14
+ Offset: 1 x 2
+ ______________
+ |..............|
+ |..............|
+ |..............|
+ |..............|
+ |..............|
+ |. 19#########9|
+ |. c#7 ## |
+ |.8#7 ## |
+ |.c#5###3 ## |
+ |.##c#8#b ## |
+ |.b### ## ## |
+ |.5###8#b ## |
+ |. 4####2 ## |
+ |..............|
+ ->|..............|<-
+ |..............|
+ |..............|
+ |..............|
+ |..............|
+ --------------
+
+Char 0x0b8f 'ஏ'
+ Font: #6 TSCu_Paranar (18)
+ Bitmap: 13 x 11
+ Advance: 14
+ Offset: 1 x -1
+ ______________
+ |..............|
+ |..............|
+ |..............|
+ |..............|
+ |..............|
+ |. 19#########7|
+ |. c#8 ## |
+ |.7#8 ## |
+ |.c#4###2 ## |
+ |.##a#9#b ## |
+ |.b### ## ## |
+ |.4###8#a ## |
+ |. 3####26#c |
+ |. 1c#9 |
+ ->|. 1##a |<-
+ |. 77 |
+ |..............|
+ |..............|
+ |..............|
+ --------------
+
+Char 0x0b90 'ஐ'
+ Font: #6 TSCu_Paranar (18)
+ Bitmap: 13 x 13
+ Advance: 15
+ Offset: 1 x -3
+ _______________
+ |...............|
+ |...............|
+ |...............|
+ |...............|
+ |...............|
+ |. 3####9c###7 .|
+ |.2###########6.|
+ |.9####b##5 7#c.|
+ |.b####### ##.|
+ |.8#c##### 2#b.|
+ |. b###9## 5##3.|
+ |. 4########a1 .|
+ |.5#b1 bb 5a5 .|
+ |.b#1 ## 9##3.|
+ ->|.##1 1##1 ##7.|<-
+ |.a##23###95##5.|
+ |.2##########7 .|
+ |. 17###6 .|
+ |...............|
+ ---------------
+
+Char 0x0b92 'ஒ'
+ Font: #6 TSCu_Paranar (18)
+ Bitmap: 13 x 13
+ Advance: 14
+ Offset: 1 x -3
+ ______________
+ |..............|
+ |..............|
+ |..............|
+ |..............|
+ |..............|
+ |. 19#####7 |
+ |. 5##a214###3 |
+ |.3##3 5##1|
+ |.a#6 8#8|
+ |.#####4 6##9#c|
+ |.c##5#c7###1##|
+ |.7##4#cc###7#a|
+ |. 8###4##9###2|
+ |. 3#b a#c3 |
+ ->|. b## 3#####3|<-
+ |. ##1 a##1 |
+ |. a#46##7 |
+ |. 1b###7 |
+ |..............|
+ --------------
+
+Char 0x0b93 'ஓ'
+ Font: #6 TSCu_Paranar (18)
+ Bitmap: 13 x 13
+ Advance: 15
+ Offset: 1 x -3
+ _______________
+ |...............|
+ |...............|
+ |...............|
+ |...............|
+ |...............|
+ |. 2a#####81 .|
+ |. 5##b3 3a##3 .|
+ |.3##5 4##2.|
+ |.a#a 7#9.|
+ |.######4a#82#c.|
+ |.#########1 ##.|
+ |.8########48#a.|
+ |. 8#########c1.|
+ |. 8##2 .|
+ ->|. 7##75##### .|<-
+ |. #######2 .|
+ |. b#####7 .|
+ |. 1b###8 .|
+ |...............|
+ ---------------
+
+Char 0x0b95 'க'
+ Font: #6 TSCu_Paranar (18)
+ Bitmap: 10 x 8
+ Advance: 12
+ Offset: 0 x 2
+ ____________
+ |............|
+ |............|
+ |............|
+ |............|
+ |............|
+ | #######4..|
+ | ## ## ..|
+ | ## ## ..|
+ |3########3..|
+ |c#2 ##2#b..|
+ |##1 cc ##..|
+ |8##38#83#c..|
+ | 8#######5..|
+ |............|
+ ->|............|<-
+ |............|
+ |............|
+ |............|
+ |............|
+ ------------
+
+Char 0x0b99 'ங'
+ Font: #6 TSCu_Paranar (18)
+ Bitmap: 12 x 8
+ Advance: 14
+ Offset: 0 x 2
+ ______________
+ |..............|
+ |..............|
+ |..............|
+ |..............|
+ |..............|
+ |######### ##..|
+ |## ## ##..|
+ |## ## ##..|
+ |## ####b1 ##..|
+ |## ##44#a ##..|
+ |## ## 2## ##..|
+ |## ###### ##..|
+ |## #########..|
+ |..............|
+ ->|..............|<-
+ |..............|
+ |..............|
+ |..............|
+ |..............|
+ --------------
+
+Char 0x0b9a 'ச'
+ Font: #6 TSCu_Paranar (18)
+ Bitmap: 10 x 8
+ Advance: 11
+ Offset: 0 x 2
+ ___________
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ | ####### .|
+ | ## ## .|
+ | ## ## .|
+ |3########1.|
+ |c#1 ## .|
+ |##1 cc .|
+ |9#b28#9 .|
+ | a###b1 .|
+ |...........|
+ ->|...........|<-
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ -----------
+
+Char 0x0b9f 'ட'
+ Font: #6 TSCu_Paranar (18)
+ Bitmap: 13 x 8
+ Advance: 14
+ Offset: 1 x 2
+ ______________
+ |..............|
+ |..............|
+ |..............|
+ |..............|
+ |..............|
+ |.## |
+ |.## |
+ |.## |
+ |.## |
+ |.## |
+ |.## |
+ |.## |
+ |.############1|
+ |..............|
+ ->|..............|<-
+ |..............|
+ |..............|
+ |..............|
+ |..............|
+ --------------
+
+Char 0x0ba3 'ண'
+ Font: #6 TSCu_Paranar (18)
+ Bitmap: 20 x 8
+ Advance: 21
+ Offset: 0 x 2
+ _____________________
+ |.....................|
+ |.....................|
+ |.....................|
+ |.....................|
+ |.....................|
+ | 5################b.|
+ | 9#817####a####6## .|
+ |6#8 b#########a## .|
+ |b#######c###a##### .|
+ |###9####c###a##### .|
+ |c## ###########b## .|
+ |6##7######8####6## .|
+ | 7###4b##5 9##9 ## .|
+ |.....................|
+ ->|.....................|<-
+ |.....................|
+ |.....................|
+ |.....................|
+ |.....................|
+ ---------------------
+
+Char 0x0ba4 'த'
+ Font: #6 TSCu_Paranar (18)
+ Bitmap: 11 x 13
+ Advance: 12
+ Offset: 0 x -3
+ ____________
+ |............|
+ |............|
+ |............|
+ |............|
+ |............|
+ | #######9 .|
+ | ## ##6 .|
+ | ## ##6 .|
+ | 2#######6 .|
+ |692 ##6a#6.|
+ |## ##12#b.|
+ |##3 1#c ##.|
+ |8##3a#7 2#c.|
+ | 8###8 a#7.|
+ ->| 2##b .|<-
+ |4#######7 .|
+ |a#9 .|
+ |c#6 .|
+ |............|
+ ------------
+
+Char 0x0ba8 'ந'
+ Font: #6 TSCu_Paranar (18)
+ Bitmap: 10 x 12
+ Advance: 11
+ Offset: 0 x -2
+ ___________
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ | ######## .|
+ | ## ## .|
+ | ## ##4 .|
+ | ## ####1.|
+ | ## ##8#9.|
+ | ## ## ##.|
+ | ## ## ##.|
+ | ## ##6#a.|
+ | 4##5.|
+ ->|6#######7 .|<-
+ |##1 .|
+ |##2 .|
+ |...........|
+ |...........|
+ -----------
+
+Char 0x0ba9 'ன'
+ Font: #6 TSCu_Paranar (18)
+ Bitmap: 16 x 9
+ Advance: 17
+ Offset: 0 x 1
+ _________________
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ | 5#####a######5.|
+ | a#c3 6####2## .|
+ |7#9 7####7## .|
+ |c####c##3##b## .|
+ |###67### b#### .|
+ |b## ### ##### .|
+ |4##78###9##9## .|
+ | 4####3b##c1## .|
+ | 99 .|
+ ->|.................|<-
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x0baa 'ப'
+ Font: #6 TSCu_Paranar (18)
+ Bitmap: 10 x 8
+ Advance: 13
+ Offset: 1 x 2
+ _____________
+ |.............|
+ |.............|
+ |.............|
+ |.............|
+ |.............|
+ |.## ##..|
+ |.## ##..|
+ |.## ##..|
+ |.## ##..|
+ |.## ##..|
+ |.## ##..|
+ |.## ##..|
+ |.##########..|
+ |.............|
+ ->|.............|<-
+ |.............|
+ |.............|
+ |.............|
+ |.............|
+ -------------
+
+Char 0x0bae 'ம'
+ Font: #6 TSCu_Paranar (18)
+ Bitmap: 11 x 8
+ Advance: 13
+ Offset: 1 x 2
+ _____________
+ |.............|
+ |.............|
+ |.............|
+ |.............|
+ |.............|
+ |.88 2###b1 .|
+ |.## a#58#c .|
+ |.## ## a#7.|
+ |.## ## 3#b.|
+ |.## ## ##.|
+ |.## ## ##.|
+ |.## ## 7#9.|
+ |.#########b1.|
+ |.............|
+ ->|.............|<-
+ |.............|
+ |.............|
+ |.............|
+ |.............|
+ -------------
+
+Char 0x0baf 'ய'
+ Font: #6 TSCu_Paranar (18)
+ Bitmap: 12 x 8
+ Advance: 14
+ Offset: 1 x 2
+ ______________
+ |..............|
+ |..............|
+ |..............|
+ |..............|
+ |..............|
+ |.## ## ##.|
+ |.## ## ##.|
+ |.## ## ##.|
+ |.## ## ##.|
+ |.## ## ##.|
+ |.## ## ##.|
+ |.c#4b## ##.|
+ |.3###########.|
+ |..............|
+ ->|..............|<-
+ |..............|
+ |..............|
+ |..............|
+ |..............|
+ --------------
+
+Char 0x0bb0 'ர'
+ Font: #6 TSCu_Paranar (18)
+ Bitmap: 9 x 11
+ Advance: 10
+ Offset: 1 x -1
+ __________
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |.########4|
+ |.## ## |
+ |.## ## |
+ |.## ## |
+ |.## ## |
+ |.## ## |
+ |.## ## |
+ |.## 1## |
+ |.991##7 |
+ ->|. 2##9 |<-
+ |. 87 |
+ |..........|
+ |..........|
+ |..........|
+ ----------
+
+Char 0x0bb1 'ற'
+ Font: #6 TSCu_Paranar (18)
+ Bitmap: 10 x 12
+ Advance: 12
+ Offset: 0 x -2
+ ____________
+ |............|
+ |............|
+ |............|
+ |............|
+ |............|
+ | 2######6 ..|
+ | ac7##7c#3..|
+ | ## ## 4#9..|
+ | ## ## #c..|
+ | ## ## ##..|
+ | ## ## ##..|
+ | ## ## 2#b..|
+ | ## ## 6#8..|
+ | ## ## ##3..|
+ ->| ## ##c#9 ..|<-
+ |6######7 ..|
+ |##2 ..|
+ |............|
+ |............|
+ ------------
+
+Char 0x0bb2 'ல'
+ Font: #6 TSCu_Paranar (18)
+ Bitmap: 13 x 9
+ Advance: 14
+ Offset: 0 x 2
+ ______________
+ |..............|
+ |..............|
+ |..............|
+ |..............|
+ | 4#c .|
+ | 2c###8 8##8 .|
+ |1###3a#7 a## .|
+ |9##1 2#b 3##2.|
+ |c#9 ## ##3.|
+ |#####8## ##3.|
+ |b##6#### 2##1.|
+ |4##5####4b#a .|
+ | 4###94###b1 .|
+ |..............|
+ ->|..............|<-
+ |..............|
+ |..............|
+ |..............|
+ |..............|
+ --------------
+
+Char 0x0bb3 'ள'
+ Font: #6 TSCu_Paranar (18)
+ Bitmap: 15 x 9
+ Advance: 16
+ Offset: 1 x 1
+ ________________
+ |................|
+ |................|
+ |................|
+ |................|
+ |................|
+ |. 8###########4|
+ |. c#814### ## |
+ |.8#7 3## ## |
+ |.c####3 ## ## |
+ |.###9#b ## ## |
+ |.b## ## ## ## |
+ |.5##b#b ## ## |
+ |. 6###3 ## ## |
+ |. 44 99 |
+ ->|................|<-
+ |................|
+ |................|
+ |................|
+ |................|
+ ----------------
+
+Char 0x0bb4 'ழ'
+ Font: #6 TSCu_Paranar (18)
+ Bitmap: 12 x 13
+ Advance: 13
+ Offset: 1 x -3
+ _____________
+ |.............|
+ |.............|
+ |.............|
+ |.............|
+ |.............|
+ |.88 1b###8 |
+ |.## a#72c#b |
+ |.## ## c#6|
+ |.## ## 4#b|
+ |.## ## ##|
+ |.## ## ##|
+ |.## ## 8#9|
+ |.##########8 |
+ |. ##7 |
+ ->|.4###34#### |<-
+ |.#####c#9 |
+ |.b#c####1 |
+ |.1a###c2 |
+ |.............|
+ -------------
+
+Char 0x0bb5 'வ'
+ Font: #6 TSCu_Paranar (18)
+ Bitmap: 14 x 8
+ Advance: 15
+ Offset: 0 x 2
+ _______________
+ |...............|
+ |...............|
+ |...............|
+ |...............|
+ |...............|
+ | 8####7 88.|
+ | c#c22a#b ##.|
+ |8#9 7#6 ##.|
+ |c#4###21cb ##.|
+ |##a#9#a ## ##.|
+ |b### ##4## ##.|
+ |4###8##### ##.|
+ | 4####9#######.|
+ |...............|
+ ->|...............|<-
+ |...............|
+ |...............|
+ |...............|
+ |...............|
+ ---------------
+
+Char 0x0bb7 'ஷ'
+ Font: #6 TSCu_Paranar (18)
+ Bitmap: 19 x 12
+ Advance: 21
+ Offset: 1 x -2
+ _____________________
+ |.....................|
+ |.....................|
+ |.....................|
+ |.....................|
+ |.....................|
+ |. 1a###a1 8###b1 .|
+ |.1##926#c 9#84##a .|
+ |.8#9 7#6 ## ###86.|
+ |.c#5###4cb c#12#####.|
+ |.##b#a#b## 6#aa#####.|
+ |.b### #### 6#######.|
+ |.4###9####3 ##5##.|
+ |. 4####b############.|
+ |. ## .|
+ ->|. ## .|<-
+ |. ## .|
+ |. ## .|
+ |.....................|
+ |.....................|
+ ---------------------
+
+Char 0x0bb8 'ஸ'
+ Font: #6 TSCu_Paranar (18)
+ Bitmap: 16 x 9
+ Advance: 18
+ Offset: 1 x 2
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |..................|
+ |. 11 .|
+ |. 2####a####4##4 .|
+ |.2##72b##74#c7##1.|
+ |.9#a ## ## ##6.|
+ |.##6 ## ## a#8.|
+ |.######## ## a#8.|
+ |.9###c### ## ##6.|
+ |.1###c### 9ca##1.|
+ |. 19##### 2###4 .|
+ |..................|
+ ->|..................|<-
+ |..................|
+ |..................|
+ |..................|
+ |..................|
+ ------------------
+
+Char 0x0bb9 'ஹ'
+ Font: #6 TSCu_Paranar (18)
+ Bitmap: 20 x 12
+ Advance: 21
+ Offset: 1 x -2
+ _____________________
+ |.....................|
+ |.....................|
+ |.....................|
+ |.....................|
+ |.....................|
+ |. 3#####5 5######3 |
+ |. 5#######9 c###64##2|
+ |.3##6 7###6#### 6#8|
+ |.9#a594 b##c#### 1#c|
+ |.c#####89####### ##|
+ |.####9#####b#### ##|
+ |.c###1#####5#### 3#b|
+ |.8###8########## 9#7|
+ |.1###### 5#c |
+ ->|. 1b###3 3b##2 |<-
+ |. 8##############91 |
+ |. ## |
+ |.....................|
+ |.....................|
+ ---------------------
+
+Char 0x0bbe 'ா'
+ Font: #6 TSCu_Paranar (18)
+ Bitmap: 9 x 8
+ Advance: 10
+ Offset: 1 x 2
+ __________
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |.########1|
+ |.## ## |
+ |.## ## |
+ |.## ## |
+ |.## ## |
+ |.## ## |
+ |.## ## |
+ |.## ## |
+ |..........|
+ ->|..........|<-
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ ----------
+
+Char 0x0bbf 'ி'
+ Font: #6 TSCu_Paranar (18)
+ Bitmap: 8 x 12
+ Advance: 3
+ Offset: -4 x 2
+ ___
+ |........|
+ | 5####6 |
+ |7##51b#3|
+ |c#3 2a7|
+ |##2 88|
+ |5##8 99|
+ | 21 aa|
+ | aa|
+ | bb|
+ | bb|
+ | cc|
+ | ##|
+ | ##|
+ |........|
+ ->|........|<-
+ |........|
+ |........|
+ |........|
+ |........|
+ ---
+
+Char 0x0bc0 'ீ' top
+ Font: #6 TSCu_Paranar (18)
+ Bitmap: 7 x 7
+ Advance: 3
+ Offset: -5 x 8
+ ___
+ | 3####3.|
+ |4#####c.|
+ |c#####c.|
+ |##7###4.|
+ |8#5 .|
+ | a#7 .|
+ | 11 .|
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ ->|........|<-
+ |........|
+ |........|
+ |........|
+ |........|
+ ---
+
+Char 0x0bc1 'ு'
+ Font: #6 TSCu_Paranar (18)
+ Bitmap: 10 x 6
+ Advance: 8
+ Offset: -3 x 4
+ ________
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ |########8 .|
+ | ## 9#7.|
+ | ## 1#c.|
+ | ab 1##.|
+ | 6#82c#8.|
+ | 8###8 .|
+ |...........|
+ |...........|
+ |...........|
+ ->|...........|<-
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ --------
+
+Char 0x0bc2 'ூ' top
+ Font: #6 TSCu_Paranar (18)
+ Bitmap: 14 x 13
+ Advance: 12
+ Offset: -3 x 2
+ ____________
+ | 4####c2 .|
+ | 6##716##3 .|
+ | 1##8 3## .|
+ | 5##2 8#6.|
+ | 7## 3#a.|
+ |#########a ##.|
+ | 1###14#a ##.|
+ | a##6 ##1#c.|
+ | 2###6#a5#9.|
+ | 3953###b1c#3.|
+ | 9##3 9#8 .|
+ | b##713##9 .|
+ | 7#####4 .|
+ |...............|
+ ->|...............|<-
+ |...............|
+ |...............|
+ |...............|
+ |...............|
+ ------------
+
+Char 0x0bc6 'ெ'
+ Font: #6 TSCu_Paranar (18)
+ Bitmap: 11 x 13
+ Advance: 12
+ Offset: 1 x 1
+ ____________
+ |............|
+ |. 7####9 |
+ |. 1###417#b |
+ |. b#a 5c7|
+ |.5## cb|
+ |.a#6 ##|
+ |.##1 ##|
+ |.## ##|
+ |.cc 8###2##|
+ |.9b26##9#a##|
+ |.3a79## ####|
+ |. 6c###9#a##|
+ |. 4####b1##|
+ |. 99|
+ ->|............|<-
+ |............|
+ |............|
+ |............|
+ |............|
+ ------------
+
+Char 0x0bc7 'ே'
+ Font: #6 TSCu_Paranar (18)
+ Bitmap: 12 x 12
+ Advance: 12
+ Offset: 1 x 2
+ ____________
+ |.............|
+ |. 6#####7 |
+ |. 1###4####9 |
+ |. c#6 ##7##1|
+ |.6#9 b#6##1|
+ |.b#3 3###6 |
+ |.## |
+ |.## |
+ |.a#4 3###3 |
+ |.5#b c#5#c |
+ |. c#9 ##6## |
+ |. 1###4c###7 |
+ |. 7#####5 |
+ |.............|
+ ->|.............|<-
+ |.............|
+ |.............|
+ |.............|
+ |.............|
+ ------------
+
+Char 0x0bc8 'ை'
+ Font: #6 TSCu_Paranar (18)
+ Bitmap: 14 x 9
+ Advance: 16
+ Offset: 1 x 1
+ ________________
+ |................|
+ |................|
+ |................|
+ |................|
+ |................|
+ |. 5####64###5 .|
+ |. 9##418##64##3.|
+ |.5## 5###25#a.|
+ |.b#4 b###a1##.|
+ |.#####3##3## ##.|
+ |.###7#cc#1##1#c.|
+ |.8##2##9b6#b6#9.|
+ |. c###62###5##3.|
+ |. 241 132 .|
+ ->|................|<-
+ |................|
+ |................|
+ |................|
+ |................|
+ ----------------
+
+Char 0x0bca 'ொ'
+ Font: #6 TSCu_Paranar (18)
+ Bitmap: 11 x 13
+ Advance: 12
+ Offset: 1 x 1
+ ____________
+ |............|
+ |. 7####9 |
+ |. 1###417#b |
+ |. b#a 5c7|
+ |.5## cb|
+ |.a#6 ##|
+ |.##1 ##|
+ |.## ##|
+ |.cc 8###2##|
+ |.9b26##9#a##|
+ |.3a79## ####|
+ |. 6c###9#a##|
+ |. 4####b1##|
+ |. 99|
+ ->|............|<-
+ |............|
+ |............|
+ |............|
+ |............|
+ ------------
+
+Char 0x0bcd '்' top
+ Font: #6 TSCu_Paranar (18)
+ Bitmap: 4 x 5
+ Advance: 4
+ Offset: 0 x 10
+ ____
+ |8##5|
+ |###c|
+ |9###|
+ | 6#7|
+ |8#6 |
+ |....|
+ |....|
+ |....|
+ |....|
+ |....|
+ |....|
+ |....|
+ |....|
+ |....|
+ ->|....|<-
+ |....|
+ |....|
+ |....|
+ |....|
+ ----
+
+Char 0x0bee '௮'
+ Font: #6 TSCu_Paranar (18)
+ Bitmap: 18 x 11
+ Advance: 20
+ Offset: 1 x -1
+ ____________________
+ |....................|
+ |....................|
+ |....................|
+ |....................|
+ |....................|
+ |. 9####5 ##.|
+ |. a#87###8 ##.|
+ |. ## ####5##.|
+ |. b#77#c7#b##.|
+ |. 1c###33####.|
+ |. 4####.|
+ |.6#################.|
+ |.##2 2##b ##.|
+ |.9##3 3###1 ##.|
+ ->|. 9###51 3a##b1 ##.|<-
+ |. 18#######4 ##.|
+ |....................|
+ |....................|
+ |....................|
+ --------------------
+
+Char 0x0d82 'ං'
+ Font: #7 lklug (17)
+ Bitmap: 5 x 3
+ Advance: 5
+ Offset: 0 x 4
+ _____
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ |17c93|
+ |45 55|
+ | 7c82|
+ |.....|
+ |.....|
+ |.....|
+ ->|.....|<-
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ -----
+
+Char 0x0dbd 'ල' bottom
+ Font: #7 lklug (17)
+ Bitmap: 14 x 13
+ Advance: 14
+ Offset: 0 x -4
+ ______________
+ |..............|
+ |..............|
+ |..............|
+ |..............|
+ |..............|
+ |..............|
+ | 5#####71 |
+ | 2##81 671 |
+ | 1##314666365 |
+ | 9#7 2697265 |
+ |1##2 5ab71 |
+ |3## |
+ |4##1 |
+ |2##4 22|
+ ->| c#9 55|<-
+ | 5##3 462|
+ | 8##2 494 |
+ | 6###ab#82 |
+ | 2563 |
+ --------------
+
+Char 0x0dc3 'ස'
+ Font: #7 lklug (17)
+ Bitmap: 13 x 9
+ Advance: 13
+ Offset: 0 x 1
+ _____________
+ |.............|
+ |.............|
+ |.............|
+ |.............|
+ |.............|
+ | 2###4 3###2 |
+ | 5#c77 9#8b6 |
+ |16ccb949#ba4 |
+ | 593 275 |
+ |263 43|
+ |351 153 55|
+ |297 8#a 495|
+ | a########## |
+ | 1a##c2a###2 |
+ ->|.............|<-
+ |.............|
+ |.............|
+ |.............|
+ |.............|
+ -------------
+
+Char 0x0dc4 'හ'
+ Font: #7 lklug (17)
+ Bitmap: 14 x 9
+ Advance: 14
+ Offset: 0 x 1
+ ______________
+ |..............|
+ |..............|
+ |..............|
+ |..............|
+ |..............|
+ | c##6 5###b1 |
+ |3##75 2#####b |
+ |187583891 8c4|
+ | 1871 76 66|
+ | 55 2a#5 55|
+ | 55 55 55|
+ | 99 77 153|
+ | 7######5 76 |
+ | 7####416b6 |
+ ->|..............|<-
+ |..............|
+ |..............|
+ |..............|
+ |..............|
+ --------------
+
+Char 0x0dd2 'ි' top
+ Font: #7 lklug (17)
+ Bitmap: 10 x 5
+ Advance: 0
+ Offset: -10 x 10
+
+ | 5######4 |
+ |8########7|
+ |##4 4##|
+ |99 99|
+ |56 175|
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ ->|..........|<-
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+
+
+Char 0x0e01 'ก'
+ Font: #8 Loma (13)
+ Bitmap: 7 x 7
+ Advance: 8
+ Offset: 0 x 0
+ ________
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ | 2a##91.|
+ |1c5 199.|
+ |196 1#.|
+ | 86 #.|
+ | # #.|
+ | # #.|
+ ->| # #.|<-
+ |........|
+ |........|
+ |........|
+ |........|
+ --------
+
+Char 0x0e02 'ข'
+ Font: #8 Loma (13)
+ Bitmap: 7 x 7
+ Advance: 9
+ Offset: 1 x 0
+ _________
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.5#c3 #.|
+ |.ca4c #.|
+ |.##59 #.|
+ |.99# #.|
+ |. # #.|
+ |. # #.|
+ ->|. #####.|<-
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ ---------
+
+Char 0x0e04 'ค'
+ Font: #8 Loma (13)
+ Bitmap: 7 x 7
+ Advance: 9
+ Offset: 1 x 0
+ _________
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.19##c7 .|
+ |.a81 2a8.|
+ |.# 5#81#.|
+ |.b1#5# #.|
+ |.77cc7 #.|
+ |.1#8 #.|
+ ->|. #5 #.|<-
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ ---------
+
+Char 0x0e07 'ง'
+ Font: #8 Loma (13)
+ Bitmap: 4 x 7
+ Advance: 6
+ Offset: 1 x 0
+ ______
+ |......|
+ |......|
+ |......|
+ |......|
+ |......|
+ |......|
+ |......|
+ |......|
+ |. 99.|
+ |. b#.|
+ |.4 #.|
+ |.c2 #.|
+ |.94 #.|
+ |.69 #.|
+ ->|. 9#9.|<-
+ |......|
+ |......|
+ |......|
+ |......|
+ ------
+
+Char 0x0e08 'จ'
+ Font: #8 Loma (13)
+ Bitmap: 7 x 7
+ Advance: 8
+ Offset: 0 x 0
+ ________
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ | 4b##91.|
+ |161 18b.|
+ | 7#8 #.|
+ | #2# #.|
+ | 7## #.|
+ | #12#.|
+ ->| 6##6.|<-
+ |........|
+ |........|
+ |........|
+ |........|
+ --------
+
+Char 0x0e09 'ฉ'
+ Font: #8 Loma (13)
+ Bitmap: 8 x 7
+ Advance: 9
+ Offset: 1 x 0
+ _________
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |. 7c#b3 |
+ |.461 6c |
+ |.7#8 # |
+ |.#2# # |
+ |.7c# 4#c6|
+ |. #ab#2#|
+ ->|. c5 a#7|<-
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ ---------
+
+Char 0x0e0a 'ช'
+ Font: #8 Loma (13)
+ Bitmap: 8 x 8
+ Advance: 9
+ Offset: 1 x 0
+ _________
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |. 9|
+ |.2b#b3298|
+ |.b#97##5 |
+ |.#2#7899 |
+ |.7#7# # |
+ |. # # |
+ |. # # |
+ ->|. #### |<-
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ ---------
+
+Char 0x0e0b 'ซ'
+ Font: #8 Loma (13)
+ Bitmap: 9 x 8
+ Advance: 9
+ Offset: 0 x 0
+ _________
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ | a|
+ |2999a54a5|
+ |b#8 3##3 |
+ |#3# 867b |
+ |7#7 # # |
+ | # # |
+ | # # |
+ ->| #### |<-
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ ---------
+
+Char 0x0e0d 'ญ'
+ Font: #8 Loma (13)
+ Bitmap: 10 x 10
+ Advance: 11
+ Offset: 0 x -3
+ ___________
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ | 18##a1 #.|
+ | b61 8a #.|
+ |1a5 1# #.|
+ | 69 # #.|
+ | #1 # #.|
+ | ##a # #.|
+ ->| 8#9 ####.|<-
+ | 991c.|
+ | cc69.|
+ | 6#b2.|
+ |...........|
+ -----------
+
+Char 0x0e0f 'ฏ'
+ Font: #8 Loma (13)
+ Bitmap: 7 x 10
+ Advance: 9
+ Offset: 1 x -3
+ _________
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |. 5c#91.|
+ |. 15 199.|
+ |. 44 1#.|
+ |. 68 #.|
+ |. #1 #.|
+ |.9# #.|
+ ->|.9# 9 #.|<-
+ |. 7#a32#.|
+ |. #b8#c#.|
+ |. c6 35#.|
+ |.........|
+ ---------
+
+Char 0x0e10 'ฐ'
+ Font: #8 Loma (13)
+ Bitmap: 7 x 10
+ Advance: 7
+ Offset: 0 x -3
+ _______
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ | 4c###4|
+ |2#83 |
+ |1##ac6 |
+ | ## 1# |
+ | a# # |
+ | #22# |
+ ->| 6##6 |<-
+ | 54bc |
+ | a#3a# |
+ | a681# |
+ |.......|
+ -------
+
+Char 0x0e13 'ณ'
+ Font: #8 Loma (13)
+ Bitmap: 12 x 7
+ Advance: 12
+ Offset: 0 x 0
+ ____________
+ |............|
+ |............|
+ |............|
+ |............|
+ |............|
+ |............|
+ |............|
+ |............|
+ | 8##a2 # |
+ | a71 7a # |
+ |1b3 1# # |
+ | 5a # # |
+ | #2 # 3# |
+ | #c9 #8b##9|
+ ->| 9#a #7 a#9|<-
+ |............|
+ |............|
+ |............|
+ |............|
+ ------------
+
+Char 0x0e14 'ด'
+ Font: #8 Loma (13)
+ Bitmap: 6 x 7
+ Advance: 8
+ Offset: 1 x 0
+ ________
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ |.19##a1.|
+ |.a81 7a.|
+ |.#8#8 #.|
+ |.c#2# #.|
+ |.a7#b #.|
+ |.84b3 #.|
+ ->|.6b3 #.|<-
+ |........|
+ |........|
+ |........|
+ |........|
+ --------
+
+Char 0x0e15 'ต'
+ Font: #8 Loma (13)
+ Bitmap: 6 x 7
+ Advance: 8
+ Offset: 1 x 0
+ ________
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ |.2aa8b3.|
+ |.b4132b.|
+ |.#8#8 #.|
+ |.c#2# #.|
+ |.a8#a #.|
+ |.74b2 #.|
+ ->|.6b2 #.|<-
+ |........|
+ |........|
+ |........|
+ |........|
+ --------
+
+Char 0x0e16 'ถ'
+ Font: #8 Loma (13)
+ Bitmap: 7 x 7
+ Advance: 8
+ Offset: 0 x 0
+ ________
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ | 18##a1.|
+ | b61 8a.|
+ |1a5 1#.|
+ | 69 #.|
+ | #1 #.|
+ | ##a #.|
+ ->| 8#9 #.|<-
+ |........|
+ |........|
+ |........|
+ |........|
+ --------
+
+Char 0x0e17 'ท'
+ Font: #8 Loma (13)
+ Bitmap: 8 x 7
+ Advance: 9
+ Offset: 0 x 0
+ _________
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |8#8 8#9.|
+ |a## 3a2#.|
+ | # 94 #.|
+ | #2b #.|
+ | #85 #.|
+ | #c #.|
+ ->| #6 #.|<-
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ ---------
+
+Char 0x0e18 'ธ'
+ Font: #8 Loma (13)
+ Bitmap: 6 x 7
+ Advance: 8
+ Offset: 1 x 0
+ ________
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ |.1a#b2 .|
+ |.bb34c3.|
+ |.47a#8 .|
+ |. # # .|
+ |. # # .|
+ |. # # .|
+ ->|. #### .|<-
+ |........|
+ |........|
+ |........|
+ |........|
+ --------
+
+Char 0x0e19 'น'
+ Font: #8 Loma (13)
+ Bitmap: 8 x 7
+ Advance: 9
+ Offset: 1 x 0
+ _________
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.b9 # |
+ |.a# # |
+ |. # # |
+ |. # # |
+ |. # 3#c6|
+ |. #3aa#3#|
+ ->|. #b4 a#7|<-
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ ---------
+
+Char 0x0e1a 'บ'
+ Font: #8 Loma (13)
+ Bitmap: 7 x 7
+ Advance: 8
+ Offset: 0 x 0
+ ________
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ |9#9 #.|
+ |a## #.|
+ | # #.|
+ | # #.|
+ | # #.|
+ | # #.|
+ ->| #####.|<-
+ |........|
+ |........|
+ |........|
+ |........|
+ --------
+
+Char 0x0e1b 'ป'
+ Font: #8 Loma (13)
+ Bitmap: 6 x 9
+ Advance: 8
+ Offset: 1 x 0
+ ________
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ |. #.|
+ |. #.|
+ |.aa #.|
+ |.a# #.|
+ |. # #.|
+ |. # #.|
+ |. # #.|
+ |. # #.|
+ ->|. #####.|<-
+ |........|
+ |........|
+ |........|
+ |........|
+ --------
+
+Char 0x0e1c 'ผ'
+ Font: #8 Loma (13)
+ Bitmap: 6 x 7
+ Advance: 8
+ Offset: 1 x 0
+ ________
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ |.8#9 #.|
+ |.##9 #.|
+ |.# 1 #.|
+ |.# 6b #.|
+ |.#3c95#.|
+ |.#c3 b#.|
+ ->|.#6 4#.|<-
+ |........|
+ |........|
+ |........|
+ |........|
+ --------
+
+Char 0x0e1e 'พ'
+ Font: #8 Loma (13)
+ Bitmap: 8 x 7
+ Advance: 9
+ Offset: 0 x 0
+ _________
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |9#8 62 #.|
+ |a## a6 #.|
+ | #1bb #.|
+ | #5692#.|
+ | #a256#.|
+ | #b b#.|
+ ->| #7 9#.|<-
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ ---------
+
+Char 0x0e1f 'ฟ'
+ Font: #8 Loma (13)
+ Bitmap: 7 x 9
+ Advance: 9
+ Offset: 1 x 0
+ _________
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |. #.|
+ |. #.|
+ |.b9 69 #.|
+ |.b# ab #.|
+ |. #1a74#.|
+ |. #5629#.|
+ |. #a1 b#.|
+ |. #b 7#.|
+ ->|. #7 2#.|<-
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ ---------
+
+Char 0x0e20 'ภ'
+ Font: #8 Loma (13)
+ Bitmap: 8 x 7
+ Advance: 9
+ Offset: 0 x 0
+ _________
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ | 19##91.|
+ | c6 18a.|
+ | 2a4 1#.|
+ | 69 #.|
+ | c1 #.|
+ |9## #.|
+ ->|9#a #.|<-
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ ---------
+
+Char 0x0e21 'ม'
+ Font: #8 Loma (13)
+ Bitmap: 6 x 7
+ Advance: 9
+ Offset: 1 x 0
+ _________
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.ba #..|
+ |.b# #..|
+ |. # #..|
+ |. # #..|
+ |.9#5 #..|
+ |.##9c6#..|
+ ->|.ab 18c..|<-
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ ---------
+
+Char 0x0e22 'ย'
+ Font: #8 Loma (13)
+ Bitmap: 5 x 7
+ Advance: 8
+ Offset: 1 x 0
+ ________
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ |.a#9 #..|
+ |.##a #..|
+ |.a5 #..|
+ |.4## #..|
+ |.c5 #..|
+ |.#2 #..|
+ ->|.#####..|<-
+ |........|
+ |........|
+ |........|
+ |........|
+ --------
+
+Char 0x0e23 'ร'
+ Font: #8 Loma (13)
+ Bitmap: 7 x 7
+ Advance: 7
+ Offset: 0 x 0
+ _______
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ | 3b###6|
+ |1#93 |
+ | 469c6 |
+ | # |
+ | 8## |
+ | #2# |
+ ->| 8#9 |<-
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ -------
+
+Char 0x0e24 'ฤ'
+ Font: #8 Loma (13)
+ Bitmap: 7 x 10
+ Advance: 8
+ Offset: 0 x -3
+ ________
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ | 18##91.|
+ | b61 89.|
+ |1a5 1#.|
+ | 69 #.|
+ | #1 #.|
+ | ##a #.|
+ ->| 8#9 #.|<-
+ | #.|
+ | #.|
+ | a.|
+ |........|
+ --------
+
+Char 0x0e25 'ล'
+ Font: #8 Loma (13)
+ Bitmap: 7 x 7
+ Advance: 8
+ Offset: 0 x 0
+ ________
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ | 5b##91.|
+ |251 17a.|
+ | 2a#c6#.|
+ | b8 1a#.|
+ | #1 1#.|
+ | ##a #.|
+ ->| 8#9 #.|<-
+ |........|
+ |........|
+ |........|
+ |........|
+ --------
+
+Char 0x0e27 'ว'
+ Font: #8 Loma (13)
+ Bitmap: 6 x 7
+ Advance: 7
+ Offset: 0 x 0
+ _______
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ | 7c#a2.|
+ |551 7b.|
+ | #.|
+ | #.|
+ | #.|
+ | b#.|
+ ->| aa.|<-
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ -------
+
+Char 0x0e28 'ศ'
+ Font: #8 Loma (13)
+ Bitmap: 7 x 8
+ Advance: 8
+ Offset: 1 x 0
+ ________
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ |. 7a|
+ |.18c#ac3|
+ |.a91 8a |
+ |.# 4#9# |
+ |.b1c5## |
+ |.77cc7# |
+ |.2#8 # |
+ ->|. #5 # |<-
+ |........|
+ |........|
+ |........|
+ |........|
+ --------
+
+Char 0x0e29 'ษ'
+ Font: #8 Loma (13)
+ Bitmap: 8 x 7
+ Advance: 9
+ Offset: 0 x 0
+ _________
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |9#9 c .|
+ |9## #1.|
+ | # 9a##.|
+ | # #b#8.|
+ | # 7##1.|
+ | # # .|
+ ->| ##### .|<-
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ ---------
+
+Char 0x0e2a 'ส'
+ Font: #8 Loma (13)
+ Bitmap: 7 x 8
+ Advance: 8
+ Offset: 1 x 0
+ ________
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ |. 4|
+ |.4b#c889|
+ |.62 17c |
+ |.2a#c6# |
+ |.b8 1a# |
+ |.#1 1# |
+ |.##a # |
+ ->|.8#9 # |<-
+ |........|
+ |........|
+ |........|
+ |........|
+ --------
+
+Char 0x0e2b 'ห'
+ Font: #8 Loma (13)
+ Bitmap: 7 x 7
+ Advance: 9
+ Offset: 1 x 0
+ _________
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.bb 9#8.|
+ |.a# aca.|
+ |. # 1b8c.|
+ |. # a6 #.|
+ |. #5a #.|
+ |. #c2 #.|
+ ->|. #9 #.|<-
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ ---------
+
+Char 0x0e2d 'อ'
+ Font: #8 Loma (13)
+ Bitmap: 7 x 7
+ Advance: 8
+ Offset: 0 x 0
+ ________
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ | 6c#c91.|
+ |14 28b.|
+ | 7#7 #.|
+ | c2# #.|
+ | ##8 #.|
+ | # #.|
+ ->| ######.|<-
+ |........|
+ |........|
+ |........|
+ |........|
+ --------
+
+Char 0x0e2e 'ฮ'
+ Font: #8 Loma (13)
+ Bitmap: 6 x 7
+ Advance: 8
+ Offset: 1 x 0
+ ________
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ |.7c#c79.|
+ |.8##c8b.|
+ |.7#7 #.|
+ |.#2# #.|
+ |.##8 #.|
+ |.# #.|
+ ->|.######.|<-
+ |........|
+ |........|
+ |........|
+ |........|
+ --------
+
+Char 0x0e30 'ะ'
+ Font: #8 Loma (13)
+ Bitmap: 5 x 7
+ Advance: 7
+ Offset: 1 x 0
+ _______
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.7#7 #.|
+ |.#2#1c.|
+ |.ba958.|
+ |.a##b#.|
+ |.#2#1c.|
+ |.ba958.|
+ ->|.2a#b1.|<-
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ -------
+
+Char 0x0e31 'ั'
+ Font: #8 Loma (13)
+ Bitmap: 5 x 3
+ Advance: 0
+ Offset: -5 x 8
+
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ |8#8 #|
+ |#6b4a|
+ |4b#b2|
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ ->|.....|<-
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+
+
+Char 0x0e32 'า'
+ Font: #8 Loma (13)
+ Bitmap: 5 x 7
+ Advance: 7
+ Offset: 1 x 0
+ _______
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.3b#b2.|
+ |.b3 6b.|
+ |. #.|
+ |. #.|
+ |. #.|
+ |. #.|
+ ->|. #.|<-
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ -------
+
+Char 0x0e33 'ำ'
+ Font: #8 Loma (13)
+ Bitmap: 9 x 11
+ Advance: 7
+ Offset: -3 x 0
+ _______
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |8#7 .|
+ |#3# .|
+ |8#7 .|
+ | .|
+ | 3b#b2.|
+ | b3 6b.|
+ | #.|
+ | #.|
+ | #.|
+ | #.|
+ ->| #.|<-
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ -------
+
+Char 0x0e34 'ิ'
+ Font: #8 Loma (13)
+ Bitmap: 6 x 4
+ Advance: 0
+ Offset: -7 x 7
+
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ | 7#c4 .|
+ |6912b1.|
+ |c#c9a8.|
+ | 12355.|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ ->|.......|<-
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+
+
+Char 0x0e35 'ี'
+ Font: #8 Loma (13)
+ Bitmap: 6 x 4
+ Advance: 0
+ Offset: -7 x 8
+
+ |.......|
+ |.......|
+ |.......|
+ | #.|
+ | 7cc7#.|
+ |9c65b#.|
+ | 12357.|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ ->|.......|<-
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+
+
+Char 0x0e36 'ึ'
+ Font: #8 Loma (13)
+ Bitmap: 7 x 4
+ Advance: 0
+ Offset: -7 x 7
+
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ | 8#c5c9|
+ |7a12c3#|
+ |cca8a#8|
+ | 1356 |
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ ->|.......|<-
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+
+
+Char 0x0e37 'ื'
+ Font: #8 Loma (13)
+ Bitmap: 7 x 5
+ Advance: 0
+ Offset: -8 x 7
+
+ |........|
+ |........|
+ |........|
+ | # 5.|
+ | 1a##4#.|
+ | b9 5##.|
+ |3##ca##.|
+ | 2468c.|
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ ->|........|<-
+ |........|
+ |........|
+ |........|
+ |........|
+
+
+Char 0x0e38 'ุ'
+ Font: #8 Loma (13)
+ Bitmap: 2 x 3
+ Advance: 0
+ Offset: -3 x -3
+
+ |...|
+ |...|
+ |...|
+ |...|
+ |...|
+ |...|
+ |...|
+ |...|
+ |...|
+ |...|
+ |...|
+ |...|
+ |...|
+ |...|
+ ->|...|<-
+ |ba.|
+ |b#.|
+ | #.|
+ |...|
+
+
+Char 0x0e39 'ู'
+ Font: #8 Loma (13)
+ Bitmap: 4 x 3
+ Advance: 0
+ Offset: -5 x -3
+
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ ->|.....|<-
+ |aa c.|
+ |a# #.|
+ | ###.|
+ |.....|
+
+
+Char 0x0e40 'เ'
+ Font: #8 Loma (13)
+ Bitmap: 3 x 7
+ Advance: 4
+ Offset: 1 x 0
+ ____
+ |....|
+ |....|
+ |....|
+ |....|
+ |....|
+ |....|
+ |....|
+ |....|
+ |.# |
+ |.# |
+ |.# |
+ |.# |
+ |.# |
+ |.##a|
+ ->|.8#9|<-
+ |....|
+ |....|
+ |....|
+ |....|
+ ----
+
+Char 0x0e41 'แ'
+ Font: #8 Loma (13)
+ Bitmap: 7 x 7
+ Advance: 8
+ Offset: 1 x 0
+ ________
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ |.# # |
+ |.# # |
+ |.# # |
+ |.# # |
+ |.# # |
+ |.##9 ##9|
+ ->|.8#9 8#9|<-
+ |........|
+ |........|
+ |........|
+ |........|
+ --------
+
+Char 0x0e42 'โ'
+ Font: #8 Loma (13)
+ Bitmap: 7 x 12
+ Advance: 7
+ Offset: 0 x 0
+ _______
+ |.......|
+ |.......|
+ |.......|
+ |1a#93 2|
+ |9b139#a|
+ |bb84 |
+ | 4a8 |
+ | # |
+ | # |
+ | # |
+ | # |
+ | # |
+ | ##7|
+ | #2#|
+ ->| 8#8|<-
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ -------
+
+Char 0x0e43 'ใ'
+ Font: #8 Loma (13)
+ Bitmap: 7 x 12
+ Advance: 6
+ Offset: 0 x 0
+ ______
+ |.......|
+ |.......|
+ |.......|
+ |2a##91 |
+ |b6a37a |
+ |#173 # |
+ |6#a 8b |
+ | 6c3 |
+ | c2 |
+ | # |
+ | # |
+ | # |
+ | #c#7|
+ | #22#|
+ ->| 7##7|<-
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ ------
+
+Char 0x0e44 'ไ'
+ Font: #8 Loma (13)
+ Bitmap: 7 x 12
+ Advance: 7
+ Offset: -1 x 0
+ _______
+ |........|
+ |........|
+ |........|
+ | 1c9 .|
+ |c 56# .|
+ |8491# .|
+ |2c9 # .|
+ | # .|
+ | # .|
+ | # .|
+ | # .|
+ | # .|
+ | ##8.|
+ | #2#.|
+ ->| 8#8.|<-
+ |........|
+ |........|
+ |........|
+ |........|
+ -------
+
+Char 0x0e46 'ๆ'
+ Font: #8 Loma (13)
+ Bitmap: 5 x 11
+ Advance: 7
+ Offset: 1 x -3
+ _______
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |. 5241.|
+ |.7bbb9.|
+ |.##9 #.|
+ |.#2# #.|
+ |.8#7 #.|
+ |. #.|
+ |. #.|
+ ->|. #.|<-
+ |. #.|
+ |. #.|
+ |. 6.|
+ |.......|
+ -------
+
+Char 0x0e47 '็'
+ Font: #8 Loma (13)
+ Bitmap: 6 x 6
+ Advance: 0
+ Offset: -7 x 7
+
+ |.......|
+ |.......|
+ | 7b.|
+ |1a##a1.|
+ |97 5#7.|
+ |#1 b4#.|
+ |#538cc.|
+ |7b9b#5.|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ ->|.......|<-
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+
+
+Char 0x0e48 '่'
+ Font: #8 Loma (13)
+ Bitmap: 1 x 2
+ Advance: 0
+ Offset: -2 x 12
+
+ |..|
+ |a.|
+ |#.|
+ |..|
+ |..|
+ |..|
+ |..|
+ |..|
+ |..|
+ |..|
+ |..|
+ |..|
+ |..|
+ |..|
+ ->|..|<-
+ |..|
+ |..|
+ |..|
+ |..|
+
+
+Char 0x0e49 '้'
+ Font: #8 Loma (13)
+ Bitmap: 4 x 3
+ Advance: 0
+ Offset: -4 x 11
+
+ |....|
+ |aa 8|
+ |ac86|
+ | c6 |
+ |....|
+ |....|
+ |....|
+ |....|
+ |....|
+ |....|
+ |....|
+ |....|
+ |....|
+ |....|
+ ->|....|<-
+ |....|
+ |....|
+ |....|
+ |....|
+
+
+Char 0x0e4a '๊' top
+ Font: #8 Loma (13)
+ Bitmap: 7 x 4
+ Advance: 0
+ Offset: -6 x 11
+
+ | 1 1|
+ |7999728|
+ |#ba #93|
+ |8#9 #8 |
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ ->|.......|<-
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+
+
+Char 0x0e4b '๋'
+ Font: #8 Loma (13)
+ Bitmap: 3 x 3
+ Advance: 0
+ Offset: -4 x 11
+
+ |....|
+ | # .|
+ |###.|
+ | # .|
+ |....|
+ |....|
+ |....|
+ |....|
+ |....|
+ |....|
+ |....|
+ |....|
+ |....|
+ |....|
+ ->|....|<-
+ |....|
+ |....|
+ |....|
+ |....|
+
+
+Char 0x0e4c '์'
+ Font: #8 Loma (13)
+ Bitmap: 4 x 4
+ Advance: 0
+ Offset: -4 x 10
+
+ |....|
+ | 6|
+ |3793|
+ |#2a |
+ |8#9 |
+ |....|
+ |....|
+ |....|
+ |....|
+ |....|
+ |....|
+ |....|
+ |....|
+ |....|
+ ->|....|<-
+ |....|
+ |....|
+ |....|
+ |....|
+
+
+Char 0x0e9e 'ພ'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 10 x 9
+ Advance: 12
+ Offset: 1 x -1
+ ____________
+ |............|
+ |............|
+ |............|
+ |............|
+ |............|
+ |............|
+ |............|
+ |.2ab8 3b9.|
+ |.a###5 4#b.|
+ |.a###3 4#b.|
+ |.4##6aa 4#b.|
+ |.a#51## 4#b.|
+ |.c#31## 4#b.|
+ |.b#aa##9b#9.|
+ ->|.3###c###c2.|<-
+ |. 22 22 .|
+ |............|
+ |............|
+ |............|
+ ------------
+
+Char 0x0ea5 'ລ'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 10 x 9
+ Advance: 11
+ Offset: 0 x -1
+ ___________
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ | 39bba72 .|
+ | 4###c###2.|
+ | 9#b1 3##8.|
+ | 683 7#9.|
+ | 4896 6#9.|
+ |3####6 6#9.|
+ |5#####5a#9.|
+ ->|2###8c###5.|<-
+ | 254 1552 .|
+ |...........|
+ |...........|
+ |...........|
+ -----------
+
+Char 0x0ea7 'ວ'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 9 x 9
+ Advance: 10
+ Offset: 0 x -1
+ __________
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ | 6abb95 .|
+ | a######9.|
+ |2##2 6##.|
+ | 13 3##.|
+ | 797 3##.|
+ |6###6 3##.|
+ |6###95a#c.|
+ ->| 9######5.|<-
+ | 146641 .|
+ |..........|
+ |..........|
+ |..........|
+ ----------
+
+Char 0x0eaa 'ສ'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 12 x 11
+ Advance: 12
+ Offset: 0 x -1
+ ____________
+ |............|
+ |............|
+ |............|
+ |............|
+ |............|
+ | 29a |
+ | 4788863c#4|
+ | a#########5|
+ | ##a767a##b |
+ | 5#######c1 |
+ | 34447#b |
+ | 5ab91 4#b |
+ |2####b 4#b |
+ |3#####9a#b |
+ ->| b##8a###5 |<-
+ | 32 231 |
+ |............|
+ |............|
+ |............|
+ ------------
+
+Char 0x0eb2 'າ'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 8 x 9
+ Advance: 9
+ Offset: 0 x 0
+ _________
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ | 332 .|
+ | 5####b1.|
+ |2###8b#9.|
+ |5###84#c.|
+ |5###83#c.|
+ | 8b913#c.|
+ | 3#c.|
+ | 3#c.|
+ ->| 3#c.|<-
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ ---------
+
+Char 0x10d0 'ა'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 7 x 9
+ Advance: 8
+ Offset: 0 x -1
+ ________
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ | 793 .|
+ | 6#9 .|
+ | 9#c2.|
+ | 73 6#b.|
+ |3#b 1##.|
+ |3#c 2##.|
+ | ##7a#a.|
+ ->| 4###b2.|<-
+ | 21 .|
+ |........|
+ |........|
+ |........|
+ --------
+
+Char 0x10d1 'ბ'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 7 x 12
+ Advance: 8
+ Offset: 0 x -1
+ ________
+ |........|
+ |........|
+ |........|
+ |........|
+ | 881 .|
+ | 6#c3 .|
+ | 1#b .|
+ | cc .|
+ | 3###c1.|
+ | c#68#9.|
+ |3#c 2##.|
+ |4#b ##.|
+ |3#c 2##.|
+ | c#79#9.|
+ ->| 3c##b1.|<-
+ | 11 .|
+ |........|
+ |........|
+ |........|
+ --------
+
+Char 0x10d2 'გ'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 8 x 11
+ Advance: 8
+ Offset: 0 x -3
+ ________
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ | 133 |
+ | 7####3 |
+ | #c47#9 |
+ | 84 3#9 |
+ | 59c#4 |
+ | 9##c##1|
+ |2##1 a#6|
+ ->|4#b 7#8|<-
+ |2##1 9#7|
+ | a#cc##2|
+ | 7aa82 |
+ |........|
+ --------
+
+Char 0x10d3 'დ'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 11 x 11
+ Advance: 11
+ Offset: 0 x -3
+ ___________
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ | 131 32 |
+ | 6###3c##a |
+ | ##5b#c5b#6|
+ |3#c 7#7 6#9|
+ |4#b 5#7 5#9|
+ |2#c 4#9 7#8|
+ | c#2 c#b##3|
+ ->| 6#a 2a#b5 |<-
+ | 9#b61 |
+ | 4#####8 |
+ | 62 17a6 |
+ |...........|
+ -----------
+
+Char 0x10d4 'ე'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 7 x 11
+ Advance: 8
+ Offset: 0 x -3
+ ________
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ | 33 .|
+ | 4####3.|
+ | c#78#b.|
+ | ## 1##.|
+ | 9b ##.|
+ | ##.|
+ | 51 ##.|
+ ->|3#c ##.|<-
+ |3#c 2##.|
+ | c#cc#9.|
+ | 18aa6 .|
+ |........|
+ --------
+
+Char 0x10d5 'ვ'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 7 x 11
+ Advance: 8
+ Offset: 0 x -3
+ ________
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ | 33 .|
+ | 5####4.|
+ | ##67#c.|
+ | ## 1##.|
+ | 98 4#c.|
+ | 4##2.|
+ | 3 29#9.|
+ ->|3#a 1##.|<-
+ |3#a 1##.|
+ | c#bc#a.|
+ | 18aa71.|
+ |........|
+ --------
+
+Char 0x10d6 'ზ'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 7 x 12
+ Advance: 8
+ Offset: 0 x -1
+ ________
+ |........|
+ |........|
+ |........|
+ |........|
+ | 2784 .|
+ | ##c#4 .|
+ |3#61#8 .|
+ |3#61#6 .|
+ | 8#c#6 .|
+ | a#ac#6.|
+ |2#c 2#c.|
+ |4#b 1##.|
+ |3#c 2##.|
+ | c#7a#9.|
+ ->| 3c##b1.|<-
+ | 11 .|
+ |........|
+ |........|
+ |........|
+ --------
+
+Char 0x10d7 'თ'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 11 x 9
+ Advance: 12
+ Offset: 0 x -1
+ ____________
+ |............|
+ |............|
+ |............|
+ |............|
+ |............|
+ |............|
+ |............|
+ | 32 23 .|
+ | 5###67##c1.|
+ | ##69##78#8.|
+ |3#c 2## 2#b.|
+ |4#b #c 1#c.|
+ |3#c 2#b 3#a.|
+ | c#7a#7 b#4.|
+ ->| 3c##a 1#6 .|<-
+ | 11 1 .|
+ |............|
+ |............|
+ |............|
+ ------------
+
+Char 0x10d8 'ი'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 7 x 9
+ Advance: 8
+ Offset: 0 x -1
+ ________
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ | 33 .|
+ | 5###c2.|
+ | ##69#a.|
+ |3#c 1##.|
+ |4#b 1##.|
+ |2#c 2#c.|
+ | b#15#8.|
+ ->| 3#27c1.|<-
+ | 2 11 .|
+ |........|
+ |........|
+ |........|
+ --------
+
+Char 0x10d9 'კ'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 7 x 11
+ Advance: 8
+ Offset: 0 x -3
+ ________
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ | 1 .|
+ | b#b5 .|
+ | 58##5.|
+ | 7#9.|
+ | 29#7.|
+ | c#a .|
+ |13 39#5.|
+ ->|6#7 3#b.|<-
+ |6#9 5#a.|
+ |2##b##6.|
+ | 39a95 .|
+ |........|
+ --------
+
+Char 0x10da 'ლ'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 15 x 11
+ Advance: 15
+ Offset: 0 x -3
+ _______________
+ |...............|
+ |...............|
+ |...............|
+ |...............|
+ |...............|
+ |...............|
+ |...............|
+ | 2 3 2 |
+ | 5###5c#c5###5 |
+ |1##6a#c4c#a6##1|
+ |3#b 2#7 7#3 b#4|
+ |3#b 1#6 6#2 a#4|
+ |1##1 21 12 2##1|
+ | 8#b1 5#5 |
+ ->| 8##841 22 |<-
+ | 5#####c71 |
+ | 1c5 148#c1 |
+ | 583 |
+ |...............|
+ ---------------
+
+Char 0x10db 'მ'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 7 x 12
+ Advance: 8
+ Offset: 0 x -1
+ ________
+ |........|
+ |........|
+ |........|
+ |........|
+ | 6885 .|
+ | a#cc#9.|
+ | bb1 ##.|
+ | 31c#.|
+ | 4#####.|
+ | ##77##.|
+ |3#c ##.|
+ |4#b ##.|
+ |3#c ##.|
+ | c#89#a.|
+ ->| 3c##b1.|<-
+ | 11 .|
+ |........|
+ |........|
+ |........|
+ --------
+
+Char 0x10dc 'ნ'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 8 x 12
+ Advance: 8
+ Offset: 0 x -1
+ ________
+ |........|
+ |........|
+ |........|
+ |........|
+ | 56662 |
+ | b####5 |
+ |1#c211 |
+ |2#b 3 |
+ |2#####3 |
+ |2##77#c |
+ |2#c ##1|
+ |2#b c#2|
+ |1## ##1|
+ | b#88#b |
+ ->| 2b##b2 |<-
+ | 11 |
+ |........|
+ |........|
+ |........|
+ --------
+
+Char 0x10dd 'ო'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 11 x 9
+ Advance: 11
+ Offset: 0 x -1
+ ___________
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ | 131 32 |
+ | 5###6b##a |
+ | ##58#c4b#5|
+ |3#c 1#6 7#8|
+ |4#b #5 6#9|
+ |2## 1 9#7|
+ | 9#a1 7#c1|
+ ->| 8#3 #b2 |<-
+ | 11 2 |
+ |...........|
+ |...........|
+ |...........|
+ -----------
+
+Char 0x10de 'პ'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 7 x 12
+ Advance: 8
+ Offset: 0 x -1
+ ________
+ |........|
+ |........|
+ |........|
+ |........|
+ | 783 .|
+ | 6##b7 .|
+ | 38c#7.|
+ | 5#a.|
+ | 4b#5.|
+ | 7#c2.|
+ | 61 4#b.|
+ |3#b 1##.|
+ |3#b 2##.|
+ |1##7a#9.|
+ ->| 5###b1.|<-
+ | 21 .|
+ |........|
+ |........|
+ |........|
+ --------
+
+Char 0x10df 'ჟ'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 8 x 11
+ Advance: 8
+ Offset: 0 x -3
+ ________
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ | 1353|
+ |5ac####6|
+ |6##b7b#6|
+ | 2##18#6|
+ | 8#48#6|
+ |6a##28#6|
+ |9#a4 8#6|
+ ->| 8#6|<-
+ |7b7 b#5|
+ |4##bc#c1|
+ | 38aa71 |
+ |........|
+ --------
+
+Char 0x10e0 'რ'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 11 x 12
+ Advance: 12
+ Offset: 0 x -1
+ ____________
+ |............|
+ |............|
+ |............|
+ |............|
+ | 16a5 .|
+ | 18###7 .|
+ | 4##83 .|
+ | 2#c2 32 .|
+ | a###4a##b1.|
+ |1##69##5a#7.|
+ |3#b 2#9 5#a.|
+ |3#b #7 4#b.|
+ |1##1 31 7#8.|
+ | 8#a1 5##2.|
+ ->| 7#4 cb2 .|<-
+ | 11 2 .|
+ |............|
+ |............|
+ |............|
+ ------------
+
+Char 0x10e1 'ს'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 8 x 12
+ Advance: 8
+ Offset: 0 x -1
+ ________
+ |........|
+ |........|
+ |........|
+ |........|
+ |175 |
+ |2#a |
+ |2#a 4 |
+ |2#a 7#4 |
+ |2#a ba |
+ |2#a 6#6 |
+ |2#a ## |
+ |2#a ##2|
+ |1#c ##1|
+ | b#88#b |
+ ->| 2b##c2 |<-
+ | 11 |
+ |........|
+ |........|
+ |........|
+ --------
+
+Char 0x10e2 'ტ'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 9 x 13
+ Advance: 10
+ Offset: 0 x -3
+ __________
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ | 21 .|
+ | #9 .|
+ | b7 .|
+ | 29#c7 .|
+ | 3#bcb#b .|
+ | b#1b75#7.|
+ |2#c b72#b.|
+ |4#b a71##.|
+ |3#b 2##.|
+ ->|2## 4#b.|<-
+ | b#6 a#7.|
+ | 3##bc#c .|
+ | 28aa6 .|
+ |..........|
+ ----------
+
+Char 0x10e3 'უ'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 8 x 11
+ Advance: 8
+ Offset: 0 x -3
+ ________
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ |131 22 |
+ |4##7##9 |
+ |14a#5c#2|
+ | 5# 8#4|
+ | 26 8#4|
+ | 8#4|
+ |1b7 8#4|
+ ->|3#a 8#4|<-
+ |3#b a#3|
+ | c#cc#c |
+ | 18aa71 |
+ |........|
+ --------
+
+Char 0x10e4 'ფ'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 11 x 11
+ Advance: 11
+ Offset: 0 x -3
+ ___________
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ | 132 23 |
+ | 5###7a##c1|
+ | ##68##5b#7|
+ |3#b 1#9 6#9|
+ |4#a #8 6#7|
+ |1##25#65ca |
+ | 9####15cc2|
+ ->| 4761 8#7|<-
+ | 441 9#7|
+ | 9##bc##2|
+ | 69aa82 |
+ |...........|
+ -----------
+
+Char 0x10e5 'ქ'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 7 x 14
+ Advance: 8
+ Offset: 0 x -3
+ ________
+ |........|
+ |........|
+ |........|
+ |........|
+ | 67.|
+ | c#.|
+ | c#.|
+ | 3 c#.|
+ | 3#####.|
+ | b#68##.|
+ | ## ##.|
+ | c#.|
+ | c#.|
+ | 41 c#.|
+ ->|2#c c#.|<-
+ |3#c ##.|
+ | c#cc#9.|
+ | 18aa6 .|
+ |........|
+ --------
+
+Char 0x10e7 'ყ'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 7 x 11
+ Advance: 8
+ Offset: 0 x -3
+ ________
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ | 3 .|
+ | 7#3 c#.|
+ |1##2 c#.|
+ |3#a c#.|
+ |3#a ##.|
+ | ##78##.|
+ | 3c#c##.|
+ ->| c#.|<-
+ |3#c ##.|
+ | c#cc#9.|
+ | 18aa6 .|
+ |........|
+ --------
+
+Char 0x10e8 'შ'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 7 x 12
+ Advance: 8
+ Offset: 0 x -1
+ ________
+ |........|
+ |........|
+ |........|
+ |........|
+ |2842871.|
+ |38#c9#a.|
+ | 9c c#.|
+ | 12 c#.|
+ | 18b7c#.|
+ | b#cc##.|
+ |3## 1##.|
+ |4#b ##.|
+ |3#c ##.|
+ | c#89#a.|
+ ->| 3c##b1.|<-
+ | 11 .|
+ |........|
+ |........|
+ |........|
+ --------
+
+Char 0x10e9 'ჩ'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 8 x 12
+ Advance: 8
+ Offset: 0 x -1
+ ________
+ |........|
+ |........|
+ |........|
+ |........|
+ | 17872 |
+ | b#ac# |
+ |1#a 3#3 |
+ |2#918#1 |
+ |2####b1 |
+ |2##77#b |
+ |2#c ##1|
+ |2#b c#2|
+ |2#b ## |
+ |2#b 2#b |
+ ->|2#b 7#5 |<-
+ | 21 3 |
+ |........|
+ |........|
+ |........|
+ --------
+
+Char 0x10ea 'ც'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 9 x 11
+ Advance: 9
+ Offset: 0 x -3
+ _________
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ | 22 21 |
+ | 9#23#8 |
+ | ## b#5 |
+ |2#c 2#c |
+ |3#b 3#b |
+ |4#b 5##2 |
+ |4#b 26#a |
+ ->|3#b ##1|<-
+ |1##2 2##1|
+ | 8##b##9 |
+ | 59a95 |
+ |.........|
+ ---------
+
+Char 0x10eb 'ძ'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 7 x 12
+ Advance: 8
+ Offset: 0 x -1
+ ________
+ |........|
+ |........|
+ |........|
+ |........|
+ | 67.|
+ | c#.|
+ | c#.|
+ | 3 c#.|
+ | 4#####.|
+ | ##68##.|
+ |3#c ##.|
+ |4#b ##.|
+ |3#c ##.|
+ | c#79#9.|
+ ->| 3c##b1.|<-
+ | 21 .|
+ |........|
+ |........|
+ |........|
+ --------
+
+Char 0x10ec 'წ'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 8 x 12
+ Advance: 8
+ Offset: 0 x -1
+ ________
+ |........|
+ |........|
+ |........|
+ |........|
+ | 1781581|
+ | c#8cc92|
+ |1#b c7 |
+ |2#b 32 |
+ |2#b7b81 |
+ |2##cc#a |
+ |2## 1##1|
+ |2#b ##2|
+ |1#c ##1|
+ | c#89#b |
+ ->| 3c##b2 |<-
+ | 11 |
+ |........|
+ |........|
+ |........|
+ --------
+
+Char 0x10ee 'ხ'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 8 x 12
+ Advance: 8
+ Offset: 0 x -1
+ ________
+ |........|
+ |........|
+ |........|
+ |........|
+ |175 |
+ |2#b |
+ |2#b |
+ |2#b 3 |
+ |2#####3 |
+ |2##77#b |
+ |2#c ##1|
+ |2#b ##2|
+ |1#c ##1|
+ | b#88#b |
+ ->| 2b##c2 |<-
+ | 11 |
+ |........|
+ |........|
+ |........|
+ --------
+
+Char 0x1ebf 'ế'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 8 x 12
+ Advance: 10
+ Offset: 1 x 0
+ __________
+ |..........|
+ |..........|
+ |..........|
+ |. 1#7.|
+ |. b#ba9 .|
+ |. 89 98 .|
+ |. .|
+ |. 3a##b4 .|
+ |.3#a1 8#5.|
+ |.a#2 #b.|
+ |.########.|
+ |.## .|
+ |.a#4 .|
+ |.3#b2 15a.|
+ ->|. 29c#c93.|<-
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ ----------
+
+Char 0x1ec7 'ệ'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 8 x 15
+ Advance: 10
+ Offset: 1 x -3
+ __________
+ |..........|
+ |..........|
+ |..........|
+ |. 8#8 .|
+ |. 2#7#2 .|
+ |. a7 7a .|
+ |. .|
+ |. 3a##b4 .|
+ |.3#a1 8#5.|
+ |.a#2 #b.|
+ |.########.|
+ |.## .|
+ |.a#4 .|
+ |.3#b2 15a.|
+ ->|. 29c#c93.|<-
+ |. .|
+ |. ## .|
+ |. ## .|
+ |..........|
+ ----------
+
+Char 0x200f '‏'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 0 x 0
+ Advance: 0
+ Offset: 0 x 0
+
+ ||
+ ||
+ ||
+ ||
+ ||
+ ||
+ ||
+ ||
+ ||
+ ||
+ ||
+ ||
+ ||
+ ||
+ ->||<-
+ ||
+ ||
+ ||
+ ||
+
+
+Char 0x2013 '–'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 6 x 2
+ Advance: 7
+ Offset: 1 x 3
+ _______
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.######|
+ |.######|
+ |.......|
+ |.......|
+ ->|.......|<-
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ -------
+
+Char 0x2014 '—'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 13 x 2
+ Advance: 14
+ Offset: 1 x 3
+ ______________
+ |..............|
+ |..............|
+ |..............|
+ |..............|
+ |..............|
+ |..............|
+ |..............|
+ |..............|
+ |..............|
+ |..............|
+ |.#############|
+ |.#############|
+ |..............|
+ |..............|
+ ->|..............|<-
+ |..............|
+ |..............|
+ |..............|
+ |..............|
+ --------------
+
+Char 0x201c '“'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 6 x 4
+ Advance: 9
+ Offset: 1 x 6
+ _________
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |. 6a 6a..|
+ |.5#44#4..|
+ |.## ## ..|
+ |.## ## ..|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ ->|.........|<-
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ ---------
+
+Char 0x201d '”'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 6 x 4
+ Advance: 9
+ Offset: 1 x 6
+ _________
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |. ## ##..|
+ |. ## ##..|
+ |.4#54#5..|
+ |.a6 a6 ..|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ ->|.........|<-
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ ---------
+
+Char 0x201e '„'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 6 x 4
+ Advance: 9
+ Offset: 1 x -1
+ _________
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |. ## ##..|
+ |. ## ##..|
+ ->|.4#54#5..|<-
+ |.a6 a6 ..|
+ |.........|
+ |.........|
+ |.........|
+ ---------
+
+Char 0x2022 '•'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 5 x 5
+ Advance: 9
+ Offset: 2 x 3
+ _________
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |..1a#a1..|
+ |..a###a..|
+ |..#####..|
+ |..a###a..|
+ |..1a#a1..|
+ |.........|
+ |.........|
+ ->|.........|<-
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ ---------
+
+Char 0x2023 '‣'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 6 x 6
+ Advance: 9
+ Offset: 2 x 2
+ _________
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |..c5 .|
+ |..##b4 .|
+ |..####a1.|
+ |..###c4 .|
+ |..#c6 .|
+ |..7 .|
+ |.........|
+ ->|.........|<-
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ ---------
+
+Char 0x2026 '…'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 10 x 3
+ Advance: 14
+ Offset: 1 x 0
+ ______________
+ |..............|
+ |..............|
+ |..............|
+ |..............|
+ |..............|
+ |..............|
+ |..............|
+ |..............|
+ |..............|
+ |..............|
+ |..............|
+ |..............|
+ |.## ## ##...|
+ |.## ## ##...|
+ ->|.## ## ##...|<-
+ |..............|
+ |..............|
+ |..............|
+ |..............|
+ --------------
+
+Char 0x20ac '€'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 9 x 10
+ Advance: 10
+ Offset: 0 x 0
+ __________
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ | 6b##c9.|
+ | b#6 39.|
+ | 8#7 .|
+ |b#####a .|
+ | ## .|
+ |b####9 .|
+ | 9#6 .|
+ | 3#c .|
+ | 6#91 39.|
+ ->| 4a##c9.|<-
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ ----------
+
+Char 0x2219 '∙'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 2 x 3
+ Advance: 5
+ Offset: 1 x 3
+ _____
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ |.##..|
+ |.##..|
+ |.##..|
+ |.....|
+ |.....|
+ ->|.....|<-
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ -----
+
+Char 0x221a '√'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 9 x 12
+ Advance: 9
+ Offset: 1 x 0
+ _________
+ |..........|
+ |..........|
+ |..........|
+ |. 9#|
+ |. 1#1|
+ |. 5a |
+ |. b5 |
+ |. 2# |
+ |.499 79 |
+ |.8a#1 c3 |
+ |. 4#54c |
+ |. cb97 |
+ |. 7##2 |
+ |. 2#b |
+ ->|. a5 |<-
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ ---------
+
+Char 0x2248 '≈'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 9 x 6
+ Advance: 12
+ Offset: 1 x 1
+ ____________
+ |............|
+ |............|
+ |............|
+ |............|
+ |............|
+ |............|
+ |............|
+ |............|
+ |.3a#c72 3a..|
+ |.#########..|
+ |.92 27c#a3..|
+ |.3a#c72 29..|
+ |.#########..|
+ |.a2 27c#a3..|
+ ->|............|<-
+ |............|
+ |............|
+ |............|
+ |............|
+ ------------
+
+Char 0x2264 '≤'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 9 x 8
+ Advance: 12
+ Offset: 1 x 0
+ ____________
+ |............|
+ |............|
+ |............|
+ |............|
+ |............|
+ |............|
+ |............|
+ |. 1369c..|
+ |.369c##b86..|
+ |.###94 ..|
+ |.369c##b86..|
+ |. 369c..|
+ |. ..|
+ |.#########..|
+ ->|.#########..|<-
+ |............|
+ |............|
+ |............|
+ |............|
+ ------------
+
+Char 0x2265 '≥'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 9 x 8
+ Advance: 12
+ Offset: 1 x 0
+ ____________
+ |............|
+ |............|
+ |............|
+ |............|
+ |............|
+ |............|
+ |............|
+ |.c851 ..|
+ |.a###c852 ..|
+ |. 258b##c..|
+ |. 258b##c..|
+ |.a###c851 ..|
+ |.c851 ..|
+ |.#########..|
+ ->|.#########..|<-
+ |............|
+ |............|
+ |............|
+ |............|
+ ------------
+
+Char 0x2320 '⌠' bottom
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 6 x 15
+ Advance: 9
+ Offset: 3 x -4
+ _________
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |... 585 |
+ |... 7ba#1|
+ |... #737 |
+ |...4#5 |
+ |...6#4 |
+ |...8#3 |
+ |...9#3 |
+ |...9#3 |
+ |...a#3 |
+ |...a#3 |
+ ->|...a#3 |<-
+ |...a#3 |
+ |...a#3 |
+ |...a#3 |
+ |...571 |
+ ---------
+
+Char 0x2321 '⌡' bottom
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 6 x 15
+ Advance: 9
+ Offset: 0 x -4
+ _________
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ | 7a2...|
+ | a#3...|
+ | a#3...|
+ | a#3...|
+ | a#3...|
+ | a#3...|
+ | a#3...|
+ | a#2...|
+ | a#2...|
+ | a# ...|
+ ->| b# ...|<-
+ | ca ...|
+ |5b1#5 ...|
+ |7#aa ...|
+ | 33 ...|
+ ---------
+
+Char 0x2500 '─'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 17 x 1
+ Advance: 17
+ Offset: 0 x 5
+ _________________
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ |ccccccccccccccccc|
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ ->|.................|<-
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x2502 '│'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 1 x 17
+ Advance: 17
+ Offset: 8 x -3
+ _________________
+ |.................|
+ |........c........|
+ |........c........|
+ |........c........|
+ |........c........|
+ |........c........|
+ |........c........|
+ |........c........|
+ |........c........|
+ |........c........|
+ |........c........|
+ |........c........|
+ |........c........|
+ |........c........|
+ ->|........c........|<-
+ |........c........|
+ |........c........|
+ |........b........|
+ |.................|
+ -----------------
+
+Char 0x250c '┌'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 9 x 9
+ Advance: 17
+ Offset: 8 x -3
+ _________________
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ |........#cccccccc|
+ |........c |
+ |........c |
+ |........c |
+ |........c |
+ ->|........c |<-
+ |........c |
+ |........c |
+ |........a |
+ |.................|
+ -----------------
+
+Char 0x2510 '┐'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 9 x 9
+ Advance: 17
+ Offset: 0 x -3
+ _________________
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ |ccccccccc........|
+ | c........|
+ | c........|
+ | c........|
+ | c........|
+ ->| c........|<-
+ | c........|
+ | c........|
+ | a........|
+ |.................|
+ -----------------
+
+Char 0x2514 '└'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 9 x 9
+ Advance: 17
+ Offset: 8 x 5
+ _________________
+ |.................|
+ |........c |
+ |........c |
+ |........c |
+ |........c |
+ |........c |
+ |........c |
+ |........c |
+ |........c |
+ |........bcccccccc|
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ ->|.................|<-
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x2518 '┘'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 9 x 9
+ Advance: 17
+ Offset: 0 x 5
+ _________________
+ |.................|
+ | c........|
+ | c........|
+ | c........|
+ | c........|
+ | c........|
+ | c........|
+ | c........|
+ | c........|
+ |ccccccccb........|
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ ->|.................|<-
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x251c '├'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 9 x 17
+ Advance: 17
+ Offset: 8 x -3
+ _________________
+ |.................|
+ |........c |
+ |........c |
+ |........c |
+ |........c |
+ |........c |
+ |........c |
+ |........c |
+ |........c |
+ |........#cccccccc|
+ |........c |
+ |........c |
+ |........c |
+ |........c |
+ ->|........c |<-
+ |........c |
+ |........c |
+ |........b |
+ |.................|
+ -----------------
+
+Char 0x2524 '┤'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 9 x 17
+ Advance: 17
+ Offset: 0 x -3
+ _________________
+ |.................|
+ | c........|
+ | c........|
+ | c........|
+ | c........|
+ | c........|
+ | c........|
+ | c........|
+ | c........|
+ |ccccccccc........|
+ | c........|
+ | c........|
+ | c........|
+ | c........|
+ ->| c........|<-
+ | c........|
+ | c........|
+ | b........|
+ |.................|
+ -----------------
+
+Char 0x252c '┬'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 17 x 9
+ Advance: 17
+ Offset: 0 x -3
+ _________________
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ |cccccccc#cccccccc|
+ | c |
+ | c |
+ | c |
+ | c |
+ ->| c |<-
+ | c |
+ | c |
+ | a |
+ |.................|
+ -----------------
+
+Char 0x2534 '┴'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 17 x 9
+ Advance: 17
+ Offset: 0 x 5
+ _________________
+ |.................|
+ | c |
+ | c |
+ | c |
+ | c |
+ | c |
+ | c |
+ | c |
+ | c |
+ |ccccccccccccccccc|
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ ->|.................|<-
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x253c '┼'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 17 x 17
+ Advance: 17
+ Offset: 0 x -3
+ _________________
+ |.................|
+ | c |
+ | c |
+ | c |
+ | c |
+ | c |
+ | c |
+ | c |
+ | c |
+ |cccccccc#cccccccc|
+ | c |
+ | c |
+ | c |
+ | c |
+ ->| c |<-
+ | c |
+ | c |
+ | b |
+ |.................|
+ -----------------
+
+Char 0x2550 '═'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 17 x 2
+ Advance: 17
+ Offset: 0 x 5
+ _________________
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ |ccccccccccccccccc|
+ |bbbbbbbbbbbbbbbbb|
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ ->|.................|<-
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x2551 '║'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 3 x 17
+ Advance: 17
+ Offset: 7 x -3
+ _________________
+ |.................|
+ |.......b c.......|
+ |.......b c.......|
+ |.......b c.......|
+ |.......b c.......|
+ |.......b c.......|
+ |.......b c.......|
+ |.......b c.......|
+ |.......b c.......|
+ |.......b c.......|
+ |.......b c.......|
+ |.......b c.......|
+ |.......b c.......|
+ |.......b c.......|
+ ->|.......b c.......|<-
+ |.......b c.......|
+ |.......b c.......|
+ |.......b b.......|
+ |.................|
+ -----------------
+
+Char 0x2552 '╒'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 9 x 10
+ Advance: 17
+ Offset: 8 x -3
+ _________________
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ |........#cccccccc|
+ |........#bbbbbbbb|
+ |........c |
+ |........c |
+ |........c |
+ |........c |
+ ->|........c |<-
+ |........c |
+ |........c |
+ |........9 |
+ |.................|
+ -----------------
+
+Char 0x2553 '╓'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 10 x 9
+ Advance: 17
+ Offset: 7 x -3
+ _________________
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ |.......bc#ccccccc|
+ |.......b c |
+ |.......b c |
+ |.......b c |
+ |.......b c |
+ ->|.......b c |<-
+ |.......b c |
+ |.......b c |
+ |.......a a |
+ |.................|
+ -----------------
+
+Char 0x2554 '╔'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 10 x 10
+ Advance: 17
+ Offset: 7 x -3
+ _________________
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ |.......bccccccccc|
+ |.......b bbbbbbbb|
+ |.......b c |
+ |.......b c |
+ |.......b c |
+ |.......b c |
+ ->|.......b c |<-
+ |.......b c |
+ |.......b c |
+ |.......1 1 |
+ |.................|
+ -----------------
+
+Char 0x2555 '╕'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 9 x 10
+ Advance: 17
+ Offset: 0 x -3
+ _________________
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ |ccccccccc........|
+ |bbbbbbbbc........|
+ | c........|
+ | c........|
+ | c........|
+ | c........|
+ ->| c........|<-
+ | c........|
+ | c........|
+ | 9........|
+ |.................|
+ -----------------
+
+Char 0x2556 '╖'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 10 x 9
+ Advance: 17
+ Offset: 0 x -3
+ _________________
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ |bcccccc#cc.......|
+ | b c.......|
+ | b c.......|
+ | b c.......|
+ | b c.......|
+ ->| b c.......|<-
+ | b c.......|
+ | b c.......|
+ | a a.......|
+ |.................|
+ -----------------
+
+Char 0x2557 '╗'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 10 x 10
+ Advance: 17
+ Offset: 0 x -3
+ _________________
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ |cccccccccc.......|
+ |bbbbbbbb c.......|
+ | b c.......|
+ | b c.......|
+ | b c.......|
+ | b c.......|
+ ->| b c.......|<-
+ | b c.......|
+ | b c.......|
+ | 1 1.......|
+ |.................|
+ -----------------
+
+Char 0x2558 '╘' top
+ Font: #12 FZHeiTi (17)
+ Bitmap: 9 x 10
+ Advance: 17
+ Offset: 8 x 5
+ _________________
+ |........9 |
+ |........c |
+ |........c |
+ |........c |
+ |........c |
+ |........c |
+ |........c |
+ |........c |
+ |........#cccccccc|
+ |........#bbbbbbbb|
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ ->|.................|<-
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x2559 '╙'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 10 x 9
+ Advance: 17
+ Offset: 7 x 5
+ _________________
+ |.................|
+ |.......b c |
+ |.......b c |
+ |.......b c |
+ |.......b c |
+ |.......b c |
+ |.......b c |
+ |.......b c |
+ |.......b c |
+ |.......accccccccc|
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ ->|.................|<-
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x255a '╚' top
+ Font: #12 FZHeiTi (17)
+ Bitmap: 10 x 10
+ Advance: 17
+ Offset: 7 x 5
+ _________________
+ |.......1 1 |
+ |.......b c |
+ |.......b c |
+ |.......b c |
+ |.......b c |
+ |.......b c |
+ |.......b c |
+ |.......b c |
+ |.......b cccccccc|
+ |.......bbbbbbbbbb|
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ ->|.................|<-
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x255b '╛' top
+ Font: #12 FZHeiTi (17)
+ Bitmap: 9 x 10
+ Advance: 17
+ Offset: 0 x 5
+ _________________
+ | 9........|
+ | c........|
+ | c........|
+ | c........|
+ | c........|
+ | c........|
+ | c........|
+ | c........|
+ |ccccccccc........|
+ |bbbbbbbbc........|
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ ->|.................|<-
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x255c '╜'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 10 x 9
+ Advance: 17
+ Offset: 0 x 5
+ _________________
+ |.................|
+ | b c.......|
+ | b c.......|
+ | b c.......|
+ | b c.......|
+ | b c.......|
+ | b c.......|
+ | b c.......|
+ | b c.......|
+ |bcccccccca.......|
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ ->|.................|<-
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x255d '╝' top
+ Font: #12 FZHeiTi (17)
+ Bitmap: 10 x 10
+ Advance: 17
+ Offset: 0 x 5
+ _________________
+ | 1 1.......|
+ | b c.......|
+ | b c.......|
+ | b c.......|
+ | b c.......|
+ | b c.......|
+ | b c.......|
+ | b c.......|
+ |cccccccc c.......|
+ |bbbbbbbbbc.......|
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ ->|.................|<-
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x255e '╞'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 9 x 17
+ Advance: 17
+ Offset: 8 x -3
+ _________________
+ |.................|
+ |........c |
+ |........c |
+ |........c |
+ |........c |
+ |........c |
+ |........c |
+ |........c |
+ |........#cccccccc|
+ |........#bbbbbbbb|
+ |........c |
+ |........c |
+ |........c |
+ |........c |
+ ->|........c |<-
+ |........c |
+ |........c |
+ |........b |
+ |.................|
+ -----------------
+
+Char 0x255f '╟'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 10 x 17
+ Advance: 17
+ Offset: 7 x -3
+ _________________
+ |.................|
+ |.......b c |
+ |.......b c |
+ |.......b c |
+ |.......b c |
+ |.......b c |
+ |.......b c |
+ |.......b c |
+ |.......b c |
+ |.......b #ccccccc|
+ |.......b c |
+ |.......b c |
+ |.......b c |
+ |.......b c |
+ ->|.......b c |<-
+ |.......b c |
+ |.......b c |
+ |.......b b |
+ |.................|
+ -----------------
+
+Char 0x2560 '╠'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 10 x 17
+ Advance: 17
+ Offset: 7 x -3
+ _________________
+ |.................|
+ |.......b c |
+ |.......b c |
+ |.......b c |
+ |.......b c |
+ |.......b c |
+ |.......b c |
+ |.......b c |
+ |.......b cccccccc|
+ |.......b bbbbbbbb|
+ |.......b c |
+ |.......b c |
+ |.......b c |
+ |.......b c |
+ ->|.......b c |<-
+ |.......b c |
+ |.......b c |
+ |.......b b |
+ |.................|
+ -----------------
+
+Char 0x2561 '╡'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 9 x 17
+ Advance: 17
+ Offset: 0 x -3
+ _________________
+ |.................|
+ | c........|
+ | c........|
+ | c........|
+ | c........|
+ | c........|
+ | c........|
+ | c........|
+ |ccccccccc........|
+ |bbbbbbbbc........|
+ | c........|
+ | c........|
+ | c........|
+ | c........|
+ ->| c........|<-
+ | c........|
+ | c........|
+ | b........|
+ |.................|
+ -----------------
+
+Char 0x2562 '╢'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 10 x 17
+ Advance: 17
+ Offset: 0 x -3
+ _________________
+ |.................|
+ | b c.......|
+ | b c.......|
+ | b c.......|
+ | b c.......|
+ | b c.......|
+ | b c.......|
+ | b c.......|
+ | b c.......|
+ |ccccccc# c.......|
+ | b c.......|
+ | b c.......|
+ | b c.......|
+ | b c.......|
+ ->| b c.......|<-
+ | b c.......|
+ | b c.......|
+ | b b.......|
+ |.................|
+ -----------------
+
+Char 0x2563 '╣'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 10 x 17
+ Advance: 17
+ Offset: 0 x -3
+ _________________
+ |.................|
+ | b c.......|
+ | b c.......|
+ | b c.......|
+ | b c.......|
+ | b c.......|
+ | b c.......|
+ | b c.......|
+ |cccccccc c.......|
+ |bbbbbbbb c.......|
+ | b c.......|
+ | b c.......|
+ | b c.......|
+ | b c.......|
+ ->| b c.......|<-
+ | b c.......|
+ | b c.......|
+ | b b.......|
+ |.................|
+ -----------------
+
+Char 0x2564 '╤'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 17 x 10
+ Advance: 17
+ Offset: 0 x -3
+ _________________
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ |ccccccccccccccccc|
+ |bbbbbbbbbbbbbbbbb|
+ | c |
+ | c |
+ | c |
+ | c |
+ ->| c |<-
+ | c |
+ | c |
+ | 1 |
+ |.................|
+ -----------------
+
+Char 0x2565 '╥'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 17 x 9
+ Advance: 17
+ Offset: 0 x -3
+ _________________
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ |ccccccc#c#ccccccc|
+ | b c |
+ | b c |
+ | b c |
+ | b c |
+ ->| b c |<-
+ | b c |
+ | b c |
+ | a a |
+ |.................|
+ -----------------
+
+Char 0x2566 '╦'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 17 x 10
+ Advance: 17
+ Offset: 0 x -3
+ _________________
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ |ccccccccccccccccc|
+ |bbbbbbbb bbbbbbbb|
+ | b c |
+ | b c |
+ | b c |
+ | b c |
+ ->| b c |<-
+ | b c |
+ | b c |
+ | 1 1 |
+ |.................|
+ -----------------
+
+Char 0x2567 '╧' top
+ Font: #12 FZHeiTi (17)
+ Bitmap: 17 x 10
+ Advance: 17
+ Offset: 0 x 5
+ _________________
+ | 1 |
+ | c |
+ | c |
+ | c |
+ | c |
+ | c |
+ | c |
+ | c |
+ |ccccccccccccccccc|
+ |bbbbbbbbbbbbbbbbb|
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ ->|.................|<-
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x2568 '╨'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 17 x 9
+ Advance: 17
+ Offset: 0 x 5
+ _________________
+ |.................|
+ | b c |
+ | b c |
+ | b c |
+ | b c |
+ | b c |
+ | b c |
+ | b c |
+ | b c |
+ |ccccccccccccccccc|
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ ->|.................|<-
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x2569 '╩' top
+ Font: #12 FZHeiTi (17)
+ Bitmap: 17 x 10
+ Advance: 17
+ Offset: 0 x 5
+ _________________
+ | 1 1 |
+ | b c |
+ | b c |
+ | b c |
+ | b c |
+ | b c |
+ | b c |
+ | b c |
+ |cccccccc cccccccc|
+ |bbbbbbbbbbbbbbbbb|
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ ->|.................|<-
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x256a '╪'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 17 x 17
+ Advance: 17
+ Offset: 0 x -3
+ _________________
+ |.................|
+ | c |
+ | c |
+ | c |
+ | c |
+ | c |
+ | c |
+ | c |
+ |cccccccc#cccccccc|
+ |bbbbbbbb#bbbbbbbb|
+ | c |
+ | c |
+ | c |
+ | c |
+ ->| c |<-
+ | c |
+ | c |
+ | b |
+ |.................|
+ -----------------
+
+Char 0x256b '╫'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 17 x 17
+ Advance: 17
+ Offset: 0 x -3
+ _________________
+ |.................|
+ | b c |
+ | b c |
+ | b c |
+ | b c |
+ | b c |
+ | b c |
+ | b c |
+ | b c |
+ |ccccccc#c#ccccccc|
+ | b c |
+ | b c |
+ | b c |
+ | b c |
+ ->| b c |<-
+ | b c |
+ | b c |
+ | b b |
+ |.................|
+ -----------------
+
+Char 0x256c '╬' top
+ Font: #12 FZHeiTi (17)
+ Bitmap: 17 x 18
+ Advance: 17
+ Offset: 0 x -3
+ _________________
+ | 1 1 |
+ | b c |
+ | b c |
+ | b c |
+ | b c |
+ | b c |
+ | b c |
+ | b c |
+ |cccccccc cccccccc|
+ |bbbbbbbb bbbbbbbb|
+ | b c |
+ | b c |
+ | b c |
+ | b c |
+ ->| b c |<-
+ | b c |
+ | b c |
+ | 1 1 |
+ |.................|
+ -----------------
+
+Char 0x2580 '▀'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 12 x 8
+ Advance: 11
+ Offset: -1 x 3
+ ___________
+ |............|
+ |............|
+ |............|
+ |............|
+ |188888888888|
+ |1##########c|
+ |1##########c|
+ |1##########c|
+ |1##########c|
+ |1##########c|
+ |1##########c|
+ | 77777777776|
+ |............|
+ |............|
+ ->|............|<-
+ |............|
+ |............|
+ |............|
+ |............|
+ -----------
+
+Char 0x2584 '▄' bottom
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 12 x 8
+ Advance: 11
+ Offset: -1 x -4
+ ___________
+ |............|
+ |............|
+ |............|
+ |............|
+ |............|
+ |............|
+ |............|
+ |............|
+ |............|
+ |............|
+ |............|
+ |188888888888|
+ |1##########c|
+ |1##########c|
+ ->|1##########c|<-
+ |1##########c|
+ |1##########c|
+ |1##########c|
+ | 77777777776|
+ -----------
+
+Char 0x2588 '█' bottom
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 12 x 15
+ Advance: 11
+ Offset: -1 x -4
+ ___________
+ |............|
+ |............|
+ |............|
+ |............|
+ |1aaaaaaaaaa9|
+ |1##########c|
+ |1##########c|
+ |1##########c|
+ |1##########c|
+ |1##########c|
+ |1##########c|
+ |1##########c|
+ |1##########c|
+ |1##########c|
+ ->|1##########c|<-
+ |1##########c|
+ |1##########c|
+ |1##########c|
+ | 77777777776|
+ -----------
+
+Char 0x258c '▌' bottom
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 7 x 15
+ Advance: 11
+ Offset: -1 x -4
+ ___________
+ |............|
+ |............|
+ |............|
+ |............|
+ |1aaaaa4.....|
+ |1#####5.....|
+ |1#####5.....|
+ |1#####5.....|
+ |1#####5.....|
+ |1#####5.....|
+ |1#####5.....|
+ |1#####5.....|
+ |1#####5.....|
+ |1#####5.....|
+ ->|1#####5.....|<-
+ |1#####5.....|
+ |1#####5.....|
+ |1#####5.....|
+ | 777772.....|
+ -----------
+
+Char 0x2590 '▐' bottom
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 7 x 15
+ Advance: 11
+ Offset: 5 x -4
+ ___________
+ |............|
+ |............|
+ |............|
+ |............|
+ |.....1aaaaa4|
+ |.....1#####5|
+ |.....1#####5|
+ |.....1#####5|
+ |.....1#####5|
+ |.....1#####5|
+ |.....1#####5|
+ |.....1#####5|
+ |.....1#####5|
+ |.....1#####5|
+ ->|.....1#####5|<-
+ |.....1#####5|
+ |.....1#####5|
+ |.....1#####5|
+ |..... 777772|
+ -----------
+
+Char 0x2591 '░' bottom
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 11 x 15
+ Advance: 11
+ Offset: -1 x -4
+ ___________
+ |............|
+ |............|
+ |............|
+ |............|
+ |1a2 68 .|
+ |1#3 8a .|
+ | 13 32.|
+ | 5# c7.|
+ | 27 63.|
+ |1a2 68 .|
+ |1#3 8a .|
+ | 13 32.|
+ | 5# c7.|
+ | 27 63.|
+ ->|1a2 68 .|<-
+ |1#3 8a .|
+ | 13 32.|
+ | 5# c7.|
+ | 27 63.|
+ -----------
+
+Char 0x2592 '▒' bottom
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 12 x 15
+ Advance: 11
+ Offset: -1 x -4
+ ___________
+ |............|
+ |............|
+ |............|
+ |............|
+ |1a24a 68 95 |
+ |1#35# 8a c7 |
+ | a8 #53#16c|
+ | 2752b2 b 3a|
+ |1#35# 8a c7 |
+ |182 85245615|
+ | a8 #53#16c|
+ |181 85355724|
+ |1#35# 8a c7 |
+ | 1861c31c 4a|
+ ->| 97 #42#15b|<-
+ |1#35# 8a c7 |
+ |1a 1a3463833|
+ | a8 #53#16c|
+ | 54 7217 36|
+ -----------
+
+Char 0x2593 '▓' bottom
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 12 x 15
+ Advance: 11
+ Offset: -1 x -4
+ ___________
+ |............|
+ |............|
+ |............|
+ |............|
+ | 8aaa42aaa9|
+ | a###53###c|
+ |1##ca####abc|
+ |1##8 ####16c|
+ |1##b7####7ac|
+ | 3b###75###c|
+ | a###53###c|
+ |1##ca####abc|
+ |1##8 ####16c|
+ |1##b7####7ac|
+ ->| 3b###75###c|<-
+ | a###53###c|
+ |1##ca####abc|
+ |1##8 ####16c|
+ | 774 7777 36|
+ -----------
+
+Char 0x25a0 '■'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 11 x 11
+ Advance: 13
+ Offset: 1 x -2
+ _____________
+ |.............|
+ |.............|
+ |.............|
+ |.............|
+ |.............|
+ |.............|
+ |.a##########.|
+ |.a##########.|
+ |.a##########.|
+ |.a##########.|
+ |.a##########.|
+ |.a##########.|
+ |.a##########.|
+ |.a##########.|
+ ->|.a##########.|<-
+ |.a##########.|
+ |.7aaaaaaaaa9.|
+ |.............|
+ |.............|
+ -------------
+
+Char 0x25b6 '▶'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 11 x 11
+ Advance: 11
+ Offset: 0 x -2
+ ___________
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ |a3 |
+ |##a3 |
+ |####a3 |
+ |######a3 |
+ |########a3 |
+ |#########c3|
+ |#######c6 |
+ |#####c6 |
+ ->|###c6 |<-
+ |##6 |
+ |6 |
+ |...........|
+ |...........|
+ -----------
+
+Char 0x25c0 '◀'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 11 x 11
+ Advance: 11
+ Offset: 0 x -2
+ ___________
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ |...........|
+ | 58|
+ | 5c#a|
+ | 5c###a|
+ | 5c#####a|
+ | 5b#######a|
+ |6#########a|
+ | 18#######a|
+ | 18#####a|
+ ->| 18###a|<-
+ | 18#a|
+ | 15|
+ |...........|
+ |...........|
+ -----------
+
+Char 0x3001 '、'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 5 x 5
+ Advance: 17
+ Offset: 2 x -2
+ _________________
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ |..8a1 ..........|
+ |..8#b1 ..........|
+ ->|.. 7#c1..........|<-
+ |.. 7#7..........|
+ |.. 6 ..........|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x3002 '。'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 6 x 6
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ |. 1684 ..........|
+ |. a4176..........|
+ |.55 a..........|
+ ->|.54 a..........|<-
+ |.1a1 48..........|
+ |. 2996 ..........|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x3042 'あ'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 14 x 16
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |. 242 ..|
+ |. 6#6 ..|
+ |. 7#3143 ..|
+ |. 6778b#c##7 ..|
+ |. 7#####963 ..|
+ |. cb 4b2 ..|
+ |. #cb##c81 ..|
+ |. 4c#c6b96#c1..|
+ |. 8#9#a1#3 2#8..|
+ |. 6#7 #a8a 9c..|
+ |.1#9 c##3 7#..|
+ |.6#1 a#8 a#..|
+ |.7# 6##3 3#8..|
+ ->|.5#c##9a2 5#c1..|<-
+ |. b#a3 b#c2 ..|
+ |. 15 ..|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x3044 'い'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 15 x 12
+ Advance: 17
+ Offset: 1 x 0
+ _________________
+ |.................|
+ |.................|
+ |.................|
+ |.31 .|
+ |.b#4 .|
+ |.a#2 8c1 .|
+ |.8#1 6#a .|
+ |.6#2 b#4 .|
+ |.4#3 3#c .|
+ |.2#6 a#5.|
+ |. c9 4#a.|
+ |. 9#1 5 5 .|
+ |. 4#8 6#4 .|
+ |. b###c1 .|
+ ->|. 1b#91 .|<-
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x3046 'う'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 9 x 17
+ Advance: 17
+ Offset: 4 x -3
+ _________________
+ |.................|
+ |.... 62 ....|
+ |.... 2##b74 ....|
+ |.... 5a##c ....|
+ |.... 155 ....|
+ |.... ....|
+ |.... 37b##8 ....|
+ |....a###a8b#7....|
+ |....5#81 #c....|
+ |.... 2 b#....|
+ |.... c#....|
+ |.... #c....|
+ |.... 5#8....|
+ |.... c#3....|
+ ->|.... 8#9 ....|<-
+ |.... 8#c1 ....|
+ |.... 3#c2 ....|
+ |.... 11 ....|
+ |.................|
+ -----------------
+
+Char 0x3048 'え'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 13 x 16
+ Advance: 17
+ Offset: 2 x -2
+ _________________
+ |.................|
+ |.. 72 ..|
+ |.. 4##82 ..|
+ |.. 5b##1 ..|
+ |.. 46 ..|
+ |.. ..|
+ |.. 2469#91 ..|
+ |.. a###c##a1 ..|
+ |.. 39413#9 ..|
+ |.. 1cb ..|
+ |.. b##b1 ..|
+ |.. a#9b#7 ..|
+ |.. 9#6 #9 ..|
+ |.. 8#9 bc ..|
+ ->|..8#c1 8#a89b..|<-
+ |..6#4 1c####..|
+ |.. 3 111 ..|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x304a 'お'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 15 x 16
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |. 1 .|
+ |. 1##4 .|
+ |. ##2 1 .|
+ |. ##48 4#92 .|
+ |. 989#### 3a##7.|
+ |. c#c#c4 3b3.|
+ |. #b .|
+ |. #b 478861 .|
+ |. #########3 .|
+ |. 7##82 3c#b .|
+ |. a### 6## .|
+ |. a#a5#1 9#c .|
+ |.2##22#2 18##6 .|
+ ->|.1##86#24b###6 .|<-
+ |. 4####1 aa71 .|
+ |. 584 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x304b 'か'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 17 x 14
+ Advance: 17
+ Offset: 0 x -1
+ _________________
+ |.................|
+ |.................|
+ | 572 |
+ | 9#2 |
+ | a# 2b4 |
+ | #a 3##3 |
+ | 4579#####5 5#c1 |
+ | 9####978#b 8#a |
+ | 261cc #b c#4|
+ | 5#6 #a 35 |
+ | b#1 2#8 |
+ | 5#8 6#5 |
+ | 1c#1 b#1 |
+ | a#6 1 7#a |
+ ->|2cb ####3 |<-
+ | 1 7b93 |
+ |.................|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x304c 'が'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 17 x 15
+ Advance: 17
+ Offset: 0 x -1
+ _________________
+ |.................|
+ | 75 |
+ | 662 35#5|
+ | 9#2 5#442|
+ | a# 184 69 |
+ | cb 1c#3 |
+ | 36#####32#c1 |
+ |7####a77#7 5#9 |
+ |2a59# #7 9#3 |
+ | #9 1#7 14 |
+ | 6#3 3#5 |
+ | 1cb 6#3 |
+ | 8#5 a# |
+ |5#b 1 3#b |
+ ->|b#3 9###4 |<-
+ | 3 3b94 |
+ |.................|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x304d 'き'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 11 x 16
+ Advance: 17
+ Offset: 3 x -2
+ _________________
+ |.................|
+ |... 153 ...|
+ |... 2#a ...|
+ |... a#8c8 ...|
+ |... 38a###a4 ...|
+ |... bb8b#1 ...|
+ |... 3#85a8...|
+ |... 33468###c6...|
+ |... b####a#a ...|
+ |... 1321 a#3 ...|
+ |... 466643#c1...|
+ |...3c########9...|
+ |...bc2 36b#3...|
+ |...ca 1 ...|
+ ->|...7#941 ...|<-
+ |... 9##### ...|
+ |... 37ac# ...|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x304f 'く'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 7 x 17
+ Advance: 17
+ Offset: 5 x -3
+ _________________
+ |.................|
+ |..... 31 .....|
+ |..... cc2.....|
+ |..... 5#b .....|
+ |..... 1##2 .....|
+ |..... a#5 .....|
+ |..... 7#8 .....|
+ |.....4#a .....|
+ |.....c#1 .....|
+ |.....## .....|
+ |.....7#8 .....|
+ |..... a#5 .....|
+ |..... 1c#2 .....|
+ |..... 4#c .....|
+ ->|..... 8#9 .....|<-
+ |..... 1##5.....|
+ |..... 6#6.....|
+ |..... 1 .....|
+ |.................|
+ -----------------
+
+Char 0x3050 'ぐ'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 11 x 16
+ Advance: 17
+ Offset: 3 x -2
+ _________________
+ |.................|
+ |... 4 ...|
+ |... 1#c1 ...|
+ |... 8#8 47 ...|
+ |... 2#c1 6#9...|
+ |... b#4 2#643...|
+ |... 7#8 7#2 ...|
+ |...3#b 1 ...|
+ |...a#2 ...|
+ |...c#1 ...|
+ |...6#a ...|
+ |... 8#9 ...|
+ |... b#7 ...|
+ |... 1##4 ...|
+ ->|... 4##2 ...|<-
+ |... 9#a ...|
+ |... 1#7 ...|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x3051 'け'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 14 x 15
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |.................|
+ |. 85 595 ..|
+ |. cc 5#7 ..|
+ |. #8 3#6 ..|
+ |.3#5 1#625..|
+ |.5#2 3a999####..|
+ |.7# c####b73..|
+ |.7# #7 ..|
+ |.8# #7 ..|
+ |.7# 1#7 ..|
+ |.6#271 3#5 ..|
+ |.3#9c 7#2 ..|
+ |. ##9 1#b ..|
+ ->|. 9#7 b#4 ..|<-
+ |. 3b4 1b#7 ..|
+ |. 35 ..|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x3053 'こ'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 13 x 12
+ Advance: 17
+ Offset: 2 x 0
+ _________________
+ |.................|
+ |.................|
+ |.................|
+ |.. 2631 25 ..|
+ |.. 1#######1 ..|
+ |.. 4678876 ..|
+ |.. ..|
+ |.. ..|
+ |.. ..|
+ |.. ..|
+ |.. ..|
+ |.. 31 ..|
+ |..1#c5 1351..|
+ |.. 5##########3..|
+ ->|.. 28b####ca91..|<-
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x3055 'さ'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 11 x 14
+ Advance: 17
+ Offset: 3 x -1
+ _________________
+ |.................|
+ |.................|
+ |... a# ...|
+ |... 6#4 ...|
+ |... c9 46 ...|
+ |... 139###b ...|
+ |...9#######4 ...|
+ |...28653 4#4 ...|
+ |... ac ...|
+ |... 355432#8 ...|
+ |...2c#####cc#4...|
+ |...b#51 37c#6...|
+ |...#8 2 ...|
+ |...b#6 ...|
+ ->|...2b##ccc7 ...|<-
+ |... 48b##7 ...|
+ |.................|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x3057 'し'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 11 x 15
+ Advance: 17
+ Offset: 3 x -2
+ _________________
+ |.................|
+ |.................|
+ |...1a7 ...|
+ |... #c ...|
+ |... #c ...|
+ |... #c ...|
+ |... #c ...|
+ |... #c ...|
+ |... #c ...|
+ |... #c ...|
+ |... #c ...|
+ |... #c ...|
+ |... #c 4 ...|
+ |... ## 6#4...|
+ ->|... a#7 4b#c2...|<-
+ |... 4######a1 ...|
+ |... 39bb83 ...|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x3058 'じ'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 11 x 15
+ Advance: 17
+ Offset: 3 x -2
+ _________________
+ |.................|
+ |.................|
+ |...a91 2 ...|
+ |...c# cc2...|
+ |...b# 283b5...|
+ |...b# 4#b ...|
+ |...b# 25 ...|
+ |...b# ...|
+ |...b# ...|
+ |...b# ...|
+ |...b# ...|
+ |...b# ...|
+ |...b# 22 ...|
+ |...a#2 2ca ...|
+ ->|...6#91 17##5 ...|<-
+ |...1c#####c4 ...|
+ |... 18bba6 ...|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x3059 'す'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 15 x 16
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |. 7c5 .|
+ |. 5#5 .|
+ |. 3#5 .|
+ |.5aaabcc#######a.|
+ |.2##ca989#a889a9.|
+ |. 2 157#5 .|
+ |. 2####6 .|
+ |. a#43#b .|
+ |. #b 2## .|
+ |. #c 4## .|
+ |. 8#bc## .|
+ |. 7ba#9 .|
+ |. 5#4 .|
+ ->|. 4#b .|<-
+ |. 17##2 .|
+ |. 28c3 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x305a 'ず' top
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 18
+ Advance: 17
+ Offset: 0 x -3
+ _________________
+ | 12 .|
+ | 5ca 36#4.|
+ | 2#8 8c62.|
+ | #4 72 .|
+ |275567ab####### .|
+ | c###a87##678a# .|
+ | 331 #a .|
+ | 4b##a .|
+ | 2#93## .|
+ | 6#2 ##1 .|
+ | 6#2 ##2 .|
+ | 2#ba##1 .|
+ | 5c##c .|
+ | 2#8 .|
+ ->| a#2 .|<-
+ | 1a#7 .|
+ | 9#8 .|
+ | 1 .|
+ |.................|
+ -----------------
+
+Char 0x305b 'せ'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 17 x 14
+ Advance: 17
+ Offset: 0 x -1
+ _________________
+ |.................|
+ |.................|
+ | 1a9 |
+ | 287 ## |
+ | 1#9 #c |
+ | #8 #b |
+ | #82357##b##6|
+ |1bbc#########bbc7|
+ | cb96#921 2#8 |
+ | #8 5#7 |
+ | #8 5##4 |
+ | #9 5#a |
+ | #a |
+ | a#2 13 |
+ ->| 4########1 |<-
+ | 37aaaa98 |
+ |.................|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x305d 'そ'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 14 x 15
+ Advance: 17
+ Offset: 2 x -2
+ _________________
+ |.................|
+ |.................|
+ |.. 1 a5 .|
+ |.. 7#3 4#c2 .|
+ |.. 2#b b#4 .|
+ |.. 9#4 6#9 .|
+ |.. 23 2#c .|
+ |.. 2c#98ac#1.|
+ |.. 269#######b1.|
+ |..b###b74b#93 .|
+ |..7#72 b#4 .|
+ |.. 6#5 .|
+ |.. a# .|
+ |.. a#2 .|
+ ->|.. 5#c4 .|<-
+ |.. 8###c1 .|
+ |.. 3a#c .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x305f 'た'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 14 x 16
+ Advance: 17
+ Offset: 2 x -2
+ _________________
+ |.................|
+ |.. 51 .|
+ |.. 2#a .|
+ |.. 4#3 .|
+ |.. 8#475 .|
+ |..2#######8 .|
+ |.. bbb#a651 .|
+ |.. 6#3 57875 .|
+ |.. bc ####c .|
+ |.. 3#8 1 13 .|
+ |.. 8#3 .|
+ |.. 1#c .|
+ |.. 7#7 .|
+ |.. ##2 3 1.|
+ ->|..7#9 ##ccc#b.|<-
+ |..b#3 7ac##c8.|
+ |.. 2 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x3060 'だ'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |. 1 |
+ |. 2#9 95 |
+ |. 3#7 29#5|
+ |. 6#222 8#44 |
+ |. a99c###7 aa |
+ |. b###c972 |
+ |. 4#4 57875 |
+ |. 9# ####c |
+ |. 1#9 1 13 |
+ |. 6#4 |
+ |. b# |
+ |. 4#8 |
+ |. b#2 41 |
+ ->|.5#a 1##ccc#9 |<-
+ |.a#3 59c##c6 |
+ |. 2 |
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x3061 'ち'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 14 x 16
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |. 1 ..|
+ |. 9#3 ..|
+ |. ac ..|
+ |.11 c9247b1 ..|
+ |.5#########1 ..|
+ |.2abc#a752 ..|
+ |. 3#3 ..|
+ |. 5#1 38bb92 ..|
+ |. 7#3b######3..|
+ |. 8##c61 6#a..|
+ |. a#b1 b#..|
+ |. 9c1 c#..|
+ |. 5#9..|
+ ->|. 149##1..|<-
+ |. b####b2 ..|
+ |. 3ba84 ..|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x3063 'っ'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 13 x 10
+ Advance: 17
+ Offset: 2 x 1
+ _________________
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ |.. 11 ..|
+ |.. 27b###c5 ..|
+ |.. 37c#a51 17#5..|
+ |..4##92 9b..|
+ |.. 53 6#..|
+ |.. 9#..|
+ |.. 4#8..|
+ |.. 17#b ..|
+ |.. 16a##8 ..|
+ |.. 9b82 ..|
+ ->|.................|<-
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x3064 'つ'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 12
+ Advance: 17
+ Offset: 1 x -1
+ _________________
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ |. 159c##c82 |
+ |. 5a###b88a##4 |
+ |.6a###a51 3##2|
+ |.6##82 5#8|
+ |. 71 #b|
+ |. #c|
+ |. 4#9|
+ |. 1c#4|
+ |. 6##8 |
+ |. 148###7 |
+ ->|. 5####a3 |<-
+ |. 6a72 |
+ |.................|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x3066 'て'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 15 x 14
+ Advance: 17
+ Offset: 1 x -1
+ _________________
+ |.................|
+ |.................|
+ |. 258a1.|
+ |. 257a#####3.|
+ |.147a######b521 .|
+ |.2###9626#7 .|
+ |. 64 1#9 .|
+ |. 7#2 .|
+ |. bb .|
+ |. #8 .|
+ |. #8 .|
+ |. #9 .|
+ |. a#1 .|
+ |. 4#c41 .|
+ ->|. 8####7 .|<-
+ |. 4a##7 .|
+ |.................|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x3067 'で'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 17 x 14
+ Advance: 17
+ Offset: 0 x -1
+ _________________
+ |.................|
+ |.................|
+ | 2581 |
+ | 158b####4 1 |
+ |1259c#####941 4#2|
+ |6###a634#7 1b298|
+ | 94 cb 8c |
+ | 5#4 3 |
+ | a# |
+ | #c |
+ | #b |
+ | c# |
+ | 9#6 |
+ | 2##61 |
+ ->| 4####b |<-
+ | 17b#b |
+ |.................|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x3068 'と'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 11 x 15
+ Advance: 17
+ Offset: 3 x -1
+ _________________
+ |.................|
+ |... 261 ...|
+ |... 4#7 ...|
+ |... c# ...|
+ |... 7#5 49 ...|
+ |... 1#a 4b##8...|
+ |... b#b##94 ...|
+ |... a#c71 ...|
+ |... 1b#7 ...|
+ |... b#4 ...|
+ |...4#6 ...|
+ |...8# ...|
+ |...8#1 ...|
+ |...5#a2 12 ...|
+ ->|... a##cbc##b ...|<-
+ |... 6b#####b ...|
+ |.................|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x3069 'ど'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 15 x 15
+ Advance: 17
+ Offset: 1 x -1
+ _________________
+ |.................|
+ |. 252 17 .|
+ |. 2#9 41aa .|
+ |. 9#1 9b2a1.|
+ |. 3#6 16 b4 .|
+ |. cb 38##8 .|
+ |. 7#c##94 .|
+ |. 1a##71 .|
+ |. 1b#81 .|
+ |. a#4 .|
+ |.4#6 .|
+ |.8# .|
+ |.8#1 .|
+ |.4#b2 12 .|
+ ->|. 9###bc##b .|<-
+ |. 49#####c .|
+ |.................|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x306a 'な'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 15 x 16
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |. 3 .|
+ |. #b .|
+ |. 2#8 .|
+ |. 6#988 31 .|
+ |. 4######a #c3 .|
+ |. 2cb#c52 4##4.|
+ |. 3#7 #6 3#5.|
+ |. 9#1 #7 1 .|
+ |. 2#9 #7 .|
+ |. a#2 #8 .|
+ |. 5#8 c9 .|
+ |.2##1 3a###c72 .|
+ |. 54 1#b66####8 .|
+ ->|. 4#3 #a6c#1.|<-
+ |. 1#a5a#6 5 .|
+ |. 4b##8 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x306b 'に'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 14 x 14
+ Advance: 17
+ Offset: 1 x -1
+ _________________
+ |.................|
+ |.................|
+ |. 31 ..|
+ |. a#5 ..|
+ |. c#1 ac####c ..|
+ |.1#9 acbbbbc ..|
+ |.4#5 ..|
+ |.6#2 ..|
+ |.7#1 ..|
+ |.8# ..|
+ |.7# ..|
+ |.6#1 ..|
+ |.4#4b ac51 25..|
+ |.1#cb 3########..|
+ ->|. b#9 69bbb97..|<-
+ |. 5#7 ..|
+ |.................|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x306e 'の'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 14
+ Advance: 17
+ Offset: 1 x -1
+ _________________
+ |.................|
+ |.................|
+ |. 145541 |
+ |. 5b######91 |
+ |. 1a#c74#a4a##2 |
+ |. b#8 3#6 6#c |
+ |. 9#7 7#2 8#6|
+ |.4#a bb 2#b|
+ |.9#2 3#6 #c|
+ |.#c 9#1 #c|
+ |.#c 1#9 4#a|
+ |.b#2 8#2 b#5|
+ |.6#a14#a 9#b |
+ |. a####2 2a#c1 |
+ ->|. 9##4 5##b2 |<-
+ |. 87 |
+ |.................|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x306f 'は'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 15
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |.................|
+ |. 2c6 87 |
+ |. 4#7 c#5 |
+ |. 7#1 a#8 |
+ |. ba 32 a#c353 |
+ |.1#6 c########7 |
+ |.4#3 4677c#542 |
+ |.6#1 a# |
+ |.7# 9# |
+ |.7# 8# |
+ |.6#1 3659# |
+ |.5#4a a#####95 |
+ |.2#ca4#2 1a###c6 |
+ ->|. c#73#736#a17#c1|<-
+ |. 7#5 8###c2 12 |
+ |. 2 133 |
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x3070 'ば'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 17 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 1b3 |
+ | 2c6 672378#1|
+ | 3#8 8#24#72 |
+ | 6#2 7# 34 |
+ | ab 1 7# 36 |
+ | #7 ccbbc###c |
+ |2#3 7abbc#863 |
+ |4#1 6# |
+ |5# 5#2 |
+ |5# 4#4 |
+ |4#1 2567#6 |
+ |3#49 6#####c7 |
+ | #bc #7 5####5 |
+ ->| a#9 #824b#36#7 |<-
+ | 5#7 5####5 2 |
+ | 51 33 |
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x3073 'び' top
+ Font: #12 FZHeiTi (17)
+ Bitmap: 17 x 16
+ Advance: 17
+ Offset: 0 x -1
+ _________________
+ | 3 |
+ | ba |
+ | 3ab2 23 4a2c6|
+ |7a###b2 a#11c91 |
+ |9b9#b1 6#7 37 |
+ | 8#2 4##1 |
+ | 2#6 3##a |
+ | 9c 3#9#8 |
+ |1#7 4#2ac1 |
+ |5#2 6# 11 |
+ |7# 9# |
+ |7#1 #a |
+ |5#6 8#5 |
+ |1##5 8#b |
+ ->| 6###b##c2 |<-
+ | 3a##c71 |
+ |.................|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x3078 'へ'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 8
+ Advance: 17
+ Offset: 1 x 2
+ _________________
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ |. 1a#91 |
+ |. 2c#a##4 |
+ |. 3##4 3c#7 |
+ |.6##4 1b#b2 |
+ |.a#6 9##81 |
+ |. 6 6###6 |
+ |. 2b##1|
+ |. 65 |
+ |.................|
+ ->|.................|<-
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x3079 'べ'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 17 x 12
+ Advance: 17
+ Offset: 0 x 1
+ _________________
+ |.................|
+ |.................|
+ | 22 |
+ | a#4 |
+ | 192a6 |
+ | 1 2cc1 |
+ | 3c#b3 15 |
+ | 4##8##7 |
+ | 5#c2 1b#a1 |
+ |19##2 9##5 |
+ | 8#4 6##b3 |
+ | 4 3c##91|
+ | 8#c |
+ | 33 |
+ ->|.................|<-
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x307b 'ほ'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 15 x 15
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |.................|
+ |. 494 1 135 .|
+ |. 6#5 1######c .|
+ |. 9# 777a#4 .|
+ |. #a 6#2 1 .|
+ |.2#7 7a99b#c#a .|
+ |.4#4 6#####b96 .|
+ |.5#2 4#3 .|
+ |.6# 3#4 .|
+ |.6# 2#5 .|
+ |.6# 4 456#6 .|
+ |.5#3# 2c#####81 .|
+ |.2#bb 8#3 1####5.|
+ ->|. c#9 6#74a#64c8.|<-
+ |. 7#8 8###9 11.|
+ |. 51 1 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x307e 'ま'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 11 x 16
+ Advance: 17
+ Offset: 3 x -2
+ _________________
+ |.................|
+ |... 451 ...|
+ |... 7#2 ...|
+ |... 11 6# 23 ...|
+ |... 8#######c ...|
+ |... 2667a#652 ...|
+ |... 6# ...|
+ |... 6#125 ...|
+ |... 6#ccc#### ...|
+ |... 27888#741 ...|
+ |... 2#3 ...|
+ |... 2#4 ...|
+ |... 6b####81 ...|
+ |...5#6125###91...|
+ ->|...7#3 7#67#c...|<-
+ |...1c####b 14...|
+ |... 4653 ...|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x307f 'み'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 15
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ |.................|
+ | 2595 .|
+ | 2######6 .|
+ | 8a54#c3 .|
+ | 9#1 .|
+ | 3#5 a7 .|
+ | 2bb #9 .|
+ | 29####b712#5 .|
+ | 3#c6#a6a##b#2 .|
+ |1#a 6#2 18##7 .|
+ |7c c8 1#c#b2.|
+ |a8 9#1 9#16#b.|
+ |9#b#6 7#6 44.|
+ ->|19b5 19#9 .|<-
+ | b#8 .|
+ | 4 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x3080 'む'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 15 x 16
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |. 74 .|
+ |. #8 .|
+ |. #6 3 .|
+ |.888#bb#1 3#b4 .|
+ |.9###cb9 7##8.|
+ |. #3 4#6.|
+ |. 2#3 2 .|
+ |.2b##6 .|
+ |.a#2#7 .|
+ |.#b #8 .|
+ |.cc2#8 6 .|
+ |.6###8 #b .|
+ |. 5a#8 4#a .|
+ ->|. ##31125c#5 .|<-
+ |. 6#######8 .|
+ |. 3666541 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x3081 'め'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 15 x 15
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |.................|
+ |. 9b2 .|
+ |. 2 8#1 .|
+ |. 9# 9#1 .|
+ |. 6#4 5a#####7 .|
+ |. cbb#b9#a8##b .|
+ |. 8#c4 5#3 1c#6.|
+ |. 4##c1 ac 3#b.|
+ |.1#c4#a3#6 ##.|
+ |.7#4 7##c ##.|
+ |.c# c#9 1#c.|
+ |.#b 7###4 8#7.|
+ |.c#59#a15 5#c1.|
+ ->|.6###8 39#c2 .|<-
+ |. 352 a#91 .|
+ |. 2 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x3082 'も'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 11 x 16
+ Advance: 17
+ Offset: 3 x -2
+ _________________
+ |.................|
+ |... 1a6 ...|
+ |... 2#8 ...|
+ |... 4#4 ...|
+ |... 779# ...|
+ |... a#####6 ...|
+ |... 2#a782 ...|
+ |... 1#6 ...|
+ |...433#4 32 ...|
+ |...9###a883c#2...|
+ |... 5b####15#9...|
+ |... 8# #c...|
+ |... 8# c#...|
+ |... 7#1 1#c...|
+ ->|... 3#a1 2a#8...|<-
+ |... 8#####b1...|
+ |... 5aba7 ...|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x3084 'や'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 17 x 15
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ |.................|
+ | 3c6 |
+ | 1a#9 |
+ | 3c8 8536874 |
+ | b#1 17c#####a |
+ | 4#99##94 2c#3|
+ | 2###81 7#6|
+ | 5a###8 a#4|
+ |1c#a2a#2 14a#b |
+ | 35 4#9 5####91 |
+ | b#2 7641 |
+ | 4#9 |
+ | c#1 |
+ ->| 6#8 |<-
+ | #8 |
+ | 1 |
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x3086 'ゆ'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 15 x 15
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |.................|
+ |. 8b3 .|
+ |.4a5 4#7 .|
+ |.4#6 6#c861 .|
+ |.3#3 6####c##4 .|
+ |.4#1 a#71b# 4##2.|
+ |.5# ac2 b# 5#8.|
+ |.5#6#2 b# #b.|
+ |.5##7 b# #b.|
+ |.4##1 #c 2#a.|
+ |.3#c 781#a 8#5.|
+ |. #b 4#c#618#b .|
+ |. b# 3#####a1 .|
+ ->|. 7#2 5#a874 .|<-
+ |. 3##1 .|
+ |. 183 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x3088 'よ'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 13 x 16
+ Advance: 17
+ Offset: 2 x -2
+ _________________
+ |.................|
+ |.. 2 ..|
+ |.. #7 ..|
+ |.. #8 ..|
+ |.. #8 142..|
+ |.. #cac##4..|
+ |.. 1##ccb93..|
+ |.. 4#b ..|
+ |.. 5#8 ..|
+ |.. 4#a ..|
+ |.. 2## ..|
+ |.. 5c##c##3 ..|
+ |..4#a56a###a2 ..|
+ |..8# 3#b###6 ..|
+ ->|..5#6 1a#329##4..|<-
+ |.. a####8 59 ..|
+ |.. 4774 ..|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x3089 'ら'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 12 x 16
+ Advance: 17
+ Offset: 2 x -2
+ _________________
+ |.................|
+ |.. 43 ...|
+ |.. 1##a3 ...|
+ |.. 18#b ...|
+ |.. 21 ...|
+ |.. aa ...|
+ |.. bb ...|
+ |.. c9 ...|
+ |.. #8 47875 ...|
+ |.. #75c#####c1...|
+ |..2#c#a41 2a#a...|
+ |..3##7 1##...|
+ |.. 57 ##...|
+ |.. 7#8...|
+ ->|.. 4a#c1...|<-
+ |.. 8###91 ...|
+ |.. 3a72 ...|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x308a 'り'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 9 x 15
+ Advance: 17
+ Offset: 4 x -2
+ _________________
+ |.................|
+ |.................|
+ |....5a4 7#7....|
+ |....7#3 4#7....|
+ |....a#1 #9....|
+ |....c# #b....|
+ |....#c c#....|
+ |....#c1 c#....|
+ |....c#97 c#....|
+ |....a##3 ##....|
+ |....7#c 1#b....|
+ |....2#a 4#8....|
+ |.... a#4....|
+ |.... 4#b ....|
+ ->|.... 1c#4 ....|<-
+ |.... 1b#9 ....|
+ |.... 58 ....|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x308b 'る'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 11 x 14
+ Advance: 17
+ Offset: 3 x -1
+ _________________
+ |.................|
+ |.................|
+ |... 13596 ...|
+ |...5#######6 ...|
+ |... c942b#9 ...|
+ |... 5#a ...|
+ |... 2#b ...|
+ |... 1c#9874 ...|
+ |... 1b######a ...|
+ |...1b#b4 2a#8...|
+ |...c#9 ##...|
+ |...29 4861 c#...|
+ |... 6####31#c...|
+ |... aa 6#cb#6...|
+ ->|... 6#98###8 ...|<-
+ |... 6b##a4 ...|
+ |.................|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x308c 'れ'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 17 x 15
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ |.................|
+ | 2#a |
+ | 2#5 |
+ | 3#2 1551 |
+ | 5#916###b |
+ |146a##ca#83b# |
+ |1##bb###5 8c |
+ | 63 b##3 ab |
+ | 3##3 c9 |
+ | a#8 #7 |
+ | 6##8 2#6 |
+ | 2#b#8 3#4 1b3|
+ |1c#2#9 2#a6c#5|
+ ->|2b6 #a ####7 |<-
+ | #b 3a93 |
+ | 87 |
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x308f 'わ'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 15 x 16
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |. 562 .|
+ |. 9#3 .|
+ |. 9# .|
+ |. ac82 .|
+ |. 258###4 1 .|
+ |. b####94a###a2 .|
+ |. 562c#b#a647##3.|
+ |. 1##b3 6#b.|
+ |. 9#a ##.|
+ |. 5##8 ##.|
+ |. 3#b#8 3#a.|
+ |.2##2#9 2c#3.|
+ |.4#5 #a 5##7 .|
+ ->|. 2 #b 5###5 .|<-
+ |. #c 761 .|
+ |. 66 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x3092 'を'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 15 x 16
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |. 473 .|
+ |. 7#3 .|
+ |. bc583 .|
+ |. c######4 .|
+ |. 58c#641 .|
+ |. 1#8 .|
+ |. 8#b##6 21 .|
+ |. 2##949#25a#b .|
+ |. a#6 4####b72.|
+ |. 6#8 18##c41 .|
+ |.1cc 1b#7#b .|
+ |. 2 8#2 #b .|
+ |. #8 1#a .|
+ ->|. #c3 133 .|<-
+ |. 7######a .|
+ |. 49bbba7 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x3093 'ん'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 15 x 15
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |.................|
+ |. 5a3 .|
+ |. a#b .|
+ |. 3#c1 .|
+ |. b#3 .|
+ |. 5#8 .|
+ |. c#1 .|
+ |. 6#6461 .|
+ |. 1##c##a .|
+ |. 8##6 a# .|
+ |. 2##4 8#1 1.|
+ |. 9#7 7#2 5b.|
+ |.2#c 6#5 3#c.|
+ ->|.8#5 3#a26##2.|<-
+ |.## b###c2 .|
+ |.13 1885 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x30a1 'ァ'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 12 x 12
+ Advance: 17
+ Offset: 3 x 0
+ _________________
+ |.................|
+ |.................|
+ |.................|
+ |... 22 ..|
+ |...###########6..|
+ |...211111113#b1..|
+ |... 2411b#2 ..|
+ |... 6#7c#3 ..|
+ |... 8#392 ..|
+ |... c9 ..|
+ |... 5#3 ..|
+ |... 2ca ..|
+ |... 2cc1 ..|
+ |... bc2 ..|
+ ->|... 11 ..|<-
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x30a2 'ア'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 15 x 14
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |.................|
+ |.................|
+ |.bcbbbbbbbbbb#b3.|
+ |.c#############a.|
+ |. 9#a .|
+ |. 431 7#b .|
+ |. b#48#c1 .|
+ |. c#9#b1 .|
+ |. 2#b 51 .|
+ |. 6#6 .|
+ |. c#1 .|
+ |. 9#9 .|
+ |. 7#c1 .|
+ ->|. 2a##3 .|<-
+ |. 3b#4 .|
+ |. 1 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x30a3 'ィ'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 11 x 13
+ Advance: 17
+ Offset: 3 x 0
+ _________________
+ |.................|
+ |.................|
+ |... 31 ...|
+ |... cb1...|
+ |... 9#4 ...|
+ |... 8#6 ...|
+ |... 9#9 ...|
+ |... 2b##6 ...|
+ |... 18##4#6 ...|
+ |...3##91 #6 ...|
+ |... 62 #6 ...|
+ |... #6 ...|
+ |... #6 ...|
+ |... #7 ...|
+ ->|... c6 ...|<-
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x30a4 'イ'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 13 x 16
+ Advance: 17
+ Offset: 2 x -2
+ _________________
+ |.................|
+ |.. 2 ..|
+ |.. 1c9 ..|
+ |.. a##5..|
+ |.. 9##4 ..|
+ |.. 9##3 ..|
+ |.. 2b##3 ..|
+ |.. 5#### ..|
+ |.. 1a##8## ..|
+ |..17##c4 ## ..|
+ |..8##8 ## ..|
+ |.. 72 ## ..|
+ |.. ## ..|
+ |.. ## ..|
+ ->|.. ##1 ..|<-
+ |.. ##2 ..|
+ |.. aa2 ..|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x30a6 'ウ'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 14 x 16
+ Advance: 17
+ Offset: 2 x -3
+ _________________
+ |.................|
+ |.................|
+ |.. 1#b1 .|
+ |.. ## .|
+ |.. #c .|
+ |..############b2.|
+ |..##bbbbbbbbb##8.|
+ |..#c ##2.|
+ |..#c 3#c .|
+ |..#c 9#7 .|
+ |..## 1##1 .|
+ |..11 9#8 .|
+ |.. 5#c1 .|
+ |.. 4##4 .|
+ ->|.. 7##6 .|<-
+ |.. 3b##5 .|
+ |.. 6#b2 .|
+ |.. 1 .|
+ |.................|
+ -----------------
+
+Char 0x30a7 'ェ'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 13 x 8
+ Advance: 17
+ Offset: 2 x 2
+ _________________
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ |.. 1########c ..|
+ |.. 7667#7667 ..|
+ |.. 2#2 ..|
+ |.. 2#2 ..|
+ |.. 2#2 ..|
+ |.. 2#2 ..|
+ |..176667#766671..|
+ |..2###########2..|
+ |.................|
+ ->|.................|<-
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x30a8 'エ'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 15 x 11
+ Advance: 17
+ Offset: 1 x 1
+ _________________
+ |.................|
+ |.................|
+ |.................|
+ |. 1 1 .|
+ |. a##cccccc##a .|
+ |. a#ccc##cccca .|
+ |. ## .|
+ |. ## .|
+ |. ## .|
+ |. ## .|
+ |. ## .|
+ |. ## .|
+ |.2#ccccc##ccccc#.|
+ |.2##############.|
+ ->|.................|<-
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x30a9 'ォ'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 12 x 13
+ Advance: 17
+ Offset: 3 x 0
+ _________________
+ |.................|
+ |.................|
+ |... 44 ..|
+ |... 9c ..|
+ |... 8c ..|
+ |...598888b#8894..|
+ |...7#ccc###ccc6..|
+ |... 2#c# ..|
+ |... 1cb7# ..|
+ |... 2cc26# ..|
+ |...17#c2 6# ..|
+ |...a#91 6# ..|
+ |... 2 9# ..|
+ |... 5##b ..|
+ ->|... 1861 ..|<-
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x30aa 'オ'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 15
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |.................|
+ |. 2874 |
+ |. 3##4 |
+ |. 2##7 |
+ |. 1##9 |
+ |.3##############2|
+ |.3#ccccc###ccccc2|
+ |. a###5 |
+ |. 8#8c#7 |
+ |. 9#a a#8 |
+ |. 3c#9 8#9 |
+ |.3a##8 a#a |
+ |.3#c4 c#b |
+ ->|. 2 4##b |<-
+ |. ####9 |
+ |. 9#b7 |
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x30ab 'カ'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 14 x 14
+ Advance: 17
+ Offset: 2 x -1
+ _________________
+ |.................|
+ |.................|
+ |.. 1cb1 .|
+ |.. ## .|
+ |.. ## .|
+ |..9aaaaa##abccc2.|
+ |..b############1.|
+ |..2211 6#7 c#1.|
+ |.. a#3 c# .|
+ |.. 2#c ## .|
+ |.. 9#7 ## .|
+ |.. 4#c1 1#b .|
+ |.. 3##4 4#a .|
+ |.. 5##7 a#7 .|
+ ->|..9##8 2####1 .|<-
+ |..3b5 cca3 .|
+ |.................|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x30ad 'キ'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 15 x 16
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |. 783 .|
+ |. b#4 .|
+ |. 7#4 .|
+ |. 17#868ac3 .|
+ |. a##########4 .|
+ |. 9cb98#b4221 .|
+ |. #b .|
+ |. b#2468ac3.|
+ |.6789ab########4.|
+ |.#####c##965321 .|
+ |.6532 7#5 .|
+ |. 6#7 .|
+ |. 4#9 .|
+ ->|. 3#b .|<-
+ |. 2## .|
+ |. 53 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x30af 'ク'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 13 x 16
+ Advance: 17
+ Offset: 2 x -2
+ _________________
+ |.................|
+ |.. 14 ..|
+ |.. 7#b ..|
+ |.. 1##4 ..|
+ |.. 9##bbbcc2..|
+ |.. 5########c..|
+ |.. 5##2 1##4..|
+ |.. 6##4 7#a ..|
+ |..a##4 2##2 ..|
+ |.. 52 b#7 ..|
+ |.. 8#b ..|
+ |.. 8#c1 ..|
+ |.. 9##2 ..|
+ |.. 2b#c2 ..|
+ ->|.. 18##b1 ..|<-
+ |..4###7 ..|
+ |.. 382 ..|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x30b0 'グ'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 15 x 17
+ Advance: 17
+ Offset: 1 x -3
+ _________________
+ |.................|
+ |. 4a1.|
+ |. 892 6186.|
+ |. ##3 9b1 .|
+ |. 6#8 13 6 .|
+ |. 1#######8 .|
+ |. b#8888a#a .|
+ |. 9#7 9#3 .|
+ |.1a#9 1#a .|
+ |.5c8 9#4 .|
+ |. 3#b .|
+ |. 1c#3 .|
+ |. b#7 .|
+ |. 1b#a .|
+ ->|. 3c#a .|<-
+ |. 18##9 .|
+ |. 3c#5 .|
+ |. 11 .|
+ |.................|
+ -----------------
+
+Char 0x30b2 'ゲ' top
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 17
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ | 2 .|
+ | 2#5.|
+ | 772 9535.|
+ | c#5 3#3 .|
+ | 3#c 1 .|
+ | a#6 .|
+ | 3###ccccc###7.|
+ | c#baaa##abbc6.|
+ | 9#9 ## .|
+ | 9#b 2#b .|
+ |1cb 6#8 .|
+ | b#3 .|
+ | 5#b .|
+ | 3##3 .|
+ ->| 5##5 .|<-
+ | 2c#5 .|
+ | 2 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x30b3 'コ'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 11 x 11
+ Advance: 17
+ Offset: 3 x 0
+ _________________
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ |...b#########c...|
+ |...b#########c...|
+ |... #c...|
+ |... #c...|
+ |... #c...|
+ |... #c...|
+ |... #c...|
+ |... ##...|
+ |...a##########...|
+ |...b##########...|
+ ->|... ##...|<-
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x30b5 'サ'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 15
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |.................|
+ |. 88 8a6 |
+ |. ## 8## |
+ |. c# 7## |
+ |.1 c# 6## |
+ |.###############c|
+ |.#ccc##ccc###cccc|
+ |. c# 7#c |
+ |. ## 9#b |
+ |. ## b#9 |
+ |. ## 2##5 |
+ |. 33 9##1 |
+ |. 4##7 |
+ ->|. 2##b |<-
+ |. 2c#b1 |
+ |. 2aa1 |
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x30b6 'ザ'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 18 x 16
+ Advance: 17
+ Offset: -1 x -2
+ _________________
+ |..................|
+ | 1 86 |
+ | b# 5#a 42c3|
+ | a# 8#82c7 |
+ | a# a#8 26 |
+ | 1 a# c#8 11 |
+ |2###############9 |
+ |18765c#5556#a6775 |
+ | a# 2#7 |
+ | b# 4#5 |
+ | b# 8#3 |
+ | c# ## |
+ | 8#6 |
+ | 6#b |
+ ->| 7#c1 |<-
+ | a#c1 |
+ | 28 |
+ |..................|
+ |..................|
+ -----------------
+
+Char 0x30b7 'シ'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 15 x 15
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |.................|
+ |. 65 .|
+ |. 1##a1 .|
+ |. 2b#b .|
+ |. 84 .|
+ |. 82 81.|
+ |.6##8 7#7.|
+ |. 5##8 9#c1.|
+ |. 18 2b#b1 .|
+ |. 5##9 .|
+ |. 2a##5 .|
+ |. 18##b2 .|
+ |. 49###7 .|
+ ->|. 7###a2 .|<-
+ |. aa2 .|
+ |. 1 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x30b8 'ジ'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 15 x 15
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |.................|
+ |. 31 .|
+ |. 2##5 7c2 .|
+ |. 4c#8 53ba .|
+ |. 1a4 2#b2 .|
+ |. 3 2a1 .|
+ |.8#91 34.|
+ |.2b#c1 5#b.|
+ |. a7 19##3.|
+ |. 5##b2 .|
+ |. 4b##8 .|
+ |. 5b##b3 .|
+ |. 48###c6 .|
+ ->|. ####b5 .|<-
+ |. 7#93 .|
+ |. 11 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x30b9 'ス'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 15 x 13
+ Advance: 17
+ Offset: 1 x 0
+ _________________
+ |.................|
+ |.................|
+ |. 1 .|
+ |. 4#cccccc##5 .|
+ |. 4#########8 .|
+ |. 7#b .|
+ |. 1##3 .|
+ |. 8#8 .|
+ |. 5## .|
+ |. 4###8 .|
+ |. 5##5c#9 .|
+ |. 8##4 2c#a .|
+ |. 4c#c3 3##a .|
+ |.3a##91 4##7.|
+ ->|. 9b3 6b1.|<-
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x30ba 'ズ'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 17 x 15
+ Advance: 17
+ Offset: 0 x -1
+ _________________
+ |.................|
+ | 5c2|
+ | 8264|
+ | 1 6c1 |
+ | 3cbbbbbc##3 3 |
+ | 4#########a |
+ | 1##2 |
+ | 8#8 |
+ | 5#c |
+ | 3##3 |
+ | 4###6 |
+ | 7##7##a1 |
+ | 3b##3 2c#c1 |
+ | 29##b1 2c#c1 |
+ ->|3###6 2##9 |<-
+ | 581 2a |
+ |.................|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x30bb 'セ'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 15 x 14
+ Advance: 17
+ Offset: 1 x -1
+ _________________
+ |.................|
+ |.................|
+ |. 881 .|
+ |. #c .|
+ |. #b .|
+ |. #b 27a2.|
+ |. #c69b####c.|
+ |.468a#####a76##3.|
+ |.8###a#c1 a#6 .|
+ |.352 #b 9#9 .|
+ |. #c a#b .|
+ |. #c 61 .|
+ |. ## .|
+ |. a#4 .|
+ ->|. 5###cc###3.|<-
+ |. 4abccccc2.|
+ |.................|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x30bd 'ソ'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 14 x 13
+ Advance: 17
+ Offset: 1 x -1
+ _________________
+ |.................|
+ |.................|
+ |.................|
+ |. 22 67 ..|
+ |.3#c1 a#a..|
+ |. 9#b ##2..|
+ |. b#7 6#8 ..|
+ |. 2##1 c#2 ..|
+ |. 62 5#9 ..|
+ |. 1##1 ..|
+ |. a#6 ..|
+ |. 9#a ..|
+ |. a#b ..|
+ |. 2b#b1 ..|
+ ->|. 6##9 ..|<-
+ |. 8c5 ..|
+ |.................|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x30bf 'タ'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 13 x 16
+ Advance: 17
+ Offset: 2 x -2
+ _________________
+ |.................|
+ |.. 11 ..|
+ |.. 7#7 ..|
+ |.. c#1 1 ..|
+ |.. 7######c3..|
+ |.. 2##bbbb##7..|
+ |.. 1c#4 2#b ..|
+ |.. 1b#8 7#5 ..|
+ |..3c#92b811#c ..|
+ |..2b9 3b##a#5 ..|
+ |.. 7##b ..|
+ |.. 3##2 ..|
+ |.. 3##6 ..|
+ |.. 4##7 ..|
+ ->|.. 8##6 ..|<-
+ |.. 5c#c3 ..|
+ |.. 4c81 ..|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x30c0 'ダ' top
+ Font: #12 FZHeiTi (17)
+ Bitmap: 15 x 17
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |. 3 .|
+ |. 3 23#7.|
+ |. 4#b ab4a.|
+ |. a#4 1c8 .|
+ |. 3##8888c542 .|
+ |. c########3 .|
+ |. a#6 5#8 .|
+ |. 9#9 a#1 .|
+ |.a#a1b92 4#8 .|
+ |.38 1a##8c#1 .|
+ |. 3c##7 .|
+ |. 7#b .|
+ |. 7#c1 .|
+ |. 1a#c2 .|
+ ->|. 6##a1 .|<-
+ |.2###6 .|
+ |. 471 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x30c1 'チ'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 24 .|
+ | 1359##3 .|
+ | 1bcc#####b62 .|
+ | 8#cb9##1 .|
+ | c# .|
+ | ## 11.|
+ |4ccccccc##c####9.|
+ |4####cc###cc###9.|
+ | 3#a .|
+ | 6#7 .|
+ | c#3 .|
+ | 6#a .|
+ | 5##2 .|
+ ->| 8##4 .|<-
+ | 7##4 .|
+ | 32 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x30c3 'ッ'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 13 x 11
+ Advance: 17
+ Offset: 2 x 0
+ _________________
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ |.. 1c7 b91..|
+ |..1c8 bc #a ..|
+ |.. a#1 7#2 4#5 ..|
+ |.. 4#5 11 ac ..|
+ |.. 2 4#5 ..|
+ |.. 1ca ..|
+ |.. 1bc1 ..|
+ |.. 2bc2 ..|
+ |.. 6#c2 ..|
+ |.. 5#a1 ..|
+ ->|.. 3 ..|<-
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x30c4 'ツ'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 15 x 14
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |.................|
+ |.................|
+ |. 261 3 .|
+ |.263 6#7 #b3.|
+ |.5#9 1#c 3##2.|
+ |. ##1 c#1 8#9 .|
+ |. 8#6 661 1##3 .|
+ |. 383 8#a .|
+ |. 3##2 .|
+ |. 1c#6 .|
+ |. 1c#a .|
+ |. 3c#a .|
+ |. 7##9 .|
+ ->|. 5c##6 .|<-
+ |. 6#a2 .|
+ |. 2 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x30c6 'テ'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 15 x 14
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |.................|
+ |.................|
+ |. ########b .|
+ |. cccccccca .|
+ |. .|
+ |.122111111111222.|
+ |.8#############a.|
+ |.8#############a.|
+ |. ## .|
+ |. 2#c .|
+ |. 6#9 .|
+ |. b#3 .|
+ |. 8#a .|
+ ->|. 9#c1 .|<-
+ |. 4c#b1 .|
+ |. 2b8 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x30c7 'デ'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 17 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 72 |
+ | 25#1|
+ | ##cccc##b3#41 |
+ | cbaaaaaba 48 |
+ | |
+ | |
+ |7#############6 |
+ |7##cccc##cccc#5 |
+ | ## |
+ | 2#b |
+ | 5#8 |
+ | b#3 |
+ | 7#a |
+ ->| 7#c1 |<-
+ | 1b#c2 |
+ | 391 |
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x30c8 'ト'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 8 x 15
+ Advance: 17
+ Offset: 4 x -2
+ _________________
+ |.................|
+ |.................|
+ |....1## .....|
+ |.... #b .....|
+ |.... #b .....|
+ |.... #b .....|
+ |.... #b2 .....|
+ |.... ###c4 .....|
+ |.... #c8##8 .....|
+ |.... #b 5##4.....|
+ |.... #b 49 .....|
+ |.... #c .....|
+ |.... ## .....|
+ |.... ## .....|
+ ->|.... ## .....|<-
+ |.... ##1 .....|
+ |.... aa1 .....|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x30c9 'ド'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 10 x 16
+ Advance: 17
+ Offset: 4 x -2
+ _________________
+ |.................|
+ |....42 2 ...|
+ |....c#1 9b1...|
+ |....b# 4a16 ...|
+ |....b# 99 ...|
+ |....b# ...|
+ |....b#33 ...|
+ |....b#c#8 ...|
+ |....b#4c#b1 ...|
+ |....b# 2c#5 ...|
+ |....b# 18 ...|
+ |....b# ...|
+ |....b# ...|
+ |....b# ...|
+ ->|....c# ...|<-
+ |....##1 ...|
+ |....66 ...|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x30cb 'ニ'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 14 x 11
+ Advance: 17
+ Offset: 2 x 0
+ _________________
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ |.. ###ccccc#5 .|
+ |.. #########5 .|
+ |.. .|
+ |.. .|
+ |.. .|
+ |.. .|
+ |.. .|
+ |.. .|
+ |..#############7.|
+ |..#############7.|
+ ->|..2111 1121.|<-
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x30cd 'ネ'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 15 x 15
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |.................|
+ |. ba1 .|
+ |. ## .|
+ |. c# 23 .|
+ |. 8#########7 .|
+ |. 7bbbbbb###5 .|
+ |. 3##4 .|
+ |. 6##3 .|
+ |. 2a##32c7 .|
+ |. 18##c#14c#c3.|
+ |. 39##a2a#1 19#b.|
+ |.6##b4 a#1 51.|
+ |. 64 a#2 .|
+ ->|. b#2 .|<-
+ |. b#3 .|
+ |. 772 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x30ce 'ノ'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 11 x 13
+ Advance: 17
+ Offset: 3 x -1
+ _________________
+ |.................|
+ |.................|
+ |.................|
+ |... 3c5...|
+ |... 8#b...|
+ |... 1##3...|
+ |... 7#a ...|
+ |... 2##2 ...|
+ |... a#8 ...|
+ |... 7#c ...|
+ |... 4##2 ...|
+ |... 3##5 ...|
+ |... 5##6 ...|
+ |... 8##6 ...|
+ ->|...b##5 ...|<-
+ |...182 ...|
+ |.................|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x30cf 'ハ'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 17 x 10
+ Advance: 17
+ Offset: 0 x 1
+ _________________
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ | 12 |
+ | 6c7 2#c |
+ | b#6 9#9 |
+ | 2#c 1##4 |
+ | 9#6 6#c |
+ | 4#c c#7 |
+ | 1##4 5##2|
+ |1b#8 b#8|
+ |6#a 37 |
+ | 2 |
+ ->|.................|<-
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x30d0 'バ'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 17 x 12
+ Advance: 17
+ Offset: 0 x 2
+ _________________
+ |.................|
+ | 1 |
+ | ba |
+ | 392b3|
+ | 99 |
+ | 6 181 1 |
+ | 5#c 7#b |
+ | c#6 a#a |
+ | 7#b 1c#7 |
+ | 5##2 3##4 |
+ | 4##5 8##1|
+ |5##7 c#5|
+ |2b7 32 |
+ |.................|
+ ->|.................|<-
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x30d1 'パ'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 17 x 12
+ Advance: 17
+ Offset: 0 x 2
+ _________________
+ |.................|
+ | 4cc4|
+ | b 1b|
+ | b22b|
+ | 3aa3|
+ | 15 61 |
+ | 6#b 7#b1 |
+ | c#6 9#a |
+ | 8#b b#8 |
+ | 6##2 2##5 |
+ | 6##4 7##1|
+ |6##5 b#8|
+ |1b4 38 |
+ |.................|
+ ->|.................|<-
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x30d3 'ビ'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 14 x 15
+ Advance: 17
+ Offset: 1 x -1
+ _________________
+ |.................|
+ |. 87 ..|
+ |.1871 53c7..|
+ |.1## 2c921..|
+ |. ## 2b1 ..|
+ |. ## 5b ..|
+ |. c# 27c##8 ..|
+ |. b#9c###a61 ..|
+ |. b##b851 ..|
+ |. b# ..|
+ |. b# ..|
+ |. b# ..|
+ |. b#5 12 ..|
+ |. a##cbbbc###2 ..|
+ ->|. 2a#########1 ..|<-
+ |. 11111 ..|
+ |.................|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x30d4 'ピ'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 13 x 14
+ Advance: 17
+ Offset: 2 x 0
+ _________________
+ |.................|
+ |.. 5b9 ..|
+ |..54 1c186..|
+ |..## c295..|
+ |..## 4a8 ..|
+ |..## 38 ..|
+ |..## 4a##9 ..|
+ |..##59###c61 ..|
+ |..####c83 ..|
+ |..##52 ..|
+ |..## ..|
+ |..## ..|
+ |..c#3 ..|
+ |..9##cbcccccb ..|
+ ->|..1a########a ..|<-
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x30d5 'フ'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 13 x 13
+ Advance: 17
+ Offset: 2 x -1
+ _________________
+ |.................|
+ |.................|
+ |.................|
+ |.. 2 ..|
+ |..###########c4..|
+ |..cbbbbbbbbb##6..|
+ |.. 4#c ..|
+ |.. a#5 ..|
+ |.. 5#c ..|
+ |.. 2##3 ..|
+ |.. 1c#8 ..|
+ |.. 2c#a ..|
+ |.. 4##a ..|
+ |.. 19##9 ..|
+ ->|.. 8###5 ..|<-
+ |.. 4#81 ..|
+ |.................|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x30d6 'ブ'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 16 .|
+ | 13c9.|
+ | 9b35.|
+ | 12 94 .|
+ |1###########7 .|
+ |1cbbbbbbbbc## .|
+ | 6#8 .|
+ | c#2 .|
+ | 6#9 .|
+ | 3##2 .|
+ | 2c#6 .|
+ | 3##9 .|
+ | 6##9 .|
+ ->| 3b##6 .|<-
+ | 7##b3 .|
+ | 86 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x30d7 'プ'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 15
+ Advance: 17
+ Offset: 0 x -1
+ _________________
+ |.................|
+ | 3c#6.|
+ | a51#.|
+ | 962#.|
+ |1cbbaaaaaaba3b#5.|
+ |1###########b .|
+ | 9#7 .|
+ | 1##1 .|
+ | 9#9 .|
+ | 5##2 .|
+ | 3##6 .|
+ | 3##9 .|
+ | 5##a .|
+ | 3a##8 .|
+ ->| 2a##c5 .|<-
+ | 6#7 .|
+ |.................|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x30d8 'ヘ'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 17 x 9
+ Advance: 17
+ Offset: 0 x 1
+ _________________
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ | 6b5 |
+ | 9###a1 |
+ | 1b#928##5 |
+ | 4##9 5##9 |
+ |3##9 3c#c4 |
+ | 48 1a##91 |
+ | 7###3|
+ | 4cc |
+ | 12 |
+ ->|.................|<-
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x30d9 'ベ'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 17 x 12
+ Advance: 17
+ Offset: 0 x 1
+ _________________
+ |.................|
+ |.................|
+ | 4 |
+ | ab1 |
+ | 6c2a2 |
+ | 483 88 |
+ | 9###91 |
+ | 2b#949#c3 |
+ | 7##7 6##8 |
+ |2##6 3c#b3 |
+ | 35 1a##7 |
+ | 7##c2|
+ | 4cb |
+ | 13 |
+ ->|.................|<-
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x30da 'ペ'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 17 x 12
+ Advance: 17
+ Offset: 0 x 1
+ _________________
+ |.................|
+ |.................|
+ | 3bb3 |
+ | b33c |
+ | b22c |
+ | 672 4bc4 |
+ | 1b###6 |
+ | 3c#a5c#9 |
+ | 7##8 1b#c3 |
+ |b##6 9##7 |
+ |3#5 6##c4 |
+ | 3c##c1|
+ | 8#8 |
+ | 3 |
+ ->|.................|<-
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x30db 'ホ'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 17 x 15
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |..................|
+ |..................|
+ |. 143 |
+ |. 2##1 |
+ |. 1## |
+ |. ## |
+ |. ##############5 |
+ |. cbbbbb##bbbbbb4 |
+ |. 7# |
+ |. 51 # 7 |
+ |. 3#c 3# 8#b1 |
+ |. 1c#4 6# a#c2 |
+ |.1b#7 9# a##2|
+ |.9#a c# a9 |
+ ->|. 5 35## |<-
+ |. c##c |
+ |. 6a82 |
+ |..................|
+ |..................|
+ -----------------
+
+Char 0x30dc 'ボ'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 15
+ Advance: 17
+ Offset: 1 x -1
+ _________________
+ |.................|
+ |. 4 |
+ |. 143 bb1|
+ |. 3#b 66 8 |
+ |. 1#a 2c5 |
+ |. #a 1 |
+ |.3#############1 |
+ |.3#ccccc##cccc#1 |
+ |. #a |
+ |. 93 #a 72 |
+ |. 7#a #a 3#c1 |
+ |. 4##1 #a 5#b |
+ |.2##4 #a 9#8 |
+ |.8#5 2#b 1b2 |
+ ->|. 2 c##a |<-
+ |. 7b82 |
+ |.................|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x30dd 'ポ' top
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 0 x -1
+ _________________
+ | 22 .|
+ | 7ab7.|
+ | 43 c b.|
+ | c#1 7cb5.|
+ | b# .|
+ | b# .|
+ | a############4 .|
+ | 9bbaaa##aaabc5 .|
+ | b# .|
+ | 85 b# 88 .|
+ | 6#c1 b# a#9 .|
+ | 4##3 b# 1c#8 .|
+ |5##5 b# 2##2.|
+ |1a5 ## 54 .|
+ ->| 9##c .|<-
+ | 5#c4 .|
+ |.................|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x30de 'マ'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 15 x 12
+ Advance: 17
+ Offset: 1 x 0
+ _________________
+ |.................|
+ |.................|
+ |.................|
+ |. 1 .|
+ |.cccccccccccc#c3.|
+ |.####ccccccc###8.|
+ |. 2##7 .|
+ |. 1c#8 .|
+ |. 1 1b#9 .|
+ |. 2cc21b#9 .|
+ |. 1a##c#8 .|
+ |. 7##a .|
+ |. 6##7 .|
+ |. 6#a .|
+ ->|. 4 .|<-
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x30e0 'ム'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 15 x 13
+ Advance: 17
+ Offset: 1 x -1
+ _________________
+ |.................|
+ |.................|
+ |.................|
+ |. #93 .|
+ |. 3##3 .|
+ |. 7#9 .|
+ |. b#3 .|
+ |. 3#c .|
+ |. 8#6 2a2 .|
+ |. 1## 7#c1 .|
+ |. 7#7 9#b .|
+ |. 1## 4##a .|
+ |.338#b89b######7.|
+ |.########b9638#c.|
+ ->|.9c97531 a2.|<-
+ |.2 .|
+ |.................|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x30e1 'メ'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 13 x 14
+ Advance: 17
+ Offset: 2 x -1
+ _________________
+ |.................|
+ |.................|
+ |.. 31 ..|
+ |.. a#6..|
+ |.. 1##1..|
+ |.. 6#8 ..|
+ |.. 492 c#1 ..|
+ |.. a##78#7 ..|
+ |.. 5#### ..|
+ |.. 2###9 ..|
+ |.. b#a##b ..|
+ |.. 1b#9 3c9 ..|
+ |.. 2c#a 1 ..|
+ |.. 7##9 ..|
+ ->|..4c##6 ..|<-
+ |.. 9a2 ..|
+ |.................|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x30e2 'モ'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 15 x 11
+ Advance: 17
+ Offset: 1 x 0
+ _________________
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ |. a#########c .|
+ |. 9cbb##bbbcb .|
+ |. #c .|
+ |. #c .|
+ |.4#############b.|
+ |.3cbbbb##bbbbbba.|
+ |. #c .|
+ |. #c .|
+ |. ##1 .|
+ |. b##ccc#8 .|
+ ->|. 28c####8 .|<-
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x30e3 'ャ'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 13 x 12
+ Advance: 17
+ Offset: 2 x 0
+ _________________
+ |.................|
+ |.................|
+ |.................|
+ |.. 274 ..|
+ |.. 2#6 ..|
+ |.. #8 26 ..|
+ |.. 1cb7ac###a..|
+ |..8a####ca738#2..|
+ |..8c968#2 3#6 ..|
+ |.. 3#4 1ca ..|
+ |.. #7 3b1 ..|
+ |.. c9 ..|
+ |.. 9c ..|
+ |.. 7#1 ..|
+ ->|.. 5#3 ..|<-
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x30e5 'ュ'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 12 x 8
+ Advance: 17
+ Offset: 2 x 2
+ _________________
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ |.. ####### ...|
+ |.. 66666b# ...|
+ |.. ab ...|
+ |.. ba ...|
+ |.. c9 ...|
+ |.. #8 ...|
+ |..8888888#b888...|
+ |..############...|
+ |.................|
+ ->|.................|<-
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x30e6 'ユ'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 15 x 11
+ Advance: 17
+ Offset: 1 x 0
+ _________________
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ |. c########7 .|
+ |. acccccc##6 .|
+ |. a#4 .|
+ |. b#3 .|
+ |. ##1 .|
+ |. ## .|
+ |. 1#c .|
+ |. 3#b .|
+ |.###############.|
+ |.###############.|
+ ->|. 1.|<-
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x30e7 'ョ'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 10 x 11
+ Advance: 17
+ Offset: 3 x 0
+ _________________
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ |... 766666662....|
+ |...1########5....|
+ |... #5....|
+ |... #5....|
+ |... c#######5....|
+ |... 2222222#5....|
+ |... #6....|
+ |... 1 #6....|
+ |... c#######6....|
+ |... 1111111#7....|
+ ->|... 21....|<-
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x30e9 'ラ'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 13 x 13
+ Advance: 17
+ Offset: 2 x -1
+ _________________
+ |.................|
+ |.................|
+ |.................|
+ |.. #########c ..|
+ |.. ccbbbbbbcb ..|
+ |.. ..|
+ |..#ccccccccccc6..|
+ |..############b..|
+ |.. 7#1..|
+ |.. 1#9 ..|
+ |.. a#1 ..|
+ |.. 9#6 ..|
+ |.. 1a#8 ..|
+ |.. 5c#8 ..|
+ ->|.. 4b##6 ..|<-
+ |.. 2cb2 ..|
+ |.................|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x30ea 'リ'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 9 x 16
+ Advance: 17
+ Offset: 4 x -2
+ _________________
+ |.................|
+ |.... 54 ....|
+ |....bc1 ##1....|
+ |....cc ## ....|
+ |....cc c# ....|
+ |....cc c# ....|
+ |....cc c# ....|
+ |....cc c# ....|
+ |....c# #c ....|
+ |....c# #a ....|
+ |....c# 2#8 ....|
+ |.... 6#5 ....|
+ |.... c#1 ....|
+ |.... 7#8 ....|
+ ->|.... 5#c1 ....|<-
+ |.... 6##3 ....|
+ |.... 174 ....|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x30eb 'ル'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 17 x 12
+ Advance: 17
+ Offset: 0 x 0
+ _________________
+ |.................|
+ |.................|
+ |.................|
+ | 32 661 |
+ | 1#c b# |
+ | #b b# |
+ | cb b# |
+ | #a b# |
+ | 1#8 b# 9 |
+ | 4#6 b# 1b#5|
+ | 9#3 b# 3c#8 |
+ | 2#b c#17##6 |
+ | 1c#4 ####c3 |
+ |3c#7 2###7 |
+ ->|2b8 7a2 |<-
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x30ec 'レ'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 13 x 13
+ Advance: 17
+ Offset: 2 x -1
+ _________________
+ |.................|
+ |.................|
+ |.................|
+ |.. 42 ..|
+ |.. ##1 ..|
+ |.. ## ..|
+ |.. ## ..|
+ |.. ## 4a..|
+ |.. ## 7#c..|
+ |.. ## 1a#b2..|
+ |.. ## 6##9 ..|
+ |.. ## 6c#c4 ..|
+ |.. ##9###7 ..|
+ |..2###c6 ..|
+ ->|.. 5#5 ..|<-
+ |.. 1 ..|
+ |.................|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x30ed 'ロ'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 11 x 11
+ Advance: 17
+ Offset: 3 x 0
+ _________________
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ |...abbbbbbbbba...|
+ |...c#########c...|
+ |...c# #c...|
+ |...c# #c...|
+ |...c# #c...|
+ |...c# #c...|
+ |...c# #c...|
+ |...## #c...|
+ |...##bbbbbbb#c...|
+ |...###########...|
+ ->|...cc cb...|<-
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x30ef 'ワ'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 13 x 15
+ Advance: 17
+ Offset: 2 x -2
+ _________________
+ |.................|
+ |.................|
+ |.. 1 ..|
+ |..b##########a2..|
+ |..b#88888888c#3..|
+ |..b# a# ..|
+ |..b# cc ..|
+ |..b# 1#9 ..|
+ |..b# 5#6 ..|
+ |..68 a#2 ..|
+ |.. 2#a ..|
+ |.. a#3 ..|
+ |.. 8#9 ..|
+ |.. 8#c1 ..|
+ ->|.. 9#c2 ..|<-
+ |.. 3#c2 ..|
+ |.. 21 ..|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x30f3 'ン'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 13 x 13
+ Advance: 17
+ Offset: 2 x -1
+ _________________
+ |.................|
+ |.................|
+ |.................|
+ |..15 ..|
+ |..a#9 ..|
+ |..1a#a 1..|
+ |.. a#2 8b..|
+ |.. 2 9#c..|
+ |.. 1b#b1..|
+ |.. 4##a1 ..|
+ |.. 19##6 ..|
+ |.. 17##b2 ..|
+ |.. 38###6 ..|
+ |..c###91 ..|
+ ->|..7#a3 ..|<-
+ |.. 5 ..|
+ |.................|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x30fc 'ー'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 3
+ Advance: 17
+ Offset: 1 x 4
+ _________________
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ |.561 112454 |
+ |. bca9999999abba1|
+ |. 1 |
+ |.................|
+ |.................|
+ |.................|
+ ->|.................|<-
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x4e00 '一'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 15 x 3
+ Advance: 17
+ Offset: 1 x 5
+ _________________
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ |.1 .|
+ |.##############a.|
+ |.766555555555665.|
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ ->|.................|<-
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x4e0a '上'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 15
+ Advance: 17
+ Offset: 0 x -1
+ _________________
+ |.................|
+ | 31 .|
+ | #8 .|
+ | #6 .|
+ | #6 .|
+ | #6 .|
+ | #9555563 .|
+ | #######6 .|
+ | #6 .|
+ | #6 .|
+ | #6 .|
+ | #6 .|
+ | #6 .|
+ | #6 .|
+ ->|2555555#95555555.|<-
+ |6###############.|
+ |.................|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x4e0b '下'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 15
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |.................|
+ |.455555555555556 |
+ |.9##############1|
+ |. 6# |
+ |. 6# |
+ |. 6# 31 |
+ |. 6#1#c2 |
+ |. 6# 4##3 |
+ |. 6# 3##5 |
+ |. 6# 3##1 |
+ |. 6# 35 |
+ |. 6# |
+ |. 7# |
+ ->|. 7# |<-
+ |. 7# |
+ |. 46 |
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x4e0d '不'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 15
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ |.................|
+ | 655444444444562.|
+ | ##############5.|
+ | 1 b9 1 .|
+ | 5#3 .|
+ | 1## .|
+ | b## 58 .|
+ | 9c8# 6#8 .|
+ | 8#37# 7#8 .|
+ | 1a#3 7# 9#6 .|
+ | 4c#3 7# c#4.|
+ |3#c2 7# 3b2.|
+ | 21 7# .|
+ ->| 7# .|<-
+ | 7# .|
+ | 47 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x4e0e '与'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 15 x 16
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |. 87 .|
+ |. #9 .|
+ |. #a5555555552.|
+ |. ###########5.|
+ |. #6 .|
+ |. 1#5 .|
+ |. 2#8444444452 .|
+ |. 4##########4 .|
+ |. 1 3#3 .|
+ |. 4#2 .|
+ |.#ccccccc##56#1 .|
+ |.655555556627# .|
+ |. 9c .|
+ ->|. 334cb .|<-
+ |. 6###5 .|
+ |. 1641 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x4e14 '且'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 14
+ Advance: 17
+ Offset: 0 x -1
+ _________________
+ |.................|
+ |.................|
+ | 3655555556 .|
+ | 7######### .|
+ | 7# 7# .|
+ | 6# 7# .|
+ | 6######### .|
+ | 6#2222228# .|
+ | 6# 7# .|
+ | 6# 7# .|
+ | 6######### .|
+ | 6#2222228# .|
+ | 6# 7# .|
+ | 6# 7# .|
+ ->|6###############.|<-
+ |1222222222222223.|
+ |.................|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x4e21 '両'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 15 x 16
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |.322222222222223.|
+ |.c##############.|
+ |.1 1#3 1.|
+ |. 1#3 .|
+ |.2#############5.|
+ |.1#42223#52222#4.|
+ |.1#3 311#3 31 #4.|
+ |.1#31#31#3 #4 #4.|
+ |.1#3 #11#3 #2 #4.|
+ |.1#3 #11#3 #2 #4.|
+ |.1#3 #11#52#2 #4.|
+ |.1#31#######2 #4.|
+ |.1#3 33211 a2 #4.|
+ ->|.1#3 #4.|<-
+ |.2#3 19a#3.|
+ |.162 bb6 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x4e24 '两'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 15
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |.................|
+ |.1322222222222221|
+ |.4##############5|
+ |. 1# a7 |
+ |. 2# a6 |
+ |. 2############ |
+ |. 2#116b11#416# |
+ |. 1# 88 #2 5# |
+ |. 1# cc33#5 5# |
+ |. 1# 5c3c8ac55# |
+ |. 1#2#6 3c44#8# |
+ |. 1#5a 7c 45# |
+ |. 1# 34 5# |
+ ->|. 1# 249# |<-
+ |. 2# 3##9 |
+ |. 2 |
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x4e26 '並'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 15 x 16
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |. 1 2 .|
+ |. bc1 4#7 .|
+ |. 3#a ba .|
+ |. 32275227c3223 .|
+ |.1#############1.|
+ |. 2#3 6# .|
+ |. 45 2#3 6# 41 .|
+ |. 8# 2#3 6# #b .|
+ |. 2#62#3 6# 5#2 .|
+ |. ab2#3 6# c9 .|
+ |. 6#5#3 6#7#3 .|
+ |. 243#3 6#16 .|
+ |. 2#3 6# .|
+ ->|.32224#527#22223.|<-
+ |.##############c.|
+ |.1 1.|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x4e2a '个'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 46 .|
+ | b#1 .|
+ | 5#a8 .|
+ | 1#72#5 .|
+ | 1ba 5#6 .|
+ | 2cb122 6#a2 .|
+ | 6#b1 8#2 4c#a6.|
+ |2c#9 7# 18#5.|
+ | 45 7# 1 .|
+ | 7# .|
+ | 7# .|
+ | 7# .|
+ | 7# .|
+ ->| 7# .|<-
+ | 7# .|
+ | 8#1 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x4e2d '中'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 13 x 16
+ Advance: 17
+ Offset: 2 x -2
+ _________________
+ |.................|
+ |.. 351 ..|
+ |.. 7# ..|
+ |.. 7# ..|
+ |..322227#222232..|
+ |..############9..|
+ |..#7 6c #8..|
+ |..#7 6c #7..|
+ |..#7 6c #7..|
+ |..#7 7c #7..|
+ |..############8..|
+ |..#81117c1111#8..|
+ |..42 6c 21..|
+ |.. 6c ..|
+ ->|.. 6# ..|<-
+ |.. 7# ..|
+ |.. 6b ..|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x4e3a '为'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 14 x 16
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |. 241 ..|
+ |. 55 6#3 ..|
+ |. 7#3 7# ..|
+ |. c9 8b ..|
+ |. 1 1 a9 11..|
+ |. b###########a..|
+ |. 211113#3111a9..|
+ |. 6c b8..|
+ |. c74 c7..|
+ |. 5#3#a #6..|
+ |. 1c7 4#51#5..|
+ |. bb 3 2#4..|
+ |. 2bc2 4#2..|
+ ->|.28#b2 34b# ..|<-
+ |.8#8 b##5 ..|
+ |. 2 33 ..|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x4e3b '主'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |. 3 |
+ |. a#1 |
+ |. 4#7 |
+ |.155444484444451 |
+ |.3#############4 |
+ |. 3#2 |
+ |. 3#2 |
+ |. 3#2 |
+ |. 7###########5 |
+ |. 354446#644452 |
+ |. 3#2 |
+ |. 3#2 |
+ |. 3#2 |
+ ->|.2211114#4111122 |<-
+ |.###############2|
+ |.11 11 |
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x4e45 '久'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 15 x 16
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |. 21 .|
+ |. c#2 .|
+ |. 3#6 .|
+ |. 9#544451 .|
+ |. 2######c .|
+ |. bb 1#6 .|
+ |. 8#2 7#1 .|
+ |. 7#7 1#9 .|
+ |. 59 8#b .|
+ |. 3#8#3 .|
+ |. 2ca bb .|
+ |. 3cb1 3#8 .|
+ |. 6#b1 7#91 .|
+ ->|. 5b#9 8##8.|<-
+ |.7#c4 7#4.|
+ |. 4 1 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x4e49 '义'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 15 x 16
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |. 2 .|
+ |. 4#5 .|
+ |. 165 cb c6 .|
+ |. 1#9 8#2 3#7 .|
+ |. 9# 3#4 8# .|
+ |. 2#4 c8 .|
+ |. ab 6#2 .|
+ |. 3#5 1c8 .|
+ |. 9c1 9#1 .|
+ |. 1#a6#5 .|
+ |. 4##7 .|
+ |. 19##b2 .|
+ |. 6#c36##94 .|
+ ->|.48##8 2a###b4.|<-
+ |.8#92 38#c .|
+ |. 1 1 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x4e4b '之'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 15 x 15
+ Advance: 17
+ Offset: 1 x -1
+ _________________
+ |.................|
+ |. 22 .|
+ |. cb .|
+ |. 6#4 .|
+ |. 172 1 .|
+ |.1###########a .|
+ |. 555555555#c1 .|
+ |. 9#2 .|
+ |. a#3 .|
+ |. 1bc2 .|
+ |. 3cb1 .|
+ |. 7#8 .|
+ |. 5b#5 .|
+ |.1bcbc5 .|
+ ->|.bc1 5#c75455797.|<-
+ |.25 17c######3.|
+ |.................|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x4e5f '也'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 95 .|
+ | #6 .|
+ | 162 #5 .|
+ | 1#6 #5 152 .|
+ | 1#4 #76a##1 .|
+ | 1#548##a67# .|
+ | 159##b7#5 7c .|
+ |2#c9#5 #5 9a .|
+ | 3 1#4 #5 b9 .|
+ | 1#4 #534#7 .|
+ | 1#4 #69##3 .|
+ | 1#4 #6251 3 .|
+ | 1#4 63 b9.|
+ ->| 1#81 4#a.|<-
+ | b##########3.|
+ | 2455555541 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x4e86 '了'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 14 x 15
+ Advance: 17
+ Offset: 2 x -2
+ _________________
+ |.................|
+ |.................|
+ |..2111111111112 .|
+ |..#############1.|
+ |.. 6#b5 .|
+ |.. 1ac4 .|
+ |.. 6#9 .|
+ |.. #8 .|
+ |.. #7 .|
+ |.. #7 .|
+ |.. #7 .|
+ |.. #7 .|
+ |.. #7 .|
+ |.. #7 .|
+ ->|.. 23#7 .|<-
+ |.. 5##3 .|
+ |.. 3 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x4e8c '二'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 15 x 12
+ Advance: 17
+ Offset: 1 x 0
+ _________________
+ |.................|
+ |.................|
+ |.................|
+ |. 466555555567 .|
+ |. 8########### .|
+ |. 1 .|
+ |. .|
+ |. .|
+ |. .|
+ |. .|
+ |. .|
+ |. .|
+ |. 1.|
+ |.###############.|
+ ->|.766666666666666.|<-
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x4e8e '于'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 15 x 15
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |.................|
+ |. cccccccccc#5 .|
+ |. 55555#955552 .|
+ |. #5 .|
+ |. #5 .|
+ |. #5 .|
+ |.2222222#7222222.|
+ |.a#############c.|
+ |. #5 .|
+ |. #5 .|
+ |. #5 .|
+ |. #5 .|
+ |. #5 .|
+ ->|. 134#5 .|<-
+ |. ###3 .|
+ |. 331 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x4e9b '些'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 64 23 .|
+ | 1 #7 5#2 .|
+ | #9 #5 4# 27 .|
+ | #6 #6224# 4##6.|
+ | #5 ###84#8#a3 .|
+ | #5 #5 4#a3 .|
+ | #5 #5 4# .|
+ | #5 #7544# 97.|
+ |25#bb##c54#424#a.|
+ |5#a752 1b###b2.|
+ | 1111111111 .|
+ | 7######### .|
+ | 1111111112 .|
+ ->| 1 .|<-
+ | ##############2.|
+ | 21111111111112 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x4eab '享'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 69 .|
+ | 1 2#2 1 .|
+ | ##############3.|
+ | 22221111111222 .|
+ | ##########1 .|
+ | #2 2# .|
+ | #2 2# .|
+ | ##########1 .|
+ | 1 .|
+ | ###########7 .|
+ | 1 1788752 .|
+ |1##############6.|
+ | 3111113#1111111.|
+ ->| 336# .|<-
+ | 3##a .|
+ | 31 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x4ec5 '仅'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 51 .|
+ | 3#a .|
+ | 7#2555555563 .|
+ | #9 ###ccc##5 .|
+ | 5#5 3c1 4#2 .|
+ | c#5 1#4 7c .|
+ | 7##5 b8 b8 .|
+ |2#8#5 6c 2#4 .|
+ |2c1#5 1#4 8c .|
+ | 1 #5 9a1#5 .|
+ | #5 2#cb .|
+ | #5 b#6 .|
+ | #5 1a#b#92 .|
+ ->| #5 6cc2 8##a5.|<-
+ | #7c#8 4b#3.|
+ | 8332 2 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x4eca '今'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 472 .|
+ | c#4 .|
+ | 7#8b .|
+ | 3#5 ba .|
+ | 3#7 1cb2 .|
+ | 5#8 6c 1a#93 .|
+ | 19#7 3#3 7##b.|
+ |2##5 b5 184.|
+ | 4432222222221 .|
+ | 4##########1 .|
+ | 1#6 .|
+ | ac .|
+ | 5#3 .|
+ ->| 2#8 .|<-
+ | 2cc .|
+ | 193 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x4ecb '介'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |. 3 |
+ |. 7#7 |
+ |. 1#b#1 |
+ |. ab 9b1 |
+ |. 9c1 ac3 |
+ |. 9#2 a#82 |
+ |. 4cc3 6##b1|
+ |.9#b16#1 7#12a4 |
+ |. 6 6# 6# |
+ |. 5# 6# |
+ |. 6c 6# |
+ |. 8a 6# |
+ |. #6 6# |
+ ->|. 9c 6# |<-
+ |. 3b#3 7# |
+ |. 6c3 7#1 |
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x4ecd '仍'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 15 x 16
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |. 4 .|
+ |. 4#7 1 .|
+ |. ab3#######a .|
+ |. 2#4134#522c7 .|
+ |. 8# 2#2 #4 .|
+ |. 2## 2#1 3#1 .|
+ |. b## 3# 6#22.|
+ |.8#7# 5c a##9.|
+ |.755# 7b c7.|
+ |. 5# a8 #5.|
+ |. 5# #5 2#4.|
+ |. 5# 6# 4#2.|
+ |. 5# 1#7 7# .|
+ ->|. 5#2bb 88cb .|<-
+ |. 6#291 8#a4 .|
+ |. 24 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x4ece '从'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 17 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 471 472 |
+ | 7# 7#2 |
+ | 7c 7# |
+ | 7b 7# |
+ | 8a 7# |
+ | 99 8# |
+ | a8 9#1 |
+ | cb1 b#3 |
+ | ##b1 #b6 |
+ | 4#2bb14#6a |
+ | 9a 2#4a91#2 |
+ | 3#3 13#3 aa |
+ | 1ca 2c9 3#7 |
+ ->|1cc1 4#b 7#91|<-
+ | 42 8#b1 8a1|
+ | 7 |
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x4ed5 '仕'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 86 383 .|
+ | #b 3#3 .|
+ | 4#3 3#3 .|
+ | ab 3#3 .|
+ | 3#6 3#3 1.|
+ | c#58##########.|
+ | ac#522224#52223.|
+ |6#3#5 3#3 .|
+ | 7 #5 3#3 .|
+ | #5 3#3 .|
+ | #5 3#3 .|
+ | #5 3#3 .|
+ | #5 3#3 .|
+ ->| #5 #########3.|<-
+ | #6 322222222 .|
+ | 194 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x4ed6 '他'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 17 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 97 2#6 |
+ | 1#7 1#3 |
+ | 6# 13 1#3 |
+ | c7 5#11#316c2 |
+ | 6#4 4# 2#b###1 |
+ | 1##4 4#9##936# |
+ | ac#79##84#3 6# |
+ |2#4#5a8# 1#3 7c |
+ | 2 #4 4# 1#3 8b |
+ | #4 4# 1#79#a |
+ | #4 4# 1#4c92 |
+ | #4 4# 1#3 |
+ | #4 4# 51 4b2|
+ ->| #4 4#4 1a#1|<-
+ | #4 1c#######5 |
+ | 82 111111 |
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x4ed8 '付'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | b91 183 .|
+ | 1#9 1#5 .|
+ | 7#1 1#4 .|
+ | c8 1#4 1.|
+ | 6#75#########c.|
+ | 1##72443334#744.|
+ | bbc7 1#4 .|
+ |6#3c7 b9 1#4 .|
+ | 5 c7 7#5 1#4 .|
+ | c7 cc 1#4 .|
+ | c7 58 1#4 .|
+ | c7 1#4 .|
+ | c7 1#4 .|
+ ->| c7 347#4 .|<-
+ | c8 4###2 .|
+ | 64 53 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x4ee3 '代'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 151 175 .|
+ | 5#7 1#7 97 .|
+ | 8# #6 7#3 .|
+ | #8 #6 c7 .|
+ | 5#5 c7 157b3.|
+ | c#5 2ccc##a83.|
+ | 7##7a###c52 .|
+ |3#7#69515c .|
+ |2b #5 2#1 .|
+ | #5 c5 .|
+ | #5 8a .|
+ | #5 2#4 1 .|
+ | #5 9c11c3.|
+ ->| #5 1cc8#3.|<-
+ | #6 1b#c .|
+ | 84 22 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x4ee4 '令' top
+ Font: #12 FZHeiTi (17)
+ Bitmap: 17 x 17
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ | 2 |
+ | 7#5 |
+ | 2#ba |
+ | ba b8 |
+ | 1bb1 2ca1 |
+ | 2cb15a 2c#71 |
+ | 18#a 3#4 8##b3|
+ |1c#6 c6 3aa |
+ | 32 |
+ | 3##########7 |
+ | 32222223#a |
+ | ac1 |
+ | 1c81 8#2 |
+ | 5c#a#3 |
+ ->| 6#c5 |<-
+ | 1a#6 |
+ | 5 |
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x4ee5 '以'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 14 x 16
+ Advance: 17
+ Offset: 2 x -2
+ _________________
+ |.................|
+ |.. 2 .|
+ |..34 b#2 .|
+ |..6#1 32 b# .|
+ |..5# cc2 cc .|
+ |..5# 2#b ca .|
+ |..5# 4#9 #8 .|
+ |..5# 72 1#6 .|
+ |..5# 3#3 .|
+ |..5# 2 7# .|
+ |..5# 5#1 ba .|
+ |..5#3#8 4#9 .|
+ |..5##8 2ca#9 .|
+ |..a#a 4cb 3#b1.|
+ ->|..ab 15a#a1 4#b.|<-
+ |.. 2 a#c5 52.|
+ |.. 5 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x4ef6 '件'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 1 21 .|
+ | 1#7 #a .|
+ | 6#2 43 #6 .|
+ | c7 c8 #6 .|
+ | 6#5 4#32#72221.|
+ | 2##5 a########6.|
+ | ba#54#3 #6 .|
+ |4c1#568 #6 .|
+ | 1 #5 #6 .|
+ | #59#########a.|
+ | #522222#72222.|
+ | #5 #6 .|
+ | #5 #6 .|
+ ->| #5 #6 .|<-
+ | #6 #6 .|
+ | 1 53 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x4efb '任'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 15
+ Advance: 17
+ Offset: 0 x -1
+ _________________
+ |.................|
+ | 52 .|
+ | 1#c1 1358b#1 .|
+ | 6#3c####ba94 .|
+ | c8 5646# .|
+ | 6#2 4# .|
+ | 1##2 4# .|
+ | ac#2 4# .|
+ |2#5#2##########9.|
+ | 4 #254437#33443.|
+ | #2 4# .|
+ | #2 4# .|
+ | #2 4# .|
+ | #2 4# .|
+ ->| #21#########3.|<-
+ | #3 322222222 .|
+ |.................|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x4efd '份'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 2 2 .|
+ | 2#4 2726#1 .|
+ | 7c 6#22#4 .|
+ | c6 a9 a9 .|
+ | 5#2 2#2 4#2 .|
+ | c#2 89 bb .|
+ | 7c#23#411116#a .|
+ |3#5#3ca######a#b.|
+ | 7 #5b 1#2 #372.|
+ | #2 1#1 #2 .|
+ | #2 3# #2 .|
+ | #2 79 #1 .|
+ | #2 c4 2#1 .|
+ ->| #2 9b 138# .|<-
+ | #28#3 ##8 .|
+ | 19213 31 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x4f11 '休'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 17 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | c5 3#2 |
+ | 4#2 2# |
+ | a8 2# |
+ | 3#3 2# |
+ | a#3##########a |
+ | 4##22118c#c2111 |
+ |1c7#2 c6#94 |
+ |5c #2 4c2#5a |
+ | 2 #2 b52# #4 |
+ | #2 6c 2# 7c2 |
+ | #23#3 2# bc2 |
+ | #6#8 2# 2##1|
+ | #79 2# 33 |
+ ->| #2 2# |<-
+ | #2 3#1 |
+ | 41 14 |
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x4f1a '会'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 15 x 16
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |. 9c2 .|
+ |. 5##6 .|
+ |. 3#73#5 .|
+ |. 3#9 5#7 .|
+ |. 5#9 4#b4 .|
+ |.3a#8 3a#c8.|
+ |.9#57####### 4a7.|
+ |. 1 12211223 .|
+ |. .|
+ |.1###ccccccc### .|
+ |. 32229c3222223 .|
+ |. 5#6 181 .|
+ |. 5#4 2c#3 .|
+ ->|. 7c312336##3 .|<-
+ |. 4#####cbaa##3 .|
+ |. 532 5a2 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x4f3a '伺'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 51 .|
+ | 4#a1221111221.|
+ | 8#12########4.|
+ | #7 #4.|
+ | 5#2 3211123 #4.|
+ | c#21####### #4.|
+ | 8##2 1 #4.|
+ |2#6#2 21112 #4.|
+ | 41#2 1##### #4.|
+ | 1#2 1# 2# #4.|
+ | 1#2 1#113# #4.|
+ | 1#2 1##### #4.|
+ | 1#2 2# 2a #4.|
+ ->| 2#2 2 2#4.|<-
+ | 3#3 b##3.|
+ | 3a3 773 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x4f3c '似'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 11 .|
+ | 7#2 ba 7#3 .|
+ | b9 5#5 7# .|
+ | 1#3 #5 a#17# .|
+ | 7# #2 2#37# .|
+ | c# #2 7c .|
+ | 7## #2 8a .|
+ |2#7# #2 99 .|
+ |192# #21b c7 .|
+ | 2# #2bc12#4 .|
+ | 2# #bc1 7#5 .|
+ | 2# 1##2 2#a#3 .|
+ | 2# 2#4 2ca 8c1.|
+ ->| 2# 217#a ca.|<-
+ | 2# 1b#6 67.|
+ | 3 11 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x4f46 '但'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 3 .|
+ | 3#711111111 .|
+ | 8c 5#######6 .|
+ | 1#6 4#11115#a .|
+ | 7#5 4# 5#9 .|
+ | 2##5 4# 5#8 .|
+ | ba#5 4#######7 .|
+ |6#2#5 4# 5#6 .|
+ | 4 #5 4# 5#5 .|
+ | #5 4# 5#7 .|
+ | #5 5#######a .|
+ | #5 121111121 .|
+ | #5 .|
+ ->| #5##########a.|<-
+ | #566555555565.|
+ | 42 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x4f4d '位'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 15 x 16
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |. 43 25 .|
+ |. cc1 6#3 .|
+ |. 2#4 #8 .|
+ |. 8c 7555655566.|
+ |. 1#8 #ccccccccb.|
+ |. 8#8 2 .|
+ |.3##8 a5 b#1 .|
+ |.caa8 ba #8 .|
+ |.62a8 7# 2#3 .|
+ |. a8 3#3 5# .|
+ |. a8 #7 89 .|
+ |. a8 95 b5 .|
+ |. a81 1#2 1.|
+ ->|. b8c##########.|<-
+ |. c843333333345.|
+ |. 32 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x4f4e '低'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 17 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 15 |
+ | 6#8 113468b8 |
+ | bb 3#####a981 |
+ | 2#4 2# 2# |
+ | 9#1 2# 2# |
+ | 4##1 2# 1# |
+ |1c9#1 2########9 |
+ |7b4#1 2#222#3222 |
+ | 23#1 2# c4 |
+ | 3#1 2# 97 |
+ | 3#1 2# 6b |
+ | 3#1 2# a51#3 1 |
+ | 3#1 2#ab3 8b1c2|
+ ->| 3#1 5#a5#31###1|<-
+ | 4#1 3a 87 3b7 |
+ | 13 |
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x4f53 '体'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 2 41 .|
+ | 5#6 #5 .|
+ | ac #4 .|
+ | 2#72111#622223.|
+ | 9#8###########.|
+ | 3##1 4a#5a 1.|
+ | cb# 87#5a .|
+ |7c5# c3#585 .|
+ | 34# 5b #54c .|
+ | 4# 1#4 #5 c9 .|
+ | 4#1ba #5 7#a1.|
+ | 4#bba######7#b.|
+ | 4#311 #611 41.|
+ ->| 4#1 #6 .|<-
+ | 5#1 #8 .|
+ | 14 54 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x4f55 '何'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 162 .|
+ | 5#6 .|
+ | ac3##########.|
+ | 2#7 3333334#64.|
+ | 9#4 1#3 .|
+ | 2##4 c####21#3 .|
+ | bb#4 9#11#11#3 .|
+ |3#3#4 9# #11#3 .|
+ | 6 #4 a# #11#3 .|
+ | #4 c# #11#3 .|
+ | #4 #####11#3 .|
+ | #4 ##11#21#3 .|
+ | #4 88 1#3 .|
+ ->| #4 24#3 .|<-
+ | #4 c##2 .|
+ | 72 552 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x4f5c '作'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 171 471 .|
+ | 5#4 ab .|
+ | aa 2#3 .|
+ | 2#3 9#######9.|
+ | 8#1 3#5#511222.|
+ | 2##1 b81#3 .|
+ | aa#17#11#3 1 .|
+ |5#3#1 3 1###### .|
+ | 6 #1 1#51122 .|
+ | #1 1#3 .|
+ | #1 1#3 .|
+ | #1 1######5.|
+ | #1 1#511221.|
+ ->| #1 1#3 .|<-
+ | #2 2#3 .|
+ | 162 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x4f60 '你'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 73 44 .|
+ | 1#9 bc1 .|
+ | 7b 2#4 .|
+ | 1#5 9#######a.|
+ | 8#5 3#422223#5.|
+ | 3##5 b8 1#3 6# .|
+ |2#6c56c1 #1 b8 .|
+ |5b c5 1 #1 .|
+ | 1 c5 b8 #197 .|
+ | c5 2#3 #16#1 .|
+ | c5 8b #1 c9 .|
+ | c51#5 #1 6#3.|
+ | c59c #1 1#8.|
+ ->| c5 2 23#1 3 .|<-
+ | #5 b#c .|
+ | 21 23 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x4f75 '併'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 84 23 .|
+ | 2#7 b8 9c2 .|
+ | 6b 4#3 #4 .|
+ | b5 11627b111 .|
+ | 3#23########c .|
+ | b#2 2# #5 .|
+ | 6b#2 2# #5 .|
+ |3#4#2 2# #5 .|
+ |4b #2113#11#512 .|
+ | 1 #2b#########4.|
+ | #2 3# #5 .|
+ | #2 5c #5 .|
+ | #2 b8 #5 .|
+ ->| #2 8#2 #5 .|<-
+ | #4b#6 #5 .|
+ | 1#356 #6 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x4f7f '使'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 1 .|
+ | 3#4 3#7 .|
+ | 7c12224#52222.|
+ | c76#########b.|
+ | 3#5 1#2 .|
+ | a#5 ######### .|
+ | 2##5 #2 1#3 2# .|
+ | a8#5 #2 1#2 2# .|
+ |3#2#5 #2 2#3 2# .|
+ | 5 #5 ######### .|
+ | #5 61 3#1 .|
+ | #5 ab16c .|
+ | #5 acc8 .|
+ ->| #5 5##c731 .|<-
+ | #55b#927c###a.|
+ | #58a3 2573.|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x4f86 '來'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 15 x 16
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |. 291 .|
+ |. 1# .|
+ |.1111112#1111122.|
+ |.b#############b.|
+ |. 64 1# 14 .|
+ |. #5 1# 6c .|
+ |. 6#6 2# cb1 .|
+ |. 1c7ba7#45#7#5 .|
+ |. 9b 17##bc6 6c1.|
+ |. 63 9b#c7 1 .|
+ |. 6c3#3#3 .|
+ |. 6#21# 6#5 .|
+ |. 9#3 1# 6#92 .|
+ ->|.5cc3 2# 4##8.|<-
+ |.491 2# 17 .|
+ |. 2# .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x4f8b '例'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 271 41.|
+ | 7#321122 #7.|
+ | b85##### #5.|
+ | 3#1 c4 8c #5.|
+ | a# 2#1 7a #5.|
+ | 5## 6###87a #5.|
+ |1#8# b71b77a #5.|
+ | 92# 5#1 #57a #5.|
+ | 1#1c751#27a #5.|
+ | 1#492bb# 7a #5.|
+ | 1# c8 8a #5.|
+ | 1# 4#2 57 #5.|
+ | 1# 3#8 #5.|
+ ->| 2# 6#b 2#5.|<-
+ | 3#2aa1 7##3.|
+ | 2 173 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x4f9b '供'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 193 181 192 .|
+ | 6#7 1#1 2# .|
+ | bb 1# 2# .|
+ | 4#4 1# 2# .|
+ | b#28#########7.|
+ | 5##2113#213#121.|
+ |1#a#2 1# 2# .|
+ |6#2#2 1# 2# .|
+ | 4 #2 1# 2# .|
+ | #2c##########.|
+ | #221121113112.|
+ | #2 1#9 3#5 .|
+ | #2 b#3 8#5 .|
+ ->| #2 a#3 9#4.|<-
+ | #29#3 b6.|
+ | 61 2 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x4f9d '依'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 15
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ |.................|
+ | 4#5 8a .|
+ | 8#1 7#3 .|
+ | #922113731221.|
+ | 5#3##########5.|
+ | c#21 8b# .|
+ | 7##2 1#4#1 1 .|
+ |2#8#2 8# b3 ca .|
+ |5#1#2 3## 969c3 .|
+ | 3 #2 ca# 6#c2 .|
+ | #2ac3# 1#4 .|
+ | #a#32# ac1 .|
+ | #34 2# 11cc3 .|
+ ->| #2 2#8b 2c#9.|<-
+ | #2 9#c6 1a2.|
+ | b2 67 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x4fbf '便'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 62 .|
+ | #86544444455.|
+ | 4#3cbbb#bbbba.|
+ | 99 #2 .|
+ | #7 3########2.|
+ | 6#7 2# #2 #1.|
+ | c#7 2# #2 #1.|
+ | 8##7 2#cc##cc#1.|
+ |1#5c7 2# #2 #1.|
+ | 1 c7 3########2.|
+ | c7 223#1111 .|
+ | c7 ab79 .|
+ | c7 a#5 .|
+ ->| c7 16#a#b8531.|<-
+ | c8a#b3 17c##9.|
+ | 8534 362.|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x4fdd '保'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 85 .|
+ | 1#83#######5 .|
+ | 6#13#32222#5 .|
+ | c6 3#1 #5 .|
+ | 5# 3#1 #5 .|
+ | c# 3#######5 .|
+ | 7## 1223#2221 .|
+ |4#6# 2# .|
+ |191# c#########9.|
+ | 1# 2229c#c3222.|
+ | 1# 3#5#79 .|
+ | 1# 2#82#1#7 .|
+ | 1# 4#a 2# 5#91.|
+ ->| 2#5#b 2# 7#b.|<-
+ | 2# 3 2# 42.|
+ | 15 15 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x4fe1 '信'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 4 16 .|
+ | 4#8 4#4 .|
+ | 8#111 194 11.|
+ | #63##########.|
+ | 5#4 1 1.|
+ | c#4 ########a .|
+ | 6b#4 221111123 .|
+ |2#4#4 211111111 .|
+ |2b #4 ########9 .|
+ | #4 .|
+ | #4 5#######5 .|
+ | #4 4# #5 .|
+ | #4 4# #5 .|
+ ->| #5 4#######5 .|<-
+ | #5 4# #5 .|
+ | 62 14 1 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x4fee '修'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |. 81 65 |
+ |. 4#3 1#6 |
+ |. a9 7######1 |
+ |. 2#4 1##212#6 |
+ |. 9# #3ab8a aa |
+ |.3## #7c1 a#c |
+ |.cb# #1 28#a#b751|
+ |.a3# #3c#92636b#2|
+ |. 1# #1523ac7 1 |
+ |. 1# #15b#7 3b1 |
+ |. 1# #1181 7#92 |
+ |. 1# #2 27#b31b6 |
+ |. 1# 715#c5 5##7 |
+ ->|. 2# 4 4b#a2 |<-
+ |. 2# 37a##a3 |
+ |. 2# 1ca61 |
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x500b '個'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 23 .|
+ | 7#3211111112 .|
+ | b82#########2.|
+ | 1#11# b1 #1.|
+ | 6# 1# # #1.|
+ | c# 1#6#####6#1.|
+ | 7c# 1# # #1.|
+ |3#6# 1# # #1.|
+ |291# 1# ##### #1.|
+ | 1# 1# #1 1# #1.|
+ | 1# 1# #1 1# #1.|
+ | 1# 1# #ccc# #1.|
+ | 1# 1# #1.|
+ ->| 1# 1#########1.|<-
+ | 2# 2#1111111#2.|
+ | 17 3 3 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x503c '值'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 17 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 384 99 |
+ | 8#7 c# |
+ | 1#a7#########5 |
+ | 7#21211#31112 |
+ | 1##1 1 #2 1 |
+ | 9##1 3#######3 |
+ |4#9#1 2# #2 |
+ | 62#1 2#######2 |
+ | 2#1 1# #2 |
+ | 2#1 1#######2 |
+ | 2#1 1# #2 |
+ | 2#1 1# #2 |
+ | 2#1 1#######2 |
+ ->| 2#113# #2 |<-
+ | 3#1c##########1|
+ | 3b1 1 |
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x504f '偏'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 17
+ Advance: 17
+ Offset: 0 x -3
+ _________________
+ |.................|
+ | 3#4 3a .|
+ | 6c #3 .|
+ | b7 ######### .|
+ | 2#2 #3111113# .|
+ | 8# #2 2# .|
+ | 2## ######### .|
+ | bc# 1#11111111 .|
+ |5#6# 3#11111111 .|
+ |184# 6#########2.|
+ | 4# b#2 c1c2 #1.|
+ | 4#3#c2 c1c2 #1.|
+ | 4#b8ccc#c#cc#1.|
+ | 4#92c2 c1c2 #1.|
+ ->| 4# c2 c1c2 #1.|<-
+ | 4# c2 71732#1.|
+ | 5#1 #2 2#c .|
+ | 13 2 .|
+ |.................|
+ -----------------
+
+Char 0x505c '停'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 571 69 .|
+ | b#1 5#2 .|
+ | 3#51##########.|
+ | a#2 2111111111.|
+ | 4##2 3####### .|
+ | cc#2 2# 2# .|
+ |6#7#2 3####### .|
+ |2#1#2 1 1 .|
+ | 5 #211111111111.|
+ | #2###########.|
+ | #2#711111116#.|
+ | #236#######73.|
+ | #2 #4 .|
+ ->| #2 #4 .|<-
+ | #2 8b#4 .|
+ | 71 7a7 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x5075 '偵'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 83 93 .|
+ | 2#4 #2 .|
+ | 79 ######5.|
+ | #3 #2 1 .|
+ | 6#2 ########2 .|
+ | 1c#2 #2 #2 .|
+ | 97#2 #2 #2 .|
+ |5#1#2 ########2 .|
+ |35 #2 #2 #2 .|
+ | #2 ########2 .|
+ | #2 #2 #2 .|
+ | #2 ########2 .|
+ | #2 128 721 .|
+ ->| #2 4ca11a#5 .|<-
+ | #3a#6 5#9 .|
+ | 8241 35 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x5099 '備'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 17 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | a5 48 192 |
+ | 2#7 4b 1#1 |
+ | 6#1#########b |
+ | b8 216b12#111 |
+ | 3#2 5a 1# |
+ | b# 6##########5|
+ | 5## 14#31111 |
+ |1#9# 1c#######1 |
+ |1c2# a# #1 #1 |
+ | 11#1a## #1 #1 |
+ | 1#6b4#cc#ccc#1 |
+ | 1# 1# #1 #1 |
+ | 1# 1########1 |
+ ->| 1# 1# #9 #1 |<-
+ | 2# 2# #a47#1 |
+ | 3#1 2b b75#8 |
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x50c5 '僅'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 17 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 1c5 3a1 93 |
+ | 5#2 2# #3 |
+ | a94##########2|
+ | 2#2 2# #2 |
+ | 9# 2#####2 |
+ | 4## 1# |
+ |1c## 1#####ccc#1 |
+ |7#6# 1# 2# 1# |
+ | 33# 1#########1 |
+ | 3# 2# |
+ | 3# 5#########1 |
+ | 3# 1 2# 1 |
+ | 3# 2########b |
+ ->| 4# 2# |<-
+ | 4# ########### |
+ | 4a11 1 |
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x50cf '像'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 17 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 1 62 |
+ | 5#1 6#4 |
+ | a8 2######2 |
+ | 2#32c6 1c4 |
+ | 9#5##########2 |
+ | 3##21#1 2#1 #2 |
+ |1c7#2 #########2 |
+ |3c #2 3bc 41 |
+ | 1 #36ac6#618#6 |
+ | #29619a#cc5 |
+ | #2 5c62#95b |
+ | #3ca23c9c c7 |
+ | #2118c35# 5#91|
+ ->| #2a#8 ab 86 |<-
+ | #242 5##4 |
+ | 51 61 |
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x5132 '儲'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 17 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 1 1 |
+ | 2#488 1#11 |
+ | 7b 4# 2#17#5|
+ | #4####7a##abb |
+ | 7# 11111 1#3#1 |
+ | 2## #### 11#94 2|
+ | ba# 1 1 ######b|
+ |1b3# 8### 5b1 |
+ | 2# 2a####1 |
+ | 2# c####c# #1 |
+ | 2# c21#35# #1 |
+ | 2# c21# 1####1 |
+ | 2# c21# 1# #1 |
+ ->| 2# ccc# 1####1 |<-
+ | 2# a2 7 1# #1 |
+ | 19 8 71 |
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x5143 '元'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 15 x 16
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |. 1 1 .|
+ |. ##########a .|
+ |. 32222222233 .|
+ |. .|
+ |. .|
+ |.23222222222223 .|
+ |.6############# .|
+ |. 5# #6 .|
+ |. 6# #6 .|
+ |. 7c #6 .|
+ |. aa #6 .|
+ |. 1#7 #6 4 .|
+ |. a#1 #6 ac.|
+ ->|. 3b#3 #a556#9.|<-
+ |.9#c2 8####b2.|
+ |.17 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x5148 '先' top
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 17
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ | 1 .|
+ | 52 1#3 .|
+ | 1#8 #2 .|
+ | 6# #2 1 .|
+ | c##########1 .|
+ | 8#2111#31112 .|
+ | 35 #2 .|
+ | 1 #2 .|
+ |3##############b.|
+ | 22217#12#611222.|
+ | 7c #5 .|
+ | a9 #5 .|
+ | #6 #5 1 .|
+ | 8#1 #5 #5.|
+ ->| 29#6 #6 5#5.|<-
+ | 9#c4 b####a .|
+ | 26 122 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x5149 '光'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 15 x 16
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |. 262 .|
+ |. 3#3 .|
+ |. 67 3#2 ab1 .|
+ |. 7#5 3#2 4#8 .|
+ |. b#13#21cb .|
+ |. 3a33#24c2 .|
+ |.4333335#4333333.|
+ |.c#############9.|
+ |.11112#31#711222.|
+ |. 2#1 #6 .|
+ |. 4# #6 .|
+ |. aa #6 .|
+ |. 6#4 #6 92.|
+ ->|.149#8 #8226#8.|<-
+ |.b#c4 b####c1.|
+ |.14 1211 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x5165 '入'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 17 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 1 |
+ | 3#7 |
+ | 6#7 |
+ | 5#6 |
+ | 9#2 |
+ | b#8 |
+ | 1#8#1 |
+ | 7c c8 |
+ | #7 6#2 |
+ | 7#1 ca |
+ | 2#7 5#7 |
+ | 1cb a#5 |
+ | 2c#2 1c#7 |
+ ->| 6##3 2##b1|<-
+ |2ac2 2a2 |
+ | 1 |
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x5168 '全'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 17 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 5a3 |
+ | c#6 |
+ | 9b3#3 |
+ | 7c2 8#3 |
+ | 8#3 9#81 |
+ | 2ac2 6##a71|
+ |18#c#ccccccc#9#a |
+ | 9816556#6556 12 |
+ | 2#2 |
+ | 21113#31123 |
+ | ########### |
+ | 21113#31112 |
+ | 2#2 |
+ ->| 1211113#311112 |<-
+ | 6#############2 |
+ | 13222222222223 |
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x5169 '兩'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 15 x 14
+ Advance: 17
+ Offset: 1 x -1
+ _________________
+ |.................|
+ |.................|
+ |.b#############a.|
+ |.2222223#2222222.|
+ |. 2# .|
+ |. ############3 .|
+ |. #31113#1111#2 .|
+ |. #237 2#1b #2 .|
+ |. #22#42# 96 #2 .|
+ |. #2 #c2# bc #2 .|
+ |. #268#7#38b5#2 .|
+ |. #5#18##a469#2 .|
+ |. #25 24#2 1 #2 .|
+ |. #2 2# #2 .|
+ ->|. #2 2# 49#1 .|<-
+ |. 92 2c 3b7 .|
+ |.................|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x5171 '共'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | a5 2a3 .|
+ | #5 2#2 .|
+ | #4 2#2 .|
+ | #4 2#2 .|
+ | 4############8 .|
+ | 1 #5 2#3 11 .|
+ | #4 1#2 .|
+ | #4 1#2 .|
+ | 1 #4 1#2 .|
+ |2##############5.|
+ | 321111111111231.|
+ | 1a6 a7 .|
+ | 3cc6 8#c3 .|
+ ->| 18#91 3c#7 .|<-
+ | 8#5 1ba .|
+ | 1 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x5173 '关'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 15 x 16
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |. 4 25 .|
+ |. 5#7 8#5 .|
+ |. 9#2 1#6 .|
+ |. 4445844ac4455 .|
+ |. c###########c .|
+ |. 1 5# .|
+ |. 5# .|
+ |.11 5# .|
+ |.7#############7.|
+ |.122111a#7112231.|
+ |. 3#9#2 .|
+ |. 2ca 8c3 .|
+ |. 5#b1 a#82 .|
+ ->|.37c#9 8##c8.|<-
+ |.9#c4 29c1.|
+ |. 4 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x5176 '其'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 15 x 16
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |. 21 .|
+ |. #4 #9 .|
+ |. 222#42222#6221.|
+ |.1#############5.|
+ |. #2 #5 .|
+ |. #######5 .|
+ |. #31111#5 .|
+ |. #31111#5 .|
+ |. #######5 .|
+ |. #2 #5 .|
+ |.1222#42222#6222.|
+ |.9cccccccccccccb.|
+ |. 35 45 .|
+ ->|. 8#b1 8#b3 .|<-
+ |. 5cc5 19#9 .|
+ |. 38 46 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x5177 '具'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 17 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 211111112 |
+ | 3#########2 |
+ | 2# #1 |
+ | 2#########1 |
+ | 1# #1 |
+ | 1# #1 |
+ | 1#########1 |
+ | 1# #1 |
+ | 1#########1 |
+ | 1# #1 |
+ |1####ccccccc####2|
+ | 6544554447544561|
+ | 3c#3 1##7 |
+ ->| 29#b3 29#c5 |<-
+ | 6#c6 4c#3 |
+ | 5 13 |
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x5185 '内'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 13 x 16
+ Advance: 17
+ Offset: 2 x -2
+ _________________
+ |.................|
+ |.. 351 ..|
+ |.. 6#1 ..|
+ |.. 6# ..|
+ |..122227#222223..|
+ |..5############..|
+ |..4# 7a 4#..|
+ |..4# 98 4#..|
+ |..4# c#3 4#..|
+ |..4# 4#7#5 4#..|
+ |..4# b8 6#7 4#..|
+ |..4# 9c1 8#74#..|
+ |..4#3c2 714#..|
+ |..4# 4#..|
+ ->|..4# 5#..|<-
+ |..5# 39#b..|
+ |..5b c92..|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x518d '再'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 17 x 15
+ Advance: 17
+ Offset: 0 x -1
+ _________________
+ |.................|
+ | 1 |
+ | a#############8 |
+ | 2222226#2222222 |
+ | 5# |
+ | ##########5 |
+ | #6226#222#4 |
+ | #4 5# #4 |
+ | ##########4 |
+ | #6226#222#4 |
+ | #4 5# #4 |
+ |8###############3|
+ |122#62222222#622 |
+ | #4 #4 |
+ ->| #4 59#4 |<-
+ | #5 4c9 |
+ |.................|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x5199 '写'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 14 x 15
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |.................|
+ |.4#############..|
+ |.3#42222222227#..|
+ |.4#3 85 6#..|
+ |. 1 #711111132..|
+ |. 1########c ..|
+ |. 2#3 1 ..|
+ |. 4#1 ..|
+ |. 6#########3..|
+ |. 122222224#2..|
+ |. 4#2..|
+ |.3######### 5# ..|
+ |. 211111112 8# ..|
+ ->|. 134ca ..|<-
+ |. c#c3 ..|
+ |. 33 ..|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x51b3 '决'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |. 194 |
+ |. 4 1#4 |
+ |.8#4 1#3 1 |
+ |.1c#34######## |
+ |. 3#c1223#415# |
+ |. 63 2#2 4# |
+ |. 2#1 5# |
+ |. 71 2#1 5# |
+ |. 1#7b#########b |
+ |. 5#22228cb22222 |
+ |. bb c6c4 |
+ |.3#6 7# 6#2 |
+ |.a#1 5#5 a#6 |
+ ->|.68 18#8 a##92|<-
+ |. 4##7 6#5 |
+ |. 42 |
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x51b5 '况'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 15
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |.................|
+ |. 222222221 |
+ |. a6 6#######6 |
+ |. 9#3 5# #5 |
+ |. cc15# #5 |
+ |. 46 5# #5 |
+ |. 5#22222#5 |
+ |. 6 6#######6 |
+ |. 5#311#43#2 1 |
+ |. cb 1#33#2 |
+ |. 6#4 3#13#2 |
+ |.1#b 8b 3#2 |
+ |.9#4 5#5 3#2 481|
+ ->|.19 29#8 3#75b#1|<-
+ |. 1a#7 1b##c4 |
+ |. 1 |
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x51c6 '准'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 15 x 15
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |.................|
+ |. 3c51a4 .|
+ |. 42 8c bb .|
+ |.1c#2 #81167221.|
+ |. 2#c16########9.|
+ |. 44 c# 1# .|
+ |. 8##112#212 .|
+ |. 4#5########3.|
+ |. 6831# 1# .|
+ |. cb 1#112#212 .|
+ |. 5#5 1########2.|
+ |. c# 1# 1# .|
+ |.5#8 1#113#2112.|
+ ->|.192 1#########.|<-
+ |. 2# .|
+ |. 17 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x51cd '凍'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |. 2b2 |
+ |. 1 2# |
+ |.2#6 b#########b |
+ |. 6#311112#11111 |
+ |. b52cccc#cccc |
+ |. 1# 1# 2# |
+ |. 1# 1# 2# |
+ |. 551#ccc#ccc# |
+ |. a81# 1# 2# |
+ |. 3#12#cc###cc# |
+ |. a8 b9#a6 |
+ |.5#2 8b2#2#5 |
+ |.9b 8c11# 3#7 |
+ ->|. 3 4bc1 1# 3##3|<-
+ |. 5a1 2# 16 |
+ |. 19 |
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x51e6 '処'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 17 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | a8 |
+ | #5 3####2 |
+ | 3# 2# #1 |
+ | 7####62# #1 |
+ | c4 #42# #1 |
+ | 5c #32# #1 |
+ | b#2 2#13c #1 |
+ |6#b5 4c 5b #1 |
+ | 279 79 7a #1 |
+ | 3# b5 a7 #11 |
+ | c6#12#3 #14a |
+ | 7#b ab #47# |
+ | 4#a 44 9##6 |
+ ->| 4#8cc731 11|<-
+ | 9#6 59c#######4|
+ | 33 234444 |
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x51fa '出'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 13 x 16
+ Advance: 17
+ Offset: 2 x -2
+ _________________
+ |.................|
+ |.. 6c1 ..|
+ |..24 5# 371..|
+ |..5#1 5# 5# ..|
+ |..4# 5# 4# ..|
+ |..4# 5# 4# ..|
+ |..4# 5# 4# ..|
+ |..5########### ..|
+ |..122226#2226c ..|
+ |..63 5# 31..|
+ |..#7 5# #5..|
+ |..c6 5# #4..|
+ |..c6 5# #4..|
+ |..c6 5# #4..|
+ ->|..############4..|<-
+ |..22222222222#5..|
+ |.. 73..|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x5206 '分'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |. 1 26 |
+ |. #a 3#3 |
+ |. 6#3 b9 |
+ |. 1#9 3#4 |
+ |. ac1 8#2 |
+ |. 8#4 b#4 |
+ |. 9#6 1c#a3|
+ |.a#69########38c1|
+ |. 3 126#2227#1 |
+ |. 6# 6# |
+ |. a9 6# |
+ |. 4#3 7# |
+ |. 3c9 9c |
+ ->|. 28#a 55#a |<-
+ |.3c#7 a#c3 |
+ |. 21 23 |
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x5207 '切'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 173 .|
+ | 1#7 343333442.|
+ | #6 a#######4.|
+ | #5 1 #7 3#3.|
+ | 1#97a3 #6 4#2.|
+ |5####ba3 #5 5#1.|
+ |253#5 1#4 6# .|
+ | #5 3#2 7# .|
+ | #5 5# 8# .|
+ | #5 94 8c 8c .|
+ | #7a#5 #8 9b .|
+ | 1###3 8#2 ba .|
+ | 8#c2 6#7 c9 .|
+ ->| 1a1 9#9 78#7 .|<-
+ | a#8 8#c2 .|
+ | 4 13 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x5217 '列'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 15 x 15
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |.................|
+ |. 22222222 2#6.|
+ |.2#c##ccc# 2#4.|
+ |. 5# 4#32#3.|
+ |. 9a111 3# 2#3.|
+ |. 1#####33# 2#3.|
+ |. 7c 3#13# 2#3.|
+ |. 2#5 5c 3# 2#3.|
+ |.1ca5a 99 3# 2#3.|
+ |.2814#a#5 3# 2#3.|
+ |. 2## 4# 2#3.|
+ |. 5#5 4#12#3.|
+ |. 6#7 2#3.|
+ ->|. 4b#6 3#3.|<-
+ |.19c3 3###2.|
+ |. 873 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x5219 '则'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 262.|
+ | 2111113 3#1.|
+ | 2####### 3#1.|
+ | 1#3 5# 5#23#1.|
+ | 1#34#25# 5# 3#1.|
+ | 1#34# 5# 5# 3#1.|
+ | 1#33# 5# 5# 3#1.|
+ | 1#33# 5# 5# 3#1.|
+ | 1#34# 5# 5# 3#1.|
+ | 1#34c 5# 5# 3#1.|
+ | 1#46b 6# 5# 3#1.|
+ | 21c7123 6# 3#1.|
+ | 8#2cc3 3#1.|
+ ->| 3b#3 1a#5 4#1.|<-
+ |1ab2 82 1### .|
+ | 562 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x521d '初'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 4#2 .|
+ | 1#9 .|
+ | 96 4#######9.|
+ | 1 11122#722b8.|
+ | c####6 #5 b7.|
+ | 4# #4 c7.|
+ | 1c6 7 1#3 c7.|
+ | a#3ab22#2 c6.|
+ | 1a###a 4#1 #6.|
+ |3cc4#4#7 6c #5.|
+ |5a12# 66 b9 #5.|
+ | 2# 3#4 1#4.|
+ | 2# 2ca 2#4.|
+ ->| 2# 3cc1 48c#1.|<-
+ | 2# 5b1 2#a4 .|
+ | 3# .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x5224 '判'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 2a3 4#5.|
+ | 1#2 3 3#2.|
+ | 2b21# 2#6 2 3#2.|
+ | ba1# 8b 2#13#2.|
+ | 3#4#2c2 2# 3#2.|
+ | 1233#222 1# 3#2.|
+ | 5#######31# 3#2.|
+ | 1# 1# 3#2.|
+ | 2113#21211# 3#2.|
+ | c#######71# 3#2.|
+ | 1 4# 1# 3#2.|
+ | 98 3# 3#2.|
+ | 3#1 3#2.|
+ ->| 5#4 25#2.|<-
+ |1a#4 ##c1.|
+ | 12 21 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x5229 '利'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 15 x 15
+ Advance: 17
+ Offset: 1 x -1
+ _________________
+ |.................|
+ |. 3 35 .|
+ |.2457a##6 6#1.|
+ |.2##b#531 31 5# .|
+ |. 1# #6 5# .|
+ |. 1# #5 5# .|
+ |.8#######2#5 5# .|
+ |.1217#122 #5 5# .|
+ |. c#56 #5 5# .|
+ |. 8b#5#3 #5 5# .|
+ |. 3#4# ab #5 5# .|
+ |.3#81# 21 #6 5# .|
+ |.9c 1# 5# .|
+ |. 2 2# 5# .|
+ ->|. 2# 69c# .|<-
+ |. 3#1 4#b6 .|
+ |.................|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x5230 '到'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 15 x 16
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |. 42.|
+ |. 65555556 1#8.|
+ |.1#cccccc# 31 #6.|
+ |. 6#3 c7 #6.|
+ |. 1#7 99 c5 #6.|
+ |. a8 3#5 c5 #6.|
+ |.2cc679a#c c5 #6.|
+ |. b98#833#3c5 #6.|
+ |. #4 c5 #6.|
+ |. 322#6221 c5 #6.|
+ |. #cc#ccc6 c6 #6.|
+ |. #4 #7 #6.|
+ |. #6357 #6.|
+ ->|.5ab#####c 3#6.|<-
+ |.5ba7632 c##4.|
+ |. 563 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x5236 '制'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 15 x 16
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |. 74 271.|
+ |. 35 c6 2# .|
+ |. a7 c6 12 2# .|
+ |.2#######33#22# .|
+ |.9a11c612 3#12# .|
+ |.33 c6 123#12# .|
+ |.#########4#12# .|
+ |.1 #5 13#12# .|
+ |. 211#61113#12# .|
+ |. #######73#12# .|
+ |. #2 #5 2b3#12# .|
+ |. #2 #5 2#4#32# .|
+ |. #2 #558# 2# .|
+ ->|. #2 #55#9 115# .|<-
+ |. 3 #6 1 cc5 .|
+ |. 1 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x5247 '則'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 491.|
+ | ######2 5# .|
+ | #3111#2 1 5# .|
+ | #2 #1 #6 5# .|
+ | ######1 #5 5# .|
+ | #2 #1 #5 5# .|
+ | #2 #1 #5 5# .|
+ | ######1 #5 5# .|
+ | #2 #1 #5 5# .|
+ | #2 #2 #5 5# .|
+ | ######2 #5 5# .|
+ | 211112 #6 5# .|
+ | 1b43a1 5# .|
+ ->| 1ba ac2 5# .|<-
+ |1bb a8 89c# .|
+ |171 7a83 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x524d '前'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 26 96 .|
+ | 2#8 3#5 .|
+ |233228a32ab22334.|
+ |7###############.|
+ |1211111111111112.|
+ | ###### 4#4 .|
+ | #2 2# 6#13#2 .|
+ | #2 1# 5# 3#2 .|
+ | ###### 5# 3#2 .|
+ | #2 1# 5# 3#2 .|
+ | #2 1# 5# 3#2 .|
+ | ###### 6# 3#2 .|
+ | #2 1# 6#13#2 .|
+ ->| #2 2# 4#2 .|<-
+ | 1#3 a#c 3c##1 .|
+ | 51 251 994 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x5272 '割'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 15 x 16
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |. 48 25 .|
+ |. 2#2 4#1.|
+ |.######### 4# .|
+ |.#2 13 2#2#24# .|
+ |.51 2# 151# 4# .|
+ |.3ccc#cc# 1# 4# .|
+ |. 2# 1# 4# .|
+ |.3ccc#ccc 1# 4# .|
+ |. 2# 1# 4# .|
+ |.########b1# 4# .|
+ |. 2# 2# 4# .|
+ |. ####### 5 4# .|
+ |. #1 2# 4# .|
+ ->|.1####### 459# .|<-
+ |.1# 2# 7##8 .|
+ |. 3 2 2 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x529b '力'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 15 x 16
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |. 96 .|
+ |. #9 .|
+ |. #6 .|
+ |. #5 1 .|
+ |. 9############3.|
+ |. 222224#32228#1.|
+ |. 4# 8# .|
+ |. 7c 8c .|
+ |. b9 9b .|
+ |. 3#4 aa .|
+ |. bb c9 .|
+ |. 7#4 #8 .|
+ |. 8#7 2#6 .|
+ ->|. 5c#7 28c#4 .|<-
+ |.2cc4 ##7 .|
+ |. 1 1 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x529f '功'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 1#9 .|
+ | #7 .|
+ | 4555562 #6 .|
+ | 8cc#cc4 #6 1 .|
+ | 4#1 7#c#####3.|
+ | 4#1 344#726#2.|
+ | 4#1 1#5 6#1.|
+ | 4#1 2#4 6# .|
+ | 4#1 4#2 7# .|
+ | 4#113 7# 8c .|
+ | 5#a#a c9 9b .|
+ |19###b725#3 aa .|
+ | cb72 2#a c8 .|
+ ->| 4cc1 8b#5 .|<-
+ | 4#c2 a#8 .|
+ | 3 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x52a0 '加'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 194 .|
+ | 1#4 .|
+ | #3 .|
+ | 232#4223 #####4.|
+ | 8######9 #622#4.|
+ | 1#2 b8 #5 #4.|
+ | 2#1 c7 #5 #4.|
+ | 3# #7 #5 #4.|
+ | 4# #6 #5 #4.|
+ | 7a #5 #5 #4.|
+ | a7 1#4 #5 #4.|
+ | 1#3 2#3 #622#4.|
+ | 8c 3#2 #####4.|
+ ->| 3#628b#1 #5 #4.|<-
+ |1#b ##8 a4 62.|
+ | 42 2 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x52a1 '务'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |. 383 |
+ |. bc1 |
+ |. 6########6 |
+ |. 2#cc2223ca |
+ |. 1cc 9a bc1 |
+ |. 4b3 babc2 |
+ |. 4a##82 |
+ |.2369##935c#c9761|
+ |.b##95 5c3 38b#a |
+ |.231 4# 11 |
+ |. 9##########1 |
+ |. 2222b92229# |
+ |. 7#3 ab |
+ ->|. 15b#5 2#8 |<-
+ |.1c##92 1###4 |
+ |. 351 562 |
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x52a8 '动'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 15 x 16
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |. 5a3 .|
+ |. 5#3 .|
+ |.1#cccc# 5#1 .|
+ |. 655556 5# .|
+ |. 3#######c.|
+ |.6555558428c22ab.|
+ |.#cc##c#1 7b aa.|
+ |. 1#5 8a b8.|
+ |. 5# 1 b8 b7.|
+ |. b8 c6 #5 c6.|
+ |. 3#2 6c 4#1 #5.|
+ |.1ba6a##5aa 1#3.|
+ |.7##a6278#4 3#2.|
+ ->|.161 6#9 25a# .|<-
+ |. 2b#a 1##6 .|
+ |. 47 2 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x52a9 '助'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 15 x 16
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |. 6c3 .|
+ |. 3#####2 5#1 .|
+ |. 2# 2#1 5# .|
+ |. 2# 2#1 5# .|
+ |. 2# 2#8######4.|
+ |. 2#####327b22c3.|
+ |. 2# 2#1 7b c3.|
+ |. 2# 2#1 7a #2.|
+ |. 2# 2#1 99 #2.|
+ |. 2#####1 b6 #1.|
+ |. 2# 2#1 #3 1# .|
+ |. 2# 2#35# 2# .|
+ |.24#68b#ab8 3# .|
+ ->|.a##a8539#1339c .|<-
+ |.22 19#6 5##7 .|
+ |. 67 41 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x52b9 '効'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 33 .|
+ | 6c 1#5 .|
+ | 321292221 #3 .|
+ | ########4 #2 .|
+ | a41a24#######.|
+ | 9#2 9c333#217b.|
+ |1a#3 ac 2# 7a.|
+ |4#41 434 4# 89.|
+ | 3#3 c8 6b 98.|
+ | 7c7c 98 a7.|
+ | a#5 #4 b6.|
+ | 1c#9 5# c6.|
+ | 4ca3#6 c8 #5.|
+ ->|18#8 669#1146#3.|<-
+ |2c6 a#4 1##8 .|
+ | 14 2 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x52d5 '動'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 15 x 16
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |. 255 #7 .|
+ |.5cc##cba1 #5 .|
+ |. 1 1# #4 .|
+ |.c#######7 #4 .|
+ |. 1# 8#####2.|
+ |.2####### #2 #2.|
+ |.1# 1# 2# #2 #2.|
+ |.1#bb#bb# 1#1 #2.|
+ |.2# 2# 2# 2# #1.|
+ |.2####### 5c #1.|
+ |. 2# 1 89 #1.|
+ |.5####### c5 1# .|
+ |. 2# 24# 2# .|
+ ->|.8aab###cc7259c .|<-
+ |.57431 ab 1#c5 .|
+ |. 172 1 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x5305 '包'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 15 x 16
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |. 31 .|
+ |. c#3 .|
+ |. 6#722222222 .|
+ |. 2##########8 .|
+ |. ba c7 .|
+ |. a#3 1 #6 .|
+ |.a#9####### #5 .|
+ |.136# 4# #5 .|
+ |. 6# 4# 1#4 .|
+ |. 6####### 3#2 .|
+ |. 6#2222226c# .|
+ |. 6# 3721 .|
+ |. 6# 7a.|
+ ->|. 6#3 2cc.|<-
+ |. 2###########3.|
+ |. 122222221 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x5316 '化'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 34 142 .|
+ | 9#5 3#5 .|
+ | #a 3#2 3 .|
+ | 4#3 3#2 #c .|
+ | b# 3#2 8#3 .|
+ | 5## 3#23#6 .|
+ | 2#b# 3#3c8 .|
+ |1cc5# 3#ca .|
+ |1a34# 4#b1 .|
+ | 4# 6##2 .|
+ | 4#5b#9#2 .|
+ | 4#2a33#2 1 .|
+ | 4# 3#2 c4.|
+ ->| 4# 3#5114#7.|<-
+ | 5#1 1c####c1.|
+ | 371 1111 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x533a '区'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 15 x 14
+ Advance: 17
+ Offset: 1 x -1
+ _________________
+ |.................|
+ |.................|
+ |.1############b .|
+ |. #844444444454 .|
+ |. #5 4 .|
+ |. #51b8 1#b .|
+ |. #5 7#9 7#3 .|
+ |. #5 3#a3#7 .|
+ |. #5 2c#a .|
+ |. #5 a#b1 .|
+ |. #5 9#4bc2 .|
+ |. #5 a#4 1cc2 .|
+ |. #52b#5 2#a .|
+ |. #5 75 41 .|
+ ->|. #6222222222232.|<-
+ |. #############7.|
+ |.................|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x533f '匿'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 15 x 16
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |. 1.|
+ |.3#############c.|
+ |.3#4223632275233.|
+ |.3#2435#333#533 .|
+ |.3#3##########a .|
+ |.3#21 3b151#2 .|
+ |.3#11 136b131 11.|
+ |.3#1###########9.|
+ |.3#11 a7 .|
+ |.3#1 a######3 .|
+ |.3#13cc#2222#2 .|
+ |.3#2b84#2222#2 .|
+ |.3#11 5######3 .|
+ ->|.3#3222222222223.|<-
+ |.3##############.|
+ |. 1.|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x5340 '區'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 14 x 14
+ Advance: 17
+ Offset: 2 x -1
+ _________________
+ |.................|
+ |.................|
+ |..#############1.|
+ |..#612211111222 .|
+ |..#5 2####### .|
+ |..#5 2# 1# .|
+ |..#5 2# 1# .|
+ |..#5 2####### .|
+ |..#5 1 .|
+ |..#52####2####2 .|
+ |..#52# 2#1# #2 .|
+ |..#52# 2#1# #2 .|
+ |..#52# 2#1#1 #2 .|
+ |..#52####2####2 .|
+ ->|..#6222222222222.|<-
+ |..#############a.|
+ |.................|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x5354 '協'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 15 x 17
+ Advance: 17
+ Offset: 1 x -3
+ _________________
+ |.................|
+ |. 2 2 .|
+ |. 2#2 3c .|
+ |. 1# ######### .|
+ |. 1# 21188113# .|
+ |.22#11 1c2 3# .|
+ |.####c 2b7 7c .|
+ |. 1# 69#6 b##5 .|
+ |. 1# 392 391 .|
+ |. 1# a6 1#1 .|
+ |. 1#7####b8####4.|
+ |. 1# c3 a 3c b3.|
+ |. 1# #1 c 4b b2.|
+ |. 1# 4b # 87 c1.|
+ ->|. 1# b615#1#2 #1.|<-
+ |. 2#8c1##6a94bc .|
+ |. 2#12 3a 72 .|
+ |. 1 .|
+ |.................|
+ -----------------
+
+Char 0x5355 '单'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 15 x 16
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |. 281 3a5 .|
+ |. 1cb ab1 .|
+ |. 3b2 3#1 .|
+ |. ########### .|
+ |. #2 4# 5# .|
+ |. #2 3# 4# .|
+ |. ########### .|
+ |. #2 3# 4# .|
+ |. #3115#1115# .|
+ |. ########### .|
+ |. 3# 1.|
+ |.##############b.|
+ |.4222225#2222233.|
+ ->|. 3# .|<-
+ |. 4# .|
+ |. 14 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x5361 '卡'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |. 5a2 |
+ |. 6# |
+ |. 6#11112 |
+ |. 6######3 |
+ |. 6#1 1 |
+ |. 6# |
+ |.3222227#2222222 |
+ |.c##############1|
+ |. 6# |
+ |. 6#96 |
+ |. 6#c#b2 |
+ |. 6# 7##5 |
+ |. 6# 3c6 |
+ ->|. 6# |<-
+ |. 6# |
+ |. 6c1 |
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x5370 '印'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 14 x 17
+ Advance: 17
+ Offset: 1 x -3
+ _________________
+ |.................|
+ |. 2 ..|
+ |. 137a#82443442..|
+ |. ##b8645#####5..|
+ |. #5 4# #4..|
+ |. #5 4# #4..|
+ |. #5 4# #4..|
+ |. #####34# #4..|
+ |. #6222 4# #4..|
+ |. #5 4# #4..|
+ |. #5 1 4# #4..|
+ |. #5 6#14# #4..|
+ |. #9c#7 4#189#4..|
+ |.5##81 4# a#c2..|
+ ->|.4c3 4# 11 ..|<-
+ |. 4# ..|
+ |. 5# ..|
+ |. 1 ..|
+ |.................|
+ -----------------
+
+Char 0x5373 '即'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 14 x 15
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |.................|
+ |. #cccc# 5#####..|
+ |. #3226# 4#226#..|
+ |. #2 5# 4# 5#..|
+ |. ###### 4# 5#..|
+ |. #2 5# 4# 5#..|
+ |. #2 5# 4# 5#..|
+ |. ###### 4# 5#..|
+ |. #31522 4# 5#..|
+ |. #2 ca 4# 5#..|
+ |. #219#a 4# 16#..|
+ |. #9#85#94#1##a..|
+ |.6#a2 734# 54 ..|
+ ->|.16 4# ..|<-
+ |. 4# ..|
+ |. 1 ..|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x539f '原'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 1 .|
+ | 5############5.|
+ | 5#111189111221.|
+ | 5# 111a61111 .|
+ | 5# 5########2 .|
+ | 5# 4# #2 .|
+ | 5# 4########2 .|
+ | 6c 4# #2 .|
+ | 7b 4# #2 .|
+ | 8a 5########2 .|
+ | a8 1111#6111 .|
+ | #5 a6 #52b5 .|
+ | 5#1 8#4 #5 9#6 .|
+ ->| ca 8#6 #5 9#5.|<-
+ |2a3 56 3c#4 6 .|
+ | 74 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x53c2 '参'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 8#2 .|
+ | 7c4 2#8 .|
+ | 39a1 5#a .|
+ | c#########b .|
+ | 3219b 55 .|
+ | 32112#611111232.|
+ | ##############8.|
+ | 1 7#2 4 7b1 .|
+ | 19#3 8#6 9c4 .|
+ | 6cc25cc42b47#c8.|
+ |1b85c#815#b23394.|
+ | 714a#8 7#7 .|
+ | 38c#a319#7 .|
+ ->| a7217#c4 .|<-
+ | 2458b#c71 .|
+ | 2##a73 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x53c3 '參'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 17 x 17
+ Advance: 17
+ Offset: 0 x -3
+ _________________
+ |.................|
+ | a7 |
+ | 1bb3 73 |
+ | 4c6 6#6 |
+ | ##ccbbaa#4 |
+ | 34 3 55 |
+ | b7554#51#541 |
+ | 97 5ccbba4 aa |
+ | 6#cbb#9 a#cba#7 |
+ | 2b8 51b8 31 |
+ | 39#51ac31ac62 |
+ |2c#914c8 8a 6c#b1|
+ | 321bb31ab363 53 |
+ | 317#718#8 |
+ ->| 5#923bb3 |<-
+ | 35b#6 |
+ | a##b5 |
+ | 341 |
+ |.................|
+ -----------------
+
+Char 0x53cd '反'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 15 x 14
+ Advance: 17
+ Offset: 1 x -1
+ _________________
+ |.................|
+ |.................|
+ |. 133334578b#6 .|
+ |. 5####ccba977 .|
+ |. 5# .|
+ |. 5# .|
+ |. 5##########2 .|
+ |. 5#2892222cb .|
+ |. 5# 6# 2#5 .|
+ |. 7c #6 9b .|
+ |. 9a 6#13#3 .|
+ |. c8 bac8 .|
+ |. 3#4 5##3 .|
+ |. ac 4a#9a#941 .|
+ ->|.8#79c#a3 4b##b.|<-
+ |.27 693 384.|
+ |.................|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x53d1 '发'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 8b1 1 .|
+ | 8b ba 2#9 .|
+ | c5 #6 6#7 .|
+ | 7b 3#3 61 .|
+ | 5#############5.|
+ | 162 b7 .|
+ | 3#3 11 .|
+ | a#######8 .|
+ | 4#ba1117#2 .|
+ | ca3#2 c8 .|
+ | a#2 aa 8c1 .|
+ | 9#4 2#a#3 .|
+ |1a#6 4c#a1 .|
+ ->| 86 37c#94b#a743.|<-
+ | 2##c82 49##7.|
+ | 33 4 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x53d6 '取'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |.11111111 |
+ |.b#######3222222 |
+ |.12#113#3b#####6 |
+ |. 2# 2#16c 1#3 |
+ |. 2#####15# 4# |
+ |. 2#114#12#2 8a |
+ |. 2# 2#1 #4 c6 |
+ |. 2#114#1 a72#1 |
+ |. 2#####1 6b8a |
+ |. 2# 2#1 1##4 |
+ |. 2# 3#62 b#1 |
+ |.36#9b##c35#cb1 |
+ |.a#c966#13#73##4 |
+ ->|.32 3#6#a 3##6|<-
+ |. 4#5c1 38 |
+ |. 3911 |
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x53d7 '受'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 15 x 16
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |. 13584 .|
+ |.2cbbbbc#####cb .|
+ |. 576554521 4 .|
+ |. 3c2 8#1 1#a .|
+ |. c9 1#5 8b .|
+ |.1115511313#3111.|
+ |.6#############6.|
+ |.5# #6.|
+ |.6# 1 #7.|
+ |. 1 ########7 21.|
+ |. 8a 9c .|
+ |. 1#6 5#4 .|
+ |. 4#8#7 .|
+ ->|. 37c##631 .|<-
+ |.6ac##c748c####9.|
+ |.1b851 25792.|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x53e3 '口'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 13 x 14
+ Advance: 17
+ Offset: 2 x -1
+ _________________
+ |.................|
+ |.................|
+ |..1211111111121..|
+ |..4###########7..|
+ |..3#644444444#6..|
+ |..3#3 #6..|
+ |..3#3 #6..|
+ |..3#3 #6..|
+ |..3#3 #6..|
+ |..3#3 #6..|
+ |..3#3 #6..|
+ |..3#3 #6..|
+ |..3#633333333#6..|
+ |..3###########6..|
+ ->|..3#522222222#7..|<-
+ |..392 63..|
+ |.................|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x53e4 '古'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 472 .|
+ | 7#1 .|
+ | 7# .|
+ | 2211118#1111122.|
+ |3##############a.|
+ | 1 7# 1.|
+ | 7# .|
+ | 1 7# .|
+ | ##########8 .|
+ | #72222222#7 .|
+ | #6 #7 .|
+ | #6 #7 .|
+ | #6 #7 .|
+ ->| ##########7 .|<-
+ | #72222222#7 .|
+ | 84 85 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x53e6 '另'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 15 x 14
+ Advance: 17
+ Offset: 1 x -1
+ _________________
+ |.................|
+ |.................|
+ |. 5########## .|
+ |. 4#22222226# .|
+ |. 4# 4# .|
+ |. 4# 5# .|
+ |. 5########## .|
+ |. 1116b41111 .|
+ |. 1 5# .|
+ |. #############1.|
+ |. 32222aa22226# .|
+ |. 2#5 5# .|
+ |. 1bb 7c .|
+ |. 5cb1 aa .|
+ ->|.3a##7 5c##6 .|<-
+ |. 961 a84 .|
+ |.................|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x53ea '只'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 15 x 15
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |.................|
+ |. 12222222221 .|
+ |. 5#########5 .|
+ |. 5# #5 .|
+ |. 5# #5 .|
+ |. 5# #5 .|
+ |. 5# #5 .|
+ |. 5# #5 .|
+ |. 5#########5 .|
+ |. 12222222221 .|
+ |. 781 66 .|
+ |. 5#91 7#8 .|
+ |. 5#8 4#a1 .|
+ ->|.18#7 3#c2.|<-
+ |.a#6 3#8.|
+ |. 3 2 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x53ef '可'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 17 x 15
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ |.................|
+ |3###############3|
+ |154444444447#5451|
+ | 5#1 |
+ | 222222 5#1 |
+ | ######2 5#1 |
+ | #6 4#2 5#1 |
+ | #6 4#2 5#1 |
+ | #6 4#2 5#1 |
+ | ######2 5#1 |
+ | #8226#2 5#1 |
+ | #7 381 5#1 |
+ | 42 5#1 |
+ ->| 47a#1 |<-
+ | 1##a |
+ | 1 |
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x53f0 '台'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 15 x 16
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |. 52 .|
+ |. 3#c1 .|
+ |. cc1 1 .|
+ |. 9c2 9#2 .|
+ |. 8c2 2c#3 .|
+ |. 19b1 13c#3 .|
+ |.3##bbc########2.|
+ |.1ccb987653213#4.|
+ |. .|
+ |. ########### .|
+ |. #622222227# .|
+ |. #5 6# .|
+ |. #5 6# .|
+ ->|. ########### .|<-
+ |. #722222227# .|
+ |. 52 13 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x53f3 '右'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 17 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 21 |
+ | a#1 |
+ | #9 |
+ | 221114#61111112 |
+ | ###############2|
+ | #8 |
+ | 7#1 |
+ | 2#71111122 |
+ | c######### |
+ | a##1 5# |
+ | 1ac6# 5# |
+ |3cc24# 5# |
+ | 62 4# 5# |
+ ->| 4######### |<-
+ | 4#2222226# |
+ | 27 37 |
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x53f7 '号'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 15 x 15
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |.................|
+ |. 5#########5 .|
+ |. 4#1111111#4 .|
+ |. 4# #4 .|
+ |. 4#2222222#4 .|
+ |. 5#########5 .|
+ |.1 .|
+ |.##############c.|
+ |.4436#5333333444.|
+ |. 5# .|
+ |. 8########6 .|
+ |. 22222224#5 .|
+ |. 4#3 .|
+ ->|. 223a#2 .|<-
+ |. 5###7 .|
+ |. 641 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x5408 '合'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | c8 .|
+ | 7#c1 .|
+ | 3#47c1 .|
+ | 2#7 9c3 .|
+ | 4#8 9#81 .|
+ | 18#8 7##a5.|
+ |3##58#######29#4.|
+ | 62 12111122 1 .|
+ | 1 .|
+ | ########## .|
+ | #71111118# .|
+ | #6 7# .|
+ | #6 7# .|
+ ->| ########## .|<-
+ | #71111118# .|
+ | 73 35 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x540c '同'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 14 x 15
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |.................|
+ |.1##ccccccccc##..|
+ |. #85555555558#..|
+ |. #5 5#..|
+ |. #5########35#..|
+ |. #522111122 5#..|
+ |. #5 5#..|
+ |. #5 ######2 5#..|
+ |. #5 #3222#2 5#..|
+ |. #5 #2 #2 5#..|
+ |. #5 #3111#2 5#..|
+ |. #5 ######2 5#..|
+ |. #5 5#..|
+ ->|. #5 6#..|<-
+ |. #5 9##a..|
+ |. 73 386 ..|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x540d '名'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 14 x 16
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |. 7#3 ..|
+ |. #9 ..|
+ |. 8########1..|
+ |. 4#522227#5 ..|
+ |. 3#8 2#9 ..|
+ |. 6#a2c9 1cb ..|
+ |. 49 5#acc2 ..|
+ |. 9#b1 ..|
+ |. 4b#7 ..|
+ |. 16c#########7..|
+ |.b##9#6222222#6..|
+ |.351 #5 #5..|
+ |. #5 #5..|
+ ->|. #########5..|<-
+ |. #6111112#6..|
+ |. 52 52..|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x540e '后'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 15
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ |.................|
+ | 22223467ac#5 .|
+ | #####cbaa988 .|
+ | #6 .|
+ | #5 1.|
+ | #############.|
+ | #722222222223.|
+ | #5 .|
+ | 1#45########6 .|
+ | 3#25#111111#6 .|
+ | 6# 5# #6 .|
+ | a9 5# #6 .|
+ | 3#5 5# #6 .|
+ ->| bc 5########6 .|<-
+ |174 6#111111#6 .|
+ | 25 52 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x5411 '向'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 13 x 16
+ Advance: 17
+ Offset: 2 x -2
+ _________________
+ |.................|
+ |.. 83 ..|
+ |.. 3#6 ..|
+ |.. 8b ..|
+ |..c############..|
+ |..cc2222222228#..|
+ |..cb 7#..|
+ |..cb 222221 7#..|
+ |..cb 2#####3 7#..|
+ |..cb 2# 1#2 7#..|
+ |..cb 2# 1#2 7#..|
+ |..cb 2#113#2 7#..|
+ |..cb 2#####3 7#..|
+ |..cb 7#..|
+ ->|..cb 34a#..|<-
+ |..#c 6##9..|
+ |..44 131 ..|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x5426 '否'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 15
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |.................|
+ |.1############## |
+ |. 3221119#511223 |
+ |. 6#7 |
+ |. 7##5 82 |
+ |. 2a#5#55##92 |
+ |. 28#b2 #5 17##8 |
+ |.a##7 #5 2a#5|
+ |.381 #5 4 |
+ |. ########## |
+ |. #62222226# |
+ |. #5 5# |
+ |. #5 5# |
+ ->|. ########## |<-
+ |. #72222226# |
+ |. 52 25 |
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x542b '含'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 15 x 16
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |. 25 .|
+ |. a#6 .|
+ |. 8c7c1 .|
+ |. 6#2 8c3 .|
+ |. 7c24b 8#92 .|
+ |. 1ac2 2#4 5##b7.|
+ |.6#c3212421238#9.|
+ |.8a3########4 11.|
+ |. 21 4c4 .|
+ |. 5c3 .|
+ |. 6#########6 .|
+ |. 5#2222222#5 .|
+ |. 5# #5 .|
+ ->|. 5#2222222#5 .|<-
+ |. 5#########5 .|
+ |. 5c a5 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x542f '启'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 15 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 6c2 ..|
+ | 1#7 ..|
+ | ###########6..|
+ | c522222222#6..|
+ | b3 #6..|
+ | b3 #6..|
+ | b##########6..|
+ | c41111111121..|
+ | #2 ..|
+ | 1# #########7..|
+ | 5b #7222222#6..|
+ | a7 #6 #6..|
+ | 3#3 #6 #6..|
+ ->|1cb #########6..|<-
+ |2b3 #7222222#6..|
+ | 84 63..|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x5473 '味'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 15
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |.................|
+ |. #3 |
+ |.122221 #2 |
+ |.6####5c######c |
+ |.5# #4322#3112 |
+ |.4# #4 #2 |
+ |.4# #5211#31131 |
+ |.4# #8########3 |
+ |.4# #511###1 1 |
+ |.4#22#4 69#a7 |
+ |.4####51#4#5#1 |
+ |.5# #5ab #2bb1 |
+ |.6# 9#2 #22#c4 |
+ ->|.12 a#5 #2 3#91|<-
+ |. 15 #2 1 |
+ |. 71 |
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x548c '和'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 15 x 16
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |. 1 .|
+ |.14569c#4 .|
+ |. cba#421 21122 .|
+ |. 2# 1#####1.|
+ |. 2# 1# #1.|
+ |.7######a1# #1.|
+ |.122a#2221# #1.|
+ |. 1##22 1# #1.|
+ |. 99#8b 1# #1.|
+ |. 4#3#1#61# #1.|
+ |.2#72# 751# 1#1.|
+ |.ab 2# 1#####1.|
+ |.12 2# 2# #2.|
+ ->|. 2# 1a 71.|<-
+ |. 3# .|
+ |. 1 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x54c1 '品'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 15 x 15
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |.................|
+ |. ######### .|
+ |. #6222227# .|
+ |. #5 5# .|
+ |. #5 5# .|
+ |. ######### .|
+ |. 211111112 .|
+ |. 1 1 .|
+ |.4#####6 ######5.|
+ |.4#211#5 #6 1#5.|
+ |.4#1 #5 #5 #5.|
+ |.4#1 #5 #5 #5.|
+ |.4#322#5 #7222#5.|
+ ->|.4#####5 ######5.|<-
+ |.4#2 #5 #6 #5.|
+ |.251 31 52 21.|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x54cd '响'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |. 56 |
+ |. b7 |
+ |.2#### #3 |
+ |.2#13#1#########1|
+ |.2# 2# #3111113# |
+ |.2# 2# #2 2# |
+ |.2# 2# #21###32# |
+ |.2# 2# #21#2#12# |
+ |.2# 2# #21# #12# |
+ |.2# 2# #21# #12# |
+ |.2#13# #21#1#12# |
+ |.2#### #22###32# |
+ |.2# 2# #2 2# |
+ ->|.3#114 #2 2# |<-
+ |.14 #2 7a# |
+ |. 82 472 |
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x554f '問'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 15 x 16
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |. 1 1 .|
+ |.2#####2 ######2.|
+ |.2# #2 #2 #1.|
+ |.1#####1 ######1.|
+ |.1# #1 #2 #1.|
+ |.1# #2 #2 1#1.|
+ |.1#####3 ######1.|
+ |.1# 1 #1.|
+ |.1# ######3 #1.|
+ |.1# #2 #2 #1.|
+ |.1# #2 #2 #1.|
+ |.1# #2 #2 #1.|
+ |.2# ######3 #1.|
+ ->|.2# 134#1.|<-
+ |.2# 1##c .|
+ |.15 33 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x555f '啟'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 17 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 69 4a |
+ | 5#2 6a |
+ | ####### 86 |
+ | #2 2# b#####1|
+ | #1 2#1#22#62 |
+ | #31113#59 #3 |
+ | #######ab11#2 |
+ | 1# 3#c43# |
+ | 2# 111134865b |
+ | 3c2##### 5988 |
+ | 6a1# 2# 2#c4 |
+ | a71# 2# ac |
+ |2#31# 3# 1c#6 |
+ ->|7c 2#####3c94#92 |<-
+ | 4# 3#9 3c7 |
+ | 12 4 1 |
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x55ae '單'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 15
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ |.................|
+ | #####41#####2 .|
+ | 2#2 #22# #2 .|
+ | #####31#####2 .|
+ | 1 1 .|
+ | 4##########2 .|
+ | 4# 1# #2 .|
+ | 4##########2 .|
+ | 4# 1# #2 .|
+ | 4# 2# #2 .|
+ | 5##########3 .|
+ | 11 2# 1 1.|
+ |8###############.|
+ ->| 2# .|<-
+ | 3# .|
+ | 6a .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x55ce '嗎'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 15
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |.................|
+ |. 1111 ######### |
+ |.2#### #311#3112 |
+ |.2# 2# #2 #2 |
+ |.2# 2# ########2 |
+ |.2# 2# #2 #2 |
+ |.2# 2# ########1 |
+ |.2# 2# #2 #2 |
+ |.2# 2# #########1|
+ |.2# 2# 51111114# |
+ |.2#### 1 2 4# |
+ |.2# 2#4a7a46b55c |
+ |.2a 1657b196b5c |
+ ->|. a17a 6137b |<-
+ |. 3 56ca |
+ |. 7c92 |
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x5617 '嘗' top
+ Font: #12 FZHeiTi (17)
+ Bitmap: 15 x 17
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |. 11 .|
+ |. 59 4# 58 .|
+ |. b9 4# 1c4 .|
+ |.##############2.|
+ |.#5 #2.|
+ |.#52#bbbbbbb# c2.|
+ |. 1# 2# .|
+ |. 7cbbbbbc##1 .|
+ |. 1#899ac####8 .|
+ |. #643321 82 .|
+ |. a#ccccccc#c1 .|
+ |. 1 .|
+ |. #cccccccc#2 .|
+ |. #bbbbbbbb#2 .|
+ ->|. #2 #2 .|<-
+ |. #cccccccc#2 .|
+ |. c1 #2 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x5668 '器'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 11111 111111 .|
+ | 1#####2 #####4 .|
+ | 1# #2 #2 #3 .|
+ | 1#1 #2 #311#3 .|
+ | 1#####74#####4 .|
+ | 1 c9 3c2 1 .|
+ | ##############4.|
+ | 21114b9ab41112 .|
+ |3679c#6 6c#b996.|
+ |2cb84 1147ab4.|
+ | #####22#####2 .|
+ | #2 #11# #2 .|
+ | #2 #11# #2 .|
+ ->| #####11#####2 .|<-
+ | #2 1#22#1 2#2 .|
+ | 2 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x56de '回'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 13 x 16
+ Advance: 17
+ Offset: 2 x -2
+ _________________
+ |.................|
+ |.. 1..|
+ |..#############..|
+ |..#62222222227c..|
+ |..#5 6c..|
+ |..#5 11 1 6c..|
+ |..#5 ######2 6c..|
+ |..#5 #2 #2 6c..|
+ |..#5 #2 #2 6c..|
+ |..#5 #2 #2 6c..|
+ |..#5 ######2 6c..|
+ |..#5 221122 6c..|
+ |..#5 6c..|
+ |..#62222222227c..|
+ ->|..############c..|<-
+ |..#5 6c..|
+ |..52 25..|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x56e0 '因'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 14 x 15
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |.................|
+ |.1#############..|
+ |. #94445964449#..|
+ |. #6 #3 6#..|
+ |. #6 1 #1 6c..|
+ |. #65#######c6c..|
+ |. #6 1 3c11126c..|
+ |. #6 6#3 6c..|
+ |. #6 c9#6 6c..|
+ |. #6 9c 4#8 6c..|
+ |. #62a#3 5#96c..|
+ |. #63c5 516c..|
+ |. #71211111117#..|
+ ->|. #############..|<-
+ |. #6 7#..|
+ |. 52 23..|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x56fa '固'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 13 x 15
+ Advance: 17
+ Offset: 2 x -2
+ _________________
+ |.................|
+ |.................|
+ |..#############..|
+ |..#62222222226#..|
+ |..#5 2c2 5#..|
+ |..#51113#21115#..|
+ |..#5a#######85#..|
+ |..#5 2# 5#..|
+ |..#5 213#12 5#..|
+ |..#5 ######2 5#..|
+ |..#5 #2 #2 5#..|
+ |..#5 #3222#2 5#..|
+ |..#5 ######2 5#..|
+ |..#5 5#..|
+ ->|..#############..|<-
+ |..#71111111116#..|
+ |..42 13..|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x56fe '图'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 15 x 15
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |.................|
+ |.2#############2.|
+ |.1#52229422225#1.|
+ |.1#3 6#4 1 4#1.|
+ |.1#3 2#####c14#1.|
+ |.1#32cc6 3c3 4#1.|
+ |.1#356 aac3 4#1.|
+ |.1#4147cb#a635#1.|
+ |.1#5##98438##5#1.|
+ |.1#32 7b#7 34#1.|
+ |.1#3 b8442 4#1.|
+ |.1#3 5a#c7 4#1.|
+ |.1#3 176 4#1.|
+ ->|.1#############1.|<-
+ |.2#51111111116#1.|
+ |. 1 1 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x5716 '圖'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 15 x 16
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |. 1 .|
+ |.1#############1.|
+ |.1# ccccccc1 #1.|
+ |.1# #2 # #1.|
+ |.1# #cbbbb#1 #1.|
+ |.1# 1# #1.|
+ |.1#4cbbc#bbbc7#1.|
+ |.1# 2cbc#bbbb #1.|
+ |.1# 1# 1# #1.|
+ |.1# 1#caa# 1# #1.|
+ |.1# 1#caa# 1# #1.|
+ |.1# 1# 1# #1.|
+ |.1# 2#cccccc# #1.|
+ ->|.1#############1.|<-
+ |.2# #2.|
+ |. 1 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x5728 '在'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 581 .|
+ | ab .|
+ | 233224#52222223.|
+ | 8##############.|
+ | 12112#511111122.|
+ | 99 2c2 .|
+ | 27c1 1# .|
+ | 6#3 1# .|
+ | 6##18########1.|
+ |1a#7#13545#5445 .|
+ |4#43#1 1#1 .|
+ | 1 3#1 1#1 .|
+ | 3#1 1#1 .|
+ ->| 3#22223#31222.|<-
+ | 3#7#########b.|
+ | 4#2 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x5730 '地'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 17 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 1 3#2 |
+ | 2#5 2# |
+ | 1#1 52 2# |
+ | 1#1 #3 2# 3 |
+ | 1#11 #2 2#5a# |
+ |2####c #78b#aa# |
+ | 11#15c#c86# 6c |
+ | 1#139#2 2# 7b |
+ | 1#1 #2 2# 8b |
+ | 1#1 #2 2#5ca |
+ | 1#131#2 2#5c4 |
+ | 1#b#2#2 3#1 1 |
+ |19##a3 #2 2 5a1|
+ ->| #93 #4 1ac |<-
+ | 1 b#######5 |
+ | 111111 |
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x5740 '址'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 15
+ Advance: 17
+ Offset: 0 x -1
+ _________________
+ |.................|
+ | 2 .|
+ | 83 2#2 .|
+ | #3 1# .|
+ | #1 24 1# .|
+ | #1 4#31# .|
+ | 21#3213# 1#2221.|
+ |3#####73# 1####5.|
+ | #1 3# 1# .|
+ | #1 3# 1# .|
+ | #1 3# 1# .|
+ | #1 13# 1# .|
+ | #8c73# 1# .|
+ |17a#c613# 1# .|
+ ->|1#93 125#23#2222.|<-
+ | 5#########9.|
+ |.................|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x574f '坏'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 72 .|
+ | #2 5555555552.|
+ | #2 ##cc#####6.|
+ | #2 a9 .|
+ |5#####7 #5 .|
+ |122#311 4#4 .|
+ | #2 a#41 .|
+ | #2 2##6#7 .|
+ | #2 1 98#49#2 .|
+ | #8c54#1#41#b .|
+ |259#c73#6 #4 7#5.|
+ |3#a4 2ca #4 1c4.|
+ | 2 2#c1 #4 .|
+ ->| 21 #4 .|<-
+ | #4 .|
+ | 1b4 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x578b '型'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 15
+ Advance: 17
+ Offset: 1 x -1
+ _________________
+ |.................|
+ |. 63 |
+ |.1#cccccca 1#5 |
+ |. 56#45#642#3 #4 |
+ |. 2# 1#2 2#2 #4 |
+ |.1 2# 1#2 2#1 #4 |
+ |.b########4#1 #4 |
+ |.1 6b 1#3 2#1 #4 |
+ |. b7 1#2 2c2 #4 |
+ |.1ac1 1#3 57#4 |
+ |.7c2 194 9#a |
+ |. 132222#622341 |
+ |. cbbbb#cbbbc4 |
+ |. #4 |
+ ->|.4555555#8555555 |<-
+ |.9ccccccccccccc#1|
+ |.................|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x57df '域'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |. 7212 |
+ |. 2c2 #49#2 |
+ |. 2# #3181 |
+ |. 2# 8##########2|
+ |. 2# 111112#3112 |
+ |.23#11 #3 |
+ |.####9####2#43#5 |
+ |. 2# #1 #1b64#2 |
+ |. 2# #1 #1986c |
+ |. 2# #1 #26a98 |
+ |. 2# ####33##4 |
+ |. 2#77 1 #c |
+ |. 7#b3258bb1cb 2 |
+ ->|.bc5 b##b85bb#899|<-
+ |.21 241 4cc15##5|
+ |. 4a2 48 |
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x57f7 '執'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 17 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 41 31 |
+ | #4 #3 |
+ | 111#311 #1 |
+ | a#####8 #1 |
+ | #2 9#####3 |
+ |7#######32#32#1 |
+ |11421572 #11#1 |
+ | a9 99 78# 2# |
+ | 14b2#313## 2# |
+ | b#####7 5#73# |
+ | #2 8aa5# |
+ |3#######2#2 2# |
+ | 111#312a8 #272|
+ ->| #21ab a8c4|<-
+ | #3bb1 3## |
+ | 71 12 |
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x57fa '基'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 15 x 16
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |. 181 92 .|
+ |. 2#1 #311 .|
+ |.6#############5.|
+ |. 2# #2 .|
+ |. 2#######2 .|
+ |. 2# #2 .|
+ |. 2#######2 .|
+ |.1 2# #2 1.|
+ |.a#############b.|
+ |.1 1c5 1c2 1.|
+ |. 1b7 1b2 4c2 .|
+ |. 3c8222#4236#5 .|
+ |.9#6 acc#ccc 5#a.|
+ ->|.131 #1 31.|<-
+ |. 2###########8 .|
+ |. 1 1 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x5831 '報' top
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 17
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ | 1 .|
+ | 2#2 .|
+ | 1# 2#####3 .|
+ | 7#####a1#222#2 .|
+ | 2# 1# 1# .|
+ | 2# 12# 25c .|
+ |7#######6# 6#6 .|
+ | 181 4712# .|
+ | 79 88 1#####7 .|
+ | 181b1 1#57 a4 .|
+ | 7#####a1#2a #1 .|
+ | 2# 1# b6a .|
+ |4#######3# 5#5 .|
+ | 113#2112# 5#8 .|
+ ->| 2# 1#5#5bc5.|<-
+ | 2#1 1#b6 96.|
+ | 18 19 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x5834 '場'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 1c2 1 1 .|
+ | 1# ######## .|
+ | 1# #2 2# .|
+ | 1# ######## .|
+ |5#####4#2 2# .|
+ | 12#211######## .|
+ | 1# .|
+ | 1# 8##########.|
+ | 1# 1 7b1 1.|
+ | 1#a73########4.|
+ | 29#76c34#35#1b3.|
+ |5#a24b23#6 c7 c2.|
+ |16 17#5 ab # .|
+ ->| aa22bb2 4# .|<-
+ | 29#8 4##8 .|
+ | 52 64 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x586b '填'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 17 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 272 #4 |
+ | 2#2 3211#31122 |
+ | 2# #########b |
+ | 2# 11 #2 |
+ | 12# 1 #######3 |
+ |4####c #31111#2 |
+ | 23#12 #######2 |
+ | 2# #2 #2 |
+ | 2# #######2 |
+ | 2# #2 #2 |
+ | 2#25 #######2 |
+ |39cc77##########2|
+ |2b5 124c525b323 |
+ ->| 5##7 4cc5 |<-
+ | a#81 9#6 |
+ | 22 4 |
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x589e '增'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 13 6 56 .|
+ | 3#2 77 b8 .|
+ | 2# 113415#212.|
+ | 2# 3#########.|
+ | 2# 1#1 #1 2#.|
+ |3#####1#a1#15c2#.|
+ | 12# 11#62#1c52#.|
+ | 2# 1#11#2213#.|
+ | 2# 3#########.|
+ | 2# 1 .|
+ | 2# ######## .|
+ | 2#8c2#2 2# .|
+ |2b##94 #cccccc# .|
+ ->| 951 #2 2# .|<-
+ | ##cccc## .|
+ | b2 2b .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x58ca '壊' top
+ Font: #12 FZHeiTi (17)
+ Bitmap: 17 x 17
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ | 1 21 |
+ | #5 bb |
+ | #2 6######### |
+ | #2 11 #1 11 |
+ | #2 1########2 |
+ | 31#331# # # #1 |
+ | c####2# # # #1 |
+ | #2 1########2 |
+ | #2 93 |
+ | #2 1 74 1 |
+ | #2 5######### |
+ | #571 8b21 31 |
+ |28c#a6 3b# 896b2 |
+ |1c71 4a#a# 1cc |
+ ->| 1832#692cb61|<-
+ | 9#a3 8b |
+ | 34 |
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x58d3 '壓'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 21111111111111.|
+ | #############8.|
+ | #2999992 a43 .|
+ | #1#1 #1 #3c .|
+ | #1#aaa#112c 91.|
+ | #1b988a2#####6.|
+ | 1#1bbbbb2 4c4 .|
+ | 3b1# #1 859 .|
+ | 691#bbb#1 # 93 .|
+ | 971#bbb#17a 4b1.|
+ |1#31# 5#4#4 b4.|
+ | 2 13 1a5 1 .|
+ | 3###########6 .|
+ ->| #2 .|<-
+ | 1#############a.|
+ | 1 11.|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x58de '壞'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 61 69 .|
+ | 1#21 4#8 .|
+ | #1c##########.|
+ | #1 ccccccccc .|
+ | #23# # # # .|
+ |4####9# # # # .|
+ | #1 #cc#cc#c# .|
+ | #1 474 #1185 .|
+ | #1 25b1#1871 .|
+ | #2469c2#19b6 .|
+ | 5##8744##3 47 .|
+ |4##82 6#46c5c1 .|
+ |16 4b9# 1a#5 .|
+ ->| bc4 c7a a#93.|<-
+ | 2 2#a2 6#4.|
+ | 4 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x58f2 '売'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |. 3#4 |
+ |. 2#3 1 |
+ |.9#############b |
+ |.1111113#4111122 |
+ |. 2#2 |
+ |. 9###########1 |
+ |. 221111111112 |
+ |.2#############8 |
+ |.2#11111111111#8 |
+ |.3#1 49 193 #8 |
+ |. 5# 1#4 |
+ |. 6c 1#3 |
+ |. aa 2#3 62 |
+ ->|. 139#4 2#512c#1|<-
+ |.4##b4 1#####7 |
+ |. 42 111 |
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x5904 '处'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 15 x 15
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |.................|
+ |. ac 6#2 .|
+ |. #7 6# .|
+ |. 3#4222 6# .|
+ |. 8####a 6#3 .|
+ |. #b 98 6##6 .|
+ |. 6## b6 6#7#6 .|
+ |. c7#2 #4 6# 9#4.|
+ |.8c b62#1 6# cc.|
+ |.55 6b6c 6# 32.|
+ |. 1##8 6# .|
+ |. a#4 6# .|
+ |. 18#b#715a .|
+ ->|.38#c4 7##ca9887.|<-
+ |.9#7 158b###6.|
+ |. 1 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x5907 '备'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 17 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | ba1 |
+ | 6#5 1 |
+ | 3#########6 |
+ | 2ca#72225#8 |
+ | 3#b 4#6 7#7 |
+ | 31 4###4 |
+ | 36a#c8c#b98771|
+ |2c##b73 258bc9 |
+ | 54##########9 |
+ | #5 5# a9 |
+ | #5 5# a8 |
+ | ##########8 |
+ | #5 5# a8 |
+ ->| #5 5# a8 |<-
+ | ##########9 |
+ | #5 a9 |
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x5909 '変'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 15 x 17
+ Advance: 17
+ Offset: 1 x -3
+ _________________
+ |.................|
+ |. 3a .|
+ |. 221114#5111221.|
+ |.4#############6.|
+ |. #1 1#2 .|
+ |. aa #1 1#24a .|
+ |. ab1 #1 1#21ba .|
+ |.3b1 #2 1#2 2a1.|
+ |. 151 2b3 .|
+ |. aa .|
+ |. 8########2 .|
+ |. 9c#5 4#6 .|
+ |. bc13#4 4#7 .|
+ |. 21 4#a#6 .|
+ ->|. 17##c6 .|<-
+ |.1369#c5 6c#9642.|
+ |.7#c84 48c#9.|
+ |. 1 21.|
+ |.................|
+ -----------------
+
+Char 0x590d '复'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 15 x 16
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |. 86 .|
+ |. 4#7111111121.|
+ |. 1c##########4.|
+ |. ba 1 .|
+ |.2bc########## .|
+ |.4a2# 2# .|
+ |. 1########## .|
+ |. 1# 2# .|
+ |. 2########## .|
+ |. aa 12 .|
+ |. 1a########6 .|
+ |. 5ca8b1 3c8 .|
+ |.2b7 8c66#7 .|
+ ->|. 13b##b53222.|<-
+ |.5abc#c8338b###9.|
+ |. 8641 351.|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x591a '多'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 15 x 16
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |. 1 .|
+ |. c#2 .|
+ |. 7#61111122 .|
+ |. 4#########2 .|
+ |. 5#822 7#3 .|
+ |. 9#6 9#32ab2 .|
+ |. 3 a##7 .|
+ |. 1369#c#81 .|
+ |. c##b57#a111121.|
+ |. 483 7########2.|
+ |. 2a#82 1#9 .|
+ |. 19#c41#a bc1 .|
+ |. 67 2cbcc2 .|
+ ->|. 1358c#81 .|<-
+ |.1c#####b71 .|
+ |. 47653 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x5927 '大'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 373 .|
+ | 5#3 .|
+ | 5# .|
+ | 5# .|
+ | 1111115#1111121.|
+ | 9#############4.|
+ | 3443338#7333441.|
+ | 9#8 .|
+ | cb# .|
+ | 4#3#6 .|
+ | bb 8#1 .|
+ | 9#4 1cb1 .|
+ | 19#7 3#c4 .|
+ ->| 16c#7 3##b6.|<-
+ |1b#c4 2b#2.|
+ | 16 2 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x5931 '失'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 15 x 16
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |. 361 .|
+ |. 84 5#1 .|
+ |. 2#6 5# .|
+ |. 7#116#21123 .|
+ |. c########## .|
+ |. 8#1 6# .|
+ |.3#7 6c .|
+ |.2111118b1111121.|
+ |.##############4.|
+ |.1 #c8 .|
+ |. 5#3#1 .|
+ |. 1#7 9a .|
+ |. 3ca 1cb2 .|
+ ->|. 28#a 2c#94 .|<-
+ |.a##7 19#b .|
+ |.182 32 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x5934 '头'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 15 x 16
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |. 11 .|
+ |. 8#1 .|
+ |. 7b4 8c .|
+ |. 2a#919b .|
+ |. 2 6c19a .|
+ |. 6#91 a8 .|
+ |. 6#c4 b7 .|
+ |. 2b3 #5 .|
+ |.32111112#522222.|
+ |.##############a.|
+ |.1 9b 1.|
+ |. 5#437 .|
+ |. 7#8 7#b1 .|
+ ->|. 37c#6 4#c2 .|<-
+ |.3###81 3##1.|
+ |. 45 34 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x597d '好'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |. 14 |
+ |. 5#2 21111123 |
+ |. 7b ######## |
+ |. 98 6c6 |
+ |.######9 9b1 |
+ |.32#42c7 5# |
+ |. 3# #4 5# |
+ |. 6a 2#7########6|
+ |. a7 5c13227#2221|
+ |. #a298 5# |
+ |. 19##4 5# |
+ |. 8#c3 5# |
+ |. 5#6a#4 5# |
+ ->|.39#6 6 36a# |<-
+ |.8c4 ##a |
+ |. 1 33 |
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x5982 '如'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 15 x 16
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |. 42 .|
+ |. #8 .|
+ |. 1#4 1222221.|
+ |. 3#1 5#####5.|
+ |.8######75# #5.|
+ |.228a23#55# #5.|
+ |. 97 3#35# #5.|
+ |. b4 5# 5# #5.|
+ |. #1 8b 5# #5.|
+ |. 4#2 b8 5# #5.|
+ |. 8#8#3 5# #5.|
+ |. 4##3 5#222#5.|
+ |. aca#75#####4.|
+ ->|. 3cc2 9a5# #5.|<-
+ |.7#a1 38 72.|
+ |. 4 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x59a5 '妥'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 17 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 12357a3 |
+ | c##########c9 |
+ | 35433221 |
+ | 25 5c 99 |
+ | 5#2 1#4 1#6 |
+ | b9 93 9c |
+ | 45 a5 64 |
+ | 5#4 |
+ |2###############2|
+ | 3222bb2226#4222 |
+ | 7#1 b9 |
+ | 1a#c969#1 |
+ | 28##c61 |
+ ->| 22458b#837##94 |<-
+ | 6##c95 7#b |
+ | 41 12 |
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x59cb '始'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 17 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 43 34 |
+ | cc a#4 |
+ | #7 2#7 |
+ | 1#4 ab 38 |
+ |3###### 6#2 5#7 |
+ | 28c18c6#6122a#4 |
+ | 98 9aa#####c#c1|
+ | c5 b7221 3b1|
+ | 2#1 #5 3222223 |
+ | 7#23#1 ####### |
+ | 2a#cb #4 4# |
+ | 7#c3 #4 4# |
+ | 1bbc#5#52226# |
+ ->| 2bc11b6####### |<-
+ |2#c2 1#4 5# |
+ | 21 1c4 5c |
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x5a92 '媒'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 17 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 1b4 b2 1b2 |
+ | 2#2 #2 #11 |
+ | 3# 8######### |
+ | 5b 1 #2 1# |
+ |3#####3 #2 1# |
+ |12981#2 ###### |
+ | b5 #1 #1 1# |
+ | #22# ######1 |
+ | 3# 5b #2 |
+ | 5#8a85######### |
+ | 3b#7113c#ab112 |
+ | ac#9 a5#3c9 |
+ | 7#1569a #23#b3 |
+ ->|19#3 2bc1 #2 3cb1|<-
+ |2a4 61 #2 1 |
+ | 51 |
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x5b50 '子'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 15
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |.................|
+ |. 1#ccccccccc## |
+ |. 1766666669##a |
+ |. 7#81 |
+ |. 4cb3 |
+ |. 7# |
+ |. 7# |
+ |.7##############5|
+ |.35555559#5555552|
+ |. 7# |
+ |. 7# |
+ |. 7# |
+ |. 7# |
+ ->|. 44a# |<-
+ |. 7##9 |
+ |. 231 |
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x5b57 '字'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 15 x 16
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |. 1 .|
+ |. 6#4 .|
+ |.2222224#822223 .|
+ |.6############# .|
+ |.6# 17# .|
+ |.6#1#########7# .|
+ |.23 1 29c713 .|
+ |. 7#81 .|
+ |. #7 1.|
+ |.##############a.|
+ |.2111111#6222222.|
+ |. #5 .|
+ |. #5 .|
+ ->|. 57#5 .|<-
+ |. 9#b2 .|
+ |. 11 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x5b58 '存'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 17 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 51 |
+ | 3#4 |
+ | 111119b11111112 |
+ | c############## |
+ | 1 aa 1 |
+ | 16#111111112 |
+ | 5#5 c####### |
+ | 1c# 2ab6 |
+ | 2cc# 4#6 |
+ |4#95# 21116#2222 |
+ | 6 5#1##########2|
+ | 5# 5# |
+ | 5# 5# |
+ ->| 5# 5# |<-
+ | 5# 9c# |
+ | 4a 7a5 |
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x5b83 '它'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 15 x 16
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |. 2 .|
+ |. 4#4 .|
+ |.1222222c9222221.|
+ |.5#############6.|
+ |.5# #5.|
+ |.5# 272 #6.|
+ |.25 3#3 41.|
+ |. 3#2 27b1 .|
+ |. 3#348c##c5 .|
+ |. 3###a63 .|
+ |. 3#4 .|
+ |. 3#2 .|
+ |. 3#2 b2 .|
+ ->|. 3#4 6#6 .|<-
+ |. 1########b .|
+ |. 14444444 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x5b89 '安'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 15 x 16
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |. 1 .|
+ |. 3#6 .|
+ |. 322222ca22222 .|
+ |. c############1.|
+ |. c7 5#1.|
+ |. c8 ab 5#2.|
+ |. 5#2 .|
+ |.##############c.|
+ |.32229c2224#4223.|
+ |. 2#3 8b .|
+ |. 7#c832#4 .|
+ |. 38c#c1 .|
+ |. 27#bb#93 .|
+ ->|.2579c#c5 5c#a1.|<-
+ |. b#c84 98 .|
+ |. 11 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x5b8c '完'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 15 x 15
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |.................|
+ |. 1c# .|
+ |. 3222229#422221.|
+ |. c############6.|
+ |. c7 #5.|
+ |. #8254444445 #6.|
+ |. 5ccccccc# 1 .|
+ |. .|
+ |. ###cccccccc##6.|
+ |. 6544#748#44452.|
+ |. 1#3 5# .|
+ |. 4#1 5# .|
+ |. b9 5# a3.|
+ ->|. 4bb1 5#2 4#7.|<-
+ |.5##8 2####c1.|
+ |. 31 111 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x5b9a '定'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 392 .|
+ | #7 .|
+ | 6#############7.|
+ | 6#44444444444#7.|
+ | 6# #7.|
+ | 25 211111112132.|
+ | 4#########7 .|
+ | #5 .|
+ | b6 #5 .|
+ | 3#4 ######6 .|
+ | 8# #611121 .|
+ | ##7 #5 .|
+ | 7c3#6 #5 .|
+ ->| 3#6 3ca#7 24.|<-
+ |1#b 17c######9.|
+ | 22 2456773.|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x5b9f '実'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 15 x 16
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |. 7# .|
+ |. 7# .|
+ |.7#############1.|
+ |.5#22225832225# .|
+ |.592 4#1 371.|
+ |. a#########c .|
+ |. 32226#22223 .|
+ |. 12215#21221 .|
+ |. 6#########6 .|
+ |.2222226#222223 .|
+ |.9############# .|
+ |. 2#3a9 1 .|
+ |. 4#6 2#7 .|
+ ->|. 4a#5 3#91 .|<-
+ |.7##a2 2c#72.|
+ |. 73 8c1.|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x5bb6 '家'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 15 x 16
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |. 285 .|
+ |. ba .|
+ |.3#############6.|
+ |.3#43222222222#6.|
+ |.3b3#########8b5.|
+ |. 323bc41222 .|
+ |. 17##4 69 .|
+ |.36a#a39#2 9#6 .|
+ |.6c8219b8cc#5 .|
+ |. 28#719#698 .|
+ |.7c#922b9c64#2 .|
+ |.26117#7 b7 bc3 .|
+ |. 38#a2 #6 2##8.|
+ ->|.8#b4 359#2 3a1.|<-
+ |. 3 3#c5 .|
+ |. 2 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x5bc6 '密'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 5b2 .|
+ | 1#6 .|
+ | ##############8.|
+ | #622236222322#7.|
+ | b4 7#a16#3 #8.|
+ | 381b3176#825 .|
+ | 8# #1 8#6 6#8 .|
+ | 1#7 #6cb3 716#4.|
+ | 126#c6 4#6 4 .|
+ |28b#ab#####a .|
+ | 962 3a31 .|
+ | #5 2# 9b .|
+ | #4 2# 8b .|
+ ->| #8678#99acb .|<-
+ | #####cb96ab .|
+ | 4321 79 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x5bf9 '对'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 17 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 493 |
+ | 5#1 |
+ | 2222222 4# |
+ | c#####7 4# |
+ | #5########1|
+ | 84 3#154447#55 |
+ | 9#16a 1 4# |
+ | b9b6 3#2 4# |
+ | 2##1 b9 4# |
+ | b#2 6#14# |
+ | 7#bb 1714# |
+ | 5#52#7 4# |
+ | 6#8 ac 4# |
+ ->|3#a 2 116# |<-
+ | 2 1### |
+ | 541 |
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x5bfc '导'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 17 x 15
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ |.................|
+ | ##########5 |
+ | #62222222#4 |
+ | #5 #4 |
+ | ##########5 |
+ | #511111111171 |
+ | #8222222226#7 |
+ | 7##########a |
+ | 53 |
+ | 2111111112#7112 |
+ |3###############1|
+ | 56 #5 |
+ | 7#2 #5 |
+ ->| 1c4 #5 |<-
+ | a##3 |
+ | 472 |
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x5bfe '対'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 3 .|
+ | 1#5 #4 .|
+ | 43 #2 .|
+ | #######1 #2 .|
+ | 72114#48422#433.|
+ | 4b a######5.|
+ | 74 68 1 #2 .|
+ | 5#186 1 #2 .|
+ | 8ac3 aa #2 .|
+ | b# 4#2 #2 .|
+ | b#4 c4 #2 .|
+ | 6#7#1 #2 .|
+ | 3#4 ba #2 .|
+ ->| 3#8 2b1 #2 .|<-
+ |2ca 39c#1 .|
+ | c93 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x5c06 '将'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 94 591 .|
+ | #5 c9 .|
+ | 51 #5 6######7 .|
+ | c8 #52#6212bb .|
+ | 7# #5b98b17#2 .|
+ | 1#6#5714cc#3 .|
+ | 62#5 15bb373 .|
+ | 2#59#c6 #6 .|
+ | 2c#5562222#721.|
+ | 2c9#5#########7.|
+ |4#b #5 5 #6 .|
+ |1b1 #5 3#6 #6 .|
+ | #5 9# #6 .|
+ ->| #5 11 1#6 .|<-
+ | #5 b##4 .|
+ | 83 463 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x5c07 '將'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 1a4 3b3 .|
+ | 1b3 #4 9a .|
+ | #1 #3 4######1.|
+ | #1 #31c72418a .|
+ | #1 #6c9 6#7#2 .|
+ | 1####9a4c24#7 .|
+ | 111#3 8##851 .|
+ | #35c#b41#1 .|
+ |c#####4384112#11.|
+ |21#32#6########c.|
+ | 1#1 #4 39 1# .|
+ | 3# #3 2#8 1# .|
+ | 8b #3 79 1# .|
+ ->|3#7 #3 3# .|<-
+ |7c1 1#4 c#c .|
+ | 172 441 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x5c08 '專'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 17
+ Advance: 17
+ Offset: 0 x -3
+ _________________
+ |.................|
+ | 161 .|
+ | 2#1 1.|
+ | b#############c.|
+ | 2# .|
+ | 5###########1 .|
+ | 4#cccc#cccc# .|
+ | 4# 2# 1# .|
+ | 5###########1 .|
+ | 2# 3#5 .|
+ | 6aaaaab#bc###7 .|
+ | 3976433211#267 .|
+ | 1 #2 1.|
+ |5###############.|
+ ->| 2#5 #2 .|<-
+ | 7#1 22#2 .|
+ | 2 9#c .|
+ | 12 .|
+ |.................|
+ -----------------
+
+Char 0x5c0b '尋'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 21111111112 .|
+ | 1########### .|
+ | 1 5# .|
+ | 7########## .|
+ | 1########### .|
+ | 22111111112 .|
+ | 4#cccc92###### .|
+ | 11#3112# 2# .|
+ | #89c2###### .|
+ | b###cb9 #2 3 .|
+ |1441 #2 11.|
+ |5##9b##########c.|
+ | 3c4 #2 .|
+ ->| 9#1 #2 .|<-
+ | 3 5a#1 .|
+ | 2a5 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x5c0d '對'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 17 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 2 2 151 |
+ | 11#1#3 4 1#1 |
+ | 8a # #27c1 1#1 |
+ | 2#3# #5#3 1#1 |
+ | 62# #23 112#21 |
+ |3#cc#c###6a#####2|
+ | 118614#3 1#1 |
+ | 4#197 341#1 |
+ | 9#######35#2#1 |
+ | #2 c6#1 |
+ | 2#######3 1#1 |
+ | #2 1#1 |
+ | 1#6673 1#1 |
+ ->| b###cb982 35#1 |<-
+ | 442 7#c |
+ | 12 |
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x5c0f '小'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 451 .|
+ | 8#2 .|
+ | 7# .|
+ | 7# .|
+ | 461 7# 63 .|
+ | 9#2 7# 2#b .|
+ | #9 7# 7#5 .|
+ | 3#4 7# #c .|
+ | 8c 7# 6#6 .|
+ | 1#7 7# 1## .|
+ | 8#2 7# 8#6.|
+ |3#9 7# 3#6.|
+ | 32 7# .|
+ ->| 44a# .|<-
+ | 5##b .|
+ | 52 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x5c11 '少'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 15 x 16
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |. 482 .|
+ |. 6#2 .|
+ |. 6# 3 .|
+ |. b7 6# 1#b .|
+ |. 3#5 6# 3#b .|
+ |. 8c 6# 4#a .|
+ |. 1#5 6# 7#8.|
+ |. 9c 6# 4 a6.|
+ |.5#6 6# 3#7 .|
+ |. 5 6# 9c .|
+ |. 7# 5#6 .|
+ |. 6#9 .|
+ |. 3a#8 .|
+ ->|.12358c#a3 .|<-
+ |.5###b72 .|
+ |. 541 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x5c1d '尝'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 15 x 16
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |. 1c4 .|
+ |. 7b1 #2 #7 .|
+ |. 2cb #2 6c1 .|
+ |. 25 #21c3 .|
+ |.2#############2.|
+ |.1#21111111111#2.|
+ |.2# 221111123 #2.|
+ |. 3 a######## 1 .|
+ |. 1 1 .|
+ |.232222222222223.|
+ |.8##############.|
+ |. 9c1 22 1.|
+ |. 9b1 9#2 .|
+ ->|. 1aa1 1ac1 .|<-
+ |. 1##c#####c#b .|
+ |. 65321 1a2 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x5c24 '尤'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 21 .|
+ | 3#6 68 .|
+ | 2#4 6#8 .|
+ | 2#2 7#4 .|
+ | 222225#3222723 .|
+ | #ccccc#c#cccc# .|
+ | 5#3# .|
+ | 7b3# .|
+ | b83# .|
+ | 2#33# .|
+ | ab 3# .|
+ | 6#3 3# .|
+ | 6#7 3# 271.|
+ ->| 2a#8 3#2 7#3.|<-
+ |2##5 2#####a .|
+ | 21 11111 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x5c31 '就'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 17 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 23 73 |
+ | b# #5 2 |
+ | 1 2c3 1 #35#3 |
+ | ######## #2 bb |
+ | 32222223 #1 221 |
+ | ######b######c |
+ | #2 2#12#2#311 |
+ | #2 2# 2# #2 |
+ | ###### 4b #2 |
+ | 1 2# 1 79 #2 |
+ | b72#4b a6 #2 |
+ | 4#42# #6#1 #2 |
+ | c9 2# 5ca #2281|
+ ->|3b1 2# 4#4 #36#1|<-
+ | 1##b2#9 c##9 |
+ | 43 2 11 |
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x5c3e '尾'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 17 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 13222222222231 |
+ | 6############4 |
+ | 6# #4 |
+ | 5#2222222222#4 |
+ | 5############5 |
+ | 5# 24 |
+ | 6#4999aac###7 |
+ | 6#2b988#421 1 |
+ | 7c 1115# 131 |
+ | 8c2##########3 |
+ | aa 1 4#212234 |
+ | #7a########### |
+ | 4#433215#21 6 |
+ ->| bc 3#2 5#6|<-
+ |4#6 1c#####b |
+ | 1 11111 |
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x5c40 '局'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 1 .|
+ | ###########7 .|
+ | #822222222#6 .|
+ | #7 #6 .|
+ | ###########6 .|
+ | #82222222221 .|
+ | #822222222233.|
+ | ############9.|
+ | 1#5 #8.|
+ | 3#33#####c #7.|
+ | 6# 2#2223# #7.|
+ | b9 2# 2# #6.|
+ | 3#5 3###### 1#5.|
+ ->| b# 21111437#4.|<-
+ |166 4##c1.|
+ | 53 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x5c5e '属'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 15
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ |.................|
+ | 5############ .|
+ | 4# 2# .|
+ | 4############ .|
+ | 4# 241 .|
+ | 4#2#cbb#bbaa4 .|
+ | 4# #1 .|
+ | 4# #baa#baa#1 .|
+ | 5# #1 #1 #1 .|
+ | 6# bbbb#bbbb2 .|
+ | 8b#cccc#ccccc2.|
+ | b8#2 #133 #2.|
+ | 3#4#2488#9ac1#2.|
+ ->|1cc #226432 64#2.|<-
+ | 64 #3 7#c1.|
+ | 13 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x5de1 '巡'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 15
+ Advance: 17
+ Offset: 0 x -1
+ _________________
+ |.................|
+ | 1 .|
+ | 2c3 1#8 99 471.|
+ | c9 5#11#6 ab .|
+ | 7#1 b8 8c 2#4 .|
+ | 2714#11#4 9a .|
+ | b8 8a 3#2 .|
+ |6##c3#31#6 ab .|
+ |128c a9 6c 2#5 .|
+ | 7c 3#3 c7 6#1 .|
+ | 7c b9 5#1 ca .|
+ | 7c 7#2 #8 6#3.|
+ | 7c 293 54 1 .|
+ | b#72 .|
+ ->| ac6b#c977777896.|<-
+ |3c3 27abc#####2.|
+ |.................|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x5de5 '工'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 15 x 12
+ Advance: 17
+ Offset: 1 x 0
+ _________________
+ |.................|
+ |.................|
+ |.................|
+ |. 3555555555554 .|
+ |. 8###########9 .|
+ |. 3#3 .|
+ |. 3#3 .|
+ |. 3#3 .|
+ |. 3#3 .|
+ |. 3#3 .|
+ |. 3#3 .|
+ |. 3#3 .|
+ |. 3#3 .|
+ |.5544446#6444455.|
+ ->|.c#############c.|<-
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x5de6 '左'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 14
+ Advance: 17
+ Offset: 0 x -1
+ _________________
+ |.................|
+ |.................|
+ | 4#4 .|
+ | 6# .|
+ | 12222ab22222222.|
+ | 7##############.|
+ | 4#1 .|
+ | 99 .|
+ | 1#4 1 .|
+ | 8#########5 .|
+ | 3#3111#5111 .|
+ | c7 #4 .|
+ | 1bb #4 .|
+ |2c#2 #4 .|
+ ->|3c3111111#51111 .|<-
+ | 7###########5.|
+ |.................|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x5df2 '已'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 15 x 14
+ Advance: 17
+ Offset: 2 x -1
+ _________________
+ |.................|
+ |.................|
+ |..122111111223 |
+ |..7########### |
+ |.. 7# |
+ |.. 7# |
+ |.. 53 7# |
+ |.. #922222228# |
+ |.. ########### |
+ |.. #7 7# |
+ |.. #7 12 |
+ |.. #7 |
+ |.. #7 31 |
+ |.. #7 9#1|
+ ->|.. #b321111236#9 |<-
+ |.. 6bc#######b91 |
+ |.................|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x5e02 '市'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 15 x 16
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |. 67 .|
+ |. 9#1 .|
+ |.332222594222233.|
+ |.###############.|
+ |.3222226#3222222.|
+ |. 5#1 .|
+ |. ###########1 .|
+ |. #8558#5558# .|
+ |. #5 5#1 5# .|
+ |. #5 5#1 5# .|
+ |. #5 5#1 5# .|
+ |. #5 5#1 5# .|
+ |. #6 5#1149# .|
+ ->|. #6 5#1 ##7 .|<-
+ |. 6#1 1 .|
+ |. 361 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x5e03 '布'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 58 .|
+ | a9 .|
+ | 221113#41111123.|
+ | 8##############.|
+ | 23224#526322223.|
+ | a9 #3 .|
+ | 7c1 #1 .|
+ | 6########### .|
+ | 7#a#112#3117# .|
+ |1b#55# #1 6# .|
+ | 14 5# #1 6# .|
+ | 5# #1 6# .|
+ | 6# #137c# .|
+ ->| 7# #2 #b5 .|<-
+ | 13 1#2 .|
+ | 171 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x5e2e '帮'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 15 x 16
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |. 72 .|
+ |.1213#3122#####3.|
+ |.7#######2#1199 .|
+ |. 112#11 2# 2#1 .|
+ |. 9c##c#52# 4c1 .|
+ |. 4# 2# 6a .|
+ |.9######c2# 2#2.|
+ |.111a81112# a#c .|
+ |. 7#2 44# 671 .|
+ |.5b#8223#32222 .|
+ |.7b7########## .|
+ |. 2# 1#1 1# .|
+ |. 2# 1#1 1# .|
+ ->|. 2# 1#1 26# .|<-
+ |. 2# 1#1 b#9 .|
+ |. 1 1#1 11 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x5e38 '常'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 15 x 17
+ Advance: 17
+ Offset: 1 x -3
+ _________________
+ |.................|
+ |. 2 #4 5 .|
+ |. 6#3 #2 4#3 .|
+ |. 85 #2 c6 .|
+ |.2##############.|
+ |.1#222222222223#.|
+ |.2# 2#.|
+ |.2#12######## 3b.|
+ |. 2# 2# .|
+ |. 2######## .|
+ |. #2 .|
+ |. 1111#31111 .|
+ |. 2##########3 .|
+ |. 2# #2 #2 .|
+ ->|. 2# #2 #2 .|<-
+ |. 2# #2 8## .|
+ |. 15 #3 261 .|
+ |. 1 .|
+ |.................|
+ -----------------
+
+Char 0x5e55 '幕'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 15 x 16
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |. 151 151 .|
+ |.1 2# 2#1 1.|
+ |.a#############a.|
+ |. 2# 1# .|
+ |. #bbbbbbbb#2 .|
+ |. #bbbbbbbb#2 .|
+ |. #2 #2 .|
+ |. #bbb#bbbb#3 .|
+ |.1 79 1.|
+ |.a#############c.|
+ |.1 ac22# c5 .|
+ |. 2bb1 2# 5#92 .|
+ |.8#a#ccc#ccc#c#a.|
+ ->|.641# 2# 2# 55.|<-
+ |. 1# 2# 4b# .|
+ |. 4 3# 183 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x5e74 '年'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 15 x 16
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |. 196 .|
+ |. 5#6 .|
+ |. b#444444444 .|
+ |. 5#ccc##ccc#b .|
+ |. 2#9 4# .|
+ |.2cc1 4# .|
+ |.173##########2 .|
+ |. #6226#2223 .|
+ |. #4 4# .|
+ |. #4 4# .|
+ |.322#6226#222223.|
+ |.##############b.|
+ |.1 4# 1.|
+ ->|. 4# .|<-
+ |. 5# .|
+ |. 5# .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x5e76 '并'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |. 4c3 9b2 |
+ |. 1cc1 2#7 |
+ |. 491 b9 |
+ |. ##ccccc######8 |
+ |. 3226#2117#1121 |
+ |. 5# 6# |
+ |. 5# 6# |
+ |. 5# 6# |
+ |.32227#2227#22221|
+ |.###############5|
+ |.1 aa 6# |
+ |. 1#7 6# |
+ |. 9#1 6# |
+ ->|. 8#7 6# |<-
+ |.4b#9 7# |
+ |.187 7c1 |
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x5e83 '広'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 48 .|
+ | 5#1 .|
+ | 7#############.|
+ | 6c222222222222.|
+ | 6c a5 .|
+ | 6c 3#9 .|
+ | 6c 7#2 .|
+ | 6c b9 .|
+ | 6c 2#3 .|
+ | 7b 8b 2b2 .|
+ | 99 1#4 ca .|
+ | c7 8a 3#5 .|
+ | 2#3 3#2 1357#c .|
+ ->| 8# 2##c##b976#6.|<-
+ |2#8 a852 73.|
+ | 41 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x5e8f '序'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 15
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ |.................|
+ | 2#5 .|
+ | 232222ba222231.|
+ | 7############5.|
+ | 6# 222111112 .|
+ | 6# c######## .|
+ | 6# 24 1ab6 .|
+ | 6c 7#7c7 .|
+ | 7c11117#71111 .|
+ | 8b9#########c .|
+ | a91 #5 b6 .|
+ | #6 #5 391 .|
+ | 3#3 #5 .|
+ ->| 8c #5 .|<-
+ |3#7 68#4 .|
+ |151 5b81 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x5e95 '底'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 9a .|
+ | 8# 11.|
+ | 8############9.|
+ | 7# 1.|
+ | 6# 12469c1 .|
+ | 6# 6#####b985 .|
+ | 6# 5# 1# .|
+ | 6# 5# 1# .|
+ | 6c 5#112#32221.|
+ | 7b 5#####cccc5.|
+ | 89 5# 97 .|
+ | b7 5# 4c .|
+ | 1#4 5# 94 c7 31.|
+ ->| 7#1 6#b#424#67c.|<-
+ |1#9 a#a16#17##9.|
+ | 43 47 1b3 493.|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x5ea6 '度'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |. 7b |
+ |. 4#5 |
+ |. 3############6 |
+ |. 3#313821127221 |
+ |. 3#2 4# 2# |
+ |. 3#############2|
+ |. 3#2 4# 2# 1 |
+ |. 3#1 4# 2# |
+ |. 3#1 4###### |
+ |. 4# 111111111 |
+ |. 6b b#######9 |
+ |. a8 5b1 8c1 |
+ |.1#4 ac59c2 |
+ ->|.7# 3b##72 |<-
+ |.#839b#c836c##a8 |
+ |.22 873 38b1 |
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x5efa '建'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 65 .|
+ | b6 .|
+ | 9bbb3b####### .|
+ | 237c b5 2# 1.|
+ | a67#########8.|
+ | 3c b5 2# .|
+ | 3c8739####### .|
+ | 6b8#4 b5 .|
+ | #2211b6112 .|
+ | 682# #cc#ccc#2 .|
+ | 3#8a1211b61222 .|
+ | 7#66bbb#cbbc8 .|
+ | 6#b2 c5 .|
+ ->| 5#48#953a623455.|<-
+ |1a6 27ac######5.|
+ | 1111 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x5f00 '开'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 15 x 15
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |.................|
+ |. 4555555555554 .|
+ |. 9ccc#ccc#ccc9 .|
+ |. 1#3 c6 .|
+ |. 1#3 c6 .|
+ |. 1#2 c6 .|
+ |.1 2#2 c6 1.|
+ |.##############a.|
+ |.43335#433c83333.|
+ |. 6c c6 .|
+ |. b9 c6 .|
+ |. 4#3 c6 .|
+ |. 2#8 c6 .|
+ ->|.27#b c7 .|<-
+ |.2b9 #7 .|
+ |. 32 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x5f0f '式'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |. 64 |
+ |. #91a4 |
+ |. #6 9#2 |
+ |.32222222#722522 |
+ |.############### |
+ |. a9 |
+ |. 9a |
+ |. 44333427c |
+ |. ######64#1 |
+ |. 2# 1#4 |
+ |. 2# b9 |
+ |. 2# 6#2 |
+ |. 3#7a9 #a 15 |
+ ->|.3ac###94 5#85#4|<-
+ |.4#c83 7##c |
+ |. 2 4a4 |
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x5f15 '引'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 13 x 16
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |. 21...|
+ |.8######6 1#9...|
+ |.222222#5 #7...|
+ |. #4 #6...|
+ |. 55555#4 #6...|
+ |. ##cccc4 #6...|
+ |.1#3 #6...|
+ |.2#2 #6...|
+ |.3######9 #6...|
+ |. 21111c8 #6...|
+ |. #6 #6...|
+ |. 2#4 #6...|
+ |. 5#2 #6...|
+ ->|. 778#c #6...|<-
+ |. 9#c82 #7...|
+ |. #7...|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x5f35 '張'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |. 1111111 |
+ |.b####2 #######1 |
+ |.2111#2 #2 |
+ |. #2 ######9 |
+ |.1####2 #2 |
+ |.1#111 ######8 |
+ |.2# #2 |
+ |.3c 1##########1|
+ |.6####31#3a51113 |
+ |. 2#1 #268 74 |
+ |. 2# #21c8c4 |
+ |. 3# #2 7c |
+ |. 5c #27 ba1 |
+ ->|. 46cb #cb 1b#8 |<-
+ |. 7#a2 5#5 94 |
+ |. 2 |
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x5f37 '強'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 15 x 16
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |. a7 .|
+ |.5####2 5c236 .|
+ |.1112#1 4c2 3#3 .|
+ |. #39#a89a#b .|
+ |. 212#2#caa#65#4.|
+ |. ####2 2# 2 .|
+ |. #2 ######## .|
+ |. #1 #313#13# .|
+ |. ####3#2 2# 2# .|
+ |. 322#2#313#13# .|
+ |. #2######## .|
+ |. 1# 2# 14 .|
+ |. 3# 2# 5#1.|
+ ->|. 349b799ab#cc#8.|<-
+ |. 8#b3786531 5a.|
+ |. 1 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x5f53 '当'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 13 x 16
+ Advance: 17
+ Offset: 2 x -2
+ _________________
+ |.................|
+ |.. 1#8 ..|
+ |..171 #5 84..|
+ |..2ca #5 4#6..|
+ |.. 3#9 #5 1cb ..|
+ |.. 5b1 #5 6#2 ..|
+ |.. #5 ..|
+ |..8###########5..|
+ |..12222222222#5..|
+ |.. #5..|
+ |.. 2222222222#5..|
+ |..2###########5..|
+ |.. #5..|
+ |.. #5..|
+ ->|..b###########5..|<-
+ |..22222222223#5..|
+ |.. 41..|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x5f55 '录'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 15 x 16
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |. 2111111112 .|
+ |. 3##########1 .|
+ |. 1 1#1 .|
+ |. b#########1 .|
+ |. 222222222#1 .|
+ |.1 #1 .|
+ |.b#############a.|
+ |.1131 #5 211.|
+ |. cb2 #b 8#2 .|
+ |. 1b9 ##58#61 .|
+ |. 4b4#7#b1 .|
+ |. 3a#92#29c4 .|
+ |.4a#a2 #2 9#b63.|
+ ->|.5c4 34#1 5##6.|<-
+ |. b#9 5 .|
+ |. 33 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x5f62 '形'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 15
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ |.................|
+ | 12111112 4a2 .|
+ | a#######4 bc2 .|
+ | b6 c5 9#2 .|
+ | b6 c5 1a#3 .|
+ | b6 c5 bc2 52 .|
+ | 11b6 c6121 3#a .|
+ |1########9 3#b .|
+ | 11#5 c6116#a .|
+ | #4 c5 b#8 2 .|
+ | 2#2 c5 43 6#5.|
+ | 6# c5 5#b2.|
+ | c8 c5 7#9 .|
+ ->| 8#2 c6 5b#6 .|<-
+ |1a8 b55#a2 .|
+ | 2 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x5f71 '影'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |. 3 |
+ |. 4######3 1#a |
+ |. 3# #2 7#1 |
+ |. 3#bbbb#2 2#6 |
+ |. 3# #21ca |
+ |. 4######3bc1 5 |
+ |.11 3c1 111 7#5 |
+ |.#########8 6#5 |
+ |. 3######319#5 |
+ |. 2#1 #29c3 57 |
+ |. 3######2 1#a1|
+ |. 1822#16 bc1 |
+ |.1b#32#1#4 1bc2 |
+ ->|.ac214# 537#b1 |<-
+ |. 6#b 1c#7 |
+ |. 2 12 |
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x5f79 '役'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 5 .|
+ | 5#7 4#####1 .|
+ | 2#7 4#227# .|
+ | 3#8 6c 6c .|
+ |5#8 b6 b9 7#221.|
+ | 4 7#79#2 5###4.|
+ | 5#6 64 143 .|
+ | 5##22#######c .|
+ |7#8#2 363223#6 .|
+ |27 #2 c8 8c .|
+ | #2 3#44#4 .|
+ | #2 6##7 .|
+ | #2 19##a51 .|
+ ->| #46a#b329##c4.|<-
+ | #3ab5 169 .|
+ | 3 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x5f88 '很'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 4 .|
+ | 8#53#######2 .|
+ | 8#4 2#31115#1 .|
+ |2a#3 2#2 4#1 .|
+ |2b2 722#######1 .|
+ | 4#82#2 4#1 .|
+ | 2#9 2#31114#1 .|
+ | 2c#1 2#######2 .|
+ |4#a#1 2#277 43 .|
+ |5a #1 2#23c 6#a .|
+ | #1 2#2 cbb3 .|
+ | #1 2#2 4#5 .|
+ | #1 2#3856#91 .|
+ ->| #2 5##c4 6##8.|<-
+ | #2 a#7 2a1.|
+ | 41 12 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x5f8c '後'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 32 .|
+ | 7c1 1c8 1 .|
+ | 3#5 a8 1cb .|
+ | 3#6 1a911bb1 .|
+ | 5#71 a####a .|
+ |1a6 c9211b8 86 .|
+ | 8c1 4c5 5#7 .|
+ | 6#4 b#####cc#6.|
+ | 6##2 35c51 4 .|
+ |4#5#2 a#####9 .|
+ | 3 #2 aa#315#2 .|
+ | #2aa 8b2b7 .|
+ | #2 b#c .|
+ ->| #2 15a#a#c963.|<-
+ | #2a##82 17b#1.|
+ | 7124 1 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x5f97 '得'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 17 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 71 11111111 |
+ | 6#91######## |
+ | 3#8 1#1 5# |
+ | 4#9 1######## |
+ |3#8 651#1 5# |
+ | 2 2#82######## |
+ | a9 11111111 |
+ | 8#3 #cccccccc# |
+ | 8##3 5444448#45 |
+ |6#4#322111116#221|
+ | 4 #3cccccccc#cc4|
+ | #3 38 5# |
+ | #3 3#5 5# |
+ ->| #3 b6 6# |<-
+ | 1#4 7c## |
+ | 183 2a84 |
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x5f9e '從'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 15
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ |.................|
+ | b7 c7 99 .|
+ | ab1 1#2 c6 .|
+ | 9c1 6#6 3#3 .|
+ |1bc252 b7c79bc2 .|
+ | 421#84# 27#36c2.|
+ | aa b7 9a a6.|
+ | 7#2 62 .|
+ | 5##2 51 #3 .|
+ |5#6#2 #4 #2 1 .|
+ | 5 #2 3# ##### .|
+ | #2 6#2 #2 .|
+ | #2 cab #2 .|
+ ->| #27c 8b#42122.|<-
+ | #6#3 5b####8.|
+ | 711 1231.|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x5fa1 '御'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 1 2 .|
+ | 5#7 c2 212 .|
+ | 4#a 6####3###2.|
+ | 6#a 1c3# 2# #2.|
+ | 5918582# 2# #2.|
+ | 6#3 2#112# #2.|
+ | 1#64#####4# #2.|
+ | 9# 2# 2# #2.|
+ | 6## 193# 2# #2.|
+ |1#6# 1#2###2# #2.|
+ | 42# 1#2# 2# #2.|
+ | 2# 1#2# 43# #2.|
+ | 2# 1#6###2#7#2.|
+ ->| 2#2c#a62 2#45 .|<-
+ | 3# 51 2# .|
+ | 3a1 2a .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x5fa9 '復'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 17 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 181 3a5 |
+ | 8#3 9#3111111 |
+ | 3#5 3########a |
+ | 2c8 1c9 |
+ |1#a 79########5 |
+ | 714#53#4 #5 |
+ | c8 #ccccc#5 |
+ | 8# #4 #5 |
+ | 5## 1#######5 |
+ |3#9# b9 |
+ | 62# 9######4 |
+ | 2# 9cc4 b9 |
+ | 2# bc23#49b |
+ ->| 2# 11 7##5 |<-
+ | 2# 368cc69##ba1|
+ | 3# 1c94 1599 |
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x5fc3 '心'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 15 x 15
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |.................|
+ |. 9b .|
+ |. 7#8 .|
+ |. b#3 .|
+ |. 3a2 .|
+ |. 6#2 11 .|
+ |. 9#26# 1#9 .|
+ |. b# 6# 8#4 .|
+ |. #a 6# 1#c .|
+ |.4#6 6# 7#7.|
+ |.9#2 6# 1#9.|
+ |.cc 6# 2 1 .|
+ |. 1 7# 1#6 .|
+ ->|. 7#5339#4 .|<-
+ |. 3c####9 .|
+ |. 111 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x5fc5 '必'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 14
+ Advance: 17
+ Offset: 1 x -1
+ _________________
+ |.................|
+ |.................|
+ |. 4c2 |
+ |. 2#c 292 |
+ |. 4#9 6#8 |
+ |. 49262 bb |
+ |. 13 5#1 3#4 |
+ |. 5#55# ab 6 |
+ |. 7#15# 4#36#7 |
+ |. ab 5# 1c9 a#3 |
+ |. #7 5# bc 1#c1|
+ |.5#3 5#a#2 6c2|
+ |.14 6#c2 3 |
+ |. 39##1 1#6 |
+ ->|.6b#b8#42228#4 |<-
+ |.2a5 1b#####8 |
+ |.................|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x5fd8 '忘'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |. 37 |
+ |. 3#4 |
+ |. 84 |
+ |.c#############a |
+ |.223#42222222222 |
+ |. 2#2 |
+ |. 2#411111112 |
+ |. 2########## |
+ |. 1 |
+ |. 52 c6 |
+ |. 59 #7 8c 3c2 |
+ |. aa #6 2#5 cc |
+ |.1#5 #6 2 1 3#9 |
+ ->|.6# #6 8a 8c1|<-
+ |.57 #b5556#a 1 |
+ |. 7c####b2 |
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x5fdc '応'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 35 .|
+ | 4#1 .|
+ | 91 .|
+ | ############6 .|
+ | #411111111121 .|
+ | c2 6 .|
+ | c2 171c4 .|
+ | #2 2#189 .|
+ | #1381# 5# 19 .|
+ | 1# 6b1# 15 c5 .|
+ | 4c a81# 6c .|
+ | 79 #51# 1#4.|
+ | b63#11# 4 4 .|
+ ->|2#2 1#1 3#4 .|<-
+ |7b c####b .|
+ | 1 1111 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x6001 '态'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |. 294 |
+ |. 4#3 |
+ |. 544449#4444455 |
+ |. #############c |
+ |. 11 4#41#2 1 |
+ |. 1ca 9b1 |
+ |. 2bc6b 1cc3 |
+ |. 17#c12#7 2b#a63|
+ |.7##8 87 7##2|
+ |. 72 55 2 |
+ |. 1945c18#2 3#5 |
+ |. 5#55# 1#7 a#3 |
+ |. a#15# 1 441#c1|
+ ->|.2#a 5#3 1a#16a2|<-
+ |.143 3######7 |
+ |. 145543 |
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x6027 '性'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 17 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 32 241 |
+ | #8 11 5#1 |
+ | #5 6#15# |
+ | 3 #64 89 5# 1 |
+ | #5#8#3a#######9 |
+ |1#3#5a9#2 5# 1 |
+ |2#2#516c 5# |
+ |3#1#5 44 5# |
+ |4a #5 4548#5562 |
+ | #5 accc#cc#4 |
+ | #5 5# |
+ | #5 5# |
+ | #5 5# |
+ ->| #5 65558#55671|<-
+ | #5 #cccccccc#2|
+ | #6 |
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x606f '息'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 87 .|
+ | #6 .|
+ | ##########5 .|
+ | #62222222#5 .|
+ | ##########5 .|
+ | #5 #5 .|
+ | #5 #5 .|
+ | ##########5 .|
+ | #61111111#5 .|
+ | ##########5 .|
+ | 25 5 .|
+ | 1a45#12#6 aa .|
+ | 5#35# 98143#a .|
+ ->| bb 5#1 6#44#6.|<-
+ |195 3######a 3 .|
+ | 11111 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x60a8 '您'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 11 .|
+ | 6c3 ac .|
+ | c8 6#5222221.|
+ | 9#2 6########2.|
+ | 7##29#7 2#3 a8 .|
+ |3#5#2133 1# 121 .|
+ | 3 #2 2#71# c9 .|
+ | #21b9 1# 2ca .|
+ | #27b 37# 3a1.|
+ | 1#3 5#8 .|
+ | 11 53192 73 .|
+ | 8a #6 aa 8#3 .|
+ | c5 #5 48 4 ac2.|
+ ->| 6#1 #6 2#91#7.|<-
+ | 36 b######3 1 .|
+ | 11111 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x60c5 '情'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 17 x 17
+ Advance: 17
+ Offset: 0 x -3
+ _________________
+ |.................|
+ | 53 83 |
+ | #6 1111#51111 |
+ | #4 b########8 |
+ | #65 1 #4 |
+ | #6#8#6######## |
+ |1#5#4971 #5 1 |
+ |3#3#41##########1|
+ |5#1#4 1211111121 |
+ | 1 #4 ######## |
+ | #4 #4 2# |
+ | #4 ######## |
+ | #4 #4 2# |
+ | #4 ######## |
+ ->| #4 #4 1# |<-
+ | #5 #4 279# |
+ | #5 1#4 a#8 |
+ | 1 |
+ |.................|
+ -----------------
+
+Char 0x60f3 '想'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 17 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 173 |
+ | 1#3 #######1 |
+ | 1#21 #32226# |
+ | a#####3#31115# |
+ | 22b#42 ####### |
+ | 3c#87 #2 4# |
+ | b6#8#7####### |
+ | 7c #2a8#31115# |
+ |2#5 #2 #41115# |
+ | 2 #3 1#######1 |
+ | 312415a 4 |
+ | 1#a2#52#7 6#9 |
+ | 5#51#3 85 a58#9 |
+ ->| b# 1#6 4#a ac1|<-
+ | 55 b#####c3 1 |
+ | 1111 |
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x610f '意'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 15 x 16
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |. 59 .|
+ |. 211113#311112 .|
+ |. ############# .|
+ |. 1 77 95 .|
+ |.62116#113#51124.|
+ |.###############.|
+ |. c########c3 .|
+ |. #2 #2 .|
+ |. #cccccccc#2 .|
+ |. #2 #2 .|
+ |. ##########3 .|
+ |. 21 5127 3 .|
+ |. b71#11#5 45#7 .|
+ ->|.4#11#2 314#28#8.|<-
+ |.b7 c#####9 a3.|
+ |. 1111 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x614b '態'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 15 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 74 41 ..|
+ | 7c341 #2 57 ..|
+ | 6a1 7c2cac961..|
+ | a#bbbc###3 21..|
+ | 3431 24#412aa..|
+ | #cccc# 8bbba2..|
+ | #1 2# 92 ..|
+ | #bbbb# #458c3..|
+ | #bbbb# #5311 ..|
+ | #2 2# #3 8a..|
+ | #2 4## a###c3..|
+ | 2 744 2 ..|
+ | 941b23# 4#6 ..|
+ ->| 5#21#2 71416#6..|<-
+ | c8 1#5223c9 8b..|
+ |161 b####b2 ..|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x6167 '慧'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 15 x 16
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |. 25 62 .|
+ |. 115b11 21c411 .|
+ |.2######3######3.|
+ |. 8#####2###### .|
+ |. 4b c3 .|
+ |.5######5cc####7.|
+ |. 1149 931 .|
+ |. 1###########3 .|
+ |. 11 2#3 .|
+ |. 7##########3 .|
+ |. 1 1#3 .|
+ |. ###########4 .|
+ |. 11 31181 71 .|
+ ->|. 8c2#5 b8 55#a .|<-
+ |.2#71#62428#45#8.|
+ |.4b1 c####c8 62.|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x61b6 '憶'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 17 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 161 193 |
+ | 2#1 2111a91111 |
+ | 1# #########5 |
+ | 1# 53 56 |
+ | 76#b3117b11c912 |
+ | c5#3ba######### |
+ | #3# 3######## |
+ |3#1# 2# 2# |
+ | 1# 1#cccccc# |
+ | 1# 2# 2# |
+ | 1# 3######## |
+ | 1# 1a3#3a5 2a1 |
+ | 1# 6# #238 1aa |
+ ->| 2# c6 #3 4c2c2|<-
+ | 2# 2 b####8 |
+ | 2# |
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x61c9 '應'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 7 .|
+ | #6 .|
+ | 1#############7.|
+ | 1#21462c53c2111.|
+ | # 985b b4 .|
+ | # 3#1bccc#cc#4.|
+ | #2c#5#1 1# .|
+ | #b9#a#bbb#bb9 .|
+ | # 1# #bbb#bb9 .|
+ | # 1# #1 1# .|
+ | # 1# #ccc#cc#4.|
+ | 2c 2a a13 .|
+ | 59 17296#4 a2 .|
+ ->| a6 991# 88 57c .|<-
+ |4#27c11#2115#2a6.|
+ |69 42 b####7 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x6210 '成'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 24 .|
+ | 4# 2#5 .|
+ | 3# 9b .|
+ | 3655557#656663.|
+ | 6#ccccc#ccccc5.|
+ | 5# #3 .|
+ | 5#1112 #4 6c2 .|
+ | 5##### a6 9c .|
+ | 6# 5# 8a #6 .|
+ | 7c 6# 5#6#1 .|
+ | 9b 6c 1##7 .|
+ | c834ab b#1 .|
+ | 2#45##7 6##6 42.|
+ ->| 8c 31 7#67#39#.|<-
+ |3#6 2c#6 9##9.|
+ | 3 53 7c2.|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x6216 '或'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 6c1 6 .|
+ | 4# 2#8 .|
+ | 4# 54 .|
+ |4##############7.|
+ | 21111114#211111.|
+ | 2#1 .|
+ | #####2 #3 8a .|
+ | #311#2 c5 b9 .|
+ | #2 #2 a71#4 .|
+ | #311#2 7a4# .|
+ | #####2 3#a9 .|
+ | c#3 .|
+ | 2468a 1c#2 2 .|
+ ->|2####a863cbac29a.|<-
+ | 741 18#a 1b##7.|
+ | 76 8c1.|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x6236 '戶'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 1 112354 .|
+ | 7###########2.|
+ | 7#33333211 .|
+ | 7# 1 .|
+ | 7########### .|
+ | 7#111111118# .|
+ | 7# 7# .|
+ | 7# 7# .|
+ | 7########### .|
+ | 8#111111118# .|
+ | ab 59 .|
+ | 1#8 .|
+ | 8#3 .|
+ ->| 5#a .|<-
+ |1b#1 .|
+ | 2 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x6237 '户'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 15 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 7c2 ..|
+ | 5#9 ..|
+ | 1 85 1..|
+ | 1###########8..|
+ | #511111111#8..|
+ | #4 #8..|
+ | #4 #8..|
+ | #4 #8..|
+ | ###########8..|
+ | 1#522222222#8..|
+ | 3#1 96..|
+ | 7c ..|
+ | c8 ..|
+ ->| 7#2 ..|<-
+ |5#8 ..|
+ |29 ..|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x623b '戻'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 64 .|
+ | b9 .|
+ | 6###########5 .|
+ | 5#111111111#4 .|
+ | 5#222222222#4 .|
+ | 5###########5 .|
+ | 5# 51 .|
+ | 5# 2#1 .|
+ | 6c 2213#11121 .|
+ | 7b b########5 .|
+ | 89 1 4#4 .|
+ | a7 9ca .|
+ | #3 4#2#5 .|
+ ->| 6c 6#5 4#6 .|<-
+ |2#737c#5 4#c72.|
+ | 7 1a91 17c1.|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x6240 '所'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 31 13 .|
+ | 469c#a1458b##2.|
+ | #a531 5#a97431.|
+ | #5 4# .|
+ | c6111 4# .|
+ | c####24#111122.|
+ | c5 #24######b.|
+ | c4 #24# #4 .|
+ | #3 #25# #4 .|
+ | #####27b #4 .|
+ | 1#3112 a8 #4 .|
+ | 4# #5 #4 .|
+ | 8a 6# #4 .|
+ ->| c6 2#7 #4 .|<-
+ |6#2 2cb #4 .|
+ | 5 61 72 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x624b '手'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 15
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ |.................|
+ | 1111123468ac .|
+ | c######cba983 .|
+ | 1211 #2 .|
+ | #2 .|
+ | 3##########a .|
+ | 32223#32222 .|
+ | #2 .|
+ |25555555#6555553.|
+ |4ccccccc#cccccc7.|
+ | #2 .|
+ | #2 .|
+ | #2 .|
+ ->| 13#2 .|<-
+ | 1### .|
+ | 441 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x6253 '打'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |. 151 |
+ |. 2# |
+ |. 2# 6########1|
+ |.1 3#1133222#723 |
+ |.b#####3 #5 |
+ |.113# #5 |
+ |. 2# #5 |
+ |. 2#285 #5 |
+ |. 17##a3 #5 |
+ |.a#c#2 #5 |
+ |.642# #5 |
+ |. 2# #5 |
+ |. 2# #5 |
+ ->|. 3# 1#5 |<-
+ |. a#c 9##3 |
+ |. 351 362 |
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x626b '扫'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 15 x 16
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |. 3a3 .|
+ |. 4#1 .|
+ |. 3# 6#######3.|
+ |.325#123222223#3.|
+ |.c#####5 1#3.|
+ |.1 4# 1#3.|
+ |. 3# 1 1#3.|
+ |. 4#9#3c######3.|
+ |.38##93 211113#3.|
+ |.c#a# 1#3.|
+ |.514# 1#3.|
+ |. 4# 1#3.|
+ |. 4# 3222223#3.|
+ ->|. 5# ########3.|<-
+ |. 9c# 2#3.|
+ |. 9a4 182.|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x627e '找'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |. 2 a8 |
+ |. 2#2 ba 26 |
+ |. 2# 9a 8#6 |
+ |. 2# 8a b9 |
+ |.3#####2 7b 357 |
+ |. 23#2356b#c###b |
+ |. 2# 1#cb#531 |
+ |. 2#162 2#2 a8 |
+ |. 16##b1 #53#6 |
+ |.4###2 a9c9 |
+ |.252# 6#b |
+ |. 2# 3c#9 |
+ |. 2# 18#96#6 92|
+ ->|.137# 7##5 8#8#6|<-
+ |. c#b 171 7##2|
+ |. 44 13 |
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x629e '択'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |. 2 |
+ |. 2#1 2222223 |
+ |. 2# 2#######2 |
+ |. 2# 2#1 #1 |
+ |.7#####1#1 #1 |
+ |.233#241#31112#1 |
+ |. 2# 2#######1 |
+ |. 2#132#12# b2 |
+ |. 4##72#11#1 |
+ |.4c##2 2#1 #4 |
+ |.283# 4# a7 |
+ |. 2# 6b 6c |
+ |. 2# b7 1#8 |
+ ->|. 2# 6#1 6#7 |<-
+ |. 8bc7#7 9#b1|
+ |. 792 5 52 |
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x62bc '押'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 183 .|
+ | #3 21111112 .|
+ | #2 2########2.|
+ | 11#312# #2 #2.|
+ |1#####2# #2 #2.|
+ | 1 #212#11#311#2.|
+ | #2 2########2.|
+ | #692# #2 #2.|
+ | 38##82# #2 #2.|
+ |3#b#2 2#22#422#2.|
+ | 3 #2 2########2.|
+ | #2 3# #2 #3.|
+ | #2 1 #2 .|
+ ->| 1#2 #2 .|<-
+ | 8##1 #2 .|
+ | 262 #3 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x62e9 '择'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 17 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 52 |
+ | #5 4#######a |
+ | #4 16a2227#3 |
+ | 22#5216#2 1c9 |
+ |3#####7 9b19c |
+ | #4 ac#2 |
+ | #4 37#ac#9871|
+ | #acc#93a548b9 |
+ |39##9211 #3 |
+ |3a4#4 ########1 |
+ | #4 111#3111 |
+ | #4 1111#31111 |
+ | #4 #########a |
+ ->| 1#4 #2 |<-
+ | b##3 #2 |
+ | 673 b2 |
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x62ec '括'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 73 1 .|
+ | 1#4 334579c#6 .|
+ | #2 8#b9#9555 .|
+ | 11#31 #4 .|
+ |5####81 #4 1.|
+ | #21#########c.|
+ | #2 2111#51112.|
+ | #38 #4 .|
+ | 3##c 222#512 .|
+ |3###5 #######2 .|
+ |171#2 #1 #2 .|
+ | #2 #1 #2 .|
+ | #2 #1 #2 .|
+ ->| #2 #######2 .|<-
+ | 8##1 #31111#2 .|
+ | 362 71 71 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x6301 '持'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |. 481 192 |
+ |. 6# 2# |
+ |. 5# 213#1121 |
+ |. 5# 3#######4 |
+ |.#####b 2# |
+ |.326#121 2# |
+ |. 5# b########9|
+ |. 5#45222116#222|
+ |. 18#c5 4# |
+ |.8### 9########7|
+ |.745# 224116#221|
+ |. 5# 6#1 5# |
+ |. 5# #6 5# |
+ ->|. 7# 2 6# |<-
+ |. b#b a#c |
+ |. 461 361 |
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x6302 '挂'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 93 72 .|
+ | c2 #2 .|
+ | c2 1211#3111 .|
+ | c2 5#######9 .|
+ |3#####3 #2 .|
+ | #31 #2 .|
+ | #2 8########5.|
+ | #681222322221.|
+ | 37##8 1#3 .|
+ |5#a#2 #2 .|
+ |12 #2 9#######8 .|
+ | #2 1222#3221 .|
+ | #2 #1 .|
+ ->| #223222#32233.|<-
+ | 7b# 9#########b.|
+ | 582 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x6307 '指'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |. 371 262 |
+ |. 5# 3#3 174 |
+ |. 5# 2#226a##c |
+ |.226#222##c9631 |
+ |.b####c2#2 71|
+ |. 5# 2#622225#6|
+ |. 5# 9######a |
+ |. 5#46121111111 |
+ |.37b#b65#######6 |
+ |.c#a# 4# #5 |
+ |.3 5# 4#11111#5 |
+ |. 5# 4#######5 |
+ |. 5# 4# #5 |
+ ->|. 37# 4#######5 |<-
+ |. 9#a 5#11111#6 |
+ |. 23 13 31 |
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x6309 '按'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 51 46 .|
+ | #2 6#1 .|
+ | #2 2 393 1 .|
+ | #2 #########4.|
+ |6####a#3111111#4.|
+ |122#31#2 a9 #4.|
+ | #2 1#6 .|
+ | #23316#111111.|
+ | 2##9#########b.|
+ |3b##5 5c 2#3 .|
+ |5a3#2 c6 7c .|
+ | #2 3a#94#5 .|
+ | #2 29##4 .|
+ ->| #2 27#a7#b3 .|<-
+ | 5c#16c#c5 2b#1.|
+ | 183 184 3 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x633f '挿'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | a3 132 .|
+ | #2 8abc##ca .|
+ | #2 4655# .|
+ | #2 2# .|
+ |2####c5#########.|
+ | 11#3111113#1112.|
+ | #2 2113#1111.|
+ | #45 ########3.|
+ | 26#b5 #2 2# #2.|
+ |1#9#2 ########2.|
+ | 1 #2 #313#11#2.|
+ | #2 ########2.|
+ | #2 #313#11#4.|
+ ->| 14#2 2# .|<-
+ | 3#a 2# .|
+ | 1 14 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x635f '损'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 41 .|
+ | #3 3######7 .|
+ | #2 2#2222#6 .|
+ | 11#32 2# #6 .|
+ |4#####32######6 .|
+ | #2 12111111 .|
+ | #2 21111123 .|
+ | #372######## .|
+ | 4##b2# 31 2# .|
+ |3###5 2# c7 2# .|
+ | 92#2 2# b4 2# .|
+ | #2 2# #2 2# .|
+ | #2 28 5c1128 .|
+ ->| #2 6#49#93 .|<-
+ | 6a#269cc4 3b#9.|
+ | 4a7 195 74.|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x6362 '换'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 17 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 93 1a3 |
+ | #3 7c1 |
+ | #2 2#####b |
+ | 1 #2 1b8 7c1 |
+ |2####c6a 4#2 |
+ | #2 ######## |
+ | #22 #2 #2 2# |
+ | #9c #2 #2 2# |
+ | 17#c6 #2 #1 2# |
+ |2###222#32#323#22|
+ | 82#19cccc##cccc9|
+ | #1 8a#3 |
+ | #1 3#39b |
+ ->| 1#1 6#7 1#b4 |<-
+ | 8## 8##6 3c#c |
+ | 362 281 74 |
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x6372 '捲'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 31 56 .|
+ | #5 a4 a9 6c .|
+ | #2 6c c62#5 .|
+ | #2 332#52523 .|
+ |4####8########b .|
+ | 21#32 99 .|
+ | #2##########2.|
+ | #382c9119a12 .|
+ | 14##b7#1 2#7 .|
+ |2###69########a2.|
+ | 71#cc2#5 884#4.|
+ | #3 #516c7 1 .|
+ | #2 #5 b8141 .|
+ ->| 33#2 #6 1bb .|<-
+ | 6#c1 c######4 .|
+ | 1 11111 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x6383 '掃'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 491 .|
+ | 9# 2#######3 .|
+ | 9# 1 #2 .|
+ |12a#23 #######2 .|
+ |6####c #2 .|
+ | 2# 2#######3 .|
+ | 2#13 .|
+ | 4##6##########.|
+ |29##22# 2# 2#.|
+ |5#8# 16213#11115.|
+ |112# 1#######2 .|
+ | 2# 1# 2# #2 .|
+ | 2# 1# 2# #2 .|
+ ->| 2# 1# 2#38#1 .|<-
+ | b#c 18 2#3b7 .|
+ | 561 2c .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x6392 '排'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 92 a2 a5 .|
+ | #2 #2 #5 .|
+ | #2 1 #1 #5 .|
+ | #22###1 ####2.|
+ |1####911#1 #623 .|
+ | 21#31 #1 #5 .|
+ | #2 #1 #5 .|
+ | #89c##1 #### .|
+ | 5a#a411#1 #612 .|
+ | #8#2 #1 #5 .|
+ | 1 #2221#1 #6121.|
+ | #2b###1 ####7.|
+ | #2 #1 #5 .|
+ ->| 35#2 #1 #5 .|<-
+ | 7#b #2 #6 .|
+ | 12 51 84 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x63a5 '接'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 31 13 .|
+ | #5 4#2 .|
+ | #2 7######## .|
+ |131#33431111324 .|
+ |3#####12c2 3#5 .|
+ | 1 #2 85 a8 .|
+ | #25#########8.|
+ | #cc3218511121.|
+ | 6c#a1 1#6 1.|
+ |3#a#25##########.|
+ | 4 #2 13#3 1#512.|
+ | #2 bc4 9a .|
+ | #2 16b##3 .|
+ ->| 24#2 36cba#93 .|<-
+ | 5#c 7##a4 3b#4.|
+ | 2 4 4 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x63a7 '控'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 1 .|
+ | #3 1#4 .|
+ | #1 111aa1112.|
+ | #1 3#########.|
+ |3####b2# 2#.|
+ |132#323a36 932b.|
+ | #1 1bc 3c#5 .|
+ | #581bc2 8#1.|
+ |169#a5 21 3 .|
+ |2c7#1 1#######7 .|
+ | #1 211#3121 .|
+ | #1 #2 .|
+ | #1 #2 .|
+ ->| #113211#31222.|<-
+ | 4ac 7#########a.|
+ | 192 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x63aa '措'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 17 x 17
+ Advance: 17
+ Offset: 0 x -3
+ _________________
+ |.................|
+ | 53 351 41 |
+ | #3 3#1 #3 |
+ | #2 24#22#321 |
+ | #2 2########8 |
+ |2#####4 2# #2 |
+ | 21#31313#11#3121|
+ | #2 a#########4|
+ | #8b121 111 |
+ |3a##82 #######2 |
+ |4#6#2 #31111#2 |
+ | 2 #2 #2 #2 |
+ | #2 #######2 |
+ | #2 #2 #2 |
+ ->| #2 #2 #2 |<-
+ | 7a#1 #######2 |
+ | 5b6 #5 #3 |
+ | 11 2 |
+ |.................|
+ -----------------
+
+Char 0x63cf '描'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 93 28 84 .|
+ | #2 2# #3 .|
+ | #2 324#22#323.|
+ |132#43#########c.|
+ |3####c1 3# #2 .|
+ | 21#32 4# #4 .|
+ | #2 121111112 .|
+ | #373######## .|
+ |147##92# #2 4# .|
+ |4#a#2 2# #2 4# .|
+ |12 #2 2######## .|
+ | #2 2# #2 5# .|
+ | #2 2# #2 4# .|
+ ->| 77#2 2######## .|<-
+ | 7#9 3#1 5# .|
+ | 14 25 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x63d0 '提'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 17 x 15
+ Advance: 17
+ Offset: 0 x -1
+ _________________
+ |.................|
+ | 172 11111111 |
+ | 1#2 ######## |
+ | #1 #2 2# |
+ |122#221######## |
+ |5#####3#311113# |
+ | #1 #311113# |
+ | #1 ######## |
+ | #4722111111221|
+ | 28##7a#########4|
+ |3#9#1 75 2# |
+ | 1 #1 #4 2####3 |
+ | #1 5#4 2#111 |
+ | 1#1 c7#a5# |
+ ->| 59# 8b 1a##a99a5|<-
+ | 7#71a4 369abb1|
+ |.................|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x63d2 '插'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 74 133 .|
+ | #5 8aaab####1.|
+ | #5 3976#5211 .|
+ | 11#62 #2 .|
+ | ####b#########c.|
+ | #5 2111#31112.|
+ | #5 33#22221.|
+ | #a93b#a#2a##5.|
+ | 39#b45# #2 #4.|
+ |2#9#5 5#11#21 #4.|
+ | 2 #5 5##a#3###4.|
+ | #5 5# #2 #4.|
+ | #5 5# #2 #4.|
+ ->| 13#5 5########4.|<-
+ | 3##3 5# 1#5.|
+ | 52 11 41.|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x63db '換'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 63 51 .|
+ | c6 3#6 .|
+ | c5 b#####8 .|
+ | 1 c5 97 2b7 .|
+ |1############## .|
+ | c5 #236 4 2# .|
+ | c5 #2b81c92# .|
+ | caa#bb 2#b# .|
+ | 39#c5#9156 33# .|
+ |3###412 aa 2 .|
+ | 71#4##########8.|
+ | #41 4#a8 .|
+ | #4 1c91#6 .|
+ ->| 24#437#b 4#b62.|<-
+ | 7##2b#8 3b#6.|
+ | 251 21 3 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x63f4 '援'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | a5 23463.|
+ | #5 3########b.|
+ | #4 66444 3 .|
+ | 21#51 3#14c 5#3.|
+ |1#####3 c31c2c4 .|
+ | #3 #########.|
+ | #32 1 5#1 1.|
+ | 2##a#########a.|
+ |2b##8 1 1#5 .|
+ |3#a#3 8#1 1 .|
+ |14 #3 2######a .|
+ | #3 c##2 2#3 .|
+ | #3 a#45c3c7 .|
+ ->| 1#5c#4 9#c1 .|<-
+ | 78#25558c#7b#b9.|
+ | 8#8 9b6 499.|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x640d '損'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | a3 .|
+ | #2 4####### .|
+ | #2 4# 2# .|
+ | 11#32 4# 2# .|
+ |3#c###44####### .|
+ | #2 11111111 .|
+ | #2 ########1.|
+ | #372#2 1# .|
+ | 4##81#bbbbbb# .|
+ |3#c#2 #2 1# .|
+ | 4 #2 #cbbbbb# .|
+ | #2 #2 1# .|
+ | #2 ########1.|
+ ->| #2 192 77 .|<-
+ | 48#1 38#92 3bc4.|
+ | 2a5 982 75.|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x641c '搜'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 83 84 .|
+ | #2 32#2111 .|
+ | #1 1#a6#2a##1.|
+ | 22#322# #2 1#1.|
+ | #####3##8#2b##1.|
+ | #1 1#11#2 1#1.|
+ | #1 1# #2 1#1.|
+ | #7b4########1.|
+ |18b#961 #2 .|
+ | 83#1 2#######4 .|
+ | #1 4c111a9 .|
+ | #1 b8 7c1 .|
+ | #1 1bbc2 .|
+ ->| 46#1 26b#c8532.|<-
+ | 8#c1a##a4 5b##9.|
+ | 23 272 151.|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x641e '搞'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 15 x 16
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |. 52 64 .|
+ |. #4 7b .|
+ |. #2 #########b.|
+ |.21#312111111122.|
+ |.####c #######2 .|
+ |.11#2 #2 #2 .|
+ |. #13 #######3 .|
+ |. #bc11 1 .|
+ |.7b#81#########6.|
+ |.a7#2 #3111111#5.|
+ |. #2 #23cccc #5.|
+ |. #2 #21# 1# #5.|
+ |. #2 #21# 1# #5.|
+ ->|. #2 #23ccc# #5.|<-
+ |.4c#1 #2 1a#3.|
+ |.13 51 42 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x64c7 '擇'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 192 .|
+ | #21#########2.|
+ | #11# # # #1.|
+ | 1#23# # # #2.|
+ |2##############2.|
+ | 11#212 #2 1 .|
+ | #1 ########9 .|
+ | 1#b61 #2 11.|
+ |29a#73c########a.|
+ |14 #1 1 a7 85 .|
+ | #1 ######### .|
+ | #1 1 1#1 1 .|
+ | #17##########.|
+ ->| 58#1 #1 .|<-
+ | 6b7 1#2 .|
+ | 4 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x64cd '操'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 161 1111111 .|
+ | 1#1 #######1 .|
+ | 1# #1 #1 .|
+ | 22#12 #######1 .|
+ |1####b 2111111 .|
+ | 1# ####1####2.|
+ | 1# 1#32#1#31#2.|
+ | 1#a4#31#1#31#2.|
+ | 4a#a2####1####2.|
+ | #8# #3 .|
+ | 12# 5#########8.|
+ | 2# 1227b#b8111.|
+ | 2# 5#2#4b81 .|
+ ->| 3# 19#3 #31c#7.|<-
+ | 9#a ac2 #3 1a2.|
+ | 35 71 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x64da '據'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 17 x 17
+ Advance: 17
+ Offset: 0 x -3
+ _________________
+ |.................|
+ | 171 2c1 |
+ | 2# 1#ccc#c |
+ | 2# 1# |
+ | 23#23#########9 |
+ |2####4#1 # 14#1 |
+ | 2# 1#cc#ba972 |
+ | 2#13#1 bbbcc2 |
+ | 2##6#1 |
+ | 3a#62#cc###cc#7 |
+ |2c7# 3# 4c8 83 |
+ | 2# 5#796#2991 |
+ | 2# 7a 5b7#c2 |
+ | 2# b8a83b#6b1 |
+ ->| 2#2#316c2#2bc3 |<-
+ | 6b#7b5#924#11b91|
+ | 493 2 3 6#9 |
+ | 12 |
+ |.................|
+ -----------------
+
+Char 0x652f '支'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 174 .|
+ | 2#5 .|
+ | 2#4 .|
+ | 6#############a.|
+ | 1321113#5111222.|
+ | 2#4 .|
+ | 22113#51121 .|
+ | ##########4 .|
+ | 17c bb .|
+ | 2#8 7#2 .|
+ | 5#5 4#5 .|
+ | 7#8#6 .|
+ | 2c#b1 .|
+ ->| 136b#a5c#a6322.|<-
+ |1c###93 5b###5.|
+ | 374 156 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x6539 '改'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 15
+ Advance: 17
+ Offset: 1 x -1
+ _________________
+ |.................|
+ |. 41 |
+ |. 5#a |
+ |.8#####1 a#2 |
+ |.23226# 3#a44455 |
+ |. 4# b####### |
+ |. 4#6#5 9b |
+ |.1#####a93 b8 |
+ |. #6223 6b #6 |
+ |. #4 1#24#2 |
+ |. #4 989b |
+ |. #4 6c 3##5 |
+ |. #7b#9 2##4 |
+ |.2##b3 6#aa#93 |
+ ->|.6#6 48##7 7##c1|<-
+ |. 1 3#81 3a6 |
+ |.................|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x6548 '效'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 17 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 48 a5 |
+ | 4#3 4#4 |
+ | 61 1 9c |
+ | a#######1#82222 |
+ | 222112237######1|
+ | 1c53#51#7 #3 |
+ | bc1 8#891 #2 |
+ | a#2 28c35 2# |
+ |2a57 1#5 4# 5b |
+ | 3c97c #398 |
+ | 1b#6 99#3 |
+ | 9#b1 3#b |
+ | 9#4cb 8#c2 |
+ ->| 5cc2 343b#4b#5 |<-
+ |2c91 2a#b2 a#a |
+ | 65 72 |
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x6551 '救'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 22 13 .|
+ | 7b27 6#2 .|
+ | 7a1c7 8a .|
+ | 138cb278 b71111.|
+ | ########4######.|
+ | 7a 6c c61.|
+ | 4c17a1#1c9 #4 .|
+ | c97a8a4##11#2 .|
+ | 439a6399#33# .|
+ | 8#a64 a66a .|
+ | 1ac8a6#5 7ab6 .|
+ |1c#26a 5#12##1 .|
+ | 83 6b 1 3##3 .|
+ ->| 1 8b 17#79#94.|<-
+ | 1##a29#c3 5#a.|
+ | 771 76 1 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x6557 '敗'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 3 .|
+ | 111111 3#1 .|
+ | 2###### 7a .|
+ | 1# 2# b61111.|
+ | 1# 2# 3#####b.|
+ | 1###### a9 #2 .|
+ | 1# 2#6#b1 #1 .|
+ | 1#cccc#25c22# .|
+ | 1# 2# 944a .|
+ | 1# 2# 5886 .|
+ | 2###### cc1 .|
+ | 161151 9b .|
+ | 8b12ba1 6cc9 .|
+ ->| 5#2 b6ac22cc5.|<-
+ |3#4 3#c2 1b9.|
+ | 3 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x6570 '数'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |. 14 |
+ |. 523#233 #b |
+ |. 993# 98 2#8 |
+ |.1483# a1 5#52222|
+ |.a#######49#bb#c7|
+ |.119a#15 1#6 1#1 |
+ |.19a3#4#66#4 2# |
+ |.ba 48 43aa#13# |
+ |.1 b9 2#26b |
+ |.b#######1 c498 |
+ |.21a8 1c7 89#5 |
+ |. 3#847c 2##1 |
+ |. 158##b3 7#c2 |
+ ->|.247bc5954b#69#71|<-
+ |.a#b6 1c#a2 7#3|
+ |.12 33 2 |
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x6574 '整'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 17 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 27 72 |
+ | 1 3# 1 3#3 |
+ | c#######28b11231|
+ | 1 2# 1#cc###3|
+ | 2#cc#cc#8a 95 |
+ | 2# 1# 1#98b #1 |
+ | 2cc##cc# bba |
+ | 1a8#65 18#a4 |
+ | 4ca2#4#5a#a39#c1|
+ |19b3362324422343 |
+ | c########## |
+ | 82 #2 12 |
+ | #2 #####a |
+ ->| #1 #2 |<-
+ | c#c##cc##ccc##8 |
+ | 222111111111222 |
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x6578 '數'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 71 42 .|
+ | # 1#9 .|
+ | #bb#bb# 6c .|
+ |49#bb#bb#bc#cccc.|
+ | # # 1#3c1 321.|
+ | #bb#bb#98 9c .|
+ | # 3##1 a8 .|
+ | 2#aa#ab#5#2 #6 .|
+ | 2c # # b43#2 .|
+ | 1ba#caaa 897b .|
+ |2ccc#ccc7 4##6 .|
+ | 3#4 2c1 ##1 .|
+ | 26abc4 7##b1 .|
+ ->| 39c9#77#43c#6.|<-
+ |1a#b6 3b#5 1b9.|
+ | 32 34 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x6587 '文'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 15 x 16
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |. 11 .|
+ |. 2#9 .|
+ |. b#1 .|
+ |.76555588555567 .|
+ |.#cccccccc##cc# .|
+ |. 2 b9 .|
+ |. bb #7 .|
+ |. 5#3 4#3 .|
+ |. ca ac .|
+ |. 4#64#5 .|
+ |. 8#ca .|
+ |. 5##7 .|
+ |. 3a#88#c51 .|
+ ->|.47c#b3 3b##ca2.|<-
+ |.9#a4 39#9 .|
+ |. 2 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x65ad '断'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 15 x 16
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |. 3 .|
+ |. 1 2#11 224691.|
+ |.2#6b1# a7c#ca83.|
+ |.2#2#3#1#2c6 .|
+ |.2# b4#69 b7 .|
+ |.2#123#12 b82223.|
+ |.2#7c##cc4b#####.|
+ |.2# b# b7 #31.|
+ |.2# 59#76 c6 #2 .|
+ |.2#1c4#3#3#5 #2 .|
+ |.2#992# 51#4 #2 .|
+ |.2#312# 4#1 #2 .|
+ |.2# 151 ab #2 .|
+ ->|.3######7#6 #2 .|<-
+ |. 211114#c #2 .|
+ |. 193 92 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x65b0 '新'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |. 161 |
+ |. #5 3468c7 |
+ |.5#######3#b8754 |
+ |.127324531#2 |
+ |. 1#7 7c #2 |
+ |.1 75 c3 1#2 1 |
+ |.b#######4######1|
+ |.1 2# 1#21#31 |
+ |.1 2# 11# #2 |
+ |.8#######3# #2 |
+ |. 132# 1 4b #2 |
+ |. 9c3#6c179 #2 |
+ |.5#32# b8c5 #2 |
+ ->|.b647# 25#1 #2 |<-
+ |. 8#b 2#9 #2 |
+ |. 12 31 71 |
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x65b7 '斷'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 15 x 16
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |. 4 41 .|
+ |.514a c1 136a9 .|
+ |.#3a397594#9643 .|
+ |.#7#c7#ca #2 .|
+ |.#22a4 a51#2 .|
+ |.#4c7c6a96#2 .|
+ |.#46375436#####a.|
+ |.########8#1 #2 .|
+ |.#2571 c1 #1 #1 .|
+ |.#5b5b87b3# #1 .|
+ |.#67c17a61# #1 .|
+ |.#29584873b #1 .|
+ |.#8#acabba9 #1 .|
+ ->|.#31 311297 #1 .|<-
+ |.#########2 #2 .|
+ |. 6a c2 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x65b9 '方'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |. 293 |
+ |. 1#8 |
+ |. 97 |
+ |.9ccbbbbbbbbbbc#5|
+ |.57766a#666666772|
+ |. 7# |
+ |. 7#222233 |
+ |. 8####### |
+ |. aa2222ac |
+ |. #7 aa |
+ |. 5#3 c9 |
+ |. bb #7 |
+ |. 6#4 2#6 |
+ ->|. 6#8 1 6#3 |<-
+ |.3a#9 8### |
+ |.1a7 3b93 |
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x65bc '於'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 15
+ Advance: 17
+ Offset: 0 x -1
+ _________________
+ |.................|
+ | 1 44 .|
+ | 5#1 b# .|
+ | #8 2#b4 .|
+ | 1 76 1 8a6b .|
+ |3#######4#3 c9 .|
+ | #2 2c9 2#b4.|
+ | #2 1bc1 2c9.|
+ | ####b26a2 .|
+ | 1#11a8 3a#7 .|
+ | 3# b7 5#8 .|
+ | 5b c6 1 3 .|
+ | 98 #4 ca2 .|
+ | 1#4 1#3 2b#6 .|
+ ->| 8c 8c#2 7#a2 .|<-
+ |1c6 594 5b2 .|
+ |.................|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x65bd '施'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |. 14 185 |
+ |. a#2 3#6 |
+ |. 5#7 7b111122 |
+ |.1 13 b######c |
+ |.######5b 162 1 |
+ |. 1# 93 1#1 |
+ |. 1# 16821#25b1 |
+ |. 2#### #35##b# |
+ |. 3c 1#6##a#21# |
+ |. 4b 2#7#2 #11# |
+ |. 5a 2# #2 #4a# |
+ |. 87 3# #2 #1b5 |
+ |. c4 5c #22#2 291|
+ ->|.5#46bb #4 8#2|<-
+ |.b81#a3 a######7 |
+ |.21 11111 |
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x65e0 '无'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 15 x 14
+ Advance: 17
+ Offset: 1 x -1
+ _________________
+ |.................|
+ |.................|
+ |. 122222222222 .|
+ |. 5########### .|
+ |. c5 .|
+ |. #4 .|
+ |. 1#3 .|
+ |.c#############6.|
+ |.222228c3#422221.|
+ |. b81#2 .|
+ |. 3#32#2 .|
+ |. ab 2#2 .|
+ |. 6#3 3#1 .|
+ |. 6#6 3#1 3c3.|
+ ->|.4a#6 3#623a#2.|<-
+ |.9c3 a####7 .|
+ |.................|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x65e2 '既'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 14
+ Advance: 17
+ Offset: 1 x -1
+ _________________
+ |.................|
+ |.................|
+ |.1c###9 5ac####7 |
+ |.2# 1#11116b221 |
+ |.1# 1#12a25a |
+ |.1#ccc#13# 69 |
+ |.1# 1#15b 87 |
+ |.1# 1#1992a7222 |
+ |.1#####2ccc#cc#8 |
+ |.1# 3#81 |
+ |.1# a8 99# |
+ |.1# 6#6 3#3# |
+ |.1#3bb9c2c61# 3 |
+ |.4##6 3c9 1# 2#3|
+ ->|.4c2 28#9 1#9b#1|<-
+ |. 3b7 6984 |
+ |.................|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x65e5 '日'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 11 x 14
+ Advance: 17
+ Offset: 3 x -1
+ _________________
+ |.................|
+ |.................|
+ |...12222222222...|
+ |...6#########7...|
+ |...6# #6...|
+ |...6# #6...|
+ |...6# #6...|
+ |...6# #6...|
+ |...6#########6...|
+ |...6#1111111#6...|
+ |...6# #6...|
+ |...6# #6...|
+ |...6# #6...|
+ |...6#########6...|
+ ->|...6#2222222#6...|<-
+ |...49 84...|
+ |.................|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x65e7 '旧'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 14 x 14
+ Advance: 17
+ Offset: 2 x -1
+ _________________
+ |.................|
+ |.................|
+ |..35 132222223 .|
+ |..5# 3########1.|
+ |..5# 2# 2# .|
+ |..5# 2# 2# .|
+ |..5# 2# 2# .|
+ |..5# 2#222223# .|
+ |..5# 2######## .|
+ |..5# 2# 2# .|
+ |..5# 2# 2# .|
+ |..5# 2# 2# .|
+ |..5# 2# 2# .|
+ |..5# 2######## .|
+ ->|..5# 3#322224# .|<-
+ |..4a 27 16 .|
+ |.................|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x65e9 '早'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 15
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ |.................|
+ | ########### .|
+ | #622222226# .|
+ | #5 4# .|
+ | ########### .|
+ | #622222226# .|
+ | #5 4# .|
+ | ########### .|
+ | 22115#21123 .|
+ | 4# .|
+ |13222225#2222222.|
+ |4##############a.|
+ | 4# 1.|
+ ->| 4# .|<-
+ | 4# .|
+ | 5#1 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x65f6 '时'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |. 131 |
+ |. 4#4 |
+ |.2#####3 4#2 |
+ |.2#113#3 3#1 |
+ |.2# 2#654447#651|
+ |.2# 2#9########2|
+ |.2#223#3 3#2 |
+ |.2#####33a1 3#1 |
+ |.2# 2#31#8 3#1 |
+ |.2# 2#3 9# 3#1 |
+ |.2# 2#3 22 3#1 |
+ |.2#####3 3#1 |
+ |.2#214#3 3#1 |
+ ->|.3# 172 237#1 |<-
+ |. 2 2##c |
+ |. 52 |
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x660e '明'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 15 x 15
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |.................|
+ |.2##### 2######2.|
+ |.2#113# 1#1114#2.|
+ |.2# 2# 1# 2#2.|
+ |.2# 2# 1# 2#2.|
+ |.2#113# 1######2.|
+ |.2##### 1#1113#2.|
+ |.2# 2# 1# 2#2.|
+ |.2# 2# 2#1113#2.|
+ |.2#223# 3######2.|
+ |.2##### 4c 2#2.|
+ |.2# 2# 8a 2#2.|
+ |.3# 31#6 2#2.|
+ ->|.25 ac 136#2.|<-
+ |. 1a#4 ###1.|
+ |. 14 44 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x6620 '映'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | #6 .|
+ | #2 .|
+ | #cc#3 #2 .|
+ | #42#2 #######2 .|
+ | #2 #2 #32#31#2 .|
+ | #2 #2 #2 #1 #2 .|
+ | #31#2 #21#1 #2 .|
+ | ####2 #22# #2 .|
+ | #2 #4#########a.|
+ | #2 #2111a#b1111.|
+ | #2 #2 3#6#1 .|
+ | ####2 1bb b7 .|
+ | #31#32b#2 4#4 .|
+ ->|1#2 68##4 9#71.|<-
+ | 3bc3 8#5.|
+ | 1 2 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x662f '是'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 111111111 .|
+ | 2#########4 .|
+ | 2#3 1#4 .|
+ | 2#########4 .|
+ | 2#3 1#4 .|
+ | 2#4 2#4 .|
+ | 2#########5 .|
+ | 222222222222222.|
+ | a#############a.|
+ | 1 162 3#1 1.|
+ | 5#4 3#32223 .|
+ | b#2 3###### .|
+ | 5#9b13#1 .|
+ ->| 4#9 ac9#4222234.|<-
+ |2#b 49c######8.|
+ | 21 112331.|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x663e '显'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 17 x 14
+ Advance: 17
+ Offset: 0 x -1
+ _________________
+ |.................|
+ |.................|
+ | ###########4 |
+ | #722222224#3 |
+ | #611111113#3 |
+ | ###########3 |
+ | #5 2#3 |
+ | #722222224#3 |
+ | ###########4 |
+ | 1 #6 6# 1 |
+ | 7a #6 6# ca |
+ | 5#5 #6 6# 4#7 |
+ | bc #6 6# bb |
+ | 471#6 6#1a3 |
+ ->| 22222#727#22222 |<-
+ |3###############2|
+ |.................|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x6642 '時'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 15 x 17
+ Advance: 17
+ Offset: 1 x -3
+ _________________
+ |.................|
+ |. 52 .|
+ |. #3 .|
+ |.##### 111#3111 .|
+ |.#2 1#2#######8 .|
+ |.#2 1# #1 .|
+ |.#2 1#1 #2 11.|
+ |.#2 1#c########a.|
+ |.##### 1#1 .|
+ |.#2 1# 1 1#2 .|
+ |.#2 1#5########7.|
+ |.#2 1# 4 1#1 .|
+ |.#2 1# 1#5 #1 .|
+ |.##### 8b #1 .|
+ ->|.#2 1# 29 #1 .|<-
+ |.92 2 45#1 .|
+ |. b#b .|
+ |. 21 .|
+ |.................|
+ -----------------
+
+Char 0x667a '智'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 15 x 16
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |. 65 .|
+ |. 3#5 .|
+ |. b#####c2bbbb2.|
+ |. 9c1 #1112#22#2.|
+ |. 3413#1122# #2.|
+ |. #cc##cc#2# #2.|
+ |. ac5 2# #2.|
+ |. 19a29c53####2.|
+ |.28#a211461111 .|
+ |. 552########c .|
+ |. 2# 5c .|
+ |. 2########c .|
+ |. 2# 5c .|
+ ->|. 2########c .|<-
+ |. 3# 6c .|
+ |. 2 12 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x6682 '暂'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |. 74 |
+ |.1 3#4 123699 |
+ |.######## ##ba871|
+ |. 2#374 #5 |
+ |. a7 #5 1 ######6|
+ |.5#######3#31#622|
+ |.1211#4 14# #5 |
+ |.9######99a #5 |
+ |.331 #5 7#3 #5 |
+ |. 62 4 73 |
+ |. 5########## |
+ |. 5# 5# |
+ |. 5########## |
+ ->|. 5# 5# |<-
+ |. 5########## |
+ |. 5c 4a |
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x66ab '暫' top
+ Font: #12 FZHeiTi (17)
+ Bitmap: 17 x 17
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ | 4 |
+ | 2#1 12591 |
+ | b#######4#cba94 |
+ | 1# #1 |
+ | 1cbb#bbc1#1 |
+ | 1# 1# 1# ####c#1|
+ | 1#aa#aa# #1 #1 |
+ | 2#bb#bb#1# #1 |
+ | 1# 2c #1 |
+ |3#ccc#cc#78 #1 |
+ | 2# 61 b1 |
+ | 2##cb98757a |
+ | 1#999999a#a |
+ | 1#########a |
+ ->| 1# 3#9 |<-
+ | 1#########9 |
+ | 18 297 |
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x66f4 '更'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 15 x 15
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |.................|
+ |.8#############9.|
+ |.3443334#4333443.|
+ |. 21112#11111 .|
+ |. 1########### .|
+ |. #4 1# 6# .|
+ |. ########### .|
+ |. #5112#1116# .|
+ |. #5112#1116# .|
+ |. 1########### .|
+ |. 163 3# .|
+ |. 9#36a .|
+ |. 6##6 .|
+ ->|. 37#b#b864433.|<-
+ |.ac##b5 26a####7.|
+ |.4851 1341.|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x66ff '替'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 15 x 15
+ Advance: 17
+ Offset: 1 x -1
+ _________________
+ |.................|
+ |. 371 63 .|
+ |. 5c #4 .|
+ |.2###### bb#cbc .|
+ |. 1 69 1 22#323 .|
+ |.1 77 1 # .|
+ |.######c5######9.|
+ |. 1#9 1bc9111.|
+ |. 1b79c32aa b81 .|
+ |.6#91 6 78 2b#a.|
+ |.561######### 73.|
+ |. 1#1 2# .|
+ |. 1######### .|
+ |. 1#1 2# .|
+ ->|. 1######### .|<-
+ |. 1#1 2# .|
+ |.................|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x6700 '最'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 2#cccccccc#2 .|
+ | 1# #1 .|
+ | 1#bbbbbbbb#1 .|
+ | 1# #1 .|
+ | 2#cccccccc#2 .|
+ |1 1 .|
+ |8##############1.|
+ |1 #1 #2 .|
+ | #bbb#2#cccca .|
+ | #1 #28911a7 .|
+ | #bbb#23#22#1 .|
+ | #1 #2 7ba8 .|
+ |45#89a##6 c#5 .|
+ ->|6c9753#34ac7#c8 .|<-
+ | #4c9 187 .|
+ | 51 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x6703 '會' top
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 18
+ Advance: 17
+ Offset: 1 x -3
+ _________________
+ |. 3 |
+ |. 9#9 |
+ |. 1ab4c9 |
+ |. 4c8 19c6 |
+ |. 5b##########a75|
+ |.##b2 4a#a|
+ |.56############ |
+ |. 2# 65 #12812# |
+ |. 2# 49 #198 2# |
+ |. 2############ |
+ |. |
+ |. 2########## |
+ |. 2# 1# |
+ |. 1#cccccccc# |
+ ->|. 1# 1# |<-
+ |. 1########## |
+ |. 2# 3# |
+ |. 1 |
+ |.................|
+ -----------------
+
+Char 0x6709 '有'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |. 1 |
+ |. ac |
+ |.322224#72222222 |
+ |.###############1|
+ |. 3#3 |
+ |. b91111112 |
+ |. a######### |
+ |. 9## 4# |
+ |.1ab5######### |
+ |.bb 4#2222226# |
+ |. 4# 4# |
+ |. 4######### |
+ |. 4#2222226# |
+ ->|. 4# 5# |<-
+ |. 5# a## |
+ |. 25 561 |
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x670d '服'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 17 x 15
+ Advance: 17
+ Offset: 0 x -1
+ _________________
+ |.................|
+ | 21112 699831 |
+ | #ccc# 2###### |
+ | #2 2# 1# 6c |
+ | #2 2# 1# 46ba |
+ | ##### 1# 3#b4 |
+ | #313# 1# |
+ | #2 2# 1######3 |
+ | #2 2# 1#7b25# |
+ | ##### 1#2#17b |
+ | #2 2# 1# c6c6 |
+ | 2# 2# 1# 6##1 |
+ | 5c 2# 1# 2#b |
+ | a9 2# 1#1bbcc4 |
+ ->|3#4 8b# 1#ac11b#6|<-
+ | 9 5a6 2#32 5 |
+ |.................|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x671f '期'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 15 x 16
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |. 1 3 .|
+ |. 3#2 2#21#cccc6.|
+ |.24#213#31#655#5.|
+ |.8#######3#2 #5.|
+ |. 2# 1# #2 #5.|
+ |. 2##### #####5.|
+ |. 2# 1# #322#5.|
+ |. 2# 1# #1 #5.|
+ |. 2##### 1# #5.|
+ |. 2# 1#13#####5.|
+ |.########8c111#5.|
+ |.21731622a8 #5.|
+ |. 4#61bb1#3 #5.|
+ ->|.4#6 19ab 23#5.|<-
+ |.57 4#4 8##3.|
+ |. 2 252 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x672a '未'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 15 x 16
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |. 2#5 .|
+ |. 2#2 .|
+ |. 11 2#2 .|
+ |. 5###########4 .|
+ |. 121113#311231 .|
+ |. 2#2 .|
+ |.11 2#3 11 .|
+ |.7#############7.|
+ |.111119b#b6 111.|
+ |. 3#4#6#1 .|
+ |. 1c72#2ab1 .|
+ |. 2ca 2#21cc4 .|
+ |. 6#b 2#2 2c#b6.|
+ ->|.9#9 2#2 8#2.|<-
+ |. 5 2#2 1 .|
+ |. 181 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x672c '本'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 251 .|
+ | 5#1 .|
+ | 4# .|
+ | 6766669#7777782.|
+ | a#ccc####cbbc#3.|
+ | bb#b4 .|
+ | 3#6#6a .|
+ | a94#1#4 .|
+ | 5#24# 8c1 .|
+ | 3#8 4# 1#a .|
+ | 2cb 4# 5#b1 .|
+ | 5##5547#5569##7.|
+ |6##37ccc#cc#27#8.|
+ ->| 62 4# 2 .|<-
+ | 5# .|
+ | 6# .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x673a '机'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 17 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 13 |
+ | 5# 22222 |
+ | 4c 3####9 |
+ | 4c 2# b7 |
+ | ######82# c7 |
+ | 218c1112# c6 |
+ | cc 2# c6 |
+ | 5#c96 3c #6 |
+ | c8#5#24c #5 |
+ | 7b4# a55b #5 |
+ |1#54# 98 #4 |
+ | 6 4# #4 1#4 |
+ | 4# 7c 1#44a1|
+ ->| 4# 4#5 1#9a# |<-
+ | 5#2c9 9#c5 |
+ | 37 1 |
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x6761 '条'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 17 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 4a4 |
+ | cb1111111 |
+ | 7########3 |
+ | 3#9a 3#8 |
+ | 2#8 99 2ca |
+ | 6b ab#9 |
+ | 27c##b63 |
+ |1469c#c7239###cb1|
+ | b#a62 1#5 47a8 |
+ | 1432223#422221 |
+ | b###########7 |
+ | 1 14 1#3 2 |
+ | 2b#41#35#91 |
+ ->| 7#b2 1#3 5##5 |<-
+ | 7#6 58#3 2b#2 |
+ | 1 8#9 2 |
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x6765 '来'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 162 .|
+ | 2#2 .|
+ | 322224#422223 .|
+ | #############2.|
+ | 4 2#2 4 .|
+ | 6#6 2#2 6#4 .|
+ | 8#32#22#9 .|
+ | 2212513#3272122.|
+ | b#############a.|
+ | 11 1#7#88 1.|
+ | aa2#3#5 .|
+ | ac12#25#7 .|
+ | 3bc2 2#2 5#c73.|
+ ->|1a#b1 2#2 3b#a.|<-
+ | 58 3#2 41.|
+ | 3a2 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x6790 '析'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 15 x 16
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |. 151 .|
+ |. 2#3 224699 .|
+ |. 2#1 5##ca981.|
+ |.113#2114# .|
+ |.c#####74# .|
+ |.218#2114#111112.|
+ |. b#1 4######b.|
+ |. 3##99 5# #5 .|
+ |. 99#5#45# #5 .|
+ |.3#4#1966c #5 .|
+ |.c82#1 8a #5 .|
+ |.b12#1 c6 #5 .|
+ |. 2#1 4#2 #5 .|
+ ->|. 2#12#a #5 .|<-
+ |. 2#1a#1 #5 .|
+ |. 281 2 73 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x679c '果'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 15 x 16
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |. 1 .|
+ |. ########### .|
+ |. #6226#2226# .|
+ |. #5 4# 5# .|
+ |. ########### .|
+ |. #5 4# 5# .|
+ |. #6116#1116# .|
+ |. ########### .|
+ |.1 4#1 .|
+ |.b#############b.|
+ |.1 2c9#6c1 1.|
+ |. 4c84#19b3 .|
+ |. 29#7 4#1 9#a52.|
+ ->|.a#b3 4#1 4c#6.|<-
+ |.14 4#1 4 .|
+ |. 371 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x67b6 '架'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 15 x 15
+ Advance: 17
+ Offset: 1 x -1
+ _________________
+ |.................|
+ |. 94 .|
+ |. #4 121112 .|
+ |.9######73##### .|
+ |.223#22c62# 2# .|
+ |. 69 #42# 2# .|
+ |. 1c3 2#32# 2# .|
+ |.2b9 5a#13##### .|
+ |.aa 3944222222 .|
+ |.1 2#2 1.|
+ |.a#############b.|
+ |.22212bc##a21222.|
+ |. 1ac3#6#91 .|
+ |. 17#a11# 6##73 .|
+ ->|.b#c5 1# 29##b.|<-
+ |.56 2#1 273.|
+ |.................|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x67d0 '某'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | c6 #7 .|
+ | #5 #5 .|
+ | c#############5.|
+ | 321#611111#6221.|
+ | #611111#5 .|
+ | ########5 .|
+ | #5 #5 .|
+ | ########6 .|
+ | 3223#2222 .|
+ | 1 2# 1 .|
+ |1##############5.|
+ | 21113#a#a6 .|
+ | 3c92#1c8 .|
+ ->| 18#7 2# 2cc72 .|<-
+ | 8#c4 2# 18#c1.|
+ | 5 2c 23 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x67e5 '查'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | c5 .|
+ | #5 1 .|
+ | ############## .|
+ | 2111b9#7#61112 .|
+ | 9b1#44#6 .|
+ | 2bc1 #4 4#a3 .|
+ |28#c1 #4 1a#c6.|
+ |4#7##########4a1.|
+ | c61111115# .|
+ | c######### .|
+ | c6 5# .|
+ | c71111116# .|
+ | ########## .|
+ ->| 111 11 .|<-
+ |1############## .|
+ | 21111111111112 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x6807 '标'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 93 .|
+ | #2 1 1 .|
+ | #2 #######2 .|
+ | #2 .|
+ |5#####4 .|
+ |127#31211111112 .|
+ | a#2 9########4.|
+ | 1##31 #2 1 .|
+ | 7a#bb #2 .|
+ |1#4#3#5ab1#2b7 .|
+ |9c #221#6 #26#4 .|
+ |44 #2 8c #2 bc1.|
+ | #22#6 #2 3#8.|
+ ->| #26b 1#2 51.|<-
+ | #2 8#c1 .|
+ | 82 24 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x6837 '样'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |. 271 4 63 |
+ |. 2#1 3#5 2#5 |
+ |. 2# 66 96 |
+ |.213# 18########2|
+ |.9#####2223#5223 |
+ |.238#33 1#3 |
+ |. b# 1212#5222 |
+ |. 2##675#######a |
+ |. 88#5#21 1#3 1 |
+ |.2#3# #4 1#3 |
+ |.a92# 22223#52221|
+ |.b32# 5#########6|
+ |.1 2# 1#3 |
+ ->|. 2# 1#3 |<-
+ |. 2# 1#4 |
+ |. 2b1 2c4 |
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x6838 '核'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 72 53 .|
+ | #3 9b .|
+ | #2 1222582222.|
+ | #2 6#########.|
+ |4#####5 7b1 .|
+ | 25#31 1#4 99 .|
+ | 8#2 1b6 2#5 .|
+ | 1##69 b####a 1 .|
+ | 79#3#73319c13#4.|
+ |2#3#265 1a#2 bb .|
+ |9a #2 5cc2 7#2 .|
+ |22 #2 a#a1 6#6 .|
+ | #2 15 19#9#3 .|
+ ->| #2 17#b2 7#4.|<-
+ | #2 8#c6 97.|
+ | 61 5 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x6839 '根'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |. 382 |
+ |. 4# 2####### |
+ |. 3# 2#22227# |
+ |. 3# 2# 6# |
+ |.b#####3####### |
+ |.1 9# 12# 7# |
+ |. ## 2#22227# |
+ |. 4##b82####### |
+ |. 9a#4#5# 5b 7 |
+ |.2#6# 53# 3# 9#4 |
+ |.aa3# 2# cbc2 |
+ |.843# 2# 6#3 |
+ |. 3# 2#192bc4 |
+ ->|. 4# 4#cc21b#b3|<-
+ |. 4# 8#6 8a |
+ |. 14 12 |
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x683c '格'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 62 351 .|
+ | c4 9#2 .|
+ | c2 #711221 .|
+ | 11c31 6######3 .|
+ |4cc#cc5#b6 89 .|
+ | 2#2 a82#25c1 .|
+ | 7#5351 6##4 .|
+ | bc6c 2a##5 .|
+ | 68c2749#928#c94.|
+ |1#2c25#c51114b#3.|
+ |8a c2 2#######2 .|
+ |23 c2 #2 #2 .|
+ | c2 #2 #2 .|
+ ->| c2 #######2 .|<-
+ | #2 #31111#2 .|
+ | 4 51 51 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x6848 '案'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 17
+ Advance: 17
+ Offset: 1 x -3
+ _________________
+ |.................|
+ |. 62 |
+ |. 1 b8 1 |
+ |. #############6 |
+ |. #5 1c4 #6 |
+ |. 52118c21111133 |
+ |. #############c |
+ |. 2c8 5#3 |
+ |. 48a#b9#4 |
+ |. 2369#ac#95 |
+ |. 8###a661 39##3 |
+ |.1363111#4111371 |
+ |.6##############4|
+ |. 99#9b2 |
+ ->|. 5c8 #27#83 |<-
+ |.28cc4 #2 3b##a1|
+ |.1b6 #2 381 |
+ |. 3 |
+ |.................|
+ -----------------
+
+Char 0x684c '桌'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 15 x 16
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |. 23 .|
+ |. 8b111112 .|
+ |. 7#######3.|
+ |. 11118b11111 .|
+ |. ########### .|
+ |. #511111115# .|
+ |. ########### .|
+ |. #611111115# .|
+ |. ########### .|
+ |.1 4#2 1.|
+ |.##############a.|
+ |.21112c##bb21112.|
+ |. 5ca5#1bc5 .|
+ ->|.26c#6 4# 8#c84.|<-
+ |.7#81 5# 29#4.|
+ |. 1 38 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x689d '條'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 17 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 83 76 |
+ | 2#4 #5 |
+ | 7b 5######2 |
+ | c5 c#211a8 |
+ | 5# c27c89 4#1 |
+ | c# #4#4 b8c4 |
+ | 7## #11 7#b |
+ |2#7# #126cb4ac741|
+ | 61# #2ac62a14bc |
+ | 1# #11113#1112 |
+ | 1# #1a#######c |
+ | 1# #1 211# 1 |
+ | 1# 81 c81# aa |
+ ->| 1# 1a9 1# aa |<-
+ | 1# b9 45# 1c4|
+ | 2# 7#a |
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x68c0 '检'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 72 65 .|
+ | #4 1#c .|
+ | #2 7#63 .|
+ | 1 #32 1#c 71 .|
+ |4##### 8#3 1b1 .|
+ | 3#116#72117#6 .|
+ | 8#27#81####7#3.|
+ | ##567 13 .|
+ | 5b#c81743#1 bb .|
+ | c6#6#4c91#4 #7 .|
+ |7#1#24 8# c74#1 .|
+ |37 #1 5#39a89 .|
+ | #1 283 c4 .|
+ ->| #13221115#23 .|<-
+ | #2########## .|
+ | 1#21 1 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x691c '検'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 17 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 62 44 |
+ | #3 c# |
+ | #2 6ca9 |
+ | 1 #21 3#41c9 |
+ |3#####35#7 2cc61|
+ | 15#23b#68###58#3|
+ | 8#3 53 13#1 1 |
+ | c#c8 2####### |
+ | 5a#5#32#13#13# |
+ | c6#2611# 4c 2# |
+ |7#1#2 2####### |
+ |47 #2 11b#211 |
+ | #2 6cab1 |
+ ->| #2 18#3 bc61 |<-
+ | #31b#c3 8##4|
+ | 82 76 38 |
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x696d '業'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 72161 .|
+ | 88 #22# a7 .|
+ | 3#a #22# 9b2 .|
+ | 114b2#33#3a2111.|
+ |7##############8.|
+ | 6b1 1c4 .|
+ | a9 7b .|
+ | 9############5 .|
+ | #2 .|
+ | 2###########9 .|
+ | 11 #2 1 .|
+ | #############a .|
+ | 2b5#27a1 .|
+ ->| 6#5 #2 7c61 .|<-
+ |28cb3 #3 4c#b1.|
+ | 85 #5 62 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x69cb '構'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 17 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 181 83 181 |
+ | 2# #2 2# 1 |
+ | 1# 7##########1|
+ |134#22 #1 1# 1 |
+ |3bc#b64########5 |
+ | 4# 11#2 2#1 1 |
+ | 8#19##########3|
+ | ##b6 #1 |
+ | 5b#3c1######## |
+ | c5# 21# #1 2# |
+ |7b2# 1#bb#bbb# |
+ | 12# 12# #1 1# |
+ | 2# ###########7|
+ ->| 2# 1# 2# |<-
+ | 2# 2# 57# |
+ | 3#1 3b 9c7 |
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x6a19 '標'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | b3 .|
+ | #2 b########8.|
+ | 2#2 # # .|
+ |111#21##c#c#c## .|
+ |4######2 # # 2# .|
+ | 3#24#2 # # 2# .|
+ | 8#73#cccccc## .|
+ | ##68 .|
+ | 7a#2a1######## .|
+ |1#4#2 .|
+ |aa #28#########a.|
+ |32 #2 22 #2 .|
+ | #2 1b9 #3c8 .|
+ ->| #24c8 #21ab1.|<-
+ | #377 49#1 72.|
+ | 1b2 96 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x6a21 '模'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | b3 2a12b1 .|
+ | #2 1 2# 2# 1.|
+ | #2 ##########.|
+ | #2 213#13#212.|
+ |3#####1 2# 1# .|
+ | 14#313#bccccc# .|
+ | 7#2 1# 2# .|
+ | ##b61#cccccc# .|
+ | 6b#7#3# 2# .|
+ |1#5#263#cc#ccc# .|
+ |7c #2 #3 .|
+ |14 #28cccc##cccb.|
+ | #2 99c4 .|
+ ->| #2 15ba 4#72 .|<-
+ | #3a#c6 3c#b.|
+ | 8124 54.|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x6a5f '機'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 17 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 292 2 2a2 1 |
+ | 2# #62# 5#2 |
+ | 1# 6932# b63 |
+ | 12#13b1b8#892#5 |
+ |5####9c#8 #ab#4 |
+ | 4# 4952#1957 |
+ | 9#b5#9b9ccc9c7 |
+ | 1c#7a4936a55526 |
+ | 88#17 #2 952c1 |
+ |3#3#2########### |
+ |682# 12#3 4b 63 |
+ |212# 6ac5 #5#2 |
+ | 2# c42c29#4 4 |
+ ->| 2# 8b 39cc93#2|<-
+ | 2#3c3 6#912c## |
+ | 3# 2 196 |
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x6a94 '檔'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 1#3 3 #3 23 .|
+ | 1#1 89 #21b7 .|
+ | 1#1 19 #279 .|
+ |6####9b#########.|
+ |124#31a5 12#.|
+ | 6#1 a6######2#.|
+ | b#51 1# 2# .|
+ | 2c#ac11###### .|
+ | 97#2#7 1 11 .|
+ |4#1#112######## .|
+ |77 #1 1# # 2# .|
+ | #1 1######## .|
+ | #1 1# # 2# .|
+ ->| #1 1# # 2# .|<-
+ | #1 1#ccccc## .|
+ | c2 19 19 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x6aa2 '檢'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 17 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 72 8b |
+ | #3 1#b6 |
+ | #2 781c5 |
+ | 1 #21 3a 3#7 |
+ |4#####3b####c#b5 |
+ | 3#24c3 5##2|
+ | 6#2b71 1 34 |
+ | b#538#c#1#### |
+ | 3##6b77 # #1 # |
+ | a8#1887 # #1 # |
+ |5#2#1 7###1#### |
+ |29 #1 96 2#1 |
+ | #1 1#b3 7c2 |
+ ->| #2 a74#4#7#6 |<-
+ | #39c 4c7 2ca |
+ | a243 78 12 |
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x6b20 '欠'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 15 x 16
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |. 2b5 .|
+ |. 8#3 .|
+ |. 1#7 .|
+ |. 8##########1.|
+ |. 4#62222222c9 .|
+ |. 3#9 5#6 3#4 .|
+ |.4#b 5#3 9c .|
+ |.171 6#4 .|
+ |. a#7 .|
+ |. 1#8b .|
+ |. 7c #5 .|
+ |. 5#5 6#5 .|
+ |. 18#7 8#93 .|
+ ->|.69##5 6##c8.|<-
+ |.7#81 28#2.|
+ |. 1 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x6b21 '次'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 262 .|
+ | 6#8 .|
+ | 8a ac .|
+ | 7#6 2#82222221.|
+ | b#1 8########1.|
+ | 4c42#6 ba .|
+ | bb 3c6 4#4 .|
+ | 12a4 3#4 8b .|
+ | c6 4#5 .|
+ | 3#6 6#7 .|
+ | 9# bbc .|
+ | 3#6 3#4c6 .|
+ | b# 1ca 6#5 .|
+ ->|6#7 4cc1 a#93 .|<-
+ | 716b#b1 9##8.|
+ | a7 5a .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x6b22 '欢'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |. 7#5 |
+ |. ab |
+ |.9#####4 #6 |
+ |.12226#14####### |
+ |. 1 7c ab1111c9 |
+ |.2#8 a93#46a33#4 |
+ |. 5#5#5cc 6#159 |
+ |. 7##112 6# |
+ |. cc 8#3 |
+ |. 2##7 a#6 |
+ |. 9b5#3 1#8c |
+ |. 4#3 bb 9c #8 |
+ |.2#9 2 8#4 5#81 |
+ ->|.bc1 3b#6 8##4|<-
+ |. 2 4##5 59 |
+ |. 31 |
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x6b61 '歡'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 17 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 71161 72 |
+ | # # 2#4 |
+ | c########85c |
+ | # # 89111 |
+ | #bb#ccbc c####3|
+ | # ## #5c 5c |
+ | bcbbbbbcc8#3a7 |
+ | b7 c 5b2#2 |
+ | 7#bb#bba 2#3 |
+ | 5## # 4#5 |
+ |1b4#bb#bb3 7c9 |
+ | 1#bb#bb2 c4#1 |
+ | 1# # 4b 89 |
+ ->| 1#cc#ccbc4 1#7 |<-
+ | 1# 5#7 5#6|
+ | 19 57 3 |
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x6b62 '止'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 17 x 15
+ Advance: 17
+ Offset: 0 x -1
+ _________________
+ |.................|
+ | 21 |
+ | #8 |
+ | #6 |
+ | #6 |
+ | 6#3 #6 |
+ | 5#1 #822232 |
+ | 5# ######8 |
+ | 5# #833332 |
+ | 5# #6 |
+ | 5# #6 |
+ | 5# #6 |
+ | 5# #6 |
+ | 5# #6 |
+ ->|2659#655#9555556 |<-
+ |5###############1|
+ |.................|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x6b63 '正'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 14
+ Advance: 17
+ Offset: 0 x -1
+ _________________
+ |.................|
+ |.................|
+ | 4444444444444 .|
+ | b###########b .|
+ | #5 .|
+ | #5 .|
+ | 261 #5 .|
+ | 4#1 #5 1 .|
+ | 4# ######1 .|
+ | 4# #61223 .|
+ | 4# #5 .|
+ | 4# #5 .|
+ | 4# #5 .|
+ | 1 4# #5 1.|
+ ->|1##############c.|<-
+ | 321111111111223.|
+ |.................|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x6b64 '此'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |. 23 62 |
+ |. 6#2 #6 |
+ |. 5# #4 |
+ |. 12 5# #4 |
+ |. 6#15# #4 22 |
+ |. 5# 5# 1#4 4#c1|
+ |. 5# 5###7#58#a3 |
+ |. 5# 5#222##b4 |
+ |. 5# 5# #7 |
+ |. 5# 5# #4 |
+ |. 5# 5# #4 |
+ |. 5# 5# 1#4 |
+ |. 5#28#9#3#4 3b2|
+ ->|.7b###c851#6 7#4|<-
+ |.bc951 #####c |
+ |. 145552 |
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x6b7b '死'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 15 x 14
+ Advance: 17
+ Offset: 1 x -1
+ _________________
+ |.................|
+ |.................|
+ |.122222222222222.|
+ |.5#############8.|
+ |. 3# 4# .|
+ |. 79 4# 11 .|
+ |. c###94# bc1.|
+ |. 6b11#64# 9#3 .|
+ |. 3#4 2#24#9c2 .|
+ |.3#8877b 4#b1 .|
+ |. 7 4c#5 4# .|
+ |. 9b 4# .|
+ |. 8#2 4# 66.|
+ |. 2a#4 4#1 a#.|
+ ->|.5##4 2#####7.|<-
+ |. 51 1111 .|
+ |.................|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x6bd4 '比'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 14 x 15
+ Advance: 17
+ Offset: 2 x -1
+ _________________
+ |.................|
+ |.. 13 .|
+ |..492 4#5 .|
+ |..6#1 3#2 .|
+ |..5# 3#2 .|
+ |..5# 3#2 51 .|
+ |..5#22223#2 8#b .|
+ |..5####83#5b#71 .|
+ |..5# 3##91 .|
+ |..5# 3#3 .|
+ |..5# 3#2 .|
+ |..5# 3#2 .|
+ |..5# 873#2 13 .|
+ |..5#4c#53#2 4#4.|
+ ->|..8##81 2#522b#1.|<-
+ |..8c3 9###c5 .|
+ |.................|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x6c42 '求'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 15 x 16
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |. 6#3 52 .|
+ |. 5# 2c#5 .|
+ |. 4# 7 .|
+ |.9#############9.|
+ |.2222226#6222221.|
+ |. 61 4#7 48 .|
+ |. 2##4 4#b 1cc2 .|
+ |. 1bc15#a4ab1 .|
+ |. 25##6#b .|
+ |. 7#9# c9 .|
+ |. 2bc34# 3#9 .|
+ |.18#b1 4# 5#c4 .|
+ |.2#9 4# 5##6.|
+ ->|. 2 269# 25 .|<-
+ |. c#a .|
+ |. 22 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x6c7a '決'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 15 x 16
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |. 31 .|
+ |. #8 .|
+ |. 9a2 #5 .|
+ |. 5##3221#6112 .|
+ |. 282########3 .|
+ |. #5 4#2 .|
+ |.5c5 #5 4#1 .|
+ |.2b#7 #5 5# .|
+ |. 721111#516#22.|
+ |. 14 c#########b.|
+ |. 3#2 4#c6 .|
+ |. 7c aa7c .|
+ |. b8 5#31#8 .|
+ ->|.2#5 6#8 5#92 .|<-
+ |.8#17c#9 6##a.|
+ |.17 4b4 3a3.|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x6c92 '沒'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 15 x 16
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |. 31 .|
+ |. 4a1 1#722221 .|
+ |. 4##4 1######6 .|
+ |. 1b7 5# 1#4 .|
+ |. 1ca 4#2 .|
+ |.8a3 2c#2 1b#c .|
+ |.4b#7 53 871 .|
+ |. 432########4 .|
+ |. 31 223222ac .|
+ |. 8b aa 2#4 .|
+ |. c8 2#6 b9 .|
+ |. 4#3 5#cb1 .|
+ |. ac 7##91 .|
+ ->|.4#6 38#c63c#a64.|<-
+ |. 7 5#c6 5b#6.|
+ |. 3 3 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x6cc1 '況'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |. 24 |
+ |. 9#9 6#######6 |
+ |. 7#a5#22222#5 |
+ |. 415# #5 |
+ |.22 5# #5 |
+ |.b#91 5# #5 |
+ |.17#9 6#######6 |
+ |. 21 237c2#622 |
+ |. 35 6c #4 |
+ |. 7#1 7a #4 |
+ |. ba a7 #4 |
+ |. 2#6 3#2 #4 1 |
+ |. 8#1 3c9 #4 2c3|
+ ->|.1#a28#b1 #95a#2|<-
+ |.2b54#9 9##c6 |
+ |. 1 |
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x6cd5 '法'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 15 x 15
+ Advance: 17
+ Offset: 1 x -1
+ _________________
+ |.................|
+ |. 2 .|
+ |. 2 3#2 .|
+ |. 4#8 2# .|
+ |. 6#a3546#5556 .|
+ |. 537#cc#ccc#1.|
+ |.13 2# .|
+ |.7#b3 2# .|
+ |. 3b735446#55556.|
+ |. 7ccc#ccccc#.|
+ |. 36 cb .|
+ |. 7c 6#147 .|
+ |. c6 1#4 4#7 .|
+ |. 5#1 b7 18#4 .|
+ ->|.1ca b#c######2.|<-
+ |. 75 68632 3b3.|
+ |.................|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x6ce8 '注'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 15 x 16
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |. 7a .|
+ |. 9b2 7#3 .|
+ |. 3c#3 293 .|
+ |. 295#########9.|
+ |.22 25448#54554.|
+ |.a#4 5#1 .|
+ |.2b#4 5#1 .|
+ |. 19 1 5#1 .|
+ |. 2 ######### .|
+ |. #6 2216#3122 .|
+ |. 4#4 5#1 .|
+ |. 9# 5#1 .|
+ |. #a 5#1 .|
+ ->|.5#6 22226#32223.|<-
+ |.8#12##########c.|
+ |. 4 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x6d3b '活'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 15 x 16
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |. 24 .|
+ |. ba124567ac##4 .|
+ |. 4c#3##bb#531 .|
+ |. 16 5# .|
+ |. 1 5# 1.|
+ |.ab4 ###########.|
+ |.5c#455448#44445.|
+ |. 18 5# .|
+ |. 2 3226#2221 .|
+ |. 1#5 c#######3 .|
+ |. 4#3 c7 3#2 .|
+ |. 7# c7 3#2 .|
+ |. b9 c711114#2 .|
+ ->|.3#5 c#######3 .|<-
+ |.4#2 c8 3#3 .|
+ |. 3 64 151 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x6d4b '测'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 1 .|
+ | 392 222221 1#6.|
+ | 1a#7#####23#1#4.|
+ | 73#1 #22# #3.|
+ | 1#2a2#22# #3.|
+ | 86 1#2#2#22# #3.|
+ |1a#c3#2#2#22# #3.|
+ | 382#2#1#22# #3.|
+ | 1 1#2#1#22# #3.|
+ | 892#2# #22# #3.|
+ | ba2#5c #33# #3.|
+ | 1#6 29a74 13 #3.|
+ | 5#3 3#39#6 #3.|
+ ->| a# 5#7 a#335#3.|<-
+ | 4a2c8 12 4#c1.|
+ | 1 2 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x6d88 '消'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 14 x 16
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |. 4#2 ..|
+ |. 9c2 73 4# 65..|
+ |. 2cc19c 4# 1#8..|
+ |. 17 1c34# 9a ..|
+ |.53 1 4# 11..|
+ |.a#8 ########8..|
+ |. 7#3 #611111#7..|
+ |. 2 #6 #6..|
+ |. 4 ########6..|
+ |. #6 #5 #6..|
+ |. 4#1 #611111#6..|
+ |. 9a ########6..|
+ |.1#6 #5 #6..|
+ ->|.7#1 #5 #6..|<-
+ |.2a #6 5##4..|
+ |. 84 73 ..|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x6df7 '混'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 15 x 16
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |. 1 .|
+ |. ba1 ########5 .|
+ |. 4#c1#622222#5 .|
+ |. 3b2#611111#4 .|
+ |. ########4 .|
+ |.59 #5 #4 .|
+ |.8#c2 #622222#4 .|
+ |. 3c5 ########5 .|
+ |. 1 a2 b4 .|
+ |. 1b1 #2 1#2 88 .|
+ |. 5# ###9#6ba4 .|
+ |. 9a #1 #93 .|
+ |. #5 #244#2 4 .|
+ ->|.5#1 4##c4#3 a6.|<-
+ |.5a 8c5 b###b .|
+ |. 111 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x6e05 '清'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |. a3 |
+ |. 77 2111#31122 |
+ |. 6#a4##cc##cc#8 |
+ |. 3b1 #1 1 |
+ |. 7######## |
+ |.9b3 11 #1 11 |
+ |.2a#4c##########1|
+ |. 5 1 1 |
+ |. 2#######5 |
+ |. b3 2# #4 |
+ |. 1#3 2#ccccc#4 |
+ |. 5c 2# #4 |
+ |. b8 2#######4 |
+ ->|.3#4 2# #4 |<-
+ |.4#1 2# 4c#3 |
+ |. 1 15 84 |
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x6e08 '済'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 17
+ Advance: 17
+ Offset: 1 x -3
+ _________________
+ |.................|
+ |. 31 1a |
+ |. a#5 c4 |
+ |. 8#4########## |
+ |. 2 21c311a712 |
+ |. 6a 4#1 |
+ |.891 b8c4 |
+ |.5##5 6#b1 |
+ |. 197247b#7b#9641|
+ |. 3#c71 5a#c |
+ |. 3 13#2112b32 |
+ |. 3#2 2###### |
+ |. 99 2#1112# |
+ |. 2#2 4###### |
+ ->|. 9a a7 1# |<-
+ |.5#4 9c1 1#1 |
+ |.18 b#3 1#1 |
+ |. 12 2 |
+ |.................|
+ -----------------
+
+Char 0x6e2c '測'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 1 142.|
+ | 8c61##### 2 7#5.|
+ | 7#2#2 2# #39#3.|
+ | 3 #2 2# #29#3.|
+ | #2 2# #19#3.|
+ |26 ##### #19#3.|
+ |3c#5 #2 2# #19#3.|
+ | 83 #2 2# #1a#3.|
+ | ##### #1a#3.|
+ | 74 #2 2# #2a#3.|
+ | a6 #2 2# #2a#3.|
+ | #2 #####1#2a#3.|
+ | 4c 24 32 a#3.|
+ ->| 99 aa 7c1 a#3.|<-
+ |1#5 8b 89 5c#3.|
+ | 31192 a#9 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x6e38 '游'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 161 184 .|
+ | 97 2#7 5#3 .|
+ | 7#9 a8 9b1111.|
+ | 69#####3#####b.|
+ | 2#4225c .|
+ |2c3 #2 b7 1 .|
+ |4##4 #312b7####3.|
+ | 1b5 ####1 3b8 .|
+ | 1 #1 # 1#4 .|
+ | #42# 1#a#####c.|
+ | 3#24c 1#234#422.|
+ | 7# 79 2# 2#3 .|
+ | b9 c5 3c 2#3 .|
+ ->|3#58#17ba 13#3 .|<-
+ |2b2a5 892 9##1 .|
+ | 251 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x6e90 '源'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 15 x 16
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |. 44 1.|
+ |. 9#a4#########a.|
+ |. 5c4# 6# 1.|
+ |. 2# 99 .|
+ |.361 2# c###### .|
+ |.5c#62# c61113# .|
+ |. 512# c###### .|
+ |. 5 2c c5 2# .|
+ |. 2#23c c61113# .|
+ |. 5#15a ####### .|
+ |. 7c 88 1 1# .|
+ |. aa c5 c81# 99 .|
+ |. #73#17#21# 2#6.|
+ ->|.4#4ba5#4 2# 6c.|<-
+ |. 72b4 3 ##c 1.|
+ |. 1 551 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x6e96 '準' top
+ Font: #12 FZHeiTi (17)
+ Bitmap: 17 x 17
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ | 32 11 |
+ | 1b5 cb19a |
+ | 19#5 3#2 29 |
+ | 3 a#######7 |
+ | 97 3#4 2# |
+ | a#9 b#4 1# 1 |
+ | 488###cc#cc# |
+ | 35b5#4 1# |
+ | 8a #ccc#ccc1 |
+ | #4 #513#1111 |
+ | 7# 1##ccccc#7 |
+ | 68 1a4 |
+ | 2111111#a1111112|
+ |3################|
+ ->| c8 |<-
+ | c8 |
+ | c8 |
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x6fc0 '激'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 17 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 27 62 |
+ | 81 6b 2#5 |
+ | 1bc5##### 5# |
+ | b5# 2# aa 1 |
+ | 1#bbb#1#####5|
+ |1b712# 2#6#11#1 |
+ | 4ca3#####c#52# |
+ | 1 2a 4aa45c |
+ | 55b#####57689 |
+ | 9a 1# 5ac5 |
+ | c8 2###c ##1 |
+ | 1#6 5a 4b bc |
+ | 5#3 b5 5a 7cc9 |
+ ->| a# 8c a#67#33#b2|<-
+ | 8b3b2 329#4 4a1|
+ | 2 |
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x700f '瀏'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 5 151.|
+ | 7a1ab89bbb2 2# .|
+ | 19b#1b368#2#2# .|
+ | 2#3cbb3#1#1# .|
+ | 92 ##4893# #1# .|
+ |19#6c45#1b9 #1# .|
+ | 6512cc83 #1# .|
+ | 624b2 6c81#1# .|
+ | bacccccc93#1# .|
+ | #3112# 1#1# .|
+ | 4# ######b2#2# .|
+ | 8b 751# 83 12# .|
+ | #8 4c1#3b2 1# .|
+ ->|5#558aa#bb8137# .|<-
+ | 423742 b#7 .|
+ | 1 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x7063 '灣'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 17 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 1 84 #2 84 |
+ | ab 1c14####1c12 |
+ | 1c79597 757a |
+ | 1 bbb1ccc4#cc1 |
+ | 6 1a74ccc2 839 |
+ |2c9 caa9 ac9# |
+ | 2c57637cbc354261|
+ | 1 a858c 83a66a |
+ | 247536abb39246 |
+ | 88 ccccccccc2 |
+ | b4 1 #2 |
+ | 1#1 ccccccccc2 |
+ | 5b ##cba98b#a |
+ ->| 98 198888888bb |<-
+ | c5 2223b8 |
+ | 1 3##b81 |
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x70b9 '点'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 74 .|
+ | #8 .|
+ | #8111122 .|
+ | #######c .|
+ | #6 .|
+ | 2222#722221 .|
+ | ##########3 .|
+ | #5 3#3 .|
+ | #5 3#2 .|
+ | #62222224#2 .|
+ | 1##########3 .|
+ | 1 2 .|
+ | c9 68 2b4 9#2 .|
+ ->| 4#2 7#1 c9 1cb .|<-
+ |1c9 5#4 8# 6#7.|
+ |291 262 24 61.|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x70ba '為'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 14 671 .|
+ | 3#4 cc1 .|
+ | 6c 4#4 .|
+ | 3 ba .|
+ | 5############4 .|
+ | b5 89 .|
+ | 7########b .|
+ | 2c1 1#5 .|
+ | b3 5# 1.|
+ | 8###########b.|
+ | 5c2 2 4236 8a.|
+ | 5#4c65# a73#298.|
+ |1#82#13#17b b7b6.|
+ ->| 2 7c 2#35# 67#4.|<-
+ | 87 1821346a#1.|
+ | 3#c6 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x7121 '無'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 17 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 6b3 |
+ | 1#7 |
+ | b###########8 |
+ | ac#13#1#31#311 |
+ | bc3# 2# #2 #2 |
+ | 222# 2# #2 #2 |
+ | 7#############3 |
+ | 113#13#1#31#31 |
+ | 2# 2# #2 #2 |
+ | 2# 2# #2 #2 |
+ |3###############2|
+ | 112211112112311 |
+ | 9b 87 b5 6#2 |
+ ->| 4#2 4b 6c bb |<-
+ | 2c6 #11#6 4#6 |
+ | 37 51 2 5 |
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x7136 '然'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 22 63 .|
+ | ac #734 .|
+ | 1#5 1 #67#1 .|
+ | 6####9 #51a3 .|
+ | 1#711a822#51121.|
+ | ab27 c8#######5.|
+ |2b33bc#1 3#a .|
+ | 41 b9 89#3 .|
+ | a#7#2 1#48c1 .|
+ | a#4 1ba 1cc5 .|
+ | 3a#4 6#c1 1b#7.|
+ | ab2 491 35 .|
+ | 86 66 3#3 9#2 .|
+ ->| 2#7 8c #8 2#b .|<-
+ | a#1 5#2 ac 8#4.|
+ | 65 12 12 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x7167 '照'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 15 x 16
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |. 1 .|
+ |.1bbbbc #######7.|
+ |.1#323# 219811#5.|
+ |.1#1 2# 1#4 1#3.|
+ |.1#1 2# ac 58# .|
+ |.1#####6c#3 9c6 .|
+ |.1#213#7#711212 .|
+ |.1#1 2# 4###### .|
+ |.1#1 2# 2# 2# .|
+ |.1#213# 2#1113# .|
+ |.2#####13###### .|
+ |. 15 2 22 4 .|
+ |. 6#23#1 7c 1#8 .|
+ ->|.1#8 #4 3#3 5#3.|<-
+ |.ac1 c8 #8 cc.|
+ |.33 32 31 33.|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x719f '熟'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |. 26 251 |
+ |. 2#2 1 4#1 |
+ |.c####### 3# |
+ |.13222231 4#473 |
+ |. #baab#2###b#3 |
+ |. #2 1# 35b #2 |
+ |. bbbbbb1159 #1 |
+ |.4ccccc619b7 #2 |
+ |. 1 196 1##5c33 |
+ |.478a#c#19a3697a7|
+ |.5987#2 6#2 4##2|
+ |. 49# 1b5 54 |
+ |. 44843 35 3#3 |
+ ->|.1#9 c5 4# 8#1 |<-
+ |.a9 98 #3 c6 |
+ |.1 1 |
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x7247 '片'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 15 x 16
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |. 152 291 .|
+ |. 2#3 2# .|
+ |. 1#1 2# .|
+ |. 1# 2# .|
+ |. 1#22223#2223 .|
+ |. 1###########2.|
+ |. 1# .|
+ |. 1# .|
+ |. 1#22222221 .|
+ |. 2########5 .|
+ |. 4c #4 .|
+ |. 89 #4 .|
+ |. c5 #4 .|
+ ->|. 7# #4 .|<-
+ |.5#7 #4 .|
+ |.49 #5 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x7248 '版'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 3 b3 2 .|
+ | #4 #2 12359#c .|
+ | #1 #2 ##cba983.|
+ | #1 #2 #2 .|
+ | #1 #2 #311112 .|
+ | #####8####### .|
+ | #21111#3#1 7a .|
+ | #1 #2#2 a7 .|
+ | ####3 #2a4 #3 .|
+ | #11#31#1784# .|
+ | 1# #32# 3cb7 .|
+ | 3c #35# b#1 .|
+ | 6a #39a 4##5 .|
+ ->| a7 #6#66#76#92.|<-
+ |3#2 6cc8#5 4#b.|
+ | 3 64 2 11.|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x7279 '特'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 62 .|
+ | #6 #5 .|
+ | 24 #4 222#5121 .|
+ | 7# #4 a######8 .|
+ | 9b2#62 #4 .|
+ | c####a #5 11.|
+ |1#5 #41########a.|
+ |181 #41 #4 .|
+ | 1#c921111#511.|
+ | 49##84########8.|
+ | cb5#4 2 #4 .|
+ | 1 #4 4#4 #4 .|
+ | #4 cb #4 .|
+ ->| #4 2 2#4 .|<-
+ | 1#4 b##2 .|
+ | 72 452 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x72b6 '状'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 15 x 16
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |. 35 43 .|
+ |. 6#1 #a 3 .|
+ |. 5# #62#6 .|
+ |.a9 5# #5 9# .|
+ |.5#65# #5 221.|
+ |. ac6#6########c.|
+ |. 1 6#1213#91111.|
+ |. 1c# 3#a .|
+ |. 1b## 6## .|
+ |.1bc7# 9a#3 .|
+ |.c#35# #7a9 .|
+ |.87 5# 5#25#3 .|
+ |.1 5# cb cc1 .|
+ ->|. 6# 9#3 4#c3.|<-
+ |. 6#7#8 7#7.|
+ |. 7#16 5 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x73fe '現'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 1111111 .|
+ |2#####4#######5 .|
+ | 22#321#5 #4 .|
+ | #2 #5 #4 .|
+ | #2 #######4 .|
+ | 21#42 #5 #4 .|
+ |2#b###1#######4 .|
+ | #2 #5 #4 .|
+ | #2 #5 #4 .|
+ | #212#######5 .|
+ | #b#4 2# #21 .|
+ |3a##83 4b #2 .|
+ |2b5 b6 #2 28.|
+ ->| 1aa #418#.|<-
+ | 8#9 9###5.|
+ | 13 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x7406 '理'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 14
+ Advance: 17
+ Offset: 0 x -1
+ _________________
+ |.................|
+ |.................|
+ | 1######## .|
+ | #####3#31#313# .|
+ | 21#321#2 #2 2# .|
+ | #2 #2 #2 2# .|
+ | #2 ######## .|
+ | 22#42 #2 #2 2# .|
+ | c#### #32#323# .|
+ | #2 1######## .|
+ | #2 #2 .|
+ | #2 222#3222 .|
+ | #6a ######## .|
+ | 59##a #2 .|
+ ->|1#b6111111#31111.|<-
+ | 3 c#########6.|
+ |.................|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x7455 '瑕'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 15
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ |.................|
+ | 32223#####9###3.|
+ | ####a#2 2#222#2.|
+ | 12# #2 2# #2.|
+ | 2# #313#222#2.|
+ | 2# #####9###2.|
+ | c###a#2 111 .|
+ | 13#22###b5####2.|
+ | 2# #312 c25# .|
+ | 2# #2 a389 .|
+ | 2#57####177#4 .|
+ |18b#c7#312 2#c .|
+ | c83 #2 7#b2 .|
+ ->| #215b#5a#8.|<-
+ | #33cb3 86.|
+ | 1 1 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x751a '甚'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |. 5c1 c7 |
+ |. 5# #5 |
+ |.5#############7 |
+ |.1216#11111#6121 |
+ |. 4# #5 |
+ |. 4#######5 |
+ |. 4# #5 |
+ |. 4#######5 |
+ |. 4# #5 |
+ |.2226#22222#6222 |
+ |.###############1|
+ |. c7 64 85 |
+ |. c74bb4 4bc6 |
+ ->|. c726 67 |<-
+ |. c###########3 |
+ |. 221111111122 |
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x751f '生'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 15 x 16
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |. 31 .|
+ |. #9 .|
+ |. 2c6 #6 .|
+ |. 5#4 #5 .|
+ |. ab222#722223 .|
+ |. 3#cccc#cccccb .|
+ |. b9 #5 .|
+ |.9#1 #5 .|
+ |.1312111#61112 .|
+ |. 6########## .|
+ |. 12222#72223 .|
+ |. #5 .|
+ |. #5 .|
+ ->|.4433333#8333342.|<-
+ |.c#############7.|
+ |.1 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x7522 '產'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 32 .|
+ | 111112ca111112.|
+ | 9#############.|
+ | 2bb8425a#6 .|
+ | 25b###c4 .|
+ | 5b952 38c8 .|
+ | 5#############.|
+ | 5#147228611122.|
+ | 5# 98 #3 .|
+ | 5c4##########2.|
+ | 6cb3 #2 11 .|
+ | 891#########2 .|
+ | c6 1 #2 1 .|
+ ->| 6#421111#311112.|<-
+ |2#7a############.|
+ | 1 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x7528 '用'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 15 x 15
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ |.................|
+ | ###########5..|
+ | #5223#4222#4..|
+ | #3 1#2 #4..|
+ | #5112#4112#4..|
+ | ###########4..|
+ | #3 1#3 #4..|
+ | #3 1#2 #4..|
+ | #5223#4222#4..|
+ | ###########4..|
+ | 1#2 1#2 #4..|
+ | 4# 1#2 #4..|
+ | 9b 1#2 #4..|
+ ->| 2#5 1#2 14#4..|<-
+ |1cc 71 9##3..|
+ | 23 363 ..|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x7531 '由'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 13 x 16
+ Advance: 17
+ Offset: 2 x -2
+ _________________
+ |.................|
+ |.. 141 ..|
+ |.. 4#2 ..|
+ |.. 4#1 ..|
+ |..121115#211121..|
+ |..6###########5..|
+ |..5# 4#1 #4..|
+ |..5# 4#1 #4..|
+ |..5# 4#1 #4..|
+ |..5###########4..|
+ |..5#1116#2112#4..|
+ |..5# 4#1 #4..|
+ |..5# 4#1 #4..|
+ |..5#2226#3222#4..|
+ ->|..5###########4..|<-
+ |..5# #5..|
+ |..13 31..|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x7535 '电'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 15 x 16
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |. 96 .|
+ |. #6 .|
+ |. 1 #5 1 .|
+ |. ############ .|
+ |. #5111#61116# .|
+ |. #4 #5 5# .|
+ |. #6222#62226# .|
+ |. ############ .|
+ |. #4 #5 5# .|
+ |. #4 #5 5# .|
+ |. ############ .|
+ |. #6222#6222231 .|
+ |.1#5 #5 a7.|
+ ->|. 1 #8 4#b.|<-
+ |. 9######c3.|
+ |. 111111 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x753b '画'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 14 x 15
+ Advance: 17
+ Offset: 2 x -2
+ _________________
+ |.................|
+ |.................|
+ |..#############3.|
+ |..32222222222221.|
+ |.. 1 .|
+ |..1 #######3 1 .|
+ |..#5 #32#31#21#2.|
+ |..#3 #1 #1 #11# .|
+ |..#3 #######11# .|
+ |..#3 #21#21#11# .|
+ |..#3 #1 #1 #11# .|
+ |..#3 #32#32#21# .|
+ |..#31#######31# .|
+ |..#3 1# .|
+ ->|..#############1.|<-
+ |..321111111113#1.|
+ |.. 1 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x754c '界'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 17 x 15
+ Advance: 17
+ Offset: 0 x -1
+ _________________
+ |.................|
+ | 21111111112 |
+ | 1###########1 |
+ | #4 2#1 1# |
+ | #5113#2112# |
+ | ########### |
+ | #4 2#1 1# |
+ | #5113#3113# |
+ | 1###########1 |
+ | 3aa1 6b51 |
+ |158c95#1 3#a#ca1|
+ | 893 3# 2# 387 |
+ | 6b 2# |
+ | 1c6 2# |
+ ->| 37#a 2# |<-
+ | 3#7 3#1 |
+ |.................|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x7565 '略'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |. 54 |
+ |. c8 |
+ |.2###### 3#####7 |
+ |.1# # 1# a8116#2 |
+ |.1# # 1#4bc b9 |
+ |.1# # 1#93975#2 |
+ |.1# # 1# 2##7 |
+ |.1###### 7##93 |
+ |.1# # 1#6c8327c#5|
+ |.1# # 1#2#####c3 |
+ |.1# # 1# #2117b |
+ |.1###### #1 6b |
+ |.1# 2# #1 6b |
+ ->|.1# 18 #####b |<-
+ |. 3 #3116c |
+ |. 51 24 |
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x756b '畫'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 17 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 61 |
+ | #2 |
+ | 1########### |
+ | #1 2# |
+ |4#cccccc#cccc#c#5|
+ | #cccc#cccc# |
+ | # |
+ | 3cbbbb#bbbbc1 |
+ | 8############## |
+ | |
+ | bcccc#ccc#b |
+ | acbbb#bbbcb |
+ | a6 # 5b |
+ ->| acbbbcbbbbb |<-
+ | |
+ | ############### |
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x7570 '異'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 15 x 16
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |. 21111111112 .|
+ |. ###########2 .|
+ |. #1 #1 #2 .|
+ |. ###########2 .|
+ |. #3111#3111#2 .|
+ |. #3112#3111#2 .|
+ |. ###########2 .|
+ |. 1 2#3 c2 1 .|
+ |. b############4.|
+ |. 3324#322#31221.|
+ |.1 2#2 #2 11.|
+ |.##############8.|
+ |.322259222662222.|
+ ->|. 39#92 7##72 .|<-
+ |. a#a3 7##3.|
+ |. 13 16 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x7576 '當' top
+ Font: #12 FZHeiTi (17)
+ Bitmap: 15 x 17
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |. 13 .|
+ |. 36 4#1 35 .|
+ |. 4#6 3# a#4 .|
+ |. 89 3# 5c2 .|
+ |.a#############b.|
+ |.a8111111111117b.|
+ |.a7 cbbbbbbc5 7b.|
+ |. #422222#2 .|
+ |. #2 #2 .|
+ |. ########5 .|
+ |. ########### .|
+ |. #2 3# 2# .|
+ |. #2 3# 2# .|
+ |. ########### .|
+ ->|. #2 3# 2# .|<-
+ |. ########### .|
+ |. 81 19 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x75b5 '疵'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 5b .|
+ | 1 3#3 1 .|
+ | 1############6.|
+ |3a #511373384221.|
+ |2#2#3 2# 2#1 .|
+ | #5#3421# 2# .|
+ | 72#3#31# 3# 3b1.|
+ | 19#2#21##9#6#92.|
+ |7#b#2#21# 3#b4 .|
+ |682#1#21# 2# .|
+ | 4# #21# 2# .|
+ | 7a #21#47# .|
+ | c61#9b##9# a2.|
+ ->| 4#3##b7412#35#5.|<-
+ |1ca 41 b##b .|
+ | 42 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x767a '発'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |. 2 71 |
+ |. a#####5#49#7 |
+ |. 2111b9 b#c4 7 |
+ |. 8a 4#2 4#3 a#6 |
+ |. 7#bc6 aba#4 |
+ |. 6#a 1c#2 |
+ |. 1bb3222225#a1 |
+ |.7#a1######82c#91|
+ |.57 3#1 5# 196 |
+ |.1 5# 6# 1 |
+ |.a#############1 |
+ |.2111b9116#1112 |
+ |. 3#3 5# |
+ ->|. 2c8 5# b3|<-
+ |.38#a 5#3226#4|
+ |.8#7 1a####9 |
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x767b '登'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 15
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ |.................|
+ | 1 169 791 .|
+ | 9#####a4c7c4 .|
+ | 2#3 #a11ba .|
+ | 99 a8 7a3c92 .|
+ | 2#8#2112cc3 .|
+ | 9c######aa4 .|
+ | 4bb311111127##6.|
+ |3c63########217 .|
+ | 2# #1 .|
+ | 2#222222#1 .|
+ | 2#cccccc#2 .|
+ | a3 3a .|
+ ->| 21117b11b61112 .|<-
+ | ############## .|
+ | 21 11 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x767c '發'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 17 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 42 38 |
+ | ######39a7c61 |
+ | 2511aa 2#9 2b7 |
+ | ba6#1 7#8c61 |
+ | 1##3 9#6 |
+ | 3b###8 #####c83|
+ |1a#a21a7 #33#2a#2|
+ | 55211b53# 2#111 |
+ | 2#bbb5c7 1b#b |
+ | 3# 411111 |
+ | 4####4#####b |
+ | 113# 5a42c3 |
+ | 4c 4c#9 |
+ ->| 119a 18#9#a3 |<-
+ | a#c5a#b3 2b#1 |
+ | 22 24 2 |
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x767d '白'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 13 x 15
+ Advance: 17
+ Offset: 2 x -1
+ _________________
+ |.................|
+ |.. 7a3 ..|
+ |.. #b ..|
+ |.. 4#2 ..|
+ |..5###########5..|
+ |..4#322222223#4..|
+ |..4#1 1#4..|
+ |..4#1 1#4..|
+ |..4#322222223#4..|
+ |..4###########4..|
+ |..4#1 1#4..|
+ |..4#1 1#4..|
+ |..4#1 1#4..|
+ |..4###########4..|
+ ->|..4#322222223#4..|<-
+ |..5#1 1#5..|
+ |.................|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x7684 '的'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 15 x 17
+ Advance: 17
+ Offset: 1 x -3
+ _________________
+ |.................|
+ |. 1 21 .|
+ |. #5 a#2 .|
+ |. 1# #9 .|
+ |. 3b 6#31111.|
+ |.6#####5 c#####7.|
+ |.5#111#48#2 #7.|
+ |.5# #a#5 #6.|
+ |.5# #5315 #5.|
+ |.5#####4 4#4 1#4.|
+ |.5# #4 9c 2#3.|
+ |.5# #4 1913#2.|
+ |.5# #4 4#1.|
+ |.5#####4 5# .|
+ ->|.5#111#4 133a# .|<-
+ |.5c b4 ###b .|
+ |. a#b2 .|
+ |. 1 .|
+ |.................|
+ -----------------
+
+Char 0x76ca '益'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 14
+ Advance: 17
+ Offset: 0 x -1
+ _________________
+ |.................|
+ |.................|
+ | 8a c9 .|
+ | 4#7 4#5 .|
+ | 22219612ba1223 .|
+ | c############# .|
+ | 1 12 4 1 .|
+ | 5##2 7##82 .|
+ | 16c#81 17##a1.|
+ | a#a31111111398 .|
+ | 3##########5 .|
+ | 1#3 #1 #2 #4 .|
+ | 1#3 #1 #2 #4 .|
+ | 1#3 #1 #2 #4 .|
+ ->|123#52#42#43#522.|<-
+ |6##############9.|
+ |.................|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x76d8 '盘'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 15
+ Advance: 17
+ Offset: 0 x -1
+ _________________
+ |.................|
+ | 393 .|
+ | 1 6c .|
+ | #########4 .|
+ | #3132112#3 .|
+ | #2 b#4 1#3 .|
+ | 1 #2 181 1#3 1.|
+ | c#############b.|
+ | 1 3# 5 1#3 .|
+ | a7 3#c 46#3 .|
+ | 2aa 26 8#b1 .|
+ | 3########### .|
+ | #31#21#313# .|
+ | #2 #1 #2 2# .|
+ ->| 32#31#31#313#23.|<-
+ |1###############.|
+ |.................|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x76e3 '監'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 15
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ |.................|
+ | c7 .|
+ | #######a3#3 .|
+ | #5 2# 1 7####a.|
+ | ####### c2 1.|
+ | #5 1#675b1 .|
+ | #######5 2#7 .|
+ | #5 2# 9# .|
+ | ##c##c#7 22 .|
+ | bb78abb6 .|
+ | 5###########1 .|
+ | 5#11#31#315#1 .|
+ | 4# #1 #2 4# .|
+ ->| 4# #1 #2 4# .|<-
+ |5##############c.|
+ |1211111111111112.|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x76e4 '盤'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 17 x 15
+ Advance: 17
+ Offset: 0 x -1
+ _________________
+ |.................|
+ | 67 |
+ | a6 1 |
+ | 2#####2 6###5 |
+ | 1#23 #2 82 a85 |
+ | 1#3c #269 9## |
+ | 22# 1 #2a#####4 |
+ | #######2264 7a |
+ | 2#34 #2 8b1#5 |
+ | 5b4a #2 1cca |
+ | b6 24#238#a#a61|
+ | 5b1 1a7 593 168 |
+ | ###########1 |
+ | #2 b2 2# 1# |
+ ->| #2 b2 2# 1# |<-
+ |1###############5|
+ |.................|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x76ee '目'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 12 x 15
+ Advance: 17
+ Offset: 3 x -2
+ _________________
+ |.................|
+ |.................|
+ |...#bbbbbbbbbc1..|
+ |...#a6666666a# ..|
+ |...#7 7# ..|
+ |...#8 7# ..|
+ |...########### ..|
+ |...#811111118# ..|
+ |...#7 7# ..|
+ |...#811111118# ..|
+ |...########### ..|
+ |...#7 7# ..|
+ |...#7 7# ..|
+ |...#822222228# ..|
+ ->|...########### ..|<-
+ |...#8 8# ..|
+ |...85 57 ..|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x76f4 '直'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 17 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 192 |
+ | 1#1 |
+ | 8#############7 |
+ | 11 2#1 11 |
+ | 2223#22221 |
+ | 1#########5 |
+ | 1#1 #5 |
+ | 1#########5 |
+ | 1#1 #5 |
+ | 1#########5 |
+ | 1#1 #5 |
+ | 1#########5 |
+ | 1#1 #5 |
+ ->| 212#2111111#512 |<-
+ |1###############3|
+ | 211111111111112 |
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x76f8 '相'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 15 x 16
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |. 271 .|
+ |. 3#1 22222221.|
+ |. 3# #######3.|
+ |. 4# #2 1#3.|
+ |.c#####4#2 1#3.|
+ |.1 8# 1 #######3.|
+ |. c#11 #31113#3.|
+ |. 4c#99 #2 1#3.|
+ |. a7#1#4#3 2#3.|
+ |.5c3# 41#######3.|
+ |.#63# #31112#3.|
+ |.8 3# #2 1#3.|
+ |. 3# #42223#3.|
+ ->|. 3# #######3.|<-
+ |. 4# #2 1#3.|
+ |. 27 61 62.|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x770b '看'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 17 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 1 13462 |
+ | b###########b |
+ | 13322#61 |
+ | ########### |
+ | 1119a111112 |
+ | 22111#8111111241|
+ | #ccc##cccccccc#3|
+ | 2#6 |
+ | 1c######### |
+ | 3c## 5# |
+ |18c56#ccccccc# |
+ | 3 6#ccccccc# |
+ | 6# 5# |
+ ->| 6#bbbbbbc# |<-
+ | 7# 6# |
+ | 13 13 |
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x7720 '眠'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 1 .|
+ | #####1#######2 .|
+ | #313# #2 #2 .|
+ | #1 2# #1 #2 .|
+ | #213# #######2 .|
+ | ##### #213#121 .|
+ | #1 2# #1 2# .|
+ | #1 2# #212#1111.|
+ | ##### ########5.|
+ | #213# #2 c2 .|
+ | #1 2# #1 a4 .|
+ | #213# #1 168 .|
+ | ##### #16c2# 6 .|
+ ->|1#2 2#2#b#7 a9#b.|<-
+ | 1 14#91 2##5.|
+ | 3 14 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x77e2 '矢'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 15 x 15
+ Advance: 17
+ Offset: 1 x -1
+ _________________
+ |.................|
+ |. 1 .|
+ |. 4#6 .|
+ |. 8c22222222 .|
+ |. 1#########a .|
+ |. 8c #3 .|
+ |. 3#5 #2 .|
+ |. 1 2#1 1 .|
+ |.6#############3.|
+ |.1322228#9222231.|
+ |. c9#1 .|
+ |. 7#1b9 .|
+ |. 6#5 3#8 .|
+ |. 19#7 6#b4 .|
+ ->|.4a##5 5##c2.|<-
+ |.1b81 195 .|
+ |.................|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x77e5 '知'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 14 x 15
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |.................|
+ |. 8#3 ..|
+ |. ba 121112..|
+ |. 2#511222#####..|
+ |. 8#####72# 2#..|
+ |.2#5 #1 1# 2#..|
+ |.8b #1 1# 2#..|
+ |.2112#2111# 2#..|
+ |.a######c1# 2#..|
+ |. 5b 1# 2#..|
+ |. 9#5 1# 2#..|
+ |. 2#5#8 1#113#..|
+ |. a9 4#92#####..|
+ ->|. 9#1 7b3# 2#..|<-
+ |.b#3 2# 2a..|
+ |.13 ..|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x77ed '短'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 2 .|
+ | 4#4 .|
+ | 7b ########4.|
+ | c6223322222221.|
+ | 3#c#c#111 1 .|
+ | a6 #2 1####### .|
+ | 51 #2 # 2# .|
+ | 212#32 # 2# .|
+ | ######2#22223# .|
+ | 1 4c 12#ccccc# .|
+ | 7c2 42 74 .|
+ | c8#6 8b 2#6 .|
+ | 7c 2c73#5 8b .|
+ ->| 5#5 11 412#3 1.|<-
+ |2c9 4#########.|
+ | 111111112.|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x786c '硬'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 17 x 15
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ |.................|
+ | 322223#########3|
+ | #####42113#1112 |
+ | 2#2 1 2# |
+ | 6c ########2 |
+ | a8 #2 2# #1 |
+ | 3#### #ccc#cc#1 |
+ | b#11# #2 2# #1 |
+ |6b#11# #2 3# 1#1 |
+ |13#11# ########2 |
+ | #21# 92 6b |
+ | #### 5c4c7 |
+ | #12# 7##5 |
+ ->| 1c2 1 4c#b#c9871|<-
+ | 3##81 38b#9 |
+ | 3 |
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x786e '确'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 35 .|
+ | ba .|
+ | ######16#####1 .|
+ | 14#4225#412#6 .|
+ | 6c 8#8118b22 .|
+ | a7 137#######2.|
+ | 1####41# 1# #1.|
+ | 7#31#41#12#11#1.|
+ |1##2 #41#######1.|
+ |8a#2 #41# 1# #1.|
+ |23#2 #42#23#22#1.|
+ | ####44#######1.|
+ | #32#48b 1# #1.|
+ ->| #2 55#6 1#12#1.|<-
+ | 51 7#b 1#5## .|
+ | 3b1 1a2b5 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x789f '碟'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 17 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 52 62 |
+ | 21122 3c1#3 #3 |
+ |1##### 3#1#31#32 |
+ | 13# 14######### |
+ | 69 2# #1 #2 |
+ | c4 2# ####2 |
+ | 7#### 2# 1111 |
+ |4##11# 2#######7 |
+ |38#11# 113#1111 |
+ | 1#11# 2 3# 12 |
+ | #11# ########b |
+ | #11# ab#a2 |
+ | #### 7#3#2b1 |
+ ->| #11c17#32# 4c4 |<-
+ | 81 1a#4 2#1 4b1|
+ | 23 4b1 |
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x78b0 '碰'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 15
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |.................|
+ |. 94 6b1 |
+ |.322223 6b b4 |
+ |.######9########1|
+ |. 58 223#1#323 |
+ |. 95 2# #2 |
+ |. 1#311642# #256 |
+ |. 7###3882# #28a |
+ |.3## #16b2# #2a6 |
+ |.#c# #14#2# #2#3 |
+ |.73# #12#3# #5# |
+ |. 1#1#1 #5# #8b |
+ |. 1###2 2# #21 |
+ ->|. 2# #4 2# #2 |<-
+ |. 3# 1 #########5|
+ |. 2 2111111121|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x78ba '確'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 78 .|
+ | 211111211b7112 .|
+ | #####6########2.|
+ | 12#2 1# 591 #1.|
+ | 5b 1#2c3c3 b2.|
+ | 96 88 56 .|
+ | ####15#######1.|
+ | 6#21#7##1 #2 1 .|
+ |2##11#99# #2 .|
+ |8a#11# 1######a .|
+ |12#11# # #2 .|
+ | #### ######b .|
+ | #21#1 # #2 .|
+ ->| #2 5 #######7.|<-
+ | 1# .|
+ | 17 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x78bc '碼'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 15
+ Advance: 17
+ Offset: 0 x -1
+ _________________
+ |.................|
+ | 11111112.|
+ | 3222232########.|
+ | c#####2# #1 .|
+ | 1#3 2#######3.|
+ | 5b 2# #1 .|
+ | a4 2# #1 .|
+ | 2##cc22#######3.|
+ | 9#2 #22# #1 .|
+ |4a#2 #22####bb#b.|
+ | 1#2 #2 1111222#.|
+ | #2 #26bb49791#.|
+ | ####298#3b1#3#.|
+ | #2 #3#5#3b 85c.|
+ ->| #2 5492 35ab.|<-
+ | 1#c5.|
+ |.................|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x78c1 '磁'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 15
+ Advance: 17
+ Offset: 0 x -1
+ _________________
+ |.................|
+ | 23 67 .|
+ | 9#1 ba .|
+ |1##### 1b21#3 .|
+ | 25#12222226b238.|
+ | 8b bcccccccc#.|
+ | c7 391 76 .|
+ | 4#3 89 c6 .|
+ | c####1c1785a 74.|
+ |7b#11#a86#9c46#7.|
+ |13#11#97ab7c8cb .|
+ | #11# 2#2 2#3 .|
+ | #### 97a3 a94 .|
+ | #11#5a4b94b2#3.|
+ ->| b1 3##958#99#9.|<-
+ | 61 7c745c.|
+ |.................|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x793a '示'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 15 x 15
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |.................|
+ |. 32222222223 .|
+ |. ########### .|
+ |. 1 .|
+ |. .|
+ |.322222222222222.|
+ |.c#############a.|
+ |.1 #6 1.|
+ |. #6 .|
+ |. a8 #6 5c1 .|
+ |. 6#5 #6 cb .|
+ |. 3#8 #6 3#9 .|
+ |.2#a #6 8#6.|
+ ->|.6b1 1#6 1a4.|<-
+ |. b##3 .|
+ |. 583 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x7981 '禁' top
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 17
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ | 1 .|
+ | #3 2#1 .|
+ | #2 112# .|
+ |6######78######9.|
+ | 12c#321 3c#b2 .|
+ | a8#5c1 b6#5b .|
+ |2bb #274ab1# bb1.|
+ |7c1 #2 8c22# 2c5.|
+ | 3 1 .|
+ | ##########2 .|
+ | 2111111112 .|
+ |5##############7.|
+ | 1113213#114111 .|
+ | 18#a 2# 4#a2 .|
+ ->|29#c4 13# 2b#7 .|<-
+ | 65 b#b 87 .|
+ | 23 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x79bb '离'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 15 x 16
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |. 381 .|
+ |.3222222#6222232.|
+ |.##############7.|
+ |. 251 83 .|
+ |. c538c9c714#1 .|
+ |. #536babb44# .|
+ |. #5472 444# .|
+ |. ########### .|
+ |. 21114c21112 .|
+ |.2############6 .|
+ |.1#4119a12611#5 .|
+ |.1#3 6b 2#6 #5 .|
+ |.1#3 #cc#ba#3#5 .|
+ ->|.1#3 431 41#5 .|<-
+ |.2#3 c#4 .|
+ |. 2 33 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x79cd '种'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 31 .|
+ | 258c3 2#3 .|
+ | a###953 1#1 .|
+ | 233# 112#2121.|
+ | 1# 3#######5.|
+ |1######5# 1# c5.|
+ | 1 6#112# 1# c5.|
+ | c#121# 1# c5.|
+ | 69#8b1# 1# c5.|
+ | 2#3#1c3#######5.|
+ |1c81# 2#12#21#5.|
+ | a 1# 17 1# 52.|
+ | 1# 1# .|
+ ->| 2# 1# .|<-
+ | 2# 1#1 .|
+ | 3 171 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x79f0 '称'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 15
+ Advance: 17
+ Offset: 1 x -1
+ _________________
+ |.................|
+ |. 1 56 |
+ |.3357b#8 bc1 |
+ |.7#c#7441#6 |
+ |. 2#1 5######a |
+ |. 2#1 b92222c6 |
+ |.bcc#cc5#21924#1 |
+ |.229#3237 1# 47 |
+ |. c#53 1 1# |
+ |. 6c#9c aa1#2c3 |
+ |.1#7#2b4#51# 9b |
+ |.ab2#1 6# 1# 1#7 |
+ |.b42#11#7 1# 8#2|
+ |.1 2#16#1 1# 27 |
+ ->|. 2#1 1178# |<-
+ |. 3#2 b#9 |
+ |.................|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x79fb '移'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 182 .|
+ | 136a#3 7#2 .|
+ | 7###8532######2.|
+ | 23# 1c9222c9 .|
+ | 1 3# 1aa58 8c1 .|
+ | ######2 2cb#3 .|
+ | 1 7#11 6#c2 .|
+ | c# 8##b#7 .|
+ | 4##757a4a#3123.|
+ | bb#8#2 9#####9.|
+ | 7#4#173a#4 3#3.|
+ |2#53# 9c3a5 b8 .|
+ | 4 3# 4#ba .|
+ ->| 3#1 135a#7 .|<-
+ | 4#14##b71 .|
+ | 2 2 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x7a0b '程'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |. 267 |
+ |.5ac#b82####### |
+ |.264#1 #62226# |
+ |. #1 #5 5# |
+ |. #1 #72227# |
+ |.8#####2####### |
+ |.114#21 |
+ |. a#825#ccccc#4 |
+ |. 4b#9b1225#2231 |
+ |.1c5#27 3#1 |
+ |.ab #1 4#######1 |
+ |.83 #1 214#212 |
+ |. #1 3#1 |
+ ->|. #1 2115#2122 |<-
+ |. #12#########1|
+ |. 181 |
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x7a0d '稍'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 15 x 16
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |. 162 c5 1 .|
+ |.59b##b4#2 #2 aa.|
+ |.3b##31 ba #24#5.|
+ |. 2# 5a #2a7 .|
+ |.113#12 #2 .|
+ |.8#####3#cc#cc#6.|
+ |. 5# #62222#4.|
+ |. c#1 #4 #4.|
+ |. 5c#c7 #######4.|
+ |.1c6#4#2#51111#4.|
+ |.ab2# 71#4 #4.|
+ |.932# #######4.|
+ |. 2# #51111#4.|
+ ->|. 2# #4 #4.|<-
+ |. 2# #5 a##4.|
+ |. 16 62 473 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x7a2e '種'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 15
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ |.................|
+ | 25891223469c5 .|
+ |4#c#852bb9#9654 .|
+ | 1 #1 #1 .|
+ | #11#########7.|
+ |8#####2 #1 1 .|
+ | 4#1 3#cc#ccc# .|
+ | 9#922#aa#bab# .|
+ | 29#6b2# #1 2# .|
+ | 94#2#5# #1 2# .|
+ |4c #123######## .|
+ |b5 #1 #1 .|
+ |3 #1 cccc#cccc .|
+ ->| #111 #2 .|<-
+ | #2a#########8.|
+ | a2 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x7a31 '稱'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 17 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 2 1355 |
+ |257a##6bbc####c1 |
+ |2c9#4 77672 22 |
+ | #2 a13# a9 |
+ | #21 7a b46c1 |
+ |7#####4 5 9264 |
+ | 2#5 2######## |
+ | 8#c53# #2 2# |
+ | 1##6c4# #1 2# |
+ | a8#263######## |
+ |8#1#213# #2 2# |
+ |65 #2c##########3|
+ | #2 2# 2# |
+ ->| #2 2# 2# |<-
+ | #2 2# 9c# |
+ | 92 17 572 |
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x7a7a '空'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 15 x 15
+ Advance: 17
+ Offset: 1 x -1
+ _________________
+ |.................|
+ |. 13 .|
+ |. 8#3 .|
+ |. 222224#8222221.|
+ |.3#############4.|
+ |.3#2 #4.|
+ |.3#3 5#7 193 1c5.|
+ |. 7#81 3a#a2 .|
+ |. 4bc4 3b#81.|
+ |.1a91 89 .|
+ |. 3#########3 .|
+ |. 2224#3222 .|
+ |. 3#2 .|
+ |. 3#2 .|
+ ->|.1222224#3222221.|<-
+ |.8#############8.|
+ |.................|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x7a81 '突'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 15 x 15
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |.................|
+ |. 1c8 .|
+ |. 321111ac111231.|
+ |. #############2.|
+ |. #5 51 62 2#2.|
+ |. b43b#9 2b#b7a2.|
+ |. 4b#922a4 59#6 .|
+ |. 62 3#27#23 .|
+ |. 5# 71 .|
+ |.3##############.|
+ |. 22222b9#211112.|
+ |. 3#3aa .|
+ |. 5#7 2#b3 .|
+ ->|.148c#6 2b#b85.|<-
+ |.3#c71 5b#3.|
+ |. 2 1 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x7acb '立'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 15 x 14
+ Advance: 17
+ Offset: 1 x -1
+ _________________
+ |.................|
+ |.................|
+ |. 9c .|
+ |. 6#3 .|
+ |. 262 .|
+ |.3############# .|
+ |. 4333333334334 .|
+ |. 33 #9 .|
+ |. cb 2#7 .|
+ |. 7#2 5#1 .|
+ |. 3#6 9a .|
+ |. #a #6 .|
+ |. 9# 3#2 .|
+ |. 581 8b .|
+ ->|.22222222#722222.|<-
+ |.##############b.|
+ |.................|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x7ad9 '站'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 15 x 16
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |. 31 .|
+ |. 2a2 #3 .|
+ |. #7 #1 .|
+ |.2219812 #31111.|
+ |.#######2 #####a.|
+ |.3333333 #1 .|
+ |. a4 7c1 #1 .|
+ |. b7 9a #1 .|
+ |. 99 b61######5 .|
+ |. 8a #21#5222#5 .|
+ |. 7a3c 1#3 #5 .|
+ |. 6912#3 #5 .|
+ |.579c##7#3 #5 .|
+ ->|.##b8521######5 .|<-
+ |.2 1#5222#5 .|
+ |. 61 62 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x7aef '端'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |. 5 |
+ |. 6b 39 2# 71 |
+ |. 3#2 3# 2# 1#2 |
+ |. 82 3# 2# 1#1 |
+ |.######5#######2 |
+ |.11114211 11 |
+ |. 98 c6#########3|
+ |. 7a #12113b1112 |
+ |. 4c2# 48 |
+ |. 3#5a ########3 |
+ |. 1b87 #1 # # #2 |
+ |. a63#1 # # #2 |
+ |.69b##6#1 # # #2 |
+ ->|.bc84 #1 # # #2 |<-
+ |. #2 8#2 |
+ |. 41 35 |
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x7b14 '笔'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 15 x 16
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |. 1 32 .|
+ |. 1#9 cb1 .|
+ |. 8c1 4#41121.|
+ |. 3#####8b#####5.|
+ |.2#71#618#21#3 .|
+ |.89 8a2c5 95 .|
+ |. 22334568ac#9 .|
+ |. a##cc#b987651 .|
+ |. 11 1#4 123 .|
+ |. cc##c#####cb .|
+ |. 21 #5 123 .|
+ |.8bc####cc#####2.|
+ |.55211 #621 6 .|
+ ->|. #4 #7.|<-
+ |. #821239#4.|
+ |. 6#####b7 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x7b2c '第'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 15 x 16
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |. 95 68 .|
+ |. 5#3 #7 .|
+ |. 1##ccc78#####a.|
+ |.1ba b617#2 a6 .|
+ |.4b1 45 73 35 .|
+ |. 5########### .|
+ |. 111111#3113# .|
+ |. 21111#3113# .|
+ |. 2########### .|
+ |. 2# #2 .|
+ |. 2###########c .|
+ |. 1116b#31115b .|
+ |. 19b1#2 1199 .|
+ ->|. 27#9 #2 7##5 .|<-
+ |.6#c4 #2 141 .|
+ |. 4 192 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x7b46 '筆'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 15 x 17
+ Advance: 17
+ Offset: 1 x -3
+ _________________
+ |.................|
+ |. 51 52 .|
+ |. 8c2 3#1 .|
+ |. 4#####8b######.|
+ |.4#43#2 79 7a .|
+ |.94 412c1 13 .|
+ |. c#########2 .|
+ |.1 2# #2 1.|
+ |.##cccc##ccc####.|
+ |. 1# #2 .|
+ |. b#########3 .|
+ |. 1# .|
+ |. 8###########4 .|
+ |. 1# .|
+ ->|.a#############a.|<-
+ |. 1# .|
+ |. 2# .|
+ |. 3 .|
+ |.................|
+ -----------------
+
+Char 0x7b49 '等'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 1a7 b7 .|
+ | 8#3 4#2 .|
+ | 4#####6b#####a.|
+ | 3#81#719c24#422.|
+ |1c9 aa183 #7 .|
+ | 1 213#2 32 .|
+ | ########### .|
+ | 2# 1.|
+ | ##############b.|
+ | 3222222222#3223.|
+ | 211111111#312 .|
+ | 3ccccccccc#cc#2.|
+ | a8 #2 .|
+ ->| 6#5 #2 .|<-
+ | 4 9a#1 .|
+ | 8b6 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x7b56 '策'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 15 x 16
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |. a7 a9 .|
+ |. 7#41214#51121.|
+ |. 3#####6c#####8.|
+ |.2#84#1 9b 5# .|
+ |.7b #7193 1#6 .|
+ |.1222424#3224221.|
+ |.6#############6.|
+ |. 21113#11122 .|
+ |. ########### .|
+ |. #5 7#4 5c .|
+ |. #5 3##c129c .|
+ |. 723#7#8b4b6 .|
+ |. 5#62# ac3 .|
+ ->|. 3a#5 2# a#94 .|<-
+ |.7#c2 2# 6##3.|
+ |. 5 2# 13 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x7b80 '简'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 45 94 .|
+ | c7 4#3 .|
+ | 9#####3b#####9.|
+ | 7#34# 18c16c .|
+ |4c3 27 293 181 .|
+ | 8a cccccccc6 .|
+ | 2#33222222#6 .|
+ | #673 #6 .|
+ | #5 ###### #6 .|
+ | #5 #2 1# #6 .|
+ | #5 #cccc# #6 .|
+ | #5 #2 1# #6 .|
+ | #5 ###### #6 .|
+ ->| #5 1#6 .|<-
+ | #5 b##5 .|
+ | b5 8c91 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x7b97 '算'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 692 4a3 .|
+ | 4#91221c91112 .|
+ | 5#c#cbca#c####4.|
+ |7#8 87 8a1 88 .|
+ | 3 cccccccccc2 .|
+ | #32222222#2 .|
+ | #bbbbbbbb#2 .|
+ | #2 #2 .|
+ | #bbbbbbbb#2 .|
+ | #2 #2 .|
+ | 1##########3 .|
+ |1 #2 #21 1.|
+ |a##############6.|
+ ->| 9a #2 .|<-
+ | 58cb1 #2 .|
+ | 5b5 1b2 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x7ba1 '管'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 15 x 16
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |. 43 173 .|
+ |. 2#8111 ac31111.|
+ |. b####b7######a.|
+ |.ab a8 4c3 88 .|
+ |.52 35 c9 26 .|
+ |.##############5.|
+ |.#521111111111#5.|
+ |.b4#########2 #5.|
+ |. #2 #2 .|
+ |. #2 #2 .|
+ |. #########2 .|
+ |. ##########2 .|
+ |. #2 4#1 .|
+ ->|. #2 4#1 .|<-
+ |. ##########2 .|
+ |. #2 4#2 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x7bad '箭'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 15 x 16
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |. 96 93 .|
+ |. 5#5 4#31112.|
+ |. 3######9c##cc#.|
+ |.4#9 8b 4# 3#2 .|
+ |.58 3a 766362 .|
+ |.1 2c6 2#3 1.|
+ |.###############.|
+ |.221111111112642.|
+ |. 2######1#4 #3 .|
+ |. 1# 2#1#2 #2 .|
+ |. 1######1#2 #2 .|
+ |. 1# 2#1#2 #2 .|
+ |. 1######1#2 #2 .|
+ ->|. 1# 2#151 #2 .|<-
+ |. 2# 5a# 7a#2 .|
+ |. 2a 4a6 7b6 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x7c21 '簡'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 17 x 17
+ Advance: 17
+ Offset: 0 x -3
+ _________________
+ |.................|
+ | 44 64 |
+ | 3#8 6#51111 |
+ | 4######9####cc#1|
+ |8#7 2c17#5 2b4 |
+ |36#####21###### |
+ | 3#a #2 #2 2# |
+ | 3##cc#2 #cccc# |
+ | 3#9 #2 #2 2# |
+ | 3#####3 ###### |
+ | 3#9 cccccc2 2# |
+ | 3#8 #2 #1 2# |
+ | 3#7 #cbbb#1 2# |
+ | 3#6 #2 #1 2# |
+ ->| 4#9 #cccc#2 2# |<-
+ | 4#a 159# |
+ | 5#9 b#8 |
+ | 12 11 |
+ |.................|
+ -----------------
+
+Char 0x7c7b '类'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 15 x 16
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |. 2b3 1 .|
+ |. 7c4 1#1 2#9 .|
+ |. 9#31# 1ca1 .|
+ |. 3 1# 16 .|
+ |.8#############8.|
+ |.11 2c7#141 11.|
+ |. 3c81#3#c6 .|
+ |. 28#7 2#1 7#c4 .|
+ |.1ac4 281 2b5 .|
+ |.11 5#1 .|
+ |.##############a.|
+ |.21 1cab1 11.|
+ |. ac aa1 .|
+ ->|. 27cc2 1b#731 .|<-
+ |.7###7 7###6.|
+ |. 84 168 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x7cfb '系'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 14 x 15
+ Advance: 17
+ Offset: 2 x -2
+ _________________
+ |.................|
+ |.................|
+ |.. 13479a .|
+ |..aabbc####cba4 .|
+ |..68757#9 .|
+ |.. 6#81 1b8 .|
+ |.. 3ab3 3cc5 .|
+ |.. b#cc###7 .|
+ |.. 2215ca2 a7 .|
+ |.. 27c93 6#a1 .|
+ |..7###c#####c#b1.|
+ |..264221#5 29 .|
+ |.. 66 #4 76 .|
+ |.. 6#8 #4 7#a1 .|
+ ->|..8#7 #4 4#c1.|<-
+ |..76 8##3 37 .|
+ |.. 363 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x7d20 '素'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 15 x 16
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |. 181 .|
+ |. 1 2# 12 .|
+ |. ############b .|
+ |. 1 2# 11 .|
+ |. 3###########3 .|
+ |. 2# 1 1.|
+ |.##############b.|
+ |.1 16c71 51 1.|
+ |. 26cb555a#6 .|
+ |. 9b977bc623 .|
+ |. 49a5 6#6 .|
+ |. 1b###c#cbba#5 .|
+ |. 7682 #2 2 73 .|
+ ->|. 4bc5 #26#b61 .|<-
+ |.5cc6 14#2 17##2.|
+ |. 5 4#9 4 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x7d22 '索'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 14 x 17
+ Advance: 17
+ Offset: 2 x -3
+ _________________
+ |.................|
+ |.. 5b2 .|
+ |.. 221117#211121.|
+ |..3############5.|
+ |.. 5# .|
+ |..c#############.|
+ |..ca1114c611117#.|
+ |..ca 5#92 33 7#.|
+ |..235a#6 3##412.|
+ |.. 1#######71 .|
+ |.. 21 4c913c3 .|
+ |.. 4aa3 9#3 .|
+ |.. 8###########1.|
+ |.. 135 5# 1416 .|
+ ->|.. 2a#7 5# 7#a2 .|<-
+ |..8#b3137# 4c#6.|
+ |..35 ##b 191.|
+ |.. 32 .|
+ |.................|
+ -----------------
+
+Char 0x7d30 '細'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 181 .|
+ | 6#2 2111112 .|
+ | c5 2#######2.|
+ | 6a 4#4# #2 #1.|
+ | 4c1 b71# #2 #1.|
+ | cbacb 1# #2 #1.|
+ | 323#2 1# #2 #1.|
+ | 1c5731#######1.|
+ | 1b7 4c2#11#31#1.|
+ | 9#bcbc8# #2 #1.|
+ | 251 22# #2 #1.|
+ | 927491# #2 #1.|
+ | 3c #1#3# #2 #1.|
+ ->| 78 #298#######1.|<-
+ | c4 a323# 1#2.|
+ |16 17 61.|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x7d42 '終'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 17 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 57 a9 |
+ | b9 #5 |
+ | 3#11 4#####c |
+ | b5 ab a#2 c7 |
+ | 79 6#24c88 5c |
+ |3####61#51c6c5 |
+ | 3 89 5 5#a |
+ | 5c181 5c9#a3 |
+ | 4#2 a96cc5 2b#b2|
+ |1###ca#67184 58 |
+ | 53 151 7#b4 |
+ | 696678 1 19b |
+ | a6592# 5#82 |
+ ->| #24b #4 3a#a3 |<-
+ |5b 27 3 3c#3 |
+ | 4 |
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x7d44 '組'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 17 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 381 |
+ | 9a ####### |
+ | 2#142 #31113# |
+ | a5 bb #2 2# |
+ | 6a15#3 #2 2# |
+ |1##b#8 ####### |
+ | 2 4c #2 2# |
+ | c461 #2 2# |
+ | 79 96 #2 2# |
+ | 6#67ac #2 2# |
+ | ##a76#3####### |
+ | 241234 #2 2# |
+ | 4#3a59 #2 2# |
+ ->| 892c b2#31113#11|<-
+ |1#419 8#########7|
+ |14 |
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x7d4c '経'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 77 1 .|
+ | #8 c######2.|
+ | 5c 21 1c511a9 .|
+ | c4 ac 79 3#1 .|
+ | 79 3#3 1#6c5 .|
+ |3#aac7 6#a .|
+ | 857c21149#8cb73.|
+ | c3a9##a3 17#b.|
+ | 98 5c42 #4 1.|
+ | a#c#c#3 #2 .|
+ | 563 4 c######3.|
+ | 582a1# 211#311 .|
+ | 982# c2 #2 .|
+ ->| b5 # 94 #2 1.|<-
+ |1#3 5 7########.|
+ |15 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x7d50 '結'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 17
+ Advance: 17
+ Offset: 0 x -3
+ _________________
+ |.................|
+ | 13 1a3 .|
+ | 6#2 1#1 .|
+ | c5 1#1 1.|
+ | 5a 799########.|
+ | b11#81212#3122.|
+ |1ab9ca 1#1 .|
+ | ca8c1 1323#3222.|
+ | 94 6#######9.|
+ | 88 88 .|
+ | b#bcc#42###### .|
+ | 863 752#1113# .|
+ | 31365 1# 2# .|
+ | 3#4a4c 1# 2# .|
+ ->| 7a2c #51# 2# .|<-
+ | #52# 752###### .|
+ |2a 3 2# 3# .|
+ | 3 2 .|
+ |.................|
+ -----------------
+
+Char 0x7d55 '絕'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 15 x 16
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |. 581 .|
+ |. ba 9####### .|
+ |. 5c1 115#319b .|
+ |. c41936#744c7 .|
+ |. 8818cb#6 8#a1 .|
+ |.7####434 1 .|
+ |.26397 #######1.|
+ |. 4b53 #32#24# .|
+ |. 2c16b #21#13# .|
+ |.3#cc##5#33#34# .|
+ |.1852 42#######1.|
+ |. 43959 #2 .|
+ |. b5c3#2#2 44.|
+ ->|.1#1a575#5 1ac.|<-
+ |.59 21 7#####c3.|
+ |. 1111 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x7d71 '統'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |. 33 35 |
+ |. 9c1 7#2 |
+ |. #5 2223a4222 |
+ |. 6b 78#########1|
+ |.1#3 c5 3a1 |
+ |.a#9b9 1c6 26 |
+ |.344c1 2b4 b5 |
+ |. b495c#bcc###1 |
+ |.19937b45#33# a4 |
+ |.7##b9#2 #11# |
+ |.11 15 1# 1# |
+ |.3#1#3c 3c 1# |
+ |.6c c1c289 1# 5 |
+ ->|.99 b366#3 1# 2#2|<-
+ |.94 1 7#6 c##a |
+ |. 44 11 |
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x7d93 '經'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 17 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 21 |
+ | 9c 221111121 |
+ | 1#3 ########7 |
+ | 98 62 35 3 4 |
+ | 3c 2#6 aa1#54#2 |
+ |2#a9c9 5c179 c4 |
+ | 957c 1#31#26b |
+ | 1c47 7b 8a a9 |
+ | b6 a6 c71#41#4 |
+ | 9#abc#163131131 |
+ | 3531 65#######5 |
+ | 363377 2# |
+ | 7a583c 2# |
+ ->| b64b 92 2# |<-
+ |3#127 c########2|
+ |26 111111111 |
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x7d9a '続'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 17 x 17
+ Advance: 17
+ Offset: 0 x -3
+ _________________
+ |.................|
+ | 41 |
+ | 8a1 1#2 |
+ | #6 ######### |
+ | 5c 682111#2112 |
+ | b5 b91211#212 |
+ | 7b 4c 1####### |
+ |2####3 1 |
+ | 7752######### |
+ | 59 88#3111113# |
+ | 8#ab#c826817217 |
+ | c96338 8b #2 |
+ | 126 9a #2 |
+ | 79782# c7 #2 |
+ ->| 965b #14#3 #2 3 |<-
+ | c44b 46#8 #42c5|
+ |2c1 8#8 b##b1|
+ | 2 |
+ |.................|
+ -----------------
+
+Char 0x7dad '維'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |. 691 4b427 |
+ |. c8 8#12#5 |
+ |. 5c 41 c7 64 |
+ |. c3 cc4######## |
+ |.8927#2a#313#112 |
+ |.#ca#74##1 2# |
+ |.1 7b 98#######5 |
+ |. 2#262 #213#111 |
+ |. b7 99 #1 2# |
+ |.b#9b##1#2 2#111 |
+ |.9a753c4#######5 |
+ |. 42264 #2 2# |
+ |.4c3a5a #2 2# 1 |
+ ->|.791# c1########2|<-
+ |.b5 4 #2 1 |
+ |. a2 |
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x7db2 '網'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 5a1 .|
+ | a9 #########.|
+ | 1#11 #2111213#.|
+ | 77 #6#14b 892#.|
+ | 2c 5b1#1 #3c22#.|
+ | c97b2 #2 34a 2#.|
+ | 7796 #7#####2#.|
+ | 2917 #1 b2 2#.|
+ | 6c44b5#7cc##c2#.|
+ | ac9778#1 # 2#.|
+ | 36427 #1 # 2#.|
+ | 6985b2#11###a2#.|
+ | 966878#1 2#.|
+ ->| #35813#1 2#.|<-
+ |3a #1 a##.|
+ | 61 573.|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x7dda '線'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |. 64 77 |
+ |. #8 c5 |
+ |. 5b 2####### |
+ |. b2583# 2# |
+ |. 57 b92# 2# |
+ |.3#c#c 1####### |
+ |.386c3 2# 2# |
+ |. 96922####### |
+ |. 8a199 3#5 21 |
+ |.2#b97####8#b4#8 |
+ |. 3111313#3c9c3 |
+ |. 98#5b 982c2#3 |
+ |. #4b4a6c12c 6#6 |
+ ->|.4# b52c325c 8a1|<-
+ |.78 9#a |
+ |. 22 |
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x7de8 '編'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 15 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 52 83 ..|
+ | #8 79 ..|
+ | 4c ########..|
+ | b41#2#2 2#..|
+ | 89 89 #2 2#..|
+ |2#bcc1 ########..|
+ | 33b4 #2 ..|
+ | 7877 ########..|
+ | 6c34#3## c c1#..|
+ |1##a7abb# c c #..|
+ | 42224c6#######..|
+ | 86#3#c1# c c #..|
+ | b3c2c2 # c # #..|
+ ->|1# b472 # a a1#..|<-
+ |48 2 1# 1#c..|
+ | 3 51..|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x7df4 '練'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 78 #6 .|
+ | #6 #2 .|
+ | 7b 27########c.|
+ | 2#21#71 #31111.|
+ |2c95ab ######## .|
+ | b78#2 #3 #233# .|
+ | b73 #95#2#6# .|
+ | 7b c2#39#8a2# .|
+ | 7#86c6#2 #212# .|
+ | 797579######## .|
+ | 33418 1c##3 .|
+ | 978696 97#6c2 .|
+ | #4694b7b #27c3 .|
+ ->|3# 3719#2 #2 9#8.|<-
+ |24 6c2 #2 75.|
+ | b2 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x7e2e '縮'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 17 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 31 63 |
+ | b9 7a |
+ | 2#1 2#########2|
+ | 96 86# 1 #1|
+ | 4b 2#391#311117 |
+ | #aa#5 6a#####a |
+ | 6479 c2 3#1 |
+ | 2c1 8# 6a |
+ | 2c3 c5## #####2 |
+ | 9cabc92# #1 #1 |
+ | 3 1311# #####1 |
+ | 3b48861# #1 #1 |
+ | 772a3a1# #1 #1 |
+ ->| c32# a1# ##cc#1 |<-
+ |17 1 1# #2 #2 |
+ | 6 3 3 |
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x7e41 '繁'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |. 99 8b |
+ |. 3#ccccc#1#5 |
+ |.1c5 8#cc#c6|
+ |.8bcabaa#4## # |
+ |. 3c a31#37a54b |
+ |.8c#bcbc#c64ba5 |
+ |. 69 a53c #c |
+ |. 7#ccc##c3bacc72|
+ |. 17c53a8218c1|
+ |. 38c86678#b2 |
+ |. 49767aa6273 |
+ |. 147973234a#7 |
+ |. c#b999#8666#5 |
+ ->|. 186 1#17731 |<-
+ |. 39#7245#139#b3 |
+ |. 271 bb8 16 |
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x7e7c '繼'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 26 93 38 .|
+ | 6#2 #32b1 87 .|
+ | 98 #293b6a2c .|
+ | #284#6#c9ac#6 .|
+ | 591#2#21a223b3 .|
+ |2c477 #176b2a3c1.|
+ |5bb#1 #3cac9bab6.|
+ | 66 ##cbba99ca.|
+ | 2b 9 #a9#99cba8.|
+ |2#bac8#28692948 .|
+ | 62 18#7#b4bc#1 .|
+ | 64582#2566 747 .|
+ | c3b68#6#8#9cb#3.|
+ ->|2c #2a#343432143.|<-
+ |46 1 #########c.|
+ | 1.|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x7e8c '續' top
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 18
+ Advance: 17
+ Offset: 1 x -3
+ _________________
+ |. 14 |
+ |. 4c 4b |
+ |. 87 8#########5|
+ |. #22 4b |
+ |. 4a b82bc##a##2 |
+ |.2b64c1 |
+ |.9#b#42#cc#c#cc# |
+ |. 39 1# # # 2# |
+ |. b183ccccccccc |
+ |.2b51883bbbbbbb |
+ |.8##cb#6# 2# |
+ |.161 233#aaaab# |
+ |. #56923#aaaab# |
+ |.3a39583# 2# |
+ ->|.772b2a3ccbbbbb |<-
+ |.c4 3 27#61b95 |
+ |.1 2cb61 5ba |
+ |. 1 |
+ |.................|
+ -----------------
+
+Char 0x7ea7 '级'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 17 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 1 |
+ | 2#6 21111111 |
+ | 9b #######5 |
+ | 3#2 63 #3 3#1 |
+ | 3c4 5#5 #2 7a |
+ | #####7 1#1 b722 |
+ | 541aa 3# 3###7 |
+ | 8b1 5b73 1#4 |
+ | 19c445 79a6 4# |
+ | 5#ba96 b678 99 |
+ | 1#23c2#2 |
+ | 135838b bc9 |
+ |3####b6#3 1a#5 |
+ ->| 941 3#717#b8#a4 |<-
+ | 4#92##8 5##3|
+ | 2 32 4 |
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x7ec4 '组'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 14
+ Advance: 17
+ Offset: 1 x -1
+ _________________
+ |.................|
+ |.................|
+ |. 3a3 1111122 |
+ |. 8c1 4####### |
+ |. 1#4 33#1 5# |
+ |. 88 6#7#1 5# |
+ |.4b c83#43336# |
+ |.bcb#c 3####### |
+ |.332#3 3#1 5# |
+ |. a6 3#1 5# |
+ |. 99 123#32226# |
+ |.8#b##73#cccc## |
+ |.2421 3#1 5# |
+ |. 3643#1 5# |
+ ->|.ac##a64#31116#21|<-
+ |.a94 a#########7|
+ |.................|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x7ed8 '绘'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 15 x 16
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |. 1 45 .|
+ |. 8c2 c# .|
+ |. #7 5#b4 .|
+ |. 5c c85c .|
+ |. c5 aa 7#1 aa .|
+ |.6a 3#45#5 1bc4.|
+ |.a98#86#8#cc#6a8.|
+ |. 6c 4 32221 .|
+ |. 2#3 21 12 .|
+ |. b8363######## .|
+ |.6####1216#3112 .|
+ |.131 c7281 .|
+ |. 1353 8a 1c8 .|
+ ->|.a###c47c2139#2 .|<-
+ |.553 c##cb9#a .|
+ |. 22 56 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x7edc '络'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 581 97 .|
+ | ab1 2#4 .|
+ | 2#3 7#####a .|
+ | 99 681c#226#3 .|
+ | 4#1 c87cb5 c8 .|
+ |1#97ab3#54cab .|
+ | a88#3 3 c#4 .|
+ | 96 5ca9#71 .|
+ | 89 6cb4 4b#b.|
+ | 9#c#a27######64.|
+ | 3532 2#4223#3 .|
+ | 2#2 1#3 .|
+ | 2358c42#2 1#3 .|
+ ->| b##b822######3 .|<-
+ | 43 3#4112#4 .|
+ | 161 52 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x7edf '统'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 17 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 2 82 |
+ | cb 77 |
+ | 3#2 1222562223 |
+ | a8 5######### |
+ | 3#1 73 57 |
+ |1c6 1#8 4#6 21 |
+ |1####9 5#4 9c2 |
+ | 4b 1#cbcc###3 |
+ | 5c1 55#2#2 a5 |
+ | 7#88b7 2# #2 |
+ | 8#9751 3# #2 |
+ | 5b #2 |
+ | 1469cb a7 #2 21 |
+ ->|1##b8638#1 #3 8#1|<-
+ | 3 1c#3 b###9 |
+ | 22 111 |
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x7ee7 '继'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 17 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 1 41 |
+ | ca 1#2 |
+ | 2#3 2#6981# 6c |
+ | 89 2#14c1# b7 |
+ | 4#11#7# 1#3#4# |
+ |1#a7ac3# 1# 2 |
+ | 868#42# #######3|
+ | c7 2# b# 1 |
+ | 99 2# 6b#87 |
+ | 9#79b2# 2#5#3#3 |
+ | a#a962#1bb # 8c |
+ | 2#6#4 # 17 |
+ | 247a#4# 3 1#1 |
+ ->| c##a73#33338334 |<-
+ | 32 3#########2|
+ | 1 |
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x7eed '续'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 15 x 16
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |. 54 2a .|
+ |. bb 2# 1.|
+ |. 1#4 8########.|
+ |. 6b 611 2# 1.|
+ |. b4 ca1 2# 2.|
+ |.6b 4#3a#######8.|
+ |.b###7 53 731#4.|
+ |.325b 7#5#56# .|
+ |. 1c2 8453#3 .|
+ |.2b83525#7 #2 .|
+ |.9##b932552#3223.|
+ |.1 4#ccc#ccc#.|
+ |.1369b4 9a4 .|
+ ->|.c##b83 3bc3cc4 .|<-
+ |.32 8c#91 19#8.|
+ |. 272 61.|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x7f16 '编'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 45 86 .|
+ | ac2 7b 1 .|
+ | 1#5 ######## .|
+ | 7b 6 #311113# .|
+ | c32#7#311113# .|
+ | 9c5aa ######## .|
+ | 789c12# .|
+ | c4 5########2.|
+ | a712a#1 c c #1.|
+ | a#c#9c#1 c c #1.|
+ | 573199########1.|
+ | 353#1 c c #1.|
+ |28a##7 #1 c c #1.|
+ ->| b83 #1 c b3#1.|<-
+ | #2 cc .|
+ | 2 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x7f51 '网'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 14 x 15
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |.................|
+ |. #############..|
+ |. #62222222227#..|
+ |. #5 a5 466#..|
+ |. #6c5 #87 8b5#..|
+ |. #55c4c3#2b65#..|
+ |. #5 bc7 7a#15#..|
+ |. #5 4#2 1#a 5#..|
+ |. #5 4#6 ca 5#..|
+ |. #5 b9#14c#25#..|
+ |. #55b #5c4a95#..|
+ |. #7#5 2ba 5b6#..|
+ |. #66 282 5#..|
+ ->|. #5 239#..|<-
+ |.1#6 3##a..|
+ |. 1 53 ..|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x7f69 '罩'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 1 x -3
+ _________________
+ |.................|
+ |.................|
+ |. 2############2 |
+ |. 2# 2# #1 #2 |
+ |. 2############2 |
+ |. 12 5# 11 |
+ |. 5#######5 |
+ |. 11 5# 11 |
+ |. 3##########2 |
+ |. 2# #2 |
+ |. 2##########2 |
+ |. 2# #2 |
+ |. 3##########2 |
+ |.2111 #61111121|
+ ->|.###############5|<-
+ |.11 #5 |
+ |. #6 |
+ |. 1 |
+ |.................|
+ -----------------
+
+Char 0x7f6e '置'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 15
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |.................|
+ |. ############2 |
+ |. #2 # #1 #2 |
+ |. ############2 |
+ |. 11 67 11 |
+ |. ##cccc##cccc## |
+ |. 84 |
+ |. cbbb#cbbbc |
+ |. #2 2# |
+ |. #bbbbbbbb# |
+ |. #2 2# |
+ |. #bbbbbbbb# |
+ |. #bbbbbbbb# |
+ ->|. #2 2# 1|<-
+ |.c##############a|
+ |.1 |
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x7fa9 '義'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 1#7 aa .|
+ | 5c2 7b1 .|
+ | 8#############5.|
+ | 1 2# .|
+ | 7###########4 .|
+ | 1 2# 1 .|
+ |1##############9.|
+ | 1 136 94 4 .|
+ | ####bb4#4 c8 .|
+ | 1112# #4 57 .|
+ |3##############9.|
+ | 2#1337a 491 .|
+ | 89ac#ca41#8#71 .|
+ ->| 7644# 17##4 55.|<-
+ | 47# a#938#8b6.|
+ | 7c7 11 4cb .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x7ffb '翻'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 23 .|
+ | 136a##4###6###.|
+ | 4a85#17121#111#.|
+ | 791#4a # 11#.|
+ | 261#3118 #3a1#.|
+ | 7#cc#c#3b #2c1#.|
+ | 4a#22 # #1#1#.|
+ | 3b2#5c5a # 81#.|
+ | 4c21# 19 # 4#.|
+ |1b#bb#b#118#17c#.|
+ | # 1# #7#7#581#.|
+ | #bb#b#43 # 1#.|
+ | # 1# #1 # 1#.|
+ ->| #bb#b#167# 58#.|<-
+ | #1 #28a5 9c6.|
+ | 3 1 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x8003 '考'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 15 x 16
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |. 1#3 .|
+ |. #2 8b1 .|
+ |. b#######5#9 .|
+ |. 2222#314#8 .|
+ |.1 #22c9 12.|
+ |.a##############.|
+ |.2221116#7111123.|
+ |. 5#7 .|
+ |. 8########9 .|
+ |. 3bc42#411121 .|
+ |.18#a1 8a 11 .|
+ |.9#6 1######7 .|
+ |. 1 21 2#4 .|
+ ->|. 7# .|<-
+ |. 7ab#9 .|
+ |. 2b96 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x8005 '者'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 17
+ Advance: 17
+ Offset: 0 x -3
+ _________________
+ |.................|
+ | 84 .|
+ | #6 1 .|
+ | 3222#6223 bb .|
+ | #########a#5 .|
+ | 1 #5 8#3 .|
+ | 321111#729#4123.|
+ |3###############.|
+ | 28a4 .|
+ | 7########5 .|
+ | 28## #5 .|
+ |2a#c9# #4 .|
+ | a6 5########4 .|
+ | 5# #4 .|
+ ->| 5# #4 .|<-
+ | 5########5 .|
+ | 6# #6 .|
+ | 2 21 .|
+ |.................|
+ -----------------
+
+Char 0x800c '而'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 15 x 15
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |.................|
+ |.###############.|
+ |.3221112#9111223.|
+ |. 3#5 .|
+ |. 11 6#2 12 .|
+ |. 8############1.|
+ |. 7#11#615#117# .|
+ |. 7# #5 5# 6# .|
+ |. 7# #5 5# 6# .|
+ |. 7# #5 5# 6# .|
+ |. 7# #5 5# 6# .|
+ |. 7# #5 5# 6# .|
+ |. 7# #6 5# 6# .|
+ ->|. 7# b5 4b24a# .|<-
+ |. 8# c#9 .|
+ |. 12 21 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x8010 '耐'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 15 x 16
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |. 84 .|
+ |.211111112 #6 .|
+ |.######### #6 .|
+ |.1 c4 #6 .|
+ |. 1 3c 13######.|
+ |.2#######3211#72.|
+ |.2# #1# #232 #6 .|
+ |.1# # # #2a8 #6 .|
+ |.1# # # #25c #6 .|
+ |.1# # # #23#2#6 .|
+ |.1# # # #2 5 #6 .|
+ |.1# # # #2 #6 .|
+ |.2# #1c1#2 #6 .|
+ ->|.3# 48#1 34#6 .|<-
+ |.3a 4b6 9#c2 .|
+ |. 12 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x8054 '联'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 17 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 21 51 |
+ |155444562#9 4#7 |
+ |3#######27# 8a |
+ | 1#3 4# 3342#421 |
+ | 1#415#1#######7 |
+ | 1##### 2# |
+ | 1#415# 2# |
+ | 1#3 4# 2# 1 |
+ | 1#####6######## |
+ | 1#526# 115#5222 |
+ | 1#3 4#11 8#a |
+ | 2#87b##41#5c7 |
+ |4###aa#2 ab 5#8 |
+ ->| 73 5#3b#3 8#c2|<-
+ | 6#6#5 98 |
+ | 37 2 |
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x806f '聯'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 9a2 1b2 .|
+ |3#####c1#7 69 .|
+ | 3#13#279 a3b2b3.|
+ | 2# 2#5c6978a9a .|
+ | 2####57aa 68#1 .|
+ | 2# 2# 2b17 95b1.|
+ | 2# 2#2c54c8b7c8.|
+ | 2####3c9786754a.|
+ | 2# 2# 1636 .|
+ | 2# 2# # 1#4c #3.|
+ | 2#26#7c12#4b #2.|
+ |4c##b#3#ccc4###2.|
+ |152 2# 794c a2.|
+ ->| 2# 6#24c .|<-
+ | 2#3b#5 4c .|
+ | 1 73 3a .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x80fd '能'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 15 x 16
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |. 4 161 .|
+ |. 6#4 2# 12 .|
+ |. c7182 2# 4c#1.|
+ |. 7a 1bc12#ac61 .|
+ |.7#667a#91#3 51.|
+ |.8ca865992#1 1bb.|
+ |. 1 1 b####4.|
+ |.1###### 2 11 .|
+ |.1#1 2# 2#1 1 .|
+ |.1#cccc# 1# 1ac1.|
+ |.1#1 2# 1#7#a4 .|
+ |.1#1 2# 1#93 .|
+ |.1#cccc# 1# 42.|
+ ->|.1#1 2# 1#112ac.|<-
+ |.1#1 9c# b####4.|
+ |.2c2 6a3 1 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x8111 '脑'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 17 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 3b5 |
+ | 1####1 #c |
+ | #11#11 64 |
+ | #11#1#########a|
+ | #11#13211131122|
+ | ####1 77 #5 |
+ | #11#186#24#3b3 |
+ | #11#1#27aa81#1 |
+ | 1#11#1#2 c#11# |
+ | 2####1#2 a#11# |
+ | 5# 1#1#28b9a1# |
+ | 7c 1#1#8c11#5# |
+ | c8 1#1#21 11# |
+ ->|3#424#1######## |<-
+ |4c 7#c 3211 1#1 |
+ | 1 14 4 |
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x8166 '腦'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 9237 181.|
+ | 2####15b b8 8a .|
+ | 2# #1c34c 5c1 .|
+ | 1# #7a 9a ba1 .|
+ | 1# #1b6 a91ac2.|
+ | 1#### 2#31c4 a9.|
+ | 1# # 388 .|
+ | 1# # ########2.|
+ | 1#### #36 37 #2.|
+ | 2# # #2a9c6 #2.|
+ | 2# # #11#c1 #2.|
+ | 4c # #4b99c2#2.|
+ | 69 # #57 6 #2.|
+ ->| b648# ########2.|<-
+ |3c23c7 #2 #2.|
+ | 3 2 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x81e8 '臨'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 15 x 17
+ Advance: 17
+ Offset: 1 x -3
+ _________________
+ |.................|
+ |. 26 .|
+ |. 21112 9a .|
+ |.2##### 5######c.|
+ |.1# #1 4#5111112.|
+ |.1# #14#8###### .|
+ |.1# #1172# 2# .|
+ |.1#ccc# 1# 2# .|
+ |.1# 2# 1#1113# .|
+ |.1# 2# 2###### .|
+ |.1#ccc# .|
+ |.1# # ####2####.|
+ |.1# # #1 #1#22#.|
+ |.1# # #1 #1#11#.|
+ ->|.2#2#22#2 #1#11#.|<-
+ |.2######cc#1#cc#.|
+ |. #2 c1#22c.|
+ |. 1 1 .|
+ |.................|
+ -----------------
+
+Char 0x81ea '自'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 11 x 16
+ Advance: 17
+ Offset: 3 x -2
+ _________________
+ |.................|
+ |... 251 ...|
+ |... 7#4 ...|
+ |...222bb222222...|
+ |...###########...|
+ |...#6 6#...|
+ |...#6 6#...|
+ |...###########...|
+ |...#711111117#...|
+ |...#6 6#...|
+ |...###########...|
+ |...#722222227#...|
+ |...#6 6#...|
+ |...#722222227#...|
+ ->|...###########...|<-
+ |...#6 7#...|
+ |...84 48...|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x81f3 '至'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 14
+ Advance: 17
+ Offset: 0 x -1
+ _________________
+ |.................|
+ |.................|
+ | 12222222222222 .|
+ | 4#############1.|
+ | 7b4 .|
+ | 3#b1 13 .|
+ | 2c9 7#4 .|
+ | 4#7 19#4 .|
+ | 2###########4 .|
+ | 43325#3 72 .|
+ | 22225#42221 .|
+ | 4##########b .|
+ | 3#2 .|
+ | 3#2 .|
+ ->|3##############c.|<-
+ | 111111111111111.|
+ |.................|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x8207 '與'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 17 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 62 |
+ | 2484#2 1111 |
+ | 6#b85###9###a |
+ | 5b #2 79 |
+ | 3c111#2 1 88 |
+ | 3###4###5###6 |
+ | 2#1139 #3 a5 |
+ | 1###6# #3###4 |
+ | 1#1 2# #2 #3 |
+ | 11#1 2# #1 #2 |
+ |3###############1|
+ | 211127311531112 |
+ | 2a#7 2c#81 |
+ ->| 17#a2 5c#7 |<-
+ | 9#b3 19#7 |
+ | 14 3 |
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x820a '舊' top
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 18
+ Advance: 17
+ Offset: 0 x -3
+ _________________
+ | 24 41 .|
+ | 6b #3 .|
+ |2##############c.|
+ | 15b 63#2 1.|
+ | 2#75 a971 .|
+ | a#ccc##ccccc6.|
+ | 8#4 2# 1 .|
+ | 7##cbbbb#bbbb8 .|
+ |3c5ccbbbb#bbbb8 .|
+ | c4 2# .|
+ | cccccccccccca.|
+ | 15b12 2 .|
+ | 1cccbb5cccc# .|
+ | #cbba abbb# .|
+ ->| #2 2# .|<-
+ | ########### .|
+ | 1#2 2# .|
+ | 3 3 .|
+ |.................|
+ -----------------
+
+Char 0x822a '航'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 17 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | a4 87 |
+ | 1c 6# |
+ | #####2 15 |
+ | #311#3######## |
+ | #2c1#122111122 |
+ | #2b3#1 |
+ | #231#1 ####2 |
+ |3######1 #41#2 |
+ | 1#311#1 #4 #2 |
+ | #2c #1 #3 #2 |
+ | 1# b3#11#2 #2 |
+ | 2# 63#13# #2 |
+ | 5b #16b #2271|
+ ->| 97 15#1c7 #47#2|<-
+ | c3 2#8a#1 a##6 |
+ | 1 34 |
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x822c '般'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 2 .|
+ | 2#3 21121 .|
+ | 35c22 ####5 .|
+ | #####1 #4 #4 .|
+ | #3 # #4 #2 .|
+ | #3# # 4#1 #421.|
+ | #3c #4c9 ###3.|
+ |12#411# 71 132 .|
+ |6###### ##cc## .|
+ | #25 # 6c 9a .|
+ | #1# # 1#41#4 .|
+ | 2# c # 7c8b .|
+ | 5c # c#5 .|
+ ->| a8 34# 29#b#951.|<-
+ |3#3 8#b6#c3 6#c .|
+ | 4 12 5 2 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x82e5 '若'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | b7 6c1 .|
+ | c6 6# .|
+ | ###############.|
+ | 2211#71117#2112.|
+ | #65a36# .|
+ | 1 ca 1 .|
+ | ##############c.|
+ | 32115#511111112.|
+ | 2#9 .|
+ | 2cc32222223 .|
+ | 5########### .|
+ |2a#87# 8c .|
+ | 72 6# 8c .|
+ ->| 6########c .|<-
+ | 7#2222228# .|
+ | 47 59 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x83dc '菜'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 17
+ Advance: 17
+ Offset: 1 x -3
+ _________________
+ |.................|
+ |. 4a2 95 |
+ |.22116#211#71123 |
+ |.9##############1|
+ |.1 5# #5 |
+ |. 26 12877a3 |
+ |. 7######cbba97 |
+ |. 158213a1 84 |
+ |. 2#7 c8 5#3 |
+ |. 6#2 762#5 |
+ |.2112412#a242223 |
+ |.a############## |
+ |.1 a8#aa 1 |
+ |. 1aa #86b2 |
+ ->|. 5ca #8 7#a52 |<-
+ |.4c#7 #8 4c#5 |
+ |. 53 #8 4 |
+ |. 11 |
+ |.................|
+ -----------------
+
+Char 0x8655 '處' top
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 17
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ | 1 .|
+ | #7 .|
+ | #5 1 .|
+ | #######c .|
+ | 1#############1.|
+ | #3 #4 11aa .|
+ | #4ccc#cc##453 .|
+ | #32 #6 6# .|
+ | #2 548#####7 .|
+ | #2 c7 1 1 .|
+ | 1#16###93###2 .|
+ | 2#3#81a53b #2 .|
+ | 4#c8#4# 79 #42 .|
+ | 8b6 7#83#4 b#a .|
+ ->|1#6 1a#c66 221.|<-
+ |a#27#916b######2.|
+ |24 65 24555 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x865f '號'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 17 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 271 |
+ | 2####2 2# 11|
+ | 2#11#2 2#####4|
+ | 2# #2 2# |
+ | 2# #26#######c |
+ | 2ccc#25# 1# 178 |
+ | 15#ab##c31 |
+ |7######5b22#1 b2 |
+ | 87 5a b##8 |
+ | b### 5a 1111 |
+ | 1 3# 792#### |
+ | 3# 972# 1# |
+ | 4c #34c 1# 3 |
+ ->| 34a97c 98 1#3#2|<-
+ | 4#a8#47#1 1##a |
+ | 35 33 1 |
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x87a2 '螢' top
+ Font: #12 FZHeiTi (17)
+ Bitmap: 15 x 17
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |. 21 2 .|
+ |. 32ba 1#2 .|
+ |. b4b62c1c4# b7 .|
+ |.2c #4b63b3b4c1 .|
+ |.235#93 349#82 .|
+ |. 6#36#618b19#5 .|
+ |.8b2 464b1 53 .|
+ |.##############2.|
+ |.#2 2# #1.|
+ |.81 2# 5 .|
+ |. ##########2 .|
+ |. #2 2# #1 .|
+ |. ##########2 .|
+ |. a2 2# 1c5 .|
+ ->|. 2# 5#6 .|<-
+ |.##########cc#6 .|
+ |.4543211 74 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x884c '行'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 3 .|
+ | 6#2 5544456 .|
+ | 4#7 2####### .|
+ | 5#8 .|
+ |4#8 59 .|
+ | 5 2#b211 111.|
+ | bb17########9.|
+ | a#5 23333#7332.|
+ | 9##5 #5 .|
+ |5#4#5 #5 .|
+ | 3 #5 #5 .|
+ | #5 #5 .|
+ | #5 #5 .|
+ ->| #5 #5 .|<-
+ | #5 2##5 .|
+ | 83 76 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x8868 '表'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 15 x 16
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |. 3a4 .|
+ |. 3#3 .|
+ |. 7###########b .|
+ |. 111114#411111 .|
+ |. 22224#42222 .|
+ |. ###########4 .|
+ |. 3#2 .|
+ |.8#############c.|
+ |.122228c8a222322.|
+ |. 5#32#2 8#3 .|
+ |. 8## 9a7#4 .|
+ |. 5cc7# 1##2 .|
+ |.a#a14# 833#c61 .|
+ ->|.15 4#cc3 2a##a.|<-
+ |. a#7 493.|
+ |. 23 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x88ab '被'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 15 x 16
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |. 35 292 .|
+ |. 6#1 2# .|
+ |. 1c4 2# 1.|
+ |. 111113#######9.|
+ |.6####32#13#11#5.|
+ |. 88 2# 2# 2c1.|
+ |. 5b 1# 2# .|
+ |. 4#36a2######7 .|
+ |.6c#ac33ca311#2 .|
+ |.84##a 4a86 5b .|
+ |. #3c8783b b6 .|
+ |. #22 b4 b8# .|
+ |. #2 3# 6#7 .|
+ ->|. #2 b8 5#a#71 .|<-
+ |. #29#5c#7 4##9.|
+ |. b345 83 173.|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x88c5 '装'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 63 182 .|
+ | 4 #3 2# .|
+ | 4#5 #2 113#1111.|
+ | 5#2#23#######7.|
+ | 22#2 2# .|
+ | 15ac#2 113#111 .|
+ |1##7 #2 b###### .|
+ | 4 #318 .|
+ | 2111111#5111111.|
+ | ##############5.|
+ | 1 8#633 4 .|
+ | 19#2 9c 7#6 .|
+ | 16#9# 1cca2 .|
+ ->|4#c32#1962cc51 .|<-
+ | 4 5##a3 8##c5.|
+ | 7c4 17a .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x88dd '裝'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 184 72 .|
+ | 7b 1#b #2 .|
+ | 7b 1#b #2 .|
+ | 7############b.|
+ | 1#a111#3112.|
+ | ######9 11#311 .|
+ | a81#98#####c .|
+ | 28#22##3 .|
+ | 2a4128a#3111111.|
+ |1##############c.|
+ | 3b#3 4 .|
+ | 29b28c3ac6 .|
+ | 15a##2 b#8 .|
+ ->|3##71#24b18#b742.|<-
+ | 3 4##c6 29##6.|
+ | 4a4 3 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x8981 '要'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 15 x 15
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |.................|
+ |.a#############1.|
+ |.22222#32#32222 .|
+ |. #1 #2 .|
+ |. 1########### .|
+ |. 1# #1 #2 1# .|
+ |. 1#11#31#312# .|
+ |. 1#ccccccccc# .|
+ |. 181 .|
+ |.111117c21111111.|
+ |.c##############.|
+ |. a7 ab .|
+ |. 7#c848c1 .|
+ ->|. 39##b61 .|<-
+ |.1879b#c615a#b5 .|
+ |. 9a852 285 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x898b '見'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 11111111111 .|
+ | ##########6 .|
+ | #5 #5 .|
+ | #5 #5 .|
+ | ##########5 .|
+ | #5 #5 .|
+ | ##########5 .|
+ | #5 #5 .|
+ | #5 #5 .|
+ | ##########6 .|
+ | 116#11#2 .|
+ | 9a #2 .|
+ | 3#3 #2 85.|
+ ->| 16#6 #5113#8.|<-
+ |1b#b3 8####b1.|
+ | 33 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x8996 '視'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 29 .|
+ | c7 #######2 .|
+ | 7b #31111#2 .|
+ |222222 #31111#1 .|
+ |8####6 #######1 .|
+ | 1c #2 #1 .|
+ | 94 #######1 .|
+ | 4#b7 #31111#1 .|
+ | 3##6#3#2 #2 .|
+ |5#5#274#######2 .|
+ |55 #2 16b1#31 .|
+ | #2 89 #2 .|
+ | #2 3#5 #2 32.|
+ ->| #2 6#a #3 9a.|<-
+ | #28#a1 a###4.|
+ | 1#3 5 11 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x89a7 '覧'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 15 x 17
+ Advance: 17
+ Offset: 1 x -3
+ _________________
+ |.................|
+ |. 1 .|
+ |. #cc#c5 3c21 .|
+ |. #cc#c3 8####b .|
+ |. #2 #31#11 1 .|
+ |. #ccc#3a94#5 .|
+ |. #22# 3c3 6#7 .|
+ |. #cc#c7 33 .|
+ |. 11 1 1 .|
+ |. #cccccccc# .|
+ |. #cccccccc# .|
+ |. #2 2# .|
+ |. #cccccccc# .|
+ |. #cccccccc# .|
+ ->|. 1 66 #2 1 64.|<-
+ |. 38b1 #5111b8.|
+ |.9#c7 6ccccb1.|
+ |.12 .|
+ |.................|
+ -----------------
+
+Char 0x89bd '覽'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |. 56 |
+ |.1#cc#c#41cc#cc#3|
+ |.1# # a51#1 |
+ |.1#aaaa#9a b5 |
+ |.1#aaaa#1#bcbc# |
+ |.1# 1b # a26# |
+ |.1#cc#cc3#c#cc# |
+ |. cbbbbbbbbbc |
+ |. #2 3# |
+ |. #bbbbbbbbb# |
+ |. #2 3# |
+ |. #baaaaaaab# |
+ |. #cbccbbcbc#11 |
+ ->|. 4c8 1# 6#4|<-
+ |.3aacc6 c####b |
+ |. 752 |
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x89c6 '视'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 77 .|
+ | 8#1 6######5 .|
+ | 3#4 5#2222#5 .|
+ | 3222215# 33 #5 .|
+ | b####35# 9# #5 .|
+ | 99 5# 9b #5 .|
+ | 5c1 5# 99 #5 .|
+ | 3#74 5# b7 #5 .|
+ | 3##a#56# #4 #5 .|
+ |2#7c6895a3#b3a5 .|
+ | 6 c6 8a#2 .|
+ | c6 2#5#2 .|
+ | c6 1c91#2 57.|
+ ->| c6 4cc11#3 8#.|<-
+ | #76#c2 ####7.|
+ | 95 52 22 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x89e3 '解'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 17 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | b4 |
+ | 4#2 1######3 |
+ | b####2 23#13#1 |
+ | 5#2 c8 4a 3# |
+ |1#917#21 b5 6b |
+ |48######4aa 893 |
+ | #1#1 #243 95 |
+ | ######1 #5c5 |
+ | # #1 #14#####9 |
+ | # #1 #1a8 #5 |
+ | 1######162 #5 |
+ | 2# #1 #1#######2|
+ | 5b #1 #11 #511 |
+ ->| a7 #32#1 #5 |<-
+ |3#3 44#c #5 |
+ | 4 3 83 |
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x8a00 '言'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 15 x 16
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |. 3 .|
+ |. 7#2 .|
+ |.3222223#7222222.|
+ |.##############b.|
+ |. .|
+ |. ##########4 .|
+ |. 2111111112 .|
+ |. 43222222231 .|
+ |. ##########4 .|
+ |. 21111111111 .|
+ |. ##########7 .|
+ |. #7 #7 .|
+ |. #7 #7 .|
+ ->|. ##########7 .|<-
+ |. #81111111#7 .|
+ |. 63 63 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x8a0a '訊'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 3 .|
+ | 2#2 1111121 .|
+ |111a6119#####6 .|
+ |#######21# #4 .|
+ | 1 1 1# #3 .|
+ | #####b 1# #2 .|
+ | 1 11 1# #2 .|
+ | #####b####b#1 .|
+ | 22112223#12#1 .|
+ | 21111 1# #2 .|
+ | #####1 1# #2 .|
+ | #1 #1 1# c4 .|
+ | #1 #1 1# a648.|
+ ->| #####1 1# 6b8b.|<-
+ | #2 1#1 2# b#5.|
+ | 91 61 29 3 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x8a18 '記'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 36 .|
+ | 4#2 211111 .|
+ |11119411c#####5 .|
+ |a####### #5 .|
+ | #5 .|
+ | ######1 #5 .|
+ | 211122 2111#5 .|
+ | ###### 3#####5 .|
+ | 111111 2# .|
+ | 1 1 2# .|
+ | 2##### 2# .|
+ | 1# 2# 2# .|
+ | 1# 2# 2# 73.|
+ ->| 1##### 2#1 2#7.|<-
+ | 1# 2# #####c1.|
+ | 19 16 2222 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x8a2d '設'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 17 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 48 |
+ | 4#3 ##### |
+ | 211c612 #213# |
+ |1####### # 2# |
+ | 1 3b 2# |
+ | a#####1b5 1#ab3|
+ | 1 16a 3661|
+ | a##### ######8 |
+ | 1 1 68111#4 |
+ | 4##### 3c 5c |
+ | 2#112# b6 c6 |
+ | 2# 1# 5#ac |
+ | 2# 2# 1##8 |
+ ->| 2##### 4cb9#b51 |<-
+ | 2# 7c#6 3a#c2|
+ | 26 271 32 |
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x8a31 '許'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 36 4 .|
+ | 3#2 4#2 .|
+ | 73 1 88 .|
+ |4####### ######2.|
+ | 7a1#312 .|
+ | c#####4#2 #2 .|
+ | 1 146 #2 .|
+ | c##### #2 .|
+ | 1 18#######a.|
+ | 111111111#3111.|
+ | 2#####2 #2 .|
+ | 1# #1 #2 .|
+ | 1# #1 #2 .|
+ ->| 1#####1 #2 .|<-
+ | 1# #2 #2 .|
+ | 17 3 b2 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x8a3c '証'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 15 x 16
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |. 3a1 .|
+ |. 1#8 222222231.|
+ |.1117619#######5.|
+ |.######9111#311 .|
+ |.111111 #2 .|
+ |.4##### #2 .|
+ |. 62 #2 .|
+ |.5ccccc #3 ###c .|
+ |. 11111 #2 #322 .|
+ |. 21112 #2 #2 .|
+ |.1##### #2 #2 .|
+ |. #1 2# #2 #2 .|
+ |. #1 2# #2 #2 .|
+ ->|. #####3#32#3222.|<-
+ |. #1 2#########8.|
+ |.1a1 15 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x8a62 '詢'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |. 28 72 |
+ |. 1c7 5#1 |
+ |.2227623 b911112 |
+ |.ccccccc5#######1|
+ |. 2#8 2# |
+ |.7#####c##### 2# |
+ |. 274# 2# 3# |
+ |.7####c 1# 2# 3# |
+ |. 1 1#### 3# |
+ |. 1 1 1# 2# 4# |
+ |. ##### 1# 2# 4# |
+ |. #2 1# 1#23# 5# |
+ |. #2 1# 3#### 6c |
+ ->|. ##### 8c |<-
+ |. #2 2# bc#a |
+ |. #2 16 7#91 |
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x8a66 '試'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 16 161 .|
+ | 1#5 2#47 .|
+ |2217622 2#2c8 .|
+ |a######2213#3551.|
+ | 3########6.|
+ |1#####4 1#2 .|
+ | 1 111112#2 .|
+ |1#####c###a#2 .|
+ | 221121 #2 #3 .|
+ | 21111 #2 b5 .|
+ | ##### #2 97 .|
+ | #2 1# #346a .|
+ | #2 2#37##82#151.|
+ ->| #####6a4 b8b7.|<-
+ | #2 1# 3##3.|
+ | 82 15 26 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x8a73 '詳'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 17
+ Advance: 17
+ Offset: 0 x -3
+ _________________
+ |.................|
+ | 17 3 14 .|
+ | 1c6 4#3 8c2 .|
+ |1116712 882#2 .|
+ |a######8#######8.|
+ | 1115#1111.|
+ | #####b 4# .|
+ | 211112 215#112 .|
+ | #####b2#######1.|
+ | 211122 4# .|
+ | 211111 4# .|
+ | #####4########c.|
+ | #2 #22215#1122.|
+ | #2 #2 4# .|
+ ->| #####2 4# .|<-
+ | #2 #2 4# .|
+ | #2 83 5# .|
+ | 1 .|
+ |.................|
+ -----------------
+
+Char 0x8a8d '認'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 17 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 4b |
+ | #6 5#######3 |
+ |33262241213#32#2 |
+ |7###### 433# #1 |
+ | 2111211#279 1#1 |
+ |1#####579 c4 2# |
+ | 1a9117# |
+ |1#####55ca 2##5 |
+ | 21112146 742 |
+ | ##### 2325#113 |
+ | #313# 87#4c74#1 |
+ | #2 1# c3#2 b8 |
+ | #313#2# #2 5#1|
+ ->| #####78 #4 4b2a2|<-
+ | #3 2c 9###9 |
+ | c3 |
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x8a9e '語' top
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 18
+ Advance: 17
+ Offset: 0 x -3
+ _________________
+ | 3 .|
+ | 3#7 .|
+ | 9# ########4.|
+ |3223323217b1111 .|
+ |a###### 88 .|
+ | 6######1 .|
+ |1#####511c413# .|
+ | 211121 1#1 1# .|
+ |1#####9###cc##ca.|
+ | 211122322222233.|
+ | 11111 1 11 .|
+ | ##### ######5 .|
+ | #2 1# #2 1#4 .|
+ | #2 1# #2 #4 .|
+ ->| ##### #2 1#4 .|<-
+ | #3 2# ######4 .|
+ | #3 3 #2 #5 .|
+ | 3 2 1 .|
+ |.................|
+ -----------------
+
+Char 0x8aa4 '誤'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 49 111111 .|
+ | 1#5 ######2 .|
+ |111a912 #1 #1 .|
+ |a###### #1 #1 .|
+ | 11111 #3111#1 .|
+ | #####6 ######2 .|
+ | 2111111 .|
+ | #####63#######3.|
+ | 1 # .|
+ | 1 1 1 2c .|
+ | ##cc#4########a.|
+ | #4 #4 9c5 .|
+ | #4 #4 3#3c1 .|
+ ->| #####4 5#5 7c5 .|<-
+ | #4 #9b#7 b#6.|
+ | a3 1185 13 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x8aaa '說'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 15 x 16
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |. 62 1 .|
+ |. 7b 6c12#4 .|
+ |.222a233#3 7c1 .|
+ |.#######6 ab .|
+ |. 1aa#######b.|
+ |.#####52#1112#32.|
+ |.2111212# 1# .|
+ |.#####52# 1# .|
+ |.11111 2###### .|
+ |.22113213#2#341 .|
+ |.2####2 2# #2 .|
+ |.1# #1 6a #2 .|
+ |.1# #12#4 #2 21.|
+ ->|.1####6c8 #3 8#.|<-
+ |.3# 6#7 9###9.|
+ |.13 1 111 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x8aac '説'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 3a1 22 22 .|
+ | #8 6b bb .|
+ |1218822 c64#1 .|
+ |8###### 142b61 .|
+ | 2######2 .|
+ | #####92# #2 .|
+ | 2111121# #2 .|
+ | #####72#1111#2 .|
+ | 2211212######2 .|
+ | 11111 1# #2 .|
+ | #####2 2# #2 .|
+ | #2 #1 5b #2 .|
+ | #2 #2 b7 #2 3 .|
+ ->| #####38c1 #3 b8.|<-
+ | #3 3a#3 a###3.|
+ | 41 62 11 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x8aad '読'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |. 66 c3 |
+ |. 3b #2 1 |
+ |.2 18######## |
+ |.#####91 #2 1 |
+ |. #2 |
+ |.7#c## #######1 |
+ |. 1 |
+ |.21 3 ######### |
+ |.5#### #2 2# |
+ |.1 11a2 1 29 |
+ |.3####1 99 #3 |
+ |.2# # 98 #2 |
+ |.1# # b6 #2 |
+ ->|.1#cc# 4#2 #2 81|<-
+ |.2# #26#8 #51#3|
+ |.3# 1 9a 9##a |
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x8abf '調'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 15 x 17
+ Advance: 17
+ Offset: 0 x -3
+ _________________
+ |.................|
+ | 75 ..|
+ | 3a 2########..|
+ |3112123#22#323#..|
+ |######4# #2 2#..|
+ | 12#c###a2#..|
+ |1#####1#1 #2 2#..|
+ | 1 11#2 #212#..|
+ |1#####2######2#..|
+ | 111122#1 2#..|
+ | ####42#b###a2#..|
+ | #21#23ca5 1#2#..|
+ | #1 #15aa5 1#2#..|
+ | #21#288a###c2#..|
+ ->| ####4#4 2#..|<-
+ | #2 9# 59#..|
+ | 3 5c6 6#8..|
+ | 1 ..|
+ |.................|
+ -----------------
+
+Char 0x8acb '請'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 17 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 54 3a |
+ | 6b 1115#1112 |
+ |1213a229cc##ccc# |
+ |5###### 3# |
+ | 4#######1 |
+ | 3##### 4# |
+ | 1 1#########3|
+ | 3#####11 11 |
+ | 12####### |
+ | 2#1 2# |
+ | 2####52#ccccc# |
+ | 2# #22#1 2# |
+ | 1# #22#ccccc# |
+ ->| 1####22#1 2# |<-
+ | 2# #32#1 7a# |
+ | 17 42171 672 |
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x8b49 '證'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 15
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ |.................|
+ | 77 1 4 12 .|
+ |2139124c9c6c9c5 .|
+ |###### 4 a28c29 .|
+ | 2aba 2#94 .|
+ | ##### 3#6 b9 .|
+ | 41 144#7####98 .|
+ | 8#6 1b5.|
+ | #####32######1 .|
+ | 2# 2# .|
+ | ####3 2###### .|
+ | #1 #2 22 15 .|
+ | #1 #2 78 49 .|
+ ->| #1 #2 2c 93 .|<-
+ | ####3######### .|
+ | c1 2 211111112 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x8b70 '議'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 17
+ Advance: 17
+ Offset: 0 x -3
+ _________________
+ |.................|
+ | 76 55 1#3 .|
+ | 4c 2b 98 .|
+ |211412b######## .|
+ |######4111#2112 .|
+ | 1 11#######7 .|
+ | ####9 1 #1 .|
+ | 1 1c########5.|
+ | ####979bc7#1b1 .|
+ | 2111198#13# 86 .|
+ | 1111 1 #13# 31 .|
+ | ####4#########7.|
+ | #2 #2 2#a3b6a1 .|
+ | #2 #2ba#2 8#21 .|
+ ->| ####1 #4aaa877.|<-
+ | #3 #25c#36 2##6.|
+ | 41 2 2#a 6#1.|
+ | 1 .|
+ |.................|
+ -----------------
+
+Char 0x8b8a '變'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 15 x 17
+ Advance: 17
+ Offset: 1 x -3
+ _________________
+ |.................|
+ |. 2 53 13 .|
+ |. 2#6 68 a8 .|
+ |.3b424####786 63.|
+ |.#cb#5bccc2#a#c3.|
+ |.22c4 1 1 6c3 .|
+ |.4c486ccc# 7b197.|
+ |.ca63aaccb ##bb9.|
+ |.24243b32# 52161.|
+ |.92b36bcc#1a2946.|
+ |.6 3 b4 12 .|
+ |. 8#1 1 .|
+ |. 6##cccc####9 .|
+ |. 7#469 2c7 .|
+ ->|. 53 7c8c4 .|<-
+ |. 1359ccc964322.|
+ |.8##a73 259b##5.|
+ |. 1 .|
+ |.................|
+ -----------------
+
+Char 0x8ba1 '计'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 17 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 362 |
+ | 6c1 6#2 |
+ | 2#a 5# |
+ | 7#3 5# |
+ | 2 5# |
+ |24443 55558#5555 |
+ |6###6 ##########2|
+ | #6 5# 1 |
+ | #5 5# |
+ | #5 5# |
+ | #518 5# |
+ | #6b# 5# |
+ | ##c2 5# |
+ ->| 2##2 6# |<-
+ | b3 6# |
+ | 6b |
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x8ba4 '认'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 17 x 15
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ |.................|
+ | 191 #c |
+ | 3#b #9 |
+ | 3#8 #9 |
+ | 3 #9 |
+ |12221 1#a |
+ |8###6 3#b |
+ | #5 5## |
+ | #5 8a#3 |
+ | #5 6 c7b7 |
+ | #56#33#27c |
+ | #9#7 ab 2#7 |
+ | ##7 5#4 8#5 |
+ ->| 2#8 4#9 c#7 |<-
+ | 3 8#b 1cb1|
+ | 181 11 |
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x8baf '讯'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 14
+ Advance: 17
+ Offset: 0 x -1
+ _________________
+ |.................|
+ |.................|
+ | 56 21111231 .|
+ | 7#42#######5 .|
+ | a9 2# c4 .|
+ | 1# #3 .|
+ |3###4 1# #2 .|
+ | 22#3 1# #2 .|
+ | #28#####3#2 .|
+ | #2112#11 #3 .|
+ | #2 1# c4 .|
+ | #13 1# b5 .|
+ | #4#51# 9723.|
+ | 1##9 2# 6b7b.|
+ ->| 4#9 2# 1##6.|<-
+ | 6 3#1 37 .|
+ |.................|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x8bb0 '记'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 1 .|
+ | 8c1 22222221 .|
+ | 3#8 2#######4 .|
+ | ac #4 .|
+ | 1 #4 .|
+ |1222 #4 .|
+ |7###2 122222#4 .|
+ | #2 #######4 .|
+ | #2 #2 1#4 .|
+ | #2 #2 .|
+ | #211#2 .|
+ | #4c6#2 .|
+ | ##a1#2 b4.|
+ ->| 3#8 #5 6#8.|<-
+ | 3 9#######2.|
+ | 122222 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x8bbe '设'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 14
+ Advance: 17
+ Offset: 0 x -1
+ _________________
+ |.................|
+ |.................|
+ | 5a 5#####3 .|
+ | 2#8 4#224#2 .|
+ | 59 5# 3#2 .|
+ | 9b 3#767.|
+ |3ccc1 8#4 2###8.|
+ |157#1 45 1 .|
+ | 3#11cbbbbbbc5 .|
+ | 3#1 3432229# .|
+ | 3#1 ba 1#7 .|
+ | 3#15 2#7 9c .|
+ | 3#6#2 3#a#2 .|
+ | 4##4 3b#c61 .|
+ ->| 5#336b#927###9.|<-
+ | 1 9#82 5a5.|
+ |.................|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x8bd5 '试'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 18 x 15
+ Advance: 17
+ Offset: 0 x -1
+ _________________
+ |..................|
+ | 482 |
+ | 53 5#17a1 |
+ | 1cc1 4# 5#8 |
+ | 3#9 4# 3 |
+ | 5 9##########7 |
+ |1223 221113#31221 |
+ |5### 1#2 |
+ | 15# b###4#4 |
+ | 5# 24#2 b7 |
+ | 5c 2# 8a |
+ | 5c 1 2# 4#1 |
+ | 5c4c12# 24#8 31 |
+ | 6##86a###96#58c1|
+ ->| 9#8 8a752 a##b |<-
+ | 48 8#4 |
+ |..................|
+ |..................|
+ |..................|
+ -----------------
+
+Char 0x8bed '语'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 15 x 16
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |. 1 .|
+ |. ab ##cccccc#4.|
+ |. 3#6 221991112 .|
+ |. 94 c5 .|
+ |. 7#######2 .|
+ |.###3 5c115# .|
+ |.32#2 88 7b .|
+ |. #1b##########.|
+ |. 1#121111111112.|
+ |. 1# 31111121 .|
+ |. 2# 1 #######6 .|
+ |. 3#4#1#4 #5 .|
+ |. 4##6 #4 #5 .|
+ ->|. 5#5 #######5 .|<-
+ |. 3 #61112#6 .|
+ |. 31 31 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x8bef '误'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 15 x 16
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |. 1 .|
+ |. 9a 5#######6 .|
+ |. 2#5 4#11111#5 .|
+ |. 74 4# #5 .|
+ |. 5#######6 .|
+ |.### 122111221 .|
+ |.44# 51 142.|
+ |. 1# c########4.|
+ |. 1# 2# .|
+ |. 1# 21113#11112.|
+ |. 1# b##########.|
+ |. 1#34 ac9 .|
+ |. 2#c8 7#2c5 .|
+ ->|. 4#9 8#4 3#81 .|<-
+ |. 2938#c3 3c#9.|
+ |. 76 72.|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x8bf7 '请'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 17 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 1 a4 |
+ | c9 2111#51112 |
+ | 6#53#ccc##ccc# |
+ | b7 1 #4 |
+ | 9########5 |
+ |3655 21 #4 11 |
+ |5###1a##########5|
+ | 4# 11 1 |
+ | 4# 2#######3 |
+ | 4# 2# #2 |
+ | 4# 12#ccccc#2 |
+ | 4c4c3# #2 |
+ | 5##82#ccccc#2 |
+ ->| 7#6 2# #2 |<-
+ | 5 2# 1a#2 |
+ | 2a 95 |
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x8c61 '象'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 17
+ Advance: 17
+ Offset: 1 x -3
+ _________________
+ |.................|
+ |. 65 |
+ |. 7#91 |
+ |. 8#######b |
+ |. 1a#5 9b1 |
+ |.5############# |
+ |.3b7# 5#1 7c |
+ |. 5#1119a2227c |
+ |. 6#cc##ccccc# |
+ |. 39#8 27 |
+ |.279cb55#6 4#b3 |
+ |. 87218c6#a#6 |
+ |. 36a#718#aa9 |
+ |.3#a5 4c99a1#8 |
+ ->|. 15bc5 aa 3#c51|<-
+ |.2b#b5 67#7 3#9 |
+ |. 53 8#a1 1 |
+ |. 11 |
+ |.................|
+ -----------------
+
+Char 0x8ca0 '負'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 15 x 17
+ Advance: 17
+ Offset: 1 x -3
+ _________________
+ |.................|
+ |. 1c7 .|
+ |. 9c1 .|
+ |. 5######c1 .|
+ |. 3#5 3#4 .|
+ |. 5#8 c8 .|
+ |.7#b########## .|
+ |. 34# 4# .|
+ |. 4########## .|
+ |. 4# 4# .|
+ |. 4########## .|
+ |. 4# 4# .|
+ |. 5# 4# .|
+ |. 5########## .|
+ ->|. 392 772 .|<-
+ |. 4a#72 6b#a3 .|
+ |.6#c6 3b#4.|
+ |. 4 4 .|
+ |.................|
+ -----------------
+
+Char 0x8ca9 '販'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |. 258c4 |
+ |.2#ccc#22##ca865 |
+ |.1#224#12# |
+ |.1# 2#11# |
+ |.1#####11#111121 |
+ |.1# 3#11######5 |
+ |.1# 2#11#68 #1 |
+ |.1#####11#4a 2c |
+ |.1# 2#12# # 68 |
+ |.1# 2#13c a4b3 |
+ |.2#####15a 4cc |
+ |. 25141 97 1#8 |
+ |. 7b1b91#2 ba#6 |
+ ->|.2c2 18aa2ba 3#92|<-
+ |.a5 7#3ca 3c5|
+ |. 2 2 |
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x8cac '責'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 17 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 481 |
+ | 111117#111111 |
+ | 4#############1 |
+ | 9###########3 |
+ | 7# 1 |
+ |5###############3|
+ |1111111111111112 |
+ | ##########6 |
+ | #5 #5 |
+ | #cbbbbbbb#5 |
+ | #5 #5 |
+ | #cbbbbbbb#5 |
+ | ##########6 |
+ ->| 14ab1 1#b73 |<-
+ | 3a#c83 27b#b |
+ | 73 34 |
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x8cc7 '資'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |. 291 |
+ |. 7a5 99 |
+ |. 16ca 4#######4 |
+ |. 13#4 a9 3c |
+ |. 5a35 7bc444 |
+ |.27cb4 29c13c71 |
+ |.9b3 9#91 1a#b1|
+ |.1 5#c##ccccc#66 |
+ |. 4# #1 |
+ |. 4#bbbbbbbb#1 |
+ |. 4#bbbbbbbb#1 |
+ |. 4# #1 |
+ |. 5#cccccccc#1 |
+ ->|. 16c3 8b5 |<-
+ |. 49#94 6cc6 |
+ |. 771 74 |
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x8cf4 '賴' top
+ Font: #12 FZHeiTi (17)
+ Bitmap: 15 x 18
+ Advance: 17
+ Offset: 1 x -3
+ _________________
+ |. 2 11 .|
+ |. #5 8c .|
+ |. c2 1#5 .|
+ |.a######58####7 .|
+ |.11 c2114#2 4#1 .|
+ |. c2 c7 b7 .|
+ |.1cb#cc#2######2.|
+ |.1#2c33# #2 #2.|
+ |.1# c21# ######2.|
+ |.1###### #2 #2.|
+ |. 6#2 ######2.|
+ |. b#6b1 #2 #2.|
+ |. 76c3ba #2 #2.|
+ |.2c c22a1######2.|
+ ->|.b6 #2 36 181 .|<-
+ |.2 #2 4#8 1ac2.|
+ |. #3 9#4 9c.|
+ |. 1 11 1.|
+ |.................|
+ -----------------
+
+Char 0x8d1f '负'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 15 x 16
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |. 1a5 .|
+ |. 8#2 .|
+ |. 3#######7 .|
+ |. c62222cc .|
+ |. ab 5#3 .|
+ |.1b#52222c9223 .|
+ |.4b5##########2 .|
+ |. 1#4 3#2 .|
+ |. 1#4 ba 3#2 .|
+ |. 1#4 c8 3#2 .|
+ |. 1#4 #6 3#2 .|
+ |. 2#4 4#2 3#2 .|
+ |. 1621bb 84151 .|
+ ->|. 16cc22c#b5 .|<-
+ |.58b##71 4b#b4.|
+ |.2c95 6#3.|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x8d23 '责'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 3a2 .|
+ | 221115#311122 .|
+ | ############c .|
+ | 1 3#1 1 .|
+ | 3###########1 .|
+ | 22115#31123 .|
+ | 2111114#3111112.|
+ |1##############c.|
+ | 21111111112 .|
+ | 2##########c .|
+ | 2#c 24 #a .|
+ | 2#9 8#1 #8 .|
+ | 2#c 1#7331ca .|
+ ->| 14cb a#b61 .|<-
+ | 6ab#c7 27c#a1.|
+ | 1a73 68 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x8d28 '质'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 12357a5 .|
+ | 4########cba9 .|
+ | 3#2111 #4 .|
+ | 3#1 #3 1.|
+ | 3#############.|
+ | 3#1 2#2 1.|
+ | 3#11114#2111 .|
+ | 3# 5########3 .|
+ | 4# 4# 33 2#2 .|
+ | 5# 4# ba 2#2 .|
+ | 8b 4# b8 2#3 .|
+ | b8 5# #6 2#3 .|
+ | 3#4 14 5#4c72 .|
+ ->| bc 16#9 7#c5 .|<-
+ |3#418b##7 2b#8.|
+ | 3 6a51 81.|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x8d77 '起'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 17 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 371 |
+ | 3# 322223 |
+ | 214#221###### |
+ | 3######7 2# |
+ | 3# 2# |
+ | 3# 12223# |
+ | 9######b2##### |
+ | 2223#2221# 19 |
+ | 693#1 1# |
+ | 9b2###b1# 48 |
+ | ac2#3231# 7# |
+ | c#8#1 #b9a#9 |
+ | 2#6##1 26654 |
+ ->| 8c 6#942 122|<-
+ |2#7 4b#########3|
+ | 62 135677777 |
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x8ddf '跟'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 15
+ Advance: 17
+ Offset: 1 x -1
+ _________________
+ |.................|
+ |. 1111111 |
+ |. ccccc2####### |
+ |. #422#1#2 2# |
+ |. #1 #1#2 2# |
+ |. #1 #1####### |
+ |. #####2#2 2# |
+ |. 21#11 #2 2# |
+ |. 4 # #######1 |
+ |.1# ###3#25b 61 |
+ |.1# #11 #22#29#7 |
+ |.1# # #2 c#b2 |
+ |.1# #252#2 6#4 |
+ |.6#9###3#3a2a#7 |
+ ->|.ba741 2##a1 a#c2|<-
+ |. 2c4 53 |
+ |.................|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x8def '路'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 152 .|
+ | 21112 5c1 .|
+ | #####1 b####9 .|
+ | #3 1#13#712#3 .|
+ | #3 1#1bab 6b .|
+ | #423#6#1c5#4 .|
+ | #####11 5#a .|
+ | #2 6ca#952.|
+ | 281#327#a3 17c9.|
+ | 2#1#cc34#####3 .|
+ | 2# #2 1#222#2 .|
+ | 2# #2 1# #2 .|
+ | 2# #7a71# #2 .|
+ ->|19###b822#####2 .|<-
+ | a74 2# #2 .|
+ | 14 3 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x8eab '身'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |. c7 |
+ |. 5c1 |
+ |. 1#########2 |
+ |. #5111114#1 |
+ |. #4 3#1 |
+ |. #########1 |
+ |. #4 3#131 |
+ |. #########5#c1|
+ |. #4 3##c3 |
+ |.111#5111116#b1 |
+ |.a######cb###2 |
+ |.25321 5cb7#2 |
+ |. 38cb5 4#2 |
+ ->|.47a##93 5#2 |<-
+ |.4#95 7###1 |
+ |. 1762 |
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x8edf '軟' top
+ Font: #12 FZHeiTi (17)
+ Bitmap: 17 x 17
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ | 2 |
+ | 3#2 aa |
+ | 2# c5 |
+ |a#######81#1 |
+ | 1# 5#####7 |
+ | 1# a5 1#4 |
+ | #cc#cc#2#1 4# |
+ | #21# 1#991b48b |
+ | #bb#bb#621#412 |
+ | #21# 1# 1#4 |
+ | #21# 1# 3#7 |
+ | ####### 7bb |
+ | 1# #3b5 |
+ |########88b 4#2 |
+ ->| 1# 7#2 9c3 |<-
+ | 1# 1a#4 bc1|
+ | 2b 74 12 |
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x8f03 '較'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 14 23 .|
+ | 1#1 5c .|
+ |1112#11 a3 .|
+ |8######2#ccccc#9.|
+ | # 33423322.|
+ | ######1 9b17c3 .|
+ | #2 # #19c1 6#4.|
+ | #cc#c#5c5 1375.|
+ | #2 # # #3 6#1 .|
+ | ###### 88 b7 .|
+ | 1# 2#3#1 .|
+ |1112#111 a#8 .|
+ |8#######3 5#5 .|
+ ->| # 4#7#81 .|<-
+ | # 3a#4 3c#6.|
+ | 1c aa1 17 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x8f09 '載'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 17 x 17
+ Advance: 17
+ Offset: 0 x -3
+ _________________
+ |.................|
+ | b2 94 |
+ | #2 b38a1 |
+ | 2#######1a3 ba |
+ | #1 94 11 |
+ |5############### |
+ | #2 76 1 |
+ | 8ccc#ccc557 8c |
+ | #1 49 b8 |
+ | #cc#cc#32c2#2 |
+ | #ba#ba#2 #99 |
+ | #2 #1 #2 a#3 |
+ | cbb#bbc2 ac |
+ | # 3##2 4 |
+ ->|2########bc8aa1#3|<-
+ | #1 1bb 1cc#1|
+ | #1 4a1 2a9 |
+ | 3 |
+ |.................|
+ -----------------
+
+Char 0x8f2f '輯'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 17
+ Advance: 17
+ Offset: 0 x -3
+ _________________
+ |.................|
+ | 42 1 1 .|
+ | c2 ######2 .|
+ |c######3#2 #1 .|
+ |211c312 #3111#1 .|
+ | ######1######2 .|
+ | #1c21#2 1.|
+ | #1c21#c#######a.|
+ | ######1b3 1# .|
+ | #1c21#1b##### .|
+ | ######1b3 1# .|
+ | c2 b##### .|
+ |1 c2 1 b3 1# .|
+ |####### b3 13#12.|
+ ->| c1 c###cc#98.|<-
+ | c1 11 1# .|
+ | #2 2# .|
+ | 2 .|
+ |.................|
+ -----------------
+
+Char 0x8f38 '輸'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 17 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 91 c8 |
+ | #1 6##2 |
+ | #1 2#48c1 |
+ |6###c# 1b8 9c4 |
+ | 1 #112bc###47#b2|
+ | #####4a1 38 |
+ | # #1# #### 53# |
+ | ##### #11# #2# |
+ | #1#1# #11# #2# |
+ | #1#1# #cc# #2# |
+ | #####2#11# #2# |
+ |111#211#### #2# |
+ |8bb#bb6#11#1#2# |
+ ->| #1 #11# 2# |<-
+ | #1 #4c# 6b# |
+ | c1 7141 273 |
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x8f6c '转'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |. 582 a6 |
+ |. ac #6 |
+ |.54#8443324#5232 |
+ |.######8#######9 |
+ |. 78 1 6# 11 |
+ |. c495 7b |
+ |.3# #6 #c##cccc#|
+ |.ba2#63265#a55556|
+ |.####cc5 1#6111 |
+ |.1 #5 5#####6 |
+ |. 1#87a 8c |
+ |.a####b9156 2#6 |
+ |.a95#5 a#bbb |
+ ->|. #5 4c#6 |<-
+ |. #5 1b#6 |
+ |. 1c5 1b8 |
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x8f6f '软'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 85 362 .|
+ | 2#7 7#2 .|
+ | 327#422 a9 .|
+ |1#######4#522233.|
+ | 1#4 16######5.|
+ | 7c2c3 b867 7#1.|
+ | c62#23#2ab b9 .|
+ | 7#23#322 ab .|
+ | c######4 a# .|
+ | 3313#1 c#2 .|
+ | 2#4531#a6 .|
+ | 89ac##b35c5c .|
+ | 9b77#2 c61#9 .|
+ ->| 2#1 9c 6#a2.|<-
+ | 2#3b#3 9#9.|
+ | 3b263 5 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x8f7d '载'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 193 1a4 .|
+ | 1#2 1#358 .|
+ | 5#######2#23#6 .|
+ | 112#2111#1 411.|
+ |8##############b.|
+ |2211aa1112#31122.|
+ | 1#3 #2 3 .|
+ | c####### c43#6 .|
+ | 3b383 b57# .|
+ | 3c21#2 97b7 .|
+ | b######8 6c#1 .|
+ | 21 2#2 1 3#7 .|
+ |14567#ab9 b#a 1 .|
+ ->| #a87#533bb3#687.|<-
+ | 1#16#b1 6##7.|
+ | 1a2 6 5a1.|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x8f83 '较'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |. 95 27 |
+ |. 2#6 1#5 |
+ |.327#32121195112 |
+ |.######7########3|
+ |.11#4 234 3 1 |
+ |. 5c292 b#16#6 |
+ |. b61#2 ac2 9#6 |
+ |.7#23#36c2 19#3|
+ |.b#####62b2 2#64 |
+ |.21 1#1 #5 7# |
+ |. 1#11 8a c8 |
+ |.7889###11#9#1 |
+ |.9a87#52 8#8 |
+ ->|. 1#1 7#b#a3 |<-
+ |. 1#27cc4 5##b3|
+ |. 2#2a81 188 |
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x8f91 '辑'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 17 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 54 1111111 |
+ | b5 ####### |
+ | 22#223 #2 2# |
+ |1###### ####### |
+ | 77 2111111 |
+ | b3b4 2111111111|
+ | 2c #2 b########9|
+ | 97 #331#2 1# |
+ | b###c81#ccccc# |
+ | #2 #2 1# |
+ | 124#ab6####### |
+ | ####ba4#2 2# |
+ | 42 #2 6#c######b|
+ ->| #2 3221 1#97|<-
+ | #3 2# |
+ | 41 15 |
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x8f93 '输'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |. 54 77 |
+ |. b9 3#c2 |
+ |.22#411 1c55b1 |
+ |.c####c1b7 8b2 |
+ |. 58 4c71 8#82|
+ |. a484b5 #ccc84b2|
+ |.1c #2 ccc#1 a |
+ |.881#32c31# c4c |
+ |.b###cac1 # c2c |
+ |. #1 ccc# c2c |
+ |. #56c1 # c2c |
+ |.59c#c7ccc# c2c |
+ |.8c8#1 c1 # #3c |
+ ->|. 1#1 c1 # c |<-
+ |. 1#1 c29# 19c |
+ |. 2#2 5131 a6 |
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x8fbc '込'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 17 x 15
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ |.................|
+ | 1c3 46 |
+ | 8c1 8#c5 |
+ | c5 2a#7 |
+ | 1 c#4 |
+ | 223 3#bb |
+ |1### 9a2#4 |
+ | 5# 3#4 9c |
+ | 5# ca 2#7 |
+ | 5# a#3 7#4 |
+ | 5# 9#7 b#4 |
+ | 5#7#a 1cb1|
+ | 6#25 21 |
+ ->| 4#c#942 1241|<-
+ |1c7 39########## |
+ | 1 134555654 |
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x8fce '迎'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 14
+ Advance: 17
+ Offset: 0 x -1
+ _________________
+ |.................|
+ |.................|
+ | 98 37b 22222 .|
+ | 7# #962##### .|
+ | 2#5 #2 #2 2# .|
+ | 51 #2 #2 2# .|
+ | #2 #2 2# .|
+ |1###1 #2 #2 2# .|
+ | 22#1 #2 #2 2# .|
+ | 1#1 #211#2 2# .|
+ | 1#1 #7#3#2 4# .|
+ | 1#13#c5 #2b#8 .|
+ | 1#118 #233 .|
+ | 2#3 1#3 .|
+ ->| 6c7c95211532345.|<-
+ | a3 59c#######9.|
+ |.................|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x8fd0 '运'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 14
+ Advance: 17
+ Offset: 0 x -1
+ _________________
+ |.................|
+ |.................|
+ | 9a 76555566 .|
+ | 6#2 #ccccccb .|
+ | 1#7 .|
+ | 3 .|
+ | #cccccccc#4.|
+ |1#cc66555cb55562.|
+ | 87#5 2#4 1 .|
+ | #5 8b 2#4 .|
+ | #5 2#3 8c .|
+ | #5 3cc6789#7 .|
+ | #5 4#ba9868c .|
+ | 6#b3 1 .|
+ ->|1a#79#c976567896.|<-
+ | 96 27abc#####4.|
+ |.................|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x8fd4 '返'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 15 x 15
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |.................|
+ |. 65 112357a4 .|
+ |. 8c 2###cba97 .|
+ |. 3#4 2# .|
+ |. 83 2#1111111 .|
+ |. 2#######4 .|
+ |.###3 2# 4 3#1 .|
+ |.32#2 3#5#8 8b .|
+ |. #2 5c 3#a#4 .|
+ |. #2 99 3#c .|
+ |. #21#4 2bbc9 .|
+ |. #2ab39#913#9 .|
+ |. 4#763195 63 .|
+ ->|.8#7bb7432222244.|<-
+ |.85 48bc######6.|
+ |. 1 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x8fd8 '还'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 17 x 14
+ Advance: 17
+ Offset: 0 x -1
+ _________________
+ |.................|
+ |.................|
+ | 9b 7666666666 |
+ | 6#3 #########b |
+ | 1#a 1 8c 1 |
+ | 52 4#4 |
+ | 1c# 1 |
+ |1###4 bc#1#8 |
+ | 32#4 1ac3# 6#7 |
+ | #43c#21# 9#5 |
+ | #6b#3 1# c9 |
+ | #4 2 2# 1 |
+ | #4 2# |
+ | 9#b2 3c |
+ ->|1ac37#b7555555682|<-
+ |1a4 17abc#####a |
+ |.................|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x8fd9 '这'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 15
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ |.................|
+ | 24 3#6 .|
+ | 8c ca .|
+ | 3#33222652223 .|
+ | c4c######### .|
+ | 2 9a .|
+ | 3221 a#4 #6 .|
+ | ###4 7#76#1 .|
+ | #4 4##7 .|
+ | #4 2c#b2 .|
+ | #4 7#a2b#3 .|
+ | #48##6 1c#4 .|
+ | 3#5481 29 .|
+ ->| 7#c#a5211112342.|<-
+ |2c5 17c######## .|
+ | 1 12233343 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x8fdb '进'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 15
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ |.................|
+ | 32 1#4 6c1 .|
+ | 1#a #2 6c .|
+ | 8#3121#317c121.|
+ | 2b45#########6.|
+ | #2 6c .|
+ | #c#2 #1 6c .|
+ | 14#1b#########c.|
+ | 4#1114#117c112.|
+ | 4#1 6c 6c .|
+ | 4#1 b8 6c .|
+ | 4#1 7#2 6# .|
+ | 6#42b8 6# .|
+ ->|19#b#b7421 35345.|<-
+ |1c5 18c########6.|
+ | 12344443 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x8ff0 '述'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 15 .|
+ | 7a 2#18a .|
+ | 8#4 2# 5#7 .|
+ | 3#9 2# 5 .|
+ | 734#########8.|
+ | 1 1321a#11221.|
+ | ###3 3## 5 .|
+ | 66#3 b7#6#6 .|
+ | 1#3 9b2# 8#4 .|
+ | 1#3 8#22# b#2.|
+ | 1#39#5 2# 2#5.|
+ | 1#3 4 2# 1 .|
+ | 5#93 2# .|
+ ->| 7#a9#b864444566.|<-
+ |1aa 17b#######7.|
+ | 11222 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x8ff7 '迷'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 361 .|
+ | 32 5#1 1 .|
+ | bb b5 5# ca .|
+ | 3#5 8# 5# 5#2 .|
+ | 5 1915# 86 .|
+ | 21115#22223.|
+ | ###3##########b.|
+ | 35#1 7b# 4 .|
+ | 3#1 2c5#5#8 .|
+ | 3#1 2c65# 7#8 .|
+ | 3#16#9 5# a#3.|
+ | 3#3b9 5# 15 .|
+ | 6#3 5# .|
+ ->| 7#9#b7314911123.|<-
+ |2c5 6b########c.|
+ | 1 23444553.|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x9000 '退'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 15
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ |.................|
+ | b8 5#######2 .|
+ | 6#1 4# 2#2 .|
+ | 1#6 4# 2#2 .|
+ | 84 4#######2 .|
+ | 222 4# 2#2 .|
+ |1###1 4#######2 .|
+ | 1#1 4# 3 1c4 .|
+ | #1 4#1cb3b92 .|
+ | #1 4# 8#a .|
+ | #1 4#3a14#91 .|
+ | #1 8##81 3#a .|
+ | 5#5 57 2 .|
+ ->| 4#6aa6421111255.|<-
+ | a7 48b#######4.|
+ | 122222 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x9009 '选'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 2a4 .|
+ | 85 9c 1#3 .|
+ | ac c8 2#3 1 .|
+ | 3#33########6 .|
+ | 619b112#411 .|
+ | 23 1#3 .|
+ |5###6##########5.|
+ |133#4222#42#3221.|
+ | #3 1# #2 .|
+ | #3 5c #2 .|
+ | #3 c7 #2 b3.|
+ | #31ac #77#4.|
+ | 2#59c2 a#c9 .|
+ ->| 4c6a94 13.|<-
+ |1c4 4a########9.|
+ | 1 12222221.|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x900f '透'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 15
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ |.................|
+ | 22 13582 .|
+ | cc a#####cc9 .|
+ | 6#313324# .|
+ | 1618#########9.|
+ | 2b8#992 .|
+ | ###439#72# a#a6.|
+ | 77#3b#5 2# 26#a.|
+ | 2#317#####c 1.|
+ | 2#3 a7 9a54 .|
+ | 2#3 1#4 aa#6 .|
+ | 2#3 2bb 3#2 .|
+ | 7#72c9 1##9 .|
+ ->|1a#7b#9532243467.|<-
+ | 94 48b#######8.|
+ | 111 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x9017 '逗'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 1 1 .|
+ | c7 #########1.|
+ | 8# 322222223 .|
+ | 2#4 122222221 .|
+ | 3 3#######3 .|
+ |1222 3#1 1#3 .|
+ |4###4 3#32223#3 .|
+ | #3 4#######3 .|
+ | #3 35 61 .|
+ | #3 3#2 5#2 .|
+ | #31 72 c612 .|
+ | #3b######### .|
+ | 7#83322222223 .|
+ ->|1a#8#a6322223455.|<-
+ |1c4 17ac#######4.|
+ | 111 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x9019 '這'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 17 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 59 |
+ | c3 2#1 |
+ | a8 7########## |
+ | 5# 12111111122 |
+ | 2c1 21111112 |
+ | ########5 |
+ |7###2 21111112 |
+ |122#21########4 |
+ | #2 |
+ | #2 3#######2 |
+ | #2 2# #2 |
+ | #2 2# #2 |
+ | 5#5 3#######2 |
+ ->| 7#7c731 11221|<-
+ |3#3 28c######### |
+ | 1 11112222 |
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x901a '通'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 17 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 1 |
+ | c8 2########c1 |
+ | 7#1 222413c#2 |
+ | 2#7 6#4bc2 |
+ | 82 a#b2 |
+ | ######### |
+ | ###1 #2 2# 5# |
+ | 56# ######### |
+ | 2# #2 2# 4# |
+ | 2# ######### |
+ | 2# #2 2# 5# |
+ | 2# #2 2# 4a# |
+ | 8#7 82 18 5#8 |
+ ->|1b#8bc731 123461|<-
+ | 93 49########a |
+ | 122222 |
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x9023 '連'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 19 .|
+ | 191 2# .|
+ | b8 a#########c.|
+ | 5#111113# .|
+ | 14 ########3 .|
+ | #2 2# #2 .|
+ |7### #ccc#cc#2 .|
+ | 13# #2 2# #2 .|
+ | 2# #2 2# #2 .|
+ | 2# ########3 .|
+ | 2# 11 2# 1 .|
+ | 2# a#########6.|
+ | 6#4 2# .|
+ ->| 8c5#83 1a 11.|<-
+ |3#2 28b########c.|
+ | 1 12222221.|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x9032 '進'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 7227 .|
+ | a6 3#31#4 .|
+ | 7c 97 75 .|
+ | 2#4 3########5.|
+ | 51 c#212#111 .|
+ |1111 9c#1 1# .|
+ |6###6c3######## .|
+ | #2 #1 2# .|
+ | #2 #1 2# 1 .|
+ | #2 ######## .|
+ | #2 #1 1# .|
+ | #2 ########7.|
+ | 7#9 #2 11.|
+ ->| 8#5bb651 235.|<-
+ |2c3 6b########a.|
+ | 1 12222221.|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x9047 '遇'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 15 x 14
+ Advance: 17
+ Offset: 1 x -1
+ _________________
+ |.................|
+ |.................|
+ |. 95 ########1 .|
+ |. 9b #2 #2 2# .|
+ |. 4#2 #cb#cbc# .|
+ |. #1 #1 2# .|
+ |. #1 #1 2# .|
+ |.###1 ######## .|
+ |.43# #1 2 .|
+ |. 1# 2######### .|
+ |. 1# 2# #1321# .|
+ |. 1# 2#25#8ba1# .|
+ |. 1# 2#6c964a2# .|
+ |. 2#23# 2#c .|
+ ->|.3c7b851 12756.|<-
+ |.88 59c######c8.|
+ |.................|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x904b '運'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 15
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ |.................|
+ | 4c1 c#########2.|
+ | b8 c5 2# #2.|
+ | 4#177######581.|
+ | 1 1 2# .|
+ |1212 ########2 .|
+ |7### #2 2# #2 .|
+ | 2# #ccc#cc#2 .|
+ | 2# #2 2# #2 .|
+ | 2# #ccc#cc#2 .|
+ | 2# 2# .|
+ | 2# ##########1.|
+ | 8#6 2# .|
+ ->| 9c6#83 18 133.|<-
+ |3c2 28b########7.|
+ | 1222222 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x904e '過'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 1 1 .|
+ | b8 1####### .|
+ | 5# #1 1# .|
+ | 1#5 ####11# .|
+ | 2 #1 #11# .|
+ |1212 #1 #11# .|
+ |5### 1#########2.|
+ | 2# 1#1111111#2.|
+ | 2# 1# ##### #1.|
+ | 2# 1# #1 1# #1.|
+ | 2# 1# #1 1# #1.|
+ | 2# 1#1##### #1.|
+ | 6#41#1 a# .|
+ ->|19b3b9421 643.|<-
+ |1b1 6b########b.|
+ | 1122221.|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x9053 '道'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 41 25 .|
+ | 3 1ca 8c1 .|
+ | 1#6 213922#3112.|
+ | 9b ###########.|
+ | 48 #5 .|
+ | ########2 .|
+ | 2221 #311111#2 .|
+ |3###2 #cccccc#2 .|
+ | 3#1 #2 #2 .|
+ | 3#1 #cccccc#2 .|
+ | 3#1 #2 #2 .|
+ | 3#1 #311111#2 .|
+ | 3#1 ########2 .|
+ ->| 2a#a63 123.|<-
+ |1#8 38#########a.|
+ | 2 245566653.|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x9055 '違'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 63 .|
+ | 2a 211#5111 .|
+ | #5 #######a .|
+ | 8b 1 3# 78 .|
+ | 39 ###########.|
+ | .|
+ |5### c#######2 .|
+ |123# c4 #2 .|
+ | 2# c#######2 .|
+ | 2# 11 1#2 1 .|
+ | 2# 8#########4.|
+ | 2# 86 #2 1 .|
+ | 2# ######### .|
+ ->| 5949631 #2 .|<-
+ |1b1 6b######ca8.|
+ | 11222221.|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x9060 '遠'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 15 .|
+ | a5 2# .|
+ | 6c ########a .|
+ | #5 1 2# .|
+ | 2 a#########c.|
+ | 11111111111.|
+ |2###2 acccccc#1 .|
+ | 21#1 b7 1# .|
+ | #1 b#######1 .|
+ | #1 4#5 83 .|
+ | #1 29b#c8b81 .|
+ | 1#17c52#18#93 .|
+ | 2ccb3 2# 2b9 .|
+ ->|3#7 8#9326 11335.|<-
+ |17 4c########9.|
+ | 6abbbbba3.|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x9069 '適'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 17 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 57 |
+ | 52 21115#31112 |
+ | b8 ########### |
+ | 5# 2c #2 |
+ | #4 c5 6a |
+ | 1######### |
+ |3### #1 1# 2# |
+ | 23# #5#####4# |
+ | 2# #1 1# 2# |
+ | 2# #1#####1# |
+ | 2# #1#1 1#1# |
+ | 2# #1#####2# |
+ | 2# #21 13# |
+ ->| 8#81b2 3#a |<-
+ |1bb3ac86544558781|
+ |1a1 59abcccccca |
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x906e '遮'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |. 1 97 |
+ |. 9b 8# 1 |
+ |. 4#2 #########c |
+ |. 1#5 #427624833 |
+ |. 3 c2 98 2# |
+ |. c########c |
+ |.bcc #42a824#33 |
+ |.56# # 9824# |
+ |. 2# 2# a#### |
+ |. 2# 5a 31 123 |
+ |. 2# b61#2#1#5c |
+ |. 2#4#1892# #4#6 |
+ |. 5#61 6317 5173 |
+ ->|.7#ac#96322122341|<-
+ |.97 49c#######b |
+ |. 1233332 |
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x9078 '選'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 17 x 15
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ |.................|
+ | 96 2####1####2 |
+ | 7c 2# 2# # #2 |
+ | 1#52#### ####2 |
+ | 422# 84# 56 |
+ | 111 1###b2c###8 |
+ |3### 1 1 |
+ | 12# #3 2b |
+ | 2# ########c |
+ | 2# #2 2a |
+ | 2# b########## |
+ | 2# 196 792 |
+ | 5#318#92 28#8 |
+ ->| 7b4b783 3621|<-
+ |2#2 19###cc#####1|
+ | 2 123344443 |
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x907f '避'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 13 4c .|
+ | 9b 1####1 1#2 .|
+ | 4#1 # #1#####7.|
+ | 1#4 # #1341541.|
+ | 61 #11#13a a7 .|
+ |121 ####1 c1c .|
+ |b##21# #####8.|
+ | #23# 11 1#1 .|
+ | #28####4 #1 .|
+ | #3#a# a4#####7.|
+ | #8#2# a411#21 .|
+ | #231###5 #1 .|
+ | 2#7 #1 .|
+ ->|3#8bc731 14345.|<-
+ |79 6a#########3.|
+ | 1222221 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x90e8 '部'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 17
+ Advance: 17
+ Offset: 1 x -3
+ _________________
+ |.................|
+ |. 3 |
+ |. 2#2 132223 |
+ |. #######c5####c |
+ |. 322133225# a8 |
+ |. 96 5#2 5# #4 |
+ |. 7b 88 5# 3# |
+ |.22451c3125# 6a |
+ |.########c5# 9a |
+ |. 5# 1c6 |
+ |. 5#####6 5# 5#1|
+ |. 5#111#4 5# #6|
+ |. 5# #4 5# 1#8|
+ |. 5#111#4 5#1a##4|
+ ->|. 5#####4 5# bb5 |<-
+ |. 5# #5 5# |
+ |. 38 42 6# |
+ |. 11 |
+ |.................|
+ -----------------
+
+Char 0x90fd '都'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 17 x 17
+ Advance: 17
+ Offset: 0 x -3
+ _________________
+ |.................|
+ | 72 |
+ | #2 17121122 |
+ | 3#####88#8####c |
+ | #2 3#63#1 c7 |
+ | #2 ca 3#13#1 |
+ | 1 #29#213#18a |
+ |3########c3#1#4 |
+ | 981 3#3#4 |
+ | 3b#####13#13#2 |
+ |18##1 1# 3#1 8b |
+ |6#4#1 1# 3#1 3#2|
+ | 2 #cccc# 3#1 3#1|
+ | #1 1# 3#3a#9 |
+ ->| ###### 3#154 |<-
+ | 1#1 2# 4#1 |
+ | 5 3 5#2 |
+ | 1 |
+ |.................|
+ -----------------
+
+Char 0x914d '配'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 15
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |.................|
+ |.accccccc55####2 |
+ |.211c1c221 211#1 |
+ |. c c #1 |
+ |.2cc#c#c#3 #1 |
+ |.2# c c #3 #1 |
+ |.2# b c #32####2 |
+ |.2#1a c4#32#22b2 |
+ |.2#76 6a#32# |
+ |.2# #32# |
+ |.2#ccccc#32# |
+ |.2# #32# 6 |
+ |.2# #32# 1#4|
+ ->|.2#bbbbb#32#427#2|<-
+ |.2# #3 a###8 |
+ |. 1 |
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x91cd '重'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 13574 .|
+ | cbbbbc####cb .|
+ | b#cb98#1 .|
+ | 11 2# 1.|
+ |3###############.|
+ | 1 2# 1 .|
+ | ########### .|
+ | #5 2# 5# .|
+ | ##ccc#ccc## .|
+ | #5 2# 5# .|
+ | 1###########1 .|
+ | 121112#211121 .|
+ | 7#ccc##cccc#7 .|
+ ->| 1# 1.|<-
+ |3###############.|
+ | 221111111111112.|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x91dd '針'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 17
+ Advance: 17
+ Offset: 1 x -3
+ _________________
+ |.................|
+ |. 61 183 |
+ |. 6#3 1#2 |
+ |. 1c9c6 1#1 |
+ |. 98 3cb2 1#1 |
+ |. 8b 18 1#1 |
+ |.8###### 212#3122|
+ |.42 2# 1#######8|
+ |. 1 2# 11 1#1 |
+ |.5#cb###a 1#1 |
+ |. 112# 24 1#1 |
+ |. 782# 98 1#1 |
+ |. 1#3#2#1 1#1 |
+ |. 42# 453 1#1 |
+ ->|.2469###b2 #1 |<-
+ |.6#a742 #2 |
+ |. 1#2 |
+ |. 2 |
+ |.................|
+ -----------------
+
+Char 0x9304 '錄'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 17 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 11 1 |
+ | 8c #81111 |
+ | 2#c5 2#####8 |
+ | b62a86a #5 |
+ | a6 a#####2 |
+ |1ba#### 11116# |
+ | 6 2#11221118b12 |
+ | 113#116######## |
+ | 9#####24 #3 33 |
+ | 21# 22#6 #72ca |
+ | 2#2# c3596###6 |
+ | b8#79 7c#99 |
+ | 45#252ab2#2#7 |
+ ->| 369####c11# 5#b2|<-
+ | 6b741 316a# 5a |
+ | 4b6 |
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x932f '錯'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 17 x 17
+ Advance: 17
+ Offset: 0 x -3
+ _________________
+ |.................|
+ | 72 71171 |
+ | 6#4 #21#1 |
+ | 1#5b6 1# 2#11 |
+ | a7 1ca9######a |
+ | 9a 32 1# 1# |
+ |3c##### 1# 1# |
+ | 2# 4########9|
+ | 2# |
+ | c#####62###### |
+ | 452# 841# 4# |
+ | 3c2#1#11# 4# |
+ | c5#68 1###### |
+ | 43# 471# 4# |
+ ->| 248##b71# 4# |<-
+ |2##951 1###### |
+ | 3 2# 4# |
+ | 1 1 |
+ |.................|
+ -----------------
+
+Char 0x9375 '鍵'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 17 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 42 a2 |
+ | 2#6 222 #1 |
+ | a9c6a##9#####2 |
+ | 6c 3#43a #2 #1 |
+ |5#4 4 88#######3|
+ |7a###b1#121#2 #2 |
+ | #2 98 1 #2 #2 |
+ | #1 ###b#####2 |
+ |1#####2 # #2 |
+ | 5 #3795b9##### |
+ | a4#6a999 #1 |
+ | 67#744#4######1 |
+ | #695#1 #2 |
+ ->|38a#87#8c52a2 1 |<-
+ |3a4 2c7 4c#####7 |
+ | 1 13344 |
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x94fe '链'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 17 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 1 2 |
+ | c9 c8 |
+ | 5b 99 12#3112 |
+ | 1c##94#1######c |
+ | a9111181 984 |
+ |3#3111 1#2#2 |
+ | 8###711 99 #21 |
+ | 2# 2##2######4 |
+ | 12# 1 c131 #2 |
+ | c###c c1 #1 |
+ | 2# c1a###### |
+ | 2# 5 c1111#212 |
+ | 2#9b c3 #2 |
+ ->| 3#a29c#94272122|<-
+ | aa 6c117b#####6|
+ | 11 1 2333 |
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x9519 '错'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 4 24 161 .|
+ | 2#6 6b 1#1 .|
+ | 89 116b12#22 .|
+ | 2####7########3.|
+ | b7 12 6a 1#1 .|
+ |8c2 1 16b12#211.|
+ |35###ca#########.|
+ | #2 .|
+ | 2 #3123######3 .|
+ | #####82#1111#2 .|
+ | 1 #2 2# #2 .|
+ | #2242######2 .|
+ | #7#82# #2 .|
+ ->| 1##5 2######2 .|<-
+ | 5b2 3# #3 .|
+ | 14 3 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x952e '键'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 17 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 75 92 |
+ | 1#7 #1 |
+ | 8c 9##8b#####2 |
+ | 3###9 b31 #21#1 |
+ |1cb 1c8#######6|
+ |1#5 3457531#21#21|
+ | 7###8b111 #2 #2 |
+ | 2# 5#c#######2 |
+ | 2# 2 7# #1 |
+ |1####b59ac##### |
+ | 1# 2ac61 #2 |
+ | 1#36b#5######3 |
+ | 1#c2ac #1 |
+ ->| 5#57#bc62#1 |<-
+ | 987#5 6b#####b |
+ | 14 34562 |
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x9589 '閉'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 15 x 15
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |.................|
+ |.4#####5 ######1.|
+ |.3#1 #4 #4 2# .|
+ |.3#ccc#4 ###### .|
+ |.3#211#4 #4 1# .|
+ |.3#2 #4 #5 2# .|
+ |.3#####5 ###### .|
+ |.3#1 28 1# .|
+ |.3#2 3#9a51# .|
+ |.3#3#cc###cc81# .|
+ |.3#1 b7# 1# .|
+ |.3#1 1b72# 1# .|
+ |.3#25#7 2# 1# .|
+ ->|.3#4b5 57# 1# .|<-
+ |.3#2 9b7 79# .|
+ |.3a2 7a5 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x958b '開'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 14 x 15
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |.................|
+ |.5#####4 ######..|
+ |.5# #4 #5 1#..|
+ |.4#ccc#4 ##cc##..|
+ |.4# #4 #5 1#..|
+ |.4#####4 ######..|
+ |.4# 1#..|
+ |.4# ######## 1#..|
+ |.4# #1 #1 1#..|
+ |.4# #1 #1 1#..|
+ |.4#8########71#..|
+ |.4# 3# #1 1#..|
+ |.4# b7 #1 1#..|
+ ->|.5#2bb #1 1#..|<-
+ |.5# 51 4 2acc..|
+ |.25 641..|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x9593 '間'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 15 x 16
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |. 1 .|
+ |.2#####2 ######2.|
+ |.2# #2 #2 #1.|
+ |.2#bbb#2 #cccc#1.|
+ |.2# #2 #2 #1.|
+ |.2#ccc#3 #cccc#1.|
+ |.2# #1.|
+ |.2# ######3 #1.|
+ |.2# #2 #2 #1.|
+ |.2# #2 #2 #1.|
+ |.2# #cccc#2 #1.|
+ |.2# #2 #2 #1.|
+ |.2# ######2 #1.|
+ ->|.2# 23#1.|<-
+ |.3# a#b .|
+ |. 1 11 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x9598 '閘'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 15 x 15
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |.................|
+ |.3#####2 ######1.|
+ |.3# #1 #2 # .|
+ |.3#ccc#1 #cccc# .|
+ |.3# #1 #2 # .|
+ |.3#####2 ###### .|
+ |.3# # .|
+ |.3# 2#######2 # .|
+ |.3# 1# 1# #1 # .|
+ |.3# 1#cc#cc#1 # .|
+ |.3# 1# 1# #1 # .|
+ |.3# 2#######2 # .|
+ |.3# 1# # .|
+ ->|.3# 1# 24# .|<-
+ |.3# 1b b## .|
+ |.27 451 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x95a2 '関'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 15 x 16
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |. 111112 1111112.|
+ |.2###### 5######.|
+ |.2#1113# 2#1113#.|
+ |.1###### 1######.|
+ |.1#1113# 2#1113#.|
+ |.1###### 6######.|
+ |.1# 53 64 2#.|
+ |.1# 38 7#2 2#.|
+ |.1# 3#######8 2#.|
+ |.1# 211#2111 2#.|
+ |.1# 2111#2112 2#.|
+ |.1# 8######## 2#.|
+ |.1# 8834 2#.|
+ ->|.1# 25bb18#a1 2#.|<-
+ |.2#1#c6 18879#.|
+ |.2c 2 8a4.|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x95b1 '閱'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 14 x 16
+ Advance: 17
+ Offset: 2 x -2
+ _________________
+ |.................|
+ |..111111 111111 .|
+ |..###### ######2.|
+ |..#4 2# #5 2#1.|
+ |..###### ######1.|
+ |..#5113# #5114#1.|
+ |..###### ######1.|
+ |..#4 65 6 2#1.|
+ |..#54a7 6b32#1.|
+ |..#5a######8c4#1.|
+ |..#4 #1 #1 2#1.|
+ |..#4 ######1 2#1.|
+ |..#4 3a # 2#1.|
+ |..#4 4c3 # 5b2#1.|
+ ->|..#4b#5 b##63#1.|<-
+ |..#421 4##1.|
+ |..72 1a5 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x95dc '關'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 15 x 14
+ Advance: 17
+ Offset: 1 x -1
+ _________________
+ |.................|
+ |.................|
+ |.2###### ######2.|
+ |.2#cccc# ccccc#2.|
+ |.2# 2# c2 #1.|
+ |.2###### ######1.|
+ |.2# a73 2c #1.|
+ |.2# 87 b5a34b #1.|
+ |.2#1cbc36bca1 #1.|
+ |.2# 184b26858 #1.|
+ |.2# abcc7c99a4#1.|
+ |.2# 6aa#2#278 #1.|
+ |.2# 6#c#1#c#7 #1.|
+ |.2# 3b#a #145 #1.|
+ ->|.2#16cb1 #1 45#1.|<-
+ |.3#165 7 7#a .|
+ |.................|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x95ed '闭'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 14 x 16
+ Advance: 17
+ Offset: 2 x -2
+ _________________
+ |.................|
+ |.. 171 .|
+ |.. 3#a 7cbbbbbc2.|
+ |.. 8#33655558#1.|
+ |..7513 #4 4#1.|
+ |..c9 #3 4#1.|
+ |..c712222#2 24#1.|
+ |..c79ccc##cc#4#1.|
+ |..c7 1c#2 4#1.|
+ |..c7 a7#2 4#1.|
+ |..c7 9b #2 4#1.|
+ |..c72bc1 #2 4#1.|
+ |..c79b1 #2 4#1.|
+ |..c7 46#2 4#1.|
+ ->|..c7 4#a 249#1.|<-
+ |..#9 1### .|
+ |.. 884 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x95ee '问'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 13 x 15
+ Advance: 17
+ Offset: 2 x -2
+ _________________
+ |.................|
+ |.................|
+ |.. 9c1 22222222..|
+ |.. 2cb b#######..|
+ |..1 46 5#..|
+ |..#9 5#..|
+ |..#6 22222 5#..|
+ |..#5 2#####2 5#..|
+ |..#5 2# #2 5#..|
+ |..#5 2# #2 5#..|
+ |..#5 2# #2 5#..|
+ |..#5 3#####2 5#..|
+ |..#5 11112 5#..|
+ |..#5 5#..|
+ ->|..#5 56b#..|<-
+ |..#6 7##a..|
+ |..42 252 ..|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x95f4 '间'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 13 x 16
+ Advance: 17
+ Offset: 2 x -2
+ _________________
+ |.................|
+ |.. 282 ..|
+ |.. 2#c 9#######..|
+ |.. 5#44555559#..|
+ |..76 3 7#..|
+ |..c9 121112 7#..|
+ |..c8 2#####2 7#..|
+ |..c8 2# #2 7#..|
+ |..c8 2#111#2 7#..|
+ |..c8 2#####2 7#..|
+ |..c8 2# #2 7#..|
+ |..c8 2# #2 7#..|
+ |..c8 2#####2 7#..|
+ |..c8 1322221 7#..|
+ ->|..c8 44a#..|<-
+ |..#9 6##b..|
+ |.. 153 ..|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x963b '阻'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 14 x 14
+ Advance: 17
+ Offset: 2 x -1
+ _________________
+ |.................|
+ |.................|
+ |..####c 4211231 .|
+ |..#31b7 ######2 .|
+ |..#21#1 #2 #2 .|
+ |..#27a #2 #2 .|
+ |..#2#5 ######2 .|
+ |..#28b #3111#2 .|
+ |..#2 c5 #2 #2 .|
+ |..#2 7a #2 #2 .|
+ |..#2 7c ######2 .|
+ |..#59#7 #3111#2 .|
+ |..#2b6 #2 #2 .|
+ |..#2 #2 #31.|
+ ->|..#2 5##########.|<-
+ |..#2 12111111112.|
+ |.................|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x9650 '限'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 14 x 14
+ Advance: 17
+ Offset: 2 x -1
+ _________________
+ |.................|
+ |.................|
+ |..####a2cbbbbc2 .|
+ |..#32c52#3333#2 .|
+ |..#11# 2# #2 .|
+ |..#169 2######2 .|
+ |..#1b4 2# #2 .|
+ |..#3#1 2#1111#2 .|
+ |..#19a 2######2 .|
+ |..#1 c32# 87 42 .|
+ |..#1 982# 594#7 .|
+ |..#23c72# 1#c3 .|
+ |..#3#a12# 89 .|
+ |..#11 2#2a2ca2 .|
+ ->|..#1 7##7 3##4.|<-
+ |..#2 8a1 24 .|
+ |.................|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x9665 '陥'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 15 x 17
+ Advance: 17
+ Offset: 1 x -3
+ _________________
+ |.................|
+ |. c81 .|
+ |.2####8 5#91 .|
+ |.2#22#31######c .|
+ |.1# 5c1b#3223#6 .|
+ |.1# 979#3 9# .|
+ |.1#1#3 2 66 .|
+ |.1#5# 1 321231.|
+ |.1# b7 #4 #####3.|
+ |.1# 3#2#2 #2 #2.|
+ |.1# c6#2 #311#2.|
+ |.1# 1#6#2 #####2.|
+ |.1#6#c1#2 #2 #2.|
+ |.1#581 #2 #2 #2.|
+ ->|.1# #2 #2 #2.|<-
+ |.2# #2 #####2.|
+ |.2# #31#2 #3.|
+ |.13 3 1 .|
+ |.................|
+ -----------------
+
+Char 0x968e '階'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |. 72 93 |
+ |.2####5#3 #2 2 |
+ |.1# 3#1#2 1#25cc1|
+ |.1# 7a ###c##a63 |
+ |.1# b5 #2 #3 3 |
+ |.1#1#1 #578#3 2b9|
+ |.1# b45#a66a###b2|
+ |.1# 3c 2 6b |
+ |.1# c3######## |
+ |.1# c5c5 2# |
+ |.1#16#3c5 2# |
+ |.1#5#6 c####### |
+ |.2# 1 c5 2# |
+ ->|.2# c####### |<-
+ |.2# #5 2# |
+ |. 2 31 3 |
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x9694 '隔'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 15 x 14
+ Advance: 17
+ Offset: 1 x -1
+ _________________
+ |.................|
+ |.................|
+ |.2##c#a###ccc##5.|
+ |.2#11c6443333441.|
+ |.2# 2#22##ccc#3 .|
+ |.2# 7b 2# #2 .|
+ |.2# c6 2# #2 .|
+ |.2#2#3 3cccccc2 .|
+ |.2# 792########3.|
+ |.2# c4# 3 3 1#1.|
+ |.2# b7# c1b61# .|
+ |.2#6c#5# 64c 1# .|
+ |.2#2932#8####4# .|
+ |.3# 2# c1 1# .|
+ ->|.4# 3# c136# .|<-
+ |.27 27 61272 .|
+ |.................|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x969b '際'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 15 x 16
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |. 35 .|
+ |.####6 a8 12222 .|
+ |.#22#13#####c#c .|
+ |.#25a b91b8b b5 .|
+ |.#2958c4bc c7b .|
+ |.#2#5b89b5 6#3 .|
+ |.#2a9 a9 b9 .|
+ |.#23#5acc###bcc5.|
+ |.#2 #9b2221222c3.|
+ |.#2 c7222222222 .|
+ |.#24#57#######6 .|
+ |.#6#8 422# 3 .|
+ |.#21 5#42# ab1 .|
+ ->|.#2 7#3 2# 9c2.|<-
+ |.#2 163 7bc 7 .|
+ |.3 461 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x96a8 '隨'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 15 x 16
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |. 87 .|
+ |.####2 c4 .|
+ |.#36c489####### .|
+ |.#1784# b4 .|
+ |.#1b31#28#c#cc6 .|
+ |.#3# 19c1 #1 .|
+ |.#5c 1399cccccc1.|
+ |.#1b8##12ccccc2 .|
+ |.#15b #11# #2 .|
+ |.#11# #11#aaa#1 .|
+ |.#47#1#11# #1 .|
+ |.#8#9 #11#bbb#1 .|
+ |.#33 1#11# 13#1 .|
+ ->|.#1 3c#72a #a .|<-
+ |.#21#72cc9777895.|
+ |.c2 2 479aabb1.|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x96c6 '集'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |. 1 2 |
+ |. 4#8 #6 |
+ |. bb 89 |
+ |. 7###########9 |
+ |. 4## 2# |
+ |.3#9#bbbb#bbbb7 |
+ |.6a2# 2# |
+ |. 1#bbbb#bbbc8 |
+ |. 2# 2# |
+ |. 2###########7 |
+ |. 13a1 28 11 |
+ |.4##############6|
+ |. 7c4#98 |
+ ->|. 27#a12# a#842 |<-
+ |.3##b4 2# 5c##2|
+ |. 42 2a 33 |
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x96e2 '離'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 5b1 3432 .|
+ | 2#6 1 78a9 .|
+ |9######## a55b .|
+ |31 21#3 12.|
+ | 9472a49 7#####8.|
+ | #28ca3#2## #1 .|
+ | #47 43#cb##### .|
+ | #2 1##3# #14 .|
+ | #######41# #1 .|
+ | #1 1# #1 .|
+ | #######21##### .|
+ | #29581#21# #1 .|
+ | #6#9a9#21# #1 .|
+ ->| #23 3#21#####8.|<-
+ | #2 18#12# .|
+ | #1 64 28 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x96fb '電'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 15 x 15
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |.................|
+ |. ############8 .|
+ |. 2# .|
+ |.##############2.|
+ |.#2 2# 1 #2.|
+ |.#2ccc82# ccca#2.|
+ |.22bbb72# cccc2 .|
+ |. 21124c 1 1 .|
+ |. 3########### .|
+ |. 2# #3 3# .|
+ |. 2#bbb#cbbbc# .|
+ |. 2# #3 3# .|
+ |. 2###########1 .|
+ ->|. 29 #4 177.|<-
+ |. b#######2.|
+ |. 111111 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x9700 '需'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 15 x 16
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |. 211111111121 .|
+ |. 5###########5 .|
+ |. 2# .|
+ |.##############2.|
+ |.#4 2# #1.|
+ |.#4#c# 2#1#c# #2.|
+ |. 1 1 2# .|
+ |. ccc 2#1ccc .|
+ |.22111111111112 .|
+ |.##############2.|
+ |. 1111c711111 .|
+ |. 4########### .|
+ |. 4# 1# #1 2# .|
+ ->|. 4# 1# #1 2# .|<-
+ |. 4# 1# #28a# .|
+ |. 3a 1 1 595 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x975e '非'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 15 x 16
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |. 1a5 491 .|
+ |. 1#4 4b .|
+ |. 1#3 4c 11.|
+ |.7#####3 4#####a.|
+ |.12213#3 4#11122.|
+ |. 1#3 4# .|
+ |. 3213#3 4#11231.|
+ |. #####3 4#####3.|
+ |. 1 1#3 4# 1 .|
+ |. 1#3 4# .|
+ |.22112#3 4# 1.|
+ |.c#####3 4#####c.|
+ |.1 1#3 4#11122.|
+ ->|. 1#3 4# .|<-
+ |. 1#4 5# .|
+ |. 172 39 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x9760 '靠'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |. 1 46 |
+ |. ba 7b 11 |
+ |. a##########8 |
+ |.1381 6b 11 |
+ |.8##############1|
+ |. 1 |
+ |. 5#ccccccc## |
+ |. 4# 5# |
+ |. 4ccc#cc#cc# |
+ |. 2 4# 2# |
+ |. ##cc## 2#####9 |
+ |. 7##### 2#####4 |
+ |. 3# 2# |
+ ->|.8##cc## 2#ccc##3|<-
+ |. 4# 2# 1 |
+ |. 4#12# |
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x9762 '面'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 17 x 15
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ |.................|
+ |2#ccccccccccccc#4|
+ | 5544448#64444551|
+ | 6# |
+ | 121119b222223 |
+ | 6############ |
+ | 4# 2# #1 6# |
+ | 4# 2#####1 6# |
+ | 4# 2# 1#1 6# |
+ | 4# 2# #1 6# |
+ | 4# 2#####1 6# |
+ | 4# 2# 1#1 6# |
+ | 4# 2# #1 6# |
+ ->| 5############ |<-
+ | 7#2222222227# |
+ | 35 24 |
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x97cc '韌'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 56 .|
+ | 85 1 1 .|
+ | a#####87######6.|
+ | 1 b 96111#31c6.|
+ |4########1 #1 c5.|
+ | 1 1195#1 c5.|
+ | 2###### c3#1 #5.|
+ | 1# 2#2#1# #4.|
+ | 2cc#cc#7a2c #4.|
+ | #2 15b #4.|
+ | c######2 88 #3.|
+ | 84 #2 1 #3 #3.|
+ | #######48b 1#3.|
+ ->| #2 5#3569#2.|<-
+ | #2 6#5 5#b5 .|
+ | 71 3 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x97ff '響'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | b3 76 .|
+ | 8842bb#b2####5.|
+ | 8b5c5#1 #1#15c .|
+ | a9c4 #aa#1#1c7 .|
+ | 194a8#bb#1#14#2.|
+ | 8ba#2#167 #33#6.|
+ | 3c75#b9c3#3#a1.|
+ |4cc5 3541 91 .|
+ | 3#cbbbbcbbbbc9 .|
+ | 1 2#3 1#6 .|
+ |8ccccccccccccccc.|
+ | bbbbbbbbbb2 .|
+ | #2 #1 .|
+ ->| #baaaaaaa#1 .|<-
+ | #bbbbbbbb#1 .|
+ | 81 91 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x9801 '頁'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 15 x 16
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |.322222222222223.|
+ |.###############.|
+ |. c9 .|
+ |. ########### .|
+ |. #611111116# .|
+ |. #6 6# .|
+ |. ########### .|
+ |. #5 5# .|
+ |. ########### .|
+ |. #6 6# .|
+ |. #cbbbbbbbc# .|
+ |. #c689abc### .|
+ |. 67 75 .|
+ ->|. 3a#91 18##93 .|<-
+ |.8c#81 5c#5.|
+ |.471 4 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x9805 '項'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 17 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 2111111112 |
+ | 22112a######### |
+ |1##### 89 |
+ | #2 11b4111 |
+ | #2 2####### |
+ | #2 2# 2# |
+ | #2 2####### |
+ | #2 2# 2# |
+ | #2 2# 2# |
+ | #2 2####### |
+ | 13#bb 2# 2# |
+ |2##952 2####### |
+ | 4 2821651 |
+ ->| 6#b4 6#a2 |<-
+ | 3#c4 1ac1|
+ | 2 2 |
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x9808 '須'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | a4 .|
+ | 7c2b#########.|
+ | 4#3 2213#51122.|
+ | 5#5 4# .|
+ |2c6 55 ######## .|
+ | 1#7 #311113# .|
+ | b9 #2 2# .|
+ | ab ######## .|
+ |2bb1 61#2 2# .|
+ | 61 7c1######## .|
+ | 2#3 #2 2# .|
+ | 1b7 ######## .|
+ | 1b9 29411862 .|
+ ->|4#9 4cb4 7#91.|<-
+ | 6 a#6 3cc.|
+ | 21 13.|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x9810 '預'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 15 x 16
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |. 222111223.|
+ |.9#####9########.|
+ |. 98 3# .|
+ |. 5959 117a111 .|
+ |. 2c#2 ####### .|
+ |. 1b4 #2 2# .|
+ |.b#####c####### .|
+ |. 2# b7#2 2# .|
+ |. 2#2b2#2 2# .|
+ |. 2# ####### .|
+ |. 2# #2 2# .|
+ |. 2# ####### .|
+ |. 2# 1621251 .|
+ ->|. 37# 8#7 5#a1.|<-
+ |. b#9 3#b2 1ac.|
+ |. 11 4 3.|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x9818 '領'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 15
+ Advance: 17
+ Offset: 0 x -1
+ _________________
+ |.................|
+ | 93 .|
+ | 5#5 c########.|
+ | ca#41114#1112.|
+ | 7b 5#4116a111 .|
+ | 5#34 75#######1.|
+ |4#4 b6 #2 1# .|
+ | 3 32 ####### .|
+ | 9#####3#2 1# .|
+ | 11117a #2 1# .|
+ | 1#3 ####### .|
+ | 9789 #2 1#1.|
+ | 2##1 #######1.|
+ | 3#7 1641561 .|
+ ->| 7#2 7#6 5cb3.|<-
+ | 1 ab2 89.|
+ |.................|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x982d '頭'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |.222222232222222 |
+ |.######b#cc##cc#3|
+ |. b6 |
+ |. 11#2 1 |
+ |. #####22######2 |
+ |. #2 #21# #2 |
+ |. #2 #21######2 |
+ |. #####31# #2 |
+ |. 51 48 1######2 |
+ |. 95 88 1# #2 |
+ |. 69 b3 1# #2 |
+ |. 3c c 2######2 |
+ |.1359ccc 391 6 |
+ ->|.##a742 6#812ca1 |<-
+ |.1 2cc4 1bb |
+ |. 3 14 |
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x984c '題'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 2222211 11.|
+ | 1#ccc#3#######b.|
+ | 1# #2 96 .|
+ | 1#####12###### .|
+ | 1#1 #12#1113# .|
+ | 1#211#22#2224# .|
+ | 1#####32#bbbb# .|
+ |5#######a###### .|
+ | 1212#113# 2# .|
+ | a81# 2###### .|
+ | c51###4272132 .|
+ | 2#b2# 11a#74#5 .|
+ | 6aca# 5##4 6#3.|
+ ->| b52##4262 51.|<-
+ |5# 18b########9.|
+ | 4 1112221.|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x985e '類'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 93 .|
+ | 59 #276b#######.|
+ | c5#2c21 99 1.|
+ | 43#46 c5 .|
+ |1#######1######2.|
+ | 119#461 #2 #2.|
+ | 76#1ba ######2.|
+ | 9b #217 #2 #2.|
+ |2b1 63a #2 #2.|
+ | #2a3 ######2.|
+ |1#######3#2 #2.|
+ | 3a71 ######2.|
+ | a45c3 28114 .|
+ ->| 2a8 543c913c8 .|<-
+ |2c9 9#4 1aa.|
+ | 1 31 1.|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x986f '顯'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |. 1 2111112 |
+ |.2######4####### |
+ |.2# #2 58 |
+ |.1######23#####2 |
+ |.2# #22#111#1 |
+ |.2######32# #1 |
+ |. a2 b3 1#####1 |
+ |.a8a6a8b41# #1 |
+ |.78a ac6 1#####1 |
+ |.3b4848862# #1 |
+ |.a#bc8b9#3#111#1 |
+ |.23 21 313#####2 |
+ |.59576788 36 31 |
+ ->|.962a3b2b3c7 9c3 |<-
+ |.c3 5 1 5#5 8#4|
+ |. 193 5 |
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x9875 '页'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 15 x 16
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |. 1.|
+ |.5##############.|
+ |.13222229c222223.|
+ |. b8 .|
+ |. 2222#62222 .|
+ |. 2########## .|
+ |. 1#2 5# .|
+ |. 1#2 a9 5# .|
+ |. 1#2 ca 5# .|
+ |. 1#2 #7 5# .|
+ |. 2#3 2#4 5# .|
+ |. 3#3 8# 4 4a .|
+ |. 5#62#c4 .|
+ ->|. 136b#6 19#a2 .|<-
+ |.2###81 4c#2.|
+ |. 34 15 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x9879 '项'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 15
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ |.................|
+ | ##########.|
+ |3####c32228c2223.|
+ | 33#42 a8 .|
+ | 1#3 1######## .|
+ | 1#3 #622227# .|
+ | 1#3 #5 1816# .|
+ | 1#3 #5 2# 6# .|
+ | 1#3 #5 2# 6# .|
+ | 1#883#5 3c 6# .|
+ |2b###92#5 79 6# .|
+ | a63 1a41c5869 .|
+ | 2ba1bc2 .|
+ ->| 49#9 a#3.|<-
+ | 7#b4 b9.|
+ | 2 1 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x9891 '频'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 181 .|
+ | 621# ##ccccc#.|
+ | #31# 211c4112.|
+ | #11###6 #2 .|
+ | #11# 1122#2221.|
+ | 1#32#123######2.|
+ |4#######a# 32 #1.|
+ | 1 2# 1# a9 #1.|
+ | b82#183# b6 #1.|
+ | 1#42#4#3# b5 #1.|
+ | 7c 2#891# #3 #1.|
+ | 75 2##22#4# #2.|
+ | 3#6 1aa231 .|
+ ->| 49#5 19c19#6 .|<-
+ |2##92 8#b1 8#7.|
+ | 31 56 96.|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x9898 '题'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 15
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ |.................|
+ | #####2#######b.|
+ | #322#2212#3111.|
+ | #####2124#223 .|
+ | #1 #22#####c .|
+ | #311#22# 2c .|
+ | 1#ccc#22# b72c .|
+ | 2# c52c .|
+ |a######b2# #42c .|
+ | 41#2 2#1#22c .|
+ | 2#1###4299c975 .|
+ | 5#3#2 3a#47#9 .|
+ | a9b#2 3c#4 5a .|
+ ->|3#25#72 11 22.|<-
+ |ab 29#########b.|
+ | 1 233445553.|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x9996 '首'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |. 55 294 |
+ |. 8#1 8#3 |
+ |. 192 2#4 |
+ |.###############2|
+ |.2211112#7111223 |
+ |. 11112#41112 |
+ |. 8########## |
+ |. 7# 6# |
+ |. 7########## |
+ |. 7# 6# |
+ |. 7# 6# |
+ |. 7########## |
+ |. 7# 6# |
+ ->|. 7########## |<-
+ |. 7# 7# |
+ |. 48 47 |
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x9a45 '驅'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 17 x 15
+ Advance: 17
+ Offset: 0 x -1
+ _________________
+ |.................|
+ | 11111112 |
+ | 1#c#cc########c |
+ | 1# # #1 |
+ | 1#b#ba #1 #bb# |
+ | 1# # #1 # # |
+ | 1# # #1 # # |
+ | 1#c#cb #1 #cc# |
+ | 1# # #1ccabca |
+ | 2#######1b bb b |
+ | 22123 ##1b bb b |
+ | 8996c1##1b bb b |
+ | a788b7##1#bb#cb |
+ |29332 2c#1 |
+ ->| 88c8########1|<-
+ | 784 11111111 |
+ |.................|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x9a57 '驗' top
+ Font: #12 FZHeiTi (17)
+ Bitmap: 17 x 17
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ | 2 |
+ | 6#8 |
+ | 2#####6 b#c |
+ | 2# #1 5#4#7 |
+ | 1# # 2#4 6#5 |
+ | 1#c#cc2c8 9#91|
+ | 1# # 2c5####869 |
+ | 1#c#bc2 |
+ | 1# #1 1### ### |
+ | 2# #1 # # # # |
+ | 2##### # # # # |
+ | 74462#1c##1### |
+ |1c8779c 2b 28 |
+ |3b876bc 6#8 7c1 |
+ ->|6a21 3b c284c6c2 |<-
+ | c#89a 2c5 8c |
+ | 63 32 68 3 |
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x9a71 '驱'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | 1 1 .|
+ |3#####81#######8.|
+ | #6 #3222232.|
+ | 194 #4 #21 66 .|
+ | 1#32#3 #8#1 bc .|
+ | 2#23#1 #3c82#5 .|
+ | 3#14# #23#9c .|
+ | 4# 6c #2 8#6 .|
+ | 6#####2#2 8#6 .|
+ | 22116#1#22#9#1 .|
+ | 17# #2ba b9 .|
+ |39b#68b #8#2 5#3.|
+ |2963 aa #23 15 .|
+ ->| #8 #3222222.|<-
+ | ac#51#######c.|
+ | 572 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x9ad4 '體'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 0 x -2
+ _________________
+ |.................|
+ | b1b2 .|
+ | 2####3 # # .|
+ | 2c a23#c#c#c#3.|
+ | 1#baa22# # # #2.|
+ | 1c ca21#a#a#a#1.|
+ | 3#2cb42# # # #1.|
+ |2#aaac#3#7#7#7#2.|
+ |2# 7#366666662.|
+ | 1#cc# 6########.|
+ | 1# # ccccccc .|
+ | 1#bb# #1 1# .|
+ | 1# # #1 1# .|
+ | 1#bb# 1c#ccccc .|
+ ->| 1# # 79 88 .|<-
+ | 1# 7# #########.|
+ | 2c 58 1 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x9ad8 '高'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 15 x 16
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |. 9a .|
+ |.1 8#1 11.|
+ |.##############8.|
+ |.211111111111121.|
+ |. 3######### .|
+ |. 2# 2# .|
+ |. 3######### .|
+ |. .|
+ |. #ccccccccccc6 .|
+ |. #6222222222#5 .|
+ |. #5 #ccccc3 #5 .|
+ |. #5 #3222#2 #5 .|
+ |. #5 #2 #2 #5 .|
+ ->|. #5 ######3 #5 .|<-
+ |. #6 6a#3 .|
+ |. 42 296 .|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x9ed8 '默'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |. 284 |
+ |.2#######3 3#551 |
+ |.1# # b2 2#3#7 |
+ |.1#74#3bb2 2#29a |
+ |.1#49#77b223#2221|
+ |.1# # b4######7|
+ |.2#######313#6 11|
+ |. # 4#8 |
+ |.7#######4 5cb |
+ |. # 23 89# |
+ |.5789#c##8 c5b5 |
+ |.79753211 3#18b |
+ |.1b2a1#1#1ba 3#6 |
+ ->|.3# #1c4ac#3 a#6|<-
+ |.7b 512 7#8 2c3|
+ |. 5 |
+ |.................|
+ |.................|
+ -----------------
+
+Char 0x9f20 '鼠'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 16 x 16
+ Advance: 17
+ Offset: 1 x -2
+ _________________
+ |.................|
+ |. 36 |
+ |. ###cb55##### |
+ |. #5 12115# |
+ |. #####23##### |
+ |. #5 2115# |
+ |. #6111111115# |
+ |. ############ |
+ |. 63 1 731 141 |
+ |. #57#3#39b4#1 |
+ |. #4 61#2 62#1 |
+ |. #5c8 #295 #2 |
+ |. #42a2#25c1#4 |
+ |. #414 #226 99 7 |
+ ->|.1#a#71#b#8 3#7#3|<-
+ |.6#a2 3#82 7#b |
+ |. 4 2 21 |
+ |.................|
+ |.................|
+ -----------------
+
+Char 0xac00 '가'
+ Font: #13 gulim (17)
+ Bitmap: 16 x 15
+ Advance: 18
+ Offset: 1 x -3
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |.4#######3 ## .|
+ |. 6#9 ## .|
+ |. 4#a ## .|
+ |. 5#8 ## .|
+ |. 7#7 ## .|
+ |. 9#4 ####4.|
+ |. c# ## .|
+ |. 7#8 ## .|
+ |. 4#c ## .|
+ |. 6##1 ## .|
+ |.5###a1 ## .|
+ ->|.5a71 ## .|<-
+ |. ## .|
+ |. ## .|
+ |. 44 .|
+ |..................|
+ ------------------
+
+Char 0xac04 '간'
+ Font: #13 gulim (17)
+ Bitmap: 17 x 14
+ Advance: 18
+ Offset: 1 x -2
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |. 6#######4 aa |
+ |. 6#8 ## |
+ |. 6#8 ## |
+ |. 7#5 ## |
+ |. c#1 ####3|
+ |. 1c#5 ## |
+ |. 2a##3 ## |
+ |.4####4 ## |
+ |. 22 ## |
+ |. 33 ## |
+ |. 1## cc |
+ ->|. 1## |<-
+ |. ## |
+ |. 9##########a |
+ |..................|
+ |..................|
+ ------------------
+
+Char 0xac10 '감'
+ Font: #13 gulim (17)
+ Bitmap: 17 x 14
+ Advance: 18
+ Offset: 1 x -2
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |. c#######2 #c |
+ |. 9#6 ## |
+ |. 9#5 ## |
+ |. ##1 ####3|
+ |. 8#8 ## |
+ |. 1c#9 ## |
+ |. 49###4 ## |
+ |.4##a3 88 |
+ |. |
+ |. 9##########9 |
+ |. 1## 1## |
+ ->|. 1## 1## |<-
+ |. 1## 2## |
+ |. a##########7 |
+ |..................|
+ |..................|
+ ------------------
+
+Char 0xac15 '강'
+ Font: #13 gulim (17)
+ Bitmap: 16 x 15
+ Advance: 18
+ Offset: 1 x -3
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |.7#######4 1#c .|
+ |. 4#a 1## .|
+ |. 4#9 1## .|
+ |. 7#5 1####2.|
+ |. 3#b 1## .|
+ |. 7#c1 1## .|
+ |.3a###6 1## .|
+ |.4a83 1## .|
+ |. 55 .|
+ |. 19######a2 .|
+ |. 4##71 17##5 .|
+ ->|. ##2 2## .|<-
+ |. ##2 2## .|
+ |. 5##82 14a##4 .|
+ |. 19######71 .|
+ |..................|
+ ------------------
+
+Char 0xac19 '같'
+ Font: #13 gulim (17)
+ Bitmap: 16 x 14
+ Advance: 18
+ Offset: 1 x -2
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |.6#######6 c# .|
+ |. 2#b ## .|
+ |. 2#a ## .|
+ |. 7#6 ####4.|
+ |. 3#a ## .|
+ |. 19#9 ## .|
+ |.7###c3 ## .|
+ |.363 c# .|
+ |. .|
+ |. b##########7 .|
+ |. 1## .|
+ ->|. 1###########6 .|<-
+ |. 1## .|
+ |. a##########7 .|
+ |..................|
+ |..................|
+ ------------------
+
+Char 0xac1c '개'
+ Font: #13 gulim (17)
+ Bitmap: 14 x 15
+ Advance: 18
+ Offset: 2 x -3
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |..8#####7 cc #c..|
+ |.. 1## ## ##..|
+ |.. ## ## ##..|
+ |.. 1#c ## ##..|
+ |.. 2#b ## ##..|
+ |.. 4#9 ######..|
+ |.. 7#6 ## ##..|
+ |.. 1##1 ## ##..|
+ |.. a#7 ## ##..|
+ |.. 1b#a ## ##..|
+ |..8##7 ## ##..|
+ ->|..561 ## ##..|<-
+ |.. ## ##..|
+ |.. ## ##..|
+ |.. 44 66..|
+ |..................|
+ ------------------
+
+Char 0xac70 '거'
+ Font: #13 gulim (17)
+ Bitmap: 14 x 15
+ Advance: 18
+ Offset: 2 x -3
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |.. a######8 #c..|
+ |.. ##2 ##..|
+ |.. c#2 ##..|
+ |.. c#1 ##..|
+ |.. ## ##..|
+ |.. 3#a ##..|
+ |.. 8#6c####..|
+ |.. 3## ##..|
+ |.. 1##4 ##..|
+ |.. 3##5 ##..|
+ |..1a###3 ##..|
+ ->|..1893 ##..|<-
+ |.. ##..|
+ |.. ##..|
+ |.. 55..|
+ |..................|
+ ------------------
+
+Char 0xac80 '검'
+ Font: #13 gulim (17)
+ Bitmap: 15 x 14
+ Advance: 18
+ Offset: 1 x -2
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |. b######a c# ..|
+ |. b#3 ## ..|
+ |. a#3 ## ..|
+ |. c# ## ..|
+ |. 3#b##### ..|
+ |. 1cc1 ## ..|
+ |. 17#b1 ## ..|
+ |.4####4 ## ..|
+ |. 22 ..|
+ |. 8##########a..|
+ |. ##1 ##..|
+ ->|. ## ##..|<-
+ |. ##1 1##..|
+ |. 9##########8..|
+ |..................|
+ |..................|
+ ------------------
+
+Char 0xac83 '것'
+ Font: #13 gulim (17)
+ Bitmap: 15 x 14
+ Advance: 18
+ Offset: 1 x -2
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |. c######a cc ..|
+ |. ##2 ## ..|
+ |. c#1 ## ..|
+ |. 1#c ## ..|
+ |. 8#9##### ..|
+ |. a#9 ## ..|
+ |. 4a##6 ## ..|
+ |.5###6 ## ..|
+ |. ## ..|
+ |. 8c3 66 ..|
+ |. 5##b ..|
+ ->|. 5##8#9 ..|<-
+ |. 27##b1 7##51 ..|
+ |. 6##c3 3###7..|
+ |..................|
+ |..................|
+ ------------------
+
+Char 0xac8c '게'
+ Font: #13 gulim (17)
+ Bitmap: 14 x 15
+ Advance: 18
+ Offset: 2 x -3
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |.. #####8 cc cc..|
+ |.. ##1 ## ##..|
+ |.. ## ## ##..|
+ |.. ## ## ##..|
+ |.. 1#c ## ##..|
+ |.. 2#b ## ##..|
+ |.. 5#a#### ##..|
+ |.. a#4 ## ##..|
+ |.. 5#a ## ##..|
+ |.. 5#c1 ## ##..|
+ |..2c#b1 ## ##..|
+ ->|..153 ## ##..|<-
+ |.. ## ##..|
+ |.. ## ##..|
+ |.. 55..|
+ |..................|
+ ------------------
+
+Char 0xaca0 '겠'
+ Font: #13 gulim (17)
+ Bitmap: 16 x 15
+ Advance: 18
+ Offset: 1 x -3
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |.1#####b1 cc cc .|
+ |. b#4 ## ## .|
+ |. a#4 ## ## .|
+ |. a#3 ## ## .|
+ |. ###### ## .|
+ |. 6#9 ## ## .|
+ |. 4##1 ## ## .|
+ |. 3c#b1 cc ## .|
+ |.4##5 cc .|
+ |. 2b8 7a3 .|
+ |. 6## a#7 .|
+ ->|. c##4 2### .|<-
+ |. 8#c##2 c###8 .|
+ |. a#9 4####6 a##1.|
+ |. 22 1331 22 .|
+ |..................|
+ ------------------
+
+Char 0xaca9 '격'
+ Font: #13 gulim (17)
+ Bitmap: 14 x 15
+ Advance: 18
+ Offset: 2 x -3
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |.. c######9 #c..|
+ |.. ##2 1##..|
+ |.. c#1 1##..|
+ |.. #ca####..|
+ |.. 4c7 1##..|
+ |.. 3c9 1##..|
+ |.. 29#5 b####..|
+ |..3c#c4 1##..|
+ |.. a9..|
+ |.. ..|
+ |.. b##########7..|
+ ->|.. 3#c..|<-
+ |.. 2#c..|
+ |.. 2#c..|
+ |.. 2#b..|
+ |..................|
+ ------------------
+
+Char 0xacac '견'
+ Font: #13 gulim (17)
+ Bitmap: 14 x 14
+ Advance: 18
+ Offset: 2 x -2
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |.. c######8 #c..|
+ |.. ##2 ##..|
+ |.. c#1 ##..|
+ |.. #######..|
+ |.. 3c8 ##..|
+ |.. 2cb1 ##..|
+ |.. 7#91 ##..|
+ |..5###92 c####..|
+ |..131 ##..|
+ |.. 33 ##..|
+ |.. ## ##..|
+ ->|.. ## 11..|<-
+ |.. ##1 ..|
+ |.. 9##########b..|
+ |..................|
+ |..................|
+ ------------------
+
+Char 0xacb0 '결'
+ Font: #13 gulim (17)
+ Bitmap: 15 x 14
+ Advance: 18
+ Offset: 1 x -2
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |.1#######8 #c ..|
+ |. c#2 1## ..|
+ |. b###### ..|
+ |. cb 1## ..|
+ |. 8#6 1## ..|
+ |. 1a#81##### ..|
+ |. 4b##5 1## ..|
+ |.5###5 cb ..|
+ |. ..|
+ |. b#########a ..|
+ |. 1## ..|
+ ->|. a#########9 ..|<-
+ |. c#2 ..|
+ |. 9##########7..|
+ |..................|
+ |..................|
+ ------------------
+
+Char 0xacbd '경'
+ Font: #13 gulim (17)
+ Bitmap: 14 x 15
+ Advance: 18
+ Offset: 1 x -3
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |. c######9 c#...|
+ |. c#2 ##...|
+ |. b#1 ##...|
+ |. 1#ba####...|
+ |. a#4 ##...|
+ |. 2##6 ##...|
+ |. 4c##3 9####...|
+ |.5###4 ##...|
+ |. 88...|
+ |. 2a######a2 ...|
+ |. 5##81 17##5...|
+ ->|. c#2 2##...|<-
+ |. c#2 2##...|
+ |. 4##83 14a##5...|
+ |. 18######81 ...|
+ |..................|
+ ------------------
+
+Char 0xacc4 '계'
+ Font: #13 gulim (17)
+ Bitmap: 14 x 15
+ Advance: 18
+ Offset: 2 x -3
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |..1#####8 aa cc..|
+ |.. 1## ## ##..|
+ |.. ## ## ##..|
+ |.. ###### ##..|
+ |.. 1#c ## ##..|
+ |.. 2#b ## ##..|
+ |.. 5#8 ## ##..|
+ |.. a#3 ## ##..|
+ |.. 5#a6#### ##..|
+ |.. 5#c1 ## ##..|
+ |..2c#b1 ## ##..|
+ ->|..253 ## ##..|<-
+ |.. ## ##..|
+ |.. cc ##..|
+ |.. 55..|
+ |..................|
+ ------------------
+
+Char 0xace0 '고'
+ Font: #13 gulim (17)
+ Bitmap: 14 x 13
+ Advance: 18
+ Offset: 2 x -1
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |.. 8##########8 ..|
+ |.. ## ..|
+ |.. ## ..|
+ |.. ## ..|
+ |.. ## ..|
+ |.. 1## ..|
+ |.. 77 2#c ..|
+ |.. ## 4#9 ..|
+ |.. ## 8#6 ..|
+ |.. ## b#2 ..|
+ |.. ## 77 ..|
+ ->|.. ## ..|<-
+ |..b############b..|
+ |..................|
+ |..................|
+ |..................|
+ ------------------
+
+Char 0xacf3 '곳'
+ Font: #13 gulim (17)
+ Bitmap: 16 x 15
+ Advance: 18
+ Offset: 1 x -3
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |. b##########6 .|
+ |. 1#c .|
+ |. ##1 .|
+ |. ab ## .|
+ |. ## ## .|
+ |. ## 1#c .|
+ |. ## 2#b .|
+ |.1##############1.|
+ |. .|
+ |. 2b9 .|
+ |. a##6 .|
+ ->|. a#9##4 .|<-
+ |. 17##6 1##a1 .|
+ |. a##91 7###1 .|
+ |. 1 32 .|
+ |..................|
+ ------------------
+
+Char 0xacf5 '공'
+ Font: #13 gulim (17)
+ Bitmap: 15 x 14
+ Advance: 18
+ Offset: 1 x -2
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |. b##########6 ..|
+ |. 1#b ..|
+ |. c# ..|
+ |. 66 ## ..|
+ |. ## ## ..|
+ |. ## 1#c ..|
+ |. ## 2c9 ..|
+ |.3#############a..|
+ |. ..|
+ |. 2a######a2 ..|
+ |. 7##71 17##7 ..|
+ ->|. ##2 1## ..|<-
+ |. 7##5 5##8 ..|
+ |. 3c######c3 ..|
+ |..................|
+ |..................|
+ ------------------
+
+Char 0xacfc '과'
+ Font: #13 gulim (17)
+ Bitmap: 17 x 15
+ Advance: 18
+ Offset: 1 x -3
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |. 9#######a #c |
+ |. ## ## |
+ |. ## ## |
+ |. ## ## |
+ |. ## ## |
+ |. ## ## |
+ |. ## 1#b ####2|
+ |. ## 4#9 ## |
+ |. ## 7b4 ## |
+ |. ## ## |
+ |. ##1347a### |
+ ->|.5############# |<-
+ |. ## |
+ |. ## |
+ |. 77 |
+ |..................|
+ ------------------
+
+Char 0xad00 '관'
+ Font: #13 gulim (17)
+ Bitmap: 17 x 14
+ Advance: 18
+ Offset: 1 x -2
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |. 4#######a #c |
+ |. ##1 ## |
+ |. ##1 ## |
+ |. 77 ## ## |
+ |. ## ## ## |
+ |. ## ## ####2|
+ |. ## 5##58## |
+ |.1############# |
+ |. ## |
+ |. 33 ## |
+ |. 1## bb |
+ ->|. 1## |<-
+ |. ##1 |
+ |. 9##########a |
+ |..................|
+ |..................|
+ ------------------
+
+Char 0xad6c '구'
+ Font: #13 gulim (17)
+ Bitmap: 15 x 15
+ Advance: 18
+ Offset: 1 x -3
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |. c##########6 ..|
+ |. 3## ..|
+ |. ## ..|
+ |. ## ..|
+ |. #c ..|
+ |. 1#b ..|
+ |. 3#a ..|
+ |. 5#8 ..|
+ |.5#############a..|
+ |. ## ..|
+ |. ## ..|
+ ->|. ## ..|<-
+ |. ## ..|
+ |. ## ..|
+ |. 66 ..|
+ |..................|
+ ------------------
+
+Char 0xadf8 '그'
+ Font: #13 gulim (17)
+ Bitmap: 14 x 13
+ Advance: 18
+ Offset: 2 x -1
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |..1##########b ..|
+ |.. ##1 ..|
+ |.. c#1 ..|
+ |.. c#1 ..|
+ |.. ##1 ..|
+ |.. ## ..|
+ |.. ## ..|
+ |.. ## ..|
+ |.. ## ..|
+ |.. 1#c ..|
+ |.. 3#b ..|
+ ->|.. 5#8 ..|<-
+ |..b############6..|
+ |..................|
+ |..................|
+ |..................|
+ ------------------
+
+Char 0xadfc '근'
+ Font: #13 gulim (17)
+ Bitmap: 16 x 14
+ Advance: 18
+ Offset: 1 x -2
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |. 2###########9 .|
+ |. ##1 .|
+ |. c#1 .|
+ |. ## .|
+ |. ## .|
+ |. #c .|
+ |. 1#c .|
+ |.1##############1.|
+ |. .|
+ |. 78 .|
+ |. ## .|
+ ->|. ## .|<-
+ |. ##1 .|
+ |. 8##########b .|
+ |..................|
+ |..................|
+ ------------------
+
+Char 0xae00 '글'
+ Font: #13 gulim (17)
+ Bitmap: 16 x 14
+ Advance: 18
+ Offset: 1 x -2
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |. 2###########7 .|
+ |. 2## .|
+ |. 1#c .|
+ |. 2#a .|
+ |. 3#9 .|
+ |.1##############1.|
+ |. .|
+ |. .|
+ |. a##########9 .|
+ |. ## .|
+ |. 8##########b .|
+ ->|. c#2 .|<-
+ |. c#2 .|
+ |. 8##########c .|
+ |..................|
+ |..................|
+ ------------------
+
+Char 0xae08 '금'
+ Font: #13 gulim (17)
+ Bitmap: 16 x 14
+ Advance: 18
+ Offset: 1 x -2
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |. 4###########6 .|
+ |. 3#c .|
+ |. 2#b .|
+ |. 3#a .|
+ |. 4#9 .|
+ |. 5#8 .|
+ |.1##############1.|
+ |. .|
+ |. .|
+ |. 8##########9 .|
+ |. ##1 1## .|
+ ->|. ## ## .|<-
+ |. ##1 1## .|
+ |. 8##########8 .|
+ |..................|
+ |..................|
+ ------------------
+
+Char 0xae09 '급'
+ Font: #13 gulim (17)
+ Bitmap: 16 x 14
+ Advance: 18
+ Offset: 1 x -2
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |. 3###########7 .|
+ |. 2## .|
+ |. 1#c .|
+ |. 2#b .|
+ |. 2#a .|
+ |. 3#9 .|
+ |.1##############1.|
+ |. .|
+ |. c# bb .|
+ |. ## ## .|
+ |. ############ .|
+ ->|. ## ## .|<-
+ |. ##1 1## .|
+ |. 8##########8 .|
+ |..................|
+ |..................|
+ ------------------
+
+Char 0xae30 '기'
+ Font: #13 gulim (17)
+ Bitmap: 14 x 15
+ Advance: 18
+ Offset: 2 x -3
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |.. 9######a #c..|
+ |.. c#3 ##..|
+ |.. 9#3 ##..|
+ |.. a#2 ##..|
+ |.. b#1 ##..|
+ |.. ## ##..|
+ |.. 4#a ##..|
+ |.. c#4 ##..|
+ |.. a#8 ##..|
+ |.. 3##8 ##..|
+ |..1a###4 ##..|
+ ->|.. 562 ##..|<-
+ |.. ##..|
+ |.. ##..|
+ |.. 55..|
+ |..................|
+ ------------------
+
+Char 0xae34 '긴'
+ Font: #13 gulim (17)
+ Bitmap: 14 x 14
+ Advance: 18
+ Offset: 2 x -2
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |.. b######b cc..|
+ |.. b#3 ##..|
+ |.. b#3 ##..|
+ |.. c#1 ##..|
+ |.. 2#b ##..|
+ |.. 2##4 ##..|
+ |.. 18##5 ##..|
+ |..2a###a2 ##..|
+ |..29a4 ##..|
+ |.. 33 ##..|
+ |.. ## 77..|
+ ->|.. ## ..|<-
+ |.. ##1 ..|
+ |.. 9##########b..|
+ |..................|
+ |..................|
+ ------------------
+
+Char 0xae38 '길'
+ Font: #13 gulim (17)
+ Bitmap: 15 x 14
+ Advance: 18
+ Offset: 1 x -2
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |.1#######b1 cc ..|
+ |. a#4 ## ..|
+ |. 9#3 ## ..|
+ |. c# ## ..|
+ |. 5#9 ## ..|
+ |. 6#c ## ..|
+ |. 38##8 ## ..|
+ |.6###71 bb ..|
+ |. b#########8 ..|
+ |. ## ..|
+ |. 1## ..|
+ ->|. a#########9 ..|<-
+ |. c#2 ..|
+ |. 9##########7..|
+ |..................|
+ |..................|
+ ------------------
+
+Char 0xae4c '까'
+ Font: #13 gulim (17)
+ Bitmap: 17 x 15
+ Advance: 18
+ Offset: 0 x -3
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ | 9###a8###a c# .|
+ | ## ## ## .|
+ | ## ## ## .|
+ | ## ## ## .|
+ | ## ## ## .|
+ | 1#c ## ## .|
+ | 3#a #c ####3.|
+ | 7#7 2#a ## .|
+ | c#3 5#8 ## .|
+ | 8#a a#4 ## .|
+ | 9#c1 5#c ## .|
+ ->|177 1##2 ## .|<-
+ | ## .|
+ | ## .|
+ | 33 .|
+ |..................|
+ ------------------
+
+Char 0xaebc '꺼'
+ Font: #13 gulim (17)
+ Bitmap: 15 x 15
+ Advance: 18
+ Offset: 1 x -3
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |. 4###ab###7 #c..|
+ |. ## c#8 ##..|
+ |. ## c#2 ##..|
+ |. ## b#1 ##..|
+ |. ## b#1 ##..|
+ |. ## bc1 ##..|
+ |. 2#b c#5####..|
+ |. 4#9 ## ##..|
+ |. 9#5 #c ##..|
+ |. 3## 3#a ##..|
+ |. 5##3 9#5 ##..|
+ ->|.1cc2 6#c ##..|<-
+ |. bc1 ##..|
+ |. ##..|
+ |. 77..|
+ |..................|
+ ------------------
+
+Char 0xaed8 '께'
+ Font: #13 gulim (17)
+ Bitmap: 14 x 15
+ Advance: 18
+ Offset: 2 x -3
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |.. 9##7b##8 bbc#..|
+ |.. 2#c #c ####..|
+ |.. cc cc ####..|
+ |.. cc cc ####..|
+ |.. cc cc ####..|
+ |.. cb c######..|
+ |.. 1cb 1#b ####..|
+ |.. 3#9 2#a ####..|
+ |.. 9#5 5#8 ####..|
+ |.. 4#b b#4 ####..|
+ |..4##2 8#a ####..|
+ ->|..121 1a9 ####..|<-
+ |.. ####..|
+ |.. ####..|
+ |.. 1133..|
+ |..................|
+ ------------------
+
+Char 0xb044 '끄'
+ Font: #13 gulim (17)
+ Bitmap: 14 x 13
+ Advance: 18
+ Offset: 2 x -1
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |..2#####a9####a ..|
+ |.. ##1 ## ..|
+ |.. c#1 ## ..|
+ |.. c#1 ## ..|
+ |.. ## ## ..|
+ |.. ## ## ..|
+ |.. ## ## ..|
+ |.. 1#c 1#c ..|
+ |.. 2#b 2#b ..|
+ |.. 4#9 4#9 ..|
+ |.. 7#7 6#7 ..|
+ ->|.. 9#5 8#5 ..|<-
+ |..c############c..|
+ |..................|
+ |..................|
+ |..................|
+ ------------------
+
+Char 0xb098 '나'
+ Font: #13 gulim (17)
+ Bitmap: 15 x 15
+ Advance: 18
+ Offset: 2 x -3
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |..88 #c .|
+ |..## 1## .|
+ |..## 1## .|
+ |..## 1## .|
+ |..## 1## .|
+ |..## 1## .|
+ |..## 1####5.|
+ |..## 1## .|
+ |..## 1## .|
+ |..##4 148### .|
+ |..4########c## .|
+ ->|.. 1## .|<-
+ |.. 1## .|
+ |.. 1## .|
+ |.. 66 .|
+ |..................|
+ ------------------
+
+Char 0xb09c '난'
+ Font: #13 gulim (17)
+ Bitmap: 16 x 15
+ Advance: 18
+ Offset: 1 x -2
+ __________________
+ |..................|
+ |..................|
+ |.11 .|
+ |.## ## .|
+ |.## ## .|
+ |.## ## .|
+ |.## ## .|
+ |.## ####3.|
+ |.##1 15## .|
+ |.8############ .|
+ |. 111 ## .|
+ |. ## .|
+ |. c# ## .|
+ |. ##1 33 .|
+ ->|. ##1 .|<-
+ |. ##2 .|
+ |. 8##########b .|
+ |..................|
+ |..................|
+ ------------------
+
+Char 0xb0a8 '남'
+ Font: #13 gulim (17)
+ Bitmap: 16 x 14
+ Advance: 18
+ Offset: 1 x -2
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |.88 ## .|
+ |.## ## .|
+ |.## ## .|
+ |.## ####3.|
+ |.## ## .|
+ |.##3 136a### .|
+ |.5#########b## .|
+ |. ## .|
+ |. 33 .|
+ |. 8##########8 .|
+ |. ##1 1## .|
+ ->|. ## ## .|<-
+ |. ##1 1## .|
+ |. 9##########7 .|
+ |..................|
+ |..................|
+ ------------------
+
+Char 0xb0ac '났'
+ Font: #13 gulim (17)
+ Bitmap: 16 x 15
+ Advance: 18
+ Offset: 1 x -3
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |.aa ## .|
+ |.## ## .|
+ |.## ## .|
+ |.## ####3.|
+ |.## ## .|
+ |.##3 136a### .|
+ |.5#########b## .|
+ |. ## .|
+ |. 88 .|
+ |. 3b8 6c5 .|
+ |. 7#c a#9 .|
+ ->|. ###3 2###1 .|<-
+ |. a#c##11c#c#b .|
+ |.c#8 5####6 8##2 .|
+ |.11 1231 12 .|
+ |..................|
+ ------------------
+
+Char 0xb0b4 '내'
+ Font: #13 gulim (17)
+ Bitmap: 14 x 15
+ Advance: 18
+ Offset: 2 x -3
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |.. a9 cc cc..|
+ |..1## ## ##..|
+ |..1## ## ##..|
+ |..1## ## ##..|
+ |..1## ## ##..|
+ |..1## ## ##..|
+ |..1## ######..|
+ |..1## ## ##..|
+ |..1## ## ##..|
+ |.. ##1 2## ##..|
+ |.. 7######## ##..|
+ ->|.. ## ##..|<-
+ |.. ## ##..|
+ |.. ## ##..|
+ |.. 22 55..|
+ |..................|
+ ------------------
+
+Char 0xb110 '널'
+ Font: #13 gulim (17)
+ Bitmap: 14 x 14
+ Advance: 18
+ Offset: 2 x -2
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |..bc c# ..|
+ |..## ##1..|
+ |..## 6######1..|
+ |..## ##1..|
+ |..## ##1..|
+ |..##4 137#c4 ##1..|
+ |..6######c5 ##1..|
+ |.. 78 ..|
+ |.. b##########7 ..|
+ |.. ## ..|
+ |.. 1## ..|
+ ->|.. a##########9 ..|<-
+ |.. c#2 ..|
+ |.. 9##########a ..|
+ |..................|
+ |..................|
+ ------------------
+
+Char 0xb124 '네'
+ Font: #13 gulim (17)
+ Bitmap: 13 x 15
+ Advance: 18
+ Offset: 3 x -3
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |...bb bb #c..|
+ |...## ## ##..|
+ |...## ## ##..|
+ |...## ## ##..|
+ |...## ## ##..|
+ |...## 3##### ##..|
+ |...## ## ##..|
+ |...## ## ##..|
+ |...## ## ##..|
+ |...## 486## ##..|
+ |...a#####8## ##..|
+ ->|... 11 ## ##..|<-
+ |... ## ##..|
+ |... cc ##..|
+ |... 44..|
+ |..................|
+ ------------------
+
+Char 0xb137 '넷'
+ Font: #13 gulim (17)
+ Bitmap: 14 x 15
+ Advance: 18
+ Offset: 2 x -3
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |..bb 99 #c ..|
+ |..## ## ## ..|
+ |..## ## ## ..|
+ |..## 2##### ## ..|
+ |..## ## ## ..|
+ |..## ## ## ..|
+ |..##2 1## ## ..|
+ |..7######## ## ..|
+ |.. cc ## ..|
+ |.. 78 33 ..|
+ |.. 5##7 ..|
+ ->|.. 3####3 ..|<-
+ |.. 7##21##8 ..|
+ |..7###8 19###3..|
+ |..385 441..|
+ |..................|
+ ------------------
+
+Char 0xb144 '년'
+ Font: #13 gulim (17)
+ Bitmap: 13 x 14
+ Advance: 18
+ Offset: 2 x -2
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |..99 cc...|
+ |..## ##...|
+ |..## b#####...|
+ |..## ##...|
+ |..## ##...|
+ |..## b#####...|
+ |..##1 11 ##...|
+ |..8#######5 ##...|
+ |.. 122 ##...|
+ |.. 33 ##...|
+ |.. ##1 aa...|
+ ->|.. ##1 ...|<-
+ |.. ##2 ...|
+ |.. 8##########c...|
+ |..................|
+ |..................|
+ ------------------
+
+Char 0xb178 '노'
+ Font: #13 gulim (17)
+ Bitmap: 16 x 14
+ Advance: 18
+ Offset: 1 x -2
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |. 77 .|
+ |. ## .|
+ |. ## .|
+ |. ## .|
+ |. ## .|
+ |. ## .|
+ |. ##1 .|
+ |. 7##########c .|
+ |. .|
+ |. bb .|
+ |. ## .|
+ ->|. ## .|<-
+ |. ## .|
+ |.2##############1.|
+ |..................|
+ |..................|
+ ------------------
+
+Char 0xb188 '놈'
+ Font: #13 gulim (17)
+ Bitmap: 16 x 15
+ Advance: 18
+ Offset: 1 x -2
+ __________________
+ |..................|
+ |..................|
+ |. 11 .|
+ |. ## .|
+ |. ## .|
+ |. ## .|
+ |. ##1 .|
+ |. 8##########c .|
+ |. ## .|
+ |. ## .|
+ |.5##############1.|
+ |. .|
+ |. 7##########8 .|
+ |. ##1 1## .|
+ ->|. ##1 ## .|<-
+ |. ##1 1## .|
+ |. 8##########8 .|
+ |..................|
+ |..................|
+ ------------------
+
+Char 0xb192 '높'
+ Font: #13 gulim (17)
+ Bitmap: 15 x 15
+ Advance: 18
+ Offset: 1 x -2
+ __________________
+ |..................|
+ |..................|
+ |. 11 ..|
+ |. ## ..|
+ |. ## ..|
+ |. ## ..|
+ |. ## ..|
+ |. 8##########a ..|
+ |. 1## ..|
+ |. 1## ..|
+ |.7#############a..|
+ |. ..|
+ |. 2###########b ..|
+ |. 3#b b#1 ..|
+ ->|. 1#c ## ..|<-
+ |. ## ## ..|
+ |. b###########b ..|
+ |..................|
+ |..................|
+ ------------------
+
+Char 0xb204 '누'
+ Font: #13 gulim (17)
+ Bitmap: 15 x 15
+ Advance: 18
+ Offset: 2 x -3
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |.. 9a .|
+ |.. ##1 .|
+ |.. ##1 .|
+ |.. ##1 .|
+ |.. ##3 .|
+ |.. 6###########3 .|
+ |.. .|
+ |.. .|
+ |..b#############5.|
+ |.. ##1 .|
+ |.. ##1 .|
+ ->|.. ##1 .|<-
+ |.. ##1 .|
+ |.. ##1 .|
+ |.. 55 .|
+ |..................|
+ ------------------
+
+Char 0xb205 '눅'
+ Font: #13 gulim (17)
+ Bitmap: 15 x 16
+ Advance: 18
+ Offset: 1 x -3
+ __________________
+ |..................|
+ |..................|
+ |. 11 ..|
+ |. 1## ..|
+ |. 1## ..|
+ |. 1## ..|
+ |. 1##1 ..|
+ |. 9###########2..|
+ |. ..|
+ |. ..|
+ |.5#############a..|
+ |. ## ..|
+ |. ## ..|
+ |. 2###########9 ..|
+ ->|. 1## ..|<-
+ |. ## ..|
+ |. ## ..|
+ |. #c ..|
+ |..................|
+ ------------------
+
+Char 0xb20c '눌'
+ Font: #13 gulim (17)
+ Bitmap: 15 x 14
+ Advance: 18
+ Offset: 1 x -2
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |. 9a ..|
+ |. ##1 ..|
+ |. ##1 ..|
+ |. ##3 ..|
+ |. 7###########3..|
+ |. ..|
+ |.1#############c..|
+ |. ## ..|
+ |. ## ..|
+ |. b##########a ..|
+ |. ## ..|
+ ->|. b##########9 ..|<-
+ |. ## ..|
+ |. a###########5..|
+ |..................|
+ |..................|
+ ------------------
+
+Char 0xb274 '뉴'
+ Font: #13 gulim (17)
+ Bitmap: 16 x 15
+ Advance: 18
+ Offset: 1 x -3
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |. 9a .|
+ |. ##1 .|
+ |. ##1 .|
+ |. ##1 .|
+ |. ##3 .|
+ |. 7##########b .|
+ |. .|
+ |. .|
+ |.1##############1.|
+ |. ## ## .|
+ |. ## ## .|
+ ->|. ## ## .|<-
+ |. ## ## .|
+ |. ## ## .|
+ |. 33 55 .|
+ |..................|
+ ------------------
+
+Char 0xb294 '는'
+ Font: #13 gulim (17)
+ Bitmap: 16 x 14
+ Advance: 18
+ Offset: 1 x -2
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |. 45 .|
+ |. ##1 .|
+ |. ##1 .|
+ |. ##1 .|
+ |. ##3 .|
+ |. 7########### .|
+ |. .|
+ |. .|
+ |.1##############1.|
+ |. 55 .|
+ |. ## .|
+ ->|. ## .|<-
+ |. ##1 .|
+ |. 8###########2 .|
+ |..................|
+ |..................|
+ ------------------
+
+Char 0xb2a5 '능'
+ Font: #13 gulim (17)
+ Bitmap: 16 x 15
+ Advance: 18
+ Offset: 1 x -3
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |. c#1 .|
+ |. ##1 .|
+ |. ##1 .|
+ |. ##2 .|
+ |. 8##########b .|
+ |. .|
+ |. .|
+ |.1#############c1.|
+ |. .|
+ |. 18######5 .|
+ |. 5##a3115###3 .|
+ ->|. ##3 4#c .|<-
+ |. ##2 3#c .|
+ |. 4##a4 14b##4 .|
+ |. 17######71 .|
+ |..................|
+ ------------------
+
+Char 0xb2c8 '니'
+ Font: #13 gulim (17)
+ Bitmap: 12 x 15
+ Advance: 18
+ Offset: 3 x -3
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |...cb cc...|
+ |...## ##...|
+ |...## ##...|
+ |...## ##...|
+ |...## ##...|
+ |...## ##...|
+ |...## ##...|
+ |...## ##...|
+ |...## ##...|
+ |...##1 147###...|
+ |...8###########...|
+ ->|... ##...|<-
+ |... ##...|
+ |... ##...|
+ |... 33...|
+ |..................|
+ ------------------
+
+Char 0xb2d9 '닙'
+ Font: #13 gulim (17)
+ Bitmap: 13 x 14
+ Advance: 18
+ Offset: 2 x -2
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |..bc c#...|
+ |..## ##...|
+ |..## ##...|
+ |..## ##...|
+ |..##1 26b##...|
+ |..8############...|
+ |.. 111 ##...|
+ |.. 77...|
+ |.. bb ab...|
+ |.. ## ##...|
+ |.. ###########...|
+ ->|.. ## ##...|<-
+ |.. ## 1##...|
+ |.. 9#########8...|
+ |..................|
+ |..................|
+ ------------------
+
+Char 0xb2e4 '다'
+ Font: #13 gulim (17)
+ Bitmap: 15 x 15
+ Advance: 18
+ Offset: 2 x -3
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |..7#######1 c# .|
+ |..##1 ## .|
+ |..## ## .|
+ |..## ## .|
+ |..## ## .|
+ |..## ####3.|
+ |..## ## .|
+ |..## ## .|
+ |..## ## .|
+ |..##1 259### .|
+ |..8#######a6## .|
+ ->|.. ## .|<-
+ |.. ## .|
+ |.. ## .|
+ |.. 66 .|
+ |..................|
+ ------------------
+
+Char 0xb2e8 '단'
+ Font: #13 gulim (17)
+ Bitmap: 16 x 14
+ Advance: 18
+ Offset: 1 x -2
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |.6#######a #c .|
+ |.##2 1## .|
+ |.## 1## .|
+ |.## 1####2.|
+ |.## 1## .|
+ |.## 1## .|
+ |.##1 137b### .|
+ |.7######a1 1## .|
+ |. 1## .|
+ |. c#1 1## .|
+ |. ##1 a9 .|
+ ->|. ##1 .|<-
+ |. ##2 .|
+ |. 8###########4 .|
+ |..................|
+ |..................|
+ ------------------
+
+Char 0xb2ec '달'
+ Font: #13 gulim (17)
+ Bitmap: 16 x 14
+ Advance: 18
+ Offset: 1 x -2
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |.6#######a #c .|
+ |.##2 1## .|
+ |.## 1## .|
+ |.## 1####2.|
+ |.## 1## .|
+ |.##1 136c### .|
+ |.7######a1 1## .|
+ |. 33 .|
+ |. a##########a .|
+ |. ##1 .|
+ |. 8##########c .|
+ ->|. c#2 .|<-
+ |. c#2 .|
+ |. 9##########a .|
+ |..................|
+ |..................|
+ ------------------
+
+Char 0xb2f9 '당'
+ Font: #13 gulim (17)
+ Bitmap: 16 x 15
+ Advance: 18
+ Offset: 1 x -3
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |.6#######a #c .|
+ |.##2 1## .|
+ |.## 1## .|
+ |.## 1####2.|
+ |.## 1## .|
+ |.##1 149### .|
+ |.8########b8## .|
+ |. 11 1## .|
+ |. 87 .|
+ |. 2a######81 .|
+ |. 6##71 19##4 .|
+ ->|. ##2 3## .|<-
+ |. c#4 3## .|
+ |. 3##c4115###3 .|
+ |. 5######6 .|
+ |..................|
+ ------------------
+
+Char 0xb300 '대'
+ Font: #13 gulim (17)
+ Bitmap: 12 x 15
+ Advance: 18
+ Offset: 3 x -3
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |...7#####2cc c#...|
+ |...##1 ## ##...|
+ |...## ## ##...|
+ |...## ## ##...|
+ |...## ## ##...|
+ |...## #####...|
+ |...## ## ##...|
+ |...## ## ##...|
+ |...## ## ##...|
+ |...## ## ##...|
+ |...##1 25a## ##...|
+ ->|...6######## ##...|<-
+ |... ## ##...|
+ |... ## ##...|
+ |... 22 55...|
+ |..................|
+ ------------------
+
+Char 0xb354 '더'
+ Font: #13 gulim (17)
+ Bitmap: 13 x 15
+ Advance: 18
+ Offset: 2 x -3
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |.. 7######c c#...|
+ |.. ##1 ##...|
+ |..1## ##...|
+ |..1## ##...|
+ |..1## ##...|
+ |..1## 4######...|
+ |..1## ##...|
+ |..1## ##...|
+ |..1## ##...|
+ |..1## ##...|
+ |.. ##21359#b1##...|
+ ->|.. 8######c5 ##...|<-
+ |.. ##...|
+ |.. ##...|
+ |.. 44...|
+ |..................|
+ ------------------
+
+Char 0xb370 '데'
+ Font: #13 gulim (17)
+ Bitmap: 13 x 15
+ Advance: 18
+ Offset: 3 x -3
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |...6####b cc #c..|
+ |...##1 ## ##..|
+ |...## ## ##..|
+ |...## ## ##..|
+ |...## ## ##..|
+ |...## 3##### ##..|
+ |...## ## ##..|
+ |...## ## ##..|
+ |...## ## ##..|
+ |...## 1485## ##..|
+ |...9#####6## ##..|
+ ->|... ## ##..|<-
+ |... ## ##..|
+ |... ## ##..|
+ |... 55..|
+ |..................|
+ ------------------
+
+Char 0xb3c4 '도'
+ Font: #13 gulim (17)
+ Bitmap: 16 x 13
+ Advance: 18
+ Offset: 1 x -1
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |. 7##########a .|
+ |. ##1 .|
+ |. 1## .|
+ |. 1## .|
+ |. 1## .|
+ |. 1## .|
+ |. ##1 .|
+ |. 6##########c .|
+ |. 77 .|
+ |. ## .|
+ |. ## .|
+ ->|. ## .|<-
+ |.1##############1.|
+ |..................|
+ |..................|
+ |..................|
+ ------------------
+
+Char 0xb3cc '돌'
+ Font: #13 gulim (17)
+ Bitmap: 16 x 14
+ Advance: 18
+ Offset: 1 x -2
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |. 7##########c .|
+ |. ##2 .|
+ |. ##1 .|
+ |. ##2 .|
+ |. 6##########b .|
+ |. ## .|
+ |.1##############1.|
+ |. .|
+ |. b##########7 .|
+ |. ## .|
+ |. 1## .|
+ ->|. a##########8 .|<-
+ |. c#2 .|
+ |. 9###########2 .|
+ |..................|
+ |..................|
+ ------------------
+
+Char 0xb3d9 '동'
+ Font: #13 gulim (17)
+ Bitmap: 15 x 15
+ Advance: 18
+ Offset: 1 x -3
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |. 7##########b ..|
+ |. ##2 ..|
+ |. ##1 ..|
+ |. ##2 ..|
+ |. 8##########b ..|
+ |. ## ..|
+ |. ## ..|
+ |.1##############..|
+ |. ..|
+ |. 2a######81 ..|
+ |. 6##71 18##4 ..|
+ ->|. ##2 2## ..|<-
+ |. ##4 3## ..|
+ |. 3##c4115###3 ..|
+ |. 5######6 ..|
+ |..................|
+ ------------------
+
+Char 0xb418 '되'
+ Font: #13 gulim (17)
+ Bitmap: 13 x 15
+ Advance: 18
+ Offset: 3 x -3
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |... 9#######8 #c..|
+ |...1##1 ##..|
+ |...1## ##..|
+ |...1## ##..|
+ |...1## ##..|
+ |...1## ##..|
+ |...1##1 ##..|
+ |... 7#######a ##..|
+ |... ## ##..|
+ |... ## ##..|
+ |... 1## 259##..|
+ ->|...9############..|<-
+ |... ##..|
+ |... ##..|
+ |... 66..|
+ |..................|
+ ------------------
+
+Char 0xb41c '된'
+ Font: #13 gulim (17)
+ Bitmap: 14 x 14
+ Advance: 18
+ Offset: 2 x -2
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |.. 8########1cc ..|
+ |.. ##3 ## ..|
+ |.. ##1 ## ..|
+ |.. ##1 ## ..|
+ |.. ##2 ## ..|
+ |.. 6########4## ..|
+ |.. ## ## ..|
+ |.. 1## 25a## ..|
+ |..c############ ..|
+ |.. 33 ## ..|
+ |.. ## bc ..|
+ ->|.. ## ..|<-
+ |.. ##1 ..|
+ |.. 8##########b..|
+ |..................|
+ |..................|
+ ------------------
+
+Char 0xb420 '될'
+ Font: #13 gulim (17)
+ Bitmap: 14 x 14
+ Advance: 18
+ Offset: 2 x -2
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |.. 8#######b ## ..|
+ |.. ##2 ## ..|
+ |.. ##1 ## ..|
+ |.. ##2 ## ..|
+ |.. 8########1## ..|
+ |.. ## 3## ..|
+ |.. ######## ..|
+ |..c#####3 ## ..|
+ |.. 22 ..|
+ |.. b#########b ..|
+ |.. 1## ..|
+ ->|.. b#########9 ..|<-
+ |.. ##1 ..|
+ |.. a##########7..|
+ |..................|
+ |..................|
+ ------------------
+
+Char 0xb428 '됨'
+ Font: #13 gulim (17)
+ Bitmap: 13 x 14
+ Advance: 18
+ Offset: 2 x -2
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |.. 8########1c#...|
+ |.. ##3 ##...|
+ |.. ##1 ##...|
+ |.. ##2 ##...|
+ |.. 8########4##...|
+ |.. ## ##...|
+ |.. 1## 29###...|
+ |..b#########c##...|
+ |.. 99...|
+ |.. 8#########7...|
+ |.. ##1 2##...|
+ ->|.. ## 1##...|<-
+ |.. ## 2##...|
+ |.. 9#########7...|
+ |..................|
+ |..................|
+ ------------------
+
+Char 0xb429 '됩'
+ Font: #13 gulim (17)
+ Bitmap: 14 x 14
+ Advance: 18
+ Offset: 1 x -2
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |. 8########1c#...|
+ |. ##3 ##...|
+ |. ##1 ##...|
+ |. ##2 ##...|
+ |. 8########4##...|
+ |. ## ##...|
+ |. 1## 14b##...|
+ |.4#############...|
+ |. 44 77...|
+ |. ## ##...|
+ |. ###########...|
+ ->|. ## ##...|<-
+ |. ##1 1##...|
+ |. 9#########8...|
+ |..................|
+ |..................|
+ ------------------
+
+Char 0xb450 '두'
+ Font: #13 gulim (17)
+ Bitmap: 15 x 15
+ Advance: 18
+ Offset: 1 x -3
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |. 7##########8 ..|
+ |. ##2 ..|
+ |. ##1 ..|
+ |. ##1 ..|
+ |. ##2 ..|
+ |. 7##########c ..|
+ |. ..|
+ |. ..|
+ |.1#############b..|
+ |. ## ..|
+ |. ## ..|
+ ->|. ## ..|<-
+ |. ## ..|
+ |. ## ..|
+ |. 22 ..|
+ |..................|
+ ------------------
+
+Char 0xb458 '둘'
+ Font: #13 gulim (17)
+ Bitmap: 15 x 14
+ Advance: 18
+ Offset: 1 x -2
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |. 7##########c ..|
+ |. ##2 ..|
+ |. ##1 ..|
+ |. ##1 ..|
+ |. 7###########2..|
+ |. ..|
+ |. ..|
+ |.1#############c..|
+ |. ## ..|
+ |. b##########a ..|
+ |. ## ..|
+ ->|. a##########9 ..|<-
+ |. ## ..|
+ |. a###########5..|
+ |..................|
+ |..................|
+ ------------------
+
+Char 0xb4a4 '뒤'
+ Font: #13 gulim (17)
+ Bitmap: 14 x 15
+ Advance: 18
+ Offset: 1 x -3
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |. 6#######7 c#...|
+ |. ##2 ##...|
+ |. ##1 ##...|
+ |. ##1 ##...|
+ |. ##1 ##...|
+ |. 7#######a ##...|
+ |. ##...|
+ |. 1246a###...|
+ |.1##########9##...|
+ |. 1 ## ##...|
+ |. ## ##...|
+ ->|. ## ##...|<-
+ |. ## ##...|
+ |. ## ##...|
+ |. 22 56...|
+ |..................|
+ ------------------
+
+Char 0xb4c8 '듈'
+ Font: #13 gulim (17)
+ Bitmap: 16 x 14
+ Advance: 18
+ Offset: 1 x -2
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |. 8##########b .|
+ |. ##2 .|
+ |. ##1 .|
+ |. ##2 .|
+ |. 8###########1 .|
+ |. .|
+ |. .|
+ |.1##############1.|
+ |. ## ## .|
+ |. b##########a .|
+ |. 1## .|
+ ->|. b##########a .|<-
+ |. ## .|
+ |. b###########2 .|
+ |..................|
+ |..................|
+ ------------------
+
+Char 0xb4dc '드'
+ Font: #13 gulim (17)
+ Bitmap: 16 x 13
+ Advance: 18
+ Offset: 1 x -1
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |. 8##########a .|
+ |. ##1 .|
+ |. ## .|
+ |. ## .|
+ |. ## .|
+ |. ## .|
+ |. ##1 .|
+ |. 7###########1 .|
+ |. .|
+ |. .|
+ |. .|
+ ->|. .|<-
+ |.1##############1.|
+ |..................|
+ |..................|
+ |..................|
+ ------------------
+
+Char 0xb4e0 '든'
+ Font: #13 gulim (17)
+ Bitmap: 16 x 14
+ Advance: 18
+ Offset: 1 x -2
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |. 8##########a .|
+ |. ##2 .|
+ |. ##1 .|
+ |. ##1 .|
+ |. ##2 .|
+ |. 8##########b .|
+ |. .|
+ |. .|
+ |.1##############1.|
+ |. 33 .|
+ |. ## .|
+ ->|. ## .|<-
+ |. ##1 .|
+ |. 8##########b .|
+ |..................|
+ |..................|
+ ------------------
+
+Char 0xb4e4 '들'
+ Font: #13 gulim (17)
+ Bitmap: 16 x 14
+ Advance: 18
+ Offset: 1 x -2
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |. 8##########c .|
+ |. ##2 .|
+ |. ##1 .|
+ |. ##2 .|
+ |. 7###########1 .|
+ |. .|
+ |.1##############1.|
+ |. .|
+ |. a##########7 .|
+ |. 1## .|
+ |. 2## .|
+ ->|. a##########8 .|<-
+ |. c#2 .|
+ |. 9##########c .|
+ |..................|
+ |..................|
+ ------------------
+
+Char 0xb514 '디'
+ Font: #13 gulim (17)
+ Bitmap: 12 x 15
+ Advance: 18
+ Offset: 3 x -3
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |...5#######1 cc...|
+ |...##1 ##...|
+ |...## ##...|
+ |...## ##...|
+ |...## ##...|
+ |...## ##...|
+ |...## ##...|
+ |...## ##...|
+ |...## 1##...|
+ |...##3 149####...|
+ |...c#######c6##...|
+ ->|...2b##4 ##...|<-
+ |... ##...|
+ |... ##...|
+ |... 33...|
+ |..................|
+ ------------------
+
+Char 0xb530 '따'
+ Font: #13 gulim (17)
+ Bitmap: 16 x 15
+ Advance: 18
+ Offset: 1 x -3
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |.8####b###b #c .|
+ |.##2 ##1 ## .|
+ |.## ## ## .|
+ |.## ## ## .|
+ |.## ## ## .|
+ |.## ## ## .|
+ |.## ## ####1.|
+ |.## ## ## .|
+ |.## ## ## .|
+ |.##124##225c## .|
+ |.a############ .|
+ ->|. ## .|<-
+ |. ## .|
+ |. ## .|
+ |. 33 .|
+ |..................|
+ ------------------
+
+Char 0xb54c '때'
+ Font: #13 gulim (17)
+ Bitmap: 13 x 15
+ Advance: 18
+ Offset: 2 x -3
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |..8###c##bcc c#...|
+ |..##1 ## ## ##...|
+ |..## ## ## ##...|
+ |..## ## ## ##...|
+ |..## ## ## ##...|
+ |..## ## ## ##...|
+ |..## ## #####...|
+ |..## ## ## ##...|
+ |..## ## ## ##...|
+ |..##11##14## ##...|
+ |..9######### ##...|
+ ->|.. ## ##...|<-
+ |.. ## ##...|
+ |.. cc ##...|
+ |.. 34...|
+ |..................|
+ ------------------
+
+Char 0xb5a0 '떠'
+ Font: #13 gulim (17)
+ Bitmap: 13 x 15
+ Advance: 18
+ Offset: 3 x -3
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |...7###a7####2#c..|
+ |...##1 ##1 ##..|
+ |...## ## ##..|
+ |...## ## ##..|
+ |...## ## ##..|
+ |...## ## 9####..|
+ |...## ## ##..|
+ |...## ## ##..|
+ |...## ## ##..|
+ |...## ## 11##..|
+ |...a###a8####8##..|
+ ->|... ##..|<-
+ |... ##..|
+ |... ##..|
+ |... 44..|
+ |..................|
+ ------------------
+
+Char 0xb610 '또'
+ Font: #13 gulim (17)
+ Bitmap: 14 x 13
+ Advance: 18
+ Offset: 2 x -1
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |..7#####28#####6..|
+ |..## ## ..|
+ |..## ## ..|
+ |..## ## ..|
+ |..## ## ..|
+ |..## ## ..|
+ |..##1133 ## ..|
+ |..7#####48#####8..|
+ |.. ..|
+ |.. #c ..|
+ |.. ## ..|
+ ->|.. ## ..|<-
+ |..b############b..|
+ |..................|
+ |..................|
+ |..................|
+ ------------------
+
+Char 0xb73b '뜻'
+ Font: #13 gulim (17)
+ Bitmap: 15 x 15
+ Advance: 18
+ Offset: 1 x -3
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |. 7#####28#####4..|
+ |. ##1 ## ..|
+ |. ## ## ..|
+ |. ## ## ..|
+ |. ## 122 ## ..|
+ |. 7#####48#####6..|
+ |. ..|
+ |. b############b..|
+ |. ..|
+ |. 3## ..|
+ |. c##8 ..|
+ ->|. 2##69#7 ..|<-
+ |. 2a##4 9##5 ..|
+ |.2###5 3###2..|
+ |. 11 ..|
+ |..................|
+ ------------------
+
+Char 0xb77c '라'
+ Font: #13 gulim (17)
+ Bitmap: 15 x 15
+ Advance: 18
+ Offset: 2 x -3
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |..c######7 ## .|
+ |.. 1## ##1 .|
+ |.. ## ##1 .|
+ |.. ## ##1 .|
+ |.. 1## ##1 .|
+ |..a######9 ##1 .|
+ |..## ####3.|
+ |..## ##1 .|
+ |..## ##1 .|
+ |..## 26###1 .|
+ |..9###########1 .|
+ ->|.. 1 ##1 .|<-
+ |.. ##1 .|
+ |.. ##1 .|
+ |.. 44 .|
+ |..................|
+ ------------------
+
+Char 0xb798 '래'
+ Font: #13 gulim (17)
+ Bitmap: 13 x 15
+ Advance: 18
+ Offset: 2 x -3
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |..a#####7 bb c#...|
+ |.. 1## ## ##...|
+ |.. ## ## ##...|
+ |.. ## ## ##...|
+ |.. 1## ## ##...|
+ |..7#####9 #####...|
+ |..##1 ## ##...|
+ |..## ## ##...|
+ |..## ## ##...|
+ |..##1 16## ##...|
+ |..8######### ##...|
+ ->|.. ## ##...|<-
+ |.. ## ##...|
+ |.. cc ##...|
+ |.. 33...|
+ |..................|
+ ------------------
+
+Char 0xb7a8 '램'
+ Font: #13 gulim (17)
+ Bitmap: 14 x 14
+ Advance: 18
+ Offset: 2 x -2
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |..a#####8 cc c# ..|
+ |.. 2## ## ## ..|
+ |.. 1## ## ## ..|
+ |..6#####9 ##### ..|
+ |..##2 ## ## ..|
+ |..## ## ## ..|
+ |..##1 29## ## ..|
+ |..7######### ## ..|
+ |.. 11 44 ..|
+ |.. 8#########9 ..|
+ |.. ## ##1..|
+ ->|.. ## ##1..|<-
+ |.. ## ##1..|
+ |.. 9#########9 ..|
+ |..................|
+ |..................|
+ ------------------
+
+Char 0xb7c9 '량'
+ Font: #13 gulim (17)
+ Bitmap: 16 x 15
+ Advance: 18
+ Offset: 1 x -3
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |.a#######8 ## .|
+ |. 1## ## .|
+ |. 1## ####2.|
+ |.6#######9 ## .|
+ |.c#3 ## .|
+ |.c#2 ####2.|
+ |.c#3 259### .|
+ |.6#########a## .|
+ |. ## .|
+ |. 2a######91 .|
+ |. 5##71 18##4 .|
+ ->|. ##3 2## .|<-
+ |. b#5 3## .|
+ |. 2###4115c##3 .|
+ |. 5######6 .|
+ |..................|
+ ------------------
+
+Char 0xb7ec '러'
+ Font: #13 gulim (17)
+ Bitmap: 13 x 15
+ Advance: 18
+ Offset: 2 x -3
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |.. b######7 c#...|
+ |.. 1## ##...|
+ |.. ## ##...|
+ |.. ## ##...|
+ |.. 1## ##...|
+ |.. a######6 ##...|
+ |..1## 9####...|
+ |..1## ##...|
+ |..1## ##...|
+ |..1## 2474 ##...|
+ |.. 9#######8 ##...|
+ ->|.. ##...|<-
+ |.. ##...|
+ |.. ##...|
+ |.. 22...|
+ |..................|
+ ------------------
+
+Char 0xb7f0 '런'
+ Font: #13 gulim (17)
+ Bitmap: 13 x 14
+ Advance: 18
+ Offset: 2 x -2
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |..a######7 cc...|
+ |.. 1## ##...|
+ |.. ## ##...|
+ |.. 1## ##...|
+ |..9######79####...|
+ |..##1 ##...|
+ |..## ##...|
+ |..##1 14762 ##...|
+ |..8######b2 ##...|
+ |.. 33 ##...|
+ |.. ## 88...|
+ ->|.. ## ...|<-
+ |.. ##1 ...|
+ |.. 8##########b...|
+ |..................|
+ |..................|
+ ------------------
+
+Char 0xb7fd '럽'
+ Font: #13 gulim (17)
+ Bitmap: 14 x 14
+ Advance: 18
+ Offset: 2 x -2
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |.. b######7 ba..|
+ |.. 1## ##..|
+ |.. ## ##..|
+ |.. 13334## ##..|
+ |.. c######59####..|
+ |..1## ##..|
+ |..1## 13684 ##..|
+ |.. 9#######5 #c..|
+ |.. 67 56..|
+ |.. ## ##..|
+ |.. ############..|
+ ->|.. ## ##..|<-
+ |.. ##1 1##..|
+ |.. 8##########8..|
+ |..................|
+ |..................|
+ ------------------
+
+Char 0xb808 '레'
+ Font: #13 gulim (17)
+ Bitmap: 13 x 15
+ Advance: 18
+ Offset: 3 x -3
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |...b####8 bb ##..|
+ |... 1## ## ##..|
+ |... ## ## ##..|
+ |... ## ## ##..|
+ |... 1## ## ##..|
+ |...a####8 ## ##..|
+ |...## 8#### ##..|
+ |...## ## ##..|
+ |...## ## ##..|
+ |...## 243 ## ##..|
+ |...a######2## ##..|
+ ->|... ## ##..|<-
+ |... ## ##..|
+ |... cc ##..|
+ |... 33..|
+ |..................|
+ ------------------
+
+Char 0xb809 '렉'
+ Font: #13 gulim (17)
+ Bitmap: 13 x 15
+ Advance: 18
+ Offset: 2 x -3
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |..a#####7 cc ##...|
+ |.. 2## ## ##...|
+ |.. ## ## ##...|
+ |.. 2## ## ##...|
+ |..9######### ##...|
+ |..##1 ## ##...|
+ |..##1 ## ##...|
+ |..a######c## ##...|
+ |.. 13321 66 76...|
+ |.. ...|
+ |.. 9##########9...|
+ ->|.. 1##...|<-
+ |.. ##...|
+ |.. ##...|
+ |.. ##...|
+ |..................|
+ ------------------
+
+Char 0xb824 '려'
+ Font: #13 gulim (17)
+ Bitmap: 12 x 15
+ Advance: 18
+ Offset: 3 x -3
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |...c#####8 c#...|
+ |... 1## ##...|
+ |... ## ##...|
+ |... ##b####...|
+ |... 1## ##...|
+ |...a#####9 ##...|
+ |...## ##...|
+ |...## ##...|
+ |...## 7####...|
+ |...## 121 ##...|
+ |...8######9 ##...|
+ ->|... ##...|<-
+ |... ##...|
+ |... ##...|
+ |... 66...|
+ |..................|
+ ------------------
+
+Char 0xb825 '력'
+ Font: #13 gulim (17)
+ Bitmap: 14 x 15
+ Advance: 18
+ Offset: 3 x -3
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |...c#####8 c# .|
+ |... 1## ##1.|
+ |... ## 9####1.|
+ |... 1## ##1.|
+ |...a#####9 ##1.|
+ |...## ##1.|
+ |...## 7####1.|
+ |...a######b ##1.|
+ |... 89 .|
+ |... .|
+ |... 9##########9 .|
+ ->|... 1## .|<-
+ |... ## .|
+ |... ## .|
+ |... ## .|
+ |..................|
+ ------------------
+
+Char 0xb828 '련'
+ Font: #13 gulim (17)
+ Bitmap: 13 x 14
+ Advance: 18
+ Offset: 2 x -2
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |..b#####8 bb...|
+ |.. 1## ##...|
+ |.. ## ##...|
+ |.. ## a####...|
+ |..8#####a ##...|
+ |..##1 ##...|
+ |..##1 7####...|
+ |..##2 1232 ##...|
+ |..6######8 ##...|
+ |.. 33 ##...|
+ |.. ## #c...|
+ ->|.. ## ...|<-
+ |.. ##1 ...|
+ |.. 8##########b...|
+ |..................|
+ |..................|
+ ------------------
+
+Char 0xb85c '로'
+ Font: #13 gulim (17)
+ Bitmap: 14 x 13
+ Advance: 18
+ Offset: 2 x -1
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |.. b#########8 ..|
+ |.. ## ..|
+ |.. ## ..|
+ |.. ## ..|
+ |.. 7#########b ..|
+ |.. ##2 ..|
+ |.. ##1 ..|
+ |.. ##1 ..|
+ |.. 9##########b ..|
+ |.. ## ..|
+ |.. ## ..|
+ ->|.. ## ..|<-
+ |..a############8..|
+ |..................|
+ |..................|
+ |..................|
+ ------------------
+
+Char 0xb85d '록'
+ Font: #13 gulim (17)
+ Bitmap: 15 x 15
+ Advance: 18
+ Offset: 1 x -3
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |. b##########7 ..|
+ |. 1## ..|
+ |. ## ..|
+ |. 9##########9 ..|
+ |. ##1 ..|
+ |. 9###########1..|
+ |. ## ..|
+ |. ## ..|
+ |.1#############a..|
+ |. ..|
+ |. b##########9 ..|
+ ->|. ## ..|<-
+ |. ## ..|
+ |. ## ..|
+ |. 89 ..|
+ |..................|
+ ------------------
+
+Char 0xb860 '론'
+ Font: #13 gulim (17)
+ Bitmap: 14 x 14
+ Advance: 18
+ Offset: 2 x -2
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |.. b##########8 ..|
+ |.. 1## ..|
+ |.. ## ..|
+ |.. 7##########a ..|
+ |.. ##2 ..|
+ |.. ##2 ..|
+ |.. 7##########a ..|
+ |.. ## ..|
+ |..b############b..|
+ |.. ..|
+ |.. c# ..|
+ ->|.. ## ..|<-
+ |.. ##2 ..|
+ |.. 8##########b ..|
+ |..................|
+ |..................|
+ ------------------
+
+Char 0xb8cc '료'
+ Font: #13 gulim (17)
+ Bitmap: 15 x 13
+ Advance: 18
+ Offset: 2 x -1
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |.. 5##########7 .|
+ |.. 1## .|
+ |.. ## .|
+ |.. 1## .|
+ |.. 9##########7 .|
+ |.. ##1 .|
+ |.. ##1 .|
+ |.. 9##########a .|
+ |.. .|
+ |.. 9a 99 .|
+ |.. ## ## .|
+ ->|.. ## ## .|<-
+ |..##############1.|
+ |..................|
+ |..................|
+ |..................|
+ ------------------
+
+Char 0xb8e8 '루'
+ Font: #13 gulim (17)
+ Bitmap: 15 x 15
+ Advance: 18
+ Offset: 1 x -3
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |. a##########8 ..|
+ |. 1## ..|
+ |. ## ..|
+ |. 9##########9 ..|
+ |. ## ..|
+ |. ## ..|
+ |. a###########2..|
+ |. ..|
+ |. ..|
+ |.1#############c..|
+ |. ## ..|
+ ->|. ## ..|<-
+ |. ## ..|
+ |. ## ..|
+ |. 44 ..|
+ |..................|
+ ------------------
+
+Char 0xb958 '류'
+ Font: #13 gulim (17)
+ Bitmap: 15 x 15
+ Advance: 18
+ Offset: 2 x -3
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |.. b##########8 .|
+ |.. 1## .|
+ |.. ## .|
+ |.. 9##########9 .|
+ |.. ## .|
+ |.. ## .|
+ |.. a###########1 .|
+ |.. .|
+ |.. .|
+ |..c#############2.|
+ |.. ## ## .|
+ ->|.. ## ## .|<-
+ |.. ## ## .|
+ |.. ## ## .|
+ |.. 44 77 .|
+ |..................|
+ ------------------
+
+Char 0xb960 '률'
+ Font: #13 gulim (17)
+ Bitmap: 14 x 14
+ Advance: 18
+ Offset: 2 x -2
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |.. b##########7 ..|
+ |.. 2## ..|
+ |.. 2## ..|
+ |.. b##########6 ..|
+ |.. ## ..|
+ |.. 9###########2..|
+ |.. ..|
+ |..c############c..|
+ |.. ## ## ..|
+ |.. a##########a ..|
+ |.. 1## ..|
+ ->|.. 8##########9 ..|<-
+ |.. cc ..|
+ |.. 8##########c ..|
+ |..................|
+ |..................|
+ ------------------
+
+Char 0xb974 '르'
+ Font: #13 gulim (17)
+ Bitmap: 14 x 13
+ Advance: 18
+ Offset: 2 x -1
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |.. a##########8 ..|
+ |.. 1## ..|
+ |.. ## ..|
+ |.. ## ..|
+ |.. 8##########9 ..|
+ |.. ##1 ..|
+ |.. ## ..|
+ |.. ## ..|
+ |.. 9##########8 ..|
+ |.. ..|
+ |.. ..|
+ ->|.. ..|<-
+ |..b############b..|
+ |..................|
+ |..................|
+ |..................|
+ ------------------
+
+Char 0xb978 '른'
+ Font: #13 gulim (17)
+ Bitmap: 15 x 14
+ Advance: 18
+ Offset: 1 x -2
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |. b##########8 ..|
+ |. 1## ..|
+ |. 1## ..|
+ |. 9##########9 ..|
+ |. 1## ..|
+ |. 1## ..|
+ |. 9##########b ..|
+ |. ..|
+ |.6#############b..|
+ |. ..|
+ |. c# ..|
+ ->|. ## ..|<-
+ |. ##1 ..|
+ |. 8##########b ..|
+ |..................|
+ |..................|
+ ------------------
+
+Char 0xb97c '를'
+ Font: #13 gulim (17)
+ Bitmap: 16 x 14
+ Advance: 18
+ Offset: 1 x -2
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |. a##########9 .|
+ |. ##1 .|
+ |. 8##########a .|
+ |. ## .|
+ |. ## .|
+ |. 7###########2 .|
+ |. .|
+ |.1##############1.|
+ |. .|
+ |. a##########9 .|
+ |. 1## .|
+ ->|. 9##########9 .|<-
+ |. c#2 .|
+ |. 9##########8 .|
+ |..................|
+ |..................|
+ ------------------
+
+Char 0xb984 '름'
+ Font: #13 gulim (17)
+ Bitmap: 16 x 14
+ Advance: 18
+ Offset: 1 x -2
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |. c##########7 .|
+ |. 2## .|
+ |. 1## .|
+ |. a##########7 .|
+ |. ## .|
+ |. a###########2 .|
+ |. .|
+ |.1##############1.|
+ |. .|
+ |. 7##########6 .|
+ |. ##1 1## .|
+ ->|. ## ## .|<-
+ |. ##1 1## .|
+ |. 7##########8 .|
+ |..................|
+ |..................|
+ ------------------
+
+Char 0xb9ac '리'
+ Font: #13 gulim (17)
+ Bitmap: 12 x 15
+ Advance: 18
+ Offset: 3 x -3
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |...c######7 c#...|
+ |... 1## ##...|
+ |... ## ##...|
+ |... ## ##...|
+ |... 1## ##...|
+ |...a######8 ##...|
+ |...## ##...|
+ |...## ##...|
+ |...## ##...|
+ |...## 14##...|
+ |...8###########...|
+ ->|... ##...|<-
+ |... ##...|
+ |... ##...|
+ |... 33...|
+ |..................|
+ ------------------
+
+Char 0xb9b0 '린'
+ Font: #13 gulim (17)
+ Bitmap: 13 x 14
+ Advance: 18
+ Offset: 2 x -2
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |..a#######6 c#...|
+ |.. 2## ##...|
+ |.. ## ##...|
+ |.. 2## ##...|
+ |..9#######7 ##...|
+ |..c#2 ##...|
+ |..c#2 1##...|
+ |..9############...|
+ |.. 12111 ##...|
+ |.. 33 ##...|
+ |.. ## ...|
+ ->|.. ## ...|<-
+ |.. ##1 ...|
+ |.. 8##########b...|
+ |..................|
+ |..................|
+ ------------------
+
+Char 0xb9bc '림'
+ Font: #13 gulim (17)
+ Bitmap: 13 x 14
+ Advance: 18
+ Offset: 2 x -2
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |..a#######7 bb...|
+ |.. 2## ##...|
+ |.. 1## ##...|
+ |..7#######8 ##...|
+ |..c#2 ##...|
+ |..c#1 2##...|
+ |..8############...|
+ |.. 222211 cc...|
+ |.. ...|
+ |.. a#########9...|
+ |.. ## ##...|
+ ->|.. ## ##...|<-
+ |.. ## ##...|
+ |.. 9#########9...|
+ |..................|
+ |..................|
+ ------------------
+
+Char 0xb9c1 '링'
+ Font: #13 gulim (17)
+ Bitmap: 13 x 15
+ Advance: 18
+ Offset: 2 x -3
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |..a#######7 c#...|
+ |.. 1## ##...|
+ |.. 1## ##...|
+ |..7#######8 ##...|
+ |..c#2 ##...|
+ |..c#2 1##...|
+ |..8############...|
+ |.. 222211 ##...|
+ |.. 5######577...|
+ |.. 1###5114###1...|
+ |.. a#6 6#a...|
+ ->|.. ## ##...|<-
+ |.. b#4 5#c...|
+ |.. 2##a3 15###2...|
+ |.. 6######6 ...|
+ |..................|
+ ------------------
+
+Char 0xb9c8 '마'
+ Font: #13 gulim (17)
+ Bitmap: 15 x 15
+ Advance: 18
+ Offset: 2 x -3
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |..8######7 c# .|
+ |..##1 1## ## .|
+ |..## ## ## .|
+ |..## ## ## .|
+ |..## ## ## .|
+ |..## ## ## .|
+ |..## ## ####4.|
+ |..## ## ## .|
+ |..## ## ## .|
+ |..##1 1## ## .|
+ |..7######7 ## .|
+ ->|.. ## .|<-
+ |.. ## .|
+ |.. ## .|
+ |.. 33 .|
+ |..................|
+ ------------------
+
+Char 0xb9c9 '막'
+ Font: #13 gulim (17)
+ Bitmap: 16 x 15
+ Advance: 18
+ Offset: 1 x -3
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |.7#######6 #c .|
+ |.##2 1## ## .|
+ |.## ## ## .|
+ |.## ## ####1.|
+ |.## ## ## .|
+ |.## ## ## .|
+ |.##2 1## ## .|
+ |.6#######6 ## .|
+ |. 88 .|
+ |. .|
+ |. 9##########9 .|
+ ->|. 1## .|<-
+ |. ## .|
+ |. ## .|
+ |. ## .|
+ |..................|
+ ------------------
+
+Char 0xb9cc '만'
+ Font: #13 gulim (17)
+ Bitmap: 16 x 14
+ Advance: 18
+ Offset: 1 x -2
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |.7#######7 ba .|
+ |.##2 1## ## .|
+ |.## ## ## .|
+ |.## ## ## .|
+ |.## ## ####1.|
+ |.## ## ## .|
+ |.##1 1## ## .|
+ |.7#######7 ## .|
+ |. ## .|
+ |. 33 ## .|
+ |. ## #c .|
+ ->|. ## .|<-
+ |. ##1 .|
+ |. 8##########b .|
+ |..................|
+ |..................|
+ ------------------
+
+Char 0xb9ce '많'
+ Font: #13 gulim (17)
+ Bitmap: 16 x 14
+ Advance: 18
+ Offset: 1 x -2
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |.7#######6 #c .|
+ |.##2 1## ## .|
+ |.## ## ## .|
+ |.## ## ####1.|
+ |.## ## ## .|
+ |.##1 ## ## .|
+ |.7#######8 ## .|
+ |. 44 .|
+ |.11 a###9 .|
+ |.## a#######2 .|
+ |.## .|
+ ->|.## 6#####5 .|<-
+ |.##122 ##2 2## .|
+ |.8###c24#####5 .|
+ |..................|
+ |..................|
+ ------------------
+
+Char 0xb9d0 '말'
+ Font: #13 gulim (17)
+ Bitmap: 16 x 14
+ Advance: 18
+ Offset: 1 x -2
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |.7#######6 #c .|
+ |.##2 1## ## .|
+ |.## ## ## .|
+ |.## ## ####1.|
+ |.## ## ## .|
+ |.##1 ## ## .|
+ |.7#######7 ## .|
+ |. 66 .|
+ |. ##########8 .|
+ |. ## .|
+ |. ## .|
+ ->|. c#########9 .|<-
+ |. ## .|
+ |. b##########6 .|
+ |..................|
+ |..................|
+ ------------------
+
+Char 0xb9e4 '매'
+ Font: #13 gulim (17)
+ Bitmap: 13 x 15
+ Advance: 18
+ Offset: 3 x -3
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |...8#####8 cc cc..|
+ |...##1 1## ## ##..|
+ |...## ## ## ##..|
+ |...## ## ## ##..|
+ |...## ## ## ##..|
+ |...## ## #####..|
+ |...## ## ## ##..|
+ |...## ## ## ##..|
+ |...## ## ## ##..|
+ |...##1 2## ## ##..|
+ |...6#####6 ## ##..|
+ ->|... ## ##..|<-
+ |... ## ##..|
+ |... cc ##..|
+ |... 55..|
+ |..................|
+ ------------------
+
+Char 0xba38 '머'
+ Font: #13 gulim (17)
+ Bitmap: 13 x 15
+ Advance: 18
+ Offset: 3 x -3
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |...8######7 #c..|
+ |...##1 1## ##..|
+ |...## ## ##..|
+ |...## ## ##..|
+ |...## ## ##..|
+ |...## ##9####..|
+ |...## ## ##..|
+ |...## ## ##..|
+ |...## ## ##..|
+ |...##1 1## ##..|
+ |...7######7 ##..|
+ ->|... ##..|<-
+ |... ##..|
+ |... ##..|
+ |... 55..|
+ |..................|
+ ------------------
+
+Char 0xba48 '멈'
+ Font: #13 gulim (17)
+ Bitmap: 13 x 14
+ Advance: 18
+ Offset: 2 x -2
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |..7#######6 89...|
+ |..##1 1## ##...|
+ |..## ## ##...|
+ |..## ######...|
+ |..## ## ##...|
+ |..##1 1## ##...|
+ |..7#######7 ##...|
+ |.. cc...|
+ |.. ...|
+ |.. a#########a...|
+ |.. ## 1##...|
+ ->|.. ## ##...|<-
+ |.. ## 1##...|
+ |.. a#########9...|
+ |..................|
+ |..................|
+ ------------------
+
+Char 0xba54 '메'
+ Font: #13 gulim (17)
+ Bitmap: 13 x 15
+ Advance: 18
+ Offset: 2 x -3
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |..7#####7 cc cc...|
+ |..##1 2## ## ##...|
+ |..## ## ## ##...|
+ |..## ## ## ##...|
+ |..## ## ## ##...|
+ |..## ##### ##...|
+ |..## ## ## ##...|
+ |..## ## ## ##...|
+ |..## ## ## ##...|
+ |..##2 2## ## ##...|
+ |..6#####6 ## ##...|
+ ->|.. ## ##...|<-
+ |.. ## ##...|
+ |.. cc ##...|
+ |.. 55...|
+ |..................|
+ ------------------
+
+Char 0xba74 '면'
+ Font: #13 gulim (17)
+ Bitmap: 14 x 14
+ Advance: 18
+ Offset: 2 x -2
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |..7#######7 bb ..|
+ |..##2 1## ## ..|
+ |..## ###### ..|
+ |..## ## ## ..|
+ |..## ## ## ..|
+ |..## ## ## ..|
+ |..##1 ###### ..|
+ |..7#######8 ## ..|
+ |.. ## ..|
+ |.. 33 ## ..|
+ |.. ## c# ..|
+ ->|.. ## ..|<-
+ |.. ## ..|
+ |.. 8##########a..|
+ |..................|
+ |..................|
+ ------------------
+
+Char 0xba85 '명'
+ Font: #13 gulim (17)
+ Bitmap: 14 x 15
+ Advance: 18
+ Offset: 2 x -3
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |..7#######6 ab ..|
+ |..##2 1## c#1..|
+ |..## ######1..|
+ |..## ## c#1..|
+ |..## ## c#1..|
+ |..## ######1..|
+ |..##2 1## c#1..|
+ |..6#######6 c#1..|
+ |.. bc1..|
+ |.. 2a######91 ..|
+ |.. 5##71 18##4 ..|
+ ->|.. ##3 2## ..|<-
+ |.. b#5 3## ..|
+ |.. 2###4115c##4 ..|
+ |.. 5######6 ..|
+ |..................|
+ ------------------
+
+Char 0xbaa8 '모'
+ Font: #13 gulim (17)
+ Bitmap: 14 x 13
+ Advance: 18
+ Offset: 2 x -1
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |.. 6##########6 ..|
+ |.. ##1 1## ..|
+ |.. ## ## ..|
+ |.. ## ## ..|
+ |.. ## ## ..|
+ |.. ## ## ..|
+ |.. ##2 2## ..|
+ |.. 5##########6 ..|
+ |.. ..|
+ |.. ## ..|
+ |.. ## ..|
+ ->|.. ## ..|<-
+ |..a############8..|
+ |..................|
+ |..................|
+ |..................|
+ ------------------
+
+Char 0xbaa9 '목'
+ Font: #13 gulim (17)
+ Bitmap: 14 x 15
+ Advance: 18
+ Offset: 2 x -3
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |.. 7##########7 ..|
+ |.. ##2 1## ..|
+ |.. ## ## ..|
+ |.. ## ## ..|
+ |.. ##2 2## ..|
+ |.. 6##########6 ..|
+ |.. ## ..|
+ |..b############b..|
+ |.. ..|
+ |.. ..|
+ |.. b##########8 ..|
+ ->|.. 1## ..|<-
+ |.. ## ..|
+ |.. ## ..|
+ |.. cc ..|
+ |..................|
+ ------------------
+
+Char 0xbabb '못'
+ Font: #13 gulim (17)
+ Bitmap: 14 x 15
+ Advance: 18
+ Offset: 2 x -3
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |.. 7##########7 ..|
+ |.. ##2 1## ..|
+ |.. ## ## ..|
+ |.. ## ## ..|
+ |.. ##2 2## ..|
+ |.. 5##########6 ..|
+ |.. ## ..|
+ |.. ## ..|
+ |..c############b..|
+ |.. 11 ..|
+ |.. 5##4 ..|
+ ->|.. 6####3 ..|<-
+ |.. 16##8 2##6 ..|
+ |..9##b2 19##9 ..|
+ |.. 1 275 ..|
+ |..................|
+ ------------------
+
+Char 0xbb34 '무'
+ Font: #13 gulim (17)
+ Bitmap: 14 x 15
+ Advance: 18
+ Offset: 2 x -3
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |.. 7##########6 ..|
+ |.. ##1 1## ..|
+ |.. ## ## ..|
+ |.. ## ## ..|
+ |.. ## ## ..|
+ |.. ##2 2## ..|
+ |.. 5##########6 ..|
+ |.. ..|
+ |..b############b..|
+ |.. ## ..|
+ |.. ## ..|
+ ->|.. ## ..|<-
+ |.. ## ..|
+ |.. ## ..|
+ |.. 11 ..|
+ |..................|
+ ------------------
+
+Char 0xbb38 '문'
+ Font: #13 gulim (17)
+ Bitmap: 14 x 14
+ Advance: 18
+ Offset: 2 x -2
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |.. 7##########6 ..|
+ |.. ##1 1## ..|
+ |.. ## ## ..|
+ |.. ## ## ..|
+ |.. ##1 1## ..|
+ |.. 7##########8 ..|
+ |.. ..|
+ |.. ..|
+ |..##############..|
+ |.. ## ..|
+ |.. cc ## ..|
+ ->|.. ## aa ..|<-
+ |.. ##1 ..|
+ |.. 9##########c ..|
+ |..................|
+ |..................|
+ ------------------
+
+Char 0xbb3c '물'
+ Font: #13 gulim (17)
+ Bitmap: 15 x 14
+ Advance: 18
+ Offset: 1 x -2
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |. 7##########7 ..|
+ |. ##1 1## ..|
+ |. ## ## ..|
+ |. ##1 ## ..|
+ |. 7##########8 ..|
+ |. ..|
+ |. ..|
+ |.1#############c..|
+ |. ## ..|
+ |. b##########9 ..|
+ |. 1## ..|
+ ->|. a##########8 ..|<-
+ |. ## ..|
+ |. a###########4..|
+ |..................|
+ |..................|
+ ------------------
+
+Char 0xbbc0 '므'
+ Font: #13 gulim (17)
+ Bitmap: 14 x 13
+ Advance: 18
+ Offset: 2 x -1
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |.. 7##########6 ..|
+ |.. ##2 1## ..|
+ |.. ## ## ..|
+ |.. ## ## ..|
+ |.. ## ## ..|
+ |.. ## ## ..|
+ |.. ##2 2## ..|
+ |.. 5##########6 ..|
+ |.. ..|
+ |.. ..|
+ |.. ..|
+ ->|.. ..|<-
+ |..b############b..|
+ |..................|
+ |..................|
+ |..................|
+ ------------------
+
+Char 0xbbf8 '미'
+ Font: #13 gulim (17)
+ Bitmap: 12 x 15
+ Advance: 18
+ Offset: 3 x -3
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |...8######7 c#...|
+ |...##1 1## ##...|
+ |...## ## ##...|
+ |...## ## ##...|
+ |...## ## ##...|
+ |...## ## ##...|
+ |...## ## ##...|
+ |...## ## ##...|
+ |...## ## ##...|
+ |...##1 1## ##...|
+ |...7######6 ##...|
+ ->|... ##...|<-
+ |... ##...|
+ |... ##...|
+ |... 55...|
+ |..................|
+ ------------------
+
+Char 0xbc0f '및'
+ Font: #13 gulim (17)
+ Bitmap: 13 x 15
+ Advance: 18
+ Offset: 2 x -3
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |..7#######7 c#...|
+ |..##2 1## ##...|
+ |..## ## ##...|
+ |..## ## ##...|
+ |..## ## ##...|
+ |..##1 ## ##...|
+ |..7#######8 ##...|
+ |.. c#...|
+ |.. a####a ...|
+ |.. ...|
+ |.. 8##########b...|
+ ->|.. 1c##1 ...|<-
+ |.. 17#####6 ...|
+ |.. c###b2 2b##c...|
+ |.. 1 22...|
+ |..................|
+ ------------------
+
+Char 0xbc14 '바'
+ Font: #13 gulim (17)
+ Bitmap: 15 x 15
+ Advance: 18
+ Offset: 2 x -3
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |..c# cc #c .|
+ |..## ## ## .|
+ |..## ## ## .|
+ |..## ## ## .|
+ |..######## ## .|
+ |..## ## ## .|
+ |..## ## ####3.|
+ |..## ## ## .|
+ |..## ## ## .|
+ |..##2 2## ## .|
+ |..7######6 ## .|
+ ->|.. ## .|<-
+ |.. ## .|
+ |.. ## .|
+ |.. 44 .|
+ |..................|
+ ------------------
+
+Char 0xbc18 '반'
+ Font: #13 gulim (17)
+ Bitmap: 15 x 14
+ Advance: 18
+ Offset: 2 x -2
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |..88 9a a9 .|
+ |..## ##1 ## .|
+ |..## ##1 ## .|
+ |..########1 ###c.|
+ |..## ##1 ## .|
+ |..## ##1 ## .|
+ |..## ##1 ## .|
+ |..##1 1## ## .|
+ |..7######7 ## .|
+ |.. 33 ## .|
+ |.. ## #c .|
+ ->|.. ## .|<-
+ |.. ##2 .|
+ |.. 8##########c .|
+ |..................|
+ |..................|
+ ------------------
+
+Char 0xbc1c '발'
+ Font: #13 gulim (17)
+ Bitmap: 16 x 14
+ Advance: 18
+ Offset: 2 x -2
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |..cb c# c# |
+ |..## ##1 ##1 |
+ |..## ##1 ##1 |
+ |..########1 ####1|
+ |..## ##1 ##1 |
+ |..## ##1 ##1 |
+ |..9######9 ##1 |
+ |.. 55 |
+ |.. b##########7 |
+ |.. 1## |
+ |.. 1## |
+ ->|.. a##########8 |<-
+ |.. c#2 |
+ |.. 9##########8 |
+ |..................|
+ |..................|
+ ------------------
+
+Char 0xbc29 '방'
+ Font: #13 gulim (17)
+ Bitmap: 15 x 15
+ Advance: 18
+ Offset: 2 x -3
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |..bb cc cc .|
+ |..## ##1 ## .|
+ |..## ##1 ## .|
+ |..########1 ## .|
+ |..## ##1 ###c.|
+ |..## ##1 ## .|
+ |..##1 1## ## .|
+ |..7######7 ## .|
+ |.. #c .|
+ |.. 2b######81 .|
+ |.. 6##6 19##4 .|
+ ->|.. ##2 3#c .|<-
+ |.. ##3 4#c .|
+ |.. 3##b4115###3 .|
+ |.. 6######6 .|
+ |..................|
+ ------------------
+
+Char 0xbc30 '배'
+ Font: #13 gulim (17)
+ Bitmap: 14 x 15
+ Advance: 18
+ Offset: 2 x -3
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |.. cc c# cc #c..|
+ |..1## ## ## ##..|
+ |..1## ## ## ##..|
+ |..1## ## ## ##..|
+ |..1###### ## ##..|
+ |..1## ## ######..|
+ |..1## ## ## ##..|
+ |..1## ## ## ##..|
+ |..1## ## ## ##..|
+ |.. ##11## ## ##..|
+ |.. 8####8 ## ##..|
+ ->|.. ## ##..|<-
+ |.. ## ##..|
+ |.. cc ##..|
+ |.. 33..|
+ |..................|
+ ------------------
+
+Char 0xbc31 '백'
+ Font: #13 gulim (17)
+ Bitmap: 14 x 15
+ Advance: 18
+ Offset: 2 x -3
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |.. ## c# cc c#..|
+ |..1## ## ## ##..|
+ |..1## ## ## ##..|
+ |..1###### ######..|
+ |..1## ## ## ##..|
+ |..1## ## ## ##..|
+ |..1## 1## ## ##..|
+ |.. 9####9 ## ##..|
+ |.. 33 88..|
+ |.. ..|
+ |.. 9##########9..|
+ ->|.. 1##..|<-
+ |.. ##..|
+ |.. ##..|
+ |.. ##..|
+ |..................|
+ ------------------
+
+Char 0xbc84 '버'
+ Font: #13 gulim (17)
+ Bitmap: 13 x 15
+ Advance: 18
+ Offset: 2 x -3
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |..c# #c cc...|
+ |..## 1## ##...|
+ |..## 1## ##...|
+ |..## 1## ##...|
+ |..######## ##...|
+ |..## 1#######...|
+ |..## 1## ##...|
+ |..## 1## ##...|
+ |..## 1## ##...|
+ |..##1 2## ##...|
+ |..6######6 ##...|
+ ->|.. ##...|<-
+ |.. ##...|
+ |.. ##...|
+ |.. 33...|
+ |..................|
+ ------------------
+
+Char 0xbc88 '번'
+ Font: #13 gulim (17)
+ Bitmap: 13 x 14
+ Advance: 18
+ Offset: 2 x -2
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |..c# #c cc...|
+ |..## 1## ##...|
+ |..## 1## ##...|
+ |..######## ##...|
+ |..## 1#######...|
+ |..## 1## ##...|
+ |..## 1## ##...|
+ |..##1 2## ##...|
+ |..6######6 ##...|
+ |.. 33 ##...|
+ |.. ## 88...|
+ ->|.. ## ...|<-
+ |.. ##1 ...|
+ |.. 8##########b...|
+ |..................|
+ |..................|
+ ------------------
+
+Char 0xbcbd '벽'
+ Font: #13 gulim (17)
+ Bitmap: 13 x 15
+ Advance: 18
+ Offset: 3 x -3
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |...#c cc ##..|
+ |...## ## ##..|
+ |...## ##9####..|
+ |...######## ##..|
+ |...## ## ##..|
+ |...## ## ##..|
+ |...## 1##a####..|
+ |...9######8 ##..|
+ |... 77..|
+ |... ..|
+ |... 9##########9..|
+ ->|... 1##..|<-
+ |... ##..|
+ |... ##..|
+ |... ##..|
+ |..................|
+ ------------------
+
+Char 0xbcc0 '변'
+ Font: #13 gulim (17)
+ Bitmap: 13 x 14
+ Advance: 18
+ Offset: 2 x -2
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |..99 88 99...|
+ |..##1 ## ##...|
+ |..##1 ##a####...|
+ |..######## ##...|
+ |..##1 ## ##...|
+ |..##1 ## ##...|
+ |..##1 1##a####...|
+ |..8######9 ##...|
+ |.. ##...|
+ |.. 33 ##...|
+ |.. ## #c...|
+ ->|.. ## ...|<-
+ |.. ##1 ...|
+ |.. 8##########b...|
+ |..................|
+ |..................|
+ ------------------
+
+Char 0xbcf4 '보'
+ Font: #13 gulim (17)
+ Bitmap: 15 x 13
+ Advance: 18
+ Offset: 1 x -1
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |. ab ab ..|
+ |. ## ## ..|
+ |. ## ## ..|
+ |. ########### ..|
+ |. ## ## ..|
+ |. ## ## ..|
+ |. ## ## ..|
+ |. ##2 1## ..|
+ |. 6#########8 ..|
+ |. ## ..|
+ |. ## ..|
+ ->|. ## ..|<-
+ |.3#############5..|
+ |..................|
+ |..................|
+ |..................|
+ ------------------
+
+Char 0xbcf5 '복'
+ Font: #13 gulim (17)
+ Bitmap: 16 x 16
+ Advance: 18
+ Offset: 1 x -3
+ __________________
+ |..................|
+ |..................|
+ |. 11 11 .|
+ |. ## ## .|
+ |. ## ## .|
+ |. ############ .|
+ |. ## ## .|
+ |. ##1 1## .|
+ |. 7##########7 .|
+ |. ## .|
+ |. ## .|
+ |.3#############c1.|
+ |. .|
+ |. ###########9 .|
+ ->|. 1## .|<-
+ |. ## .|
+ |. ## .|
+ |. 99 .|
+ |..................|
+ ------------------
+
+Char 0xbcf8 '본'
+ Font: #13 gulim (17)
+ Bitmap: 16 x 14
+ Advance: 18
+ Offset: 1 x -2
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |. 77 77 .|
+ |. ## ## .|
+ |. ############ .|
+ |. ## ## .|
+ |. ## ## .|
+ |. ##1 1## .|
+ |. 6##########6 .|
+ |. ## .|
+ |.1##############1.|
+ |. .|
+ |. cc .|
+ ->|. ## .|<-
+ |. ##1 .|
+ |. 8########### .|
+ |..................|
+ |..................|
+ ------------------
+
+Char 0xbcfc '볼'
+ Font: #13 gulim (17)
+ Bitmap: 16 x 14
+ Advance: 18
+ Offset: 1 x -2
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |. 77 77 .|
+ |. ## ## .|
+ |. ############ .|
+ |. ## ## .|
+ |. ##1 1## .|
+ |. 6##########6 .|
+ |. ## .|
+ |.1##############1.|
+ |. .|
+ |. c##########a .|
+ |. 1## .|
+ ->|. b##########9 .|<-
+ |. ## .|
+ |. b##########a .|
+ |..................|
+ |..................|
+ ------------------
+
+Char 0xbd80 '부'
+ Font: #13 gulim (17)
+ Bitmap: 16 x 15
+ Advance: 18
+ Offset: 1 x -3
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |. ab aa .|
+ |. ## ## .|
+ |. ############ .|
+ |. ## ## .|
+ |. ## ## .|
+ |. ##2 1## .|
+ |. 6##########6 .|
+ |. .|
+ |. .|
+ |.1##############1.|
+ |. ## .|
+ ->|. ## .|<-
+ |. ## .|
+ |. ## .|
+ |. 66 .|
+ |..................|
+ ------------------
+
+Char 0xbd81 '북'
+ Font: #13 gulim (17)
+ Bitmap: 16 x 16
+ Advance: 18
+ Offset: 1 x -3
+ __________________
+ |..................|
+ |..................|
+ |. 11 .|
+ |. ## 1#c .|
+ |. ## 1#c .|
+ |. ###########c .|
+ |. ## 1#c .|
+ |. ##1 2#c .|
+ |. 7##########6 .|
+ |. .|
+ |. .|
+ |.3##############1.|
+ |. ## .|
+ |. 1###########6 .|
+ ->|. 2## .|<-
+ |. ## .|
+ |. ## .|
+ |. 66 .|
+ |..................|
+ ------------------
+
+Char 0xbd84 '분'
+ Font: #13 gulim (17)
+ Bitmap: 16 x 14
+ Advance: 18
+ Offset: 1 x -2
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |. 66 66 .|
+ |. ## ## .|
+ |. ############ .|
+ |. ## ## .|
+ |. ## ## .|
+ |. ##2 2## .|
+ |. 6##########6 .|
+ |. .|
+ |.1##############1.|
+ |. ## .|
+ |. c# ## .|
+ ->|. ## aa .|<-
+ |. ##1 .|
+ |. 8##########b .|
+ |..................|
+ |..................|
+ ------------------
+
+Char 0xbd88 '불'
+ Font: #13 gulim (17)
+ Bitmap: 15 x 14
+ Advance: 18
+ Offset: 1 x -2
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |. 66 66 ..|
+ |. ## ## ..|
+ |. ############ ..|
+ |. ## ## ..|
+ |. ##2 2## ..|
+ |. 6##########6 ..|
+ |. ..|
+ |.2#############c..|
+ |. ## ..|
+ |. c##########a ..|
+ |. ##1..|
+ ->|. b##########9 ..|<-
+ |. 1## ..|
+ |. a###########5..|
+ |..................|
+ |..................|
+ ------------------
+
+Char 0xbe0c '브'
+ Font: #13 gulim (17)
+ Bitmap: 16 x 13
+ Advance: 18
+ Offset: 1 x -1
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |. ## ba .|
+ |. ## ## .|
+ |. ## ## .|
+ |. ############ .|
+ |. ## ## .|
+ |. ## ## .|
+ |. ## ## .|
+ |. ##1 1## .|
+ |. 8##########9 .|
+ |. .|
+ |. .|
+ ->|. .|<-
+ |.1##############1.|
+ |..................|
+ |..................|
+ |..................|
+ ------------------
+
+Char 0xbe14 '블'
+ Font: #13 gulim (17)
+ Bitmap: 15 x 14
+ Advance: 18
+ Offset: 1 x -2
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |. 9a 99 ..|
+ |. ## cc ..|
+ |. ############ ..|
+ |. ## cc ..|
+ |. ##2 ## ..|
+ |. 5##########5 ..|
+ |. ..|
+ |.1c############c..|
+ |. ..|
+ |. b##########a ..|
+ |. 1## ..|
+ ->|. a##########9 ..|<-
+ |. c#2 ..|
+ |. 9##########c ..|
+ |..................|
+ |..................|
+ ------------------
+
+Char 0xbe44 '비'
+ Font: #13 gulim (17)
+ Bitmap: 12 x 15
+ Advance: 18
+ Offset: 3 x -3
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |...cc cc c#...|
+ |...## ## ##...|
+ |...## ## ##...|
+ |...## ## ##...|
+ |...######## ##...|
+ |...## ## ##...|
+ |...## ## ##...|
+ |...## ## ##...|
+ |...## ## ##...|
+ |...## 2## ##...|
+ |...7######7 ##...|
+ ->|... ##...|<-
+ |... ##...|
+ |... ##...|
+ |... 33...|
+ |..................|
+ ------------------
+
+Char 0xbed7 '뻗'
+ Font: #13 gulim (17)
+ Bitmap: 14 x 14
+ Advance: 18
+ Offset: 2 x -2
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |..77 aabb bb cc ..|
+ |..cc cccc cc ## ..|
+ |..cc cccc cc ## ..|
+ |..c###cc#### ## ..|
+ |..cc cccc c#### ..|
+ |..cc cccc cc ## ..|
+ |..cc #ccc ## ## ..|
+ |..8###88###a ## ..|
+ |.. 55 ..|
+ |.. 7##########9..|
+ |.. ## ..|
+ ->|.. ## ..|<-
+ |.. ## ..|
+ |.. 8##########a..|
+ |..................|
+ |..................|
+ ------------------
+
+Char 0xbfd0 '뿐'
+ Font: #13 gulim (17)
+ Bitmap: 16 x 14
+ Advance: 18
+ Offset: 1 x -2
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |. bb 6666 bb .|
+ |. cc cc## ## .|
+ |. #####c###### .|
+ |. cc cc## ## .|
+ |. cc cc## ## .|
+ |. ## 1#c##1 ## .|
+ |. 7####67####7 .|
+ |. .|
+ |.1##############1.|
+ |. ## .|
+ |. cc ## .|
+ ->|. ## aa .|<-
+ |. ##1 .|
+ |. 8##########c .|
+ |..................|
+ |..................|
+ ------------------
+
+Char 0xc0ac '사'
+ Font: #13 gulim (17)
+ Bitmap: 17 x 15
+ Advance: 18
+ Offset: 1 x -3
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |. 1ca #c |
+ |. 3## ## |
+ |. 4##1 ## |
+ |. 6##3 ## |
+ |. 9##6 ## |
+ |. c##9 ####4|
+ |. 4#a## ## |
+ |. b#38#5 ## |
+ |. 5#a 2##1 ## |
+ |. 2##2 6#a ## |
+ |.4##3 8#91## |
+ ->|.692 781## |<-
+ |. ## |
+ |. ## |
+ |. 44 |
+ |..................|
+ ------------------
+
+Char 0xc0b4 '살'
+ Font: #13 gulim (17)
+ Bitmap: 16 x 14
+ Advance: 18
+ Offset: 1 x -2
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |. b#2 #c .|
+ |. 1##5 ## .|
+ |. 6##a ## .|
+ |. 1##c#3 ####3.|
+ |. a#63##2 ## .|
+ |. a#9 5##3 ## .|
+ |.b#7 3##4## .|
+ |. 1 44 .|
+ |. b#########8 .|
+ |. ## .|
+ |. ## .|
+ ->|. a#########9 .|<-
+ |. c#2 .|
+ |. 9##########7 .|
+ |..................|
+ |..................|
+ ------------------
+
+Char 0xc0bd '삽'
+ Font: #13 gulim (17)
+ Bitmap: 17 x 14
+ Advance: 18
+ Offset: 1 x -2
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |. 8#6 #c |
+ |. b#9 ## |
+ |. 2### ## |
+ |. 9###6 ####3|
+ |. 5#a1##3 ## |
+ |. 4##1 3##4 ## |
+ |.7##1 2##6 ## |
+ |.22 32 66 |
+ |. bb aa |
+ |. ## ## |
+ |. ############ |
+ ->|. ## ## |<-
+ |. ##1 1## |
+ |. 8##########8 |
+ |..................|
+ |..................|
+ ------------------
+
+Char 0xc0c1 '상'
+ Font: #13 gulim (17)
+ Bitmap: 17 x 15
+ Advance: 18
+ Offset: 0 x -3
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ | 3#b #c .|
+ | 5## ## .|
+ | a##4 ## .|
+ | 2###a ####2.|
+ | b#3a#6 ## .|
+ | a#8 1##6 ## .|
+ |1##7 1##9 ## .|
+ |154 55 ## .|
+ | 88 .|
+ | 29######a2 .|
+ | 5##71 17##5 .|
+ ->| c#2 2## .|<-
+ | c#2 2## .|
+ | 4##82 14a##5 .|
+ | 18######81 .|
+ |..................|
+ ------------------
+
+Char 0xc0c8 '새'
+ Font: #13 gulim (17)
+ Bitmap: 15 x 15
+ Advance: 18
+ Offset: 1 x -3
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |. bb cc #c..|
+ |. ## ## ##..|
+ |. ## ## ##..|
+ |. ## ## ##..|
+ |. 2##2 ## ##..|
+ |. 5##6 ## ##..|
+ |. a##a ######..|
+ |. 1####1 ## ##..|
+ |. 7#78#6 ## ##..|
+ |. 2##11#c ## ##..|
+ |. c#5 7#7## ##..|
+ ->|.2a8 ba## ##..|<-
+ |. ## ##..|
+ |. cc ##..|
+ |. 33..|
+ |..................|
+ ------------------
+
+Char 0xc0c9 '색'
+ Font: #13 gulim (17)
+ Bitmap: 15 x 15
+ Advance: 18
+ Offset: 1 x -3
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |. 6#7 cc bc1..|
+ |. 7#9 ## c#1..|
+ |. 9#b ## c#1..|
+ |. c## #####1..|
+ |. 4###5 ## c#1..|
+ |. c#7##1 ## c#1..|
+ |. a#8 8#b ## c#1..|
+ |.6#9 8#8## c#1..|
+ |. 22 67 ..|
+ |. 8##########9 ..|
+ |. 1## ..|
+ ->|. ## ..|<-
+ |. ## ..|
+ |. ## ..|
+ |. 55 ..|
+ |..................|
+ ------------------
+
+Char 0xc0dd '생'
+ Font: #13 gulim (17)
+ Bitmap: 14 x 15
+ Advance: 18
+ Offset: 2 x -3
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |.. b#1 cc 1#b..|
+ |.. ##3 ## 2#c..|
+ |.. 1##5 ## 2#c..|
+ |.. 4##8 #####c..|
+ |.. a### ## 2#c..|
+ |.. 4#b9#7 ## 2#c..|
+ |..2##21##5## 2#c..|
+ |..b#3 2#### 2#c..|
+ |.. 22 76..|
+ |.. 17######6 ..|
+ |.. 4##b4114c##3..|
+ ->|.. c#4 4#c..|<-
+ |.. c#4 3#c..|
+ |.. 3##b4114b##4..|
+ |.. 6######71 ..|
+ |..................|
+ ------------------
+
+Char 0xc11c '서'
+ Font: #13 gulim (17)
+ Bitmap: 14 x 15
+ Advance: 18
+ Offset: 2 x -3
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |.. cc c#..|
+ |.. ## ##..|
+ |.. ## ##..|
+ |.. 1## ##..|
+ |.. 3##3 ##..|
+ |.. 8##7 c#####..|
+ |.. #### ##..|
+ |.. 6#9a#5 ##..|
+ |.. ##23#c ##..|
+ |.. 8#8 9#7 ##..|
+ |..7##1 1##6 ##..|
+ ->|..9b2 2#c ##..|<-
+ |.. ##..|
+ |.. ##..|
+ |.. 33..|
+ |..................|
+ ------------------
+
+Char 0xc120 '선'
+ Font: #13 gulim (17)
+ Bitmap: 14 x 14
+ Advance: 18
+ Offset: 2 x -2
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |.. 99 aa..|
+ |.. 1## ##..|
+ |.. 4##3 ##..|
+ |.. 7##6 ##..|
+ |.. c##c 9#####..|
+ |.. 6#9a#5 ##..|
+ |.. 1##22##1 ##..|
+ |.. b#5 5#b ##..|
+ |..7#7 7#7 ##..|
+ |.. 33 ##..|
+ |.. ## cc..|
+ ->|.. ## ..|<-
+ |.. ##1 ..|
+ |.. 9##########b..|
+ |..................|
+ |..................|
+ ------------------
+
+Char 0xc124 '설'
+ Font: #13 gulim (17)
+ Bitmap: 14 x 14
+ Advance: 18
+ Offset: 2 x -2
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |.. 1ca cc..|
+ |.. 4## ##..|
+ |.. 8##4 ##..|
+ |.. ###9 9#####..|
+ |.. 6#ac#2 ##..|
+ |.. 3##24##1 ##..|
+ |..3##5 7##2 ##..|
+ |..8c3 494 77..|
+ |.. ..|
+ |.. c##########a..|
+ |.. 1##..|
+ ->|.. b##########9..|<-
+ |.. ## ..|
+ |.. a##########b..|
+ |..................|
+ |..................|
+ ------------------
+
+Char 0xc131 '성'
+ Font: #13 gulim (17)
+ Bitmap: 14 x 15
+ Advance: 18
+ Offset: 2 x -3
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |.. cc #c..|
+ |.. 3##1 1##..|
+ |.. 7##5 1##..|
+ |.. c##a 9#####..|
+ |.. 5#ab#4 1##..|
+ |.. 2##23##1 1##..|
+ |..1##6 6#c 1##..|
+ |..a#6 6#7 1##..|
+ |.. a9..|
+ |.. 2b######81 ..|
+ |.. 6##6 19##4..|
+ ->|.. ##2 3#c..|<-
+ |.. c#4 4#c..|
+ |.. 3##c4115###3..|
+ |.. 5######6 ..|
+ |..................|
+ ------------------
+
+Char 0xc138 '세'
+ Font: #13 gulim (17)
+ Bitmap: 14 x 15
+ Advance: 18
+ Offset: 2 x -3
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |.. cc cc c#..|
+ |.. ## ## ##..|
+ |.. ## ## ##..|
+ |.. ## ## ##..|
+ |.. ## ## ##..|
+ |.. 3##19#### ##..|
+ |.. 6##5 ## ##..|
+ |.. a##a ## ##..|
+ |.. 1##c#1 ## ##..|
+ |.. 8#76#8 ## ##..|
+ |..2##1 b#6 ## ##..|
+ ->|..9#4 1c#3## ##..|<-
+ |.. ## ##..|
+ |.. cc ##..|
+ |.. 55..|
+ |..................|
+ ------------------
+
+Char 0xc14b '셋'
+ Font: #13 gulim (17)
+ Bitmap: 14 x 15
+ Advance: 18
+ Offset: 2 x -3
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |.. 99 99 #c..|
+ |.. ## ## ##..|
+ |.. 1##1 ## ##..|
+ |.. 3##a#### ##..|
+ |.. 7##7 ## ##..|
+ |.. 1####1 ## ##..|
+ |.. a#67#9 ## ##..|
+ |..8#9 b#7## ##..|
+ |..33 22cc #c..|
+ |.. 396 ..|
+ |.. b##1 ..|
+ ->|.. 9#b#c1 ..|<-
+ |.. 3##8 5##4 ..|
+ |.. 4###3 2###6..|
+ |.. 21 131..|
+ |..................|
+ ------------------
+
+Char 0xc158 '션'
+ Font: #13 gulim (17)
+ Bitmap: 14 x 14
+ Advance: 18
+ Offset: 2 x -2
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |.. 99 aa..|
+ |.. 1## ##..|
+ |.. 3##3 4#####..|
+ |.. 6##7 ##..|
+ |.. c##c ##..|
+ |.. 5#99#5 ##..|
+ |.. 2##22##6#####..|
+ |..1c#5 5##1 ##..|
+ |..9#6 6#9 ##..|
+ |.. 33 ##..|
+ |.. ## #c..|
+ ->|.. ## ..|<-
+ |.. ##1 ..|
+ |.. 8##########b..|
+ |..................|
+ |..................|
+ ------------------
+
+Char 0xc18c '소'
+ Font: #13 gulim (17)
+ Bitmap: 15 x 14
+ Advance: 18
+ Offset: 2 x -1
+ __________________
+ |..................|
+ |..................|
+ |.. 44 .|
+ |.. 5##6 .|
+ |.. 1####2 .|
+ |.. a#86#c .|
+ |.. 9#a 8#a .|
+ |.. 2c#a 9#c1 .|
+ |..7##7 6##6 .|
+ |..682 2ba1.|
+ |.. 77 .|
+ |.. 1## .|
+ |.. 1## .|
+ |.. 1## .|
+ ->|.. 1## .|<-
+ |..#############c .|
+ |..................|
+ |..................|
+ |..................|
+ ------------------
+
+Char 0xc18d '속'
+ Font: #13 gulim (17)
+ Bitmap: 14 x 15
+ Advance: 18
+ Offset: 2 x -3
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |.. 3##2 ..|
+ |.. 2####2 ..|
+ |.. 5##44##5 ..|
+ |..3b##c2 2c##b3..|
+ |..5b82 aa 29#8..|
+ |.. ## ..|
+ |.. ## ..|
+ |..##############..|
+ |.. ..|
+ |.. ..|
+ |.. 9##########9 ..|
+ ->|.. 1## ..|<-
+ |.. ## ..|
+ |.. ## ..|
+ |.. ## ..|
+ |..................|
+ ------------------
+
+Char 0xc194 '솔'
+ Font: #13 gulim (17)
+ Bitmap: 15 x 14
+ Advance: 18
+ Offset: 2 x -2
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |.. 4##5 .|
+ |.. 6####7 .|
+ |.. 17##b1 9##92 .|
+ |..a##c3 55 29### .|
+ |.. ## .|
+ |.. ## .|
+ |..c#############1.|
+ |.. .|
+ |.. .|
+ |.. c##########a .|
+ |.. 1## .|
+ ->|.. c##########9 .|<-
+ |.. ## .|
+ |.. b##########c .|
+ |..................|
+ |..................|
+ ------------------
+
+Char 0xc1e0 '쇠'
+ Font: #13 gulim (17)
+ Bitmap: 14 x 15
+ Advance: 18
+ Offset: 1 x -3
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |. a#2 cc...|
+ |. 1##5 ##...|
+ |. 5##a ##...|
+ |. b###3 ##...|
+ |. 7#94#b ##...|
+ |. 5#c1 8#b ##...|
+ |. 8#c1 8##1##...|
+ |. 33 22 351##...|
+ |. ## ##...|
+ |. ## ##...|
+ |. 1##78b####...|
+ ->|.3########c95##...|<-
+ |. ##...|
+ |. ##...|
+ |. 33...|
+ |..................|
+ ------------------
+
+Char 0xc218 '수'
+ Font: #13 gulim (17)
+ Bitmap: 16 x 15
+ Advance: 18
+ Offset: 1 x -3
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |. 4##2 .|
+ |. ###b .|
+ |. a#87#9 .|
+ |. 3##8 8#c2 .|
+ |. 5###4 4###4 .|
+ |. 6a4 4a6 .|
+ |. .|
+ |. .|
+ |.1##############1.|
+ |. ## .|
+ |. ## .|
+ ->|. ## .|<-
+ |. ## .|
+ |. ## .|
+ |. 77 .|
+ |..................|
+ ------------------
+
+Char 0xc220 '술'
+ Font: #13 gulim (17)
+ Bitmap: 16 x 14
+ Advance: 18
+ Offset: 1 x -2
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |. 2##3 .|
+ |. 2####2 .|
+ |. 7##53##81 .|
+ |. 7###b2 19###8 .|
+ |. 363 374 .|
+ |. .|
+ |.1##############1.|
+ |. ## .|
+ |. b##########8 .|
+ |. ## .|
+ |. 1## .|
+ ->|. b##########8 .|<-
+ |. ## .|
+ |. a###########5 .|
+ |..................|
+ |..................|
+ ------------------
+
+Char 0xc27c '쉼'
+ Font: #13 gulim (17)
+ Bitmap: 14 x 15
+ Advance: 18
+ Offset: 2 x -2
+ __________________
+ |..................|
+ |..................|
+ |.. 11 ..|
+ |.. 2##4 #c..|
+ |.. a###1 ##..|
+ |.. 7#96#a ##..|
+ |.. 9#b 7##2 ##..|
+ |.. c#7 4##1##..|
+ |.. 13##..|
+ |..3c############..|
+ |.. 3445## ##..|
+ |.. ## 77..|
+ |.. 7##########7..|
+ |.. ##1 1##..|
+ ->|.. ## ##..|<-
+ |.. ## 1##..|
+ |.. 8##########8..|
+ |..................|
+ |..................|
+ ------------------
+
+Char 0xc2a4 '스'
+ Font: #13 gulim (17)
+ Bitmap: 16 x 14
+ Advance: 18
+ Offset: 1 x -1
+ __________________
+ |..................|
+ |..................|
+ |. 32 .|
+ |. 4##2 .|
+ |. a##8 .|
+ |. 4#cc#2 .|
+ |. 1##34#b .|
+ |. 1c#7 8#9 .|
+ |. 5##6 8##2 .|
+ |. a#c2 4##6 .|
+ |. 11 .|
+ |. .|
+ |. .|
+ |. .|
+ ->|. .|<-
+ |.1##############1.|
+ |..................|
+ |..................|
+ |..................|
+ ------------------
+
+Char 0xc2b5 '습'
+ Font: #13 gulim (17)
+ Bitmap: 15 x 14
+ Advance: 18
+ Offset: 1 x -2
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |. 5##4 ..|
+ |. 6####4 ..|
+ |. 15###22###4 ..|
+ |. ####5 5###a..|
+ |. 11 21..|
+ |. ..|
+ |.5#############9..|
+ |. ..|
+ |. bc aa ..|
+ |. ## ## ..|
+ |. ############ ..|
+ ->|. ## ## ..|<-
+ |. ##1 1## ..|
+ |. 7##########8 ..|
+ |..................|
+ |..................|
+ ------------------
+
+Char 0xc2dc '시'
+ Font: #13 gulim (17)
+ Bitmap: 14 x 15
+ Advance: 18
+ Offset: 1 x -3
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |. cc c#...|
+ |. ##1 ##...|
+ |. 3##4 ##...|
+ |. 6##7 ##...|
+ |. a##b ##...|
+ |. 1#cb#2 ##...|
+ |. 7#76#7 ##...|
+ |. 1##11##1 ##...|
+ |. a#7 8#8 ##...|
+ |. 5#b 1##3 ##...|
+ |.2##2 4##1##...|
+ ->|.253 451##...|<-
+ |. ##...|
+ |. ##...|
+ |. 33...|
+ |..................|
+ ------------------
+
+Char 0xc2dd '식'
+ Font: #13 gulim (17)
+ Bitmap: 14 x 15
+ Advance: 18
+ Offset: 2 x -3
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |.. 4c7 1#b..|
+ |.. 9#b 2#c..|
+ |.. ###2 2#c..|
+ |.. 6###8 2#c..|
+ |.. 2##1c#3 2#c..|
+ |.. 1##4 3##1 2#c..|
+ |..2##6 5##22#c..|
+ |..7c4 3b72#c..|
+ |.. 55..|
+ |.. 9##########8..|
+ |.. 2##..|
+ ->|.. ##..|<-
+ |.. ##..|
+ |.. ##..|
+ |.. 55..|
+ |..................|
+ ------------------
+
+Char 0xc2e0 '신'
+ Font: #13 gulim (17)
+ Bitmap: 15 x 14
+ Advance: 18
+ Offset: 1 x -2
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |. ab1 c# ..|
+ |. 1##4 ## ..|
+ |. 5##8 ## ..|
+ |. b### ## ..|
+ |. 5#a8#7 ## ..|
+ |. 1##21##2 ## ..|
+ |. c#6 4#c ## ..|
+ |. b#8 6#b1## ..|
+ |.176 682## ..|
+ |. 78 ## ..|
+ |. ## aa ..|
+ ->|. ## ..|<-
+ |. ##1 ..|
+ |. 8##########b..|
+ |..................|
+ |..................|
+ ------------------
+
+Char 0xc2e4 '실'
+ Font: #13 gulim (17)
+ Bitmap: 14 x 14
+ Advance: 18
+ Offset: 2 x -2
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |.. 8#5 1#b..|
+ |.. ##a 1#c..|
+ |.. 5###2 1#c..|
+ |.. ##7#a 1#c..|
+ |.. 9#8 b#5 1#c..|
+ |.. 7#c 2##3 1#c..|
+ |..8##1 3##41#c..|
+ |..45 153 87..|
+ |.. c##########7..|
+ |.. 1##..|
+ |.. 2##..|
+ ->|.. b##########8..|<-
+ |.. ## ..|
+ |.. a##########b..|
+ |..................|
+ |..................|
+ ------------------
+
+Char 0xc2ec '심'
+ Font: #13 gulim (17)
+ Bitmap: 14 x 14
+ Advance: 18
+ Offset: 2 x -2
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |.. 5c7 #c..|
+ |.. 9#b ##..|
+ |.. ###2 ##..|
+ |.. 7###8 ##..|
+ |.. 2##1c#2 ##..|
+ |.. 1##4 4#c1 ##..|
+ |..2##6 6##2 ##..|
+ |..7c4 3b7 ##..|
+ |.. 11..|
+ |.. 7##########6..|
+ |.. ##1 2##..|
+ ->|.. ## 1##..|<-
+ |.. ##1 1##..|
+ |.. 7##########8..|
+ |..................|
+ |..................|
+ ------------------
+
+Char 0xc544 '아'
+ Font: #13 gulim (17)
+ Bitmap: 16 x 15
+ Advance: 18
+ Offset: 1 x -3
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |. 19###a1 #c .|
+ |. b#817#b ## .|
+ |.4#b a#5 ## .|
+ |.9#5 4#9 ## .|
+ |.c#2 1#c ## .|
+ |.##1 ## ####4.|
+ |.##1 ## ## .|
+ |.c#2 1#c ## .|
+ |.a#4 3#a ## .|
+ |.6#a 9#7 ## .|
+ |.1##928##1 ## .|
+ ->|. 2c###c2 ## .|<-
+ |. ## .|
+ |. ## .|
+ |. 55 .|
+ |..................|
+ ------------------
+
+Char 0xc548 '안'
+ Font: #13 gulim (17)
+ Bitmap: 16 x 14
+ Advance: 18
+ Offset: 1 x -2
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |. 2b###b1 c# .|
+ |.2##5 6##1 ## .|
+ |.9#5 6#9 ## .|
+ |.## ## ## .|
+ |.## 1## ####5.|
+ |.9#5 7#9 ## .|
+ |.2##5 6##1 ## .|
+ |. 2c###a1 ## .|
+ |. ## .|
+ |. 22 ## .|
+ |. ## 99 .|
+ ->|. ## .|<-
+ |. ##1 .|
+ |. 8##########b .|
+ |..................|
+ |..................|
+ ------------------
+
+Char 0xc54a '않'
+ Font: #13 gulim (17)
+ Bitmap: 16 x 15
+ Advance: 18
+ Offset: 1 x -3
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |. 3#####3 bb .|
+ |.4##3 4##4 ## .|
+ |.b#3 3#b ## .|
+ |.## ## ####5.|
+ |.b#3 4#b ##c .|
+ |.4##3 4##3 ##c .|
+ |. 4#####3 c#b .|
+ |. .|
+ |. a###a .|
+ |. cc 9######a .|
+ |. ## .|
+ ->|. ## 2b###91 .|<-
+ |. ## c#4 5#b .|
+ |. a####7b#416#b .|
+ |. 2a###a1 .|
+ |..................|
+ ------------------
+
+Char 0xc54c '알'
+ Font: #13 gulim (17)
+ Bitmap: 16 x 14
+ Advance: 18
+ Offset: 1 x -2
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |. 3#####3 c# .|
+ |.4##3 4##4 ## .|
+ |.b#3 3#b ## .|
+ |.## ## ####4.|
+ |.b#3 4#b ## .|
+ |.4##3 4##3 ## .|
+ |. 4#####3 ## .|
+ |. 77 .|
+ |. c#########7 .|
+ |. 1## .|
+ |. 1## .|
+ ->|. c#########8 .|<-
+ |. ## .|
+ |. b##########6 .|
+ |..................|
+ |..................|
+ ------------------
+
+Char 0xc558 '았'
+ Font: #13 gulim (17)
+ Bitmap: 16 x 14
+ Advance: 18
+ Offset: 1 x -2
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |. 2c###c2 c# .|
+ |.2##4 5##2 ## .|
+ |.9#5 6#9 ## .|
+ |.c# ## ####4.|
+ |.c# 1## ## .|
+ |.9#5 7#9 ## .|
+ |.2##618##1 ## .|
+ |. 2b###91 ## .|
+ |. .|
+ |. 6#7 ## .|
+ |. 9#b 2##3 .|
+ ->|. 2###3 8##9 .|<-
+ |. 2##8##35#bb#7 .|
+ |.1##4 4###b11a#a .|
+ |..................|
+ |..................|
+ ------------------
+
+Char 0xc55e '앞'
+ Font: #13 gulim (17)
+ Bitmap: 16 x 14
+ Advance: 18
+ Offset: 1 x -2
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |. 2c###c2 c# .|
+ |.2##4 5##2 ## .|
+ |.9#5 6#9 ## .|
+ |.c# ## ####4.|
+ |.c# 1## ## .|
+ |.9#5 7#9 ## .|
+ |.2##618##1 ## .|
+ |. 2b###91 ## .|
+ |. .|
+ |. b###########a .|
+ |. 8#5 9#3 .|
+ ->|. 6#7 b#2 .|<-
+ |. 5#9 c#1 .|
+ |. ############# .|
+ |..................|
+ |..................|
+ ------------------
+
+Char 0xc57c '야'
+ Font: #13 gulim (17)
+ Bitmap: 16 x 15
+ Advance: 18
+ Offset: 1 x -3
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |. 19###a1 #c .|
+ |. b#818#b ## .|
+ |.4#b a#5 ## .|
+ |.9#5 4#9 ####6.|
+ |.c#3 1#c ## .|
+ |.##1 ## ## .|
+ |.##1 ## ## .|
+ |.c#2 1#c ## .|
+ |.a#5 3#a ####7.|
+ |.6#a 9#6 ## .|
+ |. c#938## ## .|
+ ->|. 1a###b1 ## .|<-
+ |. ## .|
+ |. ## .|
+ |. 44 .|
+ |..................|
+ ------------------
+
+Char 0xc57d '약'
+ Font: #13 gulim (17)
+ Bitmap: 16 x 15
+ Advance: 18
+ Offset: 1 x -3
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |. 2c###c2 1#c .|
+ |.2##4 5##2 1#c .|
+ |.9#5 6#9 1####3.|
+ |.c# ## 1#c .|
+ |.c# 1## 1#c .|
+ |.9#5 7#9 1####3.|
+ |.2##618##1 1#c .|
+ |. 2b###91 1#c .|
+ |. 65 .|
+ |. 9##########8 .|
+ |. 1## .|
+ ->|. ## .|<-
+ |. ## .|
+ |. ## .|
+ |. 22 .|
+ |..................|
+ ------------------
+
+Char 0xc591 '양'
+ Font: #13 gulim (17)
+ Bitmap: 16 x 15
+ Advance: 18
+ Offset: 1 x -3
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |. 2c###c2 ## .|
+ |.2##4 5##2 ## .|
+ |.9#5 6#9 ####4.|
+ |.c# ## ## .|
+ |.c# 1## ## .|
+ |.9#5 7#9 ####4.|
+ |.2##618##1 ## .|
+ |. 2b###91 ## .|
+ |. 66 .|
+ |. 3c######3 .|
+ |. 5##5 4##6 .|
+ ->|. ##1 1## .|<-
+ |. ##1 2## .|
+ |. 5##51 28##6 .|
+ |. 2b#####a2 .|
+ |..................|
+ ------------------
+
+Char 0xc5b4 '어'
+ Font: #13 gulim (17)
+ Bitmap: 14 x 15
+ Advance: 18
+ Offset: 2 x -3
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |.. 9###a1 #c..|
+ |.. b#818#b ##..|
+ |..4#b a#5 ##..|
+ |..9#5 5#9 ##..|
+ |..c#2 1#c ##..|
+ |..##1 ## ##..|
+ |..##1 ##a####..|
+ |..c#2 1#c ##..|
+ |..9#4 4#a ##..|
+ |..5#a 9#6 ##..|
+ |.. b#a39#c ##..|
+ ->|.. 9###a1 ##..|<-
+ |.. ##..|
+ |.. ##..|
+ |.. 55..|
+ |..................|
+ ------------------
+
+Char 0xc5b8 '언'
+ Font: #13 gulim (17)
+ Bitmap: 14 x 14
+ Advance: 18
+ Offset: 2 x -2
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |.. 1a###a1 aa..|
+ |..1##6 7#c ##..|
+ |..7#7 8#7 ##..|
+ |..c#1 2#c ##..|
+ |..## ##9####..|
+ |..c#1 2#c ##..|
+ |..7#8 a#6 ##..|
+ |.. c#82a#a ##..|
+ |.. 19###7 ##..|
+ |.. 22 ##..|
+ |.. ## #c..|
+ ->|.. ## ..|<-
+ |.. ##1 ..|
+ |.. 8##########b..|
+ |..................|
+ |..................|
+ ------------------
+
+Char 0xc5bb '얻'
+ Font: #13 gulim (17)
+ Bitmap: 14 x 14
+ Advance: 18
+ Offset: 2 x -2
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |.. 2c###c2 1cb..|
+ |..2##4 5##2 1#c..|
+ |..a#5 5#9 1#c..|
+ |..## ##a###c..|
+ |..## 1## 1#c..|
+ |..9#5 6#9 1#c..|
+ |..2##618##1 1#c..|
+ |.. 2b###91 1#c..|
+ |.. 33..|
+ |.. 7##########a..|
+ |.. ##3 ..|
+ ->|.. ##1 ..|<-
+ |.. ##2 ..|
+ |.. 8##########8..|
+ |..................|
+ |..................|
+ ------------------
+
+Char 0xc5c5 '업'
+ Font: #13 gulim (17)
+ Bitmap: 14 x 14
+ Advance: 18
+ Offset: 2 x -2
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |.. 2c###c2 aa..|
+ |..2##4 5##2 ##..|
+ |..9#5 5#9 ##..|
+ |..c# ##9####..|
+ |..c# 1## ##..|
+ |..9#5 7#9 ##..|
+ |..2##618##1 ##..|
+ |.. 2b###91 #c..|
+ |.. 66 55..|
+ |.. ## ##..|
+ |.. ############..|
+ ->|.. ## ##..|<-
+ |.. ##1 ##..|
+ |.. 8##########8..|
+ |..................|
+ |..................|
+ ------------------
+
+Char 0xc5c6 '없'
+ Font: #13 gulim (17)
+ Bitmap: 15 x 14
+ Advance: 18
+ Offset: 1 x -2
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |. 3#####3 #c ..|
+ |.4##3 4##4 ## ..|
+ |.b#3 3#b ## ..|
+ |.## ##9#### ..|
+ |.b#3 3#b ## ..|
+ |.4##3 4##4 ## ..|
+ |. 4#####3 ## ..|
+ |. ## ..|
+ |. ## #c 6633 ..|
+ |. ## ## 1##2 ..|
+ |. ###### 7##8 ..|
+ ->|. ## ## 3####3 ..|<-
+ |. ## 1##4##62##4..|
+ |. 9####a##4 198..|
+ |..................|
+ |..................|
+ ------------------
+
+Char 0xc5d0 '에'
+ Font: #13 gulim (17)
+ Bitmap: 13 x 15
+ Advance: 18
+ Offset: 2 x -3
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |.. 6###5 cc c#...|
+ |..2##5##2 ## ##...|
+ |..8#7 6#7 ## ##...|
+ |..a#3 2#a ## ##...|
+ |..c#1 #c ## ##...|
+ |..cc ##### ##...|
+ |..cc ## ## ##...|
+ |..c#1 #c ## ##...|
+ |..a#3 2#b ## ##...|
+ |..7#7 6#8 ## ##...|
+ |..2##4##3 ## ##...|
+ ->|.. 5###6 ## ##...|<-
+ |.. ## ##...|
+ |.. cc ##...|
+ |.. 11...|
+ |..................|
+ ------------------
+
+Char 0xc5d4 '엔'
+ Font: #13 gulim (17)
+ Bitmap: 14 x 14
+ Advance: 18
+ Offset: 2 x -2
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |.. 6###6 cc c# ..|
+ |..4#b1a#4 ## ## ..|
+ |..9#3 3#a ## ## ..|
+ |..c# ## ## ## ..|
+ |..c# ##### ## ..|
+ |..a#3 3#a ## ## ..|
+ |..4#a 9#5 ## ## ..|
+ |.. 6###7 ## ## ..|
+ |.. ## ## ..|
+ |.. 22 ## ## ..|
+ |.. ## 11 66 ..|
+ ->|.. ## ..|<-
+ |.. ## ..|
+ |.. 8##########b..|
+ |..................|
+ |..................|
+ ------------------
+
+Char 0xc5ec '여'
+ Font: #13 gulim (17)
+ Bitmap: 13 x 15
+ Advance: 18
+ Offset: 2 x -3
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |.. 2####3 c#...|
+ |..1##44##1 ##...|
+ |..6#8 7#6 ##...|
+ |..a#4 3#ab####...|
+ |..c#2 1#c ##...|
+ |..##1 ## ##...|
+ |..##1 ## ##...|
+ |..##1 ## ##...|
+ |..b#3 2#bb####...|
+ |..7#7 6#8 ##...|
+ |..1##65##2 ##...|
+ ->|.. 4####4 ##...|<-
+ |.. ##...|
+ |.. ##...|
+ |.. 44...|
+ |..................|
+ ------------------
+
+Char 0xc5f4 '열'
+ Font: #13 gulim (17)
+ Bitmap: 14 x 14
+ Advance: 18
+ Offset: 2 x -2
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |.. 2c###c2 #c..|
+ |..2##4 5##2 ##..|
+ |..9#5 5#9b####..|
+ |..## ## ##..|
+ |..## 1## ##..|
+ |..9#5 6#9b####..|
+ |..2##617##1 ##..|
+ |.. 2b###91 a9..|
+ |.. c##########7..|
+ |.. 1##..|
+ |.. 1##..|
+ ->|.. b##########8..|<-
+ |.. ## ..|
+ |.. a##########9..|
+ |..................|
+ |..................|
+ ------------------
+
+Char 0xc601 '영'
+ Font: #13 gulim (17)
+ Bitmap: 14 x 15
+ Advance: 18
+ Offset: 2 x -3
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |.. 2c###c2 cc..|
+ |..2##5 5##2 ##..|
+ |..9#5 6#9b####..|
+ |..c# ## ##..|
+ |..c# 1## ##..|
+ |..9#6 7#9b####..|
+ |..1##728##1 ##..|
+ |.. 1a###91 ##..|
+ |.. #c..|
+ |.. 3c#####a2 ..|
+ |.. 6##5 6##5 ..|
+ ->|.. ##2 2## ..|<-
+ |.. ##3 3## ..|
+ |.. 3##a3 3a##4 ..|
+ |.. 17#####71 ..|
+ |..................|
+ ------------------
+
+Char 0xc608 '예'
+ Font: #13 gulim (17)
+ Bitmap: 13 x 15
+ Advance: 18
+ Offset: 2 x -3
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |.. 4###4 ccc#...|
+ |..1##5##1 ####...|
+ |..6#7 7#7 ####...|
+ |..a#3 2#ba#####...|
+ |..c#1 #c ####...|
+ |..c# ## ####...|
+ |..c# ## ####...|
+ |..c#1 #c ####...|
+ |..a#3 2#ba#####...|
+ |..6#8 6#7 ####...|
+ |..1##5##2 ####...|
+ ->|.. 4###5 ####...|<-
+ |.. ####...|
+ |.. ####...|
+ |.. 33...|
+ |..................|
+ ------------------
+
+Char 0xc624 '오'
+ Font: #13 gulim (17)
+ Bitmap: 15 x 13
+ Advance: 18
+ Offset: 2 x -1
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |.. 3c#####b3 .|
+ |.. a##5 6##8 .|
+ |.. 9#a b#7 .|
+ |.. ##1 2## .|
+ |.. ##1 3#c .|
+ |.. 7#b1 1c#7 .|
+ |.. 8##6 17##7 .|
+ |.. 2b#####a2 .|
+ |.. 11 .|
+ |.. ## .|
+ |.. ## .|
+ ->|.. ## .|<-
+ |..a#############a.|
+ |..................|
+ |..................|
+ |..................|
+ ------------------
+
+Char 0xc628 '온'
+ Font: #13 gulim (17)
+ Bitmap: 16 x 14
+ Advance: 18
+ Offset: 1 x -2
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |. 7######81 .|
+ |. 3##b3 28##3 .|
+ |. c#3 2#c .|
+ |. c#2 2#c .|
+ |. 4##81 17##5 .|
+ |. 1a######b2 .|
+ |. ##1 .|
+ |. ## .|
+ |.1##############1.|
+ |. 11 .|
+ |. ## .|
+ ->|. ## .|<-
+ |. ##1 .|
+ |. 8##########b .|
+ |..................|
+ |..................|
+ ------------------
+
+Char 0xc62c '올'
+ Font: #13 gulim (17)
+ Bitmap: 16 x 14
+ Advance: 18
+ Offset: 1 x -2
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |. 3c######c3 .|
+ |. 7##61 4##7 .|
+ |. ##1 1## .|
+ |. 8##5 4##8 .|
+ |. 4########5 .|
+ |. ##1 .|
+ |. ## .|
+ |.1##############1.|
+ |. .|
+ |. a##########a .|
+ |. 1## .|
+ ->|. a##########9 .|<-
+ |. c#2 .|
+ |. 9##########c .|
+ |..................|
+ |..................|
+ ------------------
+
+Char 0xc635 '옵'
+ Font: #13 gulim (17)
+ Bitmap: 16 x 14
+ Advance: 18
+ Offset: 1 x -2
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |. 3c######c3 .|
+ |. 7##61 4##7 .|
+ |. ##1 1## .|
+ |. 8##5 4##8 .|
+ |. 4########5 .|
+ |. ##1 .|
+ |. ## .|
+ |.1##############1.|
+ |. 22 11 .|
+ |. ## ## .|
+ |. ############ .|
+ ->|. ## ## .|<-
+ |. ##1 1## .|
+ |. 8##########8 .|
+ |..................|
+ |..................|
+ ------------------
+
+Char 0xc640 '와'
+ Font: #13 gulim (17)
+ Bitmap: 17 x 15
+ Advance: 18
+ Offset: 0 x -3
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ | 1b###c2 #c .|
+ | 2##3 4##2 ## .|
+ | 9#5 5#9 ## .|
+ | ## ## ## .|
+ | ##1 1#c ## .|
+ | 8#6 6#8 ####6.|
+ | 1c#727##1 ## .|
+ | 8###8 ## .|
+ | 88 ## .|
+ | ## ## .|
+ | 1## 257b## .|
+ ->|2############# .|<-
+ | ## .|
+ | ## .|
+ | 44 .|
+ |..................|
+ ------------------
+
+Char 0xc644 '완'
+ Font: #13 gulim (17)
+ Bitmap: 17 x 14
+ Advance: 18
+ Offset: 1 x -2
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |. 3####c2 #c |
+ |. 4##3 3##3 ## |
+ |. c#3 3#c ## |
+ |. ## ## ####4|
+ |. 7#8 8#9 ## |
+ |. 7##c##b ## |
+ |. 15##4 ## |
+ |. ## 147b## |
+ |.4##########b## |
+ |. 121 ## |
+ |. ##1 99 |
+ ->|. ##1 |<-
+ |. ##2 |
+ |. 8##########b |
+ |..................|
+ |..................|
+ ------------------
+
+Char 0xc67c '왼'
+ Font: #13 gulim (17)
+ Bitmap: 14 x 14
+ Advance: 18
+ Offset: 2 x -2
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |.. 3####c2 88..|
+ |.. 5##2 3##4 ##..|
+ |.. c#1 3#c ##..|
+ |.. ## 2## ##..|
+ |.. 7#9 9#8 ##..|
+ |.. 6#####a ##..|
+ |.. 2##1 ##..|
+ |.. 1##4568b##..|
+ |..4#############..|
+ |.. 11 ##..|
+ |.. ##1 c#..|
+ ->|.. ##1 ..|<-
+ |.. ##2 ..|
+ |.. 8##########b..|
+ |..................|
+ |..................|
+ ------------------
+
+Char 0xc694 '요'
+ Font: #13 gulim (17)
+ Bitmap: 15 x 13
+ Advance: 18
+ Offset: 1 x -1
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |. 5######5 ..|
+ |. 1b##3 3##b ..|
+ |. 9#8 9#8 ..|
+ |. ##1 1## ..|
+ |. ##1 1## ..|
+ |. 7#b b#7 ..|
+ |. 8##7117##8 ..|
+ |. 2a####a2 ..|
+ |. 55 55 ..|
+ |. ## ## ..|
+ |. ## ## ..|
+ ->|. ## ## ..|<-
+ |.5#############a..|
+ |..................|
+ |..................|
+ |..................|
+ ------------------
+
+Char 0xc6a9 '용'
+ Font: #13 gulim (17)
+ Bitmap: 15 x 15
+ Advance: 18
+ Offset: 2 x -3
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |.. 4#######b3 .|
+ |.. 9##4 6##7 .|
+ |.. ##1 1## .|
+ |.. 7##71 17##8 .|
+ |.. 2a######b3 .|
+ |.. 99 99 .|
+ |.. ## ## .|
+ |..c#############2.|
+ |.. .|
+ |.. 29######71 .|
+ |.. 6##82 3a##4 .|
+ ->|.. ##2 3## .|<-
+ |.. ##3 3## .|
+ |.. 4##b4114b##4 .|
+ |.. 17######71 .|
+ |..................|
+ ------------------
+
+Char 0xc6b0 '우'
+ Font: #13 gulim (17)
+ Bitmap: 14 x 15
+ Advance: 18
+ Offset: 2 x -3
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |.. 18######71 ..|
+ |.. 3##81 19##2 ..|
+ |.. c#4 4#b ..|
+ |.. ## ## ..|
+ |.. b#6 6#b ..|
+ |.. 1###5115###2 ..|
+ |.. 4######5 ..|
+ |.. ..|
+ |..b############b..|
+ |.. ## ..|
+ |.. ## ..|
+ ->|.. ## ..|<-
+ |.. ## ..|
+ |.. ## ..|
+ |.. 22 ..|
+ |..................|
+ ------------------
+
+Char 0xc6b4 '운'
+ Font: #13 gulim (17)
+ Bitmap: 16 x 14
+ Advance: 18
+ Offset: 1 x -2
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |. 7######6 .|
+ |. 2##a1 2b##1 .|
+ |. b#6 6#b .|
+ |. ##1 ## .|
+ |. 9#7 6#a .|
+ |. a##5115##c1 .|
+ |. 3c#####4 .|
+ |. .|
+ |.1##############1.|
+ |. 22 ## .|
+ |. ##1 ## .|
+ ->|. ##1 cb .|<-
+ |. ##2 .|
+ |. 8##########c .|
+ |..................|
+ |..................|
+ ------------------
+
+Char 0xc6c0 '움'
+ Font: #13 gulim (17)
+ Bitmap: 16 x 14
+ Advance: 18
+ Offset: 1 x -2
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |. 19######81 .|
+ |. 5##81 29##4 .|
+ |. c#3 3## .|
+ |. b#5 3## .|
+ |. 2##c4 4c##3 .|
+ |. 5######6 .|
+ |. .|
+ |.1##############1.|
+ |. ## .|
+ |. 7##########6 .|
+ |. ##1 1## .|
+ ->|. ## ## .|<-
+ |. ## 1## .|
+ |. 8##########8 .|
+ |..................|
+ |..................|
+ ------------------
+
+Char 0xc6cc '워'
+ Font: #13 gulim (17)
+ Bitmap: 14 x 15
+ Advance: 18
+ Offset: 2 x -3
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |.. 3####c3 ##..|
+ |.. 4##3 4##4 ##..|
+ |.. c#3 3#c ##..|
+ |.. ## ## ##..|
+ |.. b#5 4#b ##..|
+ |.. 2##716##3 ##..|
+ |.. 1a###b2 ##..|
+ |.. 15##..|
+ |..4#############..|
+ |.. ## ##..|
+ |.. ## c#####..|
+ ->|.. ## ##..|<-
+ |.. ## ##..|
+ |.. ## ##..|
+ |.. 11 55..|
+ |..................|
+ ------------------
+
+Char 0xc6d0 '원'
+ Font: #13 gulim (17)
+ Bitmap: 14 x 14
+ Advance: 18
+ Offset: 2 x -2
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |.. 4#####4 ##..|
+ |.. 6##2 2##7 ##..|
+ |.. ##1 1## ##..|
+ |.. c#2 2## ##..|
+ |.. 4##5 3##6 ##..|
+ |.. 2b####4 ##..|
+ |.. 1358##..|
+ |..3#############..|
+ |.. 1 ## ##..|
+ |.. 33 ## 2#####..|
+ |.. ##1## ##..|
+ ->|.. ##1 11..|<-
+ |.. ##1 ..|
+ |.. 8##########b..|
+ |..................|
+ |..................|
+ ------------------
+
+Char 0xc6e8 '웨'
+ Font: #13 gulim (17)
+ Bitmap: 14 x 15
+ Advance: 18
+ Offset: 2 x -3
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |.. 4####3 cc cc..|
+ |.. 3##12##3## ##..|
+ |.. b#2 4#a## ##..|
+ |.. ## #c## ##..|
+ |.. b#3 4#a## ##..|
+ |.. 3##12##2## ##..|
+ |.. 4####2 ## ##..|
+ |.. 13## ##..|
+ |..6########## ##..|
+ |.. 1## ## ##..|
+ |.. 1##a#### ##..|
+ ->|.. 1## ## ##..|<-
+ |.. 1## ## ##..|
+ |.. ## cc ##..|
+ |.. 44..|
+ |..................|
+ ------------------
+
+Char 0xc704 '위'
+ Font: #13 gulim (17)
+ Bitmap: 14 x 15
+ Advance: 18
+ Offset: 2 x -3
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |.. 3####c3 ##..|
+ |.. 4##3 4##4 ##..|
+ |.. c#3 3#c ##..|
+ |.. ## ## ##..|
+ |.. b#5 4#b ##..|
+ |.. 3##716##3 ##..|
+ |.. 1a###b2 ##..|
+ |.. 1347a###..|
+ |..7##########a##..|
+ |.. 11 ## ##..|
+ |.. ## ##..|
+ ->|.. ## ##..|<-
+ |.. ## ##..|
+ |.. ## ##..|
+ |.. 33 55..|
+ |..................|
+ ------------------
+
+Char 0xc708 '윈'
+ Font: #13 gulim (17)
+ Bitmap: 15 x 14
+ Advance: 18
+ Offset: 1 x -2
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |. 3#####4 c# ..|
+ |. 5##2 2##7 ## ..|
+ |. c#1 1## ## ..|
+ |. b#2 2## ## ..|
+ |. 4##5 3##6 ## ..|
+ |. 2b####3 ## ..|
+ |. 3## ..|
+ |.4############# ..|
+ |.13543##1 ## ..|
+ |. 33## ## ..|
+ |. 1##c# cc ..|
+ ->|. 1## ..|<-
+ |. 1##1 ..|
+ |. 9##########a..|
+ |..................|
+ |..................|
+ ------------------
+
+Char 0xc720 '유'
+ Font: #13 gulim (17)
+ Bitmap: 14 x 15
+ Advance: 18
+ Offset: 2 x -3
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |.. 18######7 ..|
+ |.. 3##6 2a##2 ..|
+ |.. c#3 5#b ..|
+ |.. ## ## ..|
+ |.. a#6 6#b ..|
+ |.. 1c##5115##c1 ..|
+ |.. 3c####c4 ..|
+ |.. ..|
+ |..c############c..|
+ |.. ## ## ..|
+ |.. ## ## ..|
+ ->|.. ## ## ..|<-
+ |.. ## ## ..|
+ |.. ## ## ..|
+ |.. 55 55 ..|
+ |..................|
+ ------------------
+
+Char 0xc73c '으'
+ Font: #13 gulim (17)
+ Bitmap: 14 x 13
+ Advance: 18
+ Offset: 2 x -1
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |.. 6######4 ..|
+ |.. 1c##3 4##a ..|
+ |.. a#8 a#8 ..|
+ |.. ##1 1## ..|
+ |.. ##2 2## ..|
+ |.. 8#b b#8 ..|
+ |.. 9##7127##9 ..|
+ |.. 3b####b3 ..|
+ |.. ..|
+ |.. ..|
+ |.. ..|
+ ->|.. ..|<-
+ |..c############c..|
+ |..................|
+ |..................|
+ |..................|
+ ------------------
+
+Char 0xc740 '은'
+ Font: #13 gulim (17)
+ Bitmap: 16 x 14
+ Advance: 18
+ Offset: 1 x -2
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |. 18######7 .|
+ |. 3##81 29##3 .|
+ |. c#4 3#c .|
+ |. b#4 3## .|
+ |. 2##91 29##4 .|
+ |. 6######81 .|
+ |. .|
+ |. .|
+ |.1##############1.|
+ |. 33 .|
+ |. ## .|
+ ->|. ## .|<-
+ |. ##1 .|
+ |. 8########### .|
+ |..................|
+ |..................|
+ ------------------
+
+Char 0xc744 '을'
+ Font: #13 gulim (17)
+ Bitmap: 14 x 14
+ Advance: 18
+ Offset: 2 x -2
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |.. 19######81 ..|
+ |.. 5##81 18##4 ..|
+ |.. c#3 3## ..|
+ |.. b#5 4## ..|
+ |.. 2###5115###3 ..|
+ |.. 4######5 ..|
+ |..b############b..|
+ |.. ..|
+ |.. a##########7 ..|
+ |.. 1## ..|
+ |.. 2## ..|
+ ->|.. a##########8 ..|<-
+ |.. c#2 ..|
+ |.. 9##########c ..|
+ |..................|
+ |..................|
+ ------------------
+
+Char 0xc74c '음'
+ Font: #13 gulim (17)
+ Bitmap: 14 x 14
+ Advance: 18
+ Offset: 2 x -2
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |.. 29######91 ..|
+ |.. 5##81 18##4 ..|
+ |.. ##3 3## ..|
+ |.. b#5 3## ..|
+ |.. 2###5115###3 ..|
+ |.. 4######5 ..|
+ |.. ..|
+ |..c############c..|
+ |.. ..|
+ |.. 9##########8 ..|
+ |.. ## ## ..|
+ ->|.. ## ## ..|<-
+ |.. ##1 ## ..|
+ |.. 8##########8 ..|
+ |..................|
+ |..................|
+ ------------------
+
+Char 0xc758 '의'
+ Font: #13 gulim (17)
+ Bitmap: 14 x 15
+ Advance: 18
+ Offset: 2 x -3
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |.. 2c###b2 #c..|
+ |.. 2##5 5##2 ##..|
+ |.. a#5 5#a ##..|
+ |.. ##1 1## ##..|
+ |.. ##1 ## ##..|
+ |.. 9#5 5#a ##..|
+ |.. 1##5 5##2 ##..|
+ |.. 1b###c2 ##..|
+ |.. ##..|
+ |.. ##..|
+ |.. 138###..|
+ ->|..2#############..|<-
+ |.. 23321 ##..|
+ |.. ##..|
+ |.. 44..|
+ |..................|
+ ------------------
+
+Char 0xc774 '이'
+ Font: #13 gulim (17)
+ Bitmap: 14 x 15
+ Advance: 18
+ Offset: 2 x -3
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |.. 1a###9 cc..|
+ |.. c#7 8#b ##..|
+ |.. 6#9 a#5 ##..|
+ |.. b#4 5#9 ##..|
+ |.. ##1 2#c ##..|
+ |.. ## ## ##..|
+ |..1## ## ##..|
+ |.. ##1 1#c ##..|
+ |.. c#3 4#a ##..|
+ |.. 8#8 a#6 ##..|
+ |.. 1##83a## ##..|
+ ->|.. 2c###b1 ##..|<-
+ |.. ##..|
+ |.. ##..|
+ |.. 33..|
+ |..................|
+ ------------------
+
+Char 0xc775 '익'
+ Font: #13 gulim (17)
+ Bitmap: 14 x 15
+ Advance: 18
+ Offset: 2 x -3
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |.. 2c###c2 #c..|
+ |..2##4 5##2 1##..|
+ |..9#5 5#9 1##..|
+ |..c# ## 1##..|
+ |..c# 1## 1##..|
+ |..9#5 7#9 1##..|
+ |..2##618##1 1##..|
+ |.. 2b###91 #c..|
+ |.. ..|
+ |.. 9##########8..|
+ |.. 2##..|
+ ->|.. ##..|<-
+ |.. ##..|
+ |.. ##..|
+ |.. 77..|
+ |..................|
+ ------------------
+
+Char 0xc778 '인'
+ Font: #13 gulim (17)
+ Bitmap: 14 x 14
+ Advance: 18
+ Offset: 2 x -2
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |.. 2c###b1 99..|
+ |..2##5 6##1 ##..|
+ |..9#5 6#9 ##..|
+ |..## ## ##..|
+ |..## 1## ##..|
+ |..9#5 7#9 ##..|
+ |..2##5 7##1 ##..|
+ |.. 2c###a1 ##..|
+ |.. ##..|
+ |.. 22 ##..|
+ |.. ## cc..|
+ ->|.. ## ..|<-
+ |.. ##1 ..|
+ |.. 8##########b..|
+ |..................|
+ |..................|
+ ------------------
+
+Char 0xc77c '일'
+ Font: #13 gulim (17)
+ Bitmap: 15 x 14
+ Advance: 18
+ Offset: 2 x -2
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |.. 3#####3 cc .|
+ |..4##3 4##4 ## .|
+ |..b#2 3#b ## .|
+ |..## ## ## .|
+ |..b#3 3#b ## .|
+ |..4##3 4##4 ## .|
+ |.. 4#####3 ## .|
+ |.. 66 .|
+ |.. c##########8 .|
+ |.. ##1.|
+ |.. 1##1.|
+ ->|.. b##########9 .|<-
+ |.. ## .|
+ |.. a##########6 .|
+ |..................|
+ |..................|
+ ------------------
+
+Char 0xc784 '임'
+ Font: #13 gulim (17)
+ Bitmap: 14 x 14
+ Advance: 18
+ Offset: 2 x -2
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |.. 3#####3 cc..|
+ |..4##3 4##4 ##..|
+ |..b#3 3#b ##..|
+ |..## ## ##..|
+ |..b#3 3#b ##..|
+ |..4##3 4##4 ##..|
+ |.. 3#####3 ##..|
+ |.. 88..|
+ |.. ..|
+ |.. 9##########9..|
+ |.. ## ##..|
+ ->|.. ## ##..|<-
+ |.. ##1 ##..|
+ |.. 8##########9..|
+ |..................|
+ |..................|
+ ------------------
+
+Char 0xc785 '입'
+ Font: #13 gulim (17)
+ Bitmap: 14 x 14
+ Advance: 18
+ Offset: 2 x -2
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |.. 3#####3 #c..|
+ |..4##3 4##4 ##..|
+ |..b#3 3#b ##..|
+ |..## ## ##..|
+ |..b#3 3#b ##..|
+ |..4##3 4##4 ##..|
+ |.. 3#####3 ##..|
+ |.. 44..|
+ |.. bb aa..|
+ |.. ## ##..|
+ |.. ############..|
+ ->|.. ## ##..|<-
+ |.. ##1 ##..|
+ |.. 7##########9..|
+ |..................|
+ |..................|
+ ------------------
+
+Char 0xc788 '있'
+ Font: #13 gulim (17)
+ Bitmap: 16 x 15
+ Advance: 18
+ Offset: 1 x -3
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |. 2c###c2 cc .|
+ |.2##5 5##2 ## .|
+ |.9#5 5#9 ## .|
+ |.c# ## ## .|
+ |.c# 1## ## .|
+ |.9#6 6#9 ## .|
+ |.2##617##1 ## .|
+ |. 1b###91 ## .|
+ |. 66 .|
+ |. 3c9 5#7 .|
+ |. 6## 9#b .|
+ ->|. ###4 1###3 .|<-
+ |. a#a##3 c#a##2 .|
+ |. b#7 4####6 4##4.|
+ |. 1 .|
+ |..................|
+ ------------------
+
+Char 0xc78a '잊'
+ Font: #13 gulim (17)
+ Bitmap: 15 x 15
+ Advance: 18
+ Offset: 2 x -3
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |.. 2c###c2 #c .|
+ |..2##4 5##2 ## .|
+ |..a#4 5#9 ## .|
+ |..## ## ## .|
+ |..## 1## ## .|
+ |..9#5 6#9 ## .|
+ |..2##618##1 ## .|
+ |.. 2b###91 ## .|
+ |.. 11 .|
+ |.. 4###########a .|
+ |.. 8#c .|
+ ->|.. 4###9 .|<-
+ |.. 3b##28##82 .|
+ |.. 7###7 2c###5.|
+ |.. 21 44 .|
+ |..................|
+ ------------------
+
+Char 0xc790 '자'
+ Font: #13 gulim (17)
+ Bitmap: 16 x 15
+ Advance: 18
+ Offset: 1 x -3
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |.6########8 cc .|
+ |. ## ## .|
+ |. ## ## .|
+ |. ## ## .|
+ |. 3##3 ## .|
+ |. 7##7 ####6.|
+ |. b### ## .|
+ |. 3#aa#6 ## .|
+ |. b#42##2 ## .|
+ |. 8#a 5##1 ## .|
+ |.7##1 7##2## .|
+ ->|.792 5a5## .|<-
+ |. ## .|
+ |. ## .|
+ |. 44 .|
+ |..................|
+ ------------------
+
+Char 0xc791 '작'
+ Font: #13 gulim (17)
+ Bitmap: 16 x 15
+ Advance: 18
+ Offset: 1 x -3
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |.9########9 c# .|
+ |. c#2 ##1 .|
+ |. 3##6 ##1 .|
+ |. 8##c ####5.|
+ |. 3#b7#8 ##1 .|
+ |. 3##2 a#8 ##1 .|
+ |.6##2 9#b1##1 .|
+ |.34 34 ## .|
+ |. 33 .|
+ |. 9##########8 .|
+ |. 1## .|
+ ->|. ## .|<-
+ |. ## .|
+ |. ## .|
+ |. 44 .|
+ |..................|
+ ------------------
+
+Char 0xc7a5 '장'
+ Font: #13 gulim (17)
+ Bitmap: 16 x 15
+ Advance: 18
+ Offset: 1 x -3
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |.7########9 c# .|
+ |. b#4 ## .|
+ |. 1##8 ## .|
+ |. 7###1 ####5.|
+ |. 2#c6#a ## .|
+ |. 2##3 9#9 ## .|
+ |.5##3 8##1## .|
+ |.341 341## .|
+ |. 77 .|
+ |. 19######a2 .|
+ |. 4##81 17##4 .|
+ ->|. c#2 2#c .|<-
+ |. c#2 2## .|
+ |. 4##82 3a##5 .|
+ |. 18######81 .|
+ |..................|
+ ------------------
+
+Char 0xc7ac '재'
+ Font: #13 gulim (17)
+ Bitmap: 14 x 15
+ Advance: 18
+ Offset: 2 x -3
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |..1######b cc cc..|
+ |.. ##1 ## ##..|
+ |.. ##1 ## ##..|
+ |.. ##1 ## ##..|
+ |.. ##1 ## ##..|
+ |.. ##3 #####..|
+ |.. 2##5 ## ##..|
+ |.. 6##9 ## ##..|
+ |.. b###1 ## ##..|
+ |.. 4#a6#8 ## ##..|
+ |..2##2 ##3 ## ##..|
+ ->|..b#5 3#c ## ##..|<-
+ |.. ## ##..|
+ |.. cc ##..|
+ |.. 44..|
+ |..................|
+ ------------------
+
+Char 0xc800 '저'
+ Font: #13 gulim (17)
+ Bitmap: 14 x 15
+ Advance: 18
+ Offset: 2 x -3
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |..2########c #c..|
+ |.. ## ##..|
+ |.. ## ##..|
+ |.. ##1 ##..|
+ |.. 1##3 ##..|
+ |.. 4##6 3#####..|
+ |.. 7##a ##..|
+ |.. bc##2 ##..|
+ |.. 4c87#a ##..|
+ |.. bc11##7 ##..|
+ |.. 8#6 5##6 ##..|
+ ->|..6#a 8##5 ##..|<-
+ |..22 341 ##..|
+ |.. ##..|
+ |.. 33..|
+ |..................|
+ ------------------
+
+Char 0xc801 '적'
+ Font: #13 gulim (17)
+ Bitmap: 14 x 15
+ Advance: 18
+ Offset: 2 x -3
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |.. a#######8 1#c..|
+ |.. ##1 1##..|
+ |.. 2##3 1##..|
+ |.. 7##9 3#####..|
+ |.. 1####3 1##..|
+ |.. b#63##1 1##..|
+ |.. a#9 5##1 1##..|
+ |..5c7 495 1##..|
+ |.. 22..|
+ |.. 9##########8..|
+ |.. 2##..|
+ ->|.. ##..|<-
+ |.. ##..|
+ |.. ##..|
+ |.. 44..|
+ |..................|
+ ------------------
+
+Char 0xc804 '전'
+ Font: #13 gulim (17)
+ Bitmap: 14 x 14
+ Advance: 18
+ Offset: 2 x -2
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |..2########3 c# ..|
+ |.. ##21 ## ..|
+ |.. 1##2 ## ..|
+ |.. 3##62##### ..|
+ |.. 8##b ## ..|
+ |.. 2#ca#4 ## ..|
+ |.. 1##42##2 ## ..|
+ |..1##6 3##3 ## ..|
+ |..384 263 ## ..|
+ |.. 44 ## ..|
+ |.. ## 99 ..|
+ ->|.. ## ..|<-
+ |.. ##1 ..|
+ |.. 9##########a..|
+ |..................|
+ |..................|
+ ------------------
+
+Char 0xc808 '절'
+ Font: #13 gulim (17)
+ Bitmap: 14 x 14
+ Advance: 18
+ Offset: 2 x -2
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |..2########3 c# ..|
+ |.. ##21 ## ..|
+ |.. 3##4 ## ..|
+ |.. a##c2##### ..|
+ |.. 5#a8#7 ## ..|
+ |.. 3##2 c#6 ## ..|
+ |..4##3 1b#6 ## ..|
+ |..131 1 77 ..|
+ |.. b#########7 ..|
+ |.. ## ..|
+ |.. 1## ..|
+ ->|.. b#########9 ..|<-
+ |.. ## ..|
+ |.. a##########7..|
+ |..................|
+ |..................|
+ ------------------
+
+Char 0xc815 '정'
+ Font: #13 gulim (17)
+ Bitmap: 14 x 15
+ Advance: 18
+ Offset: 2 x -3
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |.. a#######8 #c..|
+ |.. ##1 ##..|
+ |.. 1##3 ##..|
+ |.. 7##9 3#####..|
+ |.. 1####3 ##..|
+ |.. a#63##1 ##..|
+ |.. a#9 5##2 ##..|
+ |..5c7 495 ##..|
+ |.. 22..|
+ |.. 2a######a2 ..|
+ |.. 5##71 17##4..|
+ ->|.. ##2 2#c..|<-
+ |.. ##2 3#c..|
+ |.. 4##72 4a##4..|
+ |.. 18######81 ..|
+ |..................|
+ ------------------
+
+Char 0xc81c '제'
+ Font: #13 gulim (17)
+ Bitmap: 13 x 15
+ Advance: 18
+ Offset: 2 x -3
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |..7######7cc c#...|
+ |.. ## ## ##...|
+ |.. ## ## ##...|
+ |.. ## ## ##...|
+ |.. ##1 ## ##...|
+ |.. 1##b#### ##...|
+ |.. 5##5 ## ##...|
+ |.. a##a ## ##...|
+ |.. 2####1 ## ##...|
+ |.. a#86#8 ## ##...|
+ |..7##1 b#3## ##...|
+ ->|..9#4 3a7## ##...|<-
+ |.. ## ##...|
+ |.. ## ##...|
+ |.. 33...|
+ |..................|
+ ------------------
+
+Char 0xc838 '져'
+ Font: #13 gulim (17)
+ Bitmap: 14 x 15
+ Advance: 18
+ Offset: 2 x -3
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |.. b#######a cc..|
+ |.. ## ##..|
+ |.. ## ##..|
+ |.. ##1 ##..|
+ |.. 1##3 2#####..|
+ |.. 4##6 ##..|
+ |.. 7##a ##..|
+ |.. b###2 ##..|
+ |.. 3#a9#92#####..|
+ |.. a#32##5 ##..|
+ |.. 6#8 7##4 ##..|
+ ->|..4#b a##4 ##..|<-
+ |..231 462 ##..|
+ |.. ##..|
+ |.. 22..|
+ |..................|
+ ------------------
+
+Char 0xc870 '조'
+ Font: #13 gulim (17)
+ Bitmap: 14 x 13
+ Advance: 18
+ Offset: 2 x -1
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |..2###########c ..|
+ |.. ##3 ..|
+ |.. 4##6 ..|
+ |.. c##c ..|
+ |.. 8#98#7 ..|
+ |.. 1b#a b#7 ..|
+ |..3###6 9##92..|
+ |..153 1893..|
+ |.. a9 ..|
+ |.. 1#c ..|
+ |.. 1#c ..|
+ ->|.. 1#c ..|<-
+ |..a############a..|
+ |..................|
+ |..................|
+ |..................|
+ ------------------
+
+Char 0xc880 '좀'
+ Font: #13 gulim (17)
+ Bitmap: 15 x 14
+ Advance: 18
+ Offset: 2 x -2
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |.. a##########a .|
+ |.. 1##6 .|
+ |.. 1####3 .|
+ |.. 28##52##92 .|
+ |.. b##91 6###1 .|
+ |.. ## .|
+ |.. ## .|
+ |..b#############1.|
+ |.. .|
+ |.. 7##########6 .|
+ |.. ##1 1## .|
+ ->|.. ## ## .|<-
+ |.. ##1 ## .|
+ |.. 7##########8 .|
+ |..................|
+ |..................|
+ ------------------
+
+Char 0xc885 '종'
+ Font: #13 gulim (17)
+ Bitmap: 14 x 15
+ Advance: 18
+ Offset: 2 x -3
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |.. b##########a ..|
+ |.. 2##5 ..|
+ |.. 3####4 ..|
+ |.. 15c##2 a#b2 ..|
+ |.. c##5 aa 4##a ..|
+ |.. ## ..|
+ |.. ## ..|
+ |..b############c..|
+ |.. ..|
+ |.. 2a######81 ..|
+ |.. 5##71 19##3 ..|
+ ->|.. ##3 3#c ..|<-
+ |.. b#5 4#c ..|
+ |.. 2##c4115###3 ..|
+ |.. 5######6 ..|
+ |..................|
+ ------------------
+
+Char 0xc8fc '주'
+ Font: #13 gulim (17)
+ Bitmap: 14 x 15
+ Advance: 18
+ Offset: 2 x -3
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |.. a##########a ..|
+ |.. 3##1 ..|
+ |.. b##9 ..|
+ |.. 9#89#8 ..|
+ |.. 2##8 9#b1 ..|
+ |..2c##4 6##b1..|
+ |.. 43 55 ..|
+ |.. ..|
+ |..b#############..|
+ |.. ## ..|
+ |.. ## ..|
+ ->|.. ## ..|<-
+ |.. ## ..|
+ |.. ## ..|
+ |.. 66 ..|
+ |..................|
+ ------------------
+
+Char 0xc900 '준'
+ Font: #13 gulim (17)
+ Bitmap: 16 x 14
+ Advance: 18
+ Offset: 1 x -2
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |. b##########a .|
+ |. 4##3 .|
+ |. 2####2 .|
+ |. 6##44##6 .|
+ |. 7##b1 1a##7 .|
+ |. 671 297 .|
+ |. .|
+ |. .|
+ |.1#############c1.|
+ |. 11 ## .|
+ |. ## ## .|
+ ->|. ## 78 .|<-
+ |. ##1 .|
+ |. 8###########3 .|
+ |..................|
+ |..................|
+ ------------------
+
+Char 0xc90d '줍'
+ Font: #13 gulim (17)
+ Bitmap: 16 x 14
+ Advance: 18
+ Offset: 1 x -2
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |. b##########a .|
+ |. 4##5 .|
+ |. 3####4 .|
+ |. 18##32##b2 .|
+ |. a##8 6###1 .|
+ |. 12 22 .|
+ |. .|
+ |.2##############1.|
+ |. 66 ## 66 .|
+ |. ##1 ## ## .|
+ |. ############ .|
+ ->|. ##1 ## .|<-
+ |. ##1 1## .|
+ |. 8##########8 .|
+ |..................|
+ |..................|
+ ------------------
+
+Char 0xc911 '중'
+ Font: #13 gulim (17)
+ Bitmap: 14 x 14
+ Advance: 18
+ Offset: 2 x -2
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |.. a##########b ..|
+ |.. 3##4 ..|
+ |.. 2####4 ..|
+ |.. 18##33##a1 ..|
+ |.. 9##81 7##b ..|
+ |.. 12 32 ..|
+ |.. ..|
+ |..b############b..|
+ |.. ## ..|
+ |.. 3b######b3 ..|
+ |.. 8##71 28##8 ..|
+ ->|..1##1 1##1..|<-
+ |.. 9##61 17##9 ..|
+ |.. 3c#######4 ..|
+ |..................|
+ |..................|
+ ------------------
+
+Char 0xc998 '즘'
+ Font: #13 gulim (17)
+ Bitmap: 16 x 14
+ Advance: 18
+ Offset: 1 x -2
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |. b##########a .|
+ |. 7##2 .|
+ |. 6####3 .|
+ |. 3##c14##91 .|
+ |. 3###5 7##c .|
+ |. 21 32 .|
+ |. .|
+ |.1##############1.|
+ |. .|
+ |. 7##########6 .|
+ |. ##1 1## .|
+ ->|. ## ## .|<-
+ |. ## ## .|
+ |. 7##########8 .|
+ |..................|
+ |..................|
+ ------------------
+
+Char 0xc9c0 '지'
+ Font: #13 gulim (17)
+ Bitmap: 14 x 15
+ Advance: 18
+ Offset: 2 x -3
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |.. b########8 cc..|
+ |.. ## ##..|
+ |.. ## ##..|
+ |.. 1## ##..|
+ |.. 4##2 ##..|
+ |.. 8##6 ##..|
+ |.. c##b ##..|
+ |.. 6#7a#3 ##..|
+ |.. 1#c 3#b ##..|
+ |.. 1c#3 9#8 ##..|
+ |..1##5 1##8 ##..|
+ ->|..253 297 ##..|<-
+ |.. ##..|
+ |.. ##..|
+ |.. 22..|
+ |..................|
+ ------------------
+
+Char 0xc9c4 '진'
+ Font: #13 gulim (17)
+ Bitmap: 14 x 14
+ Advance: 18
+ Offset: 2 x -2
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |..1#########4 #c..|
+ |.. 6#9 ##..|
+ |.. a#c ##..|
+ |.. 1###4 ##..|
+ |.. 9#9#c ##..|
+ |.. 5#a 8#9 ##..|
+ |.. 4##1 b#8 ##..|
+ |..3##2 b#7 ##..|
+ |.. 11 21 ##..|
+ |.. 22 ##..|
+ |.. ## 98..|
+ ->|.. ## ..|<-
+ |.. ## ..|
+ |.. 8##########a..|
+ |..................|
+ |..................|
+ ------------------
+
+Char 0xc9d1 '집'
+ Font: #13 gulim (17)
+ Bitmap: 14 x 14
+ Advance: 18
+ Offset: 2 x -2
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |.. 9########7 #c..|
+ |.. 4#c ##..|
+ |.. 9##3 ##..|
+ |.. 2###b ##..|
+ |.. c#48#7 ##..|
+ |.. 1##6 a#9 ##..|
+ |..1##4 8#a ##..|
+ |.. ..|
+ |.. a9 a9..|
+ |.. ## ##..|
+ |.. ############..|
+ ->|.. ## ##..|<-
+ |.. ## 1##..|
+ |.. 8##########7..|
+ |..................|
+ |..................|
+ ------------------
+
+Char 0xc9e7 '짧'
+ Font: #13 gulim (17)
+ Bitmap: 16 x 14
+ Advance: 18
+ Offset: 1 x -2
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |.a#########6cb .|
+ |. ## ## 1#c .|
+ |. 1## ## 1#c .|
+ |. 5##3 3##41####4.|
+ |. b##a 7##b2#c .|
+ |.4#9a#4cb9#7#c .|
+ |.c#127##61###c .|
+ |.21 77 2497 .|
+ |. b####7cc bb .|
+ |. 1#### ## .|
+ |. 1######## .|
+ ->|. b####7## ## .|<-
+ |. ## 11## ## .|
+ |. a##########b .|
+ |..................|
+ |..................|
+ ------------------
+
+Char 0xc9f8 '째'
+ Font: #13 gulim (17)
+ Bitmap: 14 x 15
+ Advance: 18
+ Offset: 2 x -3
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |..3#######bbb bb..|
+ |.. cc cc cc ##..|
+ |.. cc cc cc ##..|
+ |.. cc cc cc ##..|
+ |.. ## ## cc ##..|
+ |.. ## 1## #####..|
+ |.. 3## 3##2cc ##..|
+ |.. 6##15##4cc ##..|
+ |.. a##37##7cc ##..|
+ |..1##c6a##acc ##..|
+ |..6#9#abbab#c ##..|
+ ->|..ab158a758#c ##..|<-
+ |.. cc ##..|
+ |.. bb ##..|
+ |.. 44..|
+ |..................|
+ ------------------
+
+Char 0xcabd '쪽'
+ Font: #13 gulim (17)
+ Bitmap: 15 x 15
+ Advance: 18
+ Offset: 1 x -3
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |. 7#####aa#####2..|
+ |. 7#c 2##2 ..|
+ |. 1###5 9##a ..|
+ |. 2##6##36#a8#9 ..|
+ |. b#3 1aaaa 7#8..|
+ |. 88 ..|
+ |. ## ..|
+ |.1#############c..|
+ |. ..|
+ |. ..|
+ |. b##########9 ..|
+ ->|. 1## ..|<-
+ |. ## ..|
+ |. ## ..|
+ |. ## ..|
+ |..................|
+ ------------------
+
+Char 0xcc38 '참'
+ Font: #13 gulim (17)
+ Bitmap: 16 x 14
+ Advance: 18
+ Offset: 1 x -2
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |. a####a c# .|
+ |. ## .|
+ |. ## .|
+ |.5########9 ## .|
+ |. 2##2 ####4.|
+ |. a##b ## .|
+ |. 9#88#c1 ## .|
+ |.5##7 6##7 ## .|
+ |.682 187 55 .|
+ |. 8#########7 .|
+ |. ##1 ##1 .|
+ ->|. 1## ##1 .|<-
+ |. ## ##1 .|
+ |. 9#########9 .|
+ |..................|
+ |..................|
+ ------------------
+
+Char 0xcc3e '찾'
+ Font: #13 gulim (17)
+ Bitmap: 16 x 15
+ Advance: 18
+ Offset: 1 x -3
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |. a####a c# .|
+ |. ## .|
+ |. ## .|
+ |.5########a ####4.|
+ |. 7##4 ## .|
+ |. 6####4 ## .|
+ |.1a#b 2##91 ## .|
+ |.c#5 8#c ## .|
+ |. 11 .|
+ |. b###########7 .|
+ |. ##7 .|
+ ->|. b###6 .|<-
+ |. 6##71c##3 .|
+ |.1c##c2 5###5 .|
+ |. 32 131 .|
+ |..................|
+ ------------------
+
+Char 0xcc98 '처'
+ Font: #13 gulim (17)
+ Bitmap: 14 x 15
+ Advance: 18
+ Offset: 1 x -3
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |. a#####1 cc...|
+ |. ##...|
+ |. ##...|
+ |. a########9 ##...|
+ |. ## ##...|
+ |. ## ##...|
+ |. 3##21#####...|
+ |. 9##7 ##...|
+ |. 3####1 ##...|
+ |. 1##54#8 ##...|
+ |. 2##8 8#6 ##...|
+ ->|.2##a a#5 ##...|<-
+ |. 33 ##...|
+ |. ##...|
+ |. 33...|
+ |..................|
+ ------------------
+
+Char 0xccab '첫'
+ Font: #13 gulim (17)
+ Bitmap: 14 x 15
+ Advance: 18
+ Offset: 2 x -3
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |.. a####a a9..|
+ |.. ##..|
+ |.. ##..|
+ |..1########b ##..|
+ |.. 6##3 3#####..|
+ |.. 3####2 ##..|
+ |.. 5##23##5 ##..|
+ |..9#a1 2##9 ##..|
+ |..22 33 ##..|
+ |.. 11 #c..|
+ |.. 7## ..|
+ ->|.. 5###9 ..|<-
+ |.. 1a#c18##2 ..|
+ |.. 6###5 4###5..|
+ |.. 495 473..|
+ |..................|
+ ------------------
+
+Char 0xccb4 '체'
+ Font: #13 gulim (17)
+ Bitmap: 14 x 15
+ Advance: 18
+ Offset: 2 x -3
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |.. 4####a cc #c..|
+ |.. ## ##..|
+ |.. ## ##..|
+ |..a######a ## ##..|
+ |.. ## ## ##..|
+ |.. ## ## ##..|
+ |.. 1##28#### ##..|
+ |.. 5##6 ## ##..|
+ |.. a##b ## ##..|
+ |.. 4#bb#4 ## ##..|
+ |..1##32##2 ## ##..|
+ ->|..b#6 5#c ## ##..|<-
+ |.. ## ##..|
+ |.. cc ##..|
+ |.. 22..|
+ |..................|
+ ------------------
+
+Char 0xcd08 '초'
+ Font: #13 gulim (17)
+ Bitmap: 15 x 13
+ Advance: 18
+ Offset: 2 x -1
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |.. b#####a .|
+ |.. .|
+ |.. .|
+ |.. a###########a .|
+ |.. 3##4 .|
+ |.. a##c .|
+ |.. 7#86#c1 .|
+ |.. 1a#a 6##4 .|
+ |.. 7##7 55 2c##6 .|
+ |..1981 ## 2b91.|
+ |.. ## .|
+ ->|.. ## .|<-
+ |..c#############1.|
+ |..................|
+ |..................|
+ |..................|
+ ------------------
+
+Char 0xcd5c '최'
+ Font: #13 gulim (17)
+ Bitmap: 14 x 15
+ Advance: 18
+ Offset: 2 x -3
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |.. a####7 cc..|
+ |.. ##..|
+ |.. ##..|
+ |.. b########2 ##..|
+ |.. 1##3 ##..|
+ |.. 8##8 ##..|
+ |.. 5#bb#5 ##..|
+ |.. 3c#c33b##3 ##..|
+ |.. 6a41## 5#8 ##..|
+ |.. 1## ##..|
+ |.. 2##69b####..|
+ ->|..4########c95##..|<-
+ |.. ##..|
+ |.. ##..|
+ |.. 22..|
+ |..................|
+ ------------------
+
+Char 0xcd94 '추'
+ Font: #13 gulim (17)
+ Bitmap: 14 x 15
+ Advance: 18
+ Offset: 2 x -3
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |.. a#####b ..|
+ |.. ..|
+ |.. ..|
+ |.. b##########a ..|
+ |.. 8##6 ..|
+ |.. 6####4 ..|
+ |.. 17##9 1b##5 ..|
+ |..3##81 3b#c ..|
+ |.. ..|
+ |..b############b..|
+ |.. ## ..|
+ ->|.. ## ..|<-
+ |.. ## ..|
+ |.. ## ..|
+ |.. 99 ..|
+ |..................|
+ ------------------
+
+Char 0xcd9c '출'
+ Font: #13 gulim (17)
+ Bitmap: 14 x 14
+ Advance: 18
+ Offset: 2 x -2
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |.. a#####b ..|
+ |.. ..|
+ |.. b##########5 ..|
+ |.. a##7 ..|
+ |.. 4b##9a##92 ..|
+ |..3###71 19##b ..|
+ |.. ..|
+ |..c############c..|
+ |.. ## ..|
+ |.. a##########a ..|
+ |.. 1## ..|
+ ->|.. a##########9 ..|<-
+ |.. ## ..|
+ |.. 9###########1..|
+ |..................|
+ |..................|
+ ------------------
+
+Char 0xcde8 '취'
+ Font: #13 gulim (17)
+ Bitmap: 14 x 15
+ Advance: 18
+ Offset: 2 x -3
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |.. a####7 ##..|
+ |.. 1##..|
+ |.. a########21##..|
+ |.. 1##3 1##..|
+ |.. 9##a 1##..|
+ |.. 9#a9#a 1##..|
+ |.. 6##7 6##71##..|
+ |.. 231 1653##..|
+ |.. 14####..|
+ |..5#############..|
+ |.. 2211## 1##..|
+ ->|.. ## 1##..|<-
+ |.. ## 1##..|
+ |.. ## 1##..|
+ |.. 88 44..|
+ |..................|
+ ------------------
+
+Char 0xce58 '치'
+ Font: #13 gulim (17)
+ Bitmap: 13 x 15
+ Advance: 18
+ Offset: 3 x -3
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |... 1c####b #c..|
+ |... ##..|
+ |... ##..|
+ |...8########b ##..|
+ |... ## ##..|
+ |... 1## ##..|
+ |... 3##2 ##..|
+ |... 9##7 ##..|
+ |... 2####1 ##..|
+ |... c#46#9 ##..|
+ |...1c#6 9#8 ##..|
+ ->|...##6 b#a ##..|<-
+ |...22 11 ##..|
+ |... ##..|
+ |... 33..|
+ |..................|
+ ------------------
+
+Char 0xce6d '칭'
+ Font: #13 gulim (17)
+ Bitmap: 14 x 15
+ Advance: 18
+ Offset: 2 x -3
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |.. a####a 89 ..|
+ |.. ## ..|
+ |.. ## ..|
+ |..5########a ## ..|
+ |.. ##6 ## ..|
+ |.. 8###2 ## ..|
+ |.. 8#93##4 ## ..|
+ |..3##7 2##b1## ..|
+ |..472 671cc ..|
+ |.. 2a######81 ..|
+ |.. 6##6 29##3..|
+ ->|.. ##2 4#c..|<-
+ |.. c#3 4#c..|
+ |.. 3##b4115###3..|
+ |.. 5######5 ..|
+ |..................|
+ ------------------
+
+Char 0xce74 '카'
+ Font: #13 gulim (17)
+ Bitmap: 16 x 15
+ Advance: 18
+ Offset: 1 x -3
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |.5#######7 ## .|
+ |. 1## ## .|
+ |. ## ## .|
+ |. 1## ## .|
+ |. 14#c ## .|
+ |.7#######9 ####7.|
+ |. 8#5 ## .|
+ |. 1##1 ## .|
+ |. a#6 ## .|
+ |. a#8 ## .|
+ |.39###6 ## .|
+ ->|.6#a4 ## .|<-
+ |. ## .|
+ |. ## .|
+ |. 33 .|
+ |..................|
+ ------------------
+
+Char 0xcee4 '커'
+ Font: #13 gulim (17)
+ Bitmap: 13 x 15
+ Advance: 18
+ Offset: 3 x -3
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |...5######7 #c..|
+ |... 1## ##..|
+ |... ## ##..|
+ |... ## ##..|
+ |... 12#b ##..|
+ |...7######99####..|
+ |... 6c6 ##..|
+ |... bc1 ##..|
+ |... 7#7 ##..|
+ |... 6#b ##..|
+ |...39##a ##..|
+ ->|...6#a3 ##..|<-
+ |... ##..|
+ |... ##..|
+ |... 33..|
+ |..................|
+ ------------------
+
+Char 0xceec '컬'
+ Font: #13 gulim (17)
+ Bitmap: 15 x 14
+ Advance: 18
+ Offset: 1 x -2
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |. b#######3 cc ..|
+ |. 7#8 ##1..|
+ |. 13b#6 ##1..|
+ |.2########3 ##1..|
+ |. 233226#bc####1..|
+ |. 4##1 ##1..|
+ |. 15##c1 ##1..|
+ |.2####4 78 ..|
+ |. b#########7 ..|
+ |. 1## ..|
+ |. 1## ..|
+ ->|. b#########8 ..|<-
+ |. ## ..|
+ |. 9##########8..|
+ |..................|
+ |..................|
+ ------------------
+
+Char 0xcef4 '컴'
+ Font: #13 gulim (17)
+ Bitmap: 15 x 14
+ Advance: 18
+ Offset: 1 x -2
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |.1########3 cc ..|
+ |. 7#8 ## ..|
+ |. 13b#6 ## ..|
+ |.2########2 ## ..|
+ |. 233226#bc#### ..|
+ |. 3##1 ## ..|
+ |. 15c#b1 ## ..|
+ |.3###b3 ## ..|
+ |. 11 ..|
+ |. 9#########a ..|
+ |. ##1 c#2..|
+ ->|. ## c#2..|<-
+ |. ##1 ##2..|
+ |. 8#########a ..|
+ |..................|
+ |..................|
+ ------------------
+
+Char 0xcf1c '켜'
+ Font: #13 gulim (17)
+ Bitmap: 13 x 15
+ Advance: 18
+ Offset: 3 x -3
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |...6######7 cc..|
+ |... 1## ##..|
+ |... ## ##..|
+ |... ##c####..|
+ |... 13#b ##..|
+ |...8######9 ##..|
+ |... 6c5 ##..|
+ |... bc1 ##..|
+ |... 8#61#####..|
+ |... 8#9 ##..|
+ |...4c##8 ##..|
+ ->|...5a71 ##..|<-
+ |... ##..|
+ |... ##..|
+ |... 33..|
+ |..................|
+ ------------------
+
+Char 0xcf58 '콘'
+ Font: #13 gulim (17)
+ Bitmap: 16 x 14
+ Advance: 18
+ Offset: 1 x -2
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |. c##########8 .|
+ |. 1## .|
+ |. ## .|
+ |. 2c########### .|
+ |. 1321 cc .|
+ |. 55 ## .|
+ |. ## 43 .|
+ |. ## .|
+ |.1##############1.|
+ |. 11 .|
+ |. ##1 .|
+ ->|. ##1 .|<-
+ |. ##2 .|
+ |. 8##########b .|
+ |..................|
+ |..................|
+ ------------------
+
+Char 0xcf5c '콜'
+ Font: #13 gulim (17)
+ Bitmap: 14 x 14
+ Advance: 18
+ Offset: 2 x -2
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |.. a##########7 ..|
+ |.. 2## ..|
+ |.. 1## ..|
+ |.. a##########c ..|
+ |.. 1321 3#b ..|
+ |.. cc 363 ..|
+ |.. ## ..|
+ |..#############a..|
+ |.. ..|
+ |.. c##########a ..|
+ |.. 1## ..|
+ ->|.. b##########9 ..|<-
+ |.. ## ..|
+ |.. a########### ..|
+ |..................|
+ |..................|
+ ------------------
+
+Char 0xcf64 '콤'
+ Font: #13 gulim (17)
+ Bitmap: 15 x 14
+ Advance: 18
+ Offset: 1 x -2
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |. b##########7 ..|
+ |. 1## ..|
+ |. ## ..|
+ |. 1b########### ..|
+ |. 1321 2#b ..|
+ |. cc 263 ..|
+ |. ## ..|
+ |.1#############a..|
+ |. ..|
+ |. 7##########6 ..|
+ |. ##1 1## ..|
+ ->|. ## ## ..|<-
+ |. ##1 1## ..|
+ |. 7##########8 ..|
+ |..................|
+ |..................|
+ ------------------
+
+Char 0xd06c '크'
+ Font: #13 gulim (17)
+ Bitmap: 15 x 13
+ Advance: 18
+ Offset: 2 x -1
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |.. 1##########8 .|
+ |.. ## .|
+ |.. ## .|
+ |.. ## .|
+ |.. ## .|
+ |.. 235## .|
+ |.. 2##########c .|
+ |.. 3#b .|
+ |.. 4#9 .|
+ |.. 5#8 .|
+ |.. 7#7 .|
+ ->|.. 8#5 .|<-
+ |..3#############2.|
+ |..................|
+ |..................|
+ |..................|
+ ------------------
+
+Char 0xd074 '클'
+ Font: #13 gulim (17)
+ Bitmap: 14 x 14
+ Advance: 18
+ Offset: 2 x -2
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |.. a##########7 ..|
+ |.. 2## ..|
+ |.. 1## ..|
+ |.. b##########c ..|
+ |.. 1321 3#b ..|
+ |.. 5#8 ..|
+ |..b#############..|
+ |.. ..|
+ |.. c##########7 ..|
+ |.. 1## ..|
+ |.. 1## ..|
+ ->|.. c##########8 ..|<-
+ |.. ## ..|
+ |.. b##########c ..|
+ |..................|
+ |..................|
+ ------------------
+
+Char 0xd0a4 '키'
+ Font: #13 gulim (17)
+ Bitmap: 13 x 15
+ Advance: 18
+ Offset: 2 x -3
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |..6#######8 c#...|
+ |.. ##2 ##...|
+ |.. c#2 ##...|
+ |.. ##1 ##...|
+ |.. 13## ##...|
+ |..9#######b ##...|
+ |.. 7#7 ##...|
+ |.. ##2 ##...|
+ |.. 9#7 ##...|
+ |.. 9#a ##...|
+ |..38c##7 ##...|
+ ->|..8#c61 ##...|<-
+ |.. ##...|
+ |.. ##...|
+ |.. 44...|
+ |..................|
+ ------------------
+
+Char 0xd0a8 '킨'
+ Font: #13 gulim (17)
+ Bitmap: 14 x 14
+ Advance: 18
+ Offset: 2 x -2
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |..a#######9 9a ..|
+ |.. ##2 ##1..|
+ |.. ## ##1..|
+ |.. 13569#b ##1..|
+ |..########5 ##1..|
+ |.. 4#9 ##1..|
+ |.. 26##8 ##1..|
+ |..####81 ##1..|
+ |.. ##1..|
+ |.. 55 ##1..|
+ |.. ## c# ..|
+ ->|.. ## ..|<-
+ |.. ##1 ..|
+ |.. 9##########9..|
+ |..................|
+ |..................|
+ ------------------
+
+Char 0xd0b5 '킵'
+ Font: #13 gulim (17)
+ Bitmap: 14 x 14
+ Advance: 18
+ Offset: 1 x -2
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |. a#######8 c#...|
+ |. ##1 ##...|
+ |. 24## ##...|
+ |.1c#######b ##...|
+ |. 12 1##5 ##...|
+ |. 1c#8 ##...|
+ |. 39##7 ##...|
+ |.1####81 66...|
+ |. 77 77...|
+ |. ## ##...|
+ |. ###########...|
+ ->|. ## ##...|<-
+ |. ##1 ##...|
+ |. 7#########8...|
+ |..................|
+ |..................|
+ ------------------
+
+Char 0xd0c0 '타'
+ Font: #13 gulim (17)
+ Bitmap: 16 x 15
+ Advance: 18
+ Offset: 1 x -3
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |. 8######a cc .|
+ |.1##1 ## .|
+ |.1## ## .|
+ |.1## ## .|
+ |.1## ## .|
+ |.1#######5 ####5.|
+ |.1## ## .|
+ |.1## ## .|
+ |.1## ## .|
+ |. ##2 1469## .|
+ |. 5########### .|
+ ->|. ## .|<-
+ |. ## .|
+ |. ## .|
+ |. 33 .|
+ |..................|
+ ------------------
+
+Char 0xd0dc '태'
+ Font: #13 gulim (17)
+ Bitmap: 14 x 15
+ Advance: 18
+ Offset: 2 x -3
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |.. 8#####2bb cc..|
+ |..1##1 ## ##..|
+ |..1## ## ##..|
+ |..1## ## ##..|
+ |..1##111 ## ##..|
+ |..1######3######..|
+ |..1## ## ##..|
+ |..1## ## ##..|
+ |..1## ## ##..|
+ |..1## 148## ##..|
+ |.. 8######## ##..|
+ ->|.. ## ##..|<-
+ |.. ## ##..|
+ |.. cc ##..|
+ |.. 44..|
+ |..................|
+ ------------------
+
+Char 0xd0dd '택'
+ Font: #13 gulim (17)
+ Bitmap: 13 x 15
+ Advance: 18
+ Offset: 2 x -3
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |..7#####3 88 c#...|
+ |..##2 ## ##...|
+ |..##1 ## ##...|
+ |..######4 #####...|
+ |..##3221 ## ##...|
+ |..##1 ## ##...|
+ |..##2 137c## ##...|
+ |..6######### ##...|
+ |.. cc c#...|
+ |.. ...|
+ |.. 9##########9...|
+ ->|.. 1##...|<-
+ |.. ##...|
+ |.. ##...|
+ |.. ##...|
+ |..................|
+ ------------------
+
+Char 0xd130 '터'
+ Font: #13 gulim (17)
+ Bitmap: 12 x 15
+ Advance: 18
+ Offset: 3 x -3
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |...7######2 cc...|
+ |...##3 ##...|
+ |...##1 ##...|
+ |...##1 ##...|
+ |...##1 ##...|
+ |...######ca####...|
+ |...##1 ##...|
+ |...##1 ##...|
+ |...##1 ##...|
+ |...##4 13761 ##...|
+ |...5######c2 ##...|
+ ->|... 22 ##...|<-
+ |... ##...|
+ |... ##...|
+ |... 33...|
+ |..................|
+ ------------------
+
+Char 0xd14c '테'
+ Font: #13 gulim (17)
+ Bitmap: 14 x 15
+ Advance: 18
+ Offset: 2 x -3
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |.. 8####b cc cc..|
+ |..1##1 ## ##..|
+ |..1## ## ##..|
+ |..1## ## ##..|
+ |..1## ## ##..|
+ |..1######### ##..|
+ |..1## ## ##..|
+ |..1## ## ##..|
+ |..1## ## ##..|
+ |..1##11352## ##..|
+ |.. 7#####3## ##..|
+ ->|.. ## ##..|<-
+ |.. ## ##..|
+ |.. cc ##..|
+ |.. 33..|
+ |..................|
+ ------------------
+
+Char 0xd14d '텍'
+ Font: #13 gulim (17)
+ Bitmap: 14 x 15
+ Advance: 18
+ Offset: 2 x -3
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |.. 8####c1cc a9..|
+ |..1##1 ## ##..|
+ |..1## ## ##..|
+ |..1## ## ##..|
+ |..1######### ##..|
+ |..1## ## ##..|
+ |..1## ## ##..|
+ |.. 9#####8## ##..|
+ |.. 77 cc..|
+ |.. ..|
+ |.. 9##########9..|
+ ->|.. 1##..|<-
+ |.. ##..|
+ |.. ##..|
+ |.. ##..|
+ |..................|
+ ------------------
+
+Char 0xd15c '템'
+ Font: #13 gulim (17)
+ Bitmap: 15 x 14
+ Advance: 18
+ Offset: 2 x -2
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |.. 8####c1bb #c .|
+ |..1##1 ## ## .|
+ |..1## ## ## .|
+ |..1## ## ## .|
+ |..1######### ## .|
+ |..1## ## ## .|
+ |..1## 1 ## ## .|
+ |.. 9#####8cc ## .|
+ |.. 11 .|
+ |.. 7##########9 .|
+ |.. ##1 ## .|
+ ->|.. ## ##1.|<-
+ |.. ##1 ## .|
+ |.. 8##########9 .|
+ |..................|
+ |..................|
+ ------------------
+
+Char 0xd1a0 '토'
+ Font: #13 gulim (17)
+ Bitmap: 14 x 13
+ Advance: 18
+ Offset: 2 x -1
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |.. 6##########4 ..|
+ |.. ##3 ..|
+ |.. ##1 ..|
+ |.. ##1 ..|
+ |.. ###########3 ..|
+ |.. ##1 ..|
+ |.. ##1 ..|
+ |.. ##2 ..|
+ |.. 6##########5 ..|
+ |.. ## ..|
+ |.. ## ..|
+ ->|.. ## ..|<-
+ |..b############9..|
+ |..................|
+ |..................|
+ |..................|
+ ------------------
+
+Char 0xd1a8 '톨'
+ Font: #13 gulim (17)
+ Bitmap: 14 x 14
+ Advance: 18
+ Offset: 2 x -2
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |.. 7##########9 ..|
+ |.. ##3 ..|
+ |.. ##1 ..|
+ |.. ###########9 ..|
+ |.. ##2 ..|
+ |.. 6##########c ..|
+ |.. ## ..|
+ |..b############b..|
+ |.. ..|
+ |.. c##########9 ..|
+ |.. 1## ..|
+ ->|.. b##########9 ..|<-
+ |.. ## ..|
+ |.. b##########c ..|
+ |..................|
+ |..................|
+ ------------------
+
+Char 0xd1b1 '톱'
+ Font: #13 gulim (17)
+ Bitmap: 14 x 14
+ Advance: 18
+ Offset: 2 x -2
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |.. 7##########a ..|
+ |.. ##3 ..|
+ |.. ##1 ..|
+ |.. ###########a ..|
+ |.. ##2 ..|
+ |.. 7##########c ..|
+ |.. ## ..|
+ |..b############b..|
+ |.. 22 11 ..|
+ |.. ## ## ..|
+ |.. ## ## ..|
+ ->|.. ############ ..|<-
+ |.. ## ## ..|
+ |.. 8##########8 ..|
+ |..................|
+ |..................|
+ ------------------
+
+Char 0xd1b5 '통'
+ Font: #13 gulim (17)
+ Bitmap: 14 x 15
+ Advance: 18
+ Offset: 2 x -3
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |.. 6##########7 ..|
+ |.. ##3 ..|
+ |.. ##2 ..|
+ |.. ###########7 ..|
+ |.. ##2 ..|
+ |.. 7##########a ..|
+ |.. ## ..|
+ |.. ## ..|
+ |..b############b..|
+ |.. ..|
+ |.. 5#######c3 ..|
+ ->|.. 9#c3 4##7 ..|<-
+ |.. ##2 2## ..|
+ |.. 6##83 38##6 ..|
+ |.. 28######92 ..|
+ |..................|
+ ------------------
+
+Char 0xd2b8 '트'
+ Font: #13 gulim (17)
+ Bitmap: 14 x 13
+ Advance: 18
+ Offset: 2 x -1
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |.. 6##########1 ..|
+ |.. ##2 ..|
+ |.. ##1 ..|
+ |.. ##1 ..|
+ |.. ##########c ..|
+ |.. ##1 ..|
+ |.. ##2 ..|
+ |.. 7##########2 ..|
+ |.. ..|
+ |.. ..|
+ |.. ..|
+ ->|.. ..|<-
+ |..b############2..|
+ |..................|
+ |..................|
+ |..................|
+ ------------------
+
+Char 0xd2b9 '특'
+ Font: #13 gulim (17)
+ Bitmap: 16 x 15
+ Advance: 18
+ Offset: 1 x -3
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |. 5##########8 .|
+ |. c#4 .|
+ |. c#2 .|
+ |. c##########8 .|
+ |. c#2 .|
+ |. 5##########9 .|
+ |. .|
+ |. .|
+ |.1##############1.|
+ |. .|
+ |. b##########9 .|
+ ->|. 1## .|<-
+ |. ## .|
+ |. ## .|
+ |. 89 .|
+ |..................|
+ ------------------
+
+Char 0xd2f0 '티'
+ Font: #13 gulim (17)
+ Bitmap: 12 x 15
+ Advance: 18
+ Offset: 3 x -3
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |...6######c cc...|
+ |...##2 ##...|
+ |...##1 ##...|
+ |...##1 ##...|
+ |...##1 ##...|
+ |...#######a ##...|
+ |...##1 ##...|
+ |...##1 ##...|
+ |...##1 ##...|
+ |...##3 1258b##...|
+ |...4###########...|
+ ->|... ##...|<-
+ |... ##...|
+ |... ##...|
+ |... 33...|
+ |..................|
+ ------------------
+
+Char 0xd305 '팅'
+ Font: #13 gulim (17)
+ Bitmap: 13 x 15
+ Advance: 18
+ Offset: 2 x -3
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |..6#######b aa...|
+ |..##2 ##...|
+ |..##1 ##...|
+ |..########8 ##...|
+ |..##1 ##...|
+ |..##1 36##...|
+ |..7############...|
+ |.. 11 ##...|
+ |.. cc...|
+ |.. 2a######91 ...|
+ |.. 5##71 18##4...|
+ ->|.. c#3 2##...|<-
+ |.. b#5 3##...|
+ |.. 2###5115c##3...|
+ |.. 5######6 ...|
+ |..................|
+ ------------------
+
+Char 0xd30c '파'
+ Font: #13 gulim (17)
+ Bitmap: 16 x 15
+ Advance: 18
+ Offset: 1 x -3
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |.3########b cc .|
+ |. ## .|
+ |. 55 21 ## .|
+ |. cc 4c7 ## .|
+ |. cc 6c5 ## .|
+ |. b#1 8c3 ## .|
+ |. 9#3 ac2 ####7.|
+ |. 8#4 bc ## .|
+ |. 6#6 cc ## .|
+ |. 5#82##469## .|
+ |.6############ .|
+ ->|. 8a1 ## .|<-
+ |. ## .|
+ |. ## .|
+ |. 44 .|
+ |..................|
+ ------------------
+
+Char 0xd310 '판'
+ Font: #13 gulim (17)
+ Bitmap: 17 x 14
+ Advance: 18
+ Offset: 1 x -2
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |.2########a 98 |
+ |. ## |
+ |. 99 89 ## |
+ |. c# c#1 ## |
+ |. bc1 c# ####4|
+ |. bc1 ## ## |
+ |. ac2 cc 2## |
+ |.7############# |
+ |. 11 ## |
+ |. 55 ## |
+ |. ## cc |
+ ->|. ## |<-
+ |. ##1 |
+ |. 8##########b |
+ |..................|
+ |..................|
+ ------------------
+
+Char 0xd328 '패'
+ Font: #13 gulim (17)
+ Bitmap: 14 x 15
+ Advance: 18
+ Offset: 2 x -3
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |..4######a cc #c..|
+ |.. ## ##..|
+ |.. 44 55 ## ##..|
+ |.. 2ca cc ## ##..|
+ |.. 1ca cc ## ##..|
+ |.. cb cc #####..|
+ |.. cc cc ## ##..|
+ |.. cc cc ## ##..|
+ |.. cc1cb ## ##..|
+ |.. bc2c#47## ##..|
+ |..2########## ##..|
+ ->|.. 1 ## ##..|<-
+ |.. ## ##..|
+ |.. cc ##..|
+ |.. 44..|
+ |..................|
+ ------------------
+
+Char 0xd38c '펌'
+ Font: #13 gulim (17)
+ Bitmap: 14 x 14
+ Advance: 18
+ Offset: 2 x -2
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |.. b#######9 #c..|
+ |.. ##..|
+ |.. 55 8#4 ##..|
+ |.. b#1 9#5#####..|
+ |.. a#3 a#2 ##..|
+ |.. 8#4 c#1 ##..|
+ |.. 7#95##ca4 ##..|
+ |..3######71 ##..|
+ |.. ..|
+ |.. 7##########7..|
+ |.. ##1 1##..|
+ ->|.. ##1 ##..|<-
+ |.. ##1 1##..|
+ |.. 7##########9..|
+ |..................|
+ |..................|
+ ------------------
+
+Char 0xd398 '페'
+ Font: #13 gulim (17)
+ Bitmap: 14 x 15
+ Advance: 18
+ Offset: 2 x -3
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |.. c#####a bb #c..|
+ |.. ## ##..|
+ |.. 2a7 89 ## ##..|
+ |.. 2b9 bb ## ##..|
+ |.. 1ba bb ## ##..|
+ |.. ba b##### ##..|
+ |.. bb bb ## ##..|
+ |.. bb ba ## ##..|
+ |.. bb1b9 ## ##..|
+ |.. bc4##61## ##..|
+ |..4######91## ##..|
+ ->|.. ## ##..|<-
+ |.. ## ##..|
+ |.. cc ##..|
+ |.. 33..|
+ |..................|
+ ------------------
+
+Char 0xd3b8 '편'
+ Font: #13 gulim (17)
+ Bitmap: 15 x 14
+ Advance: 18
+ Offset: 1 x -2
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |. 7#######a aa ..|
+ |. 11 11 ## ..|
+ |. 1ca bc6#### ..|
+ |. cb cc ## ..|
+ |. cc cc ## ..|
+ |. cc #c ## ..|
+ |. cc 1#c7#### ..|
+ |.2c########7 ## ..|
+ |. 35321 ## ..|
+ |. 44 ## ..|
+ |. ## cc ..|
+ ->|. ## ..|<-
+ |. ##1 ..|
+ |. 9##########4..|
+ |..................|
+ |..................|
+ ------------------
+
+Char 0xd3ec '포'
+ Font: #13 gulim (17)
+ Bitmap: 14 x 13
+ Advance: 18
+ Offset: 2 x -1
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |..1###########a ..|
+ |.. ..|
+ |.. 21 11 ..|
+ |.. 5#8 bb ..|
+ |.. 4#9 bb ..|
+ |.. 3#a bb ..|
+ |.. 3#b 1ba ..|
+ |.. 2#c 2b9 ..|
+ |.. c##########a ..|
+ |.. ## ..|
+ |.. ## ..|
+ ->|.. ## ..|<-
+ |..a############1..|
+ |..................|
+ |..................|
+ |..................|
+ ------------------
+
+Char 0xd45c '표'
+ Font: #13 gulim (17)
+ Bitmap: 14 x 13
+ Advance: 18
+ Offset: 2 x -1
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |..1###########a ..|
+ |.. ..|
+ |.. 3b8 ac1 ..|
+ |.. 2#a c# ..|
+ |.. 1#b cc ..|
+ |.. ## cb ..|
+ |..8###########b ..|
+ |.. ..|
+ |.. bb bb ..|
+ |.. ## ## ..|
+ |.. ## ## ..|
+ ->|.. ## ## ..|<-
+ |..a############9..|
+ |..................|
+ |..................|
+ |..................|
+ ------------------
+
+Char 0xd4e8 '퓨'
+ Font: #13 gulim (17)
+ Bitmap: 14 x 14
+ Advance: 18
+ Offset: 2 x -2
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |..4###########a ..|
+ |.. ..|
+ |.. 593 78 ..|
+ |.. 6#7 ## ..|
+ |.. 4#9 1#c ..|
+ |.. 3#b 3#b ..|
+ |..5###########a ..|
+ |.. ..|
+ |..b############9..|
+ |.. ## ## ..|
+ |.. ## ## ..|
+ ->|.. ## ## ..|<-
+ |.. ## ## ..|
+ |.. ## ## ..|
+ |..................|
+ |..................|
+ ------------------
+
+Char 0xd504 '프'
+ Font: #13 gulim (17)
+ Bitmap: 14 x 13
+ Advance: 18
+ Offset: 2 x -1
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |..4###########a ..|
+ |.. ..|
+ |.. 187 b#1 ..|
+ |.. 2#b c#1 ..|
+ |.. 1#c ## ..|
+ |.. ## ## ..|
+ |.. ##1 1#c ..|
+ |.. b#3 1#b ..|
+ |..6###########b ..|
+ |.. ..|
+ |.. ..|
+ ->|.. ..|<-
+ |..b############b..|
+ |..................|
+ |..................|
+ |..................|
+ ------------------
+
+Char 0xd508 '픈'
+ Font: #13 gulim (17)
+ Bitmap: 15 x 14
+ Advance: 18
+ Offset: 1 x -2
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |. b###########c ..|
+ |. ..|
+ |. 582 98 ..|
+ |. 7#6 2#a ..|
+ |. 6#7 3#9 ..|
+ |. 4#9 5#8 ..|
+ |. 7###########a ..|
+ |. ..|
+ |.4#############6..|
+ |. 11 ..|
+ |. ## ..|
+ ->|. ## ..|<-
+ |. ## ..|
+ |. 8##########9 ..|
+ |..................|
+ |..................|
+ ------------------
+
+Char 0xd50c '플'
+ Font: #13 gulim (17)
+ Bitmap: 15 x 14
+ Advance: 18
+ Offset: 1 x -2
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |. b###########c ..|
+ |. 231 352 ..|
+ |. 7#5 8c4 ..|
+ |. 5c7 9c2 ..|
+ |. 7###########a ..|
+ |. ..|
+ |. ..|
+ |.3#############6..|
+ |. ..|
+ |. c#########a ..|
+ |. ## ..|
+ ->|. b#########a ..|<-
+ |. ## ..|
+ |. a##########a ..|
+ |..................|
+ |..................|
+ ------------------
+
+Char 0xd53c '피'
+ Font: #13 gulim (17)
+ Bitmap: 13 x 15
+ Advance: 18
+ Offset: 2 x -3
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |..1#########1cc...|
+ |.. ##...|
+ |.. 65 66 ##...|
+ |.. 2ca cc ##...|
+ |.. 1cb cc ##...|
+ |.. cc cc ##...|
+ |.. cc cc ##...|
+ |.. cc cc ##...|
+ |.. cc 1cb ##...|
+ |.. c#35##7b##...|
+ |..5############...|
+ ->|.. ##...|<-
+ |.. ##...|
+ |.. ##...|
+ |.. 33...|
+ |..................|
+ ------------------
+
+Char 0xd53d '픽'
+ Font: #13 gulim (17)
+ Bitmap: 14 x 15
+ Advance: 18
+ Offset: 2 x -3
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |..3########b cc..|
+ |.. ##..|
+ |.. 4b7 3b7 ##..|
+ |.. 3c8 5c7 ##..|
+ |.. 2ca 6c6 ##..|
+ |.. cb 7c4 2##..|
+ |..4c############..|
+ |..7#######82 ##..|
+ |.. 66..|
+ |.. ..|
+ |.. 9##########9..|
+ ->|.. 1##..|<-
+ |.. ##..|
+ |.. ##..|
+ |.. ##..|
+ |..................|
+ ------------------
+
+Char 0xd544 '필'
+ Font: #13 gulim (17)
+ Bitmap: 14 x 14
+ Advance: 18
+ Offset: 2 x -2
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |..3########a cc..|
+ |.. 33 231 ##..|
+ |.. bc 7#5 ##..|
+ |.. ac2 9#4 ##..|
+ |.. 8c3 a#2 ##..|
+ |..39############..|
+ |..9#######a334##..|
+ |..13321 ##..|
+ |.. b##########7..|
+ |.. 1##..|
+ |.. 1##..|
+ ->|.. b##########8..|<-
+ |.. ## ..|
+ |.. a##########6..|
+ |..................|
+ |..................|
+ ------------------
+
+Char 0xd558 '하'
+ Font: #13 gulim (17)
+ Bitmap: 16 x 15
+ Advance: 18
+ Offset: 1 x -3
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |. 9####a #c .|
+ |. ## .|
+ |. ## .|
+ |.b#########1## .|
+ |. ## .|
+ |. 3#####3 ## .|
+ |. 4##3 4##4 ####6.|
+ |. c#3 4#b ## .|
+ |. ## 1## ## .|
+ |. c#3 5#b ## .|
+ |. 4##218##3 ## .|
+ ->|. 2c###c2 ## .|<-
+ |. ## .|
+ |. ## .|
+ |. 33 .|
+ |..................|
+ ------------------
+
+Char 0xd55c '한'
+ Font: #13 gulim (17)
+ Bitmap: 16 x 14
+ Advance: 18
+ Offset: 1 x -2
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |. a####b aa .|
+ |. ## .|
+ |.a#########3## .|
+ |. ## .|
+ |. 3c###a2 ####4.|
+ |. 7##415##5 ## .|
+ |. ##1 3#c ## .|
+ |. ##2 2## ## .|
+ |. 6##515##6 ## .|
+ |. 3b###b3 ## .|
+ |. ## cc .|
+ ->|. ## .|<-
+ |. ##1 .|
+ |. 7##########b .|
+ |..................|
+ |..................|
+ ------------------
+
+Char 0xd560 '할'
+ Font: #13 gulim (17)
+ Bitmap: 16 x 14
+ Advance: 18
+ Offset: 1 x -2
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |. a####b ## .|
+ |. ## .|
+ |.a#########1## .|
+ |. ####4.|
+ |. 2#####b2 ## .|
+ |. c#3 4#c ## .|
+ |. c#5 4#c ## .|
+ |. 1b####b2 ## .|
+ |. 22 .|
+ |. b#########b .|
+ |. ## .|
+ ->|. a#########b .|<-
+ |. 1## .|
+ |. a##########8 .|
+ |..................|
+ |..................|
+ ------------------
+
+Char 0xd568 '함'
+ Font: #13 gulim (17)
+ Bitmap: 16 x 14
+ Advance: 18
+ Offset: 1 x -2
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |. a####b c# .|
+ |. ## .|
+ |.b########c ## .|
+ |. ####5.|
+ |. 1a####91 ## .|
+ |. b#6 7#a ## .|
+ |. ## ## ## .|
+ |. 8#c22b#8 ## .|
+ |. 5####6 77 .|
+ |. 7##########8 .|
+ |. ##1 ## .|
+ ->|. ## ## .|<-
+ |. ##1 ## .|
+ |. 8##########8 .|
+ |..................|
+ |..................|
+ ------------------
+
+Char 0xd569 '합'
+ Font: #13 gulim (17)
+ Bitmap: 16 x 14
+ Advance: 18
+ Offset: 1 x -2
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |. a####b c# .|
+ |. ## .|
+ |.b########c ## .|
+ |. ####5.|
+ |. 1a####91 ## .|
+ |. b#6 7#a ## .|
+ |. ## ## ## .|
+ |. 8#c22b#8 ## .|
+ |. 5####6 11 .|
+ |. ## c# .|
+ |. ############ .|
+ ->|. ## ## .|<-
+ |. ##1 ## .|
+ |. 8##########8 .|
+ |..................|
+ |..................|
+ ------------------
+
+Char 0xd56d '항'
+ Font: #13 gulim (17)
+ Bitmap: 16 x 15
+ Advance: 18
+ Offset: 1 x -3
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |. a####b ## .|
+ |. ## .|
+ |.b########c1## .|
+ |. ####4.|
+ |. 1a####91 ## .|
+ |. b#6 7#a ## .|
+ |. ## ## ## .|
+ |. 8#c22b#8 ## .|
+ |. 5####6 ## .|
+ |. .|
+ |. 5########4 .|
+ ->|. 9##3 4##9 .|<-
+ |. ##2 1## .|
+ |. 6##83 38##8 .|
+ |. 28######a2 .|
+ |..................|
+ ------------------
+
+Char 0xd574 '해'
+ Font: #13 gulim (17)
+ Bitmap: 13 x 15
+ Advance: 18
+ Offset: 2 x -3
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |.. a###a bb cc...|
+ |.. ## ##...|
+ |.. ## ##...|
+ |..b######a## ##...|
+ |.. ## ##...|
+ |.. 3####5 ## ##...|
+ |..3##11b#5#####...|
+ |..9#4 2#c## ##...|
+ |..b#2 #### ##...|
+ |..9#5 3#b## ##...|
+ |..2##43##4## ##...|
+ ->|.. 3####4 ## ##...|<-
+ |.. ## ##...|
+ |.. cc ##...|
+ |.. 33...|
+ |..................|
+ ------------------
+
+Char 0xd588 '했'
+ Font: #13 gulim (17)
+ Bitmap: 15 x 14
+ Advance: 18
+ Offset: 1 x -2
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |. a###9 bb ## ..|
+ |. ## ## ..|
+ |.4#######3## ## ..|
+ |. 1 ## ## ..|
+ |. 1b####2 ##### ..|
+ |. a#5 4#b ## ## ..|
+ |. c# ## ## ## ..|
+ |. 8#929#9 ## ## ..|
+ |. 7###8 bb cc ..|
+ |. 462 56 ..|
+ |. b#7 c#5 ..|
+ ->|. 4### 5##b ..|<-
+ |. 3##9#c13##a#9 ..|
+ |.3##3 7####2 8#c..|
+ |..................|
+ |..................|
+ ------------------
+
+Char 0xd589 '행'
+ Font: #13 gulim (17)
+ Bitmap: 14 x 15
+ Advance: 18
+ Offset: 2 x -3
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |.. 3####5 aa cc..|
+ |.. ##1##..|
+ |..5#######3##1##..|
+ |.. ##1##..|
+ |.. 8###8 #####..|
+ |.. 9#6 8#9 ##1##..|
+ |.. ## ## ##1##..|
+ |.. a#6 7#a ##1##..|
+ |.. 9###9 cc1#c..|
+ |.. 11..|
+ |.. 5########4 ..|
+ ->|.. 9##3 3##9..|<-
+ |.. ##2 1##..|
+ |.. 6##83 38##8..|
+ |.. 28######a3 ..|
+ |..................|
+ ------------------
+
+Char 0xd5a5 '향'
+ Font: #13 gulim (17)
+ Bitmap: 16 x 15
+ Advance: 18
+ Offset: 1 x -3
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |. a####b cc .|
+ |. ## .|
+ |.b########c ## .|
+ |. ####5.|
+ |. 1a####91 ## .|
+ |. b#6 7#a ## .|
+ |. ## ## ####5.|
+ |. 8#c22b#8 ## .|
+ |. 5####6 ## .|
+ |. 55 .|
+ |. 5########4 .|
+ ->|. 9##3 3c#9 .|<-
+ |. ##2 ##1 .|
+ |. 6##83 27##8 .|
+ |. 28######a3 .|
+ |..................|
+ ------------------
+
+Char 0xd604 '현'
+ Font: #13 gulim (17)
+ Bitmap: 14 x 14
+ Advance: 18
+ Offset: 2 x -2
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |.. 7####a bb..|
+ |.. ##..|
+ |..b########b ##..|
+ |.. ##..|
+ |.. 3c###a24####..|
+ |.. 7##415##5 ##..|
+ |.. ##1 2#c ##..|
+ |.. ##2 2## ##..|
+ |.. 6##515##b####..|
+ |.. 2b###b3 ##..|
+ |.. cc #c..|
+ ->|.. ## ..|<-
+ |.. ##1 ..|
+ |.. 8##########b..|
+ |..................|
+ |..................|
+ ------------------
+
+Char 0xd615 '형'
+ Font: #13 gulim (17)
+ Bitmap: 14 x 15
+ Advance: 18
+ Offset: 2 x -3
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |.. 4####6 ##..|
+ |.. ##..|
+ |..b########b ##..|
+ |.. 4####..|
+ |.. 1a####8 ##..|
+ |.. a#7 8#a ##..|
+ |.. ## ## ##..|
+ |.. 9#9 9#94####..|
+ |.. 7####8 ##..|
+ |.. 54..|
+ |.. 6#######c3 ..|
+ ->|.. a#c2 4##7..|<-
+ |.. ##1 2##..|
+ |.. 7##82 38##6..|
+ |.. 29######92 ..|
+ |..................|
+ ------------------
+
+Char 0xd638 '호'
+ Font: #13 gulim (17)
+ Bitmap: 14 x 13
+ Advance: 18
+ Offset: 2 x -1
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |.. 4######2 ..|
+ |.. ..|
+ |.. ..|
+ |..b############4..|
+ |.. ..|
+ |.. 4########4 ..|
+ |.. 8#c3 3##8 ..|
+ |.. ## ## ..|
+ |.. 9#b2 3c#9 ..|
+ |.. 5########6 ..|
+ |.. ## ..|
+ ->|.. ## ..|<-
+ |..b############b..|
+ |..................|
+ |..................|
+ |..................|
+ ------------------
+
+Char 0xd63c '혼'
+ Font: #13 gulim (17)
+ Bitmap: 14 x 14
+ Advance: 18
+ Offset: 2 x -2
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |.. a#####4 ..|
+ |.. ..|
+ |..5###########a ..|
+ |.. ..|
+ |.. 1a########81 ..|
+ |.. c#6 6#b ..|
+ |.. a#92 29#b ..|
+ |.. 6########7 ..|
+ |.. ## ..|
+ |..b############b..|
+ |.. 77 ..|
+ ->|.. ##1 ..|<-
+ |.. c#2 ..|
+ |.. 7##########c ..|
+ |..................|
+ |..................|
+ ------------------
+
+Char 0xd648 '홈'
+ Font: #13 gulim (17)
+ Bitmap: 14 x 14
+ Advance: 18
+ Offset: 2 x -2
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |.. a#####4 ..|
+ |.. ..|
+ |..5###########a ..|
+ |.. 19########7 ..|
+ |.. c#71 18#b ..|
+ |.. c#61 17#c ..|
+ |.. 19########91 ..|
+ |.. ## ..|
+ |..b############b..|
+ |.. ..|
+ |.. 8##########9 ..|
+ ->|.. ##1 1## ..|<-
+ |.. ##1 ## ..|
+ |.. 8##########8 ..|
+ |..................|
+ |..................|
+ ------------------
+
+Char 0xd654 '화'
+ Font: #13 gulim (17)
+ Bitmap: 17 x 15
+ Advance: 18
+ Offset: 1 x -3
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |. a####8 #c |
+ |. ## |
+ |. ## |
+ |.2#########a ## |
+ |. ## |
+ |. 8#####a1 ## |
+ |. 9#7 7#b ####4|
+ |. c# ## ## |
+ |. 8#c3 2b#9 ## |
+ |. 5#####7 ## |
+ |. ## 25## |
+ ->|.8############# |<-
+ |. ## |
+ |. ## |
+ |. 33 |
+ |..................|
+ ------------------
+
+Char 0xd655 '확'
+ Font: #13 gulim (17)
+ Bitmap: 17 x 15
+ Advance: 18
+ Offset: 0 x -3
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ | 7####9 #c .|
+ | 1## .|
+ | a########c2## .|
+ | 1## .|
+ | 3#######31####3.|
+ | ##3 5##1## .|
+ | 6#######41## .|
+ | ##12469## .|
+ |3############# .|
+ | 66 .|
+ | 4##########7 .|
+ ->| ## .|<-
+ | ## .|
+ | ## .|
+ | 66 .|
+ |..................|
+ ------------------
+
+Char 0xd658 '환'
+ Font: #13 gulim (17)
+ Bitmap: 17 x 14
+ Advance: 18
+ Offset: 0 x -2
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ | 7####9 c# .|
+ | ## .|
+ | a########c1## .|
+ | ## .|
+ | 2b#####b2 ## .|
+ | c#5 5#c ####3.|
+ | a#81 2c#8 ## .|
+ | 5c##c82 ## .|
+ | ######### .|
+ |3########8 ## .|
+ | 77 88 .|
+ ->| ## .|<-
+ | ##1 .|
+ | 8##########b .|
+ |..................|
+ |..................|
+ ------------------
+
+Char 0xd65c '활'
+ Font: #13 gulim (17)
+ Bitmap: 17 x 14
+ Advance: 18
+ Offset: 0 x -2
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ | 7####9 cc .|
+ | ## .|
+ | a########c1## .|
+ | 18#####81 ## .|
+ | c#61 2b#c ####4.|
+ | a###c###8 ## .|
+ | 27##841 ## .|
+ |3############# .|
+ | 121 88 .|
+ | c#########8 .|
+ | ## .|
+ ->| a#########b .|<-
+ | ## .|
+ | a##########6 .|
+ |..................|
+ |..................|
+ ------------------
+
+Char 0xd669 '황'
+ Font: #13 gulim (17)
+ Bitmap: 17 x 15
+ Advance: 18
+ Offset: 0 x -3
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ | 7####9 #c .|
+ | ## .|
+ | a########c2## .|
+ | ## .|
+ | 3#######3 ####3.|
+ | ##3 5## ## .|
+ | 6#######4 ## .|
+ | ##12469## .|
+ |3############# .|
+ | 88 .|
+ | 5########4 .|
+ ->| 9#c3 4##9 .|<-
+ | ##2 1## .|
+ | 6##72 27##8 .|
+ | 29######a3 .|
+ |..................|
+ ------------------
+
+Char 0xd68c '회'
+ Font: #13 gulim (17)
+ Bitmap: 14 x 15
+ Advance: 18
+ Offset: 2 x -3
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |.. 9####a cc..|
+ |.. ##..|
+ |.. 3#########6##..|
+ |.. ##..|
+ |.. 6#####6 ##..|
+ |.. 9#91 2a#9 ##..|
+ |.. ## ## ##..|
+ |.. b#7 6#9 ##..|
+ |.. 2c#####8 ##..|
+ |.. ## ##..|
+ |.. ## 137##..|
+ ->|..3#############..|<-
+ |.. ##..|
+ |.. ##..|
+ |.. 33..|
+ |..................|
+ ------------------
+
+Char 0xd6a8 '효'
+ Font: #13 gulim (17)
+ Bitmap: 14 x 13
+ Advance: 18
+ Offset: 2 x -1
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |.. a#####a ..|
+ |.. ..|
+ |.. ..|
+ |..1############2..|
+ |.. 3b######a2 ..|
+ |.. 8##51 15##8 ..|
+ |.. ## ## ..|
+ |.. 8#c3 2c#8 ..|
+ |.. 5########5 ..|
+ |.. 22 22 ..|
+ |.. ## ## ..|
+ ->|.. ## ## ..|<-
+ |..b############b..|
+ |..................|
+ |..................|
+ |..................|
+ ------------------
+
+Char 0xd6c4 '후'
+ Font: #13 gulim (17)
+ Bitmap: 15 x 15
+ Advance: 18
+ Offset: 2 x -3
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |.. a#####b .|
+ |.. .|
+ |..9############1 .|
+ |.. .|
+ |.. 2a#####92 .|
+ |.. 7##72126##7 .|
+ |.. ##3 ##1 .|
+ |.. 7##82 15##9 .|
+ |.. 2a#####b3 .|
+ |.. .|
+ |..b#############1.|
+ ->|.. ## .|<-
+ |.. ## .|
+ |.. ## .|
+ |.. 99 .|
+ |..................|
+ ------------------
+
+Char 0xd734 '휴'
+ Font: #13 gulim (17)
+ Bitmap: 15 x 15
+ Advance: 18
+ Offset: 1 x -3
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |. 6#####a ..|
+ |. ..|
+ |. 7###########c ..|
+ |. ..|
+ |. 6#######6 ..|
+ |. c#a41 14b#b ..|
+ |. ##6 6## ..|
+ |. 2a#######a2 ..|
+ |. ..|
+ |.9#############b..|
+ |. ## ## ..|
+ ->|. ## ## ..|<-
+ |. ## ## ..|
+ |. ## ## ..|
+ |. 22 44 ..|
+ |..................|
+ ------------------
+
+Char 0xd788 '히'
+ Font: #13 gulim (17)
+ Bitmap: 14 x 15
+ Advance: 18
+ Offset: 2 x -3
+ __________________
+ |..................|
+ |..................|
+ |..................|
+ |.. 9####a #c..|
+ |.. ##..|
+ |.. ##..|
+ |..1#########b ##..|
+ |.. ##..|
+ |.. 1a####a2 ##..|
+ |.. 2##6 6##3 ##..|
+ |.. b#4 5#b ##..|
+ |.. ##1 2## ##..|
+ |.. b#5 6#b ##..|
+ |.. 3##6 18##2 ##..|
+ ->|.. 19####91 ##..|<-
+ |.. ##..|
+ |.. ##..|
+ |.. 55..|
+ |..................|
+ ------------------
+
+Char 0xfbfd 'ﯽ'
+ Font: #11 DejaVuSans-Bold (14)
+ Bitmap: 14 x 6
+ Advance: 14
+ Offset: 1 x -2
+ ______________
+ |...............|
+ |...............|
+ |...............|
+ |...............|
+ |...............|
+ |...............|
+ |...............|
+ |...............|
+ |...............|
+ |...............|
+ |...............|
+ |. 4c##6 |
+ |.453 ##c##4 |
+ |.##5 b#93##3|
+ ->|.##8 27##25#4|<-
+ |.9########9 |
+ |. 59aaa862 |
+ |...............|
+ |...............|
+ --------------
+
+Char 0xfe82 'ﺂ'
+ Font: #1 KacstBook (12)
+ Bitmap: 4 x 8
+ Advance: 3
+ Offset: 0 x 2
+ ___
+ |....|
+ |....|
+ |....|
+ |....|
+ |....|
+ |3661|
+ |12 |
+ |33 |
+ |14 |
+ | 5 |
+ | 5 |
+ | 7 |
+ | 6a |
+ |....|
+ ->|....|<-
+ |....|
+ |....|
+ |....|
+ |....|
+ ---
+
+Char 0xfe84 'ﺄ'
+ Font: #1 KacstBook (12)
+ Bitmap: 3 x 9
+ Advance: 3
+ Offset: 0 x 2
+ ___
+ |...|
+ |...|
+ |...|
+ |...|
+ |12 |
+ |65 |
+ |32 |
+ |33 |
+ |24 |
+ | 5 |
+ | 5 |
+ | 7 |
+ | 68|
+ |...|
+ ->|...|<-
+ |...|
+ |...|
+ |...|
+ |...|
+ ---
+
+Char 0xfe88 'ﺈ'
+ Font: #1 KacstBook (12)
+ Bitmap: 3 x 9
+ Advance: 3
+ Offset: 0 x -1
+ ___
+ |...|
+ |...|
+ |...|
+ |...|
+ |...|
+ |...|
+ |...|
+ |33 |
+ |14 |
+ | 5 |
+ | 5 |
+ | 7 |
+ | 68|
+ | |
+ ->| 6 |<-
+ | 83|
+ |...|
+ |...|
+ |...|
+ ---
+
+Char 0xfe8b 'ﺋ'
+ Font: #1 KacstBook (12)
+ Bitmap: 2 x 6
+ Advance: 2
+ Offset: 0 x 2
+ __
+ |..|
+ |..|
+ |..|
+ |..|
+ |..|
+ |..|
+ |..|
+ |13|
+ |65|
+ |21|
+ | 5|
+ | 7|
+ |a4|
+ |..|
+ ->|..|<-
+ |..|
+ |..|
+ |..|
+ |..|
+ --
+
+Char 0xfe8e 'ﺎ'
+ Font: #1 KacstBook (12)
+ Bitmap: 3 x 6
+ Advance: 3
+ Offset: 0 x 2
+ ___
+ |...|
+ |...|
+ |...|
+ |...|
+ |...|
+ |...|
+ |...|
+ |33 |
+ |14 |
+ | 5 |
+ | 5 |
+ | 7 |
+ | 68|
+ |...|
+ ->|...|<-
+ |...|
+ |...|
+ |...|
+ |...|
+ ---
+
+Char 0xfe90 'ﺐ'
+ Font: #1 KacstBook (12)
+ Bitmap: 9 x 6
+ Advance: 9
+ Offset: 0 x -1
+ _________
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |3 |
+ |62 3 |
+ |2ba778987|
+ | 2431 |
+ ->| 2 |<-
+ | 8 |
+ |.........|
+ |.........|
+ |.........|
+ ---------
+
+Char 0xfe91 'ﺑ'
+ Font: #1 KacstBook (12)
+ Bitmap: 2 x 5
+ Advance: 2
+ Offset: 0 x 0
+ __
+ |..|
+ |..|
+ |..|
+ |..|
+ |..|
+ |..|
+ |..|
+ |..|
+ |..|
+ |..|
+ | 5|
+ | 7|
+ |b5|
+ | |
+ ->|36|<-
+ |..|
+ |..|
+ |..|
+ |..|
+ --
+
+Char 0xfe92 'ﺒ'
+ Font: #1 KacstBook (12)
+ Bitmap: 3 x 5
+ Advance: 2
+ Offset: 0 x -1
+ __
+ |...|
+ |...|
+ |...|
+ |...|
+ |...|
+ |...|
+ |...|
+ |...|
+ |...|
+ |...|
+ |...|
+ | 3 |
+ |a85|
+ | |
+ ->|26 |<-
+ | 2 |
+ |...|
+ |...|
+ |...|
+ --
+
+Char 0xfe94 'ﺔ'
+ Font: #1 KacstBook (12)
+ Bitmap: 4 x 6
+ Advance: 4
+ Offset: 0 x 2
+ ____
+ |....|
+ |....|
+ |....|
+ |....|
+ |....|
+ |....|
+ |....|
+ | 89 |
+ | |
+ | 5 |
+ | 66 |
+ |5a8 |
+ | 148|
+ |....|
+ ->|....|<-
+ |....|
+ |....|
+ |....|
+ |....|
+ ----
+
+Char 0xfe96 'ﺖ'
+ Font: #1 KacstBook (12)
+ Bitmap: 9 x 5
+ Advance: 9
+ Offset: 0 x 1
+ _________
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ | 782 |
+ |2 |
+ |62 3 |
+ |2ba778987|
+ | 2431 |
+ ->|.........|<-
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ ---------
+
+Char 0xfe97 'ﺗ'
+ Font: #1 KacstBook (12)
+ Bitmap: 3 x 5
+ Advance: 2
+ Offset: 0 x 2
+ __
+ |...|
+ |...|
+ |...|
+ |...|
+ |...|
+ |...|
+ |...|
+ |...|
+ |782|
+ | |
+ | 5 |
+ | 7 |
+ |b5 |
+ |...|
+ ->|...|<-
+ |...|
+ |...|
+ |...|
+ |...|
+ --
+
+Char 0xfe98 'ﺘ'
+ Font: #1 KacstBook (12)
+ Bitmap: 3 x 4
+ Advance: 2
+ Offset: 0 x 2
+ __
+ |...|
+ |...|
+ |...|
+ |...|
+ |...|
+ |...|
+ |...|
+ |...|
+ |...|
+ |881|
+ | |
+ | 3 |
+ |a85|
+ |...|
+ ->|...|<-
+ |...|
+ |...|
+ |...|
+ |...|
+ --
+
+Char 0xfe9a 'ﺚ'
+ Font: #1 KacstBook (12)
+ Bitmap: 9 x 7
+ Advance: 9
+ Offset: 0 x 1
+ _________
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ | 1 |
+ | 35 |
+ | 782 |
+ |3 |
+ |62 3 |
+ |2ba779987|
+ | 2431 |
+ ->|.........|<-
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ ---------
+
+Char 0xfe9c 'ﺜ'
+ Font: #1 KacstBook (12)
+ Bitmap: 3 x 6
+ Advance: 2
+ Offset: 0 x 2
+ __
+ |...|
+ |...|
+ |...|
+ |...|
+ |...|
+ |...|
+ |...|
+ |1 |
+ |34 |
+ |881|
+ | |
+ | 3 |
+ |a85|
+ |...|
+ ->|...|<-
+ |...|
+ |...|
+ |...|
+ |...|
+ --
+
+Char 0xfe9e 'ﺞ'
+ Font: #1 KacstBook (12)
+ Bitmap: 7 x 8
+ Advance: 7
+ Offset: 0 x -3
+ _______
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ | 78552 |
+ | 39991 |
+ | 52 9b8|
+ |23 |
+ ->|5 9 |<-
+ |62 1 |
+ |1b41 11|
+ | 28a961|
+ |.......|
+ -------
+
+Char 0xfe9f 'ﺟ'
+ Font: #1 KacstBook (12)
+ Bitmap: 6 x 5
+ Advance: 6
+ Offset: 0 x 0
+ ______
+ |......|
+ |......|
+ |......|
+ |......|
+ |......|
+ |......|
+ |......|
+ |......|
+ |......|
+ |......|
+ |4c93 |
+ | 7cb6|
+ |a83 |
+ | 21 |
+ ->| 32 |<-
+ |......|
+ |......|
+ |......|
+ |......|
+ ------
+
+Char 0xfea0 'ﺠ'
+ Font: #1 KacstBook (12)
+ Bitmap: 7 x 5
+ Advance: 7
+ Offset: 0 x 0
+ _______
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |2ba521 |
+ | 6bb5 |
+ |a83 7b7|
+ | 21 |
+ ->| 32 |<-
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ -------
+
+Char 0xfea2 'ﺢ'
+ Font: #1 KacstBook (12)
+ Bitmap: 7 x 8
+ Advance: 7
+ Offset: 0 x -3
+ _______
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ | 77552 |
+ | 39991 |
+ | 52 9b8|
+ |23 |
+ ->|5 |<-
+ |62 |
+ |1b41 11|
+ | 28a961|
+ |.......|
+ -------
+
+Char 0xfea3 'ﺣ'
+ Font: #1 KacstBook (12)
+ Bitmap: 6 x 3
+ Advance: 7
+ Offset: 0 x 2
+ _______
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |4#83 .|
+ | 8#c6.|
+ |b83 .|
+ |.......|
+ ->|.......|<-
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ -------
+
+Char 0xfea4 'ﺤ'
+ Font: #1 KacstBook (12)
+ Bitmap: 7 x 3
+ Advance: 7
+ Offset: 0 x 2
+ _______
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |3ba521 |
+ | 6bb5 |
+ |a83 7b7|
+ |.......|
+ ->|.......|<-
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ -------
+
+Char 0xfea7 'ﺧ'
+ Font: #1 KacstBook (12)
+ Bitmap: 6 x 5
+ Advance: 7
+ Offset: 0 x 2
+ _______
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ | 54 .|
+ | .|
+ |4#83 .|
+ | 8#c6.|
+ |b83 .|
+ |.......|
+ ->|.......|<-
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ -------
+
+Char 0xfea8 'ﺨ'
+ Font: #1 KacstBook (12)
+ Bitmap: 7 x 6
+ Advance: 7
+ Offset: 0 x 2
+ _______
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ | 4 |
+ | 15 |
+ | |
+ |3ba521 |
+ | 6bb5 |
+ |a83 7b7|
+ |.......|
+ ->|.......|<-
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ -------
+
+Char 0xfeaa 'ﺪ'
+ Font: #1 KacstBook (12)
+ Bitmap: 5 x 5
+ Advance: 5
+ Offset: 0 x 2
+ _____
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ | 3 |
+ | 6 |
+ | 7 |
+ |2 2a |
+ |5b849|
+ |.....|
+ ->|.....|<-
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ -----
+
+Char 0xfeac 'ﺬ'
+ Font: #1 KacstBook (12)
+ Bitmap: 5 x 7
+ Advance: 5
+ Offset: 0 x 2
+ _____
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ | 42 |
+ | 21 |
+ | 3 |
+ | 6 |
+ | 7 |
+ |2 2a |
+ |5b849|
+ |.....|
+ ->|.....|<-
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ -----
+
+Char 0xfeae 'ﺮ'
+ Font: #1 KacstBook (12)
+ Bitmap: 4 x 5
+ Advance: 4
+ Offset: 0 x -1
+ ____
+ |....|
+ |....|
+ |....|
+ |....|
+ |....|
+ |....|
+ |....|
+ |....|
+ |....|
+ |....|
+ |....|
+ | 2 |
+ | 3c|
+ | 5|
+ ->| 81|<-
+ |5a4 |
+ |....|
+ |....|
+ |....|
+ ----
+
+Char 0xfeb0 'ﺰ'
+ Font: #1 KacstBook (12)
+ Bitmap: 4 x 7
+ Advance: 4
+ Offset: 0 x -1
+ ____
+ |....|
+ |....|
+ |....|
+ |....|
+ |....|
+ |....|
+ |....|
+ |....|
+ |....|
+ | a |
+ | |
+ | 2 |
+ | 3c|
+ | 5|
+ ->| 81|<-
+ |5a4 |
+ |....|
+ |....|
+ |....|
+ ----
+
+Char 0xfeb2 'ﺲ'
+ Font: #1 KacstBook (12)
+ Bitmap: 10 x 5
+ Advance: 10
+ Offset: 0 x -1
+ __________
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ | 3 33 |
+ | 6baa89|
+ |3 32 |
+ ->|6 5 |<-
+ |2bba3 |
+ |..........|
+ |..........|
+ |..........|
+ ----------
+
+Char 0xfeb3 'ﺳ'
+ Font: #1 KacstBook (12)
+ Bitmap: 7 x 3
+ Advance: 8
+ Offset: -1 x 2
+ ________
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ | 1..|
+ | 3 326..|
+ |1bab8b3..|
+ |.........|
+ ->|.........|<-
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ --------
+
+Char 0xfeb4 'ﺴ'
+ Font: #1 KacstBook (12)
+ Bitmap: 6 x 2
+ Advance: 6
+ Offset: 0 x 2
+ ______
+ |......|
+ |......|
+ |......|
+ |......|
+ |......|
+ |......|
+ |......|
+ |......|
+ |......|
+ |......|
+ |......|
+ | 4 413|
+ |a9b8aa|
+ |......|
+ ->|......|<-
+ |......|
+ |......|
+ |......|
+ |......|
+ ------
+
+Char 0xfeb7 'ﺷ'
+ Font: #1 KacstBook (12)
+ Bitmap: 7 x 6
+ Advance: 8
+ Offset: -1 x 2
+ ________
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ | 5 ..|
+ | 162 ..|
+ | 363 ..|
+ | 1..|
+ | 3 326..|
+ |1bab8b3..|
+ |.........|
+ ->|.........|<-
+ |.........|
+ |.........|
+ |.........|
+ |.........|
+ --------
+
+Char 0xfeb8 'ﺸ'
+ Font: #1 KacstBook (12)
+ Bitmap: 6 x 6
+ Advance: 6
+ Offset: 0 x 2
+ ______
+ |......|
+ |......|
+ |......|
+ |......|
+ |......|
+ |......|
+ |......|
+ | 3 |
+ | 16 |
+ | 583 |
+ | |
+ | 4 413|
+ |a9b8aa|
+ |......|
+ ->|......|<-
+ |......|
+ |......|
+ |......|
+ |......|
+ ------
+
+Char 0xfeba 'ﺺ'
+ Font: #1 KacstBook (12)
+ Bitmap: 12 x 7
+ Advance: 11
+ Offset: 0 x -1
+ ___________
+ |............|
+ |............|
+ |............|
+ |............|
+ |............|
+ |............|
+ |............|
+ |............|
+ |............|
+ | 1 |
+ | 7a9 |
+ | 3 6 37 |
+ | 7ccbcba4|
+ |3 44 |
+ ->|6 6 |<-
+ |4cba2 |
+ |............|
+ |............|
+ |............|
+ -----------
+
+Char 0xfebc 'ﺼ'
+ Font: #1 KacstBook (12)
+ Bitmap: 8 x 5
+ Advance: 8
+ Offset: 0 x 1
+ ________
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ | 1 |
+ | 4ac1|
+ | 3 4417 |
+ |a9b#aca9|
+ | 3 |
+ ->|........|<-
+ |........|
+ |........|
+ |........|
+ |........|
+ --------
+
+Char 0xfebf 'ﺿ'
+ Font: #1 KacstBook (12)
+ Bitmap: 8 x 7
+ Advance: 7
+ Offset: 0 x 1
+ _______
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ | 1 |
+ | 27 |
+ | 1 |
+ | 59c1|
+ | 3 4428 |
+ |b9b#a71 |
+ | 2 |
+ ->|........|<-
+ |........|
+ |........|
+ |........|
+ |........|
+ -------
+
+Char 0xfec0 'ﻀ'
+ Font: #1 KacstBook (12)
+ Bitmap: 8 x 7
+ Advance: 7
+ Offset: 0 x 1
+ _______
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ |........|
+ | 1 |
+ | 71 |
+ | 1 |
+ | 4ac1|
+ | 3 4417 |
+ |a9b#aca9|
+ | 3 |
+ ->|........|<-
+ |........|
+ |........|
+ |........|
+ |........|
+ -------
+
+Char 0xfec3 'ﻃ'
+ Font: #1 KacstBook (12)
+ Bitmap: 5 x 7
+ Advance: 5
+ Offset: 0 x 2
+ _____
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ |13 |
+ |19 |
+ | 7 |
+ | 6 |
+ | 569b|
+ | 8247|
+ |cca6 |
+ |.....|
+ ->|.....|<-
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ -----
+
+Char 0xfec4 'ﻄ'
+ Font: #1 KacstBook (12)
+ Bitmap: 6 x 7
+ Advance: 5
+ Offset: 0 x 2
+ _____
+ |......|
+ |......|
+ |......|
+ |......|
+ |......|
+ |......|
+ |14 |
+ | 8 |
+ | 6 |
+ | 6 |
+ | 569b |
+ | 8247 |
+ |ccbcc5|
+ |......|
+ ->|......|<-
+ |......|
+ |......|
+ |......|
+ |......|
+ -----
+
+Char 0xfec8 'ﻈ'
+ Font: #1 KacstBook (12)
+ Bitmap: 6 x 7
+ Advance: 5
+ Offset: 0 x 2
+ _____
+ |......|
+ |......|
+ |......|
+ |......|
+ |......|
+ |......|
+ |14 |
+ | 8 7 |
+ | 6 3 |
+ | 5 |
+ | 569b |
+ | 8247 |
+ |ccbcc5|
+ |......|
+ ->|......|<-
+ |......|
+ |......|
+ |......|
+ |......|
+ -----
+
+Char 0xfeca 'ﻊ'
+ Font: #1 KacstBook (12)
+ Bitmap: 7 x 8
+ Advance: 5
+ Offset: 0 x -3
+ _____
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ | 197 |
+ | 2cb |
+ | 538b4 |
+ |14 |
+ ->|5 |<-
+ |61 |
+ |2a2 |
+ | 3aba61|
+ |.......|
+ -----
+
+Char 0xfecb 'ﻋ'
+ Font: #1 KacstBook (12)
+ Bitmap: 5 x 4
+ Advance: 5
+ Offset: 0 x 2
+ _____
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ | 491 |
+ |1611 |
+ |1b794|
+ |b951 |
+ |.....|
+ ->|.....|<-
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ -----
+
+Char 0xfecc 'ﻌ'
+ Font: #1 KacstBook (12)
+ Bitmap: 5 x 3
+ Advance: 4
+ Offset: 0 x 2
+ ____
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ | 8a1 |
+ | 6#3 |
+ |b84b1|
+ |.....|
+ ->|.....|<-
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ ----
+
+Char 0xfed0 'ﻐ'
+ Font: #1 KacstBook (12)
+ Bitmap: 5 x 5
+ Advance: 4
+ Offset: 0 x 2
+ ____
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ | 25 |
+ | 3 |
+ | 8a1 |
+ | 6#3 |
+ |b84b1|
+ |.....|
+ ->|.....|<-
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ ----
+
+Char 0xfed2 'ﻒ'
+ Font: #1 KacstBook (12)
+ Bitmap: 10 x 7
+ Advance: 9
+ Offset: 0 x 1
+ _________
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ | 81 |
+ | |
+ | 12 |
+ |3 178 |
+ |62 564 |
+ |2bbaaa98b2|
+ | 121 |
+ ->|..........|<-
+ |..........|
+ |..........|
+ |..........|
+ |..........|
+ ---------
+
+Char 0xfed3 'ﻓ'
+ Font: #1 KacstBook (12)
+ Bitmap: 3 x 6
+ Advance: 3
+ Offset: 0 x 2
+ ___
+ |...|
+ |...|
+ |...|
+ |...|
+ |...|
+ |...|
+ |...|
+ |27 |
+ | 1 |
+ | b2|
+ |476|
+ |164|
+ |b91|
+ |...|
+ ->|...|<-
+ |...|
+ |...|
+ |...|
+ |...|
+ ---
+
+Char 0xfed4 'ﻔ'
+ Font: #1 KacstBook (12)
+ Bitmap: 4 x 6
+ Advance: 4
+ Offset: 0 x 2
+ ____
+ |....|
+ |....|
+ |....|
+ |....|
+ |....|
+ |....|
+ |....|
+ | 28 |
+ | |
+ | 3 |
+ | 393|
+ | 871|
+ |b8a8|
+ |....|
+ ->|....|<-
+ |....|
+ |....|
+ |....|
+ |....|
+ ----
+
+Char 0xfed6 'ﻖ'
+ Font: #1 KacstBook (12)
+ Bitmap: 6 x 8
+ Advance: 6
+ Offset: 0 x -1
+ ______
+ |......|
+ |......|
+ |......|
+ |......|
+ |......|
+ |......|
+ |......|
+ |......|
+ | 56 |
+ | 42 |
+ | 3 |
+ | 383|
+ |21 4bc|
+ |5 14|
+ ->|49677 |<-
+ | 242 |
+ |......|
+ |......|
+ |......|
+ ------
+
+Char 0xfed7 'ﻗ'
+ Font: #1 KacstBook (12)
+ Bitmap: 3 x 6
+ Advance: 3
+ Offset: 0 x 2
+ ___
+ |...|
+ |...|
+ |...|
+ |...|
+ |...|
+ |...|
+ |...|
+ |584|
+ | |
+ | b2|
+ |466|
+ |154|
+ |b91|
+ |...|
+ ->|...|<-
+ |...|
+ |...|
+ |...|
+ |...|
+ ---
+
+Char 0xfed8 'ﻘ'
+ Font: #1 KacstBook (12)
+ Bitmap: 4 x 6
+ Advance: 4
+ Offset: 0 x 2
+ ____
+ |....|
+ |....|
+ |....|
+ |....|
+ |....|
+ |....|
+ |....|
+ | 46 |
+ | 53 |
+ | 3 |
+ | 393|
+ | 871|
+ |a8a8|
+ |....|
+ ->|....|<-
+ |....|
+ |....|
+ |....|
+ |....|
+ ----
+
+Char 0xfedb 'ﻛ'
+ Font: #1 KacstBook (12)
+ Bitmap: 5 x 7
+ Advance: 5
+ Offset: 0 x 2
+ _____
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ | 173|
+ |2982 |
+ |81 |
+ |49 |
+ | 37 |
+ | 7 |
+ |ba5 |
+ |.....|
+ ->|.....|<-
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ -----
+
+Char 0xfedc 'ﻜ'
+ Font: #1 KacstBook (12)
+ Bitmap: 5 x 7
+ Advance: 4
+ Offset: 0 x 2
+ ____
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ | 283|
+ |2971 |
+ |7 |
+ |38 |
+ | 66 |
+ | 792 |
+ |b61b3|
+ |.....|
+ ->|.....|<-
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ ----
+
+Char 0xfede 'ﻞ'
+ Font: #1 KacstBook (12)
+ Bitmap: 7 x 10
+ Advance: 6
+ Offset: 0 x -2
+ ______
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ |.......|
+ | 6 |
+ | 7 |
+ | 8 |
+ | 8 |
+ | 73 |
+ | 1 6a2|
+ |3 5 |
+ ->|5 5 |<-
+ |5a795 |
+ | 341 |
+ |.......|
+ |.......|
+ ------
+
+Char 0xfedf 'ﻟ'
+ Font: #1 KacstBook (12)
+ Bitmap: 3 x 7
+ Advance: 3
+ Offset: -1 x 2
+ ___
+ |....|
+ |....|
+ |....|
+ |....|
+ |....|
+ |....|
+ | 1.|
+ | 1a.|
+ | 6.|
+ | 5.|
+ | 5.|
+ | 5.|
+ |1b6.|
+ |....|
+ ->|....|<-
+ |....|
+ |....|
+ |....|
+ |....|
+ ---
+
+Char 0xfee0 'ﻠ'
+ Font: #1 KacstBook (12)
+ Bitmap: 3 x 7
+ Advance: 3
+ Offset: 0 x 2
+ ___
+ |...|
+ |...|
+ |...|
+ |...|
+ |...|
+ |...|
+ | 3 |
+ | 8 |
+ | 7 |
+ | 6 |
+ | 6 |
+ | 82|
+ |b4b|
+ |...|
+ ->|...|<-
+ |...|
+ |...|
+ |...|
+ |...|
+ ---
+
+Char 0xfee2 'ﻢ'
+ Font: #1 KacstBook (12)
+ Bitmap: 6 x 8
+ Advance: 5
+ Offset: 0 x -3
+ _____
+ |......|
+ |......|
+ |......|
+ |......|
+ |......|
+ |......|
+ |......|
+ |......|
+ |......|
+ |......|
+ | 24 |
+ | 7a9 |
+ |34acb5|
+ |5 2 |
+ ->|5 |<-
+ |33 |
+ | 5 |
+ | 2 |
+ |......|
+ -----
+
+Char 0xfee3 'ﻣ'
+ Font: #1 KacstBook (12)
+ Bitmap: 4 x 3
+ Advance: 3
+ Offset: 0 x 2
+ ___
+ |....|
+ |....|
+ |....|
+ |....|
+ |....|
+ |....|
+ |....|
+ |....|
+ |....|
+ |....|
+ | 2a1|
+ | 964|
+ |a371|
+ |....|
+ ->|....|<-
+ |....|
+ |....|
+ |....|
+ |....|
+ ---
+
+Char 0xfee4 'ﻤ'
+ Font: #1 KacstBook (12)
+ Bitmap: 5 x 4
+ Advance: 5
+ Offset: 0 x 1
+ _____
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ | 3 |
+ | 665 |
+ |a6ab9|
+ | 1 |
+ ->|.....|<-
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ -----
+
+Char 0xfee6 'ﻦ'
+ Font: #1 KacstBook (12)
+ Bitmap: 6 x 7
+ Advance: 6
+ Offset: 0 x -1
+ ______
+ |......|
+ |......|
+ |......|
+ |......|
+ |......|
+ |......|
+ |......|
+ |......|
+ |......|
+ | 3 |
+ | 7 |
+ | 3 |
+ | 6c|
+ |3 32|
+ ->|6 5 |<-
+ |3cba3 |
+ |......|
+ |......|
+ |......|
+ ------
+
+Char 0xfee7 'ﻧ'
+ Font: #1 KacstBook (12)
+ Bitmap: 2 x 6
+ Advance: 2
+ Offset: 0 x 2
+ __
+ |..|
+ |..|
+ |..|
+ |..|
+ |..|
+ |..|
+ |..|
+ |12|
+ |34|
+ | |
+ | 5|
+ | 7|
+ |a4|
+ |..|
+ ->|..|<-
+ |..|
+ |..|
+ |..|
+ |..|
+ --
+
+Char 0xfee8 'ﻨ'
+ Font: #1 KacstBook (12)
+ Bitmap: 3 x 5
+ Advance: 2
+ Offset: 0 x 2
+ __
+ |...|
+ |...|
+ |...|
+ |...|
+ |...|
+ |...|
+ |...|
+ |...|
+ | 1 |
+ |26 |
+ | |
+ | 3 |
+ |a85|
+ |...|
+ ->|...|<-
+ |...|
+ |...|
+ |...|
+ |...|
+ --
+
+Char 0xfeea 'ﻪ'
+ Font: #1 KacstBook (12)
+ Bitmap: 4 x 4
+ Advance: 4
+ Offset: 0 x 2
+ ____
+ |....|
+ |....|
+ |....|
+ |....|
+ |....|
+ |....|
+ |....|
+ |....|
+ |....|
+ | 5 |
+ | 66 |
+ |5a8 |
+ | 148|
+ |....|
+ ->|....|<-
+ |....|
+ |....|
+ |....|
+ |....|
+ ----
+
+Char 0xfeeb 'ﻫ'
+ Font: #1 KacstBook (12)
+ Bitmap: 5 x 4
+ Advance: 5
+ Offset: 0 x 2
+ _____
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ | 4a1 |
+ | 59a |
+ | 9943|
+ |b6471|
+ |.....|
+ ->|.....|<-
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ -----
+
+Char 0xfeec 'ﻬ'
+ Font: #1 KacstBook (12)
+ Bitmap: 5 x 7
+ Advance: 4
+ Offset: 0 x -1
+ ____
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ |.....|
+ | 1 |
+ | 193 |
+ | 551 |
+ |b#cb1|
+ | 673 |
+ ->| 592 |<-
+ | 1 |
+ |.....|
+ |.....|
+ |.....|
+ ----
+
+Char 0xfeed 'ﻭ'
+ Font: #1 KacstBook (12)
+ Bitmap: 4 x 5
+ Advance: 4
+ Offset: 0 x 0
+ ____
+ |....|
+ |....|
+ |....|
+ |....|
+ |....|
+ |....|
+ |....|
+ |....|
+ |....|
+ |....|
+ | 49|
+ | 79|
+ | 36|
+ | 16|
+ ->|479 |<-
+ |....|
+ |....|
+ |....|
+ |....|
+ ----
+
+Char 0xfeee 'ﻮ'
+ Font: #1 KacstBook (12)
+ Bitmap: 6 x 6
+ Advance: 4
+ Offset: -1 x -1
+ ____
+ |......|
+ |......|
+ |......|
+ |......|
+ |......|
+ |......|
+ |......|
+ |......|
+ |......|
+ |......|
+ | 22 |
+ | 69 |
+ | ac6|
+ | 6 |
+ ->|1 83 |<-
+ | 484 |
+ |......|
+ |......|
+ |......|
+ ----
+
+Char 0xfef0 'ﻰ'
+ Font: #1 KacstBook (12)
+ Bitmap: 6 x 4
+ Advance: 6
+ Offset: 0 x -1
+ ______
+ |......|
+ |......|
+ |......|
+ |......|
+ |......|
+ |......|
+ |......|
+ |......|
+ |......|
+ |......|
+ |......|
+ |......|
+ |1 8a|
+ |4 593|
+ ->|8 66|<-
+ |6ba95 |
+ |......|
+ |......|
+ |......|
+ ------
+
+Char 0xfef2 'ﻲ'
+ Font: #1 KacstBook (12)
+ Bitmap: 6 x 6
+ Advance: 6
+ Offset: 0 x -3
+ ______
+ |......|
+ |......|
+ |......|
+ |......|
+ |......|
+ |......|
+ |......|
+ |......|
+ |......|
+ |......|
+ |......|
+ |......|
+ |1 7b|
+ |4 2a4|
+ ->|7 58|<-
+ |4ba96 |
+ | 46 |
+ | 53 |
+ |......|
+ ------
+
+Char 0xfef3 'ﻳ'
+ Font: #1 KacstBook (12)
+ Bitmap: 2 x 5
+ Advance: 2
+ Offset: 0 x 0
+ __
+ |..|
+ |..|
+ |..|
+ |..|
+ |..|
+ |..|
+ |..|
+ |..|
+ |..|
+ |..|
+ | 5|
+ | 7|
+ |b5|
+ |13|
+ ->|76|<-
+ |..|
+ |..|
+ |..|
+ |..|
+ --
+
+Char 0xfef4 'ﻴ'
+ Font: #1 KacstBook (12)
+ Bitmap: 3 x 5
+ Advance: 2
+ Offset: 0 x -1
+ __
+ |...|
+ |...|
+ |...|
+ |...|
+ |...|
+ |...|
+ |...|
+ |...|
+ |...|
+ |...|
+ |...|
+ | 4 |
+ |a85|
+ | |
+ ->|681|<-
+ |21 |
+ |...|
+ |...|
+ |...|
+ --
+
+Char 0xff08 '('
+ Font: #12 FZHeiTi (17)
+ Bitmap: 4 x 16
+ Advance: 17
+ Offset: 7 x -2
+ _________________
+ |.................|
+ |....... 2......|
+ |....... 89......|
+ |....... 1#3......|
+ |....... 6c ......|
+ |....... 99 ......|
+ |....... c6 ......|
+ |....... #4 ......|
+ |.......1#3 ......|
+ |.......2#3 ......|
+ |.......2#3 ......|
+ |.......1#5 ......|
+ |....... #7 ......|
+ |....... aa ......|
+ ->|....... 5# ......|<-
+ |....... 1#4......|
+ |....... 7a......|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0xff09 ')'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 4 x 16
+ Advance: 17
+ Offset: 6 x -2
+ _________________
+ |.................|
+ |......2 .......|
+ |......98 .......|
+ |......3#1 .......|
+ |...... c6 .......|
+ |...... 99 .......|
+ |...... 6c .......|
+ |...... 4# .......|
+ |...... 3#1.......|
+ |...... 3#2.......|
+ |...... 4#2.......|
+ |...... 5#1.......|
+ |...... 7c .......|
+ |...... aa .......|
+ ->|...... #5 .......|<-
+ |......4#1 .......|
+ |......a7 .......|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0xff0c ','
+ Font: #12 FZHeiTi (17)
+ Bitmap: 3 x 6
+ Advance: 17
+ Offset: 3 x -3
+ _________________
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ |...884...........|
+ |...##6...........|
+ ->|...##6...........|<-
+ |...1#5...........|
+ |...9c ...........|
+ |...41 ...........|
+ |.................|
+ -----------------
+
+Char 0xff0d '-'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 13 x 2
+ Advance: 17
+ Offset: 2 x 3
+ _________________
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ |..############9..|
+ |..bbbbbbbbbbbb7..|
+ |.................|
+ |.................|
+ ->|.................|<-
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0xff1a ':'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 3 x 8
+ Advance: 17
+ Offset: 3 x -1
+ _________________
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ |.................|
+ |...22 ...........|
+ |...##2...........|
+ |...##2...........|
+ |... ...........|
+ |... ...........|
+ |...11 ...........|
+ ->|...##2...........|<-
+ |...##2...........|
+ |.................|
+ |.................|
+ |.................|
+ -----------------
+
+Char 0xff1f '?'
+ Font: #12 FZHeiTi (17)
+ Bitmap: 8 x 13
+ Advance: 17
+ Offset: 0 x -1
+ _________________
+ |.................|
+ |.................|
+ |.................|
+ | 1 .........|
+ | 9##c5 .........|
+ | 9c2 4#2.........|
+ | #5 a6.........|
+ |181 b5.........|
+ | 4#1.........|
+ | 2#7 .........|
+ | c9 .........|
+ | 4#1 .........|
+ | 5# .........|
+ | 1 .........|
+ ->| 381 .........|<-
+ | 6#1 .........|
+ |.................|
+ |.................|
+ |.................|
+ -----------------
+
diff --git a/themes/openSUSE/fonts/Makefile b/themes/openSUSE/fonts/Makefile
new file mode 100644
index 0000000..02af001
--- /dev/null
+++ b/themes/openSUSE/fonts/Makefile
@@ -0,0 +1,41 @@
+BINDIR := $(shell [ -x ../../../gfxboot-font ] && echo ../../../ )
+
+GFXBOOT_FONT = $(BINDIR)gfxboot-font
+KEYMAPCHARS = $(BINDIR)bin/keymapchars
+
+all: .ready
+
+fonts: 16x16.fnt
+
+.ready:
+ @touch .ready
+
+16x16.fnt: ../po/en.tr ../src/main.log
+ cat ../po/*.tr ../help-*/*/*.html >tmp.txt
+ $(GFXBOOT_FONT) -v -l 18 \
+ -a 0x2022-0x2023 \
+ -c ISO-8859-15 -c ISO-8859-2 -c koi8-r \
+ `$(KEYMAPCHARS) ../keymaps/keymap.*.inc` \
+ -t tmp.txt \
+ -t ../src/main.log \
+ -t ../data-install/languages \
+ -f NachlieliCLM-Bold:size=14:c=0x590-0x5ff \
+ -f KacstBook:size=12:c=0x600-0x6ff,0xfe70-0xfefc:dy=2 \
+ -f MuktiNarrow:size=18:c=0x0981-0x09fa:bold=1 \
+ -f lohit_hi:size=16:c=0x0901-0x0970:bold=1 \
+ -f lohit_pa:size=15:c=0x0a01-0x0a74:bold=1:autohint=1 \
+ -f lohit_gu:size=15:c=0x0a81-0x0af1:bold=1 \
+ -f TSCu_Paranar:size=18:c=0x0b82-0x0bfa:dy=2:bold=1 \
+ -f lklug:size=17:c=0x0d82-0x0df4:bold=1:dy=1 \
+ -f Loma:size=13:c=0x0e01-0x0e7f:bold=0:dy=0 \
+ -f Loma:size=17:c=0x0e81-0x0eff:bold=0:dy=-2 \
+ -f KhmerOS_sys:size=16:c=0x1780-0x17f9:dy=-2 \
+ -f DejaVuSans-Bold:size=14 \
+ -f FZHeiTi:size=17:nobitmap=1:autohint=1 \
+ -f gulim:size=17:bold=1:nobitmap=1:autohint=1 \
+ 16x16.fnt >16x16.fnt.log
+ rm -f tmp.txt
+
+clean:
+ rm -f .ready *~
+
diff --git a/themes/openSUSE/help-boot/Makefile b/themes/openSUSE/help-boot/Makefile
new file mode 100644
index 0000000..be62ce8
--- /dev/null
+++ b/themes/openSUSE/help-boot/Makefile
@@ -0,0 +1,20 @@
+BINDIR = $(shell [ -x ../../../gfxboot ] && echo ../../../ )
+GFXBOOT = $(BINDIR)gfxboot
+PRODUCT = $(shell perl -ne 'print if s/^product=//' ../config)
+HELPFILES = $(addsuffix .hlp, $(shell for i in * ; do [ -d $$i ] && echo $$i ; done))
+
+HELPSRC = opt*
+HELPNAVI = navi
+ENTITIES = product='$(PRODUCT)' fkey_help=F1 fkey_lang=F2 fkey_profile=F3
+
+%.hlp: %
+ $(GFXBOOT) --help-create $@ --define $(ENTITIES) --navi $</$(HELPNAVI).html $</$(HELPSRC).html || true
+
+all: .ready
+
+.ready: $(HELPFILES)
+ @touch .ready
+
+clean:
+ rm -f .ready *.hlp *~
+
diff --git a/themes/openSUSE/help-boot/af/navi.html b/themes/openSUSE/help-boot/af/navi.html
new file mode 100644
index 0000000..257db47
--- /dev/null
+++ b/themes/openSUSE/help-boot/af/navi.html
@@ -0,0 +1 @@
+<p>Gaan terug na <a href="#foobar">FOOBAR</a></p>
diff --git a/themes/openSUSE/help-boot/af/opt.html b/themes/openSUSE/help-boot/af/opt.html
new file mode 100644
index 0000000..298d006
--- /dev/null
+++ b/themes/openSUSE/help-boot/af/opt.html
@@ -0,0 +1,12 @@
+<h3>
+<a name="opt">Selflaai-opsies</a>
+</h3>
+
+<p>
+<ul>
+ <li><a href="#o_splash">splat</a> -- influence the behavior of the splash screen</li>
+ <li><a href="#o_apm">apm</a> -- toggle power management</li>
+ <li><a href="#o_acpi">acpi</a> -- advanced configuration and power interface</li>
+ <li><a href="#o_ide">ide</a> -- control the IDE subsystem</li>
+</ul>
+</p>
diff --git a/themes/openSUSE/help-boot/af/opt::help.html b/themes/openSUSE/help-boot/af/opt::help.html
new file mode 100644
index 0000000..6888151
--- /dev/null
+++ b/themes/openSUSE/help-boot/af/opt::help.html
@@ -0,0 +1,25 @@
+<h3>
+<a name="help">Gebruik van die Hulpstelsel</a>
+</h3>
+
+<p>
+The boot loader online help is context sensitive. It gives information
+about the selected menu item or, if you are editing boot options,
+it tries to look up information about the option in which the cursor is
+positioned.
+</p>
+
+<p>
+Navigation Keys
+<ul>
+ <li><em>Op-pyl</em>: highlight previous link</li>
+ <li><em>Af-pyl</em>: highlight next link</li>
+ <li><em>Links-pyl</em>, <em>Terugspasie</em>: return to previous topic</li>
+ <li><em>Regs-pyl</em>, <em>Voer in</em>, <em>Spasie</em>: follow link</li>
+ <li><em>Bladsy op</em>: scroll up one page</li>
+ <li><em>Bladsy af</em>: scroll down one page</li>
+ <li><em>Tuis</em>: go to page start</li>
+ <li><em>Eindig</em>: go to page end</li>
+ <li><em>Ontsnap</em>: leave help</li>
+</ul>
+</p>
diff --git a/themes/openSUSE/help-boot/af/opt::keytable.html b/themes/openSUSE/help-boot/af/opt::keytable.html
new file mode 100644
index 0000000..93f13e8
--- /dev/null
+++ b/themes/openSUSE/help-boot/af/opt::keytable.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="keytable">Taal- en sleutelborduitlegkeuse</a>
+</h3>
+
+<p>
+Press <em>@@@fkey_lang@@@</em> to change language and keyboard layout the boot loader uses.
+</p>
diff --git a/themes/openSUSE/help-boot/af/opt::o_acpi.html b/themes/openSUSE/help-boot/af/opt::o_acpi.html
new file mode 100644
index 0000000..4a9c594
--- /dev/null
+++ b/themes/openSUSE/help-boot/af/opt::o_acpi.html
@@ -0,0 +1,23 @@
+<h3>
+<a name="o_acpi">Kernopsies: acpi</a>
+</h3>
+
+<p>
+ACPI (Advanced Configuration and Power Interface) is a
+standard that defines power and configuration management interfaces
+between an operating system and the BIOS. By default, <em>acpi</em> is
+switched on when a BIOS is detected that is newer than from year
+2000. There are several commonly
+used parameters to control the behavior of ACPI:
+<ul>
+ <li><em>pci=geenacpi</em> -- do not use ACPI to route PCI interrupts</li>
+ <li><em>acpi=ouselflaai</em> -- only the parts of ACPI that are relevant for booting remain activated</li>
+ <li><em>acpi=af</em> -- switch off ACPI completely</li>
+ <li><em>acpi=dwang</em> -- switch on ACPI even if your BIOS is dated before 2000</li>
+</ul>
+</p>
+
+<p>
+Especially on new computers, it replaces the old
+<a href="#o_apm">apm</a> system.
+</p>
diff --git a/themes/openSUSE/help-boot/af/opt::o_apm.html b/themes/openSUSE/help-boot/af/opt::o_apm.html
new file mode 100644
index 0000000..d4c75ed
--- /dev/null
+++ b/themes/openSUSE/help-boot/af/opt::o_apm.html
@@ -0,0 +1,21 @@
+<h3>
+<a name="o_apm">Kernopsies: apm</a>
+</h3>
+
+<p>
+APM is one of the two power management strategies used on current
+computers. It is mainly used with laptops for functions like suspend
+to disk, but it may also be responsible for switching off the
+computer after power down. APM relies on a correct working BIOS. If
+the BIOS is broken, APM may have only limited use or even prevent the
+computer from working. Therefore, it may be switched off with the
+parameter
+<ul>
+ <li><em>apm=af</em> -- switch off APM completely</li>
+</ul>
+</p>
+
+<p>
+Some very new computers may take more advantage from the newer
+<a href="#o_acpi">ACPI</a>.
+</p>
diff --git a/themes/openSUSE/help-boot/af/opt::o_ide.html b/themes/openSUSE/help-boot/af/opt::o_ide.html
new file mode 100644
index 0000000..761f42c
--- /dev/null
+++ b/themes/openSUSE/help-boot/af/opt::o_ide.html
@@ -0,0 +1,12 @@
+<h3>
+<a name="o_ide">Kernopsies: ide</a>
+</h3>
+
+<p>
+IDE is, unlike SCSI, commonly used in most desktop workstations.
+To circumvent some hardware problems that occur with IDE systems, use the
+kernel parameter:
+<ul>
+ <li><em>ide=geendma</em> -- switch off DMA for IDE drives</li>
+</ul>
+</p>
diff --git a/themes/openSUSE/help-boot/af/opt::o_splash.html b/themes/openSUSE/help-boot/af/opt::o_splash.html
new file mode 100644
index 0000000..7914f05
--- /dev/null
+++ b/themes/openSUSE/help-boot/af/opt::o_splash.html
@@ -0,0 +1,12 @@
+<h3>
+<a name="o_splash">Kernopsies: splat</a>
+</h3>
+
+<p>
+The splash screen is the picture shown during system start-up.
+<ul>
+ <li><em>splat=0</em> -- The splash screen is switched off. This may be useful with very old monitors or if some error occurs.</li>
+ <li><em>splat=woordryk</em> -- Activates splash, kernel and boot messages are still shown.</li>
+ <li><em>splat=stil</em> -- Activates splash, but no messages. Instead a progress bar is drawn.</li>
+</ul>
+</p>
diff --git a/themes/openSUSE/help-boot/af/opt::profile.html b/themes/openSUSE/help-boot/af/opt::profile.html
new file mode 100644
index 0000000..237feb6
--- /dev/null
+++ b/themes/openSUSE/help-boot/af/opt::profile.html
@@ -0,0 +1,8 @@
+<h3>
+<a name="profile">Kies profiel</a>
+</h3>
+
+<p>
+Press <em>@@@fkey_profile@@@</em> to select a profile. Your system will be started using the
+configuration saved in this profile.
+</p>
diff --git a/themes/openSUSE/help-boot/ar/navi.html b/themes/openSUSE/help-boot/ar/navi.html
new file mode 100644
index 0000000..dececad
--- /dev/null
+++ b/themes/openSUSE/help-boot/ar/navi.html
@@ -0,0 +1 @@
+<p>الرجوع إلى <a href="#foobar">FOOBAR</a></p>
diff --git a/themes/openSUSE/help-boot/ar/opt.html b/themes/openSUSE/help-boot/ar/opt.html
new file mode 100644
index 0000000..eff805f
--- /dev/null
+++ b/themes/openSUSE/help-boot/ar/opt.html
@@ -0,0 +1,12 @@
+<h3>
+<a name="opt">خيارات التشغيل</a>
+</h3>
+
+<p>
+<ul>
+ <li><a href="#o_splash">شاشة بداية التشغيل</a> -- influence the behavior of the splash screen</li>
+ <li><a href="#o_apm">apm</a> -- toggle power management</li>
+ <li><a href="#o_acpi">acpi</a> -- advanced configuration and power interface</li>
+ <li><a href="#o_ide">ide</a> -- control the IDE subsystem</li>
+</ul>
+</p>
diff --git a/themes/openSUSE/help-boot/ar/opt::help.html b/themes/openSUSE/help-boot/ar/opt::help.html
new file mode 100644
index 0000000..c895f47
--- /dev/null
+++ b/themes/openSUSE/help-boot/ar/opt::help.html
@@ -0,0 +1,25 @@
+<h3>
+<a name="help">استخدام نظام التعليمات</a>
+</h3>
+
+<p>
+The boot loader online help is context sensitive. It gives information
+about the selected menu item or, if you are editing boot options,
+it tries to look up information about the option in which the cursor is
+positioned.
+</p>
+
+<p>
+Navigation Keys
+<ul>
+ <li><em>سهم لأعلى</em>: highlight previous link</li>
+ <li><em>سهم لأسفل</em>: highlight next link</li>
+ <li><em>سهم لليسار</em>, <em>مسافة للخلف</em>: return to previous topic</li>
+ <li><em>سهم لليمين</em>, <em>مفتاح الإدخال</em>, <em>مسافة</em>: follow link</li>
+ <li><em>Page Up</em>: scroll up one page</li>
+ <li><em>Page Down</em>: scroll down one page</li>
+ <li><em>المنزل</em>: go to page start</li>
+ <li><em>End</em>: go to page end</li>
+ <li><em>خروج</em>: leave help</li>
+</ul>
+</p>
diff --git a/themes/openSUSE/help-boot/ar/opt::keytable.html b/themes/openSUSE/help-boot/ar/opt::keytable.html
new file mode 100644
index 0000000..dc7cfb3
--- /dev/null
+++ b/themes/openSUSE/help-boot/ar/opt::keytable.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="keytable">تحديد اللغة وتخطيط لوحة المفاتيح</a>
+</h3>
+
+<p>
+Press <em>@@@fkey_lang@@@</em> to change language and keyboard layout the boot loader uses.
+</p>
diff --git a/themes/openSUSE/help-boot/ar/opt::o_acpi.html b/themes/openSUSE/help-boot/ar/opt::o_acpi.html
new file mode 100644
index 0000000..d291a5d
--- /dev/null
+++ b/themes/openSUSE/help-boot/ar/opt::o_acpi.html
@@ -0,0 +1,23 @@
+<h3>
+<a name="o_acpi">خيارات Kernel: acpi</a>
+</h3>
+
+<p>
+ACPI (Advanced Configuration and Power Interface) is a
+standard that defines power and configuration management interfaces
+between an operating system and the BIOS. By default, <em>acpi</em> is
+switched on when a BIOS is detected that is newer than from year
+2000. There are several commonly
+used parameters to control the behavior of ACPI:
+<ul>
+ <li><em>pci=noacpi</em> -- do not use ACPI to route PCI interrupts</li>
+ <li><em>acpi=oldboot</em> -- only the parts of ACPI that are relevant for booting remain activated</li>
+ <li><em>acpi=off</em> -- switch off ACPI completely</li>
+ <li><em>acpi=force</em> -- switch on ACPI even if your BIOS is dated before 2000</li>
+</ul>
+</p>
+
+<p>
+Especially on new computers, it replaces the old
+<a href="#o_apm">apm</a> system.
+</p>
diff --git a/themes/openSUSE/help-boot/ar/opt::o_apm.html b/themes/openSUSE/help-boot/ar/opt::o_apm.html
new file mode 100644
index 0000000..5fb2845
--- /dev/null
+++ b/themes/openSUSE/help-boot/ar/opt::o_apm.html
@@ -0,0 +1,21 @@
+<h3>
+<a name="o_apm">خيارات Kernel: apm</a>
+</h3>
+
+<p>
+APM is one of the two power management strategies used on current
+computers. It is mainly used with laptops for functions like suspend
+to disk, but it may also be responsible for switching off the
+computer after power down. APM relies on a correct working BIOS. If
+the BIOS is broken, APM may have only limited use or even prevent the
+computer from working. Therefore, it may be switched off with the
+parameter
+<ul>
+ <li><em>apm=off</em> -- switch off APM completely</li>
+</ul>
+</p>
+
+<p>
+Some very new computers may take more advantage from the newer
+<a href="#o_acpi">ACPI</a>.
+</p>
diff --git a/themes/openSUSE/help-boot/ar/opt::o_ide.html b/themes/openSUSE/help-boot/ar/opt::o_ide.html
new file mode 100644
index 0000000..87cbe64
--- /dev/null
+++ b/themes/openSUSE/help-boot/ar/opt::o_ide.html
@@ -0,0 +1,12 @@
+<h3>
+<a name="o_ide">خيارات Kernel: ide</a>
+</h3>
+
+<p>
+IDE is, unlike SCSI, commonly used in most desktop workstations.
+To circumvent some hardware problems that occur with IDE systems, use the
+kernel parameter:
+<ul>
+ <li><em>ide=nodma</em> -- switch off DMA for IDE drives</li>
+</ul>
+</p>
diff --git a/themes/openSUSE/help-boot/ar/opt::o_splash.html b/themes/openSUSE/help-boot/ar/opt::o_splash.html
new file mode 100644
index 0000000..1a5b1a1
--- /dev/null
+++ b/themes/openSUSE/help-boot/ar/opt::o_splash.html
@@ -0,0 +1,12 @@
+<h3>
+<a name="o_splash">خيارات Kernel: شاشة بداية التشغيل</a>
+</h3>
+
+<p>
+The splash screen is the picture shown during system start-up.
+<ul>
+ <li><em>splash=0</em> -- The splash screen is switched off. This may be useful with very old monitors or if some error occurs.</li>
+ <li><em>splash=verbose</em> -- Activates splash, kernel and boot messages are still shown.</li>
+ <li><em>splash=silent</em> -- Activates splash, but no messages. Instead a progress bar is drawn.</li>
+</ul>
+</p>
diff --git a/themes/openSUSE/help-boot/ar/opt::profile.html b/themes/openSUSE/help-boot/ar/opt::profile.html
new file mode 100644
index 0000000..3be129f
--- /dev/null
+++ b/themes/openSUSE/help-boot/ar/opt::profile.html
@@ -0,0 +1,8 @@
+<h3>
+<a name="profile">اختيار ملف تعريف</a>
+</h3>
+
+<p>
+Press <em>@@@fkey_profile@@@</em> to select a profile. Your system will be started using the
+configuration saved in this profile.
+</p>
diff --git a/themes/openSUSE/help-boot/bg/navi.html b/themes/openSUSE/help-boot/bg/navi.html
new file mode 100644
index 0000000..b4f8211
--- /dev/null
+++ b/themes/openSUSE/help-boot/bg/navi.html
@@ -0,0 +1,3 @@
+<p>
+Return to <a href="#foobar">FOOBAR</a>
+</p>
diff --git a/themes/openSUSE/help-boot/bg/opt.html b/themes/openSUSE/help-boot/bg/opt.html
new file mode 100644
index 0000000..99a447c
--- /dev/null
+++ b/themes/openSUSE/help-boot/bg/opt.html
@@ -0,0 +1,12 @@
+<h3>
+<a name="opt">Параметри на зареждането</a>
+</h3>
+
+<p>
+<ul>
+ <li><a href="#o_splash">splash</a> -- influence the behavior of the splash screen</li>
+ <li><a href="#o_apm">apm</a> -- toggle power management</li>
+ <li><a href="#o_acpi">acpi</a> -- advanced configuration and power interface</li>
+ <li><a href="#o_ide">ide</a> -- control the IDE subsystem</li>
+</ul>
+</p>
diff --git a/themes/openSUSE/help-boot/bg/opt::help.html b/themes/openSUSE/help-boot/bg/opt::help.html
new file mode 100644
index 0000000..2984793
--- /dev/null
+++ b/themes/openSUSE/help-boot/bg/opt::help.html
@@ -0,0 +1,25 @@
+<h3>
+<a name="help">Използване на помощната система</a>
+</h3>
+
+<p>
+The boot loader online help is context sensitive. It gives information
+about the selected menu item or, if you are editing boot options,
+it tries to look up information about the option in which the cursor is
+positioned.
+</p>
+
+<p>
+Navigation Keys
+<ul>
+ <li><em>Стрелка нагоре</em>: highlight previous link</li>
+ <li><em>Стрелка надолу</em>: highlight next link</li>
+ <li><em>Стрелка наляво</em>, <em>Backspace</em>: return to previous topic</li>
+ <li><em>Стрелка надясно</em>, <em>Enter</em>, <em>Интервал</em>: follow link</li>
+ <li><em>Страница нагоре</em>: scroll up one page</li>
+ <li><em>Страница надолу</em>: scroll down one page</li>
+ <li><em>Home</em>: go to page start</li>
+ <li><em>End</em>: go to page end</li>
+ <li><em>Esc</em>: leave help</li>
+</ul>
+</p>
diff --git a/themes/openSUSE/help-boot/bg/opt::keytable.html b/themes/openSUSE/help-boot/bg/opt::keytable.html
new file mode 100644
index 0000000..0b93dfc
--- /dev/null
+++ b/themes/openSUSE/help-boot/bg/opt::keytable.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="keytable">Избор на език и клавиатурна подредба</a>
+</h3>
+
+<p>
+Press <em>@@@fkey_lang@@@</em> to change language and keyboard layout the boot loader uses.
+</p>
diff --git a/themes/openSUSE/help-boot/bg/opt::o_acpi.html b/themes/openSUSE/help-boot/bg/opt::o_acpi.html
new file mode 100644
index 0000000..ffc03e3
--- /dev/null
+++ b/themes/openSUSE/help-boot/bg/opt::o_acpi.html
@@ -0,0 +1,23 @@
+<h3>
+<a name="o_acpi">Параметри към ядрото: acpi</a>
+</h3>
+
+<p>
+ACPI (Advanced Configuration and Power Interface) is a
+standard that defines power and configuration management interfaces
+between an operating system and the BIOS. By default, <em>acpi</em> is
+switched on when a BIOS is detected that is newer than from year
+2000. There are several commonly
+used parameters to control the behavior of ACPI:
+<ul>
+ <li><em>pci=noacpi</em> -- do not use ACPI to route PCI interrupts</li>
+ <li><em>acpi=oldboot</em> -- only the parts of ACPI that are relevant for booting remain activated</li>
+ <li><em>acpi=off</em> -- switch off ACPI completely</li>
+ <li><em>acpi=force</em> -- switch on ACPI even if your BIOS is dated before 2000</li>
+</ul>
+</p>
+
+<p>
+Especially on new computers, it replaces the old
+<a href="#o_apm">apm</a> system.
+</p>
diff --git a/themes/openSUSE/help-boot/bg/opt::o_apm.html b/themes/openSUSE/help-boot/bg/opt::o_apm.html
new file mode 100644
index 0000000..8d738b9
--- /dev/null
+++ b/themes/openSUSE/help-boot/bg/opt::o_apm.html
@@ -0,0 +1,21 @@
+<h3>
+<a name="o_apm">Параметри към ядрото: apm</a>
+</h3>
+
+<p>
+APM is one of the two power management strategies used on current
+computers. It is mainly used with laptops for functions like suspend
+to disk, but it may also be responsible for switching off the
+computer after power down. APM relies on a correct working BIOS. If
+the BIOS is broken, APM may have only limited use or even prevent the
+computer from working. Therefore, it may be switched off with the
+parameter
+<ul>
+ <li><em>apm=off</em> -- switch off APM completely</li>
+</ul>
+</p>
+
+<p>
+Some very new computers may take more advantage from the newer
+<a href="#o_acpi">ACPI</a>.
+</p>
diff --git a/themes/openSUSE/help-boot/bg/opt::o_ide.html b/themes/openSUSE/help-boot/bg/opt::o_ide.html
new file mode 100644
index 0000000..ee97cd1
--- /dev/null
+++ b/themes/openSUSE/help-boot/bg/opt::o_ide.html
@@ -0,0 +1,12 @@
+<h3>
+<a name="o_ide">Параметри към ядрото: ide</a>
+</h3>
+
+<p>
+IDE is, unlike SCSI, commonly used in most desktop workstations.
+To circumvent some hardware problems that occur with IDE systems, use the
+kernel parameter:
+<ul>
+ <li><em>ide=nodma</em> -- switch off DMA for IDE drives</li>
+</ul>
+</p>
diff --git a/themes/openSUSE/help-boot/bg/opt::o_splash.html b/themes/openSUSE/help-boot/bg/opt::o_splash.html
new file mode 100644
index 0000000..ad87837
--- /dev/null
+++ b/themes/openSUSE/help-boot/bg/opt::o_splash.html
@@ -0,0 +1,12 @@
+<h3>
+<a name="o_splash">Параметри към ядрото: splash</a>
+</h3>
+
+<p>
+The splash screen is the picture shown during system start-up.
+<ul>
+ <li><em>splash=0</em> -- The splash screen is switched off. This may be useful with very old monitors or if some error occurs.</li>
+ <li><em>splash=verbose</em> -- Activates splash, kernel and boot messages are still shown.</li>
+ <li><em>splash=silent</em> -- Activates splash, but no messages. Instead a progress bar is drawn.</li>
+</ul>
+</p>
diff --git a/themes/openSUSE/help-boot/bg/opt::profile.html b/themes/openSUSE/help-boot/bg/opt::profile.html
new file mode 100644
index 0000000..67af3b4
--- /dev/null
+++ b/themes/openSUSE/help-boot/bg/opt::profile.html
@@ -0,0 +1,8 @@
+<h3>
+<a name="profile">Избор на профил</a>
+</h3>
+
+<p>
+Press <em>@@@fkey_profile@@@</em> to select a profile. Your system will be started using the
+configuration saved in this profile.
+</p>
diff --git a/themes/openSUSE/help-boot/ca/navi.html b/themes/openSUSE/help-boot/ca/navi.html
new file mode 100644
index 0000000..33f2935
--- /dev/null
+++ b/themes/openSUSE/help-boot/ca/navi.html
@@ -0,0 +1 @@
+<p>Torna a <a href="#foobar">FOOBAR</a></p>
diff --git a/themes/openSUSE/help-boot/ca/opt.html b/themes/openSUSE/help-boot/ca/opt.html
new file mode 100644
index 0000000..564884b
--- /dev/null
+++ b/themes/openSUSE/help-boot/ca/opt.html
@@ -0,0 +1,12 @@
+<h3>
+<a name="opt">Opcions d'arrencada</a>
+</h3>
+
+<p>
+<ul>
+ <li><a href="#o_splash">splash</a> -- influence the behavior of the splash screen</li>
+ <li><a href="#o_apm">apm</a> -- toggle power management</li>
+ <li><a href="#o_acpi">acpi</a> -- advanced configuration and power interface</li>
+ <li><a href="#o_ide">ide</a> -- control the IDE subsystem</li>
+</ul>
+</p>
diff --git a/themes/openSUSE/help-boot/ca/opt::help.html b/themes/openSUSE/help-boot/ca/opt::help.html
new file mode 100644
index 0000000..43e2baf
--- /dev/null
+++ b/themes/openSUSE/help-boot/ca/opt::help.html
@@ -0,0 +1,25 @@
+<h3>
+<a name="help">Ús del sistema d'ajuda</a>
+</h3>
+
+<p>
+The boot loader online help is context sensitive. It gives information
+about the selected menu item or, if you are editing boot options,
+it tries to look up information about the option in which the cursor is
+positioned.
+</p>
+
+<p>
+Navigation Keys
+<ul>
+ <li><em>Fletxa amunt</em>: highlight previous link</li>
+ <li><em>Fletxa avall</em>: highlight next link</li>
+ <li><em>Fletxa esquerra</em>, <em>Retrocés</em>: return to previous topic</li>
+ <li><em>Fletxa dreta</em>, <em>Enter</em>, <em>Espai</em>: follow link</li>
+ <li><em>Re Pàg</em>: scroll up one page</li>
+ <li><em>Av Pàg</em>: scroll down one page</li>
+ <li><em>Inici</em>: go to page start</li>
+ <li><em>Fi</em>: go to page end</li>
+ <li><em>Esc</em>: leave help</li>
+</ul>
+</p>
diff --git a/themes/openSUSE/help-boot/ca/opt::keytable.html b/themes/openSUSE/help-boot/ca/opt::keytable.html
new file mode 100644
index 0000000..0d441df
--- /dev/null
+++ b/themes/openSUSE/help-boot/ca/opt::keytable.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="keytable">Selecció d'idioma i format de teclat</a>
+</h3>
+
+<p>
+Press <em>@@@fkey_lang@@@</em> to change language and keyboard layout the boot loader uses.
+</p>
diff --git a/themes/openSUSE/help-boot/ca/opt::o_acpi.html b/themes/openSUSE/help-boot/ca/opt::o_acpi.html
new file mode 100644
index 0000000..da7d00a
--- /dev/null
+++ b/themes/openSUSE/help-boot/ca/opt::o_acpi.html
@@ -0,0 +1,23 @@
+<h3>
+<a name="o_acpi">Opcions del nucli: acpi</a>
+</h3>
+
+<p>
+ACPI (Advanced Configuration and Power Interface) is a
+standard that defines power and configuration management interfaces
+between an operating system and the BIOS. By default, <em>acpi</em> is
+switched on when a BIOS is detected that is newer than from year
+2000. There are several commonly
+used parameters to control the behavior of ACPI:
+<ul>
+ <li><em>pci=noacpi</em> -- do not use ACPI to route PCI interrupts</li>
+ <li><em>acpi=oldboot</em> -- only the parts of ACPI that are relevant for booting remain activated</li>
+ <li><em>uacpi=off</em> -- switch off ACPI completely</li>
+ <li><em>acpi=force</em> -- switch on ACPI even if your BIOS is dated before 2000</li>
+</ul>
+</p>
+
+<p>
+Especially on new computers, it replaces the old
+<a href="#o_apm">apm</a> system.
+</p>
diff --git a/themes/openSUSE/help-boot/ca/opt::o_apm.html b/themes/openSUSE/help-boot/ca/opt::o_apm.html
new file mode 100644
index 0000000..38b902b
--- /dev/null
+++ b/themes/openSUSE/help-boot/ca/opt::o_apm.html
@@ -0,0 +1,21 @@
+<h3>
+<a name="o_apm">Opcions del nucli: apm</a>
+</h3>
+
+<p>
+APM is one of the two power management strategies used on current
+computers. It is mainly used with laptops for functions like suspend
+to disk, but it may also be responsible for switching off the
+computer after power down. APM relies on a correct working BIOS. If
+the BIOS is broken, APM may have only limited use or even prevent the
+computer from working. Therefore, it may be switched off with the
+parameter
+<ul>
+ <li><em>apm=off</em> -- switch off APM completely</li>
+</ul>
+</p>
+
+<p>
+Some very new computers may take more advantage from the newer
+<a href="#o_acpi">ACPI</a>.
+</p>
diff --git a/themes/openSUSE/help-boot/ca/opt::o_ide.html b/themes/openSUSE/help-boot/ca/opt::o_ide.html
new file mode 100644
index 0000000..e1d0bfd
--- /dev/null
+++ b/themes/openSUSE/help-boot/ca/opt::o_ide.html
@@ -0,0 +1,12 @@
+<h3>
+<a name="o_ide">Opcions del nucli: ide</a>
+</h3>
+
+<p>
+IDE is, unlike SCSI, commonly used in most desktop workstations.
+To circumvent some hardware problems that occur with IDE systems, use the
+kernel parameter:
+<ul>
+ <li><em>ide=nodma</em> -- switch off DMA for IDE drives</li>
+</ul>
+</p>
diff --git a/themes/openSUSE/help-boot/ca/opt::o_splash.html b/themes/openSUSE/help-boot/ca/opt::o_splash.html
new file mode 100644
index 0000000..c671f3e
--- /dev/null
+++ b/themes/openSUSE/help-boot/ca/opt::o_splash.html
@@ -0,0 +1,12 @@
+<h3>
+<a name="o_splash">Opcions del nucli: pantalla de presentació</a>
+</h3>
+
+<p>
+The splash screen is the picture shown during system start-up.
+<ul>
+ <li><em>splash=0</em> -- The splash screen is switched off. This may be useful with very old monitors or if some error occurs.</li>
+ <li><em>splash=verbose</em> -- Activates splash, kernel and boot messages are still shown.</li>
+ <li><em>splash=silent</em> -- Activates splash, but no messages. Instead a progress bar is drawn.</li>
+</ul>
+</p>
diff --git a/themes/openSUSE/help-boot/ca/opt::profile.html b/themes/openSUSE/help-boot/ca/opt::profile.html
new file mode 100644
index 0000000..cd7d871
--- /dev/null
+++ b/themes/openSUSE/help-boot/ca/opt::profile.html
@@ -0,0 +1,8 @@
+<h3>
+<a name="profile">Trieu el perfil</a>
+</h3>
+
+<p>
+Press <em>@@@fkey_profile@@@</em> to select a profile. Your system will be started using the
+configuration saved in this profile.
+</p>
diff --git a/themes/openSUSE/help-boot/cs/navi.html b/themes/openSUSE/help-boot/cs/navi.html
new file mode 100644
index 0000000..c6551da
--- /dev/null
+++ b/themes/openSUSE/help-boot/cs/navi.html
@@ -0,0 +1 @@
+<p>Návrat k <a href="#foobar">FOOBAR</a></p>
diff --git a/themes/openSUSE/help-boot/cs/opt.html b/themes/openSUSE/help-boot/cs/opt.html
new file mode 100644
index 0000000..3a1a1e4
--- /dev/null
+++ b/themes/openSUSE/help-boot/cs/opt.html
@@ -0,0 +1,12 @@
+<h3>
+<a name="opt">Parametry startu</a>
+</h3>
+
+<p>
+<ul>
+ <li><a href="#o_splash">splash</a> -- ovlivňuje chování úvodní obrazovky</li>
+ <li><a href="#o_apm">apm</a> -- zapíná správu napájení</li>
+ <li><a href="#o_acpi">acpi</a> -- pokročilé nastavení a rozhraní napájení</li>
+ <li><a href="#o_ide">ide</a> -- ovládá subsystém IDE</li>
+</ul>
+</p>
diff --git a/themes/openSUSE/help-boot/cs/opt::help.html b/themes/openSUSE/help-boot/cs/opt::help.html
new file mode 100644
index 0000000..fb85c90
--- /dev/null
+++ b/themes/openSUSE/help-boot/cs/opt::help.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="help">Používání nápovědy</a>
+</h3>
+
+<p>Nápověda zavaděče je závislá na obsahu. Poskytuje informace o zvolené nabídce nebo pokud editujete parametry jádra, snaží se poskytnout informace o volbě podle polohy kurzoru.</p>
+
+<p>Navigační klíče<ul><li><em>Šipka nahoru</em>: zvýraznit předchozí odkaz</li><li><em>Šipka dolů</em>:zvýraznit následující odkaz</li><li><em>Šipka vlevo</em>, <em>Backspace</em>: návrat k předchozímu tématu</li><li><em>Šipka vpravo</em>, <em>Enter</em>, <em>Mezerník</em>:následovat odkaz</li><li><em>Page Up</em>: o stránku nahoru</li><li><em>Page Down</em>: o stránku dolů</li><li><em>Home</em>: přejít na začátek stránky</li><li><em>End</em>: přejít na konec stránky</li><li><em>Esc</em>: opustit nápovědu</li></ul></p>
diff --git a/themes/openSUSE/help-boot/cs/opt::keytable.html b/themes/openSUSE/help-boot/cs/opt::keytable.html
new file mode 100644
index 0000000..1668701
--- /dev/null
+++ b/themes/openSUSE/help-boot/cs/opt::keytable.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="keytable">Výběr jazyka a rozložení klávesnice</a>
+</h3>
+
+<p>Stiskněte <em>@@@fkey_lang@@@</em> pro změnu jazyka a rozložení klávesnice, které používá zavaděč.</p>
diff --git a/themes/openSUSE/help-boot/cs/opt::o_acpi.html b/themes/openSUSE/help-boot/cs/opt::o_acpi.html
new file mode 100644
index 0000000..fc17369
--- /dev/null
+++ b/themes/openSUSE/help-boot/cs/opt::o_acpi.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="o_acpi">Parametry jádra: acpi</a>
+</h3>
+
+<p>ACPI (Advanced Configuration and Power Interface) je standard definující nastavení napájení a správu zařízení mezi operačním systémem a BIOSem. Ve výchozím nastavení je <em>acpi</em> zapnuto v případě, že jde o BIOS vydaný po roce 2000. Je zde několik parametrů kontrolujících chování ACPI: <ul><li><em>pci=noacpi</em> -- nepoužívat ACPI pro předávání PCI přerušení</li><li><em>acpi=oldboot</em> -- aktivní zůstane pouze ta část ACPI, která je potřebná pro start systému</li><li><em>acpi=off</em> -- zcela vypnout ACPI</li><li><em>acpi=force</em> -- zapnout ACPI i pro BIOS vydaný před rokem 2000</li></ul></p>
+
+<p>Zvláště na nových počítačích nahrazuje starší systém <a href="#o_apm">apm</a> systém.</p>
diff --git a/themes/openSUSE/help-boot/cs/opt::o_apm.html b/themes/openSUSE/help-boot/cs/opt::o_apm.html
new file mode 100644
index 0000000..aa6a406
--- /dev/null
+++ b/themes/openSUSE/help-boot/cs/opt::o_apm.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="o_apm">Parametry jádra: apm</a>
+</h3>
+
+<p>APM je jednou ze dvou dnešních strategií správy napájení. Používá se hlavně na noteboocích pro uspávání disků a podobně, může však zodpovídat i za vypínání počítače. APM je závislé na správně fungujícím BIOSu. Je-li BIOS nefunkční, mohou být funkce APM omezeny nebo může APM znemožnit funkci počítače. Lze proto vypnout parametrem <ul><li><em>apm=off</em> -- zcela vypnout APM</li></ul></p>
+
+<p>Některé nové počítače mohou s výhodou použít novější <a href="#o_acpi">ACPI</a>.</p>
diff --git a/themes/openSUSE/help-boot/cs/opt::o_ide.html b/themes/openSUSE/help-boot/cs/opt::o_ide.html
new file mode 100644
index 0000000..aea43c5
--- /dev/null
+++ b/themes/openSUSE/help-boot/cs/opt::o_ide.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="o_ide">Parametry jádra: ide</a>
+</h3>
+
+<p>IDE je na rozdíl od SCSI obvykle používáno na pracovních stanicích. V případě výskytu problémů s IDE systémem můžete použít jaderný parametr: <ul><li><em>ide=nodma</em> -- vypnout DMA pro IDE jednotky</li></ul></p>
diff --git a/themes/openSUSE/help-boot/cs/opt::o_splash.html b/themes/openSUSE/help-boot/cs/opt::o_splash.html
new file mode 100644
index 0000000..cd67c7c
--- /dev/null
+++ b/themes/openSUSE/help-boot/cs/opt::o_splash.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="o_splash">Parametry jádra: splash</a>
+</h3>
+
+<p>Splash screen je obrázek zobrazený během startu systému. <ul><li><em>splash=0</em> -- Splash obrazovka je vypnuta. To může být vhodné pro staré monitory nebo při chybě.</li><li><em>splash=verbose</em> -- Aktivuje splash obrazovku, zprávy jádra a spouštění jsou stále zobrazeny.</li><li><em>splash=silent</em> -- Aktivuje splash obrazovku, ale žádné zprávy nejsou zobrazeny. Místo toho je zobrazen ukazatel průběhu.</li></ul></p>
diff --git a/themes/openSUSE/help-boot/cs/opt::profile.html b/themes/openSUSE/help-boot/cs/opt::profile.html
new file mode 100644
index 0000000..787ee98
--- /dev/null
+++ b/themes/openSUSE/help-boot/cs/opt::profile.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="profile">Vybrat profil</a>
+</h3>
+
+<p>Stiskněte <em>@@@fkey_profile@@@</em> pro výběr profilu. Váš systém bude spuštěn s konfigurací uloženou v tomto profilu.</p>
diff --git a/themes/openSUSE/help-boot/da/navi.html b/themes/openSUSE/help-boot/da/navi.html
new file mode 100644
index 0000000..3f4fa96
--- /dev/null
+++ b/themes/openSUSE/help-boot/da/navi.html
@@ -0,0 +1 @@
+<p>Vend tilbage til <a href="#foobar">FOOBAR</a></p>
diff --git a/themes/openSUSE/help-boot/da/opt.html b/themes/openSUSE/help-boot/da/opt.html
new file mode 100644
index 0000000..c3a02a8
--- /dev/null
+++ b/themes/openSUSE/help-boot/da/opt.html
@@ -0,0 +1,12 @@
+<h3>
+<a name="opt">Boot-muligheder</a>
+</h3>
+
+<p>
+<ul>
+ <li><a href="#o_splash">opstartsbillede</a> -- påvirk opstartsbilledets opførsel</li>
+ <li><a href="#o_apm">apm</a> -- slå strømstyring til eller fra</li>
+ <li><a href="#o_acpi">acpi</a> -- avanceret konfiguration og strømgrænseflade (acpi)</li>
+ <li><a href="#o_ide">ide</a> -- kontrollerer IDE-subsystemet</li>
+</ul>
+</p>
diff --git a/themes/openSUSE/help-boot/da/opt::help.html b/themes/openSUSE/help-boot/da/opt::help.html
new file mode 100644
index 0000000..2a39f15
--- /dev/null
+++ b/themes/openSUSE/help-boot/da/opt::help.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="help">Brug af hjælpesystemet</a>
+</h3>
+
+<p>Bootloaderens onlinehjælp tilpasser sig emnet. Den viser information om det valgte menupunkt eller, hvis du er ved at redigere bootparametrene, så prøver den at finde information om parameteren ved markøren.</p>
+
+<p>Navigationstaster <ul><li><em>Pil op</em>: Fremhæv forrige link</li><li><em>Pil ned</em>: Fremhæv næste link</li><li><em>Pil til venstre</em>, <em>Backspace</em>: Vend tilbage til det forrige emne</li><li><em>Pil til højre</em>, <em>Enter</em>, <em>Mellemrum</em>: Følg link</li><li><em>Page Up</em>: Rul en side op</li><li><em>Page Down</em>: Rul en side nedad</li><li><em>Home</em>: Gå til sidens begyndelse</li><li><em>End</em>: gå til sidens slutning</li><li><em>Esc</em>: Forlad hjælpesystemet</li></ul></p>
diff --git a/themes/openSUSE/help-boot/da/opt::keytable.html b/themes/openSUSE/help-boot/da/opt::keytable.html
new file mode 100644
index 0000000..0874485
--- /dev/null
+++ b/themes/openSUSE/help-boot/da/opt::keytable.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="keytable">Valg af sprog og tastaturlayout</a>
+</h3>
+
+<p>Tryk <em>@@@fkey_lang@@@</em> for at ændre det sprog og tastaturlayout som bootloaderen bruger.</p>
diff --git a/themes/openSUSE/help-boot/da/opt::o_acpi.html b/themes/openSUSE/help-boot/da/opt::o_acpi.html
new file mode 100644
index 0000000..953c101
--- /dev/null
+++ b/themes/openSUSE/help-boot/da/opt::o_acpi.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="o_acpi">Kerneparametre: acpi</a>
+</h3>
+
+<p>ACPI (Advanced Configuration and Power Interface) er en standard, der definerer hvordan strømstyring og opsætningen af systemet foretages mellem operativsystemet og BIOS. Som standard vil <em>acpi</em> aktiveres, hvis en BIOS nyere end år 2000 bliver fundet. Der er adskillige ofte brugte parametre, der bruges til, at styre hvordan ACPI opfører sig: 
 <ul><li><em>pci=noacpi</em> -- anvend ikke ACPI til at route PCI-interrupts</li><li><em>acpi=oldboot</em> -- kun de dele af ACPI som er relevante for at boote forbliver aktiveret</li><li><em>acpi=off</em> -- slå ACPI fuldstændigt fra</li><li><em>acpi=force</em> -- slå ACPI til selv hvis din BIOS er fra før år 2000</li></ul></p>
+
+<p>Især på nyere computere erstatter den det gamle <a href="#o_apm">apm</a>-system.</p>
diff --git a/themes/openSUSE/help-boot/da/opt::o_apm.html b/themes/openSUSE/help-boot/da/opt::o_apm.html
new file mode 100644
index 0000000..0d34fdf
--- /dev/null
+++ b/themes/openSUSE/help-boot/da/opt::o_apm.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="o_apm">Kerneparametre: apm</a>
+</h3>
+
+<p>APM er en af de to strømstyringsstrategier, der bruges på moderne computere. Den bruges hovedsageligt på bærbare til funktioner såsom suspendering til harddisk, men den kan også være ansvarlig for at slukke computeren, efter du har bedt den om at lukke ned. APM er afhængig af en korrekt fungerende BIOS. Hvis BIOS er defekt på dette område, vil APM kun have begrænset effekt, eller måske endda forhindre din maskine i at fungere, som den skal. Det kan derfor slås fra med parametret 
<ul><li><em>apm=off</em> -- slå APM fuldstændigt fra</li></ul></p>
+
+<p>Visse meget nye computere kan have mere gavn af det nyere <a href="#o_acpi">ACPI</a>.</p>
diff --git a/themes/openSUSE/help-boot/da/opt::o_ide.html b/themes/openSUSE/help-boot/da/opt::o_ide.html
new file mode 100644
index 0000000..ca38d9d
--- /dev/null
+++ b/themes/openSUSE/help-boot/da/opt::o_ide.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="o_ide">Kerneparametre: ide</a>
+</h3>
+
+<p>IDE bruges, i modsætning til SCSI, ofte til skrivebordsarbejdsstationer. For at omgå nogle hardwareproblemer, der kan optræde med IDE-systemer, kan du bruge kerneparametren: <ul><li><em>ide=nodma</em> -- slå DMA fra for IDE-drev</li></ul></p>
diff --git a/themes/openSUSE/help-boot/da/opt::o_splash.html b/themes/openSUSE/help-boot/da/opt::o_splash.html
new file mode 100644
index 0000000..a7a5df6
--- /dev/null
+++ b/themes/openSUSE/help-boot/da/opt::o_splash.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="o_splash">Kerneparametre: splash</a>
+</h3>
+
+<p>Opstartsbilledet, er billedet du ser, mens systemet starter op.<ul><li><em>splash=0</em> -- Opstartsbilledet er slået fra. Dette kan være nyttigt på meget gamle skærme eller hvis der opstår en fejl.</li><li><em>splash=verbose</em> -- Aktiverer opstartsbillede. Kerne- og boot-beskeder vises stadig.</li><li><em>splash=silent</em> -- Aktiverer opstartsbilledet, men uden beskeder. I stedet vises en fremgangslinje.</li></ul></p>
diff --git a/themes/openSUSE/help-boot/da/opt::profile.html b/themes/openSUSE/help-boot/da/opt::profile.html
new file mode 100644
index 0000000..00f9ce8
--- /dev/null
+++ b/themes/openSUSE/help-boot/da/opt::profile.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="profile">Vælg profil</a>
+</h3>
+
+<p>Tryk <em>@@@fkey_profile@@@</em> for at vælge profil. Dit system vil blive startet med den opsætning, der er gemt i denne profil.</p>
diff --git a/themes/openSUSE/help-boot/de/navi.html b/themes/openSUSE/help-boot/de/navi.html
new file mode 100644
index 0000000..29b0bb8
--- /dev/null
+++ b/themes/openSUSE/help-boot/de/navi.html
@@ -0,0 +1 @@
+<p>Zurück zu <a href="#foobar">FOOBAR</a></p>
diff --git a/themes/openSUSE/help-boot/de/opt.html b/themes/openSUSE/help-boot/de/opt.html
new file mode 100644
index 0000000..94f5aa3
--- /dev/null
+++ b/themes/openSUSE/help-boot/de/opt.html
@@ -0,0 +1,12 @@
+<h3>
+<a name="opt">Boot-Optionen</a>
+</h3>
+
+<p>
+<ul>
+ <li><a href="#o_splash">splash</a> -- das Verhalten des Splash-Bildschirms beeinflussen</li>
+ <li><a href="#o_apm">apm</a> -- Energieverwaltung umschalten</li>
+ <li><a href="#o_acpi">acpi</a> -- Erweiterte Konfigurations- und Energieschnittstelle</li>
+ <li><a href="#o_ide">ide</a> -- das IDE-Subsystem steuern</li>
+</ul>
+</p>
diff --git a/themes/openSUSE/help-boot/de/opt::help.html b/themes/openSUSE/help-boot/de/opt::help.html
new file mode 100644
index 0000000..592063f
--- /dev/null
+++ b/themes/openSUSE/help-boot/de/opt::help.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="help">Hilfesystem verwenden</a>
+</h3>
+
+<p>Die Online-Hilfe des Boot-Laders ist kontextspezifisch. Sie gibt Informationen über das ausgewählte Menüelement oder sie versucht, bei Bearbeitung der Boot-Optionen, Informationen über die Option zu suchen, auf der der Mauszeiger positioniert ist.</p>
+
+<p>Navigationstasten <ul><li><em>Aufwärtspfeil</em>: vorherigen Link hervorheben</li><li><em>Abwärtspfeil</em>: nächsten Link hervorheben</li><li><em>Linkspfeil</em>, <em>Rücktaste</em>: zum vorherigen Thema zurückkehren</li><li><em>Rechtspfeil</em>, <em>Eingabe</em>, <em>Leerzeichen</em>: Link folgen</li><li><em>Bild auf</em>: eine Seite nach oben blättern</li><li><em>Bild ab</em>: eine Seite nach unten blättern</li><li><em>Pos 1</em>: zur Startseite gehen</li><li><em>Ende</em>: zum Seitenende gehen</li><li><em>Esc</em>: Hilfe verlassen</li></ul></p>
diff --git a/themes/openSUSE/help-boot/de/opt::keytable.html b/themes/openSUSE/help-boot/de/opt::keytable.html
new file mode 100644
index 0000000..5b9ceef
--- /dev/null
+++ b/themes/openSUSE/help-boot/de/opt::keytable.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="keytable">Auswahl der Sprache und Tastaturbelegung</a>
+</h3>
+
+<p>Drücken Sie <em>@@@fkey_lang@@@</em>, um die Sprache und Tastaturbelegung, die der Boot-Lader verwendet, zu wechseln.</p>
diff --git a/themes/openSUSE/help-boot/de/opt::o_acpi.html b/themes/openSUSE/help-boot/de/opt::o_acpi.html
new file mode 100644
index 0000000..d039510
--- /dev/null
+++ b/themes/openSUSE/help-boot/de/opt::o_acpi.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="o_acpi">Kernel-Optionen: acpi</a>
+</h3>
+
+<p>ACPI (Advanced Configuration and Power Interface) ist ein Standard, der die Energie- und Konfigurationsverwaltungsschnittstellen zwischen einem Betriebssystem und dem BIOS festlegt. Standardmäßig ist <em>acpi</em> aktiviert, wenn ein BIOS erkannt wird, welches nach 2000 datiert ist. Es gibt mehrere gebräuchliche Parameter zur Steuerung des ACPI: <ul><li><em>pci=noacpi</em> -- benutzen Sie ACPI nicht, um PCI-Interrupts zu routen</li><li><em>acpi=oldboot</em> -- nur die für das Hochfahren relevanten Teile von ACPI bleiben aktiviert</li><li><em>acpi=off</em> -- ACPI komplett abschalten</li><li><em>acpi=force</em> -- ACPI anschalten, selbst wenn Ihr BIOS vor 2000 datiert ist</li></ul></p>
+
+<p>Besonders auf neuen Computern wird es das alte <a href="#o_apm">apm</a>-System ersetzen.</p>
diff --git a/themes/openSUSE/help-boot/de/opt::o_apm.html b/themes/openSUSE/help-boot/de/opt::o_apm.html
new file mode 100644
index 0000000..f410942
--- /dev/null
+++ b/themes/openSUSE/help-boot/de/opt::o_apm.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="o_apm">Kernel-Optionen: apm</a>
+</h3>
+
+<p>APM ist eine der beiden Energieverwaltungsstrategien, die auf aktuellen Computern verwendet wird. Es wird hauptsächlich auf Laptops für Funktionen wie Suspend-to-Disk verwendet, kann aber auch für das Abschalten des Computers nach dem Herunterfahren verantwortlich sein. APM ist von einem korrekt funktionierenden BIOS abhängig. Bei einem fehlerhaften BIOS funktioniert das APM evtl. nur eingeschränkt, möglicherweise funktioniert der Computer überhaupt nicht mehr. Daher kann es mit dem Parameter <ul><li><em>apm=off</em> -- APM komplett abschalten</li></ul> deaktiviert werden.</p>
+
+<p>Einige sehr neue Computer können vom neueren <a href="#o_acpi">ACPI</a> profitieren.</p>
diff --git a/themes/openSUSE/help-boot/de/opt::o_ide.html b/themes/openSUSE/help-boot/de/opt::o_ide.html
new file mode 100644
index 0000000..6dc1c12
--- /dev/null
+++ b/themes/openSUSE/help-boot/de/opt::o_ide.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="o_ide">Kernel-Optionen: ide</a>
+</h3>
+
+<p>IDE wird, im Gegensatz zu SCSI, auf den meisten Desktop-Arbeitsstationen verwendet. Zur Umgehung einiger Hardwareprobleme, die mit IDE-Systemen auftreten, verwenden Sie den Kernel-Parameter: <ul><li><em>ide=nodma</em> -- DMA für IDE-Laufwerke abschalten</li></ul></p>
diff --git a/themes/openSUSE/help-boot/de/opt::o_splash.html b/themes/openSUSE/help-boot/de/opt::o_splash.html
new file mode 100644
index 0000000..fba1da9
--- /dev/null
+++ b/themes/openSUSE/help-boot/de/opt::o_splash.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="o_splash">Kernel-Optionen: splash</a>
+</h3>
+
+<p>Der Splash-Bildschirm ist das während des Systemstarts angezeigte Bild. <ul><li><em>splash=0</em> -- Der Splash-Bildschirm ist abgeschaltet. Dies kann bei bei sehr alten Monitoren nützlich sein oder wenn einige Fehler auftreten.</li><li><em>splash=verbose</em> -- Splash wird aktiviert; Kernel- und Boot-Nachrichten werden nach wie vor angezeigt.</li><li><em>splash=silent</em> -- Splash wird aktiviert, aber keine Nachrichten. Anstelle dessen wird ein Fortschrittsbalken gezeichnet.</li></ul></p>
diff --git a/themes/openSUSE/help-boot/de/opt::profile.html b/themes/openSUSE/help-boot/de/opt::profile.html
new file mode 100644
index 0000000..258e867
--- /dev/null
+++ b/themes/openSUSE/help-boot/de/opt::profile.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="profile">Profil auswählen</a>
+</h3>
+
+<p>Drücken Sie <em>@@@fkey_profile@@@</em>, um ein Profil auszuwählen. Ihr System wird mit der in diesem Profil gespeicherten Konfiguration gestartet.</p>
diff --git a/themes/openSUSE/help-boot/el/navi.html b/themes/openSUSE/help-boot/el/navi.html
new file mode 100644
index 0000000..ce04575
--- /dev/null
+++ b/themes/openSUSE/help-boot/el/navi.html
@@ -0,0 +1 @@
+<p>Επιστροφή στο <a href="#foobar">FOOBAR</a></p>
diff --git a/themes/openSUSE/help-boot/el/opt.html b/themes/openSUSE/help-boot/el/opt.html
new file mode 100644
index 0000000..f99f9e8
--- /dev/null
+++ b/themes/openSUSE/help-boot/el/opt.html
@@ -0,0 +1,12 @@
+<h3>
+<a name="opt">Ρυθμίσεις Εκκίνησης</a>
+</h3>
+
+<p>
+<ul>
+ <li><a href="#o_splash">οθόνη εκκίνησης</a> -- influence the behavior of the splash screen</li>
+ <li><a href="#o_apm">apm</a> -- toggle power management</li>
+ <li><a href="#o_acpi">acpi</a> -- advanced configuration and power interface</li>
+ <li><a href="#o_ide">ide</a> -- control the IDE subsystem</li>
+</ul>
+</p>
diff --git a/themes/openSUSE/help-boot/el/opt::help.html b/themes/openSUSE/help-boot/el/opt::help.html
new file mode 100644
index 0000000..b81a561
--- /dev/null
+++ b/themes/openSUSE/help-boot/el/opt::help.html
@@ -0,0 +1,25 @@
+<h3>
+<a name="help">Χρησιμοποιώντας το Σύστημα Βοήθειας</a>
+</h3>
+
+<p>
+The boot loader online help is context sensitive. It gives information
+about the selected menu item or, if you are editing boot options,
+it tries to look up information about the option in which the cursor is
+positioned.
+</p>
+
+<p>
+Navigation Keys
+<ul>
+ <li><em>Πάνω Βέλος</em>: highlight previous link</li>
+ <li><em>Κάτω Βέλος</em>: highlight next link</li>
+ <li><em>Αριστερό Βέλος</em>, <em>Πίσω</em>: return to previous topic</li>
+ <li><em>Δεξιό Βέλος</em>, <em>Επιστροφή</em>, <em>Κενό</em>: follow link</li>
+ <li><em>Πάνω Σελίδα</em>: scroll up one page</li>
+ <li><em>Κάτω Σελίδα</em>: scroll down one page</li>
+ <li><em>Αρχή</em>: go to page start</li>
+ <li><em>Τέλος</em>: go to page end</li>
+ <li><em>Αποχώρηση</em>: leave help</li>
+</ul>
+</p>
diff --git a/themes/openSUSE/help-boot/el/opt::keytable.html b/themes/openSUSE/help-boot/el/opt::keytable.html
new file mode 100644
index 0000000..4ef087f
--- /dev/null
+++ b/themes/openSUSE/help-boot/el/opt::keytable.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="keytable">Επιλογή Γλώσσας και Εμφάνισης Πληκτρολογίου</a>
+</h3>
+
+<p>
+Press <em>@@@fkey_lang@@@</em> to change language and keyboard layout the boot loader uses.
+</p>
diff --git a/themes/openSUSE/help-boot/el/opt::o_acpi.html b/themes/openSUSE/help-boot/el/opt::o_acpi.html
new file mode 100644
index 0000000..d11ee7e
--- /dev/null
+++ b/themes/openSUSE/help-boot/el/opt::o_acpi.html
@@ -0,0 +1,23 @@
+<h3>
+<a name="o_acpi">Επιλογές Πυρήνα: acpi</a>
+</h3>
+
+<p>
+ACPI (Advanced Configuration and Power Interface) is a
+standard that defines power and configuration management interfaces
+between an operating system and the BIOS. By default, <em>acpi</em> is
+switched on when a BIOS is detected that is newer than from year
+2000. There are several commonly
+used parameters to control the behavior of ACPI:
+<ul>
+ <li><em>pci=noacpi</em> -- do not use ACPI to route PCI interrupts</li>
+ <li><em>acpi=oldboot</em> -- only the parts of ACPI that are relevant for booting remain activated</li>
+ <li><em>acpi=off</em> -- switch off ACPI completely</li>
+ <li><em>acpi=force</em> -- switch on ACPI even if your BIOS is dated before 2000</li>
+</ul>
+</p>
+
+<p>
+Especially on new computers, it replaces the old
+<a href="#o_apm">apm</a> system.
+</p>
diff --git a/themes/openSUSE/help-boot/el/opt::o_apm.html b/themes/openSUSE/help-boot/el/opt::o_apm.html
new file mode 100644
index 0000000..4f5a096
--- /dev/null
+++ b/themes/openSUSE/help-boot/el/opt::o_apm.html
@@ -0,0 +1,21 @@
+<h3>
+<a name="o_apm">Επιλογές Πυρήνα: apm</a>
+</h3>
+
+<p>
+APM is one of the two power management strategies used on current
+computers. It is mainly used with laptops for functions like suspend
+to disk, but it may also be responsible for switching off the
+computer after power down. APM relies on a correct working BIOS. If
+the BIOS is broken, APM may have only limited use or even prevent the
+computer from working. Therefore, it may be switched off with the
+parameter
+<ul>
+ <li><em>apm=off</em> -- switch off APM completely</li>
+</ul>
+</p>
+
+<p>
+Some very new computers may take more advantage from the newer
+<a href="#o_acpi">ACPI</a>.
+</p>
diff --git a/themes/openSUSE/help-boot/el/opt::o_ide.html b/themes/openSUSE/help-boot/el/opt::o_ide.html
new file mode 100644
index 0000000..ad39a68
--- /dev/null
+++ b/themes/openSUSE/help-boot/el/opt::o_ide.html
@@ -0,0 +1,12 @@
+<h3>
+<a name="o_ide">Επιλογές Πυρήνα: ide</a>
+</h3>
+
+<p>
+IDE is, unlike SCSI, commonly used in most desktop workstations.
+To circumvent some hardware problems that occur with IDE systems, use the
+kernel parameter:
+<ul>
+ <li><em>ide=nodma</em> -- switch off DMA for IDE drives</li>
+</ul>
+</p>
diff --git a/themes/openSUSE/help-boot/el/opt::o_splash.html b/themes/openSUSE/help-boot/el/opt::o_splash.html
new file mode 100644
index 0000000..9af9f8e
--- /dev/null
+++ b/themes/openSUSE/help-boot/el/opt::o_splash.html
@@ -0,0 +1,12 @@
+<h3>
+<a name="o_splash">Επιλογές Πυρήνα: οθόνη εκκίνησης</a>
+</h3>
+
+<p>
+The splash screen is the picture shown during system start-up.
+<ul>
+ <li><em>splash=0</em> -- The splash screen is switched off. This may be useful with very old monitors or if some error occurs.</li>
+ <li><em>splash=verbose</em> -- Activates splash, kernel and boot messages are still shown.</li>
+ <li><em>splash=silent</em> -- Activates splash, but no messages. Instead a progress bar is drawn.</li>
+</ul>
+</p>
diff --git a/themes/openSUSE/help-boot/el/opt::profile.html b/themes/openSUSE/help-boot/el/opt::profile.html
new file mode 100644
index 0000000..b4a75ae
--- /dev/null
+++ b/themes/openSUSE/help-boot/el/opt::profile.html
@@ -0,0 +1,8 @@
+<h3>
+<a name="profile">Επιλέξτε Προφίλ</a>
+</h3>
+
+<p>
+Press <em>@@@fkey_profile@@@</em> to select a profile. Your system will be started using the
+configuration saved in this profile.
+</p>
diff --git a/themes/openSUSE/help-boot/en/navi.html b/themes/openSUSE/help-boot/en/navi.html
new file mode 100644
index 0000000..b4f8211
--- /dev/null
+++ b/themes/openSUSE/help-boot/en/navi.html
@@ -0,0 +1,3 @@
+<p>
+Return to <a href="#foobar">FOOBAR</a>
+</p>
diff --git a/themes/openSUSE/help-boot/en/opt.html b/themes/openSUSE/help-boot/en/opt.html
new file mode 100644
index 0000000..89ba923
--- /dev/null
+++ b/themes/openSUSE/help-boot/en/opt.html
@@ -0,0 +1,12 @@
+<h3>
+<a name="opt">Boot Options</a>
+</h3>
+
+<p>
+<ul>
+ <li><a href="#o_splash">splash</a> -- influence the behavior of the splash screen</li>
+ <li><a href="#o_apm">apm</a> -- toggle power management</li>
+ <li><a href="#o_acpi">acpi</a> -- advanced configuration and power interface</li>
+ <li><a href="#o_ide">ide</a> -- control the IDE subsystem</li>
+</ul>
+</p>
diff --git a/themes/openSUSE/help-boot/en/opt::help.html b/themes/openSUSE/help-boot/en/opt::help.html
new file mode 100644
index 0000000..d7093f6
--- /dev/null
+++ b/themes/openSUSE/help-boot/en/opt::help.html
@@ -0,0 +1,25 @@
+<h3>
+<a name="help">Using the Help System</a>
+</h3>
+
+<p>
+The boot loader online help is context sensitive. It gives information
+about the selected menu item or, if you are editing boot options,
+it tries to look up information about the option in which the cursor is
+positioned.
+</p>
+
+<p>
+Navigation Keys
+<ul>
+ <li><em>Up Arrow</em>: highlight previous link</li>
+ <li><em>Down Arrow</em>: highlight next link</li>
+ <li><em>Left Arrow</em>, <em>Backspace</em>: return to previous topic</li>
+ <li><em>Right Arrow</em>, <em>Enter</em>, <em>Space</em>: follow link</li>
+ <li><em>Page Up</em>: scroll up one page</li>
+ <li><em>Page Down</em>: scroll down one page</li>
+ <li><em>Home</em>: go to page start</li>
+ <li><em>End</em>: go to page end</li>
+ <li><em>Esc</em>: leave help</li>
+</ul>
+</p>
diff --git a/themes/openSUSE/help-boot/en/opt::keytable.html b/themes/openSUSE/help-boot/en/opt::keytable.html
new file mode 100644
index 0000000..91b9ab9
--- /dev/null
+++ b/themes/openSUSE/help-boot/en/opt::keytable.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="keytable">Language and Keyboard Layout Selection</a>
+</h3>
+
+<p>
+Press <em>@@@fkey_lang@@@</em> to change language and keyboard layout the boot loader uses.
+</p>
diff --git a/themes/openSUSE/help-boot/en/opt::o_acpi.html b/themes/openSUSE/help-boot/en/opt::o_acpi.html
new file mode 100644
index 0000000..2991c6c
--- /dev/null
+++ b/themes/openSUSE/help-boot/en/opt::o_acpi.html
@@ -0,0 +1,23 @@
+<h3>
+<a name="o_acpi">Kernel Options: acpi</a>
+</h3>
+
+<p>
+ACPI (Advanced Configuration and Power Interface) is a
+standard that defines power and configuration management interfaces
+between an operating system and the BIOS. By default, <em>acpi</em> is
+switched on when a BIOS is detected that is newer than from year
+2000. There are several commonly
+used parameters to control the behavior of ACPI:
+<ul>
+ <li><em>pci=noacpi</em> -- do not use ACPI to route PCI interrupts</li>
+ <li><em>acpi=oldboot</em> -- only the parts of ACPI that are relevant for booting remain activated</li>
+ <li><em>acpi=off</em> -- switch off ACPI completely</li>
+ <li><em>acpi=force</em> -- switch on ACPI even if your BIOS is dated before 2000</li>
+</ul>
+</p>
+
+<p>
+Especially on new computers, it replaces the old
+<a href="#o_apm">apm</a> system.
+</p>
diff --git a/themes/openSUSE/help-boot/en/opt::o_apm.html b/themes/openSUSE/help-boot/en/opt::o_apm.html
new file mode 100644
index 0000000..6a7f1a0
--- /dev/null
+++ b/themes/openSUSE/help-boot/en/opt::o_apm.html
@@ -0,0 +1,21 @@
+<h3>
+<a name="o_apm">Kernel Options: apm</a>
+</h3>
+
+<p>
+APM is one of the two power management strategies used on current
+computers. It is mainly used with laptops for functions like suspend
+to disk, but it may also be responsible for switching off the
+computer after power down. APM relies on a correct working BIOS. If
+the BIOS is broken, APM may have only limited use or even prevent the
+computer from working. Therefore, it may be switched off with the
+parameter
+<ul>
+ <li><em>apm=off</em> -- switch off APM completely</li>
+</ul>
+</p>
+
+<p>
+Some very new computers may take more advantage from the newer
+<a href="#o_acpi">ACPI</a>.
+</p>
diff --git a/themes/openSUSE/help-boot/en/opt::o_ide.html b/themes/openSUSE/help-boot/en/opt::o_ide.html
new file mode 100644
index 0000000..0d95eb4
--- /dev/null
+++ b/themes/openSUSE/help-boot/en/opt::o_ide.html
@@ -0,0 +1,12 @@
+<h3>
+<a name="o_ide">Kernel Options: ide</a>
+</h3>
+
+<p>
+IDE is, unlike SCSI, commonly used in most desktop workstations.
+To circumvent some hardware problems that occur with IDE systems, use the
+kernel parameter:
+<ul>
+ <li><em>ide=nodma</em> -- switch off DMA for IDE drives</li>
+</ul>
+</p>
diff --git a/themes/openSUSE/help-boot/en/opt::o_splash.html b/themes/openSUSE/help-boot/en/opt::o_splash.html
new file mode 100644
index 0000000..3028141
--- /dev/null
+++ b/themes/openSUSE/help-boot/en/opt::o_splash.html
@@ -0,0 +1,12 @@
+<h3>
+<a name="o_splash">Kernel Options: splash</a>
+</h3>
+
+<p>
+The splash screen is the picture shown during system start-up.
+<ul>
+ <li><em>splash=0</em> -- The splash screen is switched off. This may be useful with very old monitors or if some error occurs.</li>
+ <li><em>splash=verbose</em> -- Activates splash, kernel and boot messages are still shown.</li>
+ <li><em>splash=silent</em> -- Activates splash, but no messages. Instead a progress bar is drawn.</li>
+</ul>
+</p>
diff --git a/themes/openSUSE/help-boot/en/opt::profile.html b/themes/openSUSE/help-boot/en/opt::profile.html
new file mode 100644
index 0000000..2a52ef3
--- /dev/null
+++ b/themes/openSUSE/help-boot/en/opt::profile.html
@@ -0,0 +1,8 @@
+<h3>
+<a name="profile">Choose Profile</a>
+</h3>
+
+<p>
+Press <em>@@@fkey_profile@@@</em> to select a profile. Your system will be started using the
+configuration saved in this profile.
+</p>
diff --git a/themes/openSUSE/help-boot/es/navi.html b/themes/openSUSE/help-boot/es/navi.html
new file mode 100644
index 0000000..9bf0272
--- /dev/null
+++ b/themes/openSUSE/help-boot/es/navi.html
@@ -0,0 +1 @@
+<p>Volver a <a href="#foobar">FOOBAR</a></p>
diff --git a/themes/openSUSE/help-boot/es/opt.html b/themes/openSUSE/help-boot/es/opt.html
new file mode 100644
index 0000000..1043ca7
--- /dev/null
+++ b/themes/openSUSE/help-boot/es/opt.html
@@ -0,0 +1,12 @@
+<h3>
+<a name="opt">Opciones de arranque</a>
+</h3>
+
+<p>
+<ul>
+ <li><a href="#o_splash">pantalla inicial</a> -- influye en el comportamiento de la pantalla inicial</li>
+ <li><a href="#o_apm">apm</a> -- alterna la gestión de la energía</li>
+ <li><a href="#o_acpi">acpi</a> -- interfaz avanzada de configuración y energía (ACPI)</li>
+ <li><a href="#o_ide">ide</a> -- controla el subsistema IDE</li>
+</ul>
+</p>
diff --git a/themes/openSUSE/help-boot/es/opt::help.html b/themes/openSUSE/help-boot/es/opt::help.html
new file mode 100644
index 0000000..62f34b2
--- /dev/null
+++ b/themes/openSUSE/help-boot/es/opt::help.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="help">Uso del sistema de ayuda</a>
+</h3>
+
+<p>La ayuda en línea del cargador de arranque es contextual. Proporciona información sobre el elemento de menú seleccionado o, si se están modificando las opciones de arranque, intenta buscar información sobre la opción en la que está situado el cursor.</p>
+
+<p>Teclas de navegación <ul><li><em>Flecha arriba</em>: resalta el enlace anterior</li><li><em>Flecha abajo</em>: resalta el enlace siguiente</li><li><em>Flecha a la izquierda</em>, <em>Retroceso</em>: vuelve al tema anterior</li><li><em>Flecha a la derecha</em>, <em>Intro</em>, <em>Espacio</em>: sigue el enlace</li><li><em>Re Pág</em>: sube una página</li><li><em>Av Pág</em>: baja una página</li><li><em>Inicio</em>: se dirige al inicio de la página</li><li><em>Fin</em>: se dirige al final de la página</li><li><em>Esc</em>: sale de la ayuda</li></ul></p>
diff --git a/themes/openSUSE/help-boot/es/opt::keytable.html b/themes/openSUSE/help-boot/es/opt::keytable.html
new file mode 100644
index 0000000..e6a588a
--- /dev/null
+++ b/themes/openSUSE/help-boot/es/opt::keytable.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="keytable">Selección de idioma y distribución de teclado</a>
+</h3>
+
+<p>Pulse <em>@@@fkey_lang@@@</em> para cambiar el idioma y la distribución del teclado que utilizará el cargador de arranque.</p>
diff --git a/themes/openSUSE/help-boot/es/opt::o_acpi.html b/themes/openSUSE/help-boot/es/opt::o_acpi.html
new file mode 100644
index 0000000..a63cedb
--- /dev/null
+++ b/themes/openSUSE/help-boot/es/opt::o_acpi.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="o_acpi">Opciones del kernel: acpi</a>
+</h3>
+
+<p>ACPI (interfaz avanzada de configuración y energía) es un estándar que define las interfaces de gestión de la configuración y la energía entre un sistema operativo y la BIOS. Por defecto, <em>acpi</em> se activa cuando se detecta que la BIOS es posterior al año 2000. Habitualmente, se utilizan varios parámetros para controlar el comportamiento de ACPI: <ul><li><em>pci=noacpi</em> -- no utiliza ACPI para asignar las interrupciones PCI</li><li><em>acpi=oldboot</em> -- sólo permanecen activadas las partes de ACPI que son importantes para el arranque</li><li><em>acpi=off</em> -- desactiva ACPI por completo</li><li><em>acpi=force</em> -- activa ACPI incluso si la BIOS es anterior al año 2000</li></ul></p>
+
+<p>Especialmente en equipos nuevos, sustituye al sistema <a href="#o_apm">apm</a> antiguo.</p>
diff --git a/themes/openSUSE/help-boot/es/opt::o_apm.html b/themes/openSUSE/help-boot/es/opt::o_apm.html
new file mode 100644
index 0000000..1308d29
--- /dev/null
+++ b/themes/openSUSE/help-boot/es/opt::o_apm.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="o_apm">Opciones del kernel: apm</a>
+</h3>
+
+<p>APM es una de las dos estrategias de gestión de la energía que se utiliza en los equipos actuales. Se utiliza principalmente en portátiles para funciones como la suspensión a disco, pero también puede ser responsable de apagar el equipo cuando se corta la alimentación. APM se fundamenta en un funcionamiento correcto de la BIOS. Si la BIOS está dañada, puede que APM tenga un uso limitado, o que incluso impida que el equipo funcione. Por lo tanto, es posible desactivarlo con el parámetro <ul><li><em>apm=off</em> -- desactiva APM por completo</li></ul></p>
+
+<p>Algunos equipos muy nuevos pueden aprovechar mejor el <a href="#o_acpi">ACPI</a> más reciente.</p>
diff --git a/themes/openSUSE/help-boot/es/opt::o_ide.html b/themes/openSUSE/help-boot/es/opt::o_ide.html
new file mode 100644
index 0000000..bfa1b9e
--- /dev/null
+++ b/themes/openSUSE/help-boot/es/opt::o_ide.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="o_ide">Opciones del kernel: ide</a>
+</h3>
+
+<p>IDE, a diferencia de SCSI, se utiliza en la mayoría de las estaciones de trabajo de escritorio. Para evitar algunos problemas de hardware que se producen con los sistemas IDE, utilice el parámetro del kernel: <ul><li><em>ide=nodma</em> -- desactiva DMA para las unidades IDE</li></ul></p>
diff --git a/themes/openSUSE/help-boot/es/opt::o_splash.html b/themes/openSUSE/help-boot/es/opt::o_splash.html
new file mode 100644
index 0000000..d66226a
--- /dev/null
+++ b/themes/openSUSE/help-boot/es/opt::o_splash.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="o_splash">Opciones del kernel: pantalla inicial</a>
+</h3>
+
+<p>La pantalla inicial es la imagen que se muestra durante el inicio del sistema. <ul><li><em>splash=0</em> -- la pantalla inicial se desactiva. Esto puede ser útil en monitores muy antiguos o si se produce algún error.</li><li><em>splash=verbose</em> -- activa la pantalla inicial y se siguen mostrando los mensajes del kernel y de arranque.</li><li><em>splash=silent</em> -- activa la pantalla inicial, pero no los mensajes. En su lugar, se muestra una barra de progreso.</li></ul></p>
diff --git a/themes/openSUSE/help-boot/es/opt::profile.html b/themes/openSUSE/help-boot/es/opt::profile.html
new file mode 100644
index 0000000..dcb2540
--- /dev/null
+++ b/themes/openSUSE/help-boot/es/opt::profile.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="profile">Elegir perfil</a>
+</h3>
+
+<p>Pulse <em>@@@fkey_profile@@@</em> para seleccionar un perfil. El sistema se iniciará usando la configuración guardada en este perfil.</p>
diff --git a/themes/openSUSE/help-boot/et/navi.html b/themes/openSUSE/help-boot/et/navi.html
new file mode 100644
index 0000000..b726302
--- /dev/null
+++ b/themes/openSUSE/help-boot/et/navi.html
@@ -0,0 +1 @@
+<p>Tagasi <a href="#foobar">FOOBAR</a> juurde</p>
diff --git a/themes/openSUSE/help-boot/et/opt.html b/themes/openSUSE/help-boot/et/opt.html
new file mode 100644
index 0000000..67d5361
--- /dev/null
+++ b/themes/openSUSE/help-boot/et/opt.html
@@ -0,0 +1,12 @@
+<h3>
+<a name="opt">Alglaadimise sätted</a>
+</h3>
+
+<p>
+<ul>
+ <li><a href="#o_splash">splash</a> -- influence the behavior of the splash screen</li>
+ <li><a href="#o_apm">apm</a> -- toggle power management</li>
+ <li><a href="#o_acpi">acpi</a> -- advanced configuration and power interface</li>
+ <li><a href="#o_ide">ide</a> -- control the IDE subsystem</li>
+</ul>
+</p>
diff --git a/themes/openSUSE/help-boot/et/opt::help.html b/themes/openSUSE/help-boot/et/opt::help.html
new file mode 100644
index 0000000..5766620
--- /dev/null
+++ b/themes/openSUSE/help-boot/et/opt::help.html
@@ -0,0 +1,25 @@
+<h3>
+<a name="help">Abisüsteemi kasutamine</a>
+</h3>
+
+<p>
+The boot loader online help is context sensitive. It gives information
+about the selected menu item or, if you are editing boot options,
+it tries to look up information about the option in which the cursor is
+positioned.
+</p>
+
+<p>
+Navigation Keys
+<ul>
+ <li><em>Nool üles</em>: highlight previous link</li>
+ <li><em>Nool alla</em>: highlight next link</li>
+ <li><em>Nool vasakule</em>, <em>Backspace</em>: return to previous topic</li>
+ <li><em>Nool paremale</em>, <em>Enter</em>, <em>Tühik</em>: follow link</li>
+ <li><em>PgUp</em>: scroll up one page</li>
+ <li><em>PgDn</em>: scroll down one page</li>
+ <li><em>Home</em>: go to page start</li>
+ <li><em>End</em>: go to page end</li>
+ <li><em>Esc</em>: leave help</li>
+</ul>
+</p>
diff --git a/themes/openSUSE/help-boot/et/opt::keytable.html b/themes/openSUSE/help-boot/et/opt::keytable.html
new file mode 100644
index 0000000..4d5991b
--- /dev/null
+++ b/themes/openSUSE/help-boot/et/opt::keytable.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="keytable">Keele ja klaviatuuri paigutuse valimine</a>
+</h3>
+
+<p>
+Press <em>@@@fkey_lang@@@</em> to change language and keyboard layout the boot loader uses.
+</p>
diff --git a/themes/openSUSE/help-boot/et/opt::o_acpi.html b/themes/openSUSE/help-boot/et/opt::o_acpi.html
new file mode 100644
index 0000000..82c57b0
--- /dev/null
+++ b/themes/openSUSE/help-boot/et/opt::o_acpi.html
@@ -0,0 +1,23 @@
+<h3>
+<a name="o_acpi">Kerneli sätted: acpi</a>
+</h3>
+
+<p>
+ACPI (Advanced Configuration and Power Interface) is a
+standard that defines power and configuration management interfaces
+between an operating system and the BIOS. By default, <em>acpi</em> is
+switched on when a BIOS is detected that is newer than from year
+2000. There are several commonly
+used parameters to control the behavior of ACPI:
+<ul>
+ <li><em>pci=noacpi</em> -- do not use ACPI to route PCI interrupts</li>
+ <li><em>acpi=oldboot</em> -- only the parts of ACPI that are relevant for booting remain activated</li>
+ <li><em>acpi=off</em> -- switch off ACPI completely</li>
+ <li><em>acpi=force</em> -- switch on ACPI even if your BIOS is dated before 2000</li>
+</ul>
+</p>
+
+<p>
+Especially on new computers, it replaces the old
+<a href="#o_apm">apm</a> system.
+</p>
diff --git a/themes/openSUSE/help-boot/et/opt::o_apm.html b/themes/openSUSE/help-boot/et/opt::o_apm.html
new file mode 100644
index 0000000..8800aee
--- /dev/null
+++ b/themes/openSUSE/help-boot/et/opt::o_apm.html
@@ -0,0 +1,21 @@
+<h3>
+<a name="o_apm">Kerneli sätted: apm</a>
+</h3>
+
+<p>
+APM is one of the two power management strategies used on current
+computers. It is mainly used with laptops for functions like suspend
+to disk, but it may also be responsible for switching off the
+computer after power down. APM relies on a correct working BIOS. If
+the BIOS is broken, APM may have only limited use or even prevent the
+computer from working. Therefore, it may be switched off with the
+parameter
+<ul>
+ <li><em>apm=off</em> -- switch off APM completely</li>
+</ul>
+</p>
+
+<p>
+Some very new computers may take more advantage from the newer
+<a href="#o_acpi">ACPI</a>.
+</p>
diff --git a/themes/openSUSE/help-boot/et/opt::o_ide.html b/themes/openSUSE/help-boot/et/opt::o_ide.html
new file mode 100644
index 0000000..1d7dca7
--- /dev/null
+++ b/themes/openSUSE/help-boot/et/opt::o_ide.html
@@ -0,0 +1,12 @@
+<h3>
+<a name="o_ide">Kerneli sätted: ide</a>
+</h3>
+
+<p>
+IDE is, unlike SCSI, commonly used in most desktop workstations.
+To circumvent some hardware problems that occur with IDE systems, use the
+kernel parameter:
+<ul>
+ <li><em>ide=nodma</em> -- switch off DMA for IDE drives</li>
+</ul>
+</p>
diff --git a/themes/openSUSE/help-boot/et/opt::o_splash.html b/themes/openSUSE/help-boot/et/opt::o_splash.html
new file mode 100644
index 0000000..2d97867
--- /dev/null
+++ b/themes/openSUSE/help-boot/et/opt::o_splash.html
@@ -0,0 +1,12 @@
+<h3>
+<a name="o_splash">Kerneli sätted: splash</a>
+</h3>
+
+<p>
+The splash screen is the picture shown during system start-up.
+<ul>
+ <li><em>splash=0</em> -- The splash screen is switched off. This may be useful with very old monitors or if some error occurs.</li>
+ <li><em>splash=verbose</em> -- Activates splash, kernel and boot messages are still shown.</li>
+ <li><em>splash=silent</em> -- Activates splash, but no messages. Instead a progress bar is drawn.</li>
+</ul>
+</p>
diff --git a/themes/openSUSE/help-boot/et/opt::profile.html b/themes/openSUSE/help-boot/et/opt::profile.html
new file mode 100644
index 0000000..cee31b0
--- /dev/null
+++ b/themes/openSUSE/help-boot/et/opt::profile.html
@@ -0,0 +1,8 @@
+<h3>
+<a name="profile">Vali profiil</a>
+</h3>
+
+<p>
+Press <em>@@@fkey_profile@@@</em> to select a profile. Your system will be started using the
+configuration saved in this profile.
+</p>
diff --git a/themes/openSUSE/help-boot/fi/navi.html b/themes/openSUSE/help-boot/fi/navi.html
new file mode 100644
index 0000000..73cb4ee
--- /dev/null
+++ b/themes/openSUSE/help-boot/fi/navi.html
@@ -0,0 +1 @@
+<p>Palaa <a href="#foobar">FOOBAR</a>.</p>
diff --git a/themes/openSUSE/help-boot/fi/opt.html b/themes/openSUSE/help-boot/fi/opt.html
new file mode 100644
index 0000000..f5f18b7
--- /dev/null
+++ b/themes/openSUSE/help-boot/fi/opt.html
@@ -0,0 +1,12 @@
+<h3>
+<a name="opt">Käynnistysvalinnat</a>
+</h3>
+
+<p>
+<ul>
+ <li><a href="#o_splash">splash</a> -- vaikuta splash-näytön käyttäytymiseen</li>
+ <li><a href="#o_apm">apm</a> -- vaihda virranhallinta päälle/pois</li>
+ <li><a href="#o_acpi">acpi</a> -- edistynyt määritys ja virranhallinta (ACPI)</li>
+ <li><a href="#o_ide">ide</a> -- ohjaa IDE-alijärjestelmää</li>
+</ul>
+</p>
diff --git a/themes/openSUSE/help-boot/fi/opt::help.html b/themes/openSUSE/help-boot/fi/opt::help.html
new file mode 100644
index 0000000..a9172a0
--- /dev/null
+++ b/themes/openSUSE/help-boot/fi/opt::help.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="help">Ohjejärjestelmän käyttäminen</a>
+</h3>
+
+<p>Käynnistyslataajan online-ohje on kontekstiriippuvainen. Se antaa tietoja valitusta valikon kohdasta tai, jos muokkaat käynnistysvalintoja, se yrittää hakea tietoa valinnasta, jolla kursori on.</p>
+
+<p>Ohjausnäppäimet <ul><li><em>Nuoli ylös</em>: korosta aiempi linkki</li><li><em>Nuoli alas</em>: korosta seuraava linkki</li><li><em>Nuoli vasemmalle</em>, <em>Askelpalautin</em>: palaa aiempaan aiheeseen</li><li><em>Nuoli oikealle</em>, <em>Enter</em>, <em>Välilyönti</em>: seuraa linkkiä</li><li><em>Sivu ylös</em>: vieritä yksi sivu ylös</li><li><em>Sivu alas</em>: vieritä yksi sivu alas</li><li><em>Home</em>: mene sivun alkuun</li><li><em>End</em>: mene sivun loppuun</li><li><em>Esc</em>: sulje ohje</li></ul></p>
diff --git a/themes/openSUSE/help-boot/fi/opt::keytable.html b/themes/openSUSE/help-boot/fi/opt::keytable.html
new file mode 100644
index 0000000..f236a24
--- /dev/null
+++ b/themes/openSUSE/help-boot/fi/opt::keytable.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="keytable">Kielen ja näppäimistökartan valinnat</a>
+</h3>
+
+<p>Paina <em>@@@fkey_lang@@@</em> vaihtaaksesi käynnistyslataajan kieltä ja näppäimistökarttaa.</p>
diff --git a/themes/openSUSE/help-boot/fi/opt::o_acpi.html b/themes/openSUSE/help-boot/fi/opt::o_acpi.html
new file mode 100644
index 0000000..ba0cf9c
--- /dev/null
+++ b/themes/openSUSE/help-boot/fi/opt::o_acpi.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="o_acpi">Ytimen valinnat: acpi</a>
+</h3>
+
+<p>ACPI (Advanced Configuration and Power Interface) on standardi, joka määrittelee virran- ja laitteistohallinnan liittymän käyttöjärjestelmän ja BIOSin välillä. Oletuksena, <em>acpi</em> otetaan käyttöön, kun BIOS-versio on otettu käyttöön vuoden 2000 jälkeen. Useita yleisesti käytettyjä parametreja ACPIn ohjaamiseen ovat: <ul><li><em>pci=noacpi</em> - älä käytä ACPI-tukea ohjaamaan PCI-keskeytyksiä</li><li><em>acpi=oldboot</em> - vain ne ACPI-tuen osat, jotka kuuluvat käynnistykseen jäävät käyttöön</li><li><em>acpi=off</em> -- poista ACPI käytöstä kokonaan</li><li><em>acpi=force</em> -- käyttää ACPI-tukea vaikka BIOS olisi päivätty ennen vuotta 2000</li></ul></p>
+
+<p>Erityisesti uusissa tietokoneissa tämä korvaa vanhan <a href="#o_apm">apm</a>-järjestelmän.</p>
diff --git a/themes/openSUSE/help-boot/fi/opt::o_apm.html b/themes/openSUSE/help-boot/fi/opt::o_apm.html
new file mode 100644
index 0000000..7f6bdc7
--- /dev/null
+++ b/themes/openSUSE/help-boot/fi/opt::o_apm.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="o_apm">Ytimen valinnat: apm</a>
+</h3>
+
+<p>APM on toinen nykyisissä tietokoneissa käytettävistä virranhallinta strategioista. Sitä käytetään pääasiassa kannettavien tietokoneiden toiminnoissa kuten lepotila levylle, mutta se voi olla vastuussa myös tietokoneen sammuttamisesta. APM on riippuvainen toimivasta BIOSista. Jos BIOS on rikkinäinen, APM:llä voi olla vain rajoitettua käyttöä, tai se voi jopa estää tietokonetta toimimasta. Tämän takia APM voidaan poistaa käytöstä parametrilla <ul><li><em>apm=off</em> -- poista APM käytöstä kokonaan</li></ul></p>
+
+<p>Uusimmat tietokoneet voivat hyötyä enemmän uudemmasta <a href="#o_acpi">ACPI</a>:sta.</p>
diff --git a/themes/openSUSE/help-boot/fi/opt::o_ide.html b/themes/openSUSE/help-boot/fi/opt::o_ide.html
new file mode 100644
index 0000000..60b8071
--- /dev/null
+++ b/themes/openSUSE/help-boot/fi/opt::o_ide.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="o_ide">Ytimen valinnat: ide</a>
+</h3>
+
+<p>IDE, toisin kuin SCSI, on yleisesti käytetty useimmissa työasemissa. Ohittaaksesi joitakin IDE-järjestelmien laitteisto-ongelmia, käytä ytimen parametria: <ul><li><em>ide=nodma</em> -- poista DMA käytöstä IDE-levyiltä</li></ul></p>
diff --git a/themes/openSUSE/help-boot/fi/opt::o_splash.html b/themes/openSUSE/help-boot/fi/opt::o_splash.html
new file mode 100644
index 0000000..6a2f2f2
--- /dev/null
+++ b/themes/openSUSE/help-boot/fi/opt::o_splash.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="o_splash">Ytimen valinnat: splash</a>
+</h3>
+
+<p>Splash-näyttö on kuva, joka näytetään järjestelmän käynnistyksen yhteydessä. <ul><li><em>splash=0</em> -- Splash-näyttö ei ole käytössä. Tämä voi olla käytännöllistä todella vanhojen monitoreiden kanssa, tai jos virheitä ilmenee.</li><li>Ottaa käyttöön splash-näytön, ydin- ja käynnistysviestit näkyvät silti.</li><li><em>splash=silent</em> -- Ottaa käyttöön splash-näytön, mutta ei viestejä. Näiden sijasta käytetään etenemispalkkia.</li></ul></p>
diff --git a/themes/openSUSE/help-boot/fi/opt::profile.html b/themes/openSUSE/help-boot/fi/opt::profile.html
new file mode 100644
index 0000000..3e32976
--- /dev/null
+++ b/themes/openSUSE/help-boot/fi/opt::profile.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="profile">Valitse profiili</a>
+</h3>
+
+<p>Paina <em>@@@fkey_profile@@@</em> valitaksesi käytettävän profiilin. Järjestelmäsi käynnistetään käyttäen profiiliin tallennettua määritystä.</p>
diff --git a/themes/openSUSE/help-boot/fr/navi.html b/themes/openSUSE/help-boot/fr/navi.html
new file mode 100644
index 0000000..ef336c5
--- /dev/null
+++ b/themes/openSUSE/help-boot/fr/navi.html
@@ -0,0 +1 @@
+<p>Retour à la rubrique <a href="#foobar">FOOBAR</a></p>
diff --git a/themes/openSUSE/help-boot/fr/opt.html b/themes/openSUSE/help-boot/fr/opt.html
new file mode 100644
index 0000000..5a7234e
--- /dev/null
+++ b/themes/openSUSE/help-boot/fr/opt.html
@@ -0,0 +1,12 @@
+<h3>
+<a name="opt">Options d'amorçage</a>
+</h3>
+
+<p>
+<ul>
+ <li><a href="#o_splash">splash</a> -- détermine le fonctionnement de l'écran de démarrage</li>
+ <li><a href="#o_apm">apm</a> -- active ou non la fonction de gestion de l'alimentation</li>
+ <li><a href="#o_acpi">acpi</a> -- configuration avancée et gestion de l'alimentation</li>
+ <li><a href="#o_ide">ide</a> -- contrôle le sous-système IDE</li>
+</ul>
+</p>
diff --git a/themes/openSUSE/help-boot/fr/opt::help.html b/themes/openSUSE/help-boot/fr/opt::help.html
new file mode 100644
index 0000000..726d349
--- /dev/null
+++ b/themes/openSUSE/help-boot/fr/opt::help.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="help">Utilisation du système d'aide</a>
+</h3>
+
+<p>L'aide en ligne du chargeur d'amorçage est contextuelle. Elle fournit des informations sur l'élément du menu sélectionné ou si vous éditez les options d'amorçage, elle recherche des informations sur l'option pointée par le curseur.</p>
+
+<p>Touches de navigation <ul><li><em>Flèche haut</em> : mettre en sur-brillance le lien précédent</li><li><em>Flèche bas</em> : mettre en sur-brillance le lien suivant</li><li><em>Flèche gauche</em>, <em>Retour arrière</em> : retour à la rubrique précédente</li><li><em>Flèche droite</em>, <em>Entrée</em> et <em>Espace</em> : suivre le lien</li><li><em>Page haut</em> : faire défiler une page vers le haut</li><li><em>Page bas</em> : faire défiler une page vers le bas</li><li><em>Domicile</em> : aller au début de la page</li><li><em>Fin</em> : aller à la fin de la page</li><li><em>Échap</em> : quitter l'aide</li></ul></p>
diff --git a/themes/openSUSE/help-boot/fr/opt::keytable.html b/themes/openSUSE/help-boot/fr/opt::keytable.html
new file mode 100644
index 0000000..4b19d95
--- /dev/null
+++ b/themes/openSUSE/help-boot/fr/opt::keytable.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="keytable">Sélection de la langue et de la disposition du clavier</a>
+</h3>
+
+<p>Appuyez sur <em>@@@fkey_lang@@@</em> pour changer la langue et la disposition du clavier utilisées par le chargeur d'amorçage.</p>
diff --git a/themes/openSUSE/help-boot/fr/opt::o_acpi.html b/themes/openSUSE/help-boot/fr/opt::o_acpi.html
new file mode 100644
index 0000000..e88f125
--- /dev/null
+++ b/themes/openSUSE/help-boot/fr/opt::o_acpi.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="o_acpi">Options de kernel : acpi</a>
+</h3>
+
+<p>Le standard ACPI (Advanced Configuration and Power Interface) définit les interfaces de gestion d'alimentation et de configuration entre un système d'exploitation et le BIOS. Par défaut, <em>acpi</em> est activé lorsqu'un BIOS ultérieur à l'année 2000 est détecté. Il existe plusieurs paramètres utilisés couramment pour contrôler le fonctionnement de ACPI : <ul><li><em>pci=noacpi</em> -- ne pas utiliser ACPI pour router les interruptions PCI</li><li><em>acpi=oldboot</em> -- seules les parties de ACPI en rapport avec l'amorçage restent activées</li><li><em>acpi=off</em> -- désactiver complètement ACPI</li><li><em>acpi=force</em> -- activer ACPI même si votre BIOS est antérieur à l'année 2000</li></ul></p>
+
+<p>Spécialement pour les nouveaux ordinateurs, il remplace l'ancien système <a href="#o_apm">apm</a></p>
diff --git a/themes/openSUSE/help-boot/fr/opt::o_apm.html b/themes/openSUSE/help-boot/fr/opt::o_apm.html
new file mode 100644
index 0000000..e3f16f0
--- /dev/null
+++ b/themes/openSUSE/help-boot/fr/opt::o_apm.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="o_apm">Options de kernel : apm</a>
+</h3>
+
+<p>APM est l'une des deux stratégies de gestion de l'alimentation des ordinateurs actuels. Elle est utilisée principalement sur les ordinateurs portables pour des fonctions telles que la mise en veille sur disque, mais elle peut désactiver l'ordinateur après sa mise hors tension. APM dépend du fonctionnement correct du BIOS. Si le BIOS est défectueux, APM peut être d'une utilité limitée ou même empêcher l'ordinateur de fonctionner. Dans ces cas, elle peut être désactivée à l'aide du paramètre <ul><li><em>apm=off</em> -- désactiver complètement ACPI</li></ul></p>
+
+<p>Certains ordinateurs vraiment nouveaux peuvent tirer plus d'avantage à partir du nouveau <a href="#o_acpi">acpi</a></p>
diff --git a/themes/openSUSE/help-boot/fr/opt::o_ide.html b/themes/openSUSE/help-boot/fr/opt::o_ide.html
new file mode 100644
index 0000000..7af2f45
--- /dev/null
+++ b/themes/openSUSE/help-boot/fr/opt::o_ide.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="o_ide">Options de kernel : ide</a>
+</h3>
+
+<p>A la différence de SCSI, IDE est couramment utilisé sur la plupart des postes de travail de bureau. Pour contourner certains problèmes matériels des systèmes IDE, utilisez le paramètre de noyau suivant : <ul><li><em>ide=nodma</em> -- désactiver le DMA pour les lecteurs IDE</li></ul></p>
diff --git a/themes/openSUSE/help-boot/fr/opt::o_splash.html b/themes/openSUSE/help-boot/fr/opt::o_splash.html
new file mode 100644
index 0000000..1ca04f8
--- /dev/null
+++ b/themes/openSUSE/help-boot/fr/opt::o_splash.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="o_splash">Options de kernel : splash</a>
+</h3>
+
+<p>L'écran de démarrage est l'image affichée durant l'amorçage du système. <ul><li><em>splash=0</em> -- L'écran de démarrage est désactivé. Ca peut être utile avec des moniteurs très anciens ou si certaines erreurs surviennent.</li><li><em>splash=verbose</em> -- Active l'écran de démarrage sans faire disparaître les messages de noyau et d'amorçage.</li><li><em>splash=silent</em> -- Active l'écran de démarrage sans les messages. À la place, une barre de progression est représentée.</li></ul></p>
diff --git a/themes/openSUSE/help-boot/fr/opt::profile.html b/themes/openSUSE/help-boot/fr/opt::profile.html
new file mode 100644
index 0000000..eead6e3
--- /dev/null
+++ b/themes/openSUSE/help-boot/fr/opt::profile.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="profile">Choisir un profil</a>
+</h3>
+
+<p>Appuyez sur <em>@@@fkey_profile@@@</em> pour sélectionner un profil. Votre système démarrera avec la configuration enregistrée dans ce profil.</p>
diff --git a/themes/openSUSE/help-boot/gl/navi.html b/themes/openSUSE/help-boot/gl/navi.html
new file mode 100644
index 0000000..9bf0272
--- /dev/null
+++ b/themes/openSUSE/help-boot/gl/navi.html
@@ -0,0 +1 @@
+<p>Volver a <a href="#foobar">FOOBAR</a></p>
diff --git a/themes/openSUSE/help-boot/gl/opt.html b/themes/openSUSE/help-boot/gl/opt.html
new file mode 100644
index 0000000..96b158c
--- /dev/null
+++ b/themes/openSUSE/help-boot/gl/opt.html
@@ -0,0 +1,12 @@
+<h3>
+<a name="opt">Opcións de Arrinque</a>
+</h3>
+
+<p>
+<ul>
+ <li><h3><a href="#o_splash">splash</a> -- influir no comportamento da pantalla de inicio (splash)</h3></li>
+ <li><a href="#o_apm">apm</a> -- activar/desactivar a xestión de enerxía</li>
+ <li><a href="#o_acpi">acpi</a> -- interface avanzada de configuración e enerxía</li>
+ <li><a href="#o_ide">ide</a> -- controla o subsistema IDE</li>
+</ul>
+</p>
diff --git a/themes/openSUSE/help-boot/gl/opt::help.html b/themes/openSUSE/help-boot/gl/opt::help.html
new file mode 100644
index 0000000..39235e8
--- /dev/null
+++ b/themes/openSUSE/help-boot/gl/opt::help.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="help">Usando o Sistema de Axuda</a>
+</h3>
+
+<p>A axuda en liña do cargador de arrinque é sensible ó contexto. Da información sobre o elemento do menú seleccionado ou, se está editando as opcións de arrinque, intenta buscar información sobre a opción na que está posicionado o cursor.</p>
+
+<p>Teclas de Navegación</p>
diff --git a/themes/openSUSE/help-boot/gl/opt::keytable.html b/themes/openSUSE/help-boot/gl/opt::keytable.html
new file mode 100644
index 0000000..d763dc3
--- /dev/null
+++ b/themes/openSUSE/help-boot/gl/opt::keytable.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="keytable">Selección de Disposición de Teclado e Lingua</a>
+</h3>
+
+<p>Prema <em>@@@fkey_lang@@@</em> para cambiar a lingua e a disposición de teclado que usa o cargador de arrinque.</p>
diff --git a/themes/openSUSE/help-boot/gl/opt::o_acpi.html b/themes/openSUSE/help-boot/gl/opt::o_acpi.html
new file mode 100644
index 0000000..7fe5bc8
--- /dev/null
+++ b/themes/openSUSE/help-boot/gl/opt::o_acpi.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="o_acpi">Opcións do Kernel: acpi</a>
+</h3>
+
+<p>ACPI (Advanced Configuration and Power Interface) é un estándar que define interfaces de xestión de configuración e de enerxía entre un sistema operativo e a BIOS. Por defecto, actívase <em>acpi</em> cando se detecta unha BIOS posterior ó ano 2000. Hai varios parámetros que se usan normalmente para controlar o comportamento de ACPI: <ul><li><em>pci=noacpi</em> -- Non usar ACPI para enrutar interrupcións PCI.</li><li><em>acpi=oldboot</em> -- só permanecen activadas as partes de ACPI que son importantes para o arrinque</li><li><em>acpi=off</em> -- desactivar totalmente ACPI</li><li><em>acpi=force</em> -- activar ACPI incluso se a BIOS é anterior ó 2000</li></ul></p>
+
+<p>Sobre todo nos ordenadores novos, substitúe ó antigo sistema <a href="#o_apm">apm</a>.</p>
diff --git a/themes/openSUSE/help-boot/gl/opt::o_apm.html b/themes/openSUSE/help-boot/gl/opt::o_apm.html
new file mode 100644
index 0000000..e4e6307
--- /dev/null
+++ b/themes/openSUSE/help-boot/gl/opt::o_apm.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="o_apm">Opcións do Kernel: apm</a>
+</h3>
+
+<p>APM é unha das dúas estratexias de xestión de enerxía que se usan nos ordenadores actuais. Úsase principalmente nos portátiles para funcións coma suspender a disco, pero tamén pode ser responsable de apagar o ordenador despois dunha caída da enerxía. APM depende unha BIOS que funcione ben. Se a BIOS está estragada, APM podería ter só un uso limitado ou incluso evitaría que o ordenador funcionara. Polo tanto, debería desactivarse co parámetro <ul><li><em>apm=off</em> -- desactivar totalmente ACPI</li></ul></p>
+
+<p>Algúns ordenadores novos poderían beneficiarse máis co novo <a href="#o_acpi">ACPI</a>.</p>
diff --git a/themes/openSUSE/help-boot/gl/opt::o_ide.html b/themes/openSUSE/help-boot/gl/opt::o_ide.html
new file mode 100644
index 0000000..457e2e2
--- /dev/null
+++ b/themes/openSUSE/help-boot/gl/opt::o_ide.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="o_ide">Opcións do Kernel: ide</a>
+</h3>
+
+<p>IDE, a diferenza de SCSI, úsase normalmente na maioría das estacións de traballo de escritorio. Para evitar algúns problemas de hardware que ocorren cos sistemas IDE, use o parámetro do kernel: <ul><li><em>ide=nodma</em> -- desactivar DMA para unidades IDE</li></ul></p>
diff --git a/themes/openSUSE/help-boot/gl/opt::o_splash.html b/themes/openSUSE/help-boot/gl/opt::o_splash.html
new file mode 100644
index 0000000..8c1419d
--- /dev/null
+++ b/themes/openSUSE/help-boot/gl/opt::o_splash.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="o_splash">Opcións do Kernel: splash</a>
+</h3>
+
+<p>A pantalla inicial é a imaxe que se mostra durante o inicio do sistema. <ul><li>A pantalla inicial está desactivada. Isto podería ser útil con monitores moi antigos ou se ocorre algún erro.</li><li><em>splash=verbose</em> -- Activa a pantalla de inicio (splash), aínda se mostran as mensaxes do kernel e de arrinque.</li><li><em>splash=silent</em> -- Activa a pantalla de inicio (splash), pero sen mensaxes. En troques debúxase unha barra de progreso.</li></ul></p>
diff --git a/themes/openSUSE/help-boot/gl/opt::profile.html b/themes/openSUSE/help-boot/gl/opt::profile.html
new file mode 100644
index 0000000..2d4054c
--- /dev/null
+++ b/themes/openSUSE/help-boot/gl/opt::profile.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="profile">Escoller Perfil</a>
+</h3>
+
+<p>Prema <em>@@@fkey_profile@@@</em> para seleccionar un perfil. Vaise iniciar o sistema usando a configuración gardada neste perfil.</p>
diff --git a/themes/openSUSE/help-boot/gu/navi.html b/themes/openSUSE/help-boot/gu/navi.html
new file mode 100644
index 0000000..9ad6c9e
--- /dev/null
+++ b/themes/openSUSE/help-boot/gu/navi.html
@@ -0,0 +1 @@
+<p>પાછા ફરો <a href="#foobar">FOOBAR</a></p>
diff --git a/themes/openSUSE/help-boot/gu/opt.html b/themes/openSUSE/help-boot/gu/opt.html
new file mode 100644
index 0000000..2e8076a
--- /dev/null
+++ b/themes/openSUSE/help-boot/gu/opt.html
@@ -0,0 +1,12 @@
+<h3>
+<a name="opt">બુટ વિકલ્પો</a>
+</h3>
+
+<p>
+<ul>
+ <li><a href="#o_splash">સ્પ્લેશ</a> -- influence the behavior of the splash screen</li>
+ <li><a href="#o_apm">apm</a> -- toggle power management</li>
+ <li><a href="#o_acpi">acpi</a> -- advanced configuration and power interface</li>
+ <li><a href="#o_ide">ide</a> -- control the IDE subsystem</li>
+</ul>
+</p>
diff --git a/themes/openSUSE/help-boot/gu/opt::help.html b/themes/openSUSE/help-boot/gu/opt::help.html
new file mode 100644
index 0000000..ff34c8b
--- /dev/null
+++ b/themes/openSUSE/help-boot/gu/opt::help.html
@@ -0,0 +1,25 @@
+<h3>
+<a name="help">મદદ માટેની સિસ્ટમ વાપરવી</a>
+</h3>
+
+<p>
+The boot loader online help is context sensitive. It gives information
+about the selected menu item or, if you are editing boot options,
+it tries to look up information about the option in which the cursor is
+positioned.
+</p>
+
+<p>
+Navigation Keys
+<ul>
+ <li><em>ઉપર જતું તીર</em>: highlight previous link</li>
+ <li><em>નીચે જતું તીર</em>: highlight next link</li>
+ <li><em>ડાબે જતું તીર</em>, <em>બેકસ્પેસ</em>: return to previous topic</li>
+ <li><em>જમણે જતું તીર</em>, <em>એન્ટર</em>, <em>સ્પેસ</em>: follow link</li>
+ <li><em>ઉપરનું પૃષ્ઠ</em>: scroll up one page</li>
+ <li><em>નીચેનું પૃષ્ઠ</em>: scroll down one page</li>
+ <li><em>ઘર</em>: go to page start</li>
+ <li><em>છેવટનું</em>: go to page end</li>
+ <li><em>એસ્કેપ</em>: leave help</li>
+</ul>
+</p>
diff --git a/themes/openSUSE/help-boot/gu/opt::keytable.html b/themes/openSUSE/help-boot/gu/opt::keytable.html
new file mode 100644
index 0000000..fa70ca2
--- /dev/null
+++ b/themes/openSUSE/help-boot/gu/opt::keytable.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="keytable">ભાષા અને કીબોર્ડના લેઆઉટની પસંદગી</a>
+</h3>
+
+<p>
+Press <em>@@@fkey_lang@@@</em> to change language and keyboard layout the boot loader uses.
+</p>
diff --git a/themes/openSUSE/help-boot/gu/opt::o_acpi.html b/themes/openSUSE/help-boot/gu/opt::o_acpi.html
new file mode 100644
index 0000000..879860a
--- /dev/null
+++ b/themes/openSUSE/help-boot/gu/opt::o_acpi.html
@@ -0,0 +1,23 @@
+<h3>
+<a name="o_acpi">કેર્નાલ વિકલ્પો: acpi</a>
+</h3>
+
+<p>
+ACPI (Advanced Configuration and Power Interface) is a
+standard that defines power and configuration management interfaces
+between an operating system and the BIOS. By default, <em>acpi</em> is
+switched on when a BIOS is detected that is newer than from year
+2000. There are several commonly
+used parameters to control the behavior of ACPI:
+<ul>
+ <li><em>pci=નો acpi</em> -- do not use ACPI to route PCI interrupts</li>
+ <li><em>acpi=ઓલ્ડબુટ</em> -- only the parts of ACPI that are relevant for booting remain activated</li>
+ <li><em>acpi=બંધ</em> -- switch off ACPI completely</li>
+ <li><em>acpi=ફોર્સ</em> -- switch on ACPI even if your BIOS is dated before 2000</li>
+</ul>
+</p>
+
+<p>
+Especially on new computers, it replaces the old
+<a href="#o_apm">apm</a> system.
+</p>
diff --git a/themes/openSUSE/help-boot/gu/opt::o_apm.html b/themes/openSUSE/help-boot/gu/opt::o_apm.html
new file mode 100644
index 0000000..0d2cf48
--- /dev/null
+++ b/themes/openSUSE/help-boot/gu/opt::o_apm.html
@@ -0,0 +1,21 @@
+<h3>
+<a name="o_apm">કેર્નાલ વિકલ્પો: apm</a>
+</h3>
+
+<p>
+APM is one of the two power management strategies used on current
+computers. It is mainly used with laptops for functions like suspend
+to disk, but it may also be responsible for switching off the
+computer after power down. APM relies on a correct working BIOS. If
+the BIOS is broken, APM may have only limited use or even prevent the
+computer from working. Therefore, it may be switched off with the
+parameter
+<ul>
+ <li><em>apm=બંધ</em> -- switch off APM completely</li>
+</ul>
+</p>
+
+<p>
+Some very new computers may take more advantage from the newer
+<a href="#o_acpi">ACPI</a>.
+</p>
diff --git a/themes/openSUSE/help-boot/gu/opt::o_ide.html b/themes/openSUSE/help-boot/gu/opt::o_ide.html
new file mode 100644
index 0000000..291f4a5
--- /dev/null
+++ b/themes/openSUSE/help-boot/gu/opt::o_ide.html
@@ -0,0 +1,12 @@
+<h3>
+<a name="o_ide">કેર્નાલ વિકલ્પો: ide</a>
+</h3>
+
+<p>
+IDE is, unlike SCSI, commonly used in most desktop workstations.
+To circumvent some hardware problems that occur with IDE systems, use the
+kernel parameter:
+<ul>
+ <li><em>ide=નોડમા</em> -- switch off DMA for IDE drives</li>
+</ul>
+</p>
diff --git a/themes/openSUSE/help-boot/gu/opt::o_splash.html b/themes/openSUSE/help-boot/gu/opt::o_splash.html
new file mode 100644
index 0000000..749e9e8
--- /dev/null
+++ b/themes/openSUSE/help-boot/gu/opt::o_splash.html
@@ -0,0 +1,12 @@
+<h3>
+<a name="o_splash">કેર્નાલ વિકલ્પો: સ્પ્લેશ</a>
+</h3>
+
+<p>
+The splash screen is the picture shown during system start-up.
+<ul>
+ <li><em>સ્પ્લેશ=0</em> -- The splash screen is switched off. This may be useful with very old monitors or if some error occurs.</li>
+ <li><em>સ્પ્લેશ=નકામા શબ્દો</em> -- Activates splash, kernel and boot messages are still shown.</li>
+ <li><em>સ્પ્લેશ=શાંત</em> -- Activates splash, but no messages. Instead a progress bar is drawn.</li>
+</ul>
+</p>
diff --git a/themes/openSUSE/help-boot/gu/opt::profile.html b/themes/openSUSE/help-boot/gu/opt::profile.html
new file mode 100644
index 0000000..8c4ede9
--- /dev/null
+++ b/themes/openSUSE/help-boot/gu/opt::profile.html
@@ -0,0 +1,8 @@
+<h3>
+<a name="profile">પ્રોફાઈલ પસંદ કરો</a>
+</h3>
+
+<p>
+Press <em>@@@fkey_profile@@@</em> to select a profile. Your system will be started using the
+configuration saved in this profile.
+</p>
diff --git a/themes/openSUSE/help-boot/hi/navi.html b/themes/openSUSE/help-boot/hi/navi.html
new file mode 100644
index 0000000..d444b76
--- /dev/null
+++ b/themes/openSUSE/help-boot/hi/navi.html
@@ -0,0 +1 @@
+<p><a href="#foobar">FOOBAR</a> में लौटा</p>
diff --git a/themes/openSUSE/help-boot/hi/opt.html b/themes/openSUSE/help-boot/hi/opt.html
new file mode 100644
index 0000000..7eae0de
--- /dev/null
+++ b/themes/openSUSE/help-boot/hi/opt.html
@@ -0,0 +1,12 @@
+<h3>
+<a name="opt">Boot Options</a>
+</h3>
+
+<p>
+<ul>
+ <li><a href="#o_splash">स्पलास</a> -- influence the behavior of the splash screen</li>
+ <li><a href="#o_apm">apm</a> -- toggle power management</li>
+ <li><a href="#o_acpi">acpi</a> -- advanced configuration and power interface</li>
+ <li><a href="#o_ide">आईडीइ</a> -- control the IDE subsystem</li>
+</ul>
+</p>
diff --git a/themes/openSUSE/help-boot/hi/opt::help.html b/themes/openSUSE/help-boot/hi/opt::help.html
new file mode 100644
index 0000000..918ae0a
--- /dev/null
+++ b/themes/openSUSE/help-boot/hi/opt::help.html
@@ -0,0 +1,25 @@
+<h3>
+<a name="help">मदद सिस्टम का उपयोग करते हुए</a>
+</h3>
+
+<p>
+The boot loader online help is context sensitive. It gives information
+about the selected menu item or, if you are editing boot options,
+it tries to look up information about the option in which the cursor is
+positioned.
+</p>
+
+<p>
+Navigation Keys
+<ul>
+ <li><em>Up Arrow</em>: highlight previous link</li>
+ <li><em>Down Arrow</em>: highlight next link</li>
+ <li><em>बायां तीर</em>, <em>Backspace</em>: return to previous topic</li>
+ <li><em>Right Arrow</em>, <em>Enter</em>, <em>स्थान</em>: follow link</li>
+ <li><em>पृष्ठ ऊपर</em>: scroll up one page</li>
+ <li><em>पृष्ठ नीचे</em>: scroll down one page</li>
+ <li><em>घर</em>: go to page start</li>
+ <li><em>अंत</em>: go to page end</li>
+ <li><em>Esc</em>: leave help</li>
+</ul>
+</p>
diff --git a/themes/openSUSE/help-boot/hi/opt::keytable.html b/themes/openSUSE/help-boot/hi/opt::keytable.html
new file mode 100644
index 0000000..1101a24
--- /dev/null
+++ b/themes/openSUSE/help-boot/hi/opt::keytable.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="keytable">भाषा और कीबोर्ड लेआऊट चुनाव</a>
+</h3>
+
+<p>
+Press <em>@@@fkey_lang@@@</em> to change language and keyboard layout the boot loader uses.
+</p>
diff --git a/themes/openSUSE/help-boot/hi/opt::o_acpi.html b/themes/openSUSE/help-boot/hi/opt::o_acpi.html
new file mode 100644
index 0000000..051e7d4
--- /dev/null
+++ b/themes/openSUSE/help-boot/hi/opt::o_acpi.html
@@ -0,0 +1,23 @@
+<h3>
+<a name="o_acpi">कर्नेल विकल्प: acpi</a>
+</h3>
+
+<p>
+ACPI (Advanced Configuration and Power Interface) is a
+standard that defines power and configuration management interfaces
+between an operating system and the BIOS. By default, <em>acpi</em> is
+switched on when a BIOS is detected that is newer than from year
+2000. There are several commonly
+used parameters to control the behavior of ACPI:
+<ul>
+ <li><em>pci=noacpi</em> -- do not use ACPI to route PCI interrupts</li>
+ <li><em>acpi=oldboot</em> -- only the parts of ACPI that are relevant for booting remain activated</li>
+ <li><em>acpi=बंद</em> -- switch off ACPI completely</li>
+ <li><em>acpi=बल</em> -- switch on ACPI even if your BIOS is dated before 2000</li>
+</ul>
+</p>
+
+<p>
+Especially on new computers, it replaces the old
+<a href="#o_apm">apm</a> system.
+</p>
diff --git a/themes/openSUSE/help-boot/hi/opt::o_apm.html b/themes/openSUSE/help-boot/hi/opt::o_apm.html
new file mode 100644
index 0000000..2723686
--- /dev/null
+++ b/themes/openSUSE/help-boot/hi/opt::o_apm.html
@@ -0,0 +1,21 @@
+<h3>
+<a name="o_apm">कर्नेल विकल्प: apm</a>
+</h3>
+
+<p>
+APM is one of the two power management strategies used on current
+computers. It is mainly used with laptops for functions like suspend
+to disk, but it may also be responsible for switching off the
+computer after power down. APM relies on a correct working BIOS. If
+the BIOS is broken, APM may have only limited use or even prevent the
+computer from working. Therefore, it may be switched off with the
+parameter
+<ul>
+ <li><em>एपीएम=बंद</em> -- switch off APM completely</li>
+</ul>
+</p>
+
+<p>
+Some very new computers may take more advantage from the newer
+<a href="#o_acpi">ACPI</a>.
+</p>
diff --git a/themes/openSUSE/help-boot/hi/opt::o_ide.html b/themes/openSUSE/help-boot/hi/opt::o_ide.html
new file mode 100644
index 0000000..3911382
--- /dev/null
+++ b/themes/openSUSE/help-boot/hi/opt::o_ide.html
@@ -0,0 +1,12 @@
+<h3>
+<a name="o_ide">कर्नेल विकल्प: ide</a>
+</h3>
+
+<p>
+IDE is, unlike SCSI, commonly used in most desktop workstations.
+To circumvent some hardware problems that occur with IDE systems, use the
+kernel parameter:
+<ul>
+ <li><em>ide=nodma</em> -- switch off DMA for IDE drives</li>
+</ul>
+</p>
diff --git a/themes/openSUSE/help-boot/hi/opt::o_splash.html b/themes/openSUSE/help-boot/hi/opt::o_splash.html
new file mode 100644
index 0000000..b8a07ce
--- /dev/null
+++ b/themes/openSUSE/help-boot/hi/opt::o_splash.html
@@ -0,0 +1,12 @@
+<h3>
+<a name="o_splash">कर्नेल विकल्प:स्पलास</a>
+</h3>
+
+<p>
+The splash screen is the picture shown during system start-up.
+<ul>
+ <li><em>स्पलास=0</em> -- The splash screen is switched off. This may be useful with very old monitors or if some error occurs.</li>
+ <li><em>स्पलास=वरबोस</em> -- Activates splash, kernel and boot messages are still shown.</li>
+ <li><em>स्पलास=मूक</em> -- Activates splash, but no messages. Instead a progress bar is drawn.</li>
+</ul>
+</p>
diff --git a/themes/openSUSE/help-boot/hi/opt::profile.html b/themes/openSUSE/help-boot/hi/opt::profile.html
new file mode 100644
index 0000000..7302abf
--- /dev/null
+++ b/themes/openSUSE/help-boot/hi/opt::profile.html
@@ -0,0 +1,8 @@
+<h3>
+<a name="profile">प्रोफाइल चुनें</a>
+</h3>
+
+<p>
+Press <em>@@@fkey_profile@@@</em> to select a profile. Your system will be started using the
+configuration saved in this profile.
+</p>
diff --git a/themes/openSUSE/help-boot/hr/navi.html b/themes/openSUSE/help-boot/hr/navi.html
new file mode 100644
index 0000000..3e8a924
--- /dev/null
+++ b/themes/openSUSE/help-boot/hr/navi.html
@@ -0,0 +1 @@
+<p>Vrati se na <a href="#foobar">FOOBAR</a></p>
diff --git a/themes/openSUSE/help-boot/hr/opt.html b/themes/openSUSE/help-boot/hr/opt.html
new file mode 100644
index 0000000..f3c3ea0
--- /dev/null
+++ b/themes/openSUSE/help-boot/hr/opt.html
@@ -0,0 +1,12 @@
+<h3>
+<a name="opt">Opcije podizanja sustava</a>
+</h3>
+
+<p>
+<ul>
+ <li><a href="#o_splash">splash</a> -- Utječe na ponašanje uvodnog ekrana</li>
+ <li><a href="#o_apm">apm</a> -- prebaci upravljanje energijom</li>
+ <li><a href="#o_acpi">acpi</a> -- sučelje naprednih postavki i energije</li>
+ <li><a href="#o_ide">ide</a> -- kontrola IDE podsustava</li>
+</ul>
+</p>
diff --git a/themes/openSUSE/help-boot/hr/opt::help.html b/themes/openSUSE/help-boot/hr/opt::help.html
new file mode 100644
index 0000000..9bae609
--- /dev/null
+++ b/themes/openSUSE/help-boot/hr/opt::help.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="help">Koristim sustav pomoći</a>
+</h3>
+
+<p>Pomoć programa za podizanje sustavan je osjetljiva na kontekst. Ona daje informacije o označenim stavkama izbornika, ako uređujete parametre podizanja sustava, pokušava naći informacije o parametrima gdje se nalazi kursor.</p>
+
+<p>Navigacijske tipke<ul><li><em>Strelica gore</em>: označi prethodnu vezu</li><li><em>Strelica dolje</em>: označi slijedeću vezu</li><li><em>Strelica lijevo</em>, <em>Brisanje</em>: vrati se na prethodnu temu</li><li><em>Strelica desno</em>, <em>Enter</em>, <em>Razmak</em>: slijedi vezu</li><li><em>Stranica gore</em>: pomakni gore za jednu stranicu</li><li><em>Stranica dolje</em>: pomakni dolje za jednu stranicu</li><li><em>Kuća</em>: odi na početak stranice</li><li><em>Kraj</em>: odi na kraj stranice</li><li><em>Esc</em>: napusti pomoć</li></ul></p>
diff --git a/themes/openSUSE/help-boot/hr/opt::keytable.html b/themes/openSUSE/help-boot/hr/opt::keytable.html
new file mode 100644
index 0000000..c92ac0b
--- /dev/null
+++ b/themes/openSUSE/help-boot/hr/opt::keytable.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="keytable">Odabir jezika i rasporeda tipkovnice</a>
+</h3>
+
+<p>Pritisnite <em>@@@fkey_lang@@@</em> da biste promijenili jezik i raspored tipkovnice koje koristi program za podizanje sustava.</p>
diff --git a/themes/openSUSE/help-boot/hr/opt::o_acpi.html b/themes/openSUSE/help-boot/hr/opt::o_acpi.html
new file mode 100644
index 0000000..541d901
--- /dev/null
+++ b/themes/openSUSE/help-boot/hr/opt::o_acpi.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="o_acpi">Izbori kernela: acpi</a>
+</h3>
+
+<p>ACPI (Advanced Configuration and Power Interface) je standard koji definira sučelja upravljanja energijom i postavkama između operacijskog sustava i BIOS-a. Po pretpostavci, <em>acpi</em> je uključen kada BIOS detektira da je mlađi od 2000. godine. Postoji nekoliko uobičajenih parametara za kontrolu ponašanja ACPI-a: <ul><li><em>pci=noacpi</em> -- nemoj koristiti ACPI za usmjeravanje PCI prekida</li><li><em>acpi=oldboot</em> -- samo dijelovi ACPI-a koji su nužni za podizanje sustava ostaju aktivni</li><li><em>acpi=off</em> -- isključi ACPI u potpunosti</li><li><em>acpi=force</em> -- uključi ACPI čak ako je BIOS napravljen prije 2000. godine</li></ul></p>
+
+<p>Osobitno na novim računalima, zamjenjuje stari <a href="#o_apm">apm</a> sustav.</p>
diff --git a/themes/openSUSE/help-boot/hr/opt::o_apm.html b/themes/openSUSE/help-boot/hr/opt::o_apm.html
new file mode 100644
index 0000000..89bdd95
--- /dev/null
+++ b/themes/openSUSE/help-boot/hr/opt::o_apm.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="o_apm">Izbori kernela: apm</a>
+</h3>
+
+<p>APM je jedana od dvije strategije upravljanja energijom koje se koriste na osobnim računalima. Uglavnom se koristi na prijenosnim računalima za funkcije kao što su suspendiranje diska, ali može biti odgovorna i za isključivanje računala nakon nestanka energije. APM se oslanja na ispravan BIOS. Ako je BIOS oštećen, APM može ograničiti ili u potpunosti spriječiti rad računala. Dakle, može se isključiti s parametrom<ul><li><em>apm=off</em> -- isključi APM u potpunosti</li></ul></p>
+
+<p>Neka najnovija računala mogu imati koristi od novije <a href="#o_acpi">ACPI</a>.</p>
diff --git a/themes/openSUSE/help-boot/hr/opt::o_ide.html b/themes/openSUSE/help-boot/hr/opt::o_ide.html
new file mode 100644
index 0000000..038a5c9
--- /dev/null
+++ b/themes/openSUSE/help-boot/hr/opt::o_ide.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="o_ide">Izbori kernela: ide</a>
+</h3>
+
+<p>IDE je, za razliku od SCSI-a, često korišten na stolnim računalima. Da biste zaobišli neke sklopovske probleme koji se dešavaju kod IDE sustava, koristite parametar kernela: <ul><li><em>ide=nodma</em> -- isključi DMA za IDE uređaje</li></ul></p>
diff --git a/themes/openSUSE/help-boot/hr/opt::o_splash.html b/themes/openSUSE/help-boot/hr/opt::o_splash.html
new file mode 100644
index 0000000..e84ab1b
--- /dev/null
+++ b/themes/openSUSE/help-boot/hr/opt::o_splash.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="o_splash">Izbori kernela: splash</a>
+</h3>
+
+<p>Pozdravni ekran je slika koja se prikazuje prilikom podizanja sustava. <ul><li><em>splash=0</em> -- pozdravni ekran je isključen. To može biti korisno na starim monitorima ili ako se desi neka pogreška.</li><li><em>splash=verbose</em> -- aktivira pozdravni ekran, poruke kernela i podizanja sustava se prikazuju.</li><li><em>splash=silent</em> -- Aktivira pozdravni ekran, ali bez poruka. Umjesto toga se koristi traka koja prikazuje napredovanje.</li></ul></p>
diff --git a/themes/openSUSE/help-boot/hr/opt::profile.html b/themes/openSUSE/help-boot/hr/opt::profile.html
new file mode 100644
index 0000000..3a925fd
--- /dev/null
+++ b/themes/openSUSE/help-boot/hr/opt::profile.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="profile">Odaberite profil</a>
+</h3>
+
+<p>Pritisnite <em>@@@fkey_profile@@@</em> da odabetere profil. Vaš sustav će biti pokrenut korištenjem postavki sačuvanih u ovom profilu.</p>
diff --git a/themes/openSUSE/help-boot/hu/navi.html b/themes/openSUSE/help-boot/hu/navi.html
new file mode 100644
index 0000000..9f927ee
--- /dev/null
+++ b/themes/openSUSE/help-boot/hu/navi.html
@@ -0,0 +1 @@
+<p>Vissza a <a href="#foobar">FOOBAR</a> részhez.</p>
diff --git a/themes/openSUSE/help-boot/hu/opt.html b/themes/openSUSE/help-boot/hu/opt.html
new file mode 100644
index 0000000..1b0993c
--- /dev/null
+++ b/themes/openSUSE/help-boot/hu/opt.html
@@ -0,0 +1,12 @@
+<h3>
+<a name="opt">Rendszerindítási paraméterek</a>
+</h3>
+
+<p>
+<ul>
+ <li><a href="#o_splash">splash</a> -- az indítóképernyő beállítása</li>
+ <li><a href="#o_apm">apm</a> -- energiakezelés beállítása</li>
+ <li><a href="#o_acpi">acpi</a> -- ACPI energiakezelési rendszer</li>
+ <li><a href="#o_ide">ide</a> -- IDE-alrendszer</li>
+</ul>
+</p>
diff --git a/themes/openSUSE/help-boot/hu/opt::help.html b/themes/openSUSE/help-boot/hu/opt::help.html
new file mode 100644
index 0000000..c3946ef
--- /dev/null
+++ b/themes/openSUSE/help-boot/hu/opt::help.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="help">A súgórendszer használata</a>
+</h3>
+
+<p>A rendszertöltő online súgója helyzetfüggő segítséget nyújt az egyes kiválasztott menüpontokhoz. Ezenfelül az egyes rendszerindítási opciókhoz is információval szolgál. Ez akkor lehet hasznos, ha éppen egy bejegyzés szerkesztése válik szükségessé.</p>
+
+<p>Navigációs billentyűk <ul><li><em>Felfelé nyíl</em>: előző hivatkozás kiválasztása</li><li><em>Lefelé nyíl</em>: következő hivatkozás kiválasztása</li><li><em>Bal nyíl</em>, <em>Vissza</em>: vissza az előző témához</li><li><em>Jobb nyíl</em>, <em>Enter</em>, <em>Szóköz</em>: hivatkozás követése</li><li><em>Page Up</em>: görgetés felfelé</li><li><em>Page Down</em>: görgetés lefelé</li><li><em>Home</em>: ugrás az oldal elejére</li><li><em>End</em>: ugrás az oldal végére</li><li><em>Esc</em>: kilépés a súgóból</li></ul></p>
diff --git a/themes/openSUSE/help-boot/hu/opt::keytable.html b/themes/openSUSE/help-boot/hu/opt::keytable.html
new file mode 100644
index 0000000..ea950cf
--- /dev/null
+++ b/themes/openSUSE/help-boot/hu/opt::keytable.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="keytable">Nyelv és billentyűzet kiválasztása</a>
+</h3>
+
+<p>Az <em>@@@fkey_lang@@@</em> billentyű megnyomásával választható ki az indítóképernyő és a billentyűzet nyelve.</p>
diff --git a/themes/openSUSE/help-boot/hu/opt::o_acpi.html b/themes/openSUSE/help-boot/hu/opt::o_acpi.html
new file mode 100644
index 0000000..3be52b5
--- /dev/null
+++ b/themes/openSUSE/help-boot/hu/opt::o_acpi.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="o_acpi">Kernelparamétere: acpi</a>
+</h3>
+
+<p>Az ACPI (Advanced Configuration and Power Interface) szabvány meghatározza, hogy az operációs rendszer és a BIOS között hogyan működjenek az energiakezelési funkciók. Alapértelmezett esetben akkor van bekapcsolva az <em>acpi</em> opció, ha az egy 2000. év után készült BIOS-verziót talál. Az ACPI viselkedését az alábbi opciókkal lehet pontosan beállítani: <ul><li><em>pci=noacpi</em> -- ne használja az ACPI-t PCI-megszakításokhoz</li><li><em>acpi=oldboot</em> -- a rendszerindításkor szükséges ACPI-részek bekapcsolása</li><li><em>acpi=off</em> -- az ACPI teljes kikapcsolása</li><li><em>acpi=force</em> -- az ACPI bekapcsolása annak ellenére, hogy a BIOS a 2000. év előtt készült</li></ul></p>
+
+<p>Új számítógépeken az ACPI teljes mértékben helyettesíti a régi <a href="#o_apm">apm</a> rendszert.</p>
diff --git a/themes/openSUSE/help-boot/hu/opt::o_apm.html b/themes/openSUSE/help-boot/hu/opt::o_apm.html
new file mode 100644
index 0000000..c27b079
--- /dev/null
+++ b/themes/openSUSE/help-boot/hu/opt::o_apm.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="o_apm">Kernelparaméterek: apm</a>
+</h3>
+
+<p>Az APM (Advanced Power Management) egy energiakezelő rendszer. Használatának leginkább hordozható számítógépeken van értelme, ahol átmenetileg fel lehet függeszteni a rendszer futását. Akkor lehet szüksége energiakezelő rendszerre, ha azt szeretné, hogy a rendszer leállításakor automatikusan kikapcsoljon a rendszer. Az APM működése erősen függ a számítógép BIOS rendszerétől. Amennyiben hibás a BIOS, vagy hibásan van beállítva, akkor az APM bekapcsolása mellékhatásokhoz vezethet. Ilyenkor letilthatja az APM bekapcsolását a következő paraméterrel: <ul><li><em>apm=off</em> -- az ACPI teljes kikapcsolása</li></ul></p>
+
+<p>Az újabb számítógépeken az APM helyett az újabb <a href="#o_acpi">ACPI</a> rendszer használata javasolt.</p>
diff --git a/themes/openSUSE/help-boot/hu/opt::o_ide.html b/themes/openSUSE/help-boot/hu/opt::o_ide.html
new file mode 100644
index 0000000..14f8b56
--- /dev/null
+++ b/themes/openSUSE/help-boot/hu/opt::o_ide.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="o_ide">Kernelbeállítások: ide</a>
+</h3>
+
+<p>A legtöbb munkaállomás nem SCSI-, hanem IDE-csatolót használ. Az IDE-rendszer esetleges hardverproblémáinak kikerüléséhez szüksége lehet a következő paraméterre: <ul><li><em>ide=nodma</em> -- IDE-meghajtók DMA-kezelésének kikapcsolása</li></ul></p>
diff --git a/themes/openSUSE/help-boot/hu/opt::o_splash.html b/themes/openSUSE/help-boot/hu/opt::o_splash.html
new file mode 100644
index 0000000..d2f9ae6
--- /dev/null
+++ b/themes/openSUSE/help-boot/hu/opt::o_splash.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="o_splash">Kernelbeállítások: splash</a>
+</h3>
+
+<p>A rendszerindításkor látható kép a rendszerindító képernyő. <ul><li><em>splash=0</em> -- A rendszerindító képernyő nem jelenik meg. Ez akkor lehet hasznos, ha régi a monitor.</li><li><em>splash=verbose</em> -- Bekapcsolja az indítóképernyőt, a kernel- és a rendszerindítási üzenetek megjelennek.</li><li><em>splash=silent</em> -- Bekapcsolja az indítóképernyőt, de az üzenetek helyett csak a folyamatjelző jelenik meg.</li></ul></p>
diff --git a/themes/openSUSE/help-boot/hu/opt::profile.html b/themes/openSUSE/help-boot/hu/opt::profile.html
new file mode 100644
index 0000000..63d781a
--- /dev/null
+++ b/themes/openSUSE/help-boot/hu/opt::profile.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="profile">Profil kiválasztása</a>
+</h3>
+
+<p>Egy profil kiválasztásához nyomja meg az <em>@@@fkey_profile@@@</em> billentyűt. A rendszer a kiválasztott profilban beállított paraméterekkel indul el.</p>
diff --git a/themes/openSUSE/help-boot/it/navi.html b/themes/openSUSE/help-boot/it/navi.html
new file mode 100644
index 0000000..854eec5
--- /dev/null
+++ b/themes/openSUSE/help-boot/it/navi.html
@@ -0,0 +1 @@
+<p>Ritorna a <a href="#foobar">FOOBAR </a></p>
diff --git a/themes/openSUSE/help-boot/it/opt.html b/themes/openSUSE/help-boot/it/opt.html
new file mode 100644
index 0000000..f04ce32
--- /dev/null
+++ b/themes/openSUSE/help-boot/it/opt.html
@@ -0,0 +1,12 @@
+<h3>
+<a name="opt">Opzioni di boot</a>
+</h3>
+
+<p>
+<ul>
+ <li><a href="#o_splash">schermata di avvio</a> -- influenza il comportamento della schermata di avvio</li>
+ <li><a href="#o_apm">apm</a> -- attiva o disattiva il risparmio energetico</li>
+ <li><a href="#o_acpi">acpi</a> -- configurazione avanzata ed interfaccia per il risparmio energetico</li>
+ <li><a href="#o_ide">IDE</a> -- controlla il sottosistema IDE </li>
+</ul>
+</p>
diff --git a/themes/openSUSE/help-boot/it/opt::help.html b/themes/openSUSE/help-boot/it/opt::help.html
new file mode 100644
index 0000000..0002bd9
--- /dev/null
+++ b/themes/openSUSE/help-boot/it/opt::help.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="help">Uso della Guida</a>
+</h3>
+
+<p>La Guida in linea del boot loader è sensibile al contesto e visualizza le informazioni sulla voce di menu selezionata, oppure, durante la modifica delle opzioni di avvio, tenta di individuare le informazioni relative all'opzione su cui è posizionato il cursore.</p>
+
+<p>Chiavi di navigazione <ul><li><em>Freccia su</em>: evidenzia il collegamento precedente</li><li><em>Fraccia giù</em>: evidenzia il collegamento successivo</li><li><em>Freccia sinistra</em>, <em>Backspace</em>: torna all'argomento precedente</li><li><em>Fraccia destra</em>, <em>Invio</em>, <em>Spazio</em>: visita il colegamento</li><li><em>PgSu</em>: scorre verso l'alto una pagina alla volta</li><li><em>PgGiù</em>: scorre verso il basso una pagina alla volta</li><li><em>Home</em>: va a inizio pagina</li><li><em>Termine</em>: va a fine pagina</li><li><em>Esc</em>: chiude la Guida</li></ul></p>
diff --git a/themes/openSUSE/help-boot/it/opt::keytable.html b/themes/openSUSE/help-boot/it/opt::keytable.html
new file mode 100644
index 0000000..bf46c7a
--- /dev/null
+++ b/themes/openSUSE/help-boot/it/opt::keytable.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="keytable">Selezione layout tastiera e lingua</a>
+</h3>
+
+<p>Premere <em>@@@fkey_lang@@@ </em> per cambiare la lingua e il layout della tastiera utilizzati dal boot loader.</p>
diff --git a/themes/openSUSE/help-boot/it/opt::o_acpi.html b/themes/openSUSE/help-boot/it/opt::o_acpi.html
new file mode 100644
index 0000000..5b9061f
--- /dev/null
+++ b/themes/openSUSE/help-boot/it/opt::o_acpi.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="o_acpi">Opzioni kernel: acpi</a>
+</h3>
+
+<p>ACPI (Advanced Configuration and Power Interface) è uno standard che definisce le interfacce di risparmio energetico e configurazione tra un sistema operativo e il BIOS. Per impostazione predefinita, <em>acpi</em> viene attivato ogni volta che viene rilevato un BIOS successivo all'anno 2000. Esistono molti parametri comunemente utilizzati per controllare il comportamento di un ACPI: <ul><li><em>pci=noacpi</em> -- non usare l'ACPI per indirizzare gli interrupt PCI</li><li><em>acpi=oldboot</em> -- solo i componenti di ACPI che sono necessari al boot rimangono attivi</li><li><em>acpi=off</em> -- disattiva completamente ACPI</li><li><em>acpi=force</em> -- attiva ACPI anche se il BIOS installato è precedente al 2000</li></ul></p>
+
+<p>In particolare nei nuovi computer sostituisce il sistema di <a href="#o_apm">apm</a> precedente. </p>
diff --git a/themes/openSUSE/help-boot/it/opt::o_apm.html b/themes/openSUSE/help-boot/it/opt::o_apm.html
new file mode 100644
index 0000000..3711bfd
--- /dev/null
+++ b/themes/openSUSE/help-boot/it/opt::o_apm.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="o_apm">Opzioni kernel: apm</a>
+</h3>
+
+<p>APM è una delle due strategie di risparmio energetico utiizzata nei computer moderni. Viene utilizzata principalmente sui computer portatili per funzioni quali la sospensione su disco, tuttavia può controllare anche l'arresto del computer dopo lo spegnimento. La funzionalità APM dipende dal corretto funzionamento del BIOS. Se il BIOS non funziona correttamente, APM può essere utilizzata in maniera limitata o può addirittura impedire il funzionamento del computer. Per questo motivo, è possibile disattivarla con il parametro <ul><li><em>apm=off</em> -- disattiva completamente ACPI</li></ul></p>
+
+<p>Alcuni computer di nuova generazione possono beneficiare maggiormente del recente <a href="#o_acpi">acpi</a>.</p>
diff --git a/themes/openSUSE/help-boot/it/opt::o_ide.html b/themes/openSUSE/help-boot/it/opt::o_ide.html
new file mode 100644
index 0000000..8a5edf7
--- /dev/null
+++ b/themes/openSUSE/help-boot/it/opt::o_ide.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="o_ide">Opzioni kernel: ide</a>
+</h3>
+
+<p> Nella maggior parte delle workstation desktop vengono utilizzati dispositivi IDE, anziché SCSI. Per aggirare alcuni problemi hardware che possono verificarsi con i sistemi IDE, utiizzare il parametro del kernel: <ul><li><em>ide=nodma</em> -- disattiva il DMA per le unità IDE</li></ul></p>
diff --git a/themes/openSUSE/help-boot/it/opt::o_splash.html b/themes/openSUSE/help-boot/it/opt::o_splash.html
new file mode 100644
index 0000000..49c6998
--- /dev/null
+++ b/themes/openSUSE/help-boot/it/opt::o_splash.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="o_splash">Opzioni kernel: schermata di avvio</a>
+</h3>
+
+<p>La schermata di avvio corrisponde all'immagine visualizzata all'avvio del sistema. <ul><li><em>schermata di avvio=0</em> --La schermata di avvio è disattivata. Ciò può essere utile quando si utilizzano monitor molto vecchi o quando si verificano errori.</li><li><em>schermata di avvio=verbose</em> -- Attiva la schermata di avvio con la visualizzazione dei messaggi del kernel e di avvio.</li><li><em>schermata di avvio=silent</em> -- Attiva una schermata di avvio senza messaggi. Viene invece visualizzata una barra di avanzamento.</li></ul></p>
diff --git a/themes/openSUSE/help-boot/it/opt::profile.html b/themes/openSUSE/help-boot/it/opt::profile.html
new file mode 100644
index 0000000..1af7f68
--- /dev/null
+++ b/themes/openSUSE/help-boot/it/opt::profile.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="profile">Scegli profilo</a>
+</h3>
+
+<p>Premere <em>@@@fkey_profile@@@ </em> per selezionare un profilo. Il sistema verrà avviato utilizzando la configurazione salvata in questo profilo.</p>
diff --git a/themes/openSUSE/help-boot/ja/navi.html b/themes/openSUSE/help-boot/ja/navi.html
new file mode 100644
index 0000000..a20cae8
--- /dev/null
+++ b/themes/openSUSE/help-boot/ja/navi.html
@@ -0,0 +1 @@
+<p><a href="#foobar">FOOBAR</a> に戻る </p>
diff --git a/themes/openSUSE/help-boot/ja/opt.html b/themes/openSUSE/help-boot/ja/opt.html
new file mode 100644
index 0000000..89d18a8
--- /dev/null
+++ b/themes/openSUSE/help-boot/ja/opt.html
@@ -0,0 +1,12 @@
+<h3>
+<a name="opt">起動オプション</a>
+</h3>
+
+<p>
+<ul>
+ <li><a href="#o_splash">スプラッシュ</a> -- スプラッシュ画面の動作に影響を与えます</li>
+ <li><a href="#o_apm">apm</a> -- 電源管理機能を切り替えます</li>
+ <li><a href="#o_acpi">acpi</a> -- "詳細設定と電源インタフェース" の略称です</li>
+ <li><a href="#o_ide">IDE</a> -- IDE サブシステムを操作します</li>
+</ul>
+</p>
diff --git a/themes/openSUSE/help-boot/ja/opt::help.html b/themes/openSUSE/help-boot/ja/opt::help.html
new file mode 100644
index 0000000..64a81b6
--- /dev/null
+++ b/themes/openSUSE/help-boot/ja/opt::help.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="help">ヘルプシステムの使用</a>
+</h3>
+
+<p>ブートローダのオンラインヘルプは状況に合わせた表示を行ないます。メニュー項目を選択している場合はその項目についての情報を提供するほか、起動オプションを編集している場合はカーソル位置のオプションについて情報を調べます。</p>
+
+<p>操作キー <ul><li><em>上矢印</em>: 前のリンクを強調表示する</li><li><em>下矢印</em>: 次のリンクを強調表示する</li><li><em>左矢印</em>, <em>Backspace</em>: 前のトピックに戻る</li><li><em>右矢印</em>, <em>Enter</em>, <em>スペース</em>: リンクをたどる</li><li><em>Page Up</em>: 1 ページ分スクロールアップ</li><li><em>Page Down</em>: 1ページ分スクロールダウン</li><li><em>Home</em>: ページの初めにジャンプ</li><li><em>End</em>: ページの最後にジャンプ</li><li><em>Esc</em>: ヘルプの終了</li></ul></p>
diff --git a/themes/openSUSE/help-boot/ja/opt::keytable.html b/themes/openSUSE/help-boot/ja/opt::keytable.html
new file mode 100644
index 0000000..bd01723
--- /dev/null
+++ b/themes/openSUSE/help-boot/ja/opt::keytable.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="keytable">言語とキーボードレイアウトの選択</a>
+</h3>
+
+<p>ブートローダで使用する言語とキーボードレイアウトを変更するには、 <em>@@@fkey_lang@@@</em> を押してください。</p>
diff --git a/themes/openSUSE/help-boot/ja/opt::o_acpi.html b/themes/openSUSE/help-boot/ja/opt::o_acpi.html
new file mode 100644
index 0000000..b09f95b
--- /dev/null
+++ b/themes/openSUSE/help-boot/ja/opt::o_acpi.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="o_acpi">カーネルオプション: acpi</a>
+</h3>
+
+<p>ACPI (Advanced Configuration and Power Interface) は、オペレーティングシステムと BIOS の間で決められた電源と設定管理インタフェースの標準です。既定では <em>acpi</em> は BIOS が 2000 年より新しいものであると有効になります。 ACPI の動作をコントロールするために、いくつかのパラメータが用意されています: <ul><li><em>pci=noacpi</em> -- PCI の割り込み制御に ACPI を使わないようにする</li><li><em>acpi=oldboot</em> -- ACPI のうち起動に関連する部分だけを有効にする</li><li><em>acpi=off</em> -- ACPI を完全に無効化する</li><li><em>acpi=force</em> -- BIOS が 2000 年以前の日付の場合でも ACPI を有効にする</li></ul></p>
+
+<p>特に新しいコンピュータでは、古い <a href="#o_apm">apm</a> システムに取って代わっています。</p>
diff --git a/themes/openSUSE/help-boot/ja/opt::o_apm.html b/themes/openSUSE/help-boot/ja/opt::o_apm.html
new file mode 100644
index 0000000..33c8228
--- /dev/null
+++ b/themes/openSUSE/help-boot/ja/opt::o_apm.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="o_apm">カーネルオプション: apm</a>
+</h3>
+
+<p>APM は現在のコンピュータで使用される 2 種類の電源管理ストラテジのうちの 1 つです。この機能はディスクへのサスペンド (Suspend to disk) のような機能に対してノート PC で主に使用されますが、パワーダウンした後にコンピュータの電源をオフにするような機能もあります。 APM は BIOS が正しく動作することを前提に作られているため、 BIOS が壊れた場合は APM の使用が制限されたり、コンピュータが機能しないこともあります。そのため、下記のパラメータでオフにすることもできます <ul><li><em>apm=off</em> -- APM を完全に無効化する</li></ul></p>
+
+<p>いくつかの最新コンピュータでは新しい <a href="#o_acpi">ACPI</a> を利用したほうが利点があるかもしれません。</p>
diff --git a/themes/openSUSE/help-boot/ja/opt::o_ide.html b/themes/openSUSE/help-boot/ja/opt::o_ide.html
new file mode 100644
index 0000000..39cef84
--- /dev/null
+++ b/themes/openSUSE/help-boot/ja/opt::o_ide.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="o_ide">カーネルオプション: ide</a>
+</h3>
+
+<p>IDE は SCSI と異なり、ほとんどのデスクトップワークステーションで広く使用されています。 IDE システムに発生したハードウェア問題を回避するには、カーネルパラメータを使用してください: <ul><li><em>ide=nodma</em> -- IDE ドライブの DMA を無効にする</li></ul></p>
diff --git a/themes/openSUSE/help-boot/ja/opt::o_splash.html b/themes/openSUSE/help-boot/ja/opt::o_splash.html
new file mode 100644
index 0000000..6bd486b
--- /dev/null
+++ b/themes/openSUSE/help-boot/ja/opt::o_splash.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="o_splash">カーネルオプション: splash</a>
+</h3>
+
+<p>スプラッシュ画面とはシステムが起動する際に表示される画像のことです。 <ul><li><em>splash=0</em> -- スプラッシュ画面を無効にします。とても古いコンピュータを使用している場合や、何らかのエラーが起こる場合に便利です。</li><li><em>splash=verbose</em> -- スプラッシュ画面を有効にし、あわせてカーネルと起動時のメッセージを表示します。</li><li><em>splash=silent</em> -- スプラッシュ画面を有効にしますが、メッセージを表示しません。進行状況のバーのみを表示します。</li></ul></p>
diff --git a/themes/openSUSE/help-boot/ja/opt::profile.html b/themes/openSUSE/help-boot/ja/opt::profile.html
new file mode 100644
index 0000000..404cdfd
--- /dev/null
+++ b/themes/openSUSE/help-boot/ja/opt::profile.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="profile">プロファイルの選択</a>
+</h3>
+
+<p><em>@@@fkey_profile@@@</em> を押すとプロファイルを選択することができます。選択したプロファイルを利用してシステムを起動することができます。</p>
diff --git a/themes/openSUSE/help-boot/ko/navi.html b/themes/openSUSE/help-boot/ko/navi.html
new file mode 100644
index 0000000..73cf4cc
--- /dev/null
+++ b/themes/openSUSE/help-boot/ko/navi.html
@@ -0,0 +1 @@
+<p><a href="#foobar">FOOBAR</a> 로 되돌아가기</p>
diff --git a/themes/openSUSE/help-boot/ko/opt.html b/themes/openSUSE/help-boot/ko/opt.html
new file mode 100644
index 0000000..2b4d4cb
--- /dev/null
+++ b/themes/openSUSE/help-boot/ko/opt.html
@@ -0,0 +1,12 @@
+<h3>
+<a name="opt">부트 옵션</a>
+</h3>
+
+<p>
+<ul>
+ <li><a href="#o_splash">스플래시</a> -- 스플래시 화면의 동작 영향</li>
+ <li><a href="#o_apm">apm</a> -- 전원 관리 전환</li>
+ <li><a href="#o_acpi">acpi</a> -- 고급 구성 및 전원 인터페이스</li>
+ <li><a href="#o_ide">ide</a> -- IDE 서브시스템 제어</li>
+</ul>
+</p>
diff --git a/themes/openSUSE/help-boot/ko/opt::help.html b/themes/openSUSE/help-boot/ko/opt::help.html
new file mode 100644
index 0000000..66504a1
--- /dev/null
+++ b/themes/openSUSE/help-boot/ko/opt::help.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="help">도움말 시스템 사용</a>
+</h3>
+
+<p>부트로더 온라인 도움말은 context sensitive 입니다. 선택한 메뉴 아이템에 대한 정보를 얻거나, 부트 옵션을 편집 할 때 옵션에 커서가 올라가있으면 거기에 대한 정보를 조회 할 수 있습니다.</p>
+
+<p>찾아보기 키 <ul><li><em>위 화살표</em>: 앞의 링크를 하이라이트</li><li><em>아래 화살표</em>: 다음의 링크를 하이라이트</li><li><em>왼쪽 화살표</em>, <em>백스페이스</em>: 이전 주제로 되돌아가기</li><li><em>오른쪽 화살표</em>, <em>엔터</em>, <em>스페이스</em>: 다음의 링크</li><li><em>페이지 업</em>: 한장 위로</li><li><em>페이지 다운</em>: 한장 아래로</li><li><em>홈</em>: 첫장으로</li><li><em>엔드</em>: 마지막 장으로</li><li><em>Esc</em>: 도움말을 떠남</li></ul></p>
diff --git a/themes/openSUSE/help-boot/ko/opt::keytable.html b/themes/openSUSE/help-boot/ko/opt::keytable.html
new file mode 100644
index 0000000..7a7be67
--- /dev/null
+++ b/themes/openSUSE/help-boot/ko/opt::keytable.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="keytable">언어 및 키보드 배열 선택</a>
+</h3>
+
+<p><h3><em>@@@fkey_lang@@@</em> 을 눌러 부트 로더가 사용할 언어 및 키보드 배열을 변경합니다.</h3></p>
diff --git a/themes/openSUSE/help-boot/ko/opt::o_acpi.html b/themes/openSUSE/help-boot/ko/opt::o_acpi.html
new file mode 100644
index 0000000..cd4924c
--- /dev/null
+++ b/themes/openSUSE/help-boot/ko/opt::o_acpi.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="o_acpi">커널 옵션: acpi</a>
+</h3>
+
+<p>ACPI 는 (Advanced Configuration and Power Interface) 운영체제와 바이오스간의 전원관리 인터페이스를 정의하는 표준입니다. 기본적으로 <em>acpi</em> 는 2000년 이후에 제조된 바이오스가 감지될 때 켜집니다. 다음은 ACPI 동작을 제어하기위해 일반적으로 사용되는 항목 : <ul><li><em>pci=noacpi</em> -- ACPI 를 PCI 인터럽트 라우트에 사용하지 않음</li><li><em>acpi=oldboot</em> -- 부팅 활성화에서 ACPI 부분 적절한 것 만</li><li><em>acpi=off</em> -- ACPI 를 완전히 끄기</li><li><em>acpi=force</em> -- 2000년 이전에 제조된 바이오스일지라도 ACPI 옵션 켜기</li></ul></p>
+
+<p>특히 최신 컴퓨터에서, 예전의 <a href="#o_apm">apm</a> 시스템을 대체합니다.</p>
diff --git a/themes/openSUSE/help-boot/ko/opt::o_apm.html b/themes/openSUSE/help-boot/ko/opt::o_apm.html
new file mode 100644
index 0000000..a0bcae5
--- /dev/null
+++ b/themes/openSUSE/help-boot/ko/opt::o_apm.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="o_apm">커널 옵션: apm</a>
+</h3>
+
+<p>APM(Advanced Power Management)은 현재 컴퓨터에서 사용되고 있는 두 종류의 전원관리기술 중 하나입니다. 주로 노트북에서 사용되는 디스크 일시 중지 같은 기능은 물론, 전원이 공급이 중단된 이후 컴퓨터를 끄는데 이 기술이 사용됩니다. APM은 바이오스에 의해 결정됩니다. 만약 바이오스에 문제가 발생한다면 APM을 사용하는데 제약이 따를 뿐만 아니라 심지어 컴퓨터 작동을 방해할 수도 있습니다. 따라서 APM 관련 항목은 기본적으로 <ul><li><em>apm=off</em> -- APM 을 완전히 끄기</li></ul> 매개변수와 함께 꺼져있을 수 있습니다.</p>
+
+<p>최신 컴퓨터의 경우 새로운 <a href="#o_acpi">ACPI</a> 이 좀더 유용할 수 있습니다.</p>
diff --git a/themes/openSUSE/help-boot/ko/opt::o_ide.html b/themes/openSUSE/help-boot/ko/opt::o_ide.html
new file mode 100644
index 0000000..b70727e
--- /dev/null
+++ b/themes/openSUSE/help-boot/ko/opt::o_ide.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="o_ide">커널 옵션: ide</a>
+</h3>
+
+<p>SCSI 와는 달리 IDE 는 대부분의 데스크톱 워크스테이션에서 사용되고 있습니다. IDE 시스템에 문제가 발생할 경우에는 커널 매개변수를 사용하세요: <ul><li><em>ide=nodma</em> -- IDE 드라이버용 DMA 끄기</li></ul></p>
diff --git a/themes/openSUSE/help-boot/ko/opt::o_splash.html b/themes/openSUSE/help-boot/ko/opt::o_splash.html
new file mode 100644
index 0000000..80fa00b
--- /dev/null
+++ b/themes/openSUSE/help-boot/ko/opt::o_splash.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="o_splash">커널 옵션: splash</a>
+</h3>
+
+<p>스플래시 스크린은 시스템이 시작되는 동안 보여지는 그림입니다.<ul><li><em>splash=0</em> -- 스플래시 스크린은 꺼져 있습니다. 아주 오래된 모니터를 사용하고 있거나, 오류가 발생했을 수 있습니다.</li><li><em>splash=verbose</em> -- 스플래시 활성화, 커널과 부트 메시지가 계속 표시됩니다.</li><li><em>splash=silent</em> -- 스플래시 활성화, 하지만 메시지는 없고 대신에 진행상황 막대가 그려집니다.</li></ul></p>
diff --git a/themes/openSUSE/help-boot/ko/opt::profile.html b/themes/openSUSE/help-boot/ko/opt::profile.html
new file mode 100644
index 0000000..fdb11b2
--- /dev/null
+++ b/themes/openSUSE/help-boot/ko/opt::profile.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="profile">프로필 선택</a>
+</h3>
+
+<p><em>@@@fkey_profile@@@</em> 를 눌러 프로필을 선택합니다. 시스템이 이 프로필 설정으로 시작 될것입니다.</p>
diff --git a/themes/openSUSE/help-boot/ky/navi.html b/themes/openSUSE/help-boot/ky/navi.html
new file mode 100644
index 0000000..907c102
--- /dev/null
+++ b/themes/openSUSE/help-boot/ky/navi.html
@@ -0,0 +1 @@
+<p><a href="#foobar">FOOBAR</a> кайтуу</p>
diff --git a/themes/openSUSE/help-boot/ky/opt.html b/themes/openSUSE/help-boot/ky/opt.html
new file mode 100644
index 0000000..cd35101
--- /dev/null
+++ b/themes/openSUSE/help-boot/ky/opt.html
@@ -0,0 +1,12 @@
+<h3>
+<a name="opt">Жүктөөлүү параметрлери</a>
+</h3>
+
+<p>
+<ul>
+ <li><a href="#o_splash">заставка</a> -- экрандык заставканы жандыруу/өчүрүү</li>
+ <li><a href="#o_apm">apm</a> -- электр камсыздоо башкаруусун иштетет</li>
+ <li><a href="#o_acpi">acpi</a> -- система ырастоо жетилген интерфейси жана энергияны камсыздоо башкаруучу</li>
+ <li><a href="#o_ide">ide</a> -- IDE системасын башкарат</li>
+</ul>
+</p>
diff --git a/themes/openSUSE/help-boot/ky/opt::help.html b/themes/openSUSE/help-boot/ky/opt::help.html
new file mode 100644
index 0000000..385086c
--- /dev/null
+++ b/themes/openSUSE/help-boot/ky/opt::help.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="help">Жардам системасын колодонуу</a>
+</h3>
+
+<p>Онлайндык жүктөөгүч жардамы мазмундан көз каранды. Ал менюдан тандалаган элемент боюнча маалымат берет, же эгерде сиз жүктөөлүү параметрлерин өзгөртүп жаткан учурда, параметрде турган курсор боюнча маалыматты көрсөтүүнү аракеттенет.</p>
+
+<p>Башкаруу баскычтары: <ul><li><em>Жогору жебеси</em>: мурунку шилтемени жаркыратат</li><li><em>Ылдый жебеси</em>: кийинки шилтемени жаркыратат</li><li><em>Солго жебеси</em>, <em>Backspace</em>: мурунку бөлүмгө өтүү</li><li><em>Оңго жебеси</em>, <em>Enter</em>, <em>Боштук</em>: шилтемедем өтүү</li><li><em>Page Up</em>: мурунку бетке өтүү</li><li><em>Page Down</em>: кийинки бетке өтүү</li><li><em>Home</em>: беттин башына өтүү</li><li><em>End</em>: беттин аягына өтүү</li><li><em>Esc</em>: жардам системасындан чыгуу</li></ul></p>
diff --git a/themes/openSUSE/help-boot/ky/opt::keytable.html b/themes/openSUSE/help-boot/ky/opt::keytable.html
new file mode 100644
index 0000000..45f6731
--- /dev/null
+++ b/themes/openSUSE/help-boot/ky/opt::keytable.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="keytable">Тилди жана клавиатура жайгалышын тандоо</a>
+</h3>
+
+<p>Жүктөгүч колдонуучу тилин жана клавиатурасын өзгөртүү үчүн <em>@@@fkey_lang@@@</em> баскычын басыңыз.</p>
diff --git a/themes/openSUSE/help-boot/ky/opt::o_acpi.html b/themes/openSUSE/help-boot/ky/opt::o_acpi.html
new file mode 100644
index 0000000..5145574
--- /dev/null
+++ b/themes/openSUSE/help-boot/ky/opt::o_acpi.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="o_acpi">Ядро параметрлери: acpi</a>
+</h3>
+
+<p>ACPI (Жетилген система ырастоо интерфейси жана энергияны камсыздоо башкаруучусу) бул операциондук система жана BIOS арасында стандарттык ырастоо жана энергияны камсыздоо башкаруу интерфесин түзөт. Алыдын ала, <em>pci=noacpi</em> -- PCI токтолуштарды башкарууда ACPI'ди колдонбоо жанык, эгерде BIOS дата версиясы 2000 жылдан кийин аныкталса. ACPI журуш-турушун башкаруу үчүн бир нече жалпы параметрлер бар: <ul><li><em>pci=noacpi</em> -- PCI токтолуштарды башкарууда ACPI'ди колдонбоо</li><li><em>acpi=oldboot</em> -- ACPI'дин жүктөлүүгө арналган бөлүгү гана активдүү калат</li><li><em>acpi=off</em> -- ACPI'ди толугу менен өчүрөт</li><li><em>acpi=force</em> -- BIOS дата версиясы 2000 жылдан мурун болсо да ACPI'ди жандырат</li></ul></p>
+
+<p>Жаңы компьютердерде эски <a href="#o_apm">apm</a> системасын ордун алмаштырат.</p>
diff --git a/themes/openSUSE/help-boot/ky/opt::o_apm.html b/themes/openSUSE/help-boot/ky/opt::o_apm.html
new file mode 100644
index 0000000..0751330
--- /dev/null
+++ b/themes/openSUSE/help-boot/ky/opt::o_apm.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="o_apm">Ядро параметрлери: apm</a>
+</h3>
+
+<p>APM бул азыркы компьютерлерде колдонулуп жаткан электр камсыздоо башкаруусунун эки стратегиядан бириси. Ал негизинен лаптоп компьютерлерде дискти токтотуу функцияларында колдонулат, бирок электр булагы өчкөн учурларда компьютердин өчүүсүндө колдонулушу мүмкүн. APM BIOS'тун туура иштөөсүндө байланыштуу. Эгерде BIOS бузук болсо, анда APM колдонууда чектелүү же компьютер менен иштөөгө тыю салынышы мүмкүн. Бирок аны төмөнкү параметр менен өчүрсө болот: <ul><li><em>apm=off</em> -- ACPI'ди толугу менен өчүрөт</li></ul></p>
+
+<p>Кээ бир гана жаңы компьютердер башка <a href="#o_acpi">ACPI</a> караганда үстөмдүгү бар.</p>
diff --git a/themes/openSUSE/help-boot/ky/opt::o_ide.html b/themes/openSUSE/help-boot/ky/opt::o_ide.html
new file mode 100644
index 0000000..9292776
--- /dev/null
+++ b/themes/openSUSE/help-boot/ky/opt::o_ide.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="o_ide">Ядро параметрлери: ide</a>
+</h3>
+
+<p>IDE, SCSI'ге караганда көбүнчө иштөө станцияларында колдонулат. IDE системаларда кээ бир жабдык каталарды чечүү үчүн, ядронун пераметрлерин колдонуңуз: <ul><li><em>ide=nodma</em> -- IDE дисктер үчүн DMA режимин өчүрүү</li></ul></p>
diff --git a/themes/openSUSE/help-boot/ky/opt::o_splash.html b/themes/openSUSE/help-boot/ky/opt::o_splash.html
new file mode 100644
index 0000000..df0d177
--- /dev/null
+++ b/themes/openSUSE/help-boot/ky/opt::o_splash.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="o_splash">Ядро параметрлери: splash</a>
+</h3>
+
+<p>Экрандык заставка бул система жүктөлүп жатканда көрсөтүүлүчү сүрөт. <ul><li><em>splash=0</em> -- Экрандык заставка өчүк. Бул өтө эски мониторлор колдонулуп же кандайдыр бир ката бар болгон кезде өтө пайдалуу ыкма.</li><li><em>splash=verbose</em> -- Экрандык заставка жанык, бирок жүктөө жана ядро билдирүүлөрү көрсөтүлөт.</li><li><em>splash=silent</em> -- Экрандык заставка жанык жана эч кандай билдирүүлөр көрсөтүлбөйт. Билдирүүлөр ордуна аткарылып жаткан жүктөлүү индикатору көрсөтүлөт.</li></ul></p>
diff --git a/themes/openSUSE/help-boot/ky/opt::profile.html b/themes/openSUSE/help-boot/ky/opt::profile.html
new file mode 100644
index 0000000..f6db846
--- /dev/null
+++ b/themes/openSUSE/help-boot/ky/opt::profile.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="profile">Профилди тандоо</a>
+</h3>
+
+<p>Профилди тандоо үчүн <em>@@@fkey_profile@@@</em> баскычын тандоо. Сиздин системаңыз бул профилде сакталган ырастоолорду колдонуп жүктөлөт.</p>
diff --git a/themes/openSUSE/help-boot/lt/navi.html b/themes/openSUSE/help-boot/lt/navi.html
new file mode 100644
index 0000000..60f7f07
--- /dev/null
+++ b/themes/openSUSE/help-boot/lt/navi.html
@@ -0,0 +1 @@
+<p>Grįžti į <a href="#foobar">FOOBAR</a></p>
diff --git a/themes/openSUSE/help-boot/lt/opt.html b/themes/openSUSE/help-boot/lt/opt.html
new file mode 100644
index 0000000..4d97209
--- /dev/null
+++ b/themes/openSUSE/help-boot/lt/opt.html
@@ -0,0 +1,12 @@
+<h3>
+<a name="opt">Paleidimo parametrai</a>
+</h3>
+
+<p>
+<ul>
+ <li><a href="#o_splash">pristatymas</a> -- daro įtaką pristatymo ekrano elgsenai</li>
+ <li><a href="#o_apm">apm</a> -- perjungia maitinimo valdymą</li>
+ <li><a href="#o_acpi">acpi</a> -- sudėtingesnė konfigūracija ir energijos sąsaja</li>
+ <li><a href="#o_ide">ide</a> -- kontroliuoja IDE posistemį</li>
+</ul>
+</p>
diff --git a/themes/openSUSE/help-boot/lt/opt::help.html b/themes/openSUSE/help-boot/lt/opt::help.html
new file mode 100644
index 0000000..34570ee
--- /dev/null
+++ b/themes/openSUSE/help-boot/lt/opt::help.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="help">Naudojimasis pagalbos sistema</a>
+</h3>
+
+<p>Paleidyklės nuotolinė pagalba labai priklauso nuo konteksto. Ji pateikia informaciją apie meniu punktą, o keičiant sistemos paleidimo parametrus, ieško informacijos apie parinktį, ties kuria yra žymeklis.</p>
+
+<p>Judėjimo klavišai <ul><li><em>Rodyklė į viršų</em>: paryškinti ankstesnę nuorodą</li><li><em>Rodyklė į apačią</em>: paryškinti kitą nuorodą</li><li><em>Rodyklė į kairę</em>, <em>Naikinti</em>: grįžti į ankstesnę temą</li><li><em>Rodyklė į dešinę</em>, <em>Įvesti (Enter)</em>, <em>Tarpas</em>: sekti nuorodą</li><li><em>Psl Aukštyn (Page Up)</em>: eiti į puslapio pabaigą</li><li><em>Psl Žemyn (Page Down)</em>: eiti į puslapio pabaigą</li><li><em>Pradžia (Home)</em>: eiti į puslapio pradžią</li><li><em>Pabaiga (End)</em>: eiti į puslapio pabaigą</li><li><em>Gr (Esc)</em>: palikti pagalbą</li></ul></p>
diff --git a/themes/openSUSE/help-boot/lt/opt::keytable.html b/themes/openSUSE/help-boot/lt/opt::keytable.html
new file mode 100644
index 0000000..c3cfe8c
--- /dev/null
+++ b/themes/openSUSE/help-boot/lt/opt::keytable.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="keytable">Kalbos ir klaviatūros išdėstymo pasirinkimas</a>
+</h3>
+
+<p>Norėdami pakeisti kalbą ir klaviatūros išdėstymą, kuriuos naudos paleidyklė, spauskite <em>@@@fkey_lang@@@</em>.</p>
diff --git a/themes/openSUSE/help-boot/lt/opt::o_acpi.html b/themes/openSUSE/help-boot/lt/opt::o_acpi.html
new file mode 100644
index 0000000..98b3c4b
--- /dev/null
+++ b/themes/openSUSE/help-boot/lt/opt::o_acpi.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="o_acpi">Branduolio parametrai: acpi</a>
+</h3>
+
+<p>ACPI (Sudėtingesnė konfigūracija ir energijos sąsaja) yra standartas, apibrėžiantis energijos ir konfigūracijos tvarkymo sąsajas tarp operacinės sistemos ir BIOS. Paprastai <em>acpi</em> yra įjungta, kai aptinkamas naujesnis nei 2000 metų BIOS. Yra keli dažnai naudojami ACPI elgsenos parametrai: <ul><li><em>pci=noacpi</em> -- PCI pertraukčių nukreipimui nenaudoti ACPI </li><li><em>acpi=oldboot</em> -- lieka aktyvuotos tik su sistemos paleidimu susijusios ACPI dalys</li><li><em>acpi=off</em> -- visiškai išjungti ACPI</li><li><em>acpi=force</em> -- įjungti ACPI net jei BIOS senesnis nei 2000-ųjų metų</li></ul></p>
+
+<p>Naujausiuose kompiuteriuose ja pakeičiama senoji <a href="#o_apm">apm</a> sistema.</p>
diff --git a/themes/openSUSE/help-boot/lt/opt::o_apm.html b/themes/openSUSE/help-boot/lt/opt::o_apm.html
new file mode 100644
index 0000000..2f2e985
--- /dev/null
+++ b/themes/openSUSE/help-boot/lt/opt::o_apm.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="o_apm">Branduolio parametrai: apm</a>
+</h3>
+
+<p>APM yra viena iš dviejų energijos valdymo strategijų, naudojamų dabartiniuose kompiuteriuose. Ji paprastai naudojama nešiojamuosiuose kompiuteriuose tokioms funkcijoms kaip sustabdymui į diską, tačiau taip pat gali būti atsakinga už kompiuterio išjungimą atjungus maitinimą. APM pasikliauna tinkamai veikiančia BIOS. Jei BIOS sugadinta, APM naudojamo galimybės sumažėja ar net neleidžia kompiuteriui veikti. Bet kuriuo atveju ją galima išjungti naudojant parametrą <ul><li><em>apm=off</em> -- visiškai išjungti APM</li></ul></p>
+
+<p>Kai kurie patys naujausi kompiuteriai gali išnaudoti daugiau galimybių su naujesniu <a href="#o_acpi">ACPI</a>.</p>
diff --git a/themes/openSUSE/help-boot/lt/opt::o_ide.html b/themes/openSUSE/help-boot/lt/opt::o_ide.html
new file mode 100644
index 0000000..71da1af
--- /dev/null
+++ b/themes/openSUSE/help-boot/lt/opt::o_ide.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="o_ide">Branduolio parametrai: ide</a>
+</h3>
+
+<p>IDE, kitaip nei SCSI, paprastai naudojama daugumoje stalo kompiuteriais aprūpintų darbo vietų. Norėdami išvengti kai kurių aparatinės įrangos nesklandumų su IDE sistema, naudokite branduolio parametrą: <ul><li><em>ide=nodma</em> -- IDE įrenginiams išjungti DMA</li></ul></p>
diff --git a/themes/openSUSE/help-boot/lt/opt::o_splash.html b/themes/openSUSE/help-boot/lt/opt::o_splash.html
new file mode 100644
index 0000000..4b109a8
--- /dev/null
+++ b/themes/openSUSE/help-boot/lt/opt::o_splash.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="o_splash">Branduolio parametrai: splash</a>
+</h3>
+
+<p>Pristatymas - tai paveikslėlis, rodomas sistemos paleidimo metu. <ul><li><em>splash=0</em> -- Pristatymo ekranas išjungtas. Naudinga labai seniems monitoriams arba klaidų pasirodymo atveju.</li><li><em>splash=verbose</em> -- Aktyvuoja pristatymo ekraną, tačiau branduolio ir sistemos paleidimo pranešimai vis tiek bus rodomi.</li><li><em>splash=silent</em> -- Aktyvuoja pristatymą, bet ne pranešimus. Vietoj to piešiama eigos juosta.</li></ul></p>
diff --git a/themes/openSUSE/help-boot/lt/opt::profile.html b/themes/openSUSE/help-boot/lt/opt::profile.html
new file mode 100644
index 0000000..7139c33
--- /dev/null
+++ b/themes/openSUSE/help-boot/lt/opt::profile.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="profile">Pasirinkite profilį</a>
+</h3>
+
+<p>Norėdami pasirinkti profilį, spauskite<em>@@@fkey_profile@@@</em>. Sistema bus paleista naudojant šiame profilyje įrašytą konfigūraciją.</p>
diff --git a/themes/openSUSE/help-boot/mr/navi.html b/themes/openSUSE/help-boot/mr/navi.html
new file mode 100644
index 0000000..fc318c7
--- /dev/null
+++ b/themes/openSUSE/help-boot/mr/navi.html
@@ -0,0 +1 @@
+<p>परत जा<a href="#foobar">FOOBAR</a></p>
diff --git a/themes/openSUSE/help-boot/mr/opt.html b/themes/openSUSE/help-boot/mr/opt.html
new file mode 100644
index 0000000..2c67363
--- /dev/null
+++ b/themes/openSUSE/help-boot/mr/opt.html
@@ -0,0 +1,12 @@
+<h3>
+<a name="opt">बूट विकल्प</a>
+</h3>
+
+<p>
+<ul>
+ <li><a href="#o_splash">स्प्लेश</a> -- influence the behavior of the splash screen</li>
+ <li><a href="#o_apm">एपिएम</a> -- toggle power management</li>
+ <li><a href="#o_acpi">एसिपिआय</a> -- advanced configuration and power interface</li>
+ <li><a href="#o_ide">आयडिई</a> -- control the IDE subsystem</li>
+</ul>
+</p>
diff --git a/themes/openSUSE/help-boot/mr/opt::help.html b/themes/openSUSE/help-boot/mr/opt::help.html
new file mode 100644
index 0000000..dc54eb2
--- /dev/null
+++ b/themes/openSUSE/help-boot/mr/opt::help.html
@@ -0,0 +1,25 @@
+<h3>
+<a name="help"> हेल्प सिस्टिम वापऱुन </a>
+</h3>
+
+<p>
+The boot loader online help is context sensitive. It gives information
+about the selected menu item or, if you are editing boot options,
+it tries to look up information about the option in which the cursor is
+positioned.
+</p>
+
+<p>
+Navigation Keys
+<ul>
+ <li><em> अप एरो </em>: highlight previous link</li>
+ <li><em>डाऊन एरो </em>: highlight next link</li>
+ <li><em>डावा एरो </em>, <em>मागे</em>: return to previous topic</li>
+ <li><em>उजवा एरो </em>, <em>एन्टर</em>, <em>स्पेस</em>: follow link</li>
+ <li><em>पेज अप</em>: scroll up one page</li>
+ <li><em> पेज डाऊन </em>: scroll down one page</li>
+ <li><em>होम</em>: go to page start</li>
+ <li><em>एन्ड</em>: go to page end</li>
+ <li><em>एस्केप</em>: leave help</li>
+</ul>
+</p>
diff --git a/themes/openSUSE/help-boot/mr/opt::keytable.html b/themes/openSUSE/help-boot/mr/opt::keytable.html
new file mode 100644
index 0000000..9e45beb
--- /dev/null
+++ b/themes/openSUSE/help-boot/mr/opt::keytable.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="keytable">भाषा व किबोर्ड रचना निवड</a>
+</h3>
+
+<p>
+Press <em>@@@fkey_lang@@@</em> to change language and keyboard layout the boot loader uses.
+</p>
diff --git a/themes/openSUSE/help-boot/mr/opt::o_acpi.html b/themes/openSUSE/help-boot/mr/opt::o_acpi.html
new file mode 100644
index 0000000..bfc825f
--- /dev/null
+++ b/themes/openSUSE/help-boot/mr/opt::o_acpi.html
@@ -0,0 +1,23 @@
+<h3>
+<a name="o_acpi">केर्नल विकल्प: एसिपिआई </a>
+</h3>
+
+<p>
+ACPI (Advanced Configuration and Power Interface) is a
+standard that defines power and configuration management interfaces
+between an operating system and the BIOS. By default, <em>एसिपिआय</em> is
+switched on when a BIOS is detected that is newer than from year
+2000. There are several commonly
+used parameters to control the behavior of ACPI:
+<ul>
+ <li><em>पिसिआई=एनओ</em> -- do not use ACPI to route PCI interrupts</li>
+ <li><em>एसिपिआई=ओल्डबूट</em> -- only the parts of ACPI that are relevant for booting remain activated</li>
+ <li><em>एसिपिआई=ओफ</em> -- switch off ACPI completely</li>
+ <li><em>एसिपिआई=फोर्स</em> -- switch on ACPI even if your BIOS is dated before 2000</li>
+</ul>
+</p>
+
+<p>
+Especially on new computers, it replaces the old
+<a href="#o_apm">एपिएम</a> system.
+</p>
diff --git a/themes/openSUSE/help-boot/mr/opt::o_apm.html b/themes/openSUSE/help-boot/mr/opt::o_apm.html
new file mode 100644
index 0000000..953db23
--- /dev/null
+++ b/themes/openSUSE/help-boot/mr/opt::o_apm.html
@@ -0,0 +1,21 @@
+<h3>
+<a name="o_apm"> केर्नल विकल्प: एपिएम </a>
+</h3>
+
+<p>
+APM is one of the two power management strategies used on current
+computers. It is mainly used with laptops for functions like suspend
+to disk, but it may also be responsible for switching off the
+computer after power down. APM relies on a correct working BIOS. If
+the BIOS is broken, APM may have only limited use or even prevent the
+computer from working. Therefore, it may be switched off with the
+parameter
+<ul>
+ <li><em> एपिएम=ओफ</em> -- switch off APM completely</li>
+</ul>
+</p>
+
+<p>
+Some very new computers may take more advantage from the newer
+<a href="#o_acpi">एसिपिआई</a>.
+</p>
diff --git a/themes/openSUSE/help-boot/mr/opt::o_ide.html b/themes/openSUSE/help-boot/mr/opt::o_ide.html
new file mode 100644
index 0000000..2d0154e
--- /dev/null
+++ b/themes/openSUSE/help-boot/mr/opt::o_ide.html
@@ -0,0 +1,12 @@
+<h3>
+<a name="o_ide">केर्नल विकल्प: आइडिई</a>
+</h3>
+
+<p>
+IDE is, unlike SCSI, commonly used in most desktop workstations.
+To circumvent some hardware problems that occur with IDE systems, use the
+kernel parameter:
+<ul>
+ <li><em>आइडिई=एनओडिएमए</em> -- switch off DMA for IDE drives</li>
+</ul>
+</p>
diff --git a/themes/openSUSE/help-boot/mr/opt::o_splash.html b/themes/openSUSE/help-boot/mr/opt::o_splash.html
new file mode 100644
index 0000000..5832678
--- /dev/null
+++ b/themes/openSUSE/help-boot/mr/opt::o_splash.html
@@ -0,0 +1,12 @@
+<h3>
+<a name="o_splash">केर्नल विकल्प: स्प्लेश </a>
+</h3>
+
+<p>
+The splash screen is the picture shown during system start-up.
+<ul>
+ <li><em> स्प्लेश=०</em> -- The splash screen is switched off. This may be useful with very old monitors or if some error occurs.</li>
+ <li><em> स्प्लेश=वर्बोस </em> -- Activates splash, kernel and boot messages are still shown.</li>
+ <li><em> स्प्लेश=सायलेन्ट </em> -- Activates splash, but no messages. Instead a progress bar is drawn.</li>
+</ul>
+</p>
diff --git a/themes/openSUSE/help-boot/mr/opt::profile.html b/themes/openSUSE/help-boot/mr/opt::profile.html
new file mode 100644
index 0000000..be78ac1
--- /dev/null
+++ b/themes/openSUSE/help-boot/mr/opt::profile.html
@@ -0,0 +1,8 @@
+<h3>
+<a name="profile">प्रोफाइल </a>
+</h3>
+
+<p>
+Press <em>@@@fkey_profile@@@</em> to select a profile. Your system will be started using the
+configuration saved in this profile.
+</p>
diff --git a/themes/openSUSE/help-boot/nb/navi.html b/themes/openSUSE/help-boot/nb/navi.html
new file mode 100644
index 0000000..224e300
--- /dev/null
+++ b/themes/openSUSE/help-boot/nb/navi.html
@@ -0,0 +1 @@
+<p>Tilbake til <a href="#foobar">FOOBAR</a></p>
diff --git a/themes/openSUSE/help-boot/nb/opt.html b/themes/openSUSE/help-boot/nb/opt.html
new file mode 100644
index 0000000..e7d6d94
--- /dev/null
+++ b/themes/openSUSE/help-boot/nb/opt.html
@@ -0,0 +1,12 @@
+<h3>
+<a name="opt">Oppstartsalternativer</a>
+</h3>
+
+<p>
+<ul>
+ <li><a href="#o_splash">splash</a> -- påvirker oppstartsbildet</li>
+ <li><a href="#o_apm">apm</a> -- slå strømstyring av og på</li>
+ <li><a href="#o_acpi">acpi</a> -- avansert oppsett og strømstyringsvalg</li>
+ <li><a href="#o_ide">ide</a> -- kontroller IDE-systemet</li>
+</ul>
+</p>
diff --git a/themes/openSUSE/help-boot/nb/opt::help.html b/themes/openSUSE/help-boot/nb/opt::help.html
new file mode 100644
index 0000000..1bb3a47
--- /dev/null
+++ b/themes/openSUSE/help-boot/nb/opt::help.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="help">Bruke Hjelp-systemet</a>
+</h3>
+
+<p>Den elektroniske hjelpen for oppstartslasteren er kontekstsensitiv. Den gir informasjon om det valgte menyelementet eller forsøker å finne informasjon om valget som markøren er plassert på, når du redigerer oppstartsvalg.</p>
+
+<p>Navigasjonstaster <ul><li><em>Pil opp</em>: aktiver forrige lenke</li><li><em>Pil ned</em>: aktiver neste lenke</li><li><em>Pil venstre</em>, <em>Backspace</em>: tilbake til forrige emne</li><li><em>Pil høyre</em>, <em>Enter</em>, <em>Mellomrom</em>: følg lenken</li><li><em>Page Up</em>: bla én side oppover</li><li><em>Page Down</em>: bla én side nedover</li><li><em>Home</em>: til begynnelsen av siden</li><li><em>End</em>: til slutten av siden</li><li><em>Esc</em>: avslutt Hjelp</li></ul></p>
diff --git a/themes/openSUSE/help-boot/nb/opt::keytable.html b/themes/openSUSE/help-boot/nb/opt::keytable.html
new file mode 100644
index 0000000..4e6b318
--- /dev/null
+++ b/themes/openSUSE/help-boot/nb/opt::keytable.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="keytable">Valg av språk og tastaturoppsett</a>
+</h3>
+
+<p>Trykk på <em>@@@fkey_lang@@@</em> for å endre språket og tastaturoppsettet for oppstartslasteren.</p>
diff --git a/themes/openSUSE/help-boot/nb/opt::o_acpi.html b/themes/openSUSE/help-boot/nb/opt::o_acpi.html
new file mode 100644
index 0000000..3d28f91
--- /dev/null
+++ b/themes/openSUSE/help-boot/nb/opt::o_acpi.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="o_acpi">Kjernevalg: acpi</a>
+</h3>
+
+<p>ACPI (Advanced Configuration and Power Interface) er en standard som definerer kommunikasjonen med hensyn til strømstyring og konfigurasjon mellom et operativsystem og BIOS. Som standard aktiveres <em>acpi</em> dersom BIOS er nyere enn fra år 2000. Det finnes flere vanlige parametere som som styrer ACPI-funksjonen:<ul><li><em>pci=noacpi</em> -- ikke bruk ACPI for å rute PCI-avbrudd</li><li><em>acpi=oldboot</em> -- bare de delene av ACPI som er relevant for oppstart, skal være aktivert</li><li><em>acpi=off</em> -- deaktiver ACPI helt</li><li><em>acpi=force</em> -- aktiver ACPI selv om BIOS er eldre enn fra 2000</li></ul></p>
+
+<p>Spesielt på nye datamaskiner, erstatter dette det tidligere <a href="#o_apm">apm</a>-systemet.</p>
diff --git a/themes/openSUSE/help-boot/nb/opt::o_apm.html b/themes/openSUSE/help-boot/nb/opt::o_apm.html
new file mode 100644
index 0000000..e4277c1
--- /dev/null
+++ b/themes/openSUSE/help-boot/nb/opt::o_apm.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="o_apm">Kjernevalg: apm</a>
+</h3>
+
+<p>APM er én av to strømstyringsstrategier som brukes på moderne datamaskiner. APM brukes hovedsakelig på bærbare maskiner for funksjoner som diskdvale, men kan også slå av maskinen når strømmen brytes. APM krever at BIOS fungerer riktig. Hvis BIOS er skadet, har APM begrenset nytte, og kan til og med føre til at datamaskinen ikke fungerer. Derfor kan APM deaktiveres med parameteren <ul><li><em>apm=off</em> -- deaktiver APM helt</li></ul></p>
+
+<p>For enkelte helt nye datamaskiner kan det være en fordel å bruke den nyere <a href="#o_acpi">ACPI</a>.</p>
diff --git a/themes/openSUSE/help-boot/nb/opt::o_ide.html b/themes/openSUSE/help-boot/nb/opt::o_ide.html
new file mode 100644
index 0000000..02850f0
--- /dev/null
+++ b/themes/openSUSE/help-boot/nb/opt::o_ide.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="o_ide">Kjernevalg: ide</a>
+</h3>
+
+<p>IDE benyttes, i motsetning til SCSI, for de fleste skrivebordsmaskiner. For å unngå enkelte maskinvareproblemer som forekommer med IDE-systemer, bruk kjerneparameteren: <ul><li><em>ide=nodma</em> -- deaktiver DMA for IDE-disker</li></ul></p>
diff --git a/themes/openSUSE/help-boot/nb/opt::o_splash.html b/themes/openSUSE/help-boot/nb/opt::o_splash.html
new file mode 100644
index 0000000..68786d5
--- /dev/null
+++ b/themes/openSUSE/help-boot/nb/opt::o_splash.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="o_splash">Kjernevalg: splash</a>
+</h3>
+
+<p>Oppstartsskjermen er bildet som vises når systemet starter opp. <ul><li><em>splash=0</em> -- Oppstartsbildet slås av. Dette kan være nyttig for svært gamle skjermer, eller hvis det oppstår feil.</li><li><em>splash=verbose</em> -- Aktiverer et oppstartsbilde, men kjerne- og oppstartsmeldinger vises likevel.</li><li><em>splash=silent</em> -- Aktiverer et oppstartsbilde, men ingen meldinger. En forløpsindikator vises i stedet.</li></ul></p>
diff --git a/themes/openSUSE/help-boot/nb/opt::profile.html b/themes/openSUSE/help-boot/nb/opt::profile.html
new file mode 100644
index 0000000..d1369f6
--- /dev/null
+++ b/themes/openSUSE/help-boot/nb/opt::profile.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="profile">Velg profil</a>
+</h3>
+
+<p>Trykk <em>@@@fkey_profile@@@</em> for å velge en profil. Systemet vil bruke konfigurasjonen som er lagret i denne profilen under oppstarten.</p>
diff --git a/themes/openSUSE/help-boot/nl/navi.html b/themes/openSUSE/help-boot/nl/navi.html
new file mode 100644
index 0000000..112f78c
--- /dev/null
+++ b/themes/openSUSE/help-boot/nl/navi.html
@@ -0,0 +1 @@
+<p>Terug naar <a href="#foobar">FOOBAR</a></p>
diff --git a/themes/openSUSE/help-boot/nl/opt.html b/themes/openSUSE/help-boot/nl/opt.html
new file mode 100644
index 0000000..1624282
--- /dev/null
+++ b/themes/openSUSE/help-boot/nl/opt.html
@@ -0,0 +1,12 @@
+<h3>
+<a name="opt">Opstartopties</a>
+</h3>
+
+<p>
+<ul>
+ <li><a href="#o_splash">opstartscherm</a> -- beïnvloedt het gedrag van het opstartscherm (splash)</li>
+ <li><a href="#o_apm">apm</a> -- schakel energiebeheer om</li>
+ <li><a href="#o_acpi">acpi</a> -- geavanceerde configuratie en energie-interface</li>
+ <li><a href="#o_ide">ide</a> -- het IDE-subsysteem aansturen</li>
+</ul>
+</p>
diff --git a/themes/openSUSE/help-boot/nl/opt::help.html b/themes/openSUSE/help-boot/nl/opt::help.html
new file mode 100644
index 0000000..3e61b35
--- /dev/null
+++ b/themes/openSUSE/help-boot/nl/opt::help.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="help">Het helpsysteem gebruiken</a>
+</h3>
+
+<p>De online-help van de bootloader is contextgevoelig. Het geeft u informatie over de geselecteerde menuoptie of, als u opstartopties aan het bewerken bent, probeert het informatie over de optie die zich onder de cursor bevindt op te zoeken.</p>
+
+<p>Navigatietoetsen <ul><li><em>Pijl omhoog</em>: vorige koppeling accentueren</li><li><em>Pijl omlaag</em>: volgende koppeling accentueren</li><li><em>Pijl links</em>, <em>Backspace</em>: ga terug naar het vorige onderwerp</li><li><em>Pijl rechts</em>, <em>Enter</em>, <em>Spatie</em>: volg de koppeling</li><li><em>Page Up</em>: ga een pagina omhoog</li><li><em>Pagina omlaag</em>: ga een pagina omlaag</li><li><em>Startpagina</em>: ga naar paginabegin</li><li><em>Einde</em>: ga naar pagina-einde</li><li><em>Esc</em>: verlaat de helpfunctie</li></ul></p>
diff --git a/themes/openSUSE/help-boot/nl/opt::keytable.html b/themes/openSUSE/help-boot/nl/opt::keytable.html
new file mode 100644
index 0000000..8728893
--- /dev/null
+++ b/themes/openSUSE/help-boot/nl/opt::keytable.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="keytable">Taal en toetsenbordindeling selecteren</a>
+</h3>
+
+<p>Druk op <em>@@@fkey_lang@@@</em> om de taal en toetsenbordindeling van de bootloader te wijzigen.</p>
diff --git a/themes/openSUSE/help-boot/nl/opt::o_acpi.html b/themes/openSUSE/help-boot/nl/opt::o_acpi.html
new file mode 100644
index 0000000..fc21e4c
--- /dev/null
+++ b/themes/openSUSE/help-boot/nl/opt::o_acpi.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="o_acpi">Kernelopties: acpi</a>
+</h3>
+
+<p>ACPI (Advanced Configuration and Power Interface) is een standaard die interfaces voor energie- en configuratiebeheer tussen een besturingssysteem en de BIOS definieert. Standaard wordt <em>acpi</em>ingeschakeld als een BIOS is gevonden die nieuwer is dan uit het jaar 2000. Er zijn diverse veelgebruikte parameters die het gedrag van ACPI bepalen: <ul><li><em>pci=noacpi</em> -- gebruik geen ACPI voor het routeren van PCI-interrupts</li><li><em>acpi=oldboot</em> -- alleen de delen van ACPI die relevant zijn voor het opstarten blijven geactiveerd</li><li><em>acpi=off</em> -- schakel ACPI volledig uit</li><li><em>acpi=force</em> -- schakel ACPI in, ook als uw BIOS van voor 2000 is</li></ul></p>
+
+<p>Vooral bij nieuwe computers, het vervangt het oude <a href="#o_apm">apm</a>-systeem.</p>
diff --git a/themes/openSUSE/help-boot/nl/opt::o_apm.html b/themes/openSUSE/help-boot/nl/opt::o_apm.html
new file mode 100644
index 0000000..00e818f
--- /dev/null
+++ b/themes/openSUSE/help-boot/nl/opt::o_apm.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="o_apm">Kernelopties: apm</a>
+</h3>
+
+<p>APM is een van de twee energiebeheerstrategieën die gebruikt wordt op de huidige computers. Het wordt voornamelijk gebruikt bij laptops voor functies zoals slaapstand naar schijf, maar het kan ook verantwoordelijk zijn voor het uitschakelen van de computer nadat u deze heeft afgesloten. APM is afhankelijk van een correct werkend BIOS. Als een BIOS niet correct werkt, dan kan APM slechts gedeeltelijk werken of zelfs het functioneren van de computer belemmeren. Daarom kunt u het met deze parameter uitschakelen.<ul><li><em>apm=off</em> -- schakel APM volledig uit</li></ul></p>
+
+<p>Sommige zeer nieuwe computers hebben meer voordeel bij het nieuwere <a href="#o_acpi">ACPI</a>.</p>
diff --git a/themes/openSUSE/help-boot/nl/opt::o_ide.html b/themes/openSUSE/help-boot/nl/opt::o_ide.html
new file mode 100644
index 0000000..06f8ef5
--- /dev/null
+++ b/themes/openSUSE/help-boot/nl/opt::o_ide.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="o_ide">Kernelopties: ide</a>
+</h3>
+
+<p>IDE wordt, in tegenstelling tot SCSI, algemeen gebruikt in de meeste desktopcomputers. Om hardwareproblemen die bij IDE-systemen kunnen voorkomen te omzeilen gebruikt u de parameter: <ul><li><em>ide=nodma</em> -- DMA voor IDE-stations uitschakelen</li></ul></p>
diff --git a/themes/openSUSE/help-boot/nl/opt::o_splash.html b/themes/openSUSE/help-boot/nl/opt::o_splash.html
new file mode 100644
index 0000000..93f91c1
--- /dev/null
+++ b/themes/openSUSE/help-boot/nl/opt::o_splash.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="o_splash">Kernelopties: opstartscherm</a>
+</h3>
+
+<p>Het opstartscherm is de afbeelding die getoond wordt tijdens de systeemstart. Deze wordt ook wel 'splash' genoemd. <ul><li><em>splash=0</em> -- Het opstartscherm (splash) is uitgeschakeld. Deze optie is bedoeld voor zeer oude beeldschermen of als er zich een fout voordoet.</li><li><em>splash=verbose</em> -- Activeert het opstartscherm (splash), maar kernel- en opstartmeldingen worden nog steeds getoond.</li><li><em>splash=silent</em> -- Activeert het opstartscherm (splash) zonder verdere meldingen. In plaats daarvan wordt een voortgangsbalk getoond.</li></ul></p>
diff --git a/themes/openSUSE/help-boot/nl/opt::profile.html b/themes/openSUSE/help-boot/nl/opt::profile.html
new file mode 100644
index 0000000..5471a01
--- /dev/null
+++ b/themes/openSUSE/help-boot/nl/opt::profile.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="profile">Profiel kiezen</a>
+</h3>
+
+<p>Druk op <em>@@@fkey_profile@@@</em> om een profiel te selecteren. Uw systeem zal worden opgestart aan de hand van de configuratie die in dit profiel is opgeslagen.</p>
diff --git a/themes/openSUSE/help-boot/pa/navi.html b/themes/openSUSE/help-boot/pa/navi.html
new file mode 100644
index 0000000..51c3bcf
--- /dev/null
+++ b/themes/openSUSE/help-boot/pa/navi.html
@@ -0,0 +1 @@
+<p><a href="#foobar">ਫੂਬਾਰ</a> ਉੱਤੇ ਜਾਓ</p>
diff --git a/themes/openSUSE/help-boot/pa/opt.html b/themes/openSUSE/help-boot/pa/opt.html
new file mode 100644
index 0000000..3618add
--- /dev/null
+++ b/themes/openSUSE/help-boot/pa/opt.html
@@ -0,0 +1,12 @@
+<h3>
+<a name="opt">ਬੂਟ ਚੋਣ</a>
+</h3>
+
+<p>
+<ul>
+ <li><a href="#o_splash">splash</a> -- ਸਪਲੈਸ਼ ਸਕਰੀਨ ਦਾ ਰਵੱਈਆ ਪਰਭਾਵਿਤ ਕਰੋ</li>
+ <li><a href="#o_apm">apm</a> -- ਪਾਵਰ ਮੈਨੇਜ਼ਮਿੰਟ ਬਦਲੋ</li>
+ <li><a href="#o_acpi">acpi</a> -- ਐਂਡਵਾਂਸ ਕੰਨਫੀਗਰੇਸ਼ਨ ਐਂਡ ਪਾਵਰ ਇੰਟਰਫੇਸ</li>
+ <li><a href="#o_ide">ide</a> -- IDE ਸਬ-ਸਿਸਟਮ ਕੰਟਰੋਲ ਕਰੋ</li>
+</ul>
+</p>
diff --git a/themes/openSUSE/help-boot/pa/opt::help.html b/themes/openSUSE/help-boot/pa/opt::help.html
new file mode 100644
index 0000000..b21e945
--- /dev/null
+++ b/themes/openSUSE/help-boot/pa/opt::help.html
@@ -0,0 +1,12 @@
+<h3>
+<a name="help">ਮੱਦਦ ਸਿਸਟਮ ਵਰਤੋਂ</a>
+</h3>
+
+<p>
+The boot loader online help is context sensitive. It gives information
+about the selected menu item or, if you are editing boot options,
+it tries to look up information about the option in which the cursor is
+positioned.
+</p>
+
+<p>ਨੇਵੀਗੇਸ਼ਨ ਸਵਿੱਚਾਂ <ul><li><em>ਉੱਤੇ ਤੀਰ</em>: ਪਿਛਲਾ ਲਿੰਕ ਹਾਈਲਾਈਟ</li><li><em>ਹੇਠਾਂ ਤੀਰ</em>: ਅੱਗੇ ਲਿੰਕ ਹਾਈਲਾਈਟ</li><li><em>ਖੱਬੇ ਤੀਰ</em>, <em>ਬੈਕਸਪੇਸ</em>: ਪਿਛਲੇ ਵਿਸ਼ੇ ਉੱਤੇ ਵਾਪਿਸ</li><li><em>ਸੱਜੇ ਤੀਰ</em>, <em>ਐਂਟਰ</em>, <em>ਸਪੇਸ</em>: ਲਿੰਕ ਖੋਲ੍ਹੋ</li><li><em>ਪੇਜ਼ ਅੱਪ</em>: ਇੱਕ ਪੇਜ਼ ਉੱਤੇ ਜਾਓ</li><li><em>ਪੇਜ਼ ਡਾਊਨ</em>: ਇੱਕ ਪੇਜ਼ ਹੇਠਾਂ ਜਾਓ</li><li><em>ਘਰ</em>: ਪੇਜ਼ ਸ਼ੁਰੂ ਉੱਤੇ ਜਾਓ</li><li><em>ਅੰਤ</em>: ਪੇਜ਼ ਅਖੀਰ ਉੱਤੇ ਜਾਓ</li><li><em>Esc</em>: ਮੱਦਦ ਛੱਡੋ</li></ul></p>
diff --git a/themes/openSUSE/help-boot/pa/opt::keytable.html b/themes/openSUSE/help-boot/pa/opt::keytable.html
new file mode 100644
index 0000000..fa2ed38
--- /dev/null
+++ b/themes/openSUSE/help-boot/pa/opt::keytable.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="keytable">ਭਾਸ਼ਾ ਅਤੇ ਕੀਬੋਰਡ ਲੇਆਉਟ ਚੋਣ</a>
+</h3>
+
+<p><em>@@@fkey_lang@@@</em> ਬੂਟ ਲੋਡਰ ਵਰਤੋਂ ਲਈ ਭਾਸ਼ਾ ਅਤੇ ਕੀ-ਬੋਰਡ ਬਦਲਣ ਲਈ ਵਰਤੋਂ</p>
diff --git a/themes/openSUSE/help-boot/pa/opt::o_acpi.html b/themes/openSUSE/help-boot/pa/opt::o_acpi.html
new file mode 100644
index 0000000..95fc757
--- /dev/null
+++ b/themes/openSUSE/help-boot/pa/opt::o_acpi.html
@@ -0,0 +1,20 @@
+<h3>
+<a name="o_acpi">ਕਰਨਲ ਚੋਣਾਂ: acpi</a>
+</h3>
+
+<p>
+ACPI (Advanced Configuration and Power Interface) is a
+standard that defines power and configuration management interfaces
+between an operating system and the BIOS. By default, <em>acpi</em> is
+switched on when a BIOS is detected that is newer than from year
+2000. There are several commonly
+used parameters to control the behavior of ACPI:
+<ul>
+ <li><em>pci=noacpi</em> -- do not use ACPI to route PCI interrupts</li>
+ <li><em>acpi=oldboot</em> -- ACPI ਦੇ ਭਾਗ, ਜੋ ਕਿ ਬੂਟਿੰਗ ਲਈ ਢੁੱਕਵੇਂ ਹਨ, ਹੀ ਐਕਟਿਵੇਟਡ ਰਹਿਣਗੇ</li>
+ <li><em>acpi=off</em> -- ਪੂਰੀ ਤਰ੍ਹਾਂ ACPI ਸਵਿੱਚ ਆਫ਼ ਕਰੋ</li>
+ <li><em>acpi=force</em> -- ਜੇ ਤੁਹਾਡਾ BIOS 2000 ਤੋਂ ਪੁਰਾਣਾ ਹੈ ਤਾਂ ਵੀ ACPI ਸਵਿੱਚ ਆਨ ਰੱਖੋ</li>
+</ul>
+</p>
+
+<p>ਖਾਸ ਤੌਰ ਉੱਤੇ ਨਵੇਂ ਕੰਪਿਊਟਰਾਂ ਉੱਤੇ, <a href="#o_apm">apm</a> ਸਿਸਟਮ ਨੂੰ ਬਦਲੋ।</p>
diff --git a/themes/openSUSE/help-boot/pa/opt::o_apm.html b/themes/openSUSE/help-boot/pa/opt::o_apm.html
new file mode 100644
index 0000000..ff6357a
--- /dev/null
+++ b/themes/openSUSE/help-boot/pa/opt::o_apm.html
@@ -0,0 +1,18 @@
+<h3>
+<a name="o_apm">ਕਰਨਲ ਚੋਣਾਂ: apm</a>
+</h3>
+
+<p>
+APM is one of the two power management strategies used on current
+computers. It is mainly used with laptops for functions like suspend
+to disk, but it may also be responsible for switching off the
+computer after power down. APM relies on a correct working BIOS. If
+the BIOS is broken, APM may have only limited use or even prevent the
+computer from working. Therefore, it may be switched off with the
+parameter
+<ul>
+ <li><em>apm=off</em> -- ਪੂਰੀ ਤਰ੍ਹਾਂ ACPI ਸਵਿੱਚ ਆਫ਼ ਕਰੋ</li>
+</ul>
+</p>
+
+<p>ਕੁਝ ਬਹੁਤ ਹੀ ਨਵੇਂ ਕੰਪਿਊਟਰ, ਨਵੇਂ <a href="#o_acpi">ACPI</a> ਤੋਂ ਫਾਇਦਾ ਲੈ ਵੀ ਸਕਦੇ ਹਨ।</p>
diff --git a/themes/openSUSE/help-boot/pa/opt::o_ide.html b/themes/openSUSE/help-boot/pa/opt::o_ide.html
new file mode 100644
index 0000000..011ee50
--- /dev/null
+++ b/themes/openSUSE/help-boot/pa/opt::o_ide.html
@@ -0,0 +1,12 @@
+<h3>
+<a name="o_ide">ਕਰਨਲ ਚੋਣਾਂ: ide</a>
+</h3>
+
+<p>
+IDE is, unlike SCSI, commonly used in most desktop workstations.
+To circumvent some hardware problems that occur with IDE systems, use the
+kernel parameter:
+<ul>
+ <li><em>ide=nodma</em> --IDE ਡਰਾਇਵਾਂ ਲਈ DMA ਸਵਿੱਚ ਆਫ਼ ਕਰੋ</li>
+</ul>
+</p>
diff --git a/themes/openSUSE/help-boot/pa/opt::o_splash.html b/themes/openSUSE/help-boot/pa/opt::o_splash.html
new file mode 100644
index 0000000..7a56e45
--- /dev/null
+++ b/themes/openSUSE/help-boot/pa/opt::o_splash.html
@@ -0,0 +1,12 @@
+<h3>
+<a name="o_splash">ਕਰਨਲ ਚੋਣਾਂ: splash</a>
+</h3>
+
+<p>
+The splash screen is the picture shown during system start-up.
+<ul>
+ <li><em>splash=0</em> -- The splash screen is switched off. This may be useful with very old monitors or if some error occurs.</li>
+ <li><em>splash=verbose</em> -- Activates splash, kernel and boot messages are still shown.</li>
+ <li><em>splash=silent</em> -- Activates splash, but no messages. Instead a progress bar is drawn.</li>
+</ul>
+</p>
diff --git a/themes/openSUSE/help-boot/pa/opt::profile.html b/themes/openSUSE/help-boot/pa/opt::profile.html
new file mode 100644
index 0000000..fb036a4
--- /dev/null
+++ b/themes/openSUSE/help-boot/pa/opt::profile.html
@@ -0,0 +1,8 @@
+<h3>
+<a name="profile">ਪਰੋਫਾਇਲ ਚੁਣੋ</a>
+</h3>
+
+<p>
+Press <em>@@@fkey_profile@@@</em> to select a profile. Your system will be started using the
+configuration saved in this profile.
+</p>
diff --git a/themes/openSUSE/help-boot/pl/navi.html b/themes/openSUSE/help-boot/pl/navi.html
new file mode 100644
index 0000000..b4f8211
--- /dev/null
+++ b/themes/openSUSE/help-boot/pl/navi.html
@@ -0,0 +1,3 @@
+<p>
+Return to <a href="#foobar">FOOBAR</a>
+</p>
diff --git a/themes/openSUSE/help-boot/pl/opt.html b/themes/openSUSE/help-boot/pl/opt.html
new file mode 100644
index 0000000..6de115b
--- /dev/null
+++ b/themes/openSUSE/help-boot/pl/opt.html
@@ -0,0 +1,12 @@
+<h3>
+<a name="opt">Opcje uruchamiania</a>
+</h3>
+
+<p>
+<ul>
+ <li><a href="#o_splash">splash</a> -- influence the behavior of the splash screen</li>
+ <li><a href="#o_apm">apm</a> -- toggle power management</li>
+ <li><a href="#o_acpi">acpi</a> -- advanced configuration and power interface</li>
+ <li><a href="#o_ide">ide</a> -- control the IDE subsystem</li>
+</ul>
+</p>
diff --git a/themes/openSUSE/help-boot/pl/opt::help.html b/themes/openSUSE/help-boot/pl/opt::help.html
new file mode 100644
index 0000000..8e2e1c4
--- /dev/null
+++ b/themes/openSUSE/help-boot/pl/opt::help.html
@@ -0,0 +1,25 @@
+<h3>
+<a name="help">Jak korzystać z systemu pomocy</a>
+</h3>
+
+<p>
+The boot loader online help is context sensitive. It gives information
+about the selected menu item or, if you are editing boot options,
+it tries to look up information about the option in which the cursor is
+positioned.
+</p>
+
+<p>
+Navigation Keys
+<ul>
+ <li><em>Strzałka 'w górę'</em>: highlight previous link</li>
+ <li><em>Strzałka 'w dół'</em>: highlight next link</li>
+ <li><em>Strzałka 'w lewo'</em>, <em>Backspace</em>: return to previous topic</li>
+ <li><em>Strzałka 'w prawo'</em>, <em>Enter</em>, <em>Spacja</em>: follow link</li>
+ <li><em>Page Up</em>: scroll up one page</li>
+ <li><em>Page Down</em>: scroll down one page</li>
+ <li><em>Home</em>: go to page start</li>
+ <li><em>End</em>: go to page end</li>
+ <li><em>Esc</em>: leave help</li>
+</ul>
+</p>
diff --git a/themes/openSUSE/help-boot/pl/opt::keytable.html b/themes/openSUSE/help-boot/pl/opt::keytable.html
new file mode 100644
index 0000000..a41d427
--- /dev/null
+++ b/themes/openSUSE/help-boot/pl/opt::keytable.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="keytable">Wybór języka i klawiatury</a>
+</h3>
+
+<p>
+Press <em>@@@fkey_lang@@@</em> to change language and keyboard layout the boot loader uses.
+</p>
diff --git a/themes/openSUSE/help-boot/pl/opt::o_acpi.html b/themes/openSUSE/help-boot/pl/opt::o_acpi.html
new file mode 100644
index 0000000..fdef28d
--- /dev/null
+++ b/themes/openSUSE/help-boot/pl/opt::o_acpi.html
@@ -0,0 +1,23 @@
+<h3>
+<a name="o_acpi">Opcje jądra: acpi</a>
+</h3>
+
+<p>
+ACPI (Advanced Configuration and Power Interface) is a
+standard that defines power and configuration management interfaces
+between an operating system and the BIOS. By default, <em>acpi</em> is
+switched on when a BIOS is detected that is newer than from year
+2000. There are several commonly
+used parameters to control the behavior of ACPI:
+<ul>
+ <li><em>pci=noacpi</em> -- do not use ACPI to route PCI interrupts</li>
+ <li><em>acpi=oldboot</em> -- only the parts of ACPI that are relevant for booting remain activated</li>
+ <li><em>acpi=wyłączone</em> -- switch off ACPI completely</li>
+ <li><em>acpi=force</em> -- switch on ACPI even if your BIOS is dated before 2000</li>
+</ul>
+</p>
+
+<p>
+Especially on new computers, it replaces the old
+<a href="#o_apm">apm</a> system.
+</p>
diff --git a/themes/openSUSE/help-boot/pl/opt::o_apm.html b/themes/openSUSE/help-boot/pl/opt::o_apm.html
new file mode 100644
index 0000000..ca213c1
--- /dev/null
+++ b/themes/openSUSE/help-boot/pl/opt::o_apm.html
@@ -0,0 +1,21 @@
+<h3>
+<a name="o_apm">Opcje jądra: apm</a>
+</h3>
+
+<p>
+APM is one of the two power management strategies used on current
+computers. It is mainly used with laptops for functions like suspend
+to disk, but it may also be responsible for switching off the
+computer after power down. APM relies on a correct working BIOS. If
+the BIOS is broken, APM may have only limited use or even prevent the
+computer from working. Therefore, it may be switched off with the
+parameter
+<ul>
+ <li><em>apm=off</em> -- switch off APM completely</li>
+</ul>
+</p>
+
+<p>
+Some very new computers may take more advantage from the newer
+<a href="#o_acpi">ACPI</a>.
+</p>
diff --git a/themes/openSUSE/help-boot/pl/opt::o_ide.html b/themes/openSUSE/help-boot/pl/opt::o_ide.html
new file mode 100644
index 0000000..69b7762
--- /dev/null
+++ b/themes/openSUSE/help-boot/pl/opt::o_ide.html
@@ -0,0 +1,12 @@
+<h3>
+<a name="o_ide">Opcje jądra: ide</a>
+</h3>
+
+<p>
+IDE is, unlike SCSI, commonly used in most desktop workstations.
+To circumvent some hardware problems that occur with IDE systems, use the
+kernel parameter:
+<ul>
+ <li><em>ide=nodma</em> -- switch off DMA for IDE drives</li>
+</ul>
+</p>
diff --git a/themes/openSUSE/help-boot/pl/opt::o_splash.html b/themes/openSUSE/help-boot/pl/opt::o_splash.html
new file mode 100644
index 0000000..99d06b3
--- /dev/null
+++ b/themes/openSUSE/help-boot/pl/opt::o_splash.html
@@ -0,0 +1,12 @@
+<h3>
+<a name="o_splash">Opcje jądra: splash</a>
+</h3>
+
+<p>
+The splash screen is the picture shown during system start-up.
+<ul>
+ <li><em>splash=0</em> -- The splash screen is switched off. This may be useful with very old monitors or if some error occurs.</li>
+ <li><em>splash=verbose</em> -- Activates splash, kernel and boot messages are still shown.</li>
+ <li><em>splash=silent</em> -- Activates splash, but no messages. Instead a progress bar is drawn.</li>
+</ul>
+</p>
diff --git a/themes/openSUSE/help-boot/pl/opt::profile.html b/themes/openSUSE/help-boot/pl/opt::profile.html
new file mode 100644
index 0000000..fddee0b
--- /dev/null
+++ b/themes/openSUSE/help-boot/pl/opt::profile.html
@@ -0,0 +1,8 @@
+<h3>
+<a name="profile">Wybierz profil</a>
+</h3>
+
+<p>
+Press <em>@@@fkey_profile@@@</em> to select a profile. Your system will be started using the
+configuration saved in this profile.
+</p>
diff --git a/themes/openSUSE/help-boot/pt/navi.html b/themes/openSUSE/help-boot/pt/navi.html
new file mode 100644
index 0000000..10a6dec
--- /dev/null
+++ b/themes/openSUSE/help-boot/pt/navi.html
@@ -0,0 +1 @@
+<p>Voltar para <a href="#foobar">FOOBAR</a></p>
diff --git a/themes/openSUSE/help-boot/pt/opt.html b/themes/openSUSE/help-boot/pt/opt.html
new file mode 100644
index 0000000..357649d
--- /dev/null
+++ b/themes/openSUSE/help-boot/pt/opt.html
@@ -0,0 +1,12 @@
+<h3>
+<a name="opt">Opções de Arranque</a>
+</h3>
+
+<p>
+<ul>
+ <li><a href="#o_splash">splash</a> -- influence the behavior of the splash screen</li>
+ <li><a href="#o_apm">apm</a> -- toggle power management</li>
+ <li><a href="#o_acpi">acpi</a> -- advanced configuration and power interface</li>
+ <li><a href="#o_ide">ide</a> -- control the IDE subsystem</li>
+</ul>
+</p>
diff --git a/themes/openSUSE/help-boot/pt/opt::help.html b/themes/openSUSE/help-boot/pt/opt::help.html
new file mode 100644
index 0000000..e7d474b
--- /dev/null
+++ b/themes/openSUSE/help-boot/pt/opt::help.html
@@ -0,0 +1,25 @@
+<h3>
+<a name="help">Utilizando o Sistema de Ajuda</a>
+</h3>
+
+<p>
+The boot loader online help is context sensitive. It gives information
+about the selected menu item or, if you are editing boot options,
+it tries to look up information about the option in which the cursor is
+positioned.
+</p>
+
+<p>
+Navigation Keys
+<ul>
+ <li><em>Seta para Cima</em>: highlight previous link</li>
+ <li><em>Seta para Baixo</em>: highlight next link</li>
+ <li><em>Seta para a Esquerda</em>, <em>Backspace</em>: return to previous topic</li>
+ <li><em>Seta para a Direita</em>, <em>Enter</em>, <em>Barra de Espaços</em>: follow link</li>
+ <li><em>Page Up</em>: scroll up one page</li>
+ <li><em>Page Down</em>: scroll down one page</li>
+ <li><em>Home</em>: go to page start</li>
+ <li><em>End</em>: go to page end</li>
+ <li><em>Esc</em>: leave help</li>
+</ul>
+</p>
diff --git a/themes/openSUSE/help-boot/pt/opt::keytable.html b/themes/openSUSE/help-boot/pt/opt::keytable.html
new file mode 100644
index 0000000..7177a4d
--- /dev/null
+++ b/themes/openSUSE/help-boot/pt/opt::keytable.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="keytable">Selecção de Teclado e Idioma</a>
+</h3>
+
+<p>
+Press <em>@@@fkey_lang@@@</em> to change language and keyboard layout the boot loader uses.
+</p>
diff --git a/themes/openSUSE/help-boot/pt/opt::o_acpi.html b/themes/openSUSE/help-boot/pt/opt::o_acpi.html
new file mode 100644
index 0000000..7989b7f
--- /dev/null
+++ b/themes/openSUSE/help-boot/pt/opt::o_acpi.html
@@ -0,0 +1,23 @@
+<h3>
+<a name="o_acpi">Opções de Kernel: acpi</a>
+</h3>
+
+<p>
+ACPI (Advanced Configuration and Power Interface) is a
+standard that defines power and configuration management interfaces
+between an operating system and the BIOS. By default, <em>acpi</em> is
+switched on when a BIOS is detected that is newer than from year
+2000. There are several commonly
+used parameters to control the behavior of ACPI:
+<ul>
+ <li><em>pci=noacpi</em> -- do not use ACPI to route PCI interrupts</li>
+ <li><em>acpi=oldboot</em> -- only the parts of ACPI that are relevant for booting remain activated</li>
+ <li><em>acpi=off</em> -- switch off ACPI completely</li>
+ <li><em>acpi=force</em> -- switch on ACPI even if your BIOS is dated before 2000</li>
+</ul>
+</p>
+
+<p>
+Especially on new computers, it replaces the old
+<a href="#o_apm">apm</a> system.
+</p>
diff --git a/themes/openSUSE/help-boot/pt/opt::o_apm.html b/themes/openSUSE/help-boot/pt/opt::o_apm.html
new file mode 100644
index 0000000..d48567d
--- /dev/null
+++ b/themes/openSUSE/help-boot/pt/opt::o_apm.html
@@ -0,0 +1,21 @@
+<h3>
+<a name="o_apm">Opções de Kernel: apm</a>
+</h3>
+
+<p>
+APM is one of the two power management strategies used on current
+computers. It is mainly used with laptops for functions like suspend
+to disk, but it may also be responsible for switching off the
+computer after power down. APM relies on a correct working BIOS. If
+the BIOS is broken, APM may have only limited use or even prevent the
+computer from working. Therefore, it may be switched off with the
+parameter
+<ul>
+ <li><em>apm=off</em> -- switch off APM completely</li>
+</ul>
+</p>
+
+<p>
+Some very new computers may take more advantage from the newer
+<a href="#o_acpi">ACPI</a>.
+</p>
diff --git a/themes/openSUSE/help-boot/pt/opt::o_ide.html b/themes/openSUSE/help-boot/pt/opt::o_ide.html
new file mode 100644
index 0000000..637dafd
--- /dev/null
+++ b/themes/openSUSE/help-boot/pt/opt::o_ide.html
@@ -0,0 +1,12 @@
+<h3>
+<a name="o_ide">Opções de Kernel: ide</a>
+</h3>
+
+<p>
+IDE is, unlike SCSI, commonly used in most desktop workstations.
+To circumvent some hardware problems that occur with IDE systems, use the
+kernel parameter:
+<ul>
+ <li><em>ide=nodma</em> -- switch off DMA for IDE drives</li>
+</ul>
+</p>
diff --git a/themes/openSUSE/help-boot/pt/opt::o_splash.html b/themes/openSUSE/help-boot/pt/opt::o_splash.html
new file mode 100644
index 0000000..9e2d4ef
--- /dev/null
+++ b/themes/openSUSE/help-boot/pt/opt::o_splash.html
@@ -0,0 +1,12 @@
+<h3>
+<a name="o_splash">Opções de Kernel: splash</a>
+</h3>
+
+<p>
+The splash screen is the picture shown during system start-up.
+<ul>
+ <li><em>splash=0</em> -- The splash screen is switched off. This may be useful with very old monitors or if some error occurs.</li>
+ <li><em>splash=verbose</em> -- Activates splash, kernel and boot messages are still shown.</li>
+ <li><em>splash=silent</em> -- Activates splash, but no messages. Instead a progress bar is drawn.</li>
+</ul>
+</p>
diff --git a/themes/openSUSE/help-boot/pt/opt::profile.html b/themes/openSUSE/help-boot/pt/opt::profile.html
new file mode 100644
index 0000000..f643bec
--- /dev/null
+++ b/themes/openSUSE/help-boot/pt/opt::profile.html
@@ -0,0 +1,8 @@
+<h3>
+<a name="profile">Escolher Perfil</a>
+</h3>
+
+<p>
+Press <em>@@@fkey_profile@@@</em> to select a profile. Your system will be started using the
+configuration saved in this profile.
+</p>
diff --git a/themes/openSUSE/help-boot/pt_BR/navi.html b/themes/openSUSE/help-boot/pt_BR/navi.html
new file mode 100644
index 0000000..0e5e183
--- /dev/null
+++ b/themes/openSUSE/help-boot/pt_BR/navi.html
@@ -0,0 +1 @@
+<p>Retornar a <a href="#foobar">FOOBAR</a></p>
diff --git a/themes/openSUSE/help-boot/pt_BR/opt.html b/themes/openSUSE/help-boot/pt_BR/opt.html
new file mode 100644
index 0000000..bd0846e
--- /dev/null
+++ b/themes/openSUSE/help-boot/pt_BR/opt.html
@@ -0,0 +1,12 @@
+<h3>
+<a name="opt">Opções de inicialização</a>
+</h3>
+
+<p>
+<ul>
+ <li><a href="#o_splash">tela de inicialização</a> -- influenciar o comportamento da tela de inicialização</li>
+ <li><a href="#o_apm">apm</a> -- alternar o gerenciamento de energia</li>
+ <li><a href="#o_acpi">acpi</a> -- interface avançada de configuração e energia</li>
+ <li><a href="#o_ide">ide</a> -- controlar o subsistema IDE</li>
+</ul>
+</p>
diff --git a/themes/openSUSE/help-boot/pt_BR/opt::help.html b/themes/openSUSE/help-boot/pt_BR/opt::help.html
new file mode 100644
index 0000000..48cc2f1
--- /dev/null
+++ b/themes/openSUSE/help-boot/pt_BR/opt::help.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="help">Usando o sistema de ajuda</a>
+</h3>
+
+<p>A ajuda online do carregador de inicialização é sensível ao contexto. Ela fornece informações sobre o item de menu selecionado ou se você estiver editando as opções de inicialização, ela tenta procurar informações sobre a opção em que o cursor está posicionado.</p>
+
+<p>Teclas de navegação <ul><li><em>Seta para cima</em>: realçar o link anterior</li><li><em>Seta para baixo</em>: realçar o próximo link</li><li><em>Seta para a esquerda</em>, <em>Tecla backspace</em>: retornar ao tópico anterior</li><li><em>Seta para a direita</em>, <em>Enter</em>, <em>Espaço</em>: seguir o link</li><li><em>Page up</em>: rolar uma página para cima</li><li><em>Page down</em>: rolar uma página para baixo</li><li><em>Pasta do usuário</em>: ir para o início da página</li><li><em>End</em>: ir para o final da página</li><li><em>Esc</em>: sair da ajuda</li></ul></p>
diff --git a/themes/openSUSE/help-boot/pt_BR/opt::keytable.html b/themes/openSUSE/help-boot/pt_BR/opt::keytable.html
new file mode 100644
index 0000000..27fe51f
--- /dev/null
+++ b/themes/openSUSE/help-boot/pt_BR/opt::keytable.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="keytable">Seleção de idioma e layout de teclado</a>
+</h3>
+
+<p>Pressione <em>@@@fkey_lang@@@</em> para alterar o idioma e o layout de teclado usados pelo carregador de inicialização.</p>
diff --git a/themes/openSUSE/help-boot/pt_BR/opt::o_acpi.html b/themes/openSUSE/help-boot/pt_BR/opt::o_acpi.html
new file mode 100644
index 0000000..93987ad
--- /dev/null
+++ b/themes/openSUSE/help-boot/pt_BR/opt::o_acpi.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="o_acpi">Opções do kernel: acpi</a>
+</h3>
+
+<p>O ACPI (Advanced Configuration and Power Interface - Interface avançada de configuração e energia) é um padrão que define as interfaces de gerenciamento de configuração e energia entre o sistema operacional e a BIOS. Por padrão, <em>acpi</em> é ativado quando é detectado uma BIOS mais recente do que o ano 2000. Há vários parâmetros normalmente usados para controlar o comportamento do ACPI: <ul><li><em>pci=noacpi</em> -- não usar o ACPI para rotear as interrupções PCI</li><li><em>acpi=oldboot</em> -- apenas as partes da ACPI que são relevantes para a inicialização permanecem ativadas</li><li><em>acpi=off</em> -- desativar o ACPI completamente</li><li><em>acpi=force</em> -- ativar o ACPI mesmo que a BIOS tenha data anterior a 2000</li></ul></p>
+
+<p>Especialmente em novos computadores, ele substitui o antigo sistema <a href="#o_apm">apm</a>.</p>
diff --git a/themes/openSUSE/help-boot/pt_BR/opt::o_apm.html b/themes/openSUSE/help-boot/pt_BR/opt::o_apm.html
new file mode 100644
index 0000000..62c87bc
--- /dev/null
+++ b/themes/openSUSE/help-boot/pt_BR/opt::o_apm.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="o_apm">Opções do kernel: apm</a>
+</h3>
+
+<p>O APM é uma das duas estratégias de gerenciamento de energia usadas nos computadores atuais. Ele é usado principalmente com notebooks para funções como suspender para o disco, mas também pode ser responsável pela desativação do computador após uma queda de energia. O APM depende do correto funcionamento da BIOS. Se a BIOS estiver danificada, o APM pode ter seu uso limitado ou até pode impedir o funcionamento do computador. Portanto, ele pode ser desativado com o parâmetro <ul><li><em>apm=off</em> -- desativar o ACPI completamente</li></ul></p>
+
+<p>Alguns computadores mais novos podem tirar mais proveito do <a href="#o_acpi">ACPI</a> mais recente.</p>
diff --git a/themes/openSUSE/help-boot/pt_BR/opt::o_ide.html b/themes/openSUSE/help-boot/pt_BR/opt::o_ide.html
new file mode 100644
index 0000000..d3a387c
--- /dev/null
+++ b/themes/openSUSE/help-boot/pt_BR/opt::o_ide.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="o_ide">Opções do kernel: ide</a>
+</h3>
+
+<p>O IDE é, diferente do SCSI, comumente utilizado na maioria das estações de trabalho. Para contornar alguns problemas de hardware que ocorrem com os sistemas IDE, use o parâmetro do kernel: <ul><li><em>ide=nodma</em> -- desativar o DMA para unidades IDE</li></ul></p>
diff --git a/themes/openSUSE/help-boot/pt_BR/opt::o_splash.html b/themes/openSUSE/help-boot/pt_BR/opt::o_splash.html
new file mode 100644
index 0000000..4f58fee
--- /dev/null
+++ b/themes/openSUSE/help-boot/pt_BR/opt::o_splash.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="o_splash">Opções do kernel: splash</a>
+</h3>
+
+<p>A tela de inicialização é a imagem exibida durante a inicialização do sistema. <ul><li><em>splash=0</em> -- A tela de inicialização é desativada. Isso poderá ser útil com monitores muito antigos ou se ocorrerem erros.</li><li><em>splash=verbose</em> -- Ativa a tela de inicialização, as mensagens do kernel e de inicialização ainda são exibidas.</li><li><em>splash=silent</em> -- Ativa a tela de inicialização, mas sem exibir mensagens. Em vez disso é exibida uma barra de progresso.</li></ul></p>
diff --git a/themes/openSUSE/help-boot/pt_BR/opt::profile.html b/themes/openSUSE/help-boot/pt_BR/opt::profile.html
new file mode 100644
index 0000000..4f791da
--- /dev/null
+++ b/themes/openSUSE/help-boot/pt_BR/opt::profile.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="profile">Escolher o perfil</a>
+</h3>
+
+<p>Pressione <em>@@@fkey_profile@@@</em> para selecionar um perfil. Seu sistema será inicializado usando a configuração salva nesse perfil.</p>
diff --git a/themes/openSUSE/help-boot/ro/navi.html b/themes/openSUSE/help-boot/ro/navi.html
new file mode 100644
index 0000000..53b0f6f
--- /dev/null
+++ b/themes/openSUSE/help-boot/ro/navi.html
@@ -0,0 +1 @@
+<p>Înapoi la <a href="#foobar">FOOBAR</a></p>
diff --git a/themes/openSUSE/help-boot/ro/opt.html b/themes/openSUSE/help-boot/ro/opt.html
new file mode 100644
index 0000000..c55ac69
--- /dev/null
+++ b/themes/openSUSE/help-boot/ro/opt.html
@@ -0,0 +1,12 @@
+<h3>
+<a name="opt">Opţiuni de bootare</a>
+</h3>
+
+<p>
+<ul>
+ <li><a href="#o_splash">splash</a> -- influenţează comportamentul ecranului de întâmpinare</li>
+ <li><a href="#o_apm">apm</a> -- comută gestiunea alimentării</li>
+ <li><a href="#o_acpi">acpi</a> -- configurare avansată şi interfaţă alimentare</li>
+ <li><a href="#o_ide">ide</a> -- controlează subsistemul IDE</li>
+</ul>
+</p>
diff --git a/themes/openSUSE/help-boot/ro/opt::help.html b/themes/openSUSE/help-boot/ro/opt::help.html
new file mode 100644
index 0000000..4cf220b
--- /dev/null
+++ b/themes/openSUSE/help-boot/ro/opt::help.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="help">Modul de folosire al sistemului de ajutor</a>
+</h3>
+
+<p>Ajutorul online al bootloader-ului este dependent de context. Oferă informaţii despre elementul de meniu selectat sau, dacă editaţi opţiunile de boot, încearcă să caute informaţii despre opţiunea pe care este poziţionat cursorul.</p>
+
+<p>Taste de navigare <ul><li><em>Săgeată sus</em>: se evidenţiază legătura precedentă</li><li><em>Săgeată jos</em>: se evidenţiază legătura următoare</li><li><em>Săgeată stânga</em>, <em>Înapoi</em>: înapoi la tema anterioară</li><li><em>Săgeată dreapta</em>, <em>Enter</em>, <em>Spaţiu</em>: urmaţi linkul</li><li><em>Pagină sus</em>: derulează o pagină în sus</li><li><em>Pagină jos</em>: derulează o pagină în jos</li><li><em>Acasă</em>: salt la începutul paginii</li><li><em>Sfârşit</em>: salt la sfârşitul paginii</li><li><em>Esc</em>: părăseşte ajutorul</li></ul></p>
diff --git a/themes/openSUSE/help-boot/ro/opt::keytable.html b/themes/openSUSE/help-boot/ro/opt::keytable.html
new file mode 100644
index 0000000..7cb6eed
--- /dev/null
+++ b/themes/openSUSE/help-boot/ro/opt::keytable.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="keytable">Selecţia limbii şi a mapării de tastatură</a>
+</h3>
+
+<p>Apăsaţi <em>@@@fkey_lang@@@</em> pentru a modifica limba şi maparea de tastatură utilizată de bootloader.</p>
diff --git a/themes/openSUSE/help-boot/ro/opt::o_acpi.html b/themes/openSUSE/help-boot/ro/opt::o_acpi.html
new file mode 100644
index 0000000..81b0edb
--- /dev/null
+++ b/themes/openSUSE/help-boot/ro/opt::o_acpi.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="o_acpi">Opţiuni kernel: acpi</a>
+</h3>
+
+<p>ACPI (Advanced Configuration and Power Interface - Interfaţă avansată pentru configurare şi alimentare) este un standard ce defineşte interfeţele de gestiune a alimentării şi a configuraţiei între sistemul de operare şi BIOS. Implicit, <em>acpi</em> este activ dacă se detectează un BIOS mai nou de 2000. Există mai mulţi parametri utilizaţi pentru controlul comportamentului ACPI: <ul><li><em>pci=noacpi</em> -- nu utiliza ACPI pentru rutarea întreruperilor PCI</li><li><em>acpi=oldboot</em> -- rămân activate doar acele părţi ale ACPI relevante pentru boot</li><li><em>acpi=off</em> -- dezactivează ACPI complet</li><li><em>acpi=force</em> -- activează ACPI chiar dacă BIOS-ul este anterior anului 2000</li></ul></p>
+
+<p>În special pe calculatoare noi, înlocuieşte vechiul sistem <a href="#o_apm">apm</a>.</p>
diff --git a/themes/openSUSE/help-boot/ro/opt::o_apm.html b/themes/openSUSE/help-boot/ro/opt::o_apm.html
new file mode 100644
index 0000000..b20f41a
--- /dev/null
+++ b/themes/openSUSE/help-boot/ro/opt::o_apm.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="o_apm">Opţiuni kernel: apm</a>
+</h3>
+
+<p>APM este una dintre cele două strategii de gestiune a alimentării utilizate de calculatoarele moderne. Este utilizată în special pe laptop-uri pentru funcţii ca hibernarea, dar poate fi de asemenea responsabilă pentru deconectarea de la reţea a calculatorului după ce a fost oprit. APM se bazează pe un BIOS ce funcţionează corect. Dacă BIOS-ul este defect, APM poate funcţiona doar în mod restrâns sau poate chiar împiedica funcţionarea corectă a calculatorului. De aceea poate fi dezactivat cu parametrul <ul><li><em>apm=off</em> -- dezactivează APM complet</li></ul></p>
+
+<p>Pentru unele calculatoare foarte noi poate fi mai avantajos mai noul <a href="#o_acpi">ACPI</a>.</p>
diff --git a/themes/openSUSE/help-boot/ro/opt::o_ide.html b/themes/openSUSE/help-boot/ro/opt::o_ide.html
new file mode 100644
index 0000000..3614c8b
--- /dev/null
+++ b/themes/openSUSE/help-boot/ro/opt::o_ide.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="o_ide">Opţiuni kernel: ide</a>
+</h3>
+
+<p>IDE este, spre deosebire de SCSI, utilizat în mod curent de cele mai multe staţii de lucru desktop. Pentru a evita anumite probleme hardware ce apar pe sistemele IDE, utilizaţi parametrul kernel: <ul><li><em>ide=nodma</em> -- dezactivează DMA pentru unităţile IDE</li></ul></p>
diff --git a/themes/openSUSE/help-boot/ro/opt::o_splash.html b/themes/openSUSE/help-boot/ro/opt::o_splash.html
new file mode 100644
index 0000000..db5983a
--- /dev/null
+++ b/themes/openSUSE/help-boot/ro/opt::o_splash.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="o_splash">Opţinu kernel: splash</a>
+</h3>
+
+<p>Ecranul de start este imaginea afişată în timp ce porneşte sistemul. <ul><li><em>splash=0</em> -- Ecranul de pornire este dezactivat. Acest lucru poate fi util pentru monitoarele foarte vechi sau în cazul apariţiei unei erori.</li><li><em>splash=verbose</em> -- Activează ecranului de pornire, mesajele kernel şi boot sunt afişate în continuare.</li><li><em>splash=silent</em> -- Activează ecranul de pornire, dar fără mesaje. În schimb se afişează o bară de progres.</li></ul></p>
diff --git a/themes/openSUSE/help-boot/ro/opt::profile.html b/themes/openSUSE/help-boot/ro/opt::profile.html
new file mode 100644
index 0000000..8f2214b
--- /dev/null
+++ b/themes/openSUSE/help-boot/ro/opt::profile.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="profile">Alegeţi profilul</a>
+</h3>
+
+<p>Apăsaţi <em>@@@fkey_profile@@@</em> pentru a selecta un profil. Sistemul dvs. va porni utilizând configuraţia salvată în acest profil.</p>
diff --git a/themes/openSUSE/help-boot/ru/navi.html b/themes/openSUSE/help-boot/ru/navi.html
new file mode 100644
index 0000000..cd041a4
--- /dev/null
+++ b/themes/openSUSE/help-boot/ru/navi.html
@@ -0,0 +1 @@
+<p>Возврат к <a href="#foobar">FOOBAR</a></p>
diff --git a/themes/openSUSE/help-boot/ru/opt.html b/themes/openSUSE/help-boot/ru/opt.html
new file mode 100644
index 0000000..defe8dc
--- /dev/null
+++ b/themes/openSUSE/help-boot/ru/opt.html
@@ -0,0 +1,12 @@
+<h3>
+<a name="opt">Параметры загрузки</a>
+</h3>
+
+<p>
+<ul>
+ <li><a href="#o_splash">заставка</a> -- влияет на поведение заставки</li>
+ <li><a href="#o_apm">apm</a> -- переключает управление питанием</li>
+ <li><a href="#o_acpi">acpi</a> -- Усовершенствованный интерфейс настройки системы и управления питанием</li>
+ <li><a href="#o_ide">ide</a> -- управляет подсистемой IDE</li>
+</ul>
+</p>
diff --git a/themes/openSUSE/help-boot/ru/opt::help.html b/themes/openSUSE/help-boot/ru/opt::help.html
new file mode 100644
index 0000000..4d5cab2
--- /dev/null
+++ b/themes/openSUSE/help-boot/ru/opt::help.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="help">Использование системы справки</a>
+</h3>
+
+<p>Текст справки загрузчика зависит от контекста. Она дает информацию по выбранному элементу меню или, если вы редактируете параметр загрузки, она пытается найти информацию о параметре, на котором стоит курсор.</p>
+
+<p>Кнопки управления <ul><li><em>Стрелка вверх</em>: выделяет предыдущую ссылку</li><li><em>Стрелка вниз</em>: выделяет следующую ссылку</li><li><em>Стрелка влево</em>, <em>Backspace</em>: вернуться к предыдущей главе</li><li><em>Стрелка вправо</em>, <em>Enter</em>, <em>Пробел</em>: перейти по ссылке</li><li><em>Page Up</em>: пролистать одну страницу назад</li><li><em>Page Down</em>: пролистать одну страницу вперёд</li><li><em>Home</em>: перейти к началу страницы</li><li><em>End</em>: перейти к концу страницы</li><li><em>Esc</em>: выйти из справки</li></ul></p>
diff --git a/themes/openSUSE/help-boot/ru/opt::keytable.html b/themes/openSUSE/help-boot/ru/opt::keytable.html
new file mode 100644
index 0000000..f5f2311
--- /dev/null
+++ b/themes/openSUSE/help-boot/ru/opt::keytable.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="keytable">Выбор языка и раскладки клавиатуры</a>
+</h3>
+
+<p>Нажмите <em>@@@fkey_lang@@@</em>, чтобы изменить язык и раскладку клавиатуры, которые использует загрузчик.</p>
diff --git a/themes/openSUSE/help-boot/ru/opt::o_acpi.html b/themes/openSUSE/help-boot/ru/opt::o_acpi.html
new file mode 100644
index 0000000..85792ac
--- /dev/null
+++ b/themes/openSUSE/help-boot/ru/opt::o_acpi.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="o_acpi">Параметры ядра: acpi</a>
+</h3>
+
+<p>ACPI (Усовершенствованный интерфейс настройки системы и управления питанием) является стандартом, который определяет интерфейс управления питанием и настройками между операционной системой и BIOS. По умолчанию <li><em>pci=noacpi</em> -- не использовать ACPI для управления прерываниями PCI</li> включён, если определяется, что версия BIOS датирована позднее, чем 2000 г. Есть несколько общих параметров для управления поведением ACPI: <ul><li><em>pci=noacpi</em> -- не использовать ACPI для управления прерываниями PCI</li><li><em>acpi=oldboot</em> -- только часть ACPI, которая относится к загрузке, остаётся активной</li><li><em>acpi=off</em> -- выключает ACPI полностью</li><li><em>acpi=force</em> -- включает ACPI, даже если ваш BIOS выпущен до 2000 года</li></ul></p>
+
+<p>Особенно на новых компьютерах, заменяет старый <a href="#o_apm">apm</a> системы.</p>
diff --git a/themes/openSUSE/help-boot/ru/opt::o_apm.html b/themes/openSUSE/help-boot/ru/opt::o_apm.html
new file mode 100644
index 0000000..c01bd4c
--- /dev/null
+++ b/themes/openSUSE/help-boot/ru/opt::o_apm.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="o_apm">Параметры ядра: apm</a>
+</h3>
+
+<p>APM - это одна из двух стратегий управления питанием, используемых в настоящее время в компьютерах. Она в основном используется в ноутбуках для таких функций, как остановка диска, но она также может использоваться для отключения компьютера во время отключения питания. APM зависит от правильной работы BIOS. Если BIOS неисправен, APM ограничено в применении или запретит работу компьютера. Однако, она может быть отключена опцией <ul><li><em>apm=off</em> -- выключает APM полностью</li></ul></p>
+
+<p>Некоторые очень новые компьютеры имеют преимущество от <a href="#o_acpi">ACPI</a>.</p>
diff --git a/themes/openSUSE/help-boot/ru/opt::o_ide.html b/themes/openSUSE/help-boot/ru/opt::o_ide.html
new file mode 100644
index 0000000..e7344ce
--- /dev/null
+++ b/themes/openSUSE/help-boot/ru/opt::o_ide.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="o_ide">Параметры ядра: ide</a>
+</h3>
+
+<p>IDE, в отличии от SCSI, обычно используется в большинстве рабочих станций. Чтобы предотвратить некоторые проблемы с оборудованием, которые случаются с IDE-системами, используйте параметр ядра: <ul><li><em>ide=nodma</em> -- выключить DMA для IDE-дисков</li></ul></p>
diff --git a/themes/openSUSE/help-boot/ru/opt::o_splash.html b/themes/openSUSE/help-boot/ru/opt::o_splash.html
new file mode 100644
index 0000000..bf4a374
--- /dev/null
+++ b/themes/openSUSE/help-boot/ru/opt::o_splash.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="o_splash">Параметры ядра: splash</a>
+</h3>
+
+<p>Заставка - это картинка, показываемая во время загрузки системы. <ul><li><em>splash=0</em> -- Заставка отключена. Это может быть полезным с очень старыми мониторами или когда надо видеть ошибки на экране.</li><li><em>splash=verbose</em> -- Активирует заставку, сообщения загрузки и ядра по-прежнему показываются.</li><li><em>splash=silent</em> -- Активирует заставку, но без сообщений. Вместо этого будет показ прогресс выполнения.</li></ul></p>
diff --git a/themes/openSUSE/help-boot/ru/opt::profile.html b/themes/openSUSE/help-boot/ru/opt::profile.html
new file mode 100644
index 0000000..39b5a20
--- /dev/null
+++ b/themes/openSUSE/help-boot/ru/opt::profile.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="profile">Выберите профиль</a>
+</h3>
+
+<p>Нажмите <em>@@@fkey_profile@@@</em>, чтобы выбрать профиль. Ваша система будет запущена с использованием настроек, сохранённых в этом профиле.</p>
diff --git a/themes/openSUSE/help-boot/sk/navi.html b/themes/openSUSE/help-boot/sk/navi.html
new file mode 100644
index 0000000..b4f8211
--- /dev/null
+++ b/themes/openSUSE/help-boot/sk/navi.html
@@ -0,0 +1,3 @@
+<p>
+Return to <a href="#foobar">FOOBAR</a>
+</p>
diff --git a/themes/openSUSE/help-boot/sk/opt.html b/themes/openSUSE/help-boot/sk/opt.html
new file mode 100644
index 0000000..2d4d9e2
--- /dev/null
+++ b/themes/openSUSE/help-boot/sk/opt.html
@@ -0,0 +1,12 @@
+<h3>
+<a name="opt">Možnosti štartu</a>
+</h3>
+
+<p>
+<ul>
+ <li><a href="#o_splash">Úvodná obrazovka</a> -- influence the behavior of the splash screen</li>
+ <li><a href="#o_apm">apm</a> -- toggle power management</li>
+ <li><a href="#o_acpi">acpi</a> -- advanced configuration and power interface</li>
+ <li><a href="#o_ide">ide</a> -- control the IDE subsystem</li>
+</ul>
+</p>
diff --git a/themes/openSUSE/help-boot/sk/opt::help.html b/themes/openSUSE/help-boot/sk/opt::help.html
new file mode 100644
index 0000000..f3800c2
--- /dev/null
+++ b/themes/openSUSE/help-boot/sk/opt::help.html
@@ -0,0 +1,25 @@
+<h3>
+<a name="help">Ako používať tohto pomocníka</a>
+</h3>
+
+<p>
+The boot loader online help is context sensitive. It gives information
+about the selected menu item or, if you are editing boot options,
+it tries to look up information about the option in which the cursor is
+positioned.
+</p>
+
+<p>
+Navigation Keys
+<ul>
+ <li><em>Šipka hore</em>: highlight previous link</li>
+ <li><em>Šipka dolu</em>: highlight next link</li>
+ <li><em>Šipka vľavo</em>, <em>Backspace</em>: return to previous topic</li>
+ <li><em>Šipka vpravo</em>, <em>Enter</em>, <em>Medzerník</em>: follow link</li>
+ <li><em>kláves Page Up</em>: scroll up one page</li>
+ <li><em>kláves Page Down</em>: scroll down one page</li>
+ <li><em>Domov</em>: go to page start</li>
+ <li><em>kláves End</em>: go to page end</li>
+ <li><em>Esc</em>: leave help</li>
+</ul>
+</p>
diff --git a/themes/openSUSE/help-boot/sk/opt::keytable.html b/themes/openSUSE/help-boot/sk/opt::keytable.html
new file mode 100644
index 0000000..f3c87f1
--- /dev/null
+++ b/themes/openSUSE/help-boot/sk/opt::keytable.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="keytable">Voľba jazyka a klávesnice</a>
+</h3>
+
+<p>
+Press <em>@@@fkey_lang@@@</em> to change language and keyboard layout the boot loader uses.
+</p>
diff --git a/themes/openSUSE/help-boot/sk/opt::o_acpi.html b/themes/openSUSE/help-boot/sk/opt::o_acpi.html
new file mode 100644
index 0000000..58dd968
--- /dev/null
+++ b/themes/openSUSE/help-boot/sk/opt::o_acpi.html
@@ -0,0 +1,23 @@
+<h3>
+<a name="o_acpi">Voľba jadra: acpi</a>
+</h3>
+
+<p>
+ACPI (Advanced Configuration and Power Interface) is a
+standard that defines power and configuration management interfaces
+between an operating system and the BIOS. By default, <em>acpi</em> is
+switched on when a BIOS is detected that is newer than from year
+2000. There are several commonly
+used parameters to control the behavior of ACPI:
+<ul>
+ <li><em>pci=noacpi</em> -- do not use ACPI to route PCI interrupts</li>
+ <li><em>acpi=oldboot</em> -- only the parts of ACPI that are relevant for booting remain activated</li>
+ <li><em>acpi=off</em> -- switch off ACPI completely</li>
+ <li><em>acpi=force</em> -- switch on ACPI even if your BIOS is dated before 2000</li>
+</ul>
+</p>
+
+<p>
+Especially on new computers, it replaces the old
+<a href="#o_apm">apm</a> system.
+</p>
diff --git a/themes/openSUSE/help-boot/sk/opt::o_apm.html b/themes/openSUSE/help-boot/sk/opt::o_apm.html
new file mode 100644
index 0000000..fefd8ed
--- /dev/null
+++ b/themes/openSUSE/help-boot/sk/opt::o_apm.html
@@ -0,0 +1,21 @@
+<h3>
+<a name="o_apm">Voľba jadra: apm</a>
+</h3>
+
+<p>
+APM is one of the two power management strategies used on current
+computers. It is mainly used with laptops for functions like suspend
+to disk, but it may also be responsible for switching off the
+computer after power down. APM relies on a correct working BIOS. If
+the BIOS is broken, APM may have only limited use or even prevent the
+computer from working. Therefore, it may be switched off with the
+parameter
+<ul>
+ <li><em>apm=off</em> -- switch off APM completely</li>
+</ul>
+</p>
+
+<p>
+Some very new computers may take more advantage from the newer
+<a href="#o_acpi">ACPI</a>.
+</p>
diff --git a/themes/openSUSE/help-boot/sk/opt::o_ide.html b/themes/openSUSE/help-boot/sk/opt::o_ide.html
new file mode 100644
index 0000000..6a25d38
--- /dev/null
+++ b/themes/openSUSE/help-boot/sk/opt::o_ide.html
@@ -0,0 +1,12 @@
+<h3>
+<a name="o_ide">Voľba jadra: ide</a>
+</h3>
+
+<p>
+IDE is, unlike SCSI, commonly used in most desktop workstations.
+To circumvent some hardware problems that occur with IDE systems, use the
+kernel parameter:
+<ul>
+ <li><em>ide=nodma</em> -- switch off DMA for IDE drives</li>
+</ul>
+</p>
diff --git a/themes/openSUSE/help-boot/sk/opt::o_splash.html b/themes/openSUSE/help-boot/sk/opt::o_splash.html
new file mode 100644
index 0000000..1db667e
--- /dev/null
+++ b/themes/openSUSE/help-boot/sk/opt::o_splash.html
@@ -0,0 +1,12 @@
+<h3>
+<a name="o_splash">Voľby jadra: úvodná obrazovka</a>
+</h3>
+
+<p>
+The splash screen is the picture shown during system start-up.
+<ul>
+ <li><em>splash=0</em> -- The splash screen is switched off. This may be useful with very old monitors or if some error occurs.</li>
+ <li><em>splash=verbose</em> -- Activates splash, kernel and boot messages are still shown.</li>
+ <li><em>splash=silent</em> -- Activates splash, but no messages. Instead a progress bar is drawn.</li>
+</ul>
+</p>
diff --git a/themes/openSUSE/help-boot/sk/opt::profile.html b/themes/openSUSE/help-boot/sk/opt::profile.html
new file mode 100644
index 0000000..4efa17d
--- /dev/null
+++ b/themes/openSUSE/help-boot/sk/opt::profile.html
@@ -0,0 +1,8 @@
+<h3>
+<a name="profile">Zvoliť profil</a>
+</h3>
+
+<p>
+Press <em>@@@fkey_profile@@@</em> to select a profile. Your system will be started using the
+configuration saved in this profile.
+</p>
diff --git a/themes/openSUSE/help-boot/sv/navi.html b/themes/openSUSE/help-boot/sv/navi.html
new file mode 100644
index 0000000..5ec7d44
--- /dev/null
+++ b/themes/openSUSE/help-boot/sv/navi.html
@@ -0,0 +1 @@
+<p>Återgå till <a href="#foobar">FOOBAR</a></p>
diff --git a/themes/openSUSE/help-boot/sv/opt.html b/themes/openSUSE/help-boot/sv/opt.html
new file mode 100644
index 0000000..ca722c1
--- /dev/null
+++ b/themes/openSUSE/help-boot/sv/opt.html
@@ -0,0 +1,12 @@
+<h3>
+<a name="opt">Startalternativ</a>
+</h3>
+
+<p>
+<ul>
+ <li><a href="#o_splash">startskärm</a> -- påverka startskärmens uppträdande</li>
+ <li><a href="#o_apm">apm</a> -- växla strömsparfunktioner</li>
+ <li><a href="#o_acpi">acpi</a> -- avancerat inställnings- och strömhanteringsgränssnitt</li>
+ <li><a href="#o_ide">ide</a> -- hantera IDE-undersystemet</li>
+</ul>
+</p>
diff --git a/themes/openSUSE/help-boot/sv/opt::help.html b/themes/openSUSE/help-boot/sv/opt::help.html
new file mode 100644
index 0000000..2885d3f
--- /dev/null
+++ b/themes/openSUSE/help-boot/sv/opt::help.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="help">Att använda hjälpsystemet</a>
+</h3>
+
+<p>Direkthjälpen för starthanteraren är sammanhangskänslig. Den innehåller information om det valda menyalternativet eller, om du redigerar startalternativ, söker efter information om det alternativ där markören befinner sig.</p>
+
+<p>Navigationstangenter <ul><li><em>Uppåtpil</em>: färglägg föregående länk</li><li><em>Neråtpil</em>: färglägg nästa länk</li><li><em>Vänsterpil</em>, <em>Backsteg</em>: återgå till föregående ämne</li><li><em>Högerpil</em>, <em>Enter</em>, <em>Mellanslag</em>: följ länk</li><li><em>Page Up</em>: rulla upp en sida</li><li><em>Page Down</em>: rulla ner en sida</li><li><em>Home</em>: gå till sidans början</li><li><em>End</em>: gå till sidans slut</li><li><em>Esc</em>: lämna hjälpen</li></ul></p>
diff --git a/themes/openSUSE/help-boot/sv/opt::keytable.html b/themes/openSUSE/help-boot/sv/opt::keytable.html
new file mode 100644
index 0000000..8fcdd59
--- /dev/null
+++ b/themes/openSUSE/help-boot/sv/opt::keytable.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="keytable">Val av språk och tangentbordslayout</a>
+</h3>
+
+<p>Tryck på <em>@@@fkey_lang@@@</em> för att ändra språket och tangentbordslayouten som starthanteraren ska använda.</p>
diff --git a/themes/openSUSE/help-boot/sv/opt::o_acpi.html b/themes/openSUSE/help-boot/sv/opt::o_acpi.html
new file mode 100644
index 0000000..e4f3642
--- /dev/null
+++ b/themes/openSUSE/help-boot/sv/opt::o_acpi.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="o_acpi">Kärnalternativ: acpi</a>
+</h3>
+
+<p>ACPI (Advanced Configuration and Power Interface) är en standard som definierar gränssnitt för ström- och inställningshantering mellan operativsystemet och BIOS. Som standard aktiveras <em>acpi</em> när ett BIOS som är tillverkat efter år 2000 upptäcks. Det finns flera vanliga parametrar som styr ACPI:s beteende: <ul><li><em>pci=noacpi</em> -- använd inte ACPI för att hantera PCI-avbrottsförfrågningar</li><li><em>acpi=oldboot</em> -- bara delarna av ACPI som är relevanta för uppstart kommer vara aktiverade</li><li><em>acpi=av</em> -- stäng av ACPI helt</li><li><em>acpi=tvinga</em> -- sätt på ACPI även om ditt BIOS är tillverkat före 2000</li></ul></p>
+
+<p>Speciellt på nyare datorer ersätter den det gamla <a href="#o_apm">apm</a>-systemet.</p>
diff --git a/themes/openSUSE/help-boot/sv/opt::o_apm.html b/themes/openSUSE/help-boot/sv/opt::o_apm.html
new file mode 100644
index 0000000..8593da9
--- /dev/null
+++ b/themes/openSUSE/help-boot/sv/opt::o_apm.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="o_apm">Kärnalternativ: apm</a>
+</h3>
+
+<p>APM är en av två strömsparstrategier som används på dagens datorer. APM används oftast på bärbara datorer för funktioner som vänteläge, men kan också hantera avstängning av datorn efter att strömbrytaren tryckts ned. För att APM ska fungera krävs ett korrekt fungerande BIOS. Om BIOS är felaktig kan APM ha en begränsad funktionalitet och kan till och med hindra datorn från att fungera som den ska. Den kan därför stängas av med parametern<ul><li><em>apm=av</em> -- stäng av APM helt</li></ul></p>
+
+<p>På vissa nya datorer kan det vara lämpligare att använda de senare <a href="#o_acpi">ACPI</a>.</p>
diff --git a/themes/openSUSE/help-boot/sv/opt::o_ide.html b/themes/openSUSE/help-boot/sv/opt::o_ide.html
new file mode 100644
index 0000000..0646139
--- /dev/null
+++ b/themes/openSUSE/help-boot/sv/opt::o_ide.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="o_ide">Kärnalternativ: ide</a>
+</h3>
+
+<p>Till skillnad mot SCSI används IDE på de flesta skrivbordsdatorer. För att kringgå vissa maskinvaruproblem som uppstår med IDE-system använder du följande kärnparameter: <ul><li><em>ide=nodma</em> -- stäng av DMA för IDE-enheter</li></ul></p>
diff --git a/themes/openSUSE/help-boot/sv/opt::o_splash.html b/themes/openSUSE/help-boot/sv/opt::o_splash.html
new file mode 100644
index 0000000..c4594b6
--- /dev/null
+++ b/themes/openSUSE/help-boot/sv/opt::o_splash.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="o_splash">Kärnalternativ: startskärm</a>
+</h3>
+
+<p>Startskärmen är bilden som visas när systemet startar.<ul><li><em>startskärm=0</em> -- Startskärmen är avstängd. Detta kan vara praktiskt på äldre bildskärmar eller om fel uppstår.</li><li><em>startskärm=utförlig</em> -- Aktiverar startskärmar. Kärn- och startmeddelanden visas fortfarande.</li><li><em>startskärm=tyst</em> -- Aktiverar startskärm, men inga meddelanden. Istället visas ett fortskridandefält.</li></ul></p>
diff --git a/themes/openSUSE/help-boot/sv/opt::profile.html b/themes/openSUSE/help-boot/sv/opt::profile.html
new file mode 100644
index 0000000..8ddeaf3
--- /dev/null
+++ b/themes/openSUSE/help-boot/sv/opt::profile.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="profile">Välj profil</a>
+</h3>
+
+<p>Tryck på <em>@@@fkey_profile@@@</em> för att välja en profil. Datorn startas med den konfiguration som sparats i den valda profilen.</p>
diff --git a/themes/openSUSE/help-boot/th/navi.html b/themes/openSUSE/help-boot/th/navi.html
new file mode 100644
index 0000000..74d01fe
--- /dev/null
+++ b/themes/openSUSE/help-boot/th/navi.html
@@ -0,0 +1 @@
+<p>กลับไปยัง <a href="#foobar">FOOBAR</a></p>
diff --git a/themes/openSUSE/help-boot/th/opt.html b/themes/openSUSE/help-boot/th/opt.html
new file mode 100644
index 0000000..0162be7
--- /dev/null
+++ b/themes/openSUSE/help-boot/th/opt.html
@@ -0,0 +1,12 @@
+<h3>
+<a name="opt">ตัวเลือกการบูตระบบ</a>
+</h3>
+
+<p>
+<ul>
+ <li><a href="#o_splash">splash</a> -- กำหนดพฤติกรรมของหน้าจอบังข้อความการเริ่มระบบ (splash)</li>
+ <li><a href="#o_apm">apm</a> -- สลับการเปิด/ปิดระบบจัดการพลังงาน</li>
+ <li><a href="#o_acpi">acpi</a> -- ACPI - ส่วนเชื่อมต่อด้านพลังงานและการปรับแต่งค่าขั้นก้าวหน้า</li>
+ <li><a href="#o_ide">ide</a> -- ควบคุมระบบย่อยของ IDE</li>
+</ul>
+</p>
diff --git a/themes/openSUSE/help-boot/th/opt::help.html b/themes/openSUSE/help-boot/th/opt::help.html
new file mode 100644
index 0000000..be57755
--- /dev/null
+++ b/themes/openSUSE/help-boot/th/opt::help.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="help">การใช้ระบบช่วยเหลือ</a>
+</h3>
+
+<p>ระบบช่วยเหลือของตัวจัดการการบูตนั้นผันแปรได้ โดยมันจะให้ข้อมูลเกี่ยวกับรายการเมนูที่เลือกไว้ หรือ หากคุณทำการแก้ไขตัวเลือกการบูต มันจะพยายามหาข้อมูลเกี่ยวกับตัวเลือกที่มีเคอร์เซอร์เลือกอยู่</p>
+
+<p>ปุ่มพิมพ์ควบคุม <ul><li><em>ปุ่มลูกศรขึ้น</em>: เน้นไปยังการเชื่อมโยงก่อนหน้า</li><li><em>ปุ่มลูกศรลง</em>: เน้นไปยังการเชื่อมโยงถัดไป</li><li><em>ปุ่มลูกศรซ้าย</em>, <em>ปุ่ม Backspace</em>: ย้อนกลับไปยังหัวข้อก่อนหน้านี้</li><li><em>ปุ่มลูกศรขวา</em>, <em>ปุ่ม Enter</em>, <em>ปุ่ม Space</em>: ตามการเชื่อมโยง</li><li><em>ปุ่ม Page Up</em>: เลื่อนขึ้นหนึ่งหน้า</li><li><em>ปุ่ม Page Down</em>: เลื่อนลงหนึ่งหน้า</li><li><em>ปุ่ม Home</em>: ไปยังหน้าเริ่มต้น</li><li><em>ปุ่ม End</em>: ไปยังหน้าสุดท้าย</li><li><em>ปุ่ม Esc</em>: ออกจากความช่วยเหลือ</li></ul></p>
diff --git a/themes/openSUSE/help-boot/th/opt::keytable.html b/themes/openSUSE/help-boot/th/opt::keytable.html
new file mode 100644
index 0000000..220c378
--- /dev/null
+++ b/themes/openSUSE/help-boot/th/opt::keytable.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="keytable">การเลือกภาษาและผังแป้นพิมพ์</a>
+</h3>
+
+<p>กด <em>@@@fkey_lang@@@</em> เพื่อเปลี่ยนภาษาและผังแป้นพิมพ์ที่จะใช้กับตัวจัดการการบูต</p>
diff --git a/themes/openSUSE/help-boot/th/opt::o_acpi.html b/themes/openSUSE/help-boot/th/opt::o_acpi.html
new file mode 100644
index 0000000..69df68d
--- /dev/null
+++ b/themes/openSUSE/help-boot/th/opt::o_acpi.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="o_acpi">ตัวเลือกของเคอร์เนล: acpi</a>
+</h3>
+
+<p>ACPI (Advanced Configuration and Power Interface) เป็นมาตรฐานในการกำหนดส่วนเชื่อมต่อการใช้พลังงานและการจัดการปรับแต่งค่าของระบบปฏิบัติการและไบออก, โดยปริยายแล้ว ตัวเลือก <em>acpi</em> จะถูกเปิดใช้งานหากตรวจสอบพบว่า ไบออสของเครื่องมีความใหม่กว่าปี ค.ศ.2000 นอกจากนี้ยังมีพารามิเตอร์ทั่วไปอีกหลายตัวที่ใช้ในการควบคุมพฤติกรรมของ ACPI คือ: <ul><li><em>pci=noacpi</em> -- ไม่ต้องใช้ ACPI เพื่อหาเส้นทางอินเทอร์รัพต์ PCI</li><li><em>acpi=oldboot</em> -- มีเฉพาะส่วนของ ACPI ที่สัมพันธ์กับการบูตที่ยังทำงานเหลืออยู่</li><li><em>acpi=off</em> -- ปิดการใช้งาน ACPI อย่างสมบูรณ์</li><li><em>acpi=force</em> -- เปิดใช้งาน ACPI แม้ว่าไบออสของเครื่องคุณจะผลิตก่อนหน้าปี ค.ศ.2000</li></ul></p>
+
+<p>โดยเฉพาะอย่างยิ่งบนคอมพิวเตอร์รุ่นใหม่ ๆ มันจะทำการแทนที่ตัวเลือก <a href="#o_apm">apm</a> เดิมของระบบ</p>
diff --git a/themes/openSUSE/help-boot/th/opt::o_apm.html b/themes/openSUSE/help-boot/th/opt::o_apm.html
new file mode 100644
index 0000000..4303e7c
--- /dev/null
+++ b/themes/openSUSE/help-boot/th/opt::o_apm.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="o_apm">ตัวเลือกของเคอร์เนล: apm</a>
+</h3>
+
+<p>ระบบ APM นั้นเป็นหนึ่งในสองของระบบจัดการพลังงาน ที่มีการใช้กันอยู่ในคอมพิวเตอร์ต่าง ๆ ในปัจจุบัน ซึ่งมุ่งใช้ในเครื่องแลปทอปเป็นหลักเพื่อให้สามารถใช้งานในบางรูปแบบ เช่น การปิดพักเครื่องโดยเก็บสถานะลงดิสก์ เป็นต้น แต่มันก็อาจจะทำหน้าที่ในการปิดสวิตช์เครื่องคอมพิวเตอร์หลังจากการปิดระบบแล้วก็ได้เช่นกัน ทั้งนี้ APM นั้น จำเป็นต้องอาศัยการทำงานร่วมกับไบออสที่รองรับมันด้วย หากไบออสเกิดเสียหาย ระบบ APM อาจจะมีการจำกัดการใช้งานเครื่อง หรืออาจจะทำให้เครื่องไม่สามารถใช้งานได้เลยก็ได้ ดังนั้น คุณอาจจะปิดการทำงานของมันได้ โดยใช้พารามิเตอร์ <ul><li><em>apm=off</em> -- ปิดการใช้งานระบบ APM อย่างสมบูรณ์</li></ul></p>
+
+<p>คอมพิวเตอร์ใหม่ ๆ บางรุ่น อาจจะมีการจัดการที่ก้าวหน้ามากกว่า <a href="#o_acpi">ACPI</a></p>
diff --git a/themes/openSUSE/help-boot/th/opt::o_ide.html b/themes/openSUSE/help-boot/th/opt::o_ide.html
new file mode 100644
index 0000000..b0d114e
--- /dev/null
+++ b/themes/openSUSE/help-boot/th/opt::o_ide.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="o_ide">ตัวเลือกของเคอร์เนล: ide</a>
+</h3>
+
+<p>ส่วนเชื่อมต่ออุปกรณ์แบบ IDE นั้น ไม่ได้คล้ายกับส่วนเชื่อมต่อแบบ SCSI ที่มักจะถูกใช้กับเครื่องสถานีงาน (เวิร์กสเตชัน) แต่อย่างใด เพื่อหลีกเลี่ยงปัญหาบางอย่างของฮาร์ดแวร์ที่อาจจะเกิดกับระบบ IDE ให้ลองใช้พารามิเตอร์ของเคอร์เนล: <ul><li><em>ide=nodma</em> -- ปิดการใช้ DMA กับไดรฟ์แบบ IDE</li></ul></p>
diff --git a/themes/openSUSE/help-boot/th/opt::o_splash.html b/themes/openSUSE/help-boot/th/opt::o_splash.html
new file mode 100644
index 0000000..ece7480
--- /dev/null
+++ b/themes/openSUSE/help-boot/th/opt::o_splash.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="o_splash">ตัวเลือกของเคอร์เนล: splash</a>
+</h3>
+
+<p>หน้าจอบังข้อความการบูตระบบ (splash) คือภาพที่จะแสดงในระหว่างการเริ่มการทำงานของระบบ <ul><li><em>splash=0</em> -- หน้าจอบังข้อความการบูตระบบ (splash) จะถูกปิดการใช้งาน ซึ่งจะมีประโยชน์ในการตรวจสอบดูข้อความผิดพลาดบางอย่างที่อาจจะเกิดขึ้นในระหว่างการเริ่มการทำงานของระบบ</li><li><em>splash=verbose</em> -- เปิดใช้งานหน้าจอบังข้อความการบูตระบบ (splash), และยังมีการแสดงข้อความของการบูตระบบและข้อความของเคอร์เนลอยู่</li><li><em>splash=silent</em> -- เปิดใช้งานหน้าจอบังข้อความการบูตระบบ (splash), แต่จะไม่มีการแสดงข้อความใด ๆ โดยจะใช้แถบแสดงความคืบหน้าการบูตระบบแทน</li></ul></p>
diff --git a/themes/openSUSE/help-boot/th/opt::profile.html b/themes/openSUSE/help-boot/th/opt::profile.html
new file mode 100644
index 0000000..cd599e3
--- /dev/null
+++ b/themes/openSUSE/help-boot/th/opt::profile.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="profile">เลือกโพรไฟล์</a>
+</h3>
+
+<p>เลือก <em>@@@fkey_profile@@@</em> เพื่อเลือกโพรไฟล์ และระบบของคุณจะเริ่มทำงานโดยการใช้ค่าปรับแต่งที่ถูกจัดเก็บไว้ในโพรไฟล์นี้</p>
diff --git a/themes/openSUSE/help-boot/uk/navi.html b/themes/openSUSE/help-boot/uk/navi.html
new file mode 100644
index 0000000..5f87cff
--- /dev/null
+++ b/themes/openSUSE/help-boot/uk/navi.html
@@ -0,0 +1 @@
+<p>Повернутись до <a href="#foobar">FOOBAR</a></p>
diff --git a/themes/openSUSE/help-boot/uk/opt.html b/themes/openSUSE/help-boot/uk/opt.html
new file mode 100644
index 0000000..ebbaf0a
--- /dev/null
+++ b/themes/openSUSE/help-boot/uk/opt.html
@@ -0,0 +1,12 @@
+<h3>
+<a name="opt">Параметри завантаження</a>
+</h3>
+
+<p>
+<ul>
+ <li><a href="#o_splash">заставка</a> -- керування поведінкою заставки</li>
+ <li><a href="#o_apm">apm</a> — перемикання керування живленням</li>
+ <li><a href="#o_acpi">acpi</a> — інтерфейс розширеного налаштування та керування живленням</li>
+ <li><a href="#o_ide">ide</a> — керування підсистемою IDE</li>
+</ul>
+</p>
diff --git a/themes/openSUSE/help-boot/uk/opt::help.html b/themes/openSUSE/help-boot/uk/opt::help.html
new file mode 100644
index 0000000..0539bd4
--- /dev/null
+++ b/themes/openSUSE/help-boot/uk/opt::help.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="help">Використання системи довідки</a>
+</h3>
+
+<p>Довідка завантажувача реагує на контекст. Вона надає інформацію про вибраний елемент меню або, якщо ви редагуєте параметри завантаження, вона намагається знайти інформацію про параметр, над яким знаходиться курсор.</p>
+
+<p>Ключі навігації <ul><li><em>Стрілка вгору</em>: підсвітити попереднє посилання</li><li><em>Стрілка вниз</em>: підсвітити наступне посилання</li><li><em>Стрілка ліворуч</em>, <em>Назад</em>: повернутись до попередньої теми</li><li><em>Стрілка праворуч</em>, <em>Ввід (Enter)</em>, <em>Пробіл</em>: перейти за посиланням</li><li><em>Сторінка вгору</em>: прокрутити сторінку вгору</li><li><em>Сторінка вниз</em>: прокрутити сторінку вниз</li><li><em>Домівка</em>: перейти до початку сторінки</li><li><em>Кінець</em>: перейти до кінця сторінки</li><li><em>Esc</em>: вийти з довідки</li></ul></p>
diff --git a/themes/openSUSE/help-boot/uk/opt::keytable.html b/themes/openSUSE/help-boot/uk/opt::keytable.html
new file mode 100644
index 0000000..a4e2f67
--- /dev/null
+++ b/themes/openSUSE/help-boot/uk/opt::keytable.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="keytable">Вибір мови та розкладки клавіатури</a>
+</h3>
+
+<p>Натисніть <em>@@@fkey_lang@@@</em>, щоб змінити мову та розкладку клавіатури, які використовує завантажувач.</p>
diff --git a/themes/openSUSE/help-boot/uk/opt::o_acpi.html b/themes/openSUSE/help-boot/uk/opt::o_acpi.html
new file mode 100644
index 0000000..67bf156
--- /dev/null
+++ b/themes/openSUSE/help-boot/uk/opt::o_acpi.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="o_acpi">Параметри ядра: acpi</a>
+</h3>
+
+<p>ACPI (Advanced Configuration and Power Interface) — це стандарт, яким визначаються інтерфейси керування живленням та налаштуванням між операційною системою і BIOS. Типово, <em>acpi</em> вмикається, коли виявлено BIOS датований після 2000 року. Є декілька загальновживаних параметрів для керування поведінкою ACPI: <ul><li><em>pci=noacpi</em> -- не використовувати ACPI для перенаправлення перепинів PCI</li><li><em>acpi=oldboot</em> -- тільки частини ACPI, які стосуються завантаження, залишаться активованими</li><li><em>acpi=off</em> — цілком вимкнути ACPI</li><li><em>acpi=force</em> — увімкнути ACPI, навіть якщо ваш BIOS створено до 2000 року</li></ul></p>
+
+<p>Особливо на нових комп'ютерах, вона замінює стару систему <a href="#o_apm">apm</a>.</p>
diff --git a/themes/openSUSE/help-boot/uk/opt::o_apm.html b/themes/openSUSE/help-boot/uk/opt::o_apm.html
new file mode 100644
index 0000000..c42923b
--- /dev/null
+++ b/themes/openSUSE/help-boot/uk/opt::o_apm.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="o_apm">Параметри ядра: apm</a>
+</h3>
+
+<p>APM — це одна з двох стратегій керування живленням, які застосовуються в сучасних комп'ютерах. Зазвичай, вона використовується в лептопах для таких функцій, як режим сну зі збереженням на диск, але також може вживатись для вимикання комп'ютера після знеструмлення. APM покладається на правильне функціонування BIOS. Якщо щось у BIOS не гаразд, APM, можливо, матиме тільки обмежене використання, або, навіть, перешкоджатими правильному функціонуванню комп'ютера. Тому, його можна вимкнути параметром <ul><li><em>apm=off</em> — цілком вимкнути APM</li></ul></p>
+
+<p>Деякі найновіші комп'ютери можуть мати користь з новішого <a href="#o_acpi">ACPI</a>.</p>
diff --git a/themes/openSUSE/help-boot/uk/opt::o_ide.html b/themes/openSUSE/help-boot/uk/opt::o_ide.html
new file mode 100644
index 0000000..0278d78
--- /dev/null
+++ b/themes/openSUSE/help-boot/uk/opt::o_ide.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="o_ide">Параметри ядра: ide</a>
+</h3>
+
+<p>На відміну від SCSI, IDE найчастіше зустрічається в більшості стільничних робочих станцій. Щоб обійти деякі проблеми в обладнанні, скористайтесь параметром ядра: <ul><li><em>ide=nodma</em>— вимкнути DMA для IDE-приводів</li></ul></p>
diff --git a/themes/openSUSE/help-boot/uk/opt::o_splash.html b/themes/openSUSE/help-boot/uk/opt::o_splash.html
new file mode 100644
index 0000000..21ed4ef
--- /dev/null
+++ b/themes/openSUSE/help-boot/uk/opt::o_splash.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="o_splash">Параметри ядра: splash</a>
+</h3>
+
+<p>Заставка екрана — це малюнок, який показується під час запуску системи. <ul><li><em>splash=0</em> — Показ заставки вимкнено. Може придатись для дуже старих моніторів або, якщо виникає якась помилка.</li><li><em>splash=verbose</em> — Активує заставку, але буде показано повідомлення ядра та завантаження.</li><li><em>splash=silent</em> — Активує заставку, але замість повідомлень показується смужка поступу.</li></ul></p>
diff --git a/themes/openSUSE/help-boot/uk/opt::profile.html b/themes/openSUSE/help-boot/uk/opt::profile.html
new file mode 100644
index 0000000..35fdcc5
--- /dev/null
+++ b/themes/openSUSE/help-boot/uk/opt::profile.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="profile">Виберіть профіль</a>
+</h3>
+
+<p>Натисніть <em>@@@fkey_profile@@@</em>, щоб вибрати профіль. Вашу систему буде запущено з використанням налаштування, збереженого в цьому профілі.</p>
diff --git a/themes/openSUSE/help-boot/wa/navi.html b/themes/openSUSE/help-boot/wa/navi.html
new file mode 100644
index 0000000..1655dda
--- /dev/null
+++ b/themes/openSUSE/help-boot/wa/navi.html
@@ -0,0 +1 @@
+<p>Ritourner viè <a href="#foobar">FOOBAR</a></p>
diff --git a/themes/openSUSE/help-boot/wa/opt.html b/themes/openSUSE/help-boot/wa/opt.html
new file mode 100644
index 0000000..0ced009
--- /dev/null
+++ b/themes/openSUSE/help-boot/wa/opt.html
@@ -0,0 +1,12 @@
+<h3>
+<a name="opt">Tchuzes d' enondaedje sistinme</a>
+</h3>
+
+<p>
+<ul>
+ <li><a href="#o_splash">waitroûle d' enondaedje</a> -- candje li dujhance del waitroûle d' enondaedje</li>
+ <li><a href="#o_apm">apm</a> -- (dis)mete li manaedjmint d' l' enerdjeye</li>
+ <li><a href="#o_acpi">acpi</a> -- sipepieus apontiaedje eyet eterface di l' enerdjeye</li>
+ <li><a href="#o_ide">ide</a> -- controle li sistinme efant d' IDE</li>
+</ul>
+</p>
diff --git a/themes/openSUSE/help-boot/wa/opt::help.html b/themes/openSUSE/help-boot/wa/opt::help.html
new file mode 100644
index 0000000..6a0b163
--- /dev/null
+++ b/themes/openSUSE/help-boot/wa/opt::help.html
@@ -0,0 +1,12 @@
+<h3>
+<a name="help">Eployî sistinme d' aidance</a>
+</h3>
+
+<p>
+The boot loader online help is context sensitive. It gives information
+about the selected menu item or, if you are editing boot options,
+it tries to look up information about the option in which the cursor is
+positioned.
+</p>
+
+<p>Tapes di naiviaedje <ul><li><em>Fletche viè l' hôt</em>: met en evidince li hårdêye di dvant</li><li><em>Fletche viè l' bas</em>: met en evidince li hårdêye shuvante</li><li><em>Hintche fletche</em>, <em>Backspace (en erî)</em>: ritourner å sudjet di dvant </li><li><em>Droete fletche</em>, <em>Intrêye</em>, <em>Espåce</em>: shure li hårdêye</li><li><em>Page Up</em>: disrôler viè l' hôt ene pådje</li><li><em>Page Down</em>: disrôler viè l' bas ene pådje</li><li><em>Måjhon</em>: potchî al kimince del pådje</li><li><em>End</em>: potchî al difén del pådje</li><li><em>Esc</em>: moussî foû d' l' aidance</li></ul></p>
diff --git a/themes/openSUSE/help-boot/wa/opt::keytable.html b/themes/openSUSE/help-boot/wa/opt::keytable.html
new file mode 100644
index 0000000..665b017
--- /dev/null
+++ b/themes/openSUSE/help-boot/wa/opt::keytable.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="keytable">Tchoes do lingaedje eyet di adjinçmint del taprece</a>
+</h3>
+
+<p>Tchôkîz <em>@@@fkey_lang@@@</em> po candjî l' lingaedje eyet l' adjinçmint del taprece kel tcherdjeu d' enondaedje sistinme eploye.</p>
diff --git a/themes/openSUSE/help-boot/wa/opt::o_acpi.html b/themes/openSUSE/help-boot/wa/opt::o_acpi.html
new file mode 100644
index 0000000..29ecc72
--- /dev/null
+++ b/themes/openSUSE/help-boot/wa/opt::o_acpi.html
@@ -0,0 +1,20 @@
+<h3>
+<a name="o_acpi">Tchuzes do nawea: acpi</a>
+</h3>
+
+<p>
+ACPI (Advanced Configuration and Power Interface) is a
+standard that defines power and configuration management interfaces
+between an operating system and the BIOS. By default, <em>acpi</em> is
+switched on when a BIOS is detected that is newer than from year
+2000. There are several commonly
+used parameters to control the behavior of ACPI:
+<ul>
+ <li><em>pci=noacpi</em> -- èn nén eployî ACPI po router les boutoes PCI</li>
+ <li><em>acpi=oldboot</em> -- i gn a k' les pårts d' ACPI ki sont-st ahessantes a l' enondaedje do sistinme ki dmorèt en alaedje</li>
+ <li><em>acpi=dismetou</em> -- shofele pår l' ACPI</li>
+ <li><em>acpi=foirci</em> -- aloume l' ACPI minme si vosse BIOS date di dvant 2000</li>
+</ul>
+</p>
+
+<p>Copurade so les noveles copiutreces, i replaece li vî sistinme <a href="#o_apm">apm</a>.</p>
diff --git a/themes/openSUSE/help-boot/wa/opt::o_apm.html b/themes/openSUSE/help-boot/wa/opt::o_apm.html
new file mode 100644
index 0000000..e5fe5b4
--- /dev/null
+++ b/themes/openSUSE/help-boot/wa/opt::o_apm.html
@@ -0,0 +1,18 @@
+<h3>
+<a name="o_apm">Tchuzes do nawea: apm</a>
+</h3>
+
+<p>
+APM is one of the two power management strategies used on current
+computers. It is mainly used with laptops for functions like suspend
+to disk, but it may also be responsible for switching off the
+computer after power down. APM relies on a correct working BIOS. If
+the BIOS is broken, APM may have only limited use or even prevent the
+computer from working. Therefore, it may be switched off with the
+parameter
+<ul>
+ <li><em>apm=dismetou</em> -- shofele pår l' APM</li>
+</ul>
+</p>
+
+<p>I gn a des foirt noveles copiutreces ki pôrént profiter pus do pus novea <a href="#o_acpi">ACPI</a>.</p>
diff --git a/themes/openSUSE/help-boot/wa/opt::o_ide.html b/themes/openSUSE/help-boot/wa/opt::o_ide.html
new file mode 100644
index 0000000..ed2ab85
--- /dev/null
+++ b/themes/openSUSE/help-boot/wa/opt::o_ide.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="o_ide">Tchuzes do nawea: ide</a>
+</h3>
+
+<p> IDE est, nén come SCSI, foirt sovint eployî dins li pupårt des éndjoles pol sicribannes. Po n' nén awè cerinnès rujhes ki s' passèt avou les sistinmes IDE, eployîz l' paramete do nawea: <ul><li><em>ide=nodma</em> -- shofler DMA po les lijheus IDE</li></ul></p>
diff --git a/themes/openSUSE/help-boot/wa/opt::o_splash.html b/themes/openSUSE/help-boot/wa/opt::o_splash.html
new file mode 100644
index 0000000..bac0241
--- /dev/null
+++ b/themes/openSUSE/help-boot/wa/opt::o_splash.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="o_splash">Tchuzes do nawea: waitroûle d' enondaedje</a>
+</h3>
+
+<p>Li waitroûle d' enondaedje est l' imådje mostrêye a l' enondaedje do sistinme. <ul><li><em>waitroûle d' enondaedje=0</em> -- Li waitroûle d' enondaedje est disclitcheye. Ça pout esse ahessant avou des foirts vîyès waitroûles ou si gn a des arokes ki s' passèt.</li><li><em>waitroûle d' enondaedje=verbose</em> -- Mete en alaedje li waitroûle d' enondaedje, les messaedjes do nawea eyet di l' enondaedje sistinme sont co todi mostrés.</li><li><em>waitroûle d' enondaedje=sins motî</em> -- Met en alaedje li waitroûle d' enondaedje mins pont d' messaedjes. Al plaece, ene båre do progrès est dessinêye.</li></ul></p>
diff --git a/themes/openSUSE/help-boot/wa/opt::profile.html b/themes/openSUSE/help-boot/wa/opt::profile.html
new file mode 100644
index 0000000..bc9b1ce
--- /dev/null
+++ b/themes/openSUSE/help-boot/wa/opt::profile.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="profile">Tchoezi profil</a>
+</h3>
+
+<p>Tchôkîz <em>@@@fkey_profile@@@</em> po tchoezi on profil. Vosse sistinme serè enondé e s' siervant di l' apontiaedje schapé e ci profil.</p>
diff --git a/themes/openSUSE/help-boot/xh/navi.html b/themes/openSUSE/help-boot/xh/navi.html
new file mode 100644
index 0000000..1034cf9
--- /dev/null
+++ b/themes/openSUSE/help-boot/xh/navi.html
@@ -0,0 +1 @@
+<p>Buyela <a href="#foobar">FOOBAR</a>.</p>
diff --git a/themes/openSUSE/help-boot/xh/opt.html b/themes/openSUSE/help-boot/xh/opt.html
new file mode 100644
index 0000000..6371a1f
--- /dev/null
+++ b/themes/openSUSE/help-boot/xh/opt.html
@@ -0,0 +1,12 @@
+<h3>
+<a name="opt">Izikhethwa Zomiselo Lwenkqubo</a>
+</h3>
+
+<p>
+<ul>
+ <li><a href="#o_splash">tshiza</a> -- influence the behavior of the splash screen</li>
+ <li><a href="#o_apm">i-apm</a> -- toggle power management</li>
+ <li><a href="#o_acpi">i-acpi</a> -- advanced configuration and power interface</li>
+ <li><a href="#o_ide">i-ide</a> -- control the IDE subsystem</li>
+</ul>
+</p>
diff --git a/themes/openSUSE/help-boot/xh/opt::help.html b/themes/openSUSE/help-boot/xh/opt::help.html
new file mode 100644
index 0000000..6248e03
--- /dev/null
+++ b/themes/openSUSE/help-boot/xh/opt::help.html
@@ -0,0 +1,25 @@
+<h3>
+<a name="help">Kusetyenziswa Isixokelelwano Soncedo</a>
+</h3>
+
+<p>
+The boot loader online help is context sensitive. It gives information
+about the selected menu item or, if you are editing boot options,
+it tries to look up information about the option in which the cursor is
+positioned.
+</p>
+
+<p>
+Navigation Keys
+<ul>
+ <li><em>Isalathi-phezulu</em>: highlight previous link</li>
+ <li><em>Isalathi-ezantsi</em>: highlight next link</li>
+ <li><em>Isalathi-ekhohlo</em>, <em>Emva ngesithuba</em>: return to previous topic</li>
+ <li><em>Isalathi-kunene</em>, <em>Ngenisa</em>, <em>Isithuba</em>: follow link</li>
+ <li><em>Tyhila Phezulu</em>: scroll up one page</li>
+ <li><em>Tyhila Ezantsi</em>: scroll down one page</li>
+ <li><em>Ekhaya</em>: go to page start</li>
+ <li><em>Isiphelo</em>: go to page end</li>
+ <li><em>Baleka</em>: leave help</li>
+</ul>
+</p>
diff --git a/themes/openSUSE/help-boot/xh/opt::keytable.html b/themes/openSUSE/help-boot/xh/opt::keytable.html
new file mode 100644
index 0000000..18e9456
--- /dev/null
+++ b/themes/openSUSE/help-boot/xh/opt::keytable.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="keytable">Ulwimi Nokukhethwayo Kokumisa kakuhle Ibhodi Yamaqhosha</a>
+</h3>
+
+<p>
+Press <em>@@@fkey_lang@@@</em> to change language and keyboard layout the boot loader uses.
+</p>
diff --git a/themes/openSUSE/help-boot/xh/opt::o_acpi.html b/themes/openSUSE/help-boot/xh/opt::o_acpi.html
new file mode 100644
index 0000000..5087eb6
--- /dev/null
+++ b/themes/openSUSE/help-boot/xh/opt::o_acpi.html
@@ -0,0 +1,23 @@
+<h3>
+<a name="o_acpi">Izikhethwa ze-Kernel: i-acpi</a>
+</h3>
+
+<p>
+ACPI (Advanced Configuration and Power Interface) is a
+standard that defines power and configuration management interfaces
+between an operating system and the BIOS. By default, <em>i-acpi</em> is
+switched on when a BIOS is detected that is newer than from year
+2000. There are several commonly
+used parameters to control the behavior of ACPI:
+<ul>
+ <li><em>i-pci=noacpi</em> -- do not use ACPI to route PCI interrupts</li>
+ <li><em>i-acpi=umiselolwakudala</em> -- only the parts of ACPI that are relevant for booting remain activated</li>
+ <li><em>i-acpi=imo yokungasebenzi</em> -- switch off ACPI completely</li>
+ <li><em>i-acpi=yonyanzelo</em> -- switch on ACPI even if your BIOS is dated before 2000</li>
+</ul>
+</p>
+
+<p>
+Especially on new computers, it replaces the old
+<a href="#o_apm">i-apm</a> system.
+</p>
diff --git a/themes/openSUSE/help-boot/xh/opt::o_apm.html b/themes/openSUSE/help-boot/xh/opt::o_apm.html
new file mode 100644
index 0000000..180499f
--- /dev/null
+++ b/themes/openSUSE/help-boot/xh/opt::o_apm.html
@@ -0,0 +1,21 @@
+<h3>
+<a name="o_apm">Izikhethwa ze-Kernel: apm</a>
+</h3>
+
+<p>
+APM is one of the two power management strategies used on current
+computers. It is mainly used with laptops for functions like suspend
+to disk, but it may also be responsible for switching off the
+computer after power down. APM relies on a correct working BIOS. If
+the BIOS is broken, APM may have only limited use or even prevent the
+computer from working. Therefore, it may be switched off with the
+parameter
+<ul>
+ <li><em>i-apm=imo yokungasebenzi</em> -- switch off APM completely</li>
+</ul>
+</p>
+
+<p>
+Some very new computers may take more advantage from the newer
+<a href="#o_acpi">i-ACPI</a>.
+</p>
diff --git a/themes/openSUSE/help-boot/xh/opt::o_ide.html b/themes/openSUSE/help-boot/xh/opt::o_ide.html
new file mode 100644
index 0000000..79d973b
--- /dev/null
+++ b/themes/openSUSE/help-boot/xh/opt::o_ide.html
@@ -0,0 +1,12 @@
+<h3>
+<a name="o_ide">Izikhethwa ze-Kernel: i-ide</a>
+</h3>
+
+<p>
+IDE is, unlike SCSI, commonly used in most desktop workstations.
+To circumvent some hardware problems that occur with IDE systems, use the
+kernel parameter:
+<ul>
+ <li><em>i-ide=nodma</em> -- switch off DMA for IDE drives</li>
+</ul>
+</p>
diff --git a/themes/openSUSE/help-boot/xh/opt::o_splash.html b/themes/openSUSE/help-boot/xh/opt::o_splash.html
new file mode 100644
index 0000000..7ebaf64
--- /dev/null
+++ b/themes/openSUSE/help-boot/xh/opt::o_splash.html
@@ -0,0 +1,12 @@
+<h3>
+<a name="o_splash">Izikhethwa ze-Kernel: tshiza</a>
+</h3>
+
+<p>
+The splash screen is the picture shown during system start-up.
+<ul>
+ <li><em>tshiza-0</em> -- The splash screen is switched off. This may be useful with very old monitors or if some error occurs.</li>
+ <li><em>tshiza=umlembelele</em> -- Activates splash, kernel and boot messages are still shown.</li>
+ <li><em>tshiza=ngokuthula</em> -- Activates splash, but no messages. Instead a progress bar is drawn.</li>
+</ul>
+</p>
diff --git a/themes/openSUSE/help-boot/xh/opt::profile.html b/themes/openSUSE/help-boot/xh/opt::profile.html
new file mode 100644
index 0000000..72ecec4
--- /dev/null
+++ b/themes/openSUSE/help-boot/xh/opt::profile.html
@@ -0,0 +1,8 @@
+<h3>
+<a name="profile">Khetha Inkangeleko Yecala</a>
+</h3>
+
+<p>
+Press <em>@@@fkey_profile@@@</em> to select a profile. Your system will be started using the
+configuration saved in this profile.
+</p>
diff --git a/themes/openSUSE/help-boot/zh_CN/navi.html b/themes/openSUSE/help-boot/zh_CN/navi.html
new file mode 100644
index 0000000..99e1122
--- /dev/null
+++ b/themes/openSUSE/help-boot/zh_CN/navi.html
@@ -0,0 +1 @@
+<p>返回 <a href="#foobar">FOOBAR</a></p>
diff --git a/themes/openSUSE/help-boot/zh_CN/opt.html b/themes/openSUSE/help-boot/zh_CN/opt.html
new file mode 100644
index 0000000..2a66e46
--- /dev/null
+++ b/themes/openSUSE/help-boot/zh_CN/opt.html
@@ -0,0 +1,12 @@
+<h3>
+<a name="opt">引导选项</a>
+</h3>
+
+<p>
+<ul>
+ <li><a href="#o_splash">splash</a> — 影响开机画面的行为</li>
+ <li><a href="#o_apm">apm</a> — 切换电源管理</li>
+ <li><a href="#o_acpi">acpi</a> — 高级配置和电源接口</li>
+ <li><a href="#o_ide">ide</a> — 控制 IDE 子系统</li>
+</ul>
+</p>
diff --git a/themes/openSUSE/help-boot/zh_CN/opt::help.html b/themes/openSUSE/help-boot/zh_CN/opt::help.html
new file mode 100644
index 0000000..30a4a9c
--- /dev/null
+++ b/themes/openSUSE/help-boot/zh_CN/opt::help.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="help">使用帮助系统</a>
+</h3>
+
+<p>引导加载程序联机帮助是与上下文相关的。它可提供有关选定菜单项的信息,或如果您正在编辑引导选项,它会尝试查找有关鼠标所在位置的选项的信息。</p>
+
+<p>导航键 <ul><li><em>向上箭头</em>:突出显示上个链接</li><li><em>向下箭头</em>:突出显示下个链接</li><li><em>向左箭头</em> 和 <em>Backspace</em>:返回上个主题</li><li><em>向右箭头</em>、<em>Enter</em> 和 <em>Space</em>:转到链接</li><li><em>Page Up</em>:上翻一个页面</li><li><em>Page Down</em>:下翻一个页面</li><li><em>Home</em>:转至页面开头</li><li><em>End</em>:转至页面尾部</li><li><em>Esc</em>:退出帮助</li></ul></p>
diff --git a/themes/openSUSE/help-boot/zh_CN/opt::keytable.html b/themes/openSUSE/help-boot/zh_CN/opt::keytable.html
new file mode 100644
index 0000000..81b0919
--- /dev/null
+++ b/themes/openSUSE/help-boot/zh_CN/opt::keytable.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="keytable">语言和键盘布局选择</a>
+</h3>
+
+<p>按 <em>@@@fkey_lang@@@</em> 以更改引导加载程序使用的语言和键盘布局。</p>
diff --git a/themes/openSUSE/help-boot/zh_CN/opt::o_acpi.html b/themes/openSUSE/help-boot/zh_CN/opt::o_acpi.html
new file mode 100644
index 0000000..150db0f
--- /dev/null
+++ b/themes/openSUSE/help-boot/zh_CN/opt::o_acpi.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="o_acpi">内核选项:acpi</a>
+</h3>
+
+<p>ACPI(高级配置与电源接口)是一种标准,它定义操作系统和 BIOS 之间的电源和配置管理接口。默认情况下,检测到 2000 年以后的 BIOS 时,会打开 <em>acpi</em>。可使用多种常用参数来控制 ACPI 的行为:<ul><li><em>pci=noacpi</em> — 不使用 ACPI 控制 PCI 中断</li><li><em>acpi=oldboot</em> — 仅与引导相关的 APCI 部分保持为已激活状态</li><li><em>acpi=off</em> — 完全关闭 ACPI</li><li><em>acpi=force</em> — 即使将 BIOS 的日期设置为 2000 之前的日期,也要打开 ACPI</li></ul></p>
+
+<p>尤其在新计算机中,它会替换旧的 <a href="#o_apm">apm</a> 系统。</p>
diff --git a/themes/openSUSE/help-boot/zh_CN/opt::o_apm.html b/themes/openSUSE/help-boot/zh_CN/opt::o_apm.html
new file mode 100644
index 0000000..22482b3
--- /dev/null
+++ b/themes/openSUSE/help-boot/zh_CN/opt::o_apm.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="o_apm">内核选项:apm</a>
+</h3>
+
+<p>APM 是当今计算机上使用的两种电源管理策略的其中一种。它主要用于笔记本电脑,例如挂起硬盘功能,但是它还可负责在关闭电源后关闭计算机。APM 依靠正确运行的 BIOS 来运作。如果 BIOS 损坏,则 APM 的使用将受限或甚至会使计算机无法工作。因此,可以使用以下参数关闭 APM <ul><li><em>apm=off</em> — 完全关闭 APM</li></ul></p>
+
+<p>一些较新的计算机可以从更新版本的 <a href="#o_acpi">ACPI</a> 受益更多。</p>
diff --git a/themes/openSUSE/help-boot/zh_CN/opt::o_ide.html b/themes/openSUSE/help-boot/zh_CN/opt::o_ide.html
new file mode 100644
index 0000000..d499520
--- /dev/null
+++ b/themes/openSUSE/help-boot/zh_CN/opt::o_ide.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="o_ide">内核选项:ide</a>
+</h3>
+
+<p>与 SCSI 不同,IDE 常用于大部分台式机工作站。要解决 IDE 系统发生的某些硬件问题,可使用内核参数:<ul><li><em>ide=nodma</em> — 为 IDE 驱动器关闭 DMA</li></ul></p>
diff --git a/themes/openSUSE/help-boot/zh_CN/opt::o_splash.html b/themes/openSUSE/help-boot/zh_CN/opt::o_splash.html
new file mode 100644
index 0000000..f9d92c7
--- /dev/null
+++ b/themes/openSUSE/help-boot/zh_CN/opt::o_splash.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="o_splash">内核选项:splash</a>
+</h3>
+
+<p>开机画面是系统启动期间显示的画面。<ul><li><em>splash=0</em> - 开机画面已关闭。这对于旧显示器或在发生某种错误时非常有用。</li><li><em>splash=verbose</em> - 激活开机画面,仍然显示内核和引导讯息。</li><li><em>splash=silent</em> - 激活开机画面,但不显示讯息,而是绘制一个进程条。</li></ul></p>
diff --git a/themes/openSUSE/help-boot/zh_CN/opt::profile.html b/themes/openSUSE/help-boot/zh_CN/opt::profile.html
new file mode 100644
index 0000000..cbe4821
--- /dev/null
+++ b/themes/openSUSE/help-boot/zh_CN/opt::profile.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="profile">选择配置文件</a>
+</h3>
+
+<p>按 <em>@@@fkey_profile@@@</em> 以选择配置文件。将使用此配置文件中保存的配置启动系统。 </p>
diff --git a/themes/openSUSE/help-boot/zh_TW/navi.html b/themes/openSUSE/help-boot/zh_TW/navi.html
new file mode 100644
index 0000000..99e1122
--- /dev/null
+++ b/themes/openSUSE/help-boot/zh_TW/navi.html
@@ -0,0 +1 @@
+<p>返回 <a href="#foobar">FOOBAR</a></p>
diff --git a/themes/openSUSE/help-boot/zh_TW/opt.html b/themes/openSUSE/help-boot/zh_TW/opt.html
new file mode 100644
index 0000000..ac5f60f
--- /dev/null
+++ b/themes/openSUSE/help-boot/zh_TW/opt.html
@@ -0,0 +1,12 @@
+<h3>
+<a name="opt">開機選項</a>
+</h3>
+
+<p>
+<ul>
+ <li><a href="#o_splash">開頭顯示畫面</a> -- 影響開機顯示畫面的行為</li>
+ <li><a href="#o_apm">APM</a> -- 切換電源管理</li>
+ <li><a href="#o_acpi">ACPI</a> -- 進階組態和電源界面</li>
+ <li><a href="#o_ide">IDE</a> -- 控制 IDE 子系統</li>
+</ul>
+</p>
diff --git a/themes/openSUSE/help-boot/zh_TW/opt::help.html b/themes/openSUSE/help-boot/zh_TW/opt::help.html
new file mode 100644
index 0000000..41f0c92
--- /dev/null
+++ b/themes/openSUSE/help-boot/zh_TW/opt::help.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="help">使用說明系統</a>
+</h3>
+
+<p>開機載入器線上說明為智慧型關聯式,它會根據選取的功能表項目來提供資訊,或者,如果您正在編輯開機選項,則它會嘗試查詢游標所在處選項的資訊。</p>
+
+<p>瀏覽鍵 <ul><li><em>向上箭號</em>: 反白上一個連結</li><li><em>向下箭號</em>: 反白下一個連結</li><li><em>向左箭號</em>, <em>退格鍵</em>:返回上一個主題</li><li><em>向右箭號</em>, <em>Enter</em>, <em>空格</em>:跟隨連結</li><li><em>Page Up</em>: 向上捲動一頁</li><li><em>Page Down</em>: 向下捲動一頁</li><li><em>Home</em>: 移至頁首</li><li><em>End</em>: 移至頁底</li><li><em>Esc</em>: 離開說明</li></ul></p>
diff --git a/themes/openSUSE/help-boot/zh_TW/opt::keytable.html b/themes/openSUSE/help-boot/zh_TW/opt::keytable.html
new file mode 100644
index 0000000..ebe7495
--- /dev/null
+++ b/themes/openSUSE/help-boot/zh_TW/opt::keytable.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="keytable">語言和鍵盤配置選項</a>
+</h3>
+
+<p>按下 <em>@@@fkey_lang@@@</em> 以變更開機載入器使用的語言和鍵盤配置。</p>
diff --git a/themes/openSUSE/help-boot/zh_TW/opt::o_acpi.html b/themes/openSUSE/help-boot/zh_TW/opt::o_acpi.html
new file mode 100644
index 0000000..1eb6ae7
--- /dev/null
+++ b/themes/openSUSE/help-boot/zh_TW/opt::o_acpi.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="o_acpi">核心選項:ACPI</a>
+</h3>
+
+<p>ACPI (Advanced Configuration and Power Interface) 是一種標準,用來定義作業系統和 BIOS 之間的電源和組態管理界面。依預設值,<em>ACPI</em>當偵測到 BIOS 比 2000 年新時,便會開啟。有數個常用的參數可控制 ACPI 的行為: <ul><li><em>pci=noacpi</em> -- 不要使用 ACPI 安排 PCI 中斷</li><li><em>acpi=oldboot</em> -- 只有部分與開機有關的 ACPI 會維持已啟動</li><li><em>acpi=force</em> -- 開啟 ACPI,即使您的 BIOS 日期早於 2000 年</li></ul></p>
+
+<p>尤其是在新的電腦上,它會取代舊的 <a href="#o_apm">APM</a> 系統。</p>
diff --git a/themes/openSUSE/help-boot/zh_TW/opt::o_apm.html b/themes/openSUSE/help-boot/zh_TW/opt::o_apm.html
new file mode 100644
index 0000000..9524fdd
--- /dev/null
+++ b/themes/openSUSE/help-boot/zh_TW/opt::o_apm.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="o_apm">核心選項:APM</a>
+</h3>
+
+<p>在目前電腦上使用的電源管理策略有兩種,APM 是其中一種。它主要是用於筆記型電腦,以提供如暫停磁碟等功能,但它也會在電源中斷後負責關閉電腦。APM 依賴正確運作的 BIOS。如果 BIOS 壞了,APM 只會限制使用電腦作業,甚或是阻止作業。因此,可使用參數 關閉 APM。 <ul><li><em>apm=off</em> -- 完全關閉 ACPI</li></ul></p>
+
+<p>一些非常新的電腦常能從新的得到更多好處 <a href="#o_acpi">ACPI</a>。</p>
diff --git a/themes/openSUSE/help-boot/zh_TW/opt::o_ide.html b/themes/openSUSE/help-boot/zh_TW/opt::o_ide.html
new file mode 100644
index 0000000..1fdaf4f
--- /dev/null
+++ b/themes/openSUSE/help-boot/zh_TW/opt::o_ide.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="o_ide">核心選項:IDE</a>
+</h3>
+
+<p>IDE 和 SCSI 不同,一般用於大部分的桌上型工作站上。若要避開一些 IDE 系統所發生的硬體問題,請使用核心參數: <ul><li><em>ide=nodma</em> -- 關閉 IDE 磁碟機的 DMA</li></ul></p>
diff --git a/themes/openSUSE/help-boot/zh_TW/opt::o_splash.html b/themes/openSUSE/help-boot/zh_TW/opt::o_splash.html
new file mode 100644
index 0000000..5512efd
--- /dev/null
+++ b/themes/openSUSE/help-boot/zh_TW/opt::o_splash.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="o_splash">核心選項:開頭顯示畫面</a>
+</h3>
+
+<p>開機顯示畫面是在系統啟動期間顯示的圖片。 <ul><li><em>splash=0</em> -- 關閉開機顯示畫面。這對於非常舊的監視器或是當發生一些錯誤時,非常有用。</li><li><em>splash=verbose</em> -- 啟動開機顯示畫面,且仍會顯示核心和開機訊息。</li><li><em>splash=silent</em> -- 啟動開機顯示畫面,但未顯示訊息,而是顯示進度條。</li></ul></p>
diff --git a/themes/openSUSE/help-boot/zh_TW/opt::profile.html b/themes/openSUSE/help-boot/zh_TW/opt::profile.html
new file mode 100644
index 0000000..8d14b3e
--- /dev/null
+++ b/themes/openSUSE/help-boot/zh_TW/opt::profile.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="profile">選擇設定檔</a>
+</h3>
+
+<p>按下 <em>@@@fkey_profile@@@</em> 以選取設定檔。您的系統會使用儲存在此設定檔中的組態來啟動。</p>
diff --git a/themes/openSUSE/help-install/Makefile b/themes/openSUSE/help-install/Makefile
new file mode 100644
index 0000000..c9645b4
--- /dev/null
+++ b/themes/openSUSE/help-install/Makefile
@@ -0,0 +1,20 @@
+BINDIR = $(shell [ -x ../../../gfxboot ] && echo ../../../ )
+GFXBOOT = $(BINDIR)gfxboot
+PRODUCT = $(shell perl -ne 'print if s/^product=//' ../config)
+HELPFILES = $(addsuffix .hlp, $(shell for i in * ; do [ -d $$i ] && echo $$i ; done))
+
+HELPSRC = main*
+HELPNAVI = navi
+ENTITIES = product='$(PRODUCT)' fkey_help=F1 fkey_lang=F2 fkey_video=F3 fkey_inst=F4 fkey_dud=F6
+
+%.hlp: %
+ $(GFXBOOT) --help-create $@ --define $(ENTITIES) --navi $</$(HELPNAVI).html $</$(HELPSRC).html || true
+
+all: .ready
+
+.ready: $(HELPFILES)
+ @touch .ready
+
+clean:
+ rm -f .ready *.hlp *~
+
diff --git a/themes/openSUSE/help-install/af/main.html b/themes/openSUSE/help-install/af/main.html
new file mode 100644
index 0000000..0a90e9b
--- /dev/null
+++ b/themes/openSUSE/help-install/af/main.html
@@ -0,0 +1,103 @@
+<h3>
+<a name="main">Selflaaiprogramhulp</a>
+</h3>
+
+<p>
+Welcome to <em>@@@product@@@</em>
+</p>
+
+<p>
+Use this menu to select the desired function. If you have
+problems navigating in this help system, press
+<em>@@@fkey_help@@@</em> to enter the <a href="#help">beskrywing</a> of the help
+system. The main functions in this menu are:
+</p>
+
+<p>
+<a href="#harddisk">Selflaai vanaf harde skyf</a>: This selection will not do
+anything to the system. It only starts a previously installed
+operating system.
+</p>
+
+<p>
+<a href="#linux">Installasie</a>:
+This installation mode works on most machines. If you experience a
+system freeze during boot or problems with detection of your hardware
+components, such as disk controllers or network cards, try one of the
+following installation options.
+</p>
+
+<p>
+<a href="#noacpi">Installasie -- ACPI-versper</a>: Many of the
+currently-sold computers have incomplete or faulty ACPI
+implementations. This selection disables ACPI support in the
+kernel, but still enables many performance features, like DMA for IDE
+hard disks.
+</p>
+
+<p>
+<a href="#nolapic">Installasie -- plaaslike APIC-versper</a>:
+If the normal installation fails, this might be due to the
+system hardware not supporting local APIC.
+If this seems to be the case, use this option to
+install without local APIC support.
+</p>
+
+<p>
+<a href="#failsafe">Installasie -- veilige instellings</a>: If you were not
+successful with <em>Installasie</em>, this selection might
+solve the issue.
+</p>
+
+<p>
+<a href="#rescue">Reddingstelsel</a>: This boot image starts a small
+Linux system in RAM. This is useful if the system does not start properly.
+After booting this system, log in as root.
+</p>
+
+<p>
+<a href="#firmware">Firmatuurtoets</a>: Runs a BIOS test tool that validates
+ACPI and other parts of your BIOS.
+</p>
+
+<p>
+<a href="#memtest">Geheuetoets</a>: Memory testing is useful for more than
+checking installation of new memory modules. It is a stress test
+for a big part of your computer system and may indicate hardware
+problems.
+</p>
+
+<p>
+<a href="#opt">Selflaai-opsies</a>: The boot options may change the
+behavior of your system completely. They are settings for
+the kernel.
+</p>
+
+<p>
+<a href="#help">@@@fkey_help@@@ Help</a>: This is context sensitive. It will
+show different screens depending on the active element of the
+boot screen. There is also a description of this help system
+available.
+</p>
+
+<p>
+<a href="#keytable">@@@fkey_lang@@@</a>: Set language and keyboard mapping
+used by the boot loader.
+</p>
+
+<p>
+<a href="#videomode">@@@fkey_video@@@ Video Mode</a>: Here, choose between
+different screen resolutions while installing. If you encounter
+problems with the graphical installation, the <em>teksmodus</em> may
+be a work-around for you.
+</p>
+
+<p>
+<a href="#install_src">@@@fkey_inst@@@ Installation Source</a>: Choose the
+installation source.
+</p>
+
+<p>
+<a href="#driverupdate">@@@fkey_dud@@@ Driver Update</a>: For very new machines, a
+driver update may be needed to install the system.
+</p>
diff --git a/themes/openSUSE/help-install/af/main::bits.html b/themes/openSUSE/help-install/af/main::bits.html
new file mode 100644
index 0000000..271437a
--- /dev/null
+++ b/themes/openSUSE/help-install/af/main::bits.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="bits">Sagtewaresoortkeuse</a>
+</h3>
+
+<p>
+You have the choice to install the 32-bit or 64-bit version of @@@product@@@.
+</p>
diff --git a/themes/openSUSE/help-install/af/main::driverupdate.html b/themes/openSUSE/help-install/af/main::driverupdate.html
new file mode 100644
index 0000000..fb94a65
--- /dev/null
+++ b/themes/openSUSE/help-install/af/main::driverupdate.html
@@ -0,0 +1,14 @@
+<h3>
+<a name="driverupdate">Aandrywerbywerking</a>
+</h3>
+
+<p>
+If you need a driver update floppy or CD-ROM, press <em>@@@fkey_dud@@@</em>. The
+boot loader asks you to insert the driver update medium after
+loading the Linux kernel.
+</p>
+
+<p>
+A driver update is typically a floppy with new versions of hardware
+drivers or bug fixes needed during installation.
+</p>
diff --git a/themes/openSUSE/help-install/af/main::failsafe.html b/themes/openSUSE/help-install/af/main::failsafe.html
new file mode 100644
index 0000000..39eead3
--- /dev/null
+++ b/themes/openSUSE/help-install/af/main::failsafe.html
@@ -0,0 +1,11 @@
+<h3>
+<a name="failsafe">Installasie -- veilige instellings</a>
+</h3>
+
+<p>
+Select <em>Installasie -- veilige instellings</em> if you encounter hangs
+while installing or irreproducible errors. This option disables DMA
+for IDE drives and all power management features.
+See also the kernel options for <a href="#o_apm">apm</a>,
+<a href="#o_acpi">acpi</a> and <a href="#o_ide">ide</a>.
+</p>
diff --git a/themes/openSUSE/help-install/af/main::firmware.html b/themes/openSUSE/help-install/af/main::firmware.html
new file mode 100644
index 0000000..c74b4e0
--- /dev/null
+++ b/themes/openSUSE/help-install/af/main::firmware.html
@@ -0,0 +1,9 @@
+<h3>
+<a name="firmware">Firmatuurtoets</a>
+</h3>
+
+<p>
+Starts a BIOS checker that validates the ACPI tables
+and many other parts of your BIOS.
+Test results can be stored on usb disk or saved via network.
+</p>
diff --git a/themes/openSUSE/help-install/af/main::harddisk.html b/themes/openSUSE/help-install/af/main::harddisk.html
new file mode 100644
index 0000000..dbf05dd
--- /dev/null
+++ b/themes/openSUSE/help-install/af/main::harddisk.html
@@ -0,0 +1,16 @@
+<h3>
+<a name="harddisk">Selflaai vanaf harde skyf</a>
+</h3>
+
+<p>
+Select <em>Selflaai-geïnstalleerde OS</em> to start the system installed on
+your local hard disk. This system must be installed properly, because
+only the MBR (Master Boot Record) on the first hard disk is started.
+The device ID of the first hard disk is provided by the BIOS of
+the computer.
+</p>
+
+<p>
+Use this if you forgot to remove the CD or DVD from your
+drive and want to start the computer from the hard disk.
+</p>
diff --git a/themes/openSUSE/help-install/af/main::help.html b/themes/openSUSE/help-install/af/main::help.html
new file mode 100644
index 0000000..6888151
--- /dev/null
+++ b/themes/openSUSE/help-install/af/main::help.html
@@ -0,0 +1,25 @@
+<h3>
+<a name="help">Gebruik van die Hulpstelsel</a>
+</h3>
+
+<p>
+The boot loader online help is context sensitive. It gives information
+about the selected menu item or, if you are editing boot options,
+it tries to look up information about the option in which the cursor is
+positioned.
+</p>
+
+<p>
+Navigation Keys
+<ul>
+ <li><em>Op-pyl</em>: highlight previous link</li>
+ <li><em>Af-pyl</em>: highlight next link</li>
+ <li><em>Links-pyl</em>, <em>Terugspasie</em>: return to previous topic</li>
+ <li><em>Regs-pyl</em>, <em>Voer in</em>, <em>Spasie</em>: follow link</li>
+ <li><em>Bladsy op</em>: scroll up one page</li>
+ <li><em>Bladsy af</em>: scroll down one page</li>
+ <li><em>Tuis</em>: go to page start</li>
+ <li><em>Eindig</em>: go to page end</li>
+ <li><em>Ontsnap</em>: leave help</li>
+</ul>
+</p>
diff --git a/themes/openSUSE/help-install/af/main::install_src.html b/themes/openSUSE/help-install/af/main::install_src.html
new file mode 100644
index 0000000..ceeafd9
--- /dev/null
+++ b/themes/openSUSE/help-install/af/main::install_src.html
@@ -0,0 +1,12 @@
+<h3>
+<a name="install_src">Installasiebron</a>
+</h3>
+
+<p>
+Press <em>@@@fkey_inst@@@</em> to choose an installation source.
+</p>
+
+<p>
+This is the same as using the <a href="#o_install">installeer</a>
+boot option.
+</p>
diff --git a/themes/openSUSE/help-install/af/main::keytable.html b/themes/openSUSE/help-install/af/main::keytable.html
new file mode 100644
index 0000000..93f13e8
--- /dev/null
+++ b/themes/openSUSE/help-install/af/main::keytable.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="keytable">Taal- en sleutelborduitlegkeuse</a>
+</h3>
+
+<p>
+Press <em>@@@fkey_lang@@@</em> to change language and keyboard layout the boot loader uses.
+</p>
diff --git a/themes/openSUSE/help-install/af/main::linux.html b/themes/openSUSE/help-install/af/main::linux.html
new file mode 100644
index 0000000..c6472cb
--- /dev/null
+++ b/themes/openSUSE/help-install/af/main::linux.html
@@ -0,0 +1,10 @@
+<h3>
+<a name="linux">Installasie</a>
+</h3>
+
+<p>
+Select <em>Installasie</em> to start the default installation. The
+<a href="#opt">selflaai-opsies</a> entered are used in the
+start-up. This item activates many features of commonly available
+hardware.
+</p>
diff --git a/themes/openSUSE/help-install/af/main::memtest.html b/themes/openSUSE/help-install/af/main::memtest.html
new file mode 100644
index 0000000..09715ae
--- /dev/null
+++ b/themes/openSUSE/help-install/af/main::memtest.html
@@ -0,0 +1,14 @@
+<h3>
+<a name="memtest">Geheuetoets</a>
+</h3>
+
+<p>
+The included <em>Geheuetoets</em> provides good possibilities to
+stress test the hardware of a system. Its main purpose is to detect
+broken RAM, but it also stresses many other parts of the system.
+</p>
+
+<p>
+There is no guarantee that the memory is good if no errors are
+found, although most of memory defects will be found.
+</p>
diff --git a/themes/openSUSE/help-install/af/main::noacpi.html b/themes/openSUSE/help-install/af/main::noacpi.html
new file mode 100644
index 0000000..eaa0cd2
--- /dev/null
+++ b/themes/openSUSE/help-install/af/main::noacpi.html
@@ -0,0 +1,24 @@
+<h3>
+<a name="noacpi">Installasie -- ACPI-versper</a>
+</h3>
+
+<p>
+Current hardware usually requires ACPI (Advanced Configuration and Power Interface)
+to control the interrupt handling.
+ACPI completely replaces the old APM system.
+</p>
+
+<p>
+Select <em>Installasie -- ACPI-versper</em> if you encounter
+problems during boot of the kernel. Known problems with machines that
+have problems with ACPI are:
+<ul>
+ <li>kernel freezes when booting</li>
+ <li>PCI Cards are not detected or initialized properly</li>
+</ul>
+</p>
+
+<p>
+You may also try the <a href="#firmware">Firmatuurtoets</a> boot option
+and look at the test results of the ACPI validation.
+</p>
diff --git a/themes/openSUSE/help-install/af/main::nolapic.html b/themes/openSUSE/help-install/af/main::nolapic.html
new file mode 100644
index 0000000..45004fa
--- /dev/null
+++ b/themes/openSUSE/help-install/af/main::nolapic.html
@@ -0,0 +1,14 @@
+<h3>
+<a name="nolapic">Installasie -- plaaslike APIC-versper</a>
+</h3>
+
+<p>
+Normally there are no problems with the APIC (Advanced Programmable Interrupt
+Controller). But if you seem to have some, try this option to boot
+without local APIC support.
+</p>
+
+<p>
+Please don't confuse this with <a href="#noacpi">ACPI</a>
+(Advanced Configuration and Power Interface).
+</p>
diff --git a/themes/openSUSE/help-install/af/main::opt.html b/themes/openSUSE/help-install/af/main::opt.html
new file mode 100644
index 0000000..3107cc3
--- /dev/null
+++ b/themes/openSUSE/help-install/af/main::opt.html
@@ -0,0 +1,28 @@
+<h3>
+<a name="opt">Selflaai-opsies</a>
+</h3>
+
+<p>
+There are two types of boot options available. First, there are
+options that affect the installer. Second, there are kernel
+options. Some of the more common options are:
+</p>
+
+<p>
+a) installer options
+<ul>
+ <li><a href="#o_install">installeer</a> -- select an installation source</li>
+ <li><a href="#network">netwerk-opsies</a> -- the network options</li>
+ <li><a href="#o_vnc">vnc-opsies</a> -- options for installation via VNC</li>
+</ul>
+</p>
+
+<p>
+b) kernel options
+<ul>
+ <li><a href="#o_splash">splat</a> -- influence the behavior of the splash screen</li>
+ <li><a href="#o_apm">apm</a> -- toggle power management</li>
+ <li><a href="#o_acpi">acpi</a> -- advanced configuration and power interface</li>
+ <li><a href="#o_ide">ide</a> -- control the IDE subsystem</li>
+</ul>
+</p>
diff --git a/themes/openSUSE/help-install/af/main::opt::network.html b/themes/openSUSE/help-install/af/main::opt::network.html
new file mode 100644
index 0000000..bec0473
--- /dev/null
+++ b/themes/openSUSE/help-install/af/main::opt::network.html
@@ -0,0 +1,35 @@
+<a name="o_hostip"/>
+<a name="o_netmask"/>
+<a name="o_gateway"/>
+
+<h3>
+<a name="network">Installeerderopsies: Netwerkopsies</a>
+</h3>
+
+<p>
+It is possible to configure the network interface right now. The
+hardware will be detected later by YaST2. The minimum set of options
+to configure your network card consists of host IP and netmask. For
+example:
+<ul>
+ <li>gasheerip=192.168.0.10 netmasker=255.255.255.0</li>
+</ul>
+</p>
+
+<p>
+or in a shorter form:
+<ul>
+ <li>gasheerip=192.168.0.10/24</li>
+</ul>
+</p>
+
+<p>
+If you specified a <a href="#o_install">netwerkgebaseerde installering</a> and do
+not specify both of these options, the installer tries to configure
+the network interface with <em>dhcp</em>. If you need a default
+gateway, specify this with the option <em>deurgang</em>. For
+example:
+<ul>
+ <li>deurgang=192.168.0.8</li>
+</ul>
+</p>
diff --git a/themes/openSUSE/help-install/af/main::opt::o_acpi.html b/themes/openSUSE/help-install/af/main::opt::o_acpi.html
new file mode 100644
index 0000000..8426f1f
--- /dev/null
+++ b/themes/openSUSE/help-install/af/main::opt::o_acpi.html
@@ -0,0 +1,23 @@
+<h3>
+<a name="o_acpi">Kernopsies: acpi</a>
+</h3>
+
+<p>
+ACPI (Advanced Configuration and Power Interface) is a
+standard that defines power and configuration management interfaces
+between an operating system and the BIOS. By default, <em>acpi</em> is
+switched on when a BIOS is detected that is newer than from year
+2000. There are several commonly
+used parameters to control the behavior of ACPI:
+<ul>
+ <li><em>pci=noacpi</em> -- do not use ACPI to route PCI interrupts</li>
+ <li><em>acpi=ouselflaai</em> -- only the parts of ACPI that are relevant for booting remain activated</li>
+ <li><em>acpi=af</em> -- switch off ACPI completely</li>
+ <li><em>acpi=dwang</em> -- switch on ACPI even if your BIOS is dated before 2000</li>
+</ul>
+</p>
+
+<p>
+Especially on new computers, it replaces the old
+<a href="#o_apm">apm</a> system.
+</p>
diff --git a/themes/openSUSE/help-install/af/main::opt::o_apm.html b/themes/openSUSE/help-install/af/main::opt::o_apm.html
new file mode 100644
index 0000000..d4c75ed
--- /dev/null
+++ b/themes/openSUSE/help-install/af/main::opt::o_apm.html
@@ -0,0 +1,21 @@
+<h3>
+<a name="o_apm">Kernopsies: apm</a>
+</h3>
+
+<p>
+APM is one of the two power management strategies used on current
+computers. It is mainly used with laptops for functions like suspend
+to disk, but it may also be responsible for switching off the
+computer after power down. APM relies on a correct working BIOS. If
+the BIOS is broken, APM may have only limited use or even prevent the
+computer from working. Therefore, it may be switched off with the
+parameter
+<ul>
+ <li><em>apm=af</em> -- switch off APM completely</li>
+</ul>
+</p>
+
+<p>
+Some very new computers may take more advantage from the newer
+<a href="#o_acpi">ACPI</a>.
+</p>
diff --git a/themes/openSUSE/help-install/af/main::opt::o_ide.html b/themes/openSUSE/help-install/af/main::opt::o_ide.html
new file mode 100644
index 0000000..761f42c
--- /dev/null
+++ b/themes/openSUSE/help-install/af/main::opt::o_ide.html
@@ -0,0 +1,12 @@
+<h3>
+<a name="o_ide">Kernopsies: ide</a>
+</h3>
+
+<p>
+IDE is, unlike SCSI, commonly used in most desktop workstations.
+To circumvent some hardware problems that occur with IDE systems, use the
+kernel parameter:
+<ul>
+ <li><em>ide=geendma</em> -- switch off DMA for IDE drives</li>
+</ul>
+</p>
diff --git a/themes/openSUSE/help-install/af/main::opt::o_install.html b/themes/openSUSE/help-install/af/main::opt::o_install.html
new file mode 100644
index 0000000..c2f4bc4
--- /dev/null
+++ b/themes/openSUSE/help-install/af/main::opt::o_install.html
@@ -0,0 +1,30 @@
+<h3>
+<a name="o_install">Installeerderopsies: installeer</a>
+</h3>
+
+<p>
+By default, the local CD-ROMs are searched for the installation source.
+For a network install, select the
+<em>installeer</em> option. Possible installation protocols are
+<ul>
+ <li>FTP</li>
+ <li>NFS</li>
+ <li>HTTP</li>
+</ul>
+</p>
+
+<p>
+The syntax to use is just like standard URLs. For example,
+if your server is found at 192.168.0.1 and you want to do an NFS-based
+install from the directory /install on this server, specify
+the source as follows:
+<ul>
+ <li>installeer=nfs://192.168.0.1/installeer</li>
+</ul>
+</p>
+
+<p>
+The network card will either be configured with <em>dhcp</em> or you
+must specify the parameters yourself as described in the
+<a href="#network">netwerk-opsies</a>.
+</p>
diff --git a/themes/openSUSE/help-install/af/main::opt::o_splash.html b/themes/openSUSE/help-install/af/main::opt::o_splash.html
new file mode 100644
index 0000000..7914f05
--- /dev/null
+++ b/themes/openSUSE/help-install/af/main::opt::o_splash.html
@@ -0,0 +1,12 @@
+<h3>
+<a name="o_splash">Kernopsies: splat</a>
+</h3>
+
+<p>
+The splash screen is the picture shown during system start-up.
+<ul>
+ <li><em>splat=0</em> -- The splash screen is switched off. This may be useful with very old monitors or if some error occurs.</li>
+ <li><em>splat=woordryk</em> -- Activates splash, kernel and boot messages are still shown.</li>
+ <li><em>splat=stil</em> -- Activates splash, but no messages. Instead a progress bar is drawn.</li>
+</ul>
+</p>
diff --git a/themes/openSUSE/help-install/af/main::opt::o_vnc.html b/themes/openSUSE/help-install/af/main::opt::o_vnc.html
new file mode 100644
index 0000000..dbf90b1
--- /dev/null
+++ b/themes/openSUSE/help-install/af/main::opt::o_vnc.html
@@ -0,0 +1,18 @@
+<a name="o_vncpassword"/>
+
+<h3>
+<a name="o_vnc">Installeerderopsies: vnc</a>
+</h3>
+
+<p>
+To enable the VNC installation, specify the
+parameters vnc and vncpassword:
+<ul>
+ <li><em>vnc=1 vncwagwoord=voorbeeld</em></li>
+</ul>
+</p>
+
+<p>
+The VNC server will be started and you may control YaST2 over any VNC
+client from a remote system.
+</p>
diff --git a/themes/openSUSE/help-install/af/main::rescue.html b/themes/openSUSE/help-install/af/main::rescue.html
new file mode 100644
index 0000000..89f3de5
--- /dev/null
+++ b/themes/openSUSE/help-install/af/main::rescue.html
@@ -0,0 +1,10 @@
+<h3>
+<a name="rescue">Reddingstelsel</a>
+</h3>
+
+<p>
+The <em>Reddingstelsel</em> is a small RAM disk base system. From there,
+it is possible to make all kinds of changes to an installed system. Because
+only low-level tools are available in this system, it is intended for
+experts.
+</p>
diff --git a/themes/openSUSE/help-install/af/main::videomode.html b/themes/openSUSE/help-install/af/main::videomode.html
new file mode 100644
index 0000000..eb3c96d
--- /dev/null
+++ b/themes/openSUSE/help-install/af/main::videomode.html
@@ -0,0 +1,18 @@
+<h3>
+<a name="videomode">Videomoduskeuse</a>
+</h3>
+
+<p>
+Press <em>@@@fkey_video@@@</em> to get the list of video modes your graphics card
+supports. The highest mode your monitor can display is preselected.
+</p>
+
+<p>
+It is possible that your monitor cannot be detected automatically. In that
+case, select your preferred mode manually.
+</p>
+
+<p>
+If your system has problems with the graphics card during the
+installation, the <em>teksmodus</em> may be a usable work-around.
+</p>
diff --git a/themes/openSUSE/help-install/af/navi.html b/themes/openSUSE/help-install/af/navi.html
new file mode 100644
index 0000000..257db47
--- /dev/null
+++ b/themes/openSUSE/help-install/af/navi.html
@@ -0,0 +1 @@
+<p>Gaan terug na <a href="#foobar">FOOBAR</a></p>
diff --git a/themes/openSUSE/help-install/ar/main.html b/themes/openSUSE/help-install/ar/main.html
new file mode 100644
index 0000000..3f26ccd
--- /dev/null
+++ b/themes/openSUSE/help-install/ar/main.html
@@ -0,0 +1,103 @@
+<h3>
+<a name="main">تعليمات أداة تحميل التشغيل</a>
+</h3>
+
+<p>
+Welcome to <em>@@@product@@@</em>
+</p>
+
+<p>
+Use this menu to select the desired function. If you have
+problems navigating in this help system, press
+<em>@@@fkey_help@@@</em> to enter the <a href="#help">الوصف</a> of the help
+system. The main functions in this menu are:
+</p>
+
+<p>
+<a href="#harddisk">تشغيل من القرص الصلب</a>: This selection will not do
+anything to the system. It only starts a previously installed
+operating system.
+</p>
+
+<p>
+<a href="#linux">التثبيت</a>:
+This installation mode works on most machines. If you experience a
+system freeze during boot or problems with detection of your hardware
+components, such as disk controllers or network cards, try one of the
+following installation options.
+</p>
+
+<p>
+<a href="#noacpi">تثبيت--ACPI معطلة</a>: Many of the
+currently-sold computers have incomplete or faulty ACPI
+implementations. This selection disables ACPI support in the
+kernel, but still enables many performance features, like DMA for IDE
+hard disks.
+</p>
+
+<p>
+<a href="#nolapic">تثبيت--APIC المحلي معطَّل</a>:
+If the normal installation fails, this might be due to the
+system hardware not supporting local APIC.
+If this seems to be the case, use this option to
+install without local APIC support.
+</p>
+
+<p>
+<a href="#failsafe">تثبيت--إعدادات آمنة</a>: If you were not
+successful with <em>التثبيت</em>, this selection might
+solve the issue.
+</p>
+
+<p>
+<a href="#rescue">نظام الإنقاذ</a>: This boot image starts a small
+Linux system in RAM. This is useful if the system does not start properly.
+After booting this system, log in as root.
+</p>
+
+<p>
+<a href="#firmware">اختبار البرنامج الثابت</a>: Runs a BIOS test tool that validates
+ACPI and other parts of your BIOS.
+</p>
+
+<p>
+<a href="#memtest">اختبار الذاكرة</a>: Memory testing is useful for more than
+checking installation of new memory modules. It is a stress test
+for a big part of your computer system and may indicate hardware
+problems.
+</p>
+
+<p>
+<a href="#opt">خيارات التشغيل</a>: The boot options may change the
+behavior of your system completely. They are settings for
+the kernel.
+</p>
+
+<p>
+<a href="#help">@@@fkey_help@@@ Help</a>: This is context sensitive. It will
+show different screens depending on the active element of the
+boot screen. There is also a description of this help system
+available.
+</p>
+
+<p>
+<a href="#keytable">@@@fkey_lang@@@</a>: Set language and keyboard mapping
+used by the boot loader.
+</p>
+
+<p>
+<a href="#videomode">@@@fkey_video@@@ Video Mode</a>: Here, choose between
+different screen resolutions while installing. If you encounter
+problems with the graphical installation, the <em>وضع النص</em> may
+be a work-around for you.
+</p>
+
+<p>
+<a href="#install_src">@@@fkey_inst@@@ Installation Source</a>: Choose the
+installation source.
+</p>
+
+<p>
+<a href="#driverupdate">@@@fkey_dud@@@ Driver Update</a>: For very new machines, a
+driver update may be needed to install the system.
+</p>
diff --git a/themes/openSUSE/help-install/ar/main::bits.html b/themes/openSUSE/help-install/ar/main::bits.html
new file mode 100644
index 0000000..39f412e
--- /dev/null
+++ b/themes/openSUSE/help-install/ar/main::bits.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="bits">تحديد نوع البرنامج</a>
+</h3>
+
+<p>
+You have the choice to install the 32-bit or 64-bit version of @@@product@@@.
+</p>
diff --git a/themes/openSUSE/help-install/ar/main::driverupdate.html b/themes/openSUSE/help-install/ar/main::driverupdate.html
new file mode 100644
index 0000000..bec3dde
--- /dev/null
+++ b/themes/openSUSE/help-install/ar/main::driverupdate.html
@@ -0,0 +1,14 @@
+<h3>
+<a name="driverupdate">تحديث برنامج التشغيل</a>
+</h3>
+
+<p>
+If you need a driver update floppy or CD-ROM, press <em>@@@fkey_dud@@@</em>. The
+boot loader asks you to insert the driver update medium after
+loading the Linux kernel.
+</p>
+
+<p>
+A driver update is typically a floppy with new versions of hardware
+drivers or bug fixes needed during installation.
+</p>
diff --git a/themes/openSUSE/help-install/ar/main::failsafe.html b/themes/openSUSE/help-install/ar/main::failsafe.html
new file mode 100644
index 0000000..84c48df
--- /dev/null
+++ b/themes/openSUSE/help-install/ar/main::failsafe.html
@@ -0,0 +1,11 @@
+<h3>
+<a name="failsafe">تثبيت--إعدادات آمنة</a>
+</h3>
+
+<p>
+Select <em>تثبيت--إعدادات آمنة</em> if you encounter hangs
+while installing or irreproducible errors. This option disables DMA
+for IDE drives and all power management features.
+See also the kernel options for <a href="#o_apm">apm</a>,
+<a href="#o_acpi">acpi</a> and <a href="#o_ide">ide</a>.
+</p>
diff --git a/themes/openSUSE/help-install/ar/main::firmware.html b/themes/openSUSE/help-install/ar/main::firmware.html
new file mode 100644
index 0000000..c986213
--- /dev/null
+++ b/themes/openSUSE/help-install/ar/main::firmware.html
@@ -0,0 +1,9 @@
+<h3>
+<a name="firmware">اختبار البرنامج الثابت</a>
+</h3>
+
+<p>
+Starts a BIOS checker that validates the ACPI tables
+and many other parts of your BIOS.
+Test results can be stored on usb disk or saved via network.
+</p>
diff --git a/themes/openSUSE/help-install/ar/main::harddisk.html b/themes/openSUSE/help-install/ar/main::harddisk.html
new file mode 100644
index 0000000..3073245
--- /dev/null
+++ b/themes/openSUSE/help-install/ar/main::harddisk.html
@@ -0,0 +1,16 @@
+<h3>
+<a name="harddisk">تشغيل من القرص الصلب</a>
+</h3>
+
+<p>
+Select <em>تشغيل نظام التشغيل المثبَّت</em> to start the system installed on
+your local hard disk. This system must be installed properly, because
+only the MBR (Master Boot Record) on the first hard disk is started.
+The device ID of the first hard disk is provided by the BIOS of
+the computer.
+</p>
+
+<p>
+Use this if you forgot to remove the CD or DVD from your
+drive and want to start the computer from the hard disk.
+</p>
diff --git a/themes/openSUSE/help-install/ar/main::help.html b/themes/openSUSE/help-install/ar/main::help.html
new file mode 100644
index 0000000..c895f47
--- /dev/null
+++ b/themes/openSUSE/help-install/ar/main::help.html
@@ -0,0 +1,25 @@
+<h3>
+<a name="help">استخدام نظام التعليمات</a>
+</h3>
+
+<p>
+The boot loader online help is context sensitive. It gives information
+about the selected menu item or, if you are editing boot options,
+it tries to look up information about the option in which the cursor is
+positioned.
+</p>
+
+<p>
+Navigation Keys
+<ul>
+ <li><em>سهم لأعلى</em>: highlight previous link</li>
+ <li><em>سهم لأسفل</em>: highlight next link</li>
+ <li><em>سهم لليسار</em>, <em>مسافة للخلف</em>: return to previous topic</li>
+ <li><em>سهم لليمين</em>, <em>مفتاح الإدخال</em>, <em>مسافة</em>: follow link</li>
+ <li><em>Page Up</em>: scroll up one page</li>
+ <li><em>Page Down</em>: scroll down one page</li>
+ <li><em>المنزل</em>: go to page start</li>
+ <li><em>End</em>: go to page end</li>
+ <li><em>خروج</em>: leave help</li>
+</ul>
+</p>
diff --git a/themes/openSUSE/help-install/ar/main::install_src.html b/themes/openSUSE/help-install/ar/main::install_src.html
new file mode 100644
index 0000000..c772b3b
--- /dev/null
+++ b/themes/openSUSE/help-install/ar/main::install_src.html
@@ -0,0 +1,12 @@
+<h3>
+<a name="install_src">مصدر التثبيت</a>
+</h3>
+
+<p>
+Press <em>@@@fkey_inst@@@</em> to choose an installation source.
+</p>
+
+<p>
+This is the same as using the <a href="#o_install">تثبيت</a>
+boot option.
+</p>
diff --git a/themes/openSUSE/help-install/ar/main::keytable.html b/themes/openSUSE/help-install/ar/main::keytable.html
new file mode 100644
index 0000000..dc7cfb3
--- /dev/null
+++ b/themes/openSUSE/help-install/ar/main::keytable.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="keytable">تحديد اللغة وتخطيط لوحة المفاتيح</a>
+</h3>
+
+<p>
+Press <em>@@@fkey_lang@@@</em> to change language and keyboard layout the boot loader uses.
+</p>
diff --git a/themes/openSUSE/help-install/ar/main::linux.html b/themes/openSUSE/help-install/ar/main::linux.html
new file mode 100644
index 0000000..a8029cc
--- /dev/null
+++ b/themes/openSUSE/help-install/ar/main::linux.html
@@ -0,0 +1,10 @@
+<h3>
+<a name="linux">التثبيت</a>
+</h3>
+
+<p>
+Select <em>التثبيت</em> to start the default installation. The
+<a href="#opt">خيارات التشغيل</a> entered are used in the
+start-up. This item activates many features of commonly available
+hardware.
+</p>
diff --git a/themes/openSUSE/help-install/ar/main::memtest.html b/themes/openSUSE/help-install/ar/main::memtest.html
new file mode 100644
index 0000000..ca00e3e
--- /dev/null
+++ b/themes/openSUSE/help-install/ar/main::memtest.html
@@ -0,0 +1,14 @@
+<h3>
+<a name="memtest">اختبار الذاكرة</a>
+</h3>
+
+<p>
+The included <em>اختبار الذاكرة</em> provides good possibilities to
+stress test the hardware of a system. Its main purpose is to detect
+broken RAM, but it also stresses many other parts of the system.
+</p>
+
+<p>
+There is no guarantee that the memory is good if no errors are
+found, although most of memory defects will be found.
+</p>
diff --git a/themes/openSUSE/help-install/ar/main::noacpi.html b/themes/openSUSE/help-install/ar/main::noacpi.html
new file mode 100644
index 0000000..79d2ca3
--- /dev/null
+++ b/themes/openSUSE/help-install/ar/main::noacpi.html
@@ -0,0 +1,24 @@
+<h3>
+<a name="noacpi">تثبيت--ACPI معطلة</a>
+</h3>
+
+<p>
+Current hardware usually requires ACPI (Advanced Configuration and Power Interface)
+to control the interrupt handling.
+ACPI completely replaces the old APM system.
+</p>
+
+<p>
+Select <em>تثبيت--ACPI معطلة</em> if you encounter
+problems during boot of the kernel. Known problems with machines that
+have problems with ACPI are:
+<ul>
+ <li>kernel freezes when booting</li>
+ <li>PCI Cards are not detected or initialized properly</li>
+</ul>
+</p>
+
+<p>
+You may also try the <a href="#firmware">اختبار البرنامج الثابت</a> boot option
+and look at the test results of the ACPI validation.
+</p>
diff --git a/themes/openSUSE/help-install/ar/main::nolapic.html b/themes/openSUSE/help-install/ar/main::nolapic.html
new file mode 100644
index 0000000..fbb95c7
--- /dev/null
+++ b/themes/openSUSE/help-install/ar/main::nolapic.html
@@ -0,0 +1,14 @@
+<h3>
+<a name="nolapic">تثبيت--APIC المحلي معطَّل</a>
+</h3>
+
+<p>
+Normally there are no problems with the APIC (Advanced Programmable Interrupt
+Controller). But if you seem to have some, try this option to boot
+without local APIC support.
+</p>
+
+<p>
+Please don't confuse this with <a href="#noacpi">ACPI</a>
+(Advanced Configuration and Power Interface).
+</p>
diff --git a/themes/openSUSE/help-install/ar/main::opt.html b/themes/openSUSE/help-install/ar/main::opt.html
new file mode 100644
index 0000000..cd924aa
--- /dev/null
+++ b/themes/openSUSE/help-install/ar/main::opt.html
@@ -0,0 +1,28 @@
+<h3>
+<a name="opt">خيارات التشغيل</a>
+</h3>
+
+<p>
+There are two types of boot options available. First, there are
+options that affect the installer. Second, there are kernel
+options. Some of the more common options are:
+</p>
+
+<p>
+a) installer options
+<ul>
+ <li><a href="#o_install">تثبيت</a> -- select an installation source</li>
+ <li><a href="#network">خيارات الشبكة</a> -- the network options</li>
+ <li><a href="#o_vnc">خيارات vnc</a> -- options for installation via VNC</li>
+</ul>
+</p>
+
+<p>
+b) kernel options
+<ul>
+ <li><a href="#o_splash">شاشة بداية التشغيل</a> -- influence the behavior of the splash screen</li>
+ <li><a href="#o_apm">apm</a> -- toggle power management</li>
+ <li><a href="#o_acpi">acpi</a> -- advanced configuration and power interface</li>
+ <li><a href="#o_ide">ide</a> -- control the IDE subsystem</li>
+</ul>
+</p>
diff --git a/themes/openSUSE/help-install/ar/main::opt::network.html b/themes/openSUSE/help-install/ar/main::opt::network.html
new file mode 100644
index 0000000..5764f05
--- /dev/null
+++ b/themes/openSUSE/help-install/ar/main::opt::network.html
@@ -0,0 +1,35 @@
+<a name="o_hostip"/>
+<a name="o_netmask"/>
+<a name="o_gateway"/>
+
+<h3>
+<a name="network">خيارات المثبِّت: خيارات الشبكة</a>
+</h3>
+
+<p>
+It is possible to configure the network interface right now. The
+hardware will be detected later by YaST2. The minimum set of options
+to configure your network card consists of host IP and netmask. For
+example:
+<ul>
+ <li>hostip=192.168.0.10 netmask=255.255.255.0</li>
+</ul>
+</p>
+
+<p>
+or in a shorter form:
+<ul>
+ <li>hostip=192.168.0.10/24</li>
+</ul>
+</p>
+
+<p>
+If you specified a <a href="#o_install">تثبيت مستند إلى الشبكة</a> and do
+not specify both of these options, the installer tries to configure
+the network interface with <em>dhcp</em>. If you need a default
+gateway, specify this with the option <em>البوابة</em>. For
+example:
+<ul>
+ <li>gateway=192.168.0.8</li>
+</ul>
+</p>
diff --git a/themes/openSUSE/help-install/ar/main::opt::o_acpi.html b/themes/openSUSE/help-install/ar/main::opt::o_acpi.html
new file mode 100644
index 0000000..d291a5d
--- /dev/null
+++ b/themes/openSUSE/help-install/ar/main::opt::o_acpi.html
@@ -0,0 +1,23 @@
+<h3>
+<a name="o_acpi">خيارات Kernel: acpi</a>
+</h3>
+
+<p>
+ACPI (Advanced Configuration and Power Interface) is a
+standard that defines power and configuration management interfaces
+between an operating system and the BIOS. By default, <em>acpi</em> is
+switched on when a BIOS is detected that is newer than from year
+2000. There are several commonly
+used parameters to control the behavior of ACPI:
+<ul>
+ <li><em>pci=noacpi</em> -- do not use ACPI to route PCI interrupts</li>
+ <li><em>acpi=oldboot</em> -- only the parts of ACPI that are relevant for booting remain activated</li>
+ <li><em>acpi=off</em> -- switch off ACPI completely</li>
+ <li><em>acpi=force</em> -- switch on ACPI even if your BIOS is dated before 2000</li>
+</ul>
+</p>
+
+<p>
+Especially on new computers, it replaces the old
+<a href="#o_apm">apm</a> system.
+</p>
diff --git a/themes/openSUSE/help-install/ar/main::opt::o_apm.html b/themes/openSUSE/help-install/ar/main::opt::o_apm.html
new file mode 100644
index 0000000..5fb2845
--- /dev/null
+++ b/themes/openSUSE/help-install/ar/main::opt::o_apm.html
@@ -0,0 +1,21 @@
+<h3>
+<a name="o_apm">خيارات Kernel: apm</a>
+</h3>
+
+<p>
+APM is one of the two power management strategies used on current
+computers. It is mainly used with laptops for functions like suspend
+to disk, but it may also be responsible for switching off the
+computer after power down. APM relies on a correct working BIOS. If
+the BIOS is broken, APM may have only limited use or even prevent the
+computer from working. Therefore, it may be switched off with the
+parameter
+<ul>
+ <li><em>apm=off</em> -- switch off APM completely</li>
+</ul>
+</p>
+
+<p>
+Some very new computers may take more advantage from the newer
+<a href="#o_acpi">ACPI</a>.
+</p>
diff --git a/themes/openSUSE/help-install/ar/main::opt::o_ide.html b/themes/openSUSE/help-install/ar/main::opt::o_ide.html
new file mode 100644
index 0000000..87cbe64
--- /dev/null
+++ b/themes/openSUSE/help-install/ar/main::opt::o_ide.html
@@ -0,0 +1,12 @@
+<h3>
+<a name="o_ide">خيارات Kernel: ide</a>
+</h3>
+
+<p>
+IDE is, unlike SCSI, commonly used in most desktop workstations.
+To circumvent some hardware problems that occur with IDE systems, use the
+kernel parameter:
+<ul>
+ <li><em>ide=nodma</em> -- switch off DMA for IDE drives</li>
+</ul>
+</p>
diff --git a/themes/openSUSE/help-install/ar/main::opt::o_install.html b/themes/openSUSE/help-install/ar/main::opt::o_install.html
new file mode 100644
index 0000000..8eda89d
--- /dev/null
+++ b/themes/openSUSE/help-install/ar/main::opt::o_install.html
@@ -0,0 +1,30 @@
+<h3>
+<a name="o_install">خيارات المثبِّت: تثبيت</a>
+</h3>
+
+<p>
+By default, the local CD-ROMs are searched for the installation source.
+For a network install, select the
+<em>تثبيت</em> option. Possible installation protocols are
+<ul>
+ <li>FTP</li>
+ <li>NFS</li>
+ <li>HTTP</li>
+</ul>
+</p>
+
+<p>
+The syntax to use is just like standard URLs. For example,
+if your server is found at 192.168.0.1 and you want to do an NFS-based
+install from the directory /install on this server, specify
+the source as follows:
+<ul>
+ <li>install=nfs://192.168.0.1/install</li>
+</ul>
+</p>
+
+<p>
+The network card will either be configured with <em>dhcp</em> or you
+must specify the parameters yourself as described in the
+<a href="#network">خيارات الشبكة</a>.
+</p>
diff --git a/themes/openSUSE/help-install/ar/main::opt::o_splash.html b/themes/openSUSE/help-install/ar/main::opt::o_splash.html
new file mode 100644
index 0000000..1a5b1a1
--- /dev/null
+++ b/themes/openSUSE/help-install/ar/main::opt::o_splash.html
@@ -0,0 +1,12 @@
+<h3>
+<a name="o_splash">خيارات Kernel: شاشة بداية التشغيل</a>
+</h3>
+
+<p>
+The splash screen is the picture shown during system start-up.
+<ul>
+ <li><em>splash=0</em> -- The splash screen is switched off. This may be useful with very old monitors or if some error occurs.</li>
+ <li><em>splash=verbose</em> -- Activates splash, kernel and boot messages are still shown.</li>
+ <li><em>splash=silent</em> -- Activates splash, but no messages. Instead a progress bar is drawn.</li>
+</ul>
+</p>
diff --git a/themes/openSUSE/help-install/ar/main::opt::o_vnc.html b/themes/openSUSE/help-install/ar/main::opt::o_vnc.html
new file mode 100644
index 0000000..a08e4ea
--- /dev/null
+++ b/themes/openSUSE/help-install/ar/main::opt::o_vnc.html
@@ -0,0 +1,18 @@
+<a name="o_vncpassword"/>
+
+<h3>
+<a name="o_vnc">خيارات المثبِّت: vnc</a>
+</h3>
+
+<p>
+To enable the VNC installation, specify the
+parameters vnc and vncpassword:
+<ul>
+ <li><em>vnc=1 vncpassword=example</em></li>
+</ul>
+</p>
+
+<p>
+The VNC server will be started and you may control YaST2 over any VNC
+client from a remote system.
+</p>
diff --git a/themes/openSUSE/help-install/ar/main::rescue.html b/themes/openSUSE/help-install/ar/main::rescue.html
new file mode 100644
index 0000000..0cb5bd3
--- /dev/null
+++ b/themes/openSUSE/help-install/ar/main::rescue.html
@@ -0,0 +1,10 @@
+<h3>
+<a name="rescue">نظام الإنقاذ</a>
+</h3>
+
+<p>
+The <em>نظام الإنقاذ</em> is a small RAM disk base system. From there,
+it is possible to make all kinds of changes to an installed system. Because
+only low-level tools are available in this system, it is intended for
+experts.
+</p>
diff --git a/themes/openSUSE/help-install/ar/main::videomode.html b/themes/openSUSE/help-install/ar/main::videomode.html
new file mode 100644
index 0000000..da5daf0
--- /dev/null
+++ b/themes/openSUSE/help-install/ar/main::videomode.html
@@ -0,0 +1,18 @@
+<h3>
+<a name="videomode">تحديد وضع الفيديو</a>
+</h3>
+
+<p>
+Press <em>@@@fkey_video@@@</em> to get the list of video modes your graphics card
+supports. The highest mode your monitor can display is preselected.
+</p>
+
+<p>
+It is possible that your monitor cannot be detected automatically. In that
+case, select your preferred mode manually.
+</p>
+
+<p>
+If your system has problems with the graphics card during the
+installation, the <em>وضع النص</em> may be a usable work-around.
+</p>
diff --git a/themes/openSUSE/help-install/ar/navi.html b/themes/openSUSE/help-install/ar/navi.html
new file mode 100644
index 0000000..dececad
--- /dev/null
+++ b/themes/openSUSE/help-install/ar/navi.html
@@ -0,0 +1 @@
+<p>الرجوع إلى <a href="#foobar">FOOBAR</a></p>
diff --git a/themes/openSUSE/help-install/ca/main.html b/themes/openSUSE/help-install/ca/main.html
new file mode 100644
index 0000000..28d4772
--- /dev/null
+++ b/themes/openSUSE/help-install/ca/main.html
@@ -0,0 +1,103 @@
+<h3>
+<a name="main">Ajuda del carregador de l'arrencada</a>
+</h3>
+
+<p>
+Welcome to <em>@@@product@@@</em>
+</p>
+
+<p>
+Use this menu to select the desired function. If you have
+problems navigating in this help system, press
+<em>@@@fkey_help@@@</em> to enter the <a href="#help">description</a> of the help
+system. The main functions in this menu are:
+</p>
+
+<p>
+<a href="#harddisk">Arrenca des del disc dur</a>: This selection will not do
+anything to the system. It only starts a previously installed
+operating system.
+</p>
+
+<p>
+<a href="#linux">Installation</a>:
+This installation mode works on most machines. If you experience a
+system freeze during boot or problems with detection of your hardware
+components, such as disk controllers or network cards, try one of the
+following installation options.
+</p>
+
+<p>
+<a href="#noacpi">Instal·lació -- ACPI inhabilitat</a>: Many of the
+currently-sold computers have incomplete or faulty ACPI
+implementations. This selection disables ACPI support in the
+kernel, but still enables many performance features, like DMA for IDE
+hard disks.
+</p>
+
+<p>
+<a href="#nolapic">Instal·lació -- APIC local inhabilitat</a>:
+If the normal installation fails, this might be due to the
+system hardware not supporting local APIC.
+If this seems to be the case, use this option to
+install without local APIC support.
+</p>
+
+<p>
+<a href="#failsafe">Instal·lació -- Paràmetres de seguretat</a>: If you were not
+successful with <em>Installation</em>, this selection might
+solve the issue.
+</p>
+
+<p>
+<a href="#rescue">Rescue System</a>: This boot image starts a small
+Linux system in RAM. This is useful if the system does not start properly.
+After booting this system, log in as root.
+</p>
+
+<p>
+<a href="#firmware">Prova de microprogramari</a>: Runs a BIOS test tool that validates
+ACPI and other parts of your BIOS.
+</p>
+
+<p>
+<a href="#memtest">Prova de memòria</a>: Memory testing is useful for more than
+checking installation of new memory modules. It is a stress test
+for a big part of your computer system and may indicate hardware
+problems.
+</p>
+
+<p>
+<a href="#opt">Opcions d'arrencada</a>: The boot options may change the
+behavior of your system completely. They are settings for
+the kernel.
+</p>
+
+<p>
+<a href="#help">@@@fkey_help@@@ Help</a>: This is context sensitive. It will
+show different screens depending on the active element of the
+boot screen. There is also a description of this help system
+available.
+</p>
+
+<p>
+<a href="#keytable">@@@fkey_lang@@@</a>: Set language and keyboard mapping
+used by the boot loader.
+</p>
+
+<p>
+<a href="#videomode">@@@fkey_video@@@ Video Mode</a>: Here, choose between
+different screen resolutions while installing. If you encounter
+problems with the graphical installation, the <em>mode de text</em> may
+be a work-around for you.
+</p>
+
+<p>
+<a href="#install_src">@@@fkey_inst@@@ Installation Source</a>: Choose the
+installation source.
+</p>
+
+<p>
+<a href="#driverupdate">@@@fkey_dud@@@ Driver Update</a>: For very new machines, a
+driver update may be needed to install the system.
+</p>
diff --git a/themes/openSUSE/help-install/ca/main::bits.html b/themes/openSUSE/help-install/ca/main::bits.html
new file mode 100644
index 0000000..99be01a
--- /dev/null
+++ b/themes/openSUSE/help-install/ca/main::bits.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="bits">Selecció del tipus de programari</a>
+</h3>
+
+<p>
+You have the choice to install the 32-bit or 64-bit version of @@@product@@@.
+</p>
diff --git a/themes/openSUSE/help-install/ca/main::driverupdate.html b/themes/openSUSE/help-install/ca/main::driverupdate.html
new file mode 100644
index 0000000..4a4bad9
--- /dev/null
+++ b/themes/openSUSE/help-install/ca/main::driverupdate.html
@@ -0,0 +1,14 @@
+<h3>
+<a name="driverupdate">Actualització de controladors</a>
+</h3>
+
+<p>
+If you need a driver update floppy or CD-ROM, press <em>@@@fkey_dud@@@</em>. The
+boot loader asks you to insert the driver update medium after
+loading the Linux kernel.
+</p>
+
+<p>
+A driver update is typically a floppy with new versions of hardware
+drivers or bug fixes needed during installation.
+</p>
diff --git a/themes/openSUSE/help-install/ca/main::failsafe.html b/themes/openSUSE/help-install/ca/main::failsafe.html
new file mode 100644
index 0000000..bd9d421
--- /dev/null
+++ b/themes/openSUSE/help-install/ca/main::failsafe.html
@@ -0,0 +1,11 @@
+<h3>
+<a name="failsafe">Instal·lació -- Paràmetres de seguretat</a>
+</h3>
+
+<p>
+Select <em>Instal·lació -- Paràmetres de seguretat</em> if you encounter hangs
+while installing or irreproducible errors. This option disables DMA
+for IDE drives and all power management features.
+See also the kernel options for <a href="#o_apm">apm</a>,
+<a href="#o_acpi">acpi</a> and <a href="#o_ide">ide</a>.
+</p>
diff --git a/themes/openSUSE/help-install/ca/main::firmware.html b/themes/openSUSE/help-install/ca/main::firmware.html
new file mode 100644
index 0000000..bcd07ce
--- /dev/null
+++ b/themes/openSUSE/help-install/ca/main::firmware.html
@@ -0,0 +1,9 @@
+<h3>
+<a name="firmware">Prova de microprogramari</a>
+</h3>
+
+<p>
+Starts a BIOS checker that validates the ACPI tables
+and many other parts of your BIOS.
+Test results can be stored on usb disk or saved via network.
+</p>
diff --git a/themes/openSUSE/help-install/ca/main::harddisk.html b/themes/openSUSE/help-install/ca/main::harddisk.html
new file mode 100644
index 0000000..6556e23
--- /dev/null
+++ b/themes/openSUSE/help-install/ca/main::harddisk.html
@@ -0,0 +1,16 @@
+<h3>
+<a name="harddisk">Arrenca des del disc dur</a>
+</h3>
+
+<p>
+Select <em>Arrenca el SO instal·lat</em> to start the system installed on
+your local hard disk. This system must be installed properly, because
+only the MBR (Master Boot Record) on the first hard disk is started.
+The device ID of the first hard disk is provided by the BIOS of
+the computer.
+</p>
+
+<p>
+Use this if you forgot to remove the CD or DVD from your
+drive and want to start the computer from the hard disk.
+</p>
diff --git a/themes/openSUSE/help-install/ca/main::help.html b/themes/openSUSE/help-install/ca/main::help.html
new file mode 100644
index 0000000..43e2baf
--- /dev/null
+++ b/themes/openSUSE/help-install/ca/main::help.html
@@ -0,0 +1,25 @@
+<h3>
+<a name="help">Ús del sistema d'ajuda</a>
+</h3>
+
+<p>
+The boot loader online help is context sensitive. It gives information
+about the selected menu item or, if you are editing boot options,
+it tries to look up information about the option in which the cursor is
+positioned.
+</p>
+
+<p>
+Navigation Keys
+<ul>
+ <li><em>Fletxa amunt</em>: highlight previous link</li>
+ <li><em>Fletxa avall</em>: highlight next link</li>
+ <li><em>Fletxa esquerra</em>, <em>Retrocés</em>: return to previous topic</li>
+ <li><em>Fletxa dreta</em>, <em>Enter</em>, <em>Espai</em>: follow link</li>
+ <li><em>Re Pàg</em>: scroll up one page</li>
+ <li><em>Av Pàg</em>: scroll down one page</li>
+ <li><em>Inici</em>: go to page start</li>
+ <li><em>Fi</em>: go to page end</li>
+ <li><em>Esc</em>: leave help</li>
+</ul>
+</p>
diff --git a/themes/openSUSE/help-install/ca/main::install_src.html b/themes/openSUSE/help-install/ca/main::install_src.html
new file mode 100644
index 0000000..6008f7d
--- /dev/null
+++ b/themes/openSUSE/help-install/ca/main::install_src.html
@@ -0,0 +1,12 @@
+<h3>
+<a name="install_src">Origen de la instal·lació</a>
+</h3>
+
+<p>
+Press <em>@@@fkey_inst@@@</em> to choose an installation source.
+</p>
+
+<p>
+This is the same as using the <a href="#o_install">install</a>
+boot option.
+</p>
diff --git a/themes/openSUSE/help-install/ca/main::keytable.html b/themes/openSUSE/help-install/ca/main::keytable.html
new file mode 100644
index 0000000..0d441df
--- /dev/null
+++ b/themes/openSUSE/help-install/ca/main::keytable.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="keytable">Selecció d'idioma i format de teclat</a>
+</h3>
+
+<p>
+Press <em>@@@fkey_lang@@@</em> to change language and keyboard layout the boot loader uses.
+</p>
diff --git a/themes/openSUSE/help-install/ca/main::linux.html b/themes/openSUSE/help-install/ca/main::linux.html
new file mode 100644
index 0000000..934a252
--- /dev/null
+++ b/themes/openSUSE/help-install/ca/main::linux.html
@@ -0,0 +1,10 @@
+<h3>
+<a name="linux">Installation</a>
+</h3>
+
+<p>
+Select <em>Installation</em> to start the default installation. The
+<a href="#opt">opcions d'arrencada</a> entered are used in the
+start-up. This item activates many features of commonly available
+hardware.
+</p>
diff --git a/themes/openSUSE/help-install/ca/main::memtest.html b/themes/openSUSE/help-install/ca/main::memtest.html
new file mode 100644
index 0000000..dba20a9
--- /dev/null
+++ b/themes/openSUSE/help-install/ca/main::memtest.html
@@ -0,0 +1,14 @@
+<h3>
+<a name="memtest">Prova de memòria</a>
+</h3>
+
+<p>
+The included <em>Prova de memòria</em> provides good possibilities to
+stress test the hardware of a system. Its main purpose is to detect
+broken RAM, but it also stresses many other parts of the system.
+</p>
+
+<p>
+There is no guarantee that the memory is good if no errors are
+found, although most of memory defects will be found.
+</p>
diff --git a/themes/openSUSE/help-install/ca/main::noacpi.html b/themes/openSUSE/help-install/ca/main::noacpi.html
new file mode 100644
index 0000000..a44b839
--- /dev/null
+++ b/themes/openSUSE/help-install/ca/main::noacpi.html
@@ -0,0 +1,24 @@
+<h3>
+<a name="noacpi">Instal·lació -- ACPI inhabilitat</a>
+</h3>
+
+<p>
+Current hardware usually requires ACPI (Advanced Configuration and Power Interface)
+to control the interrupt handling.
+ACPI completely replaces the old APM system.
+</p>
+
+<p>
+Select <em>Instal·lació -- ACPI inhabilitat</em> if you encounter
+problems during boot of the kernel. Known problems with machines that
+have problems with ACPI are:
+<ul>
+ <li>kernel freezes when booting</li>
+ <li>PCI Cards are not detected or initialized properly</li>
+</ul>
+</p>
+
+<p>
+You may also try the <a href="#firmware">Prova de microprogramari</a> boot option
+and look at the test results of the ACPI validation.
+</p>
diff --git a/themes/openSUSE/help-install/ca/main::nolapic.html b/themes/openSUSE/help-install/ca/main::nolapic.html
new file mode 100644
index 0000000..f901d15
--- /dev/null
+++ b/themes/openSUSE/help-install/ca/main::nolapic.html
@@ -0,0 +1,14 @@
+<h3>
+<a name="nolapic">Instal·lació -- APIC local inhabilitat</a>
+</h3>
+
+<p>
+Normally there are no problems with the APIC (Advanced Programmable Interrupt
+Controller). But if you seem to have some, try this option to boot
+without local APIC support.
+</p>
+
+<p>
+Please don't confuse this with <a href="#noacpi">ACPI</a>
+(Advanced Configuration and Power Interface).
+</p>
diff --git a/themes/openSUSE/help-install/ca/main::opt.html b/themes/openSUSE/help-install/ca/main::opt.html
new file mode 100644
index 0000000..b2567a3
--- /dev/null
+++ b/themes/openSUSE/help-install/ca/main::opt.html
@@ -0,0 +1,28 @@
+<h3>
+<a name="opt">Opcions d'arrencada</a>
+</h3>
+
+<p>
+There are two types of boot options available. First, there are
+options that affect the installer. Second, there are kernel
+options. Some of the more common options are:
+</p>
+
+<p>
+a) installer options
+<ul>
+ <li><a href="#o_install">install</a> -- select an installation source</li>
+ <li><a href="#network">opcions de xarxa</a> -- the network options</li>
+ <li><a href="#o_vnc">opcions del vnc</a> -- options for installation via VNC</li>
+</ul>
+</p>
+
+<p>
+b) kernel options
+<ul>
+ <li><a href="#o_splash">splash</a> -- influence the behavior of the splash screen</li>
+ <li><a href="#o_apm">apm</a> -- toggle power management</li>
+ <li><a href="#o_acpi">acpi</a> -- advanced configuration and power interface</li>
+ <li><a href="#o_ide">ide</a> -- control the IDE subsystem</li>
+</ul>
+</p>
diff --git a/themes/openSUSE/help-install/ca/main::opt::network.html b/themes/openSUSE/help-install/ca/main::opt::network.html
new file mode 100644
index 0000000..6fd869d
--- /dev/null
+++ b/themes/openSUSE/help-install/ca/main::opt::network.html
@@ -0,0 +1,35 @@
+<a name="o_hostip"/>
+<a name="o_netmask"/>
+<a name="o_gateway"/>
+
+<h3>
+<a name="network">Opcions de l'instal·lador: opcions de xarxa</a>
+</h3>
+
+<p>
+It is possible to configure the network interface right now. The
+hardware will be detected later by YaST2. The minimum set of options
+to configure your network card consists of host IP and netmask. For
+example:
+<ul>
+ <li>hostip=192.168.0.10 netmask=255.255.255.0</li>
+</ul>
+</p>
+
+<p>
+or in a shorter form:
+<ul>
+ <li>hostip=192.168.0.10/24</li>
+</ul>
+</p>
+
+<p>
+If you specified a <a href="#o_install">instal·lació basada en la xarxa</a> and do
+not specify both of these options, the installer tries to configure
+the network interface with <em>dhcp</em>. If you need a default
+gateway, specify this with the option <em>passarel·la</em>. For
+example:
+<ul>
+ <li>gateway=192.168.0.8</li>
+</ul>
+</p>
diff --git a/themes/openSUSE/help-install/ca/main::opt::o_acpi.html b/themes/openSUSE/help-install/ca/main::opt::o_acpi.html
new file mode 100644
index 0000000..da7d00a
--- /dev/null
+++ b/themes/openSUSE/help-install/ca/main::opt::o_acpi.html
@@ -0,0 +1,23 @@
+<h3>
+<a name="o_acpi">Opcions del nucli: acpi</a>
+</h3>
+
+<p>
+ACPI (Advanced Configuration and Power Interface) is a
+standard that defines power and configuration management interfaces
+between an operating system and the BIOS. By default, <em>acpi</em> is
+switched on when a BIOS is detected that is newer than from year
+2000. There are several commonly
+used parameters to control the behavior of ACPI:
+<ul>
+ <li><em>pci=noacpi</em> -- do not use ACPI to route PCI interrupts</li>
+ <li><em>acpi=oldboot</em> -- only the parts of ACPI that are relevant for booting remain activated</li>
+ <li><em>uacpi=off</em> -- switch off ACPI completely</li>
+ <li><em>acpi=force</em> -- switch on ACPI even if your BIOS is dated before 2000</li>
+</ul>
+</p>
+
+<p>
+Especially on new computers, it replaces the old
+<a href="#o_apm">apm</a> system.
+</p>
diff --git a/themes/openSUSE/help-install/ca/main::opt::o_apm.html b/themes/openSUSE/help-install/ca/main::opt::o_apm.html
new file mode 100644
index 0000000..38b902b
--- /dev/null
+++ b/themes/openSUSE/help-install/ca/main::opt::o_apm.html
@@ -0,0 +1,21 @@
+<h3>
+<a name="o_apm">Opcions del nucli: apm</a>
+</h3>
+
+<p>
+APM is one of the two power management strategies used on current
+computers. It is mainly used with laptops for functions like suspend
+to disk, but it may also be responsible for switching off the
+computer after power down. APM relies on a correct working BIOS. If
+the BIOS is broken, APM may have only limited use or even prevent the
+computer from working. Therefore, it may be switched off with the
+parameter
+<ul>
+ <li><em>apm=off</em> -- switch off APM completely</li>
+</ul>
+</p>
+
+<p>
+Some very new computers may take more advantage from the newer
+<a href="#o_acpi">ACPI</a>.
+</p>
diff --git a/themes/openSUSE/help-install/ca/main::opt::o_ide.html b/themes/openSUSE/help-install/ca/main::opt::o_ide.html
new file mode 100644
index 0000000..e1d0bfd
--- /dev/null
+++ b/themes/openSUSE/help-install/ca/main::opt::o_ide.html
@@ -0,0 +1,12 @@
+<h3>
+<a name="o_ide">Opcions del nucli: ide</a>
+</h3>
+
+<p>
+IDE is, unlike SCSI, commonly used in most desktop workstations.
+To circumvent some hardware problems that occur with IDE systems, use the
+kernel parameter:
+<ul>
+ <li><em>ide=nodma</em> -- switch off DMA for IDE drives</li>
+</ul>
+</p>
diff --git a/themes/openSUSE/help-install/ca/main::opt::o_install.html b/themes/openSUSE/help-install/ca/main::opt::o_install.html
new file mode 100644
index 0000000..c527b4d
--- /dev/null
+++ b/themes/openSUSE/help-install/ca/main::opt::o_install.html
@@ -0,0 +1,30 @@
+<h3>
+<a name="o_install">Opcions de l'instal·lador: instal·la</a>
+</h3>
+
+<p>
+By default, the local CD-ROMs are searched for the installation source.
+For a network install, select the
+<em>install</em> option. Possible installation protocols are
+<ul>
+ <li>FTP</li>
+ <li>NFS</li>
+ <li>HTTP</li>
+</ul>
+</p>
+
+<p>
+The syntax to use is just like standard URLs. For example,
+if your server is found at 192.168.0.1 and you want to do an NFS-based
+install from the directory /install on this server, specify
+the source as follows:
+<ul>
+ <li>install=nfs://192.168.0.1/install</li>
+</ul>
+</p>
+
+<p>
+The network card will either be configured with <em>dhcp</em> or you
+must specify the parameters yourself as described in the
+<a href="#network">opcions de xarxa</a>.
+</p>
diff --git a/themes/openSUSE/help-install/ca/main::opt::o_splash.html b/themes/openSUSE/help-install/ca/main::opt::o_splash.html
new file mode 100644
index 0000000..c671f3e
--- /dev/null
+++ b/themes/openSUSE/help-install/ca/main::opt::o_splash.html
@@ -0,0 +1,12 @@
+<h3>
+<a name="o_splash">Opcions del nucli: pantalla de presentació</a>
+</h3>
+
+<p>
+The splash screen is the picture shown during system start-up.
+<ul>
+ <li><em>splash=0</em> -- The splash screen is switched off. This may be useful with very old monitors or if some error occurs.</li>
+ <li><em>splash=verbose</em> -- Activates splash, kernel and boot messages are still shown.</li>
+ <li><em>splash=silent</em> -- Activates splash, but no messages. Instead a progress bar is drawn.</li>
+</ul>
+</p>
diff --git a/themes/openSUSE/help-install/ca/main::opt::o_vnc.html b/themes/openSUSE/help-install/ca/main::opt::o_vnc.html
new file mode 100644
index 0000000..4103452
--- /dev/null
+++ b/themes/openSUSE/help-install/ca/main::opt::o_vnc.html
@@ -0,0 +1,18 @@
+<a name="o_vncpassword"/>
+
+<h3>
+<a name="o_vnc">Opcions de l'instal·lador: vnc</a>
+</h3>
+
+<p>
+To enable the VNC installation, specify the
+parameters vnc and vncpassword:
+<ul>
+ <li><em>vnc=1 vncpassword=example</em></li>
+</ul>
+</p>
+
+<p>
+The VNC server will be started and you may control YaST2 over any VNC
+client from a remote system.
+</p>
diff --git a/themes/openSUSE/help-install/ca/main::rescue.html b/themes/openSUSE/help-install/ca/main::rescue.html
new file mode 100644
index 0000000..cdd8362
--- /dev/null
+++ b/themes/openSUSE/help-install/ca/main::rescue.html
@@ -0,0 +1,10 @@
+<h3>
+<a name="rescue">Rescue System</a>
+</h3>
+
+<p>
+The <em>Rescue System</em> is a small RAM disk base system. From there,
+it is possible to make all kinds of changes to an installed system. Because
+only low-level tools are available in this system, it is intended for
+experts.
+</p>
diff --git a/themes/openSUSE/help-install/ca/main::videomode.html b/themes/openSUSE/help-install/ca/main::videomode.html
new file mode 100644
index 0000000..a3ea64b
--- /dev/null
+++ b/themes/openSUSE/help-install/ca/main::videomode.html
@@ -0,0 +1,18 @@
+<h3>
+<a name="videomode">Selecció del mode de vídeo</a>
+</h3>
+
+<p>
+Press <em>@@@fkey_video@@@</em> to get the list of video modes your graphics card
+supports. The highest mode your monitor can display is preselected.
+</p>
+
+<p>
+It is possible that your monitor cannot be detected automatically. In that
+case, select your preferred mode manually.
+</p>
+
+<p>
+If your system has problems with the graphics card during the
+installation, the <em>mode de text</em> may be a usable work-around.
+</p>
diff --git a/themes/openSUSE/help-install/ca/navi.html b/themes/openSUSE/help-install/ca/navi.html
new file mode 100644
index 0000000..33f2935
--- /dev/null
+++ b/themes/openSUSE/help-install/ca/navi.html
@@ -0,0 +1 @@
+<p>Torna a <a href="#foobar">FOOBAR</a></p>
diff --git a/themes/openSUSE/help-install/cs/main.html b/themes/openSUSE/help-install/cs/main.html
new file mode 100644
index 0000000..14f4faf
--- /dev/null
+++ b/themes/openSUSE/help-install/cs/main.html
@@ -0,0 +1,35 @@
+<h3>
+<a name="main">Nápověda zavaděče</a>
+</h3>
+
+<p>Vítejte v <em>@@@product@@@</em></p>
+
+<p>Z této nabídky zvolte požadovanou funkci. Máte-li problémy s orientací v této nápovědě, stiskněte <em>@@@fkey_help@@@</em> pro vstup do <a href="#help">popis</a> systému nápovědy. Hlavní funkce v této nabídce jsou:</p>
+
+<p><a href="#harddisk">Spustit z disku</a>: Tato volba systém nijak neovlivní. Pouze spustí dříve nainstalovaný systém.</p>
+
+<p><a href="#linux">Instalace</a>:Tento instalační režim je vhodný pro naprostou většinu počítačů. Pokud při instalaci dojde k zatuhnutí nebo špatné detekci některých zařízení, například diskových řadičů či síťových karet, vyzkoušejte některou z dalších voleb.</p>
+
+<p><a href="#noacpi">Instalace -- bez ACPI</a>: Mnoho v současnosti prodávaných počítačů stále ještě neobsahuje kompletní implementaci ACPI nebo je tato implementace vadná. Tímto výběrem zakážete podporu ACPI v jádře, ale stále budete mít k dispozici řadu dalších funkcí jako například DMA pro IDE zařízení.</p>
+
+<p><a href="#nolapic">Instalace -- bez local APIC</a>: Selhání normální instalace může být způsobeno tím, že systémový hardware nepodporuje lokální APIC. Pokud se zdá, že nastal tento případ, použijte tuto volbu pro instalaci bez podpory lokálního APIC.</p>
+
+<p><a href="#failsafe">Instalace -- bezpečné nastavení</a>: Pokud jste nebyli s <em>Instalace</em> úspěšní, může vám tato sekce pomoci vyřešit problém.</p>
+
+<p><a href="#rescue">Záchranný systém</a>: Tento obraz spouští malý linuxový systém v RAM. Je užitečný, pokud systém správně nestartuje. Po spuštění tohoto systému se přihlaste jako root.</p>
+
+<p><a href="#firmware">Test firmwaru</a>: Spouští nástroj pro validaci ACPI a dalších částí BIOSu vašeho počítače.</p>
+
+<p><a href="#memtest">Test paměti</a>: Testování paměti je užitečné nejen při instalaci nových paměťových modulů. Je to zátěžový test velké části systému a může pomoci odhalit hardwarové problémy.</p>
+
+<p><a href="#opt">Parametry startu</a>: Volby spouštění mohou zcela změnit chování vašeho systému. Jsou to parametry jádra.</p>
+
+<p><a href="#help">@@@fkey_help@@@ Nápověda</a>: Toto je kontextově závislé. Obrazovky se budou lišit v závislosti na aktivním prvku spouštěcí obrazovky. Tento systém nápovědy má k dispozici i popis svých funkcí.</p>
+
+<p><a href="#keytable">@@@fkey_lang@@@</a>: Nastavte jazyk a rozložení klávesnice používané zavaděčem.</p>
+
+<p><a href="#videomode">@@@fkey_video@@@ Video Mode</a>: Zde si vyberte rozlišení obrazovky pro instalaci. Při problémech s grafickou instalací můžete jako řešení použít <em>textový režim</em>.</p>
+
+<p><a href="#install_src">@@@fkey_inst@@@ Instalační zdroj</a>: Vyberte instalační zdroj.</p>
+
+<p><a href="#driverupdate">@@@fkey_dud@@@Aktualizace ovladače</a>: U velmi nových počítačů je pro instalaci systému potřeba aktualizace ovladače.</p>
diff --git a/themes/openSUSE/help-install/cs/main::bits.html b/themes/openSUSE/help-install/cs/main::bits.html
new file mode 100644
index 0000000..1e72400
--- /dev/null
+++ b/themes/openSUSE/help-install/cs/main::bits.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="bits">Výběr softwaru</a>
+</h3>
+
+<p>Můžete zvolit mezi instalací 32bitové či 64bitové verze @@@product@@@.</p>
diff --git a/themes/openSUSE/help-install/cs/main::driverupdate.html b/themes/openSUSE/help-install/cs/main::driverupdate.html
new file mode 100644
index 0000000..6678f4a
--- /dev/null
+++ b/themes/openSUSE/help-install/cs/main::driverupdate.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="driverupdate">Aktualizace ovladače</a>
+</h3>
+
+<p>Pokud potřebujete disketu nebo CD s aktualizací ovladačů, stiskněte <em>@@@fkey_dud@@@</em>. Zavaděč vás požádá o médium s aktualizacemi ovladačů po zavedení linuxového jádra.</p>
+
+<p>Aktualizace ovladačů je typicky disketa s novými verzemi hardwarových ovladačů nebo opravami chyb potřebnými během instalace.</p>
diff --git a/themes/openSUSE/help-install/cs/main::failsafe.html b/themes/openSUSE/help-install/cs/main::failsafe.html
new file mode 100644
index 0000000..c5e3d6e
--- /dev/null
+++ b/themes/openSUSE/help-install/cs/main::failsafe.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="failsafe">Instalace -- bezpečné nastavení</a>
+</h3>
+
+<p>Zvolte <em>Instalace -- bezpečné nastavení</em>, pokud během instalace narazíte na zatuhnutí systému nebo na nereprodukovatelné chyby. Tato volba zakáže DMA pro IDE jednotky a veškeré funkce správy napájení. Viz také parametry jádra pro <a href="#o_apm">apm</a>, <a href="#o_acpi">acpi</a> a <a href="#o_ide">ide</a>.</p>
diff --git a/themes/openSUSE/help-install/cs/main::firmware.html b/themes/openSUSE/help-install/cs/main::firmware.html
new file mode 100644
index 0000000..e82bcf9
--- /dev/null
+++ b/themes/openSUSE/help-install/cs/main::firmware.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="firmware">Test firmwaru</a>
+</h3>
+
+<p>Spouští kontrolu BIOSu validující tabulky ACPI a další součásti vašeho BIOSu. Výsledky testu lze uložit na USB disk nebo po síti.</p>
diff --git a/themes/openSUSE/help-install/cs/main::harddisk.html b/themes/openSUSE/help-install/cs/main::harddisk.html
new file mode 100644
index 0000000..b9c683a
--- /dev/null
+++ b/themes/openSUSE/help-install/cs/main::harddisk.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="harddisk">Spustit z disku</a>
+</h3>
+
+<p>Zvolte <em>Spustit nainstalovaný systém</em> pro spuštění systému nainstalovaného na lokálním disku. Systém, musí být správně nainstalován , protože je spouštěn pouze MBR na prvním disku. ID zařízení tohoto disku je poskytován BIOSem počítače.</p>
+
+<p>Toto použijte, pokud zapomenete CD nebo DVD v mechanice a chcete počítač spustit z pevného disku.</p>
diff --git a/themes/openSUSE/help-install/cs/main::help.html b/themes/openSUSE/help-install/cs/main::help.html
new file mode 100644
index 0000000..3545a85
--- /dev/null
+++ b/themes/openSUSE/help-install/cs/main::help.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="help">Použití systému nápovědy</a>
+</h3>
+
+<p>Nápověda zavaděče je závislá na obsahu. Poskytuje informace o zvolené nabídce nebo pokud editujete parametry jádra, snaží se poskytnout informace o volbě podle polohy kurzoru.</p>
+
+<p>Navigační klávesy <ul><li><em>Šipka nahoru</em>: zvýraznit předchozí odkaz</li><li><em>Šipka dolů</em>: zvýraznit následující odkaz</li><li><em>Šipka vlevo</em>, <em>Backspace</em>: návrat k předchozímu tématu</li><li><em>Šipka vpravo</em>, <em>Enter</em>, <em>Mezerník</em>: následovat odkaz</li><li><em>Page Up</em>: o stránku nahoru</li><li><em>Page Down</em>: o stránku dolů</li><li><em>Home</em>: přejít na začátek stránky</li><li><em>End</em>: přejít na konec stránky</li><li><em>Esc</em>: opustit nápovědu</li></ul></p>
diff --git a/themes/openSUSE/help-install/cs/main::install_src.html b/themes/openSUSE/help-install/cs/main::install_src.html
new file mode 100644
index 0000000..69d8d26
--- /dev/null
+++ b/themes/openSUSE/help-install/cs/main::install_src.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="install_src">Instalační zdroj</a>
+</h3>
+
+<p>Zmáčkněte <em>@@@fkey_inst@@@</em> pro výběr instalačního zdroje.</p>
+
+<p>Totéž jako použití spouštěcího parametru<a href="#o_install">instalovat</a>.</p>
diff --git a/themes/openSUSE/help-install/cs/main::keytable.html b/themes/openSUSE/help-install/cs/main::keytable.html
new file mode 100644
index 0000000..fe654c5
--- /dev/null
+++ b/themes/openSUSE/help-install/cs/main::keytable.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="keytable">Výběr jazyka a rozložení klávesnice</a>
+</h3>
+
+<p>Stiskněte <em>@@@fkey_lang@@@</em> pro změnu jazyka a rozložení klávesnice, které bude zavaděč používat.</p>
diff --git a/themes/openSUSE/help-install/cs/main::linux.html b/themes/openSUSE/help-install/cs/main::linux.html
new file mode 100644
index 0000000..2820c10
--- /dev/null
+++ b/themes/openSUSE/help-install/cs/main::linux.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="linux">Instalace</a>
+</h3>
+
+<p>Zvolte <em>Instalace</em> pro zahájení implicitní instalace. Zadané <a href="#opt">parametry startu</a> jsou použity během spouštění. Tato položka aktivuje mnoho vlastností běžného hardwaru.</p>
diff --git a/themes/openSUSE/help-install/cs/main::memtest.html b/themes/openSUSE/help-install/cs/main::memtest.html
new file mode 100644
index 0000000..d51102a
--- /dev/null
+++ b/themes/openSUSE/help-install/cs/main::memtest.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="memtest">Test paměti</a>
+</h3>
+
+<p><em>Test paměti</em> umožňuje provést zátěžový test hardware systému. Testuje hlavně operační paměť, ale i jiné součásti systému.</p>
+
+<p>Nejsou-li nalezeny chyby, není žádná záruka, že je paměť v pořádku. Většina chyb však bývá nalezena.</p>
diff --git a/themes/openSUSE/help-install/cs/main::noacpi.html b/themes/openSUSE/help-install/cs/main::noacpi.html
new file mode 100644
index 0000000..566157f
--- /dev/null
+++ b/themes/openSUSE/help-install/cs/main::noacpi.html
@@ -0,0 +1,9 @@
+<h3>
+<a name="noacpi">Instalace -- bez ACPI</a>
+</h3>
+
+<p>Současný hardware obvykle vyžaduje ACPI (Advanced Configuration and Power Interface) pro kontrolu přerušení. ACPI zcela nahrazuje starý APM systém.</p>
+
+<p>Pokud při startu jádra narazíte na problémy, zvolte <em>Instalace -- bez ACPI</em>. Známe problémy strojů s problematickým ACPI jsou: <ul><li>jádro zatuhne během startu</li><li>* PCI karty nejsou správně detekovány nebo inicializovány</li></ul></p>
+
+<p>Můžete rovněž vyzkoušet volbu spouštění <a href="#firmware">Test firmwaru</a> a prohlédnout si výsledky validace ACPI.</p>
diff --git a/themes/openSUSE/help-install/cs/main::nolapic.html b/themes/openSUSE/help-install/cs/main::nolapic.html
new file mode 100644
index 0000000..ee1b162
--- /dev/null
+++ b/themes/openSUSE/help-install/cs/main::nolapic.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="nolapic">Instalace -- bez local APIC</a>
+</h3>
+
+<p>Za běžných okolností nejsou s APIC (Advanced Programmable Interrupt Controller) žádné problémy. Pokud ale problémy máte, zkuste tuto volbu pro spouštění systému bez podpory lokálního APIC.</p>
+
+<p>Nezaměňujte prosím s <a href="#noacpi">ACPI</a> (Advanced Configuration and Power Interface).</p>
diff --git a/themes/openSUSE/help-install/cs/main::opt.html b/themes/openSUSE/help-install/cs/main::opt.html
new file mode 100644
index 0000000..284fde6
--- /dev/null
+++ b/themes/openSUSE/help-install/cs/main::opt.html
@@ -0,0 +1,9 @@
+<h3>
+<a name="opt">Parametry startu</a>
+</h3>
+
+<p>Jsou dva typy spouštěcích voleb. Zaprvé jsou to parametry ovlivňující instalátor. Zadruhé jsou to parametry jádra, Mezi běžné parametry patří:</p>
+
+<p>a) volby instalátoru <ul><li><a href="#o_install">instalovat</a> -- výběr instalačního zdroje</li><li><a href="#network">nastavení sítě</a> -- volby sítě</li><li><a href="#o_vnc">nastavení vnc</a> -- parametry pro instalaci přes VNC</li></ul></p>
+
+<p>a) volby jádra <ul><li><a href="#o_splash">splash</a> -- ovlivňuje chování úvodní obrazovky</li><li><a href="#o_apm">apm</a> -- zapnout správu napájení</li><li><a href="#o_acpi">acpi</a> -- advanced configuration and power interface (ACPI)</li><li><a href="#o_ide">ide</a> -- ovládá subsystém IDE</li></ul></p>
diff --git a/themes/openSUSE/help-install/cs/main::opt::network.html b/themes/openSUSE/help-install/cs/main::opt::network.html
new file mode 100644
index 0000000..821578e
--- /dev/null
+++ b/themes/openSUSE/help-install/cs/main::opt::network.html
@@ -0,0 +1,13 @@
+<a name="o_hostip"/>
+<a name="o_netmask"/>
+<a name="o_gateway"/>
+
+<h3>
+<a name="network">Parametry instalátoru: síťové nastavení</a>
+</h3>
+
+<p>Nyní je možné nastavit síťové rozhraní. Hardware bude detekován později pomocí programu YaST2. Minimální nastavení se skládá z IP počítače a masky sítě. Například: <ul><li>hostip=192.168.0.10 netmask=255.255.255.0</li></ul></p>
+
+<p>nebo v kratší formě: <ul><li>hostip=192.168.0.10/24</li></ul></p>
+
+<p>Pokud jste zadali <a href="#o_install">síťová instalace</a> a nezadáte obě tyto volby, pokusí se instalátor nastavit síť pomocí <em>dhcp</em>. Potřebujete-li výchozí bránu, zadejte ji parametrem <em>gateway</em>. Například: <ul><li>gateway=192.168.0.8</li></ul></p>
diff --git a/themes/openSUSE/help-install/cs/main::opt::o_acpi.html b/themes/openSUSE/help-install/cs/main::opt::o_acpi.html
new file mode 100644
index 0000000..d59cf14
--- /dev/null
+++ b/themes/openSUSE/help-install/cs/main::opt::o_acpi.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="o_acpi">Parametry jádra: acpi</a>
+</h3>
+
+<p>ACPI (Advanced Configuration and Power Interface) je standard definující nastavení napájení a správu zařízení mezi operačním systémem a BIOSem. Ve výchozím nastavení je <em>acpi</em> zapnuto v případě, že jde o BIOS vydaný po roce 2000. Je k dispozici několik parametrů používaných ke kontrole chování ACPI: <ul><li><em>pci=noacpi</em> -- nepoužívat ACPI pro předávání PCI přerušení</li><li><em>acpi=oldboot</em> -- aktivní zůstane pouze ta část ACPI, která je potřebná pro start systému</li><li><em>acpi=off</em> -- zcela vypnout ACPI</li><li><em>acpi=force</em> -- zapnout ACPI i pro BIOS vydaný před rokem 2000</li></ul></p>
+
+<p>Zvláště na nových počítačích nahrazuje starší systém <a href="#o_apm">apm</a>.</p>
diff --git a/themes/openSUSE/help-install/cs/main::opt::o_apm.html b/themes/openSUSE/help-install/cs/main::opt::o_apm.html
new file mode 100644
index 0000000..aa6a406
--- /dev/null
+++ b/themes/openSUSE/help-install/cs/main::opt::o_apm.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="o_apm">Parametry jádra: apm</a>
+</h3>
+
+<p>APM je jednou ze dvou dnešních strategií správy napájení. Používá se hlavně na noteboocích pro uspávání disků a podobně, může však zodpovídat i za vypínání počítače. APM je závislé na správně fungujícím BIOSu. Je-li BIOS nefunkční, mohou být funkce APM omezeny nebo může APM znemožnit funkci počítače. Lze proto vypnout parametrem <ul><li><em>apm=off</em> -- zcela vypnout APM</li></ul></p>
+
+<p>Některé nové počítače mohou s výhodou použít novější <a href="#o_acpi">ACPI</a>.</p>
diff --git a/themes/openSUSE/help-install/cs/main::opt::o_ide.html b/themes/openSUSE/help-install/cs/main::opt::o_ide.html
new file mode 100644
index 0000000..bbf4cb4
--- /dev/null
+++ b/themes/openSUSE/help-install/cs/main::opt::o_ide.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="o_ide">Parametry jádra: ide</a>
+</h3>
+
+<p>IDE je na rozdíl od SCSI obvykle používáno na pracovních stanicích. V případě výskytu problémů s IDE systémem můžete použít parametr: <ul><li><em>ide=nodma</em> -- vypnout DMA pro IDE jednotky</li></ul></p>
diff --git a/themes/openSUSE/help-install/cs/main::opt::o_install.html b/themes/openSUSE/help-install/cs/main::opt::o_install.html
new file mode 100644
index 0000000..4ae1718
--- /dev/null
+++ b/themes/openSUSE/help-install/cs/main::opt::o_install.html
@@ -0,0 +1,9 @@
+<h3>
+<a name="o_install">Parametry instalátoru: install</a>
+</h3>
+
+<p>Ve výchozím nastavení se instalační zdroj hledá v lokálních CD mechanikách. Pro síťovou instalaci zvolte <em>instalovat</em>. Možné instalační protokoly jsou <ul><li>FTP</li><li>NFS</li><li>HTTP</li></ul></p>
+
+<p>Syntaxe je jako u běžných URL. Pokud je například váš systém na adrese 192.168.0.1 a chcete provést NFS instalaci z adresáře /install na tomto serveru, zadejte zdroj takto: <ul><li>install=nfs://192.168.0.1/install</li></ul></p>
+
+<p>Síťová karta bude nastavena buď pomocí <em>dhcp</em> nebo musíte zadat parametry sami, jak je popsáno v <a href="#network">nastavení sítě</a>.</p>
diff --git a/themes/openSUSE/help-install/cs/main::opt::o_splash.html b/themes/openSUSE/help-install/cs/main::opt::o_splash.html
new file mode 100644
index 0000000..6727ee3
--- /dev/null
+++ b/themes/openSUSE/help-install/cs/main::opt::o_splash.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="o_splash">Parametry jádra: splash</a>
+</h3>
+
+<p>Splash screen je obrázek zobrazený během startu systému. <ul><li><em>splash=0 </em> -- Splash obrazovka je vypnuta. To může být vhodné pro staré monitory nebo při chybě.</li><li><em>splash=verbose</em> -- Aktivuje splash obrazovku, zprávy jádra a spouštění jsou stále zobrazeny.</li><li><em>splash=silent</em> -- Aktivuje splash obrazovku, ale žádné zprávy. Místo toho je zobrazen ukazatel průběhu.</li></ul></p>
diff --git a/themes/openSUSE/help-install/cs/main::opt::o_vnc.html b/themes/openSUSE/help-install/cs/main::opt::o_vnc.html
new file mode 100644
index 0000000..95c60b9
--- /dev/null
+++ b/themes/openSUSE/help-install/cs/main::opt::o_vnc.html
@@ -0,0 +1,9 @@
+<a name="o_vncpassword"/>
+
+<h3>
+<a name="o_vnc">Parametry instalátoru: vnc</a>
+</h3>
+
+<p>Pro umožnění VNC instalace zadejte parametry vnc a vncpassword: <ul><li><em>vnc=1 vncpassword=example</em></li></ul></p>
+
+<p>Bude spuštěn VNC server; YaST2 můžete ovládat ze vzdáleného systému pomocí VNC klienta.</p>
diff --git a/themes/openSUSE/help-install/cs/main::rescue.html b/themes/openSUSE/help-install/cs/main::rescue.html
new file mode 100644
index 0000000..a04d7e9
--- /dev/null
+++ b/themes/openSUSE/help-install/cs/main::rescue.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="rescue">Záchranný systém</a>
+</h3>
+
+<p><em>Záchranný systém</em> je malý systém na RAM disku. Z něj je možno provádět všechny druhy změn instalovaného systému. Protože však obsahuje pouze nízkoúrovňové nástroje, je určen pro experty.</p>
diff --git a/themes/openSUSE/help-install/cs/main::videomode.html b/themes/openSUSE/help-install/cs/main::videomode.html
new file mode 100644
index 0000000..d466900
--- /dev/null
+++ b/themes/openSUSE/help-install/cs/main::videomode.html
@@ -0,0 +1,9 @@
+<h3>
+<a name="videomode">Výběr video režimu</a>
+</h3>
+
+<p>Stiskněte <em>@@@fkey_video@@@</em> pro získání seznamu video režimů podporovaných vaší grafickou kartou. Přednastaven je nejvyšší podporovaný režim.</p>
+
+<p>Je možné, že váš monitor nelze automaticky detekovat. V takovém případě zvolte svůj preferovaný režim ručně.</p>
+
+<p>Pokud má váš systém během instalace problé=my s grafickou kartou, může být <em>textový režim</em> použitelným řešením.</p>
diff --git a/themes/openSUSE/help-install/cs/navi.html b/themes/openSUSE/help-install/cs/navi.html
new file mode 100644
index 0000000..c6551da
--- /dev/null
+++ b/themes/openSUSE/help-install/cs/navi.html
@@ -0,0 +1 @@
+<p>Návrat k <a href="#foobar">FOOBAR</a></p>
diff --git a/themes/openSUSE/help-install/da/main.html b/themes/openSUSE/help-install/da/main.html
new file mode 100644
index 0000000..84bd51d
--- /dev/null
+++ b/themes/openSUSE/help-install/da/main.html
@@ -0,0 +1,35 @@
+<h3>
+<a name="main">Hjælp til bootloader</a>
+</h3>
+
+<p>Velkommen til <em>@@@product@@@</em></p>
+
+<p>Brug denne menu til at vælge den ønskede funktion. Hvis du har problemer med at navigere i dette hjælpesystem så tryk <em>@@@fkey_help@@@</em> for at få <a href="#help">beskrivelse</a> om hjælpesystemet. De væsentligste funktioner i denne menu er:</p>
+
+<p><a href="#harddisk">Boot fra harddisk</a>: Dette udvalg vil ikke ændre noget på systemet. Det starter bare det allerede installerede operativsystem.</p>
+
+<p><a href="#linux">Installation</a>: Denne installationstilstand virker på de fleste maskiner. Hvis du oplever at systemet fryser ved boot, eller problemer med genkendelsen af din hardwarekomponenter, f.eks. harddisk-controllere eller netværkskort, kan du prøve en af følgende installationsmuligheder.</p>
+
+<p><a href="#noacpi">Installation -- ACPI deaktiveret</a>: Mange af de computere der sælges for tiden, har ufuldstændige eller fejlbehæftede implementationer af ACPI. Dette valg deaktiverer ACPI-understøttelse i kernen, men mange ydelsesfunktioner såsom DMA for IDE-harddiske forbliver aktiverede.</p>
+
+<p><a href="#nolapic">Installation -- Lokal APIC deaktiveret</a>: Hvis den normale installation fejler, kan det skyldes at hardwaren ikke understøtter lokal APIC. Hvis dette lader til at være tilfældet, så anvend dette tilvalg for at installere uden understøttelse for lokal APIC.</p>
+
+<p><a href="#failsafe">Installation -- fejlsikret tilstand</a>: Hvis du ikke havde held med <em>Installation</em>, kan det være at dette valg vil løse problemet.</p>
+
+<p><a href="#rescue">Redningssystem</a>: Denne bootimagefil starter et lille Linuxsystem i RAM. Dette er nyttigt, hvis systemet ikke vil starte korrekt op. Når dette system er startet op, skal du logge ind som brugeren root.</p>
+
+<p><a href="#firmware">Firmware-test</a>: Kører et BIOS-testværktøj, som validerer ACPI og andre dele af din BIOS.</p>
+
+<p><a href="#memtest">Hukommelsestest</a>: Test af hukommelsen er nyttig til mere end blot at tjekke installationen af nye hukommelsesmoduler. Det stresstester også en stor del af din computer og kan indikere hardwareproblemer.</p>
+
+<p><a href="#opt">Boot-tilvalg</a>: Bootparametrene kan ændre dit systems opførsel fuldstændigt. De er indstillinger til kernen.</p>
+
+<p><a href="#help">@@@fkey_help@@@ Help</a>: Hjælpen tilpasser sig konteksten. Du vil se forskellige ting, alt efter hvad det aktive element på skærmen er. Der er også en beskrivelse af dette hjælpesystem tilgængelig.</p>
+
+<p><a href="#keytable">@@@fkey_lang@@@</a>: Vælg det sprog og tastaturlayout der skal bruges at bootloaderen.</p>
+
+<p><a href="#videomode">@@@fkey_video@@@ Video Mode</a>: Her kan du vælge imellem forskellige skærmopløsninger, der kan bruges under installationen. Hvis du løber ind i problemer med den grafiske installation, kan <em>teksttilstand</em> være en måde at komme videre på.</p>
+
+<p><a href="#install_src">@@@fkey_inst@@@ Softwarekilde</a>: Vælg softwarekilden.</p>
+
+<p><a href="#driverupdate">@@@fkey_dud@@@ Driveropdatering</a>: Hvis systemet er virkelig nyt, kan det være nødvendigt med en driveropdatering for at kunne installere systemet.</p>
diff --git a/themes/openSUSE/help-install/da/main::bits.html b/themes/openSUSE/help-install/da/main::bits.html
new file mode 100644
index 0000000..c6dfe34
--- /dev/null
+++ b/themes/openSUSE/help-install/da/main::bits.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="bits">Valg af softwaretype</a>
+</h3>
+
+<p>Du kan vælge at installere 32-bit- eller 64-bit-versionen af @@@product@@@.</p>
diff --git a/themes/openSUSE/help-install/da/main::driverupdate.html b/themes/openSUSE/help-install/da/main::driverupdate.html
new file mode 100644
index 0000000..09aa036
--- /dev/null
+++ b/themes/openSUSE/help-install/da/main::driverupdate.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="driverupdate">Driveropdatering</a>
+</h3>
+
+<p>Hvis du har brug for en driveropdatering via diskette eller cd-rom så tryk <em>@@@fkey_dud@@@</em>. Bootloaderen beder dig om at indsætte mediet med driveropdateringen efter indlæsning af Linux-kernen.</p>
+
+<p>En driveropdatering vil typisk være en diskette med en nyere version af en hardwaredriver eller fejlrettelser, der er påkrævet under installationen.</p>
diff --git a/themes/openSUSE/help-install/da/main::failsafe.html b/themes/openSUSE/help-install/da/main::failsafe.html
new file mode 100644
index 0000000..9299cee
--- /dev/null
+++ b/themes/openSUSE/help-install/da/main::failsafe.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="failsafe">Installation -- fejlsikret tilstand</a>
+</h3>
+
+<p>Vælg <em>Installation -- fejlsikret tilstand</em>, hvis du oplever at systemet hænger under installationen, eller at der opstår fejl der ikke kan reproduceres. Hvis du vælger dette, bliver DMA slået fra for IDE-drev, og det samme gør alle former for strømstyring. Se også kerneparametrene for <a href="#o_apm">apm</a>, <a href="#o_acpi">acpi</a> og <a href="#o_ide">ide</a>.</p>
diff --git a/themes/openSUSE/help-install/da/main::firmware.html b/themes/openSUSE/help-install/da/main::firmware.html
new file mode 100644
index 0000000..eebaae5
--- /dev/null
+++ b/themes/openSUSE/help-install/da/main::firmware.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="firmware">Firmware-test</a>
+</h3>
+
+<p>Starter en BIOS-tjekker, som validerer ACPI-tabellerne og mange andre dele af din BIOS. Testresultatet kan gemmes på en USB-disk eller gemmes via netværk.</p>
diff --git a/themes/openSUSE/help-install/da/main::harddisk.html b/themes/openSUSE/help-install/da/main::harddisk.html
new file mode 100644
index 0000000..9ffa5c6
--- /dev/null
+++ b/themes/openSUSE/help-install/da/main::harddisk.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="harddisk">Boot fra harddisk</a>
+</h3>
+
+<p>Vælg <em>Boot det installerede system</em> for at starte systemet, der er installeret på din lokale harddisk. Dette system skal installeres korrekt, da kun MBR (Master Boot Record) på harddisken der indlæses. Enheds-IDet for den første harddisk angives af BIOSen i computeren.</p>
+
+<p>Brug dette, hvis du glemte at tage cd'en eller dvd'en ud af drevet og vil starte computeren fra harddisken.</p>
diff --git a/themes/openSUSE/help-install/da/main::help.html b/themes/openSUSE/help-install/da/main::help.html
new file mode 100644
index 0000000..50a425c
--- /dev/null
+++ b/themes/openSUSE/help-install/da/main::help.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="help">Brug af hjælpesystemet</a>
+</h3>
+
+<p>Bootloaderens onlinehjælp tilpasser sig konteksten. Den viser information om det valgte menupunkt eller, hvis du er ved at redigere bootparametrene, så prøver det at finde information om parameteren ved markøren.</p>
+
+<p>Navigationstaster <ul><li><em>Pil op</em>: Fremhæv forrige link</li><li><em>Pil ned</em>: Fremhæv næste link</li><li><em>Pil til venstre</em>, <em>Backspace</em>: Vend tilbage til det forrige emne</li><li><em>Pil til højre</em>, <em>Enter</em>, <em>Mellemrum</em>: Følg link</li><li><em>Page Up</em>: Rul en side op</li><li><em>Page Down</em>: Rul en side nedad</li><li><em>Home</em>: Gå til sidens begyndelse</li><li><em>End</em>: Gå til sidens slutning</li><li><em>Esc</em>: Forlad hjælpesystemet</li></ul></p>
diff --git a/themes/openSUSE/help-install/da/main::install_src.html b/themes/openSUSE/help-install/da/main::install_src.html
new file mode 100644
index 0000000..cd093d0
--- /dev/null
+++ b/themes/openSUSE/help-install/da/main::install_src.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="install_src">Softwarekilde</a>
+</h3>
+
+<p>Tryk <em>@@@fkey_inst@@@</em> for at vælge en softwarekilde.</p>
+
+<p>Dette er det samme som at bruge bootparametren <a href="#o_install">installér</a>.</p>
diff --git a/themes/openSUSE/help-install/da/main::keytable.html b/themes/openSUSE/help-install/da/main::keytable.html
new file mode 100644
index 0000000..d628a77
--- /dev/null
+++ b/themes/openSUSE/help-install/da/main::keytable.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="keytable">Valg af sprog og tastaturlayout</a>
+</h3>
+
+<p>Tryk <em>@@@fkey_lang@@@</em> for at ændre det sprog og tastaturlayout, som bootloaderen bruger.</p>
diff --git a/themes/openSUSE/help-install/da/main::linux.html b/themes/openSUSE/help-install/da/main::linux.html
new file mode 100644
index 0000000..9a9997e
--- /dev/null
+++ b/themes/openSUSE/help-install/da/main::linux.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="linux">Installation</a>
+</h3>
+
+<p>Vælg <em>Installation</em> for at starte standardinstallationen. <a href="#opt">boot-tilvalg</a>, der indtastes, bruges under opstart. Dette punkt aktiverer mange af de funktioner, der er gængse i hardware nu om dage.</p>
diff --git a/themes/openSUSE/help-install/da/main::memtest.html b/themes/openSUSE/help-install/da/main::memtest.html
new file mode 100644
index 0000000..32f2757
--- /dev/null
+++ b/themes/openSUSE/help-install/da/main::memtest.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="memtest">Hukommelsestest</a>
+</h3>
+
+<p>Den inkluderede <em>Hukommelsestest</em> giver gode muligheder for at stressteste systemets hardware. Hovedformålet med den er at finde ud af om der er defekt RAM i systemet, men mange andre dele af systemet stresstestes også.</p>
+
+<p>Der er ingen garanti for, at hukommelsen er i orden, hvis der ikke findes fejl, men de fleste typer af hukommelsesdefekter vil blive fundet.</p>
diff --git a/themes/openSUSE/help-install/da/main::noacpi.html b/themes/openSUSE/help-install/da/main::noacpi.html
new file mode 100644
index 0000000..a018a02
--- /dev/null
+++ b/themes/openSUSE/help-install/da/main::noacpi.html
@@ -0,0 +1,9 @@
+<h3>
+<a name="noacpi">Installation -- ACPI deaktiveret</a>
+</h3>
+
+<p>Nutidig hardware kræver normalt ACPI (Advanced Configuration and Power Interface) for at styre interrupthåndteringen. ACPI erstatter fuldkomment det gamle APM-system.</p>
+
+<p>Vælg <em>Installation -- ACPI deaktiveret</em>, hvis du oplever problemer under boot af kernen. Kendte problemer for maskiner, der har problemer med ACPI er: <ul><li>kernen fryser når systemet booter</li><li>PCI-kort bliver ikke fundet eller initialiseres ikke ordenligt</li></ul></p>
+
+<p>Du kan også forsøge bootparametren <a href="#firmware">Firmware-test</a> og se på testresultaterne fra ACPI-valideringen.</p>
diff --git a/themes/openSUSE/help-install/da/main::nolapic.html b/themes/openSUSE/help-install/da/main::nolapic.html
new file mode 100644
index 0000000..fa24c48
--- /dev/null
+++ b/themes/openSUSE/help-install/da/main::nolapic.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="nolapic">Installation -- Lokal APIC deaktiveret</a>
+</h3>
+
+<p>Normalt er der ingen problemer med APIC (Advanced Programmable Interrupt Controller). Men hvis du lader til at have nogle, så prøv denne bootparameter for at boote uden local APIC-understøttelse.</p>
+
+<p>Pas på ikke at forveksle dette med <a href="#noacpi">ACPI</a> (Advanced Configuration and Power Interface).</p>
diff --git a/themes/openSUSE/help-install/da/main::opt.html b/themes/openSUSE/help-install/da/main::opt.html
new file mode 100644
index 0000000..5b65642
--- /dev/null
+++ b/themes/openSUSE/help-install/da/main::opt.html
@@ -0,0 +1,9 @@
+<h3>
+<a name="opt">Boot-tilvalg</a>
+</h3>
+
+<p>Der er 2 typer af bootparametre du kan angive. Først er der dem, der påvirker installationsprogrammet selv. Dernæst er der kerneparametrene. Nogle af de mere almindelige tilvalg er:</p>
+
+<p>a) installationstilvalg<ul><li><a href="#o_install">installér</a> -- vælg en softwarekilde</li><li><a href="#network">netværkstilvalg</a> -- netværkstilvalgene</li> <li><a href="#o_vnc">vnc-tilvalg</a> -- tilvalg ved VNC-installation</li> </ul></p>
+
+<p>a) kerneparametre <ul><li><a href="#o_splash">splash</a> -- bestem opstartsbilledets opførsel</li><li><a href="#o_apm">apm</a> -- slå strømstyring til eller fra</li> <li><a href="#o_acpi">acpi</a> -- avanceret konfiguration og strømgrænseflade (ACPI)</li> <li><a href="#o_splash">splash</a> -- bestem opstartsbilledets opførsel</li> </ul></p>
diff --git a/themes/openSUSE/help-install/da/main::opt::network.html b/themes/openSUSE/help-install/da/main::opt::network.html
new file mode 100644
index 0000000..f1e5315
--- /dev/null
+++ b/themes/openSUSE/help-install/da/main::opt::network.html
@@ -0,0 +1,13 @@
+<a name="o_hostip"/>
+<a name="o_netmask"/>
+<a name="o_gateway"/>
+
+<h3>
+<a name="network">Tilvalg for installationen: Netværkstilvalg</a>
+</h3>
+
+<p>Det er muligt at sætte netværkskortet op allerede nu. Selve hardwaren vil blive fundet senere af YaST2. Det minimale sæt tilvalg, til konfiguration af dit netkort, består af værtsmaskine-IP samt en netmaske. For eksempel:<ul><li>hostip=192.168.0.10 netmask=255.255.255.0</li></ul></p>
+
+<p>eller i kortere form: <ul><li>hostip=192.168.0.10/24</li></ul></p>
+
+<p>Hvis du angav en <a href="#o_install">netværksbaseret installation</a> og du ikke angav begge disse tilvalg, vil installationsprogrammet prøve at sætte netværkskortet op med <em>dhcp</em>. Hvis du skal bruge en standard-gateway, så angiv denne med tilvalget <em>gateway</em>. For eksempel: <ul><li>gateway=192.168.0.8</li></ul></p>
diff --git a/themes/openSUSE/help-install/da/main::opt::o_acpi.html b/themes/openSUSE/help-install/da/main::opt::o_acpi.html
new file mode 100644
index 0000000..dce2e1e
--- /dev/null
+++ b/themes/openSUSE/help-install/da/main::opt::o_acpi.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="o_acpi">Kernetilvalg: acpi</a>
+</h3>
+
+<p>ACPI (Advanced Configuration and Power Interface) er en standard, der definerer, hvordan strømhåndteringen og opsætningen af systemet foretages mellem operativsystemet og BIOS'en. Som standard vil <em>acpi</em> blive aktiveret, hvis en BIOS der er nyere end år 2000, bliver fundet. Der er adskillige ofte brugte parametre, der bruges, til at styre hvordan ACPI opfører sig: <ul><li><em>pci=noacpi</em> -- anvend ikke ACPI til at route PCI-interrupts</li><li><em>acpi=oldboot</em> -- kun de dele af ACPI som er relevante for at boote forbliver aktiveret</li><li><em>acpi=off</em> -- slå ACPI fuldstændigt fra</li><li><em>acpi=force</em> -- slå ACPI til, selv hvis din BIOS er fra før år 2000</li></ul></p>
+
+<p>Især på nyere computere erstatter den det gamle <a href="#o_apm">apm</a>-system.</p>
diff --git a/themes/openSUSE/help-install/da/main::opt::o_apm.html b/themes/openSUSE/help-install/da/main::opt::o_apm.html
new file mode 100644
index 0000000..b4ecbd5
--- /dev/null
+++ b/themes/openSUSE/help-install/da/main::opt::o_apm.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="o_apm">Kernetilvalg: apm</a>
+</h3>
+
+<p>APM er en af de to strømhåndteringsstrategier, der bruges på nutidige computere. Den bruges hovedsagelig på bærbare til funktioner såsom suspendering til harddisk, men den kan også være ansvarlig for at slukke computeren, efter du har bedt den om at lukke ned. Brug af APM kræver en korrekt fungerende BIOS. Hvis BIOSen er defekt på dette område, vil APM kun have begrænset effekt eller måske endda forhindre din maskine i at fungere, som den skal. Den kan derfor slås fra med parametren <ul><li><em>apm=off</em> -- slå ACPI fuldstændigt fra</li></ul></p>
+
+<p>Visse meget nye computere kan bedre drage fordel af det nyere <a href="#o_acpi">ACPI</a>.</p>
diff --git a/themes/openSUSE/help-install/da/main::opt::o_ide.html b/themes/openSUSE/help-install/da/main::opt::o_ide.html
new file mode 100644
index 0000000..269fc1e
--- /dev/null
+++ b/themes/openSUSE/help-install/da/main::opt::o_ide.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="o_ide">Kernetilvalg: ide</a>
+</h3>
+
+<p>IDE, ulig SCSI, bruges hovedsagelig til skrivebordsarbejdsstationer. For at omgå noge hardwareproblemer, der kan optræde med IDE systemer, kan du bruge kerneparametren: <ul><li><em>ide=nodma</em> -- slå DMA fra for IDE-drev</li></ul></p>
diff --git a/themes/openSUSE/help-install/da/main::opt::o_install.html b/themes/openSUSE/help-install/da/main::opt::o_install.html
new file mode 100644
index 0000000..88a5e98
--- /dev/null
+++ b/themes/openSUSE/help-install/da/main::opt::o_install.html
@@ -0,0 +1,9 @@
+<h3>
+<a name="o_install">Installationstilvalg: install</a>
+</h3>
+
+<p>Som standard vil de lokale cd-rom-drev blive gennemsøgt efter softwarekilden. Hvis du ønsker at lave en netværksinstallation, skal du vælge tilvalget <em>installér</em>. Der er følgende mulige installationsprotokoller <ul><li>FTP</li><li>NFS</li><li>HTTP</li></ul></p>
+
+<p>Den syntaks der skal bruges, er magen til den for almindelige URL'er. Hvis din server har IP-adressen 192.168.0.1 f.eks., og du ønsker at installere via NFS fra mappen /install på denne server så angiv kilden som følger:<ul><li>install=nfs://192.168.0.1/install</li></ul></p>
+
+<p>Netværkskortet vil enten blive sat op med <em>dhcp</em>, eller også skal du selv angive parametrene, som beskrevet i <a href="#network">netværkstilvalg</a>.</p>
diff --git a/themes/openSUSE/help-install/da/main::opt::o_splash.html b/themes/openSUSE/help-install/da/main::opt::o_splash.html
new file mode 100644
index 0000000..c9f5be4
--- /dev/null
+++ b/themes/openSUSE/help-install/da/main::opt::o_splash.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="o_splash">Kernetilvalg: splash</a>
+</h3>
+
+<p>Opstartsbilledet er billedet, som vises under systemets opstart. <ul><li><em>splash=0</em> -- Opstartsbilledet slås fra. Dette kan være nyttigt med meget gamle skærme, eller hvis en fejl opstår.</li><li><em>splash=verbose</em> -- Aktiverer opstartsbillede. Kerne- og boot-beskeder vises stadig.</li><li><em>splash=silent</em> -- Aktiverer opstartsbillede, men ingen beskeder. I stedet vises en fremgangslinje.</li></ul></p>
diff --git a/themes/openSUSE/help-install/da/main::opt::o_vnc.html b/themes/openSUSE/help-install/da/main::opt::o_vnc.html
new file mode 100644
index 0000000..378dac4
--- /dev/null
+++ b/themes/openSUSE/help-install/da/main::opt::o_vnc.html
@@ -0,0 +1,9 @@
+<a name="o_vncpassword"/>
+
+<h3>
+<a name="o_vnc">Installationstilvalg: vnc</a>
+</h3>
+
+<p>For at aktivere VNC-installation, skal du angive parametrene vnc og vncpassword: <ul><li><em>vnc=1 vncpassword=eksempel</em></li></ul></p>
+
+<p>VNC-serveren vil blive startet, og du kan styre YaST2 via en hvilken som helst VNC-klient på et andet system.</p>
diff --git a/themes/openSUSE/help-install/da/main::rescue.html b/themes/openSUSE/help-install/da/main::rescue.html
new file mode 100644
index 0000000..6341683
--- /dev/null
+++ b/themes/openSUSE/help-install/da/main::rescue.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="rescue">Redningssystem</a>
+</h3>
+
+<p><em>Redningssystem</em> er et lille RAM-diskbaseret system. Derfra kan man foretage alle mulige ændringer på et installeret system. Da der kun er lav-niveau-værktøjer tilgængelige i dette system, er det kun tiltænkt eksperter.</p>
diff --git a/themes/openSUSE/help-install/da/main::videomode.html b/themes/openSUSE/help-install/da/main::videomode.html
new file mode 100644
index 0000000..d008ef0
--- /dev/null
+++ b/themes/openSUSE/help-install/da/main::videomode.html
@@ -0,0 +1,9 @@
+<h3>
+<a name="videomode">Valg af grafisk tilstand</a>
+</h3>
+
+<p>Tryk <em>@@@fkey_video@@@</em> for at få en liste over skærmtilstande, som er understøttet af dit grafikkort. Den højeste opløsning, din skærm understøtter, er forvalgt.</p>
+
+<p>Det er muligt, at din skærm ikke kan genkendes automatisk. I så fald skal du vælge den ønskede tilstand manuelt.</p>
+
+<p>Hvis dit system har problemer med grafikkortet under installationen, kan <em>teksttilstand</em> være en brugbar midlertidig løsning.</p>
diff --git a/themes/openSUSE/help-install/da/navi.html b/themes/openSUSE/help-install/da/navi.html
new file mode 100644
index 0000000..3f4fa96
--- /dev/null
+++ b/themes/openSUSE/help-install/da/navi.html
@@ -0,0 +1 @@
+<p>Vend tilbage til <a href="#foobar">FOOBAR</a></p>
diff --git a/themes/openSUSE/help-install/de/main.html b/themes/openSUSE/help-install/de/main.html
new file mode 100644
index 0000000..072a60b
--- /dev/null
+++ b/themes/openSUSE/help-install/de/main.html
@@ -0,0 +1,35 @@
+<h3>
+<a name="main">Boot-Lader-Hilfe</a>
+</h3>
+
+<p>Willkommen zu <em>@@@product@@@</em></p>
+
+<p>Benutzen Sie dieses Menü, um die gewünschte Funktion auszuwählen. Falls Sie Probleme mit der Navigation in diesem Hilfesystem haben, drücken Sie <em>@@@fkey_help@@@</em>, um <a href="#help">Beschreibung</a> des Hilfesystems zu öffnen. Die Hauptfunktionen in diesem Menü sind:</p>
+
+<p><a href="#harddisk">Von Festplatte booten</a>: Diese Auswahl wird an Ihrem System keine Änderung vornehmen. Sie startet lediglich ein bereits installiertes Betriebssystem.</p>
+
+<p><a href="#linux">Installation</a>: Dieser Installationsmodus arbeitet auf den meisten Maschinen. Falls Ihr System beim Hochfahren hängenbleibt oder Probleme mit der Erkennung von Hardwarekomponenten hat, z.B. Probleme mit Festplatten-Controllern oder Netzwerkkarten, versuchen Sie es mit einer der folgenden Installationsoptionen.</p>
+
+<p><a href="#noacpi">Installation -- ACPI deaktiviert</a>: Viele der heute verkauften Computer haben unvollständige oder fehlerhafte ACPI-Implementierungen. Diese Auswahl deaktiviert die ACPI-Unterstützung im Kernel, aktiviert aber immer noch viele Leistungsmerkmale, wie DMA für IDE-Festplatten.</p>
+
+<p><a href="#nolapic">Installation -- Lokales APIC deaktiviert</a>: Wenn die normale Installation fehlschlägt, dann kann das evtl. daran liegen, dass die Systemhardware kein lokales APIC unterstützt. Wenn dies der Fall zu sein scheint, benutzen Sie diese Option, um ohne lokale APIC-Unterstützung zu installieren.</p>
+
+<p><a href="#failsafe">Installation -- Sichere Einstellungen</a>: Falls Sie mit <em>Installation</em> nicht erfolgreich waren, kann die folgende Auswahl evtl. das Problem lösen.</p>
+
+<p><a href="#rescue">Rettungssystem</a>: Dieses Boot-Abbild startet ein kleines Linux-System im RAM. Dieses Vorgehen ist sinnvoll, wenn das System nicht richtig startet. Loggen Sie sich nach dem Hochfahren des Systems als root ein.</p>
+
+<p><a href="#firmware">Firmware-Test</a>: Lädt ein BIOS-Testwerkzeug, welches ACPI und andere Teile Ihres BIOS überprüft.</p>
+
+<p><a href="#memtest">Speichertest</a>: Speichertests sind nicht nur zur Überprüfung neuer Speichermodule sinnvoll. Sie sind ein Belastungstest für einen großen Teil Ihres Computersystems und können Hardwareprobleme aufzeigen.</p>
+
+<p><a href="#opt">Boot-Optionen</a>: Die Boot-Optionen können das Verhalten Ihres Systems komplett ändern. Sie sind Einstellungen für den Kernel.</p>
+
+<p><a href="#help">@@@fkey_help@@@-Hilfe</a>: Dies ist kontextspezifisch. Es wird verschiedene Bildschirme abhängig vom aktiven Element des Boot-Bildschirms zeigen. Es ist auch eine Beschreibung dieses Hilfesystems verfügbar.</p>
+
+<p><a href="#keytable">@@@fkey_lang@@@</a>: Stellen Sie die vom Boot-Lader verwendete Sprache und Tastaturbelegung ein.</p>
+
+<p><a href="#videomode">@@@fkey_video@@@ Videomodus</a>: Wählen Sie hier zwischen den verschiedenen Bildschirmauflösungen während der Installation. Falls es Probleme mit der grafischen Installation gibt, wird <em>Textmodus</em> evtl. eine Problemumgehung sein.</p>
+
+<p><a href="#install_src">@@@fkey_inst@@@ Installationsquelle</a>: Wählen Sie die Installationsquelle aus.</p>
+
+<p><a href="#driverupdate">@@@fkey_dud@@@ Treiberaktualisierung</a>: Bei sehr neuen Maschinen ist es evtl. notwendig eine Treiberaktualisierung vorzunehmen, um das System zu installieren.</p>
diff --git a/themes/openSUSE/help-install/de/main::bits.html b/themes/openSUSE/help-install/de/main::bits.html
new file mode 100644
index 0000000..14f5fe6
--- /dev/null
+++ b/themes/openSUSE/help-install/de/main::bits.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="bits">Auswahl des Softwaretyps</a>
+</h3>
+
+<p>Sie können wählen, ob Sie die 32- oder 64-Bit-Version von @@@product@@@ installieren möchten.</p>
diff --git a/themes/openSUSE/help-install/de/main::driverupdate.html b/themes/openSUSE/help-install/de/main::driverupdate.html
new file mode 100644
index 0000000..164a3f3
--- /dev/null
+++ b/themes/openSUSE/help-install/de/main::driverupdate.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="driverupdate">Treiberaktualisierung</a>
+</h3>
+
+<p>Falls eine Treiberaktualisierung per Diskette oder CD-ROM notwendig wird, drücken Sie <em>@@@fkey_dud@@@</em>. Der Boot-Lader erbittet das Einlegen des Treiberaktualisierungsmediums nach dem Laden des Linux-Kernels.</p>
+
+<p>Eine Treiberaktualisierung ist typischerweise eine Diskette mit neuen Versionen von Hardwaretreibern oder Fehlerbehebungen, die während der Installation notwendig werden.</p>
diff --git a/themes/openSUSE/help-install/de/main::failsafe.html b/themes/openSUSE/help-install/de/main::failsafe.html
new file mode 100644
index 0000000..432a0eb
--- /dev/null
+++ b/themes/openSUSE/help-install/de/main::failsafe.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="failsafe">Installation -- Sichere Einstellungen</a>
+</h3>
+
+<p>Wählen Sie <em>Installation -- Sichere Einstellungen</em>, wenn der Computer während der Installation hängt oder nicht nachvollziehbare Fehler auftreten. Diese Option deaktiviert DMA für IDE-Laufwerke und alle Energieverwaltungsfunktionen. Sehen Sie sich auch die Kernel-Optionen für <a href="#o_apm">apm</a>, <a href="#o_acpi">acpi</a> und <a href="#o_ide">ide</a> an.</p>
diff --git a/themes/openSUSE/help-install/de/main::firmware.html b/themes/openSUSE/help-install/de/main::firmware.html
new file mode 100644
index 0000000..76a0575
--- /dev/null
+++ b/themes/openSUSE/help-install/de/main::firmware.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="firmware">Firmware-Test</a>
+</h3>
+
+<p>Startet ein BIOS-Prüfprogramm, welches die ACPI-Tabellen und viele andere Teile Ihres BIOS überprüft. Die Testergebnisse können auf einem USB-Datenträger oder via Netzwerk gespeichert werden.</p>
diff --git a/themes/openSUSE/help-install/de/main::harddisk.html b/themes/openSUSE/help-install/de/main::harddisk.html
new file mode 100644
index 0000000..cd6fd95
--- /dev/null
+++ b/themes/openSUSE/help-install/de/main::harddisk.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="harddisk">Von Festplatte booten</a>
+</h3>
+
+<p>Wählen Sie <em>Installiertes Betriebssystem starten</em>, um das auf Ihrer lokalen Festplatte installierte System zu starten. Dieses System muss richtig installiert sein, da nur der MBR (Master Boot Record) auf der ersten Festplatte gestartet wird. Die Geräte-ID der ersten Festplatte wird vom BIOS des Computers bereitgestellt.</p>
+
+<p>Benutzen Sie dies, wenn Sie vergessen haben, die CD oder DVD aus dem Laufwerk zu nehmen und den Computer von der Festplatte starten möchten.</p>
diff --git a/themes/openSUSE/help-install/de/main::help.html b/themes/openSUSE/help-install/de/main::help.html
new file mode 100644
index 0000000..5dde4a1
--- /dev/null
+++ b/themes/openSUSE/help-install/de/main::help.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="help">Hilfesystem verwenden</a>
+</h3>
+
+<p>Die Online-Hilfe des Boot-Laders ist kontextspezifisch. Sie gibt Informationen über das ausgewählte Menüelement oder sie versucht, bei Bearbeitung der Boot-Optionen, Informationen über die Option zu suchen, auf der der Mauszeiger positioniert ist.</p>
+
+<p>Navigationstasten <ul><li><em>Aufwärtspfeil</em>: vorherigen Link hervorheben</li><li><em>Abwärtspfeil</em>: nächsten Link hervorheben</li><li><em>Linkspfeil</em>, <em>Rücktaste</em>: zum vorherigen Thema zurückkehren</li><li><em>Rechtspfeil</em>, <em>Eingabe</em>, <em>Leerzeichen</em>: Link folgen</li><li><em>Bild auf</em>: eine Seite nach oben blättern</li><li><em>Bild ab</em>: eine Seite nach unten blättern</li><li><em>Pos 1</em>: zur Startseite gehen</li><li><em>Ende</em>: zur Endseite gehen</li><li><em>Esc</em>: Hilfe verlassen</li></ul></p>
diff --git a/themes/openSUSE/help-install/de/main::install_src.html b/themes/openSUSE/help-install/de/main::install_src.html
new file mode 100644
index 0000000..f0a4686
--- /dev/null
+++ b/themes/openSUSE/help-install/de/main::install_src.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="install_src">Installationsquelle</a>
+</h3>
+
+<p>Drücken Sie <em>@@@fkey_inst@@@</em>, um eine Installationsquelle zu wählen.</p>
+
+<p>Dies ist dasselbe, wie die Boot-Option <a href="#o_install">installieren</a> zu verwenden.</p>
diff --git a/themes/openSUSE/help-install/de/main::keytable.html b/themes/openSUSE/help-install/de/main::keytable.html
new file mode 100644
index 0000000..73c599a
--- /dev/null
+++ b/themes/openSUSE/help-install/de/main::keytable.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="keytable">Auswahl der Sprache und Tastaturbelegung</a>
+</h3>
+
+<p>Drücken Sie <em>@@@fkey_lang@@@</em>, um die Sprache und Tastaturbelegung, die der Boot-Laderverwendet zu wechseln.</p>
diff --git a/themes/openSUSE/help-install/de/main::linux.html b/themes/openSUSE/help-install/de/main::linux.html
new file mode 100644
index 0000000..ea2f94b
--- /dev/null
+++ b/themes/openSUSE/help-install/de/main::linux.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="linux">Installation</a>
+</h3>
+
+<p>Wählen Sie <em>Installation</em>, um die Standardinstallation zu starten. Die eingegebenen <a href="#opt">Boot-Optionen</a> werden beim Starten verwendet. Dieses Element aktiviert viele Funktionen der üblicherweise verfügbaren Hardware.</p>
diff --git a/themes/openSUSE/help-install/de/main::memtest.html b/themes/openSUSE/help-install/de/main::memtest.html
new file mode 100644
index 0000000..52fb442
--- /dev/null
+++ b/themes/openSUSE/help-install/de/main::memtest.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="memtest">Speichertest</a>
+</h3>
+
+<p>Der enthaltene <em>Speichertest</em> unterstützt gute Möglichkeiten die Systemhardware auf Belastung zu testen. Der Hauptzweck ist die Erkennung von defektem RAM, es werden aber auch zahlreiche andere Systembereiche belastet.</p>
+
+<p>Es gibt keine Garantie, dass der Speicher intakt ist, wenn keine Fehler gefunden werden, obwohl die meisten Speicherdefekte ausfindig gemacht werden.</p>
diff --git a/themes/openSUSE/help-install/de/main::noacpi.html b/themes/openSUSE/help-install/de/main::noacpi.html
new file mode 100644
index 0000000..0012f26
--- /dev/null
+++ b/themes/openSUSE/help-install/de/main::noacpi.html
@@ -0,0 +1,9 @@
+<h3>
+<a name="noacpi">Installation -- ACPI deaktiviert</a>
+</h3>
+
+<p>Aktuelle Hardware benötigt üblicherweise ACPI (Advanced Configuration and Power Interface), um die Interrupt-Handhabung zu kontrollieren. ACPI ersetzt das alte APM-System vollständig.</p>
+
+<p>Wählen Sie <em>Installation -- ACPI deaktiviert</em>, wenn es während des Hochfahrens Probleme mit dem Kernel gibt. Bekannte Probleme mit ACPI sind: <ul><li>Kernel friert beim Booten ein</li><li>PCI-Karten werden nicht erkannt oder richtig initialisiert</li></ul></p>
+
+<p>Sie können auch die Boot-Option <a href="#firmware">Firmware-Test</a> versuchen und die Testergebnisse der ACPI-Überprüfung betrachten.</p>
diff --git a/themes/openSUSE/help-install/de/main::nolapic.html b/themes/openSUSE/help-install/de/main::nolapic.html
new file mode 100644
index 0000000..e7dec80
--- /dev/null
+++ b/themes/openSUSE/help-install/de/main::nolapic.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="nolapic">Installation -- Lokales APIC deaktiviert</a>
+</h3>
+
+<p>Normalerweise gibt es keine Probleme mit dem APIC (Advanced Programmable Interrupt Controller). Falls es scheinbar doch welche gibt, versuchen Sie diese Option, um ohne lokale APIC-Unterstützung zu starten.</p>
+
+<p>Bitte verwechseln Sie dies nicht mit <a href="#noacpi">ACPI</a> (Advanced Configuration and Power Interface).</p>
diff --git a/themes/openSUSE/help-install/de/main::opt.html b/themes/openSUSE/help-install/de/main::opt.html
new file mode 100644
index 0000000..0c710a1
--- /dev/null
+++ b/themes/openSUSE/help-install/de/main::opt.html
@@ -0,0 +1,9 @@
+<h3>
+<a name="opt">Boot-Optionen</a>
+</h3>
+
+<p>Es gibt zwei verfügbare Typen von Boot-Optionen. Zum Einen gibt es Optionen, die das Installationsprogramm beeinflussen. Zum Zweiten gibt es Kernel-Optionen. Einige der üblicheren Optionen sind:</p>
+
+<p>a) Installationsoptionen <ul><li><a href="#o_install">installieren</a> -- wählen Sie eine Installationsquelle</li><li><a href="#network">Netzwerkoptionen</a> -- die Netzwerkoptionen</li><li><a href="#o_vnc">VNC-Optionen</a> -- Optionen für die Installation via VNC</li></ul></p>
+
+<p>b) Kernel-Optionen <ul><li><a href="#o_splash">splash</a> -- beeinflusst das Verhalten des Splash-Bildschirms</li><li><a href="#o_apm">apm</a> -- Energieverwaltung umschalten</li><li><a href="#o_acpi">acpi</a> -- Erweiterte Konfigurations- und Energieschnittstelle</li><li><a href="#o_ide">ide</a> -- steuert das IDE-Subsystem</li></ul></p>
diff --git a/themes/openSUSE/help-install/de/main::opt::network.html b/themes/openSUSE/help-install/de/main::opt::network.html
new file mode 100644
index 0000000..e329e35
--- /dev/null
+++ b/themes/openSUSE/help-install/de/main::opt::network.html
@@ -0,0 +1,13 @@
+<a name="o_hostip"/>
+<a name="o_netmask"/>
+<a name="o_gateway"/>
+
+<h3>
+<a name="network">Installations-Optionen: Netzwerkoptionen</a>
+</h3>
+
+<p>Es ist möglich die Netzwerkschnittstelle sofort zu konfigurieren. Die Hardware wird später durch YaST2 erkannt. Der minimale Satz an Optionen, um Ihre Netzwerkkarte zu konfigurieren besteht aus Host-IP und Netzmaske. Beispiel: <ul><li>hostip=192.168.0.10 netmask=255.255.255.0</li></ul></p>
+
+<p>oder in einer kürzeren Form: <ul><li>hostip=192.168.0.10/24</li></ul></p>
+
+<p>Wenn Sie <a href="#o_install">Netzwerk-basierte Installation</a> festgelegt haben, aber diese beiden Optionen nicht bestimmen, versucht das Installationsprogramm die Netzwerkschnittstelle mit <em>dhcp</em> zu konfigurieren. Wenn Sie eine Standardschnittstelle benötigen, bestimmen Sie dies mit der Option <em>gateway</em>. Beispiel: <ul><li>gateway=192.168.0.8</li></ul></p>
diff --git a/themes/openSUSE/help-install/de/main::opt::o_acpi.html b/themes/openSUSE/help-install/de/main::opt::o_acpi.html
new file mode 100644
index 0000000..5a0569c
--- /dev/null
+++ b/themes/openSUSE/help-install/de/main::opt::o_acpi.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="o_acpi">Kernel-Optionen: acpi</a>
+</h3>
+
+<p>ACPI (Advanced Configuration and Power Interface) ist ein Standard, der die Energie- und Konfigurationsverwaltungsschnittstellen zwischen einem Betriebssystem und dem BIOS definiert. Standardmäßig ist <em>acpi</em> aktiviert, wenn ein BIOS erkannt wird, welches nach 2000 datiert ist. Es gibt mehrere gebräuchliche Parameter zur Steuerung des ACPI: <ul><li><em>pci=noacpi</em> -- verwenden Sie ACPI nicht, um PCI-Interrupts zu routen</li><li><em>acpi=oldboot</em> -- nur die Teile von ACPI, die für das Hochfahren relevant sind, bleiben aktiviert</li><li><em>acpi=off</em> -- ACPI komplett abschalten</li><li><em>acpi=force</em> -- ACPI anschalten, selbst wenn Ihr BIOS vor 2000 datiert ist</li></ul></p>
+
+<p>Besonders auf neuen Computern wird es das alte <a href="#o_apm">apm</a>-System ersetzen.</p>
diff --git a/themes/openSUSE/help-install/de/main::opt::o_apm.html b/themes/openSUSE/help-install/de/main::opt::o_apm.html
new file mode 100644
index 0000000..6ee6a04
--- /dev/null
+++ b/themes/openSUSE/help-install/de/main::opt::o_apm.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="o_apm">Kernel-Optionen: apm</a>
+</h3>
+
+<p>APM ist eine der beiden Energieverwaltungsstrategien, die auf den gegenwärtigen Computern verwendet wird. Es wird hauptsächlich auf Laptops für Funktionen wie Suspend-to-Disk benutzt, kann aber auch für das Abschalten des Computers nach dem Herunterfahren verantwortlich sein. APM ist von einem korrekt funktionierenden BIOS abhängig. Bei einem fehlerhaften BIOS funktioniert das APM evtl. nur eingeschränkt, möglicherweise funktioniert der Computer überhaupt nicht mehr. Daher kann es mit dem Parameter <ul><li><em>apm=off</em> -- APM komplett abschalten</li></ul> deaktiviert werden.</p>
+
+<p>Einige sehr neue Computer können vom neueren <a href="#o_acpi">ACPI</a> profitieren.</p>
diff --git a/themes/openSUSE/help-install/de/main::opt::o_ide.html b/themes/openSUSE/help-install/de/main::opt::o_ide.html
new file mode 100644
index 0000000..6dc1c12
--- /dev/null
+++ b/themes/openSUSE/help-install/de/main::opt::o_ide.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="o_ide">Kernel-Optionen: ide</a>
+</h3>
+
+<p>IDE wird, im Gegensatz zu SCSI, auf den meisten Desktop-Arbeitsstationen verwendet. Zur Umgehung einiger Hardwareprobleme, die mit IDE-Systemen auftreten, verwenden Sie den Kernel-Parameter: <ul><li><em>ide=nodma</em> -- DMA für IDE-Laufwerke abschalten</li></ul></p>
diff --git a/themes/openSUSE/help-install/de/main::opt::o_install.html b/themes/openSUSE/help-install/de/main::opt::o_install.html
new file mode 100644
index 0000000..514ec9c
--- /dev/null
+++ b/themes/openSUSE/help-install/de/main::opt::o_install.html
@@ -0,0 +1,9 @@
+<h3>
+<a name="o_install">Installations-Optionen: install</a>
+</h3>
+
+<p>Standardmäßig werden die lokalen CD-ROMs nach der Installationsquelle durchsucht. Bei einer Netzwerkinstallation wählen Sie die Option <em>installieren</em>. Mögliche Installationsprotokolle sind <ul><li>FTP</li><li>NFS</li><li>HTTP</li></ul></p>
+
+<p>Die zu verwendende Syntax entspricht den Standard-URLs. Bsp.: Wenn Ihr Server bei 192.168.0.1 gefunden wird und Sie eine NFS-basierte Installation aus dem Verzeichnis /install durchführen wollen, legen Sie die Quelle wie folgt fest: <ul><li>install=nfs://192.168.0.1/install</li></ul></p>
+
+<p>Die Netzwerkkarte wird entweder mit <em>dhcp</em> konfiguriert oder Sie müssen die Parameter selbst festlegen, wie beschrieben in <a href="#network">Netzwerkoptionen</a>.</p>
diff --git a/themes/openSUSE/help-install/de/main::opt::o_splash.html b/themes/openSUSE/help-install/de/main::opt::o_splash.html
new file mode 100644
index 0000000..5dad547
--- /dev/null
+++ b/themes/openSUSE/help-install/de/main::opt::o_splash.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="o_splash">Kernel-Optionen: splash</a>
+</h3>
+
+<p>Der Splash-Bildschirm ist das während des Systemstarts angezeigte Bild. <ul><li><em>splash=0</em> -- Der Splash-Bildschirm ist abgeschaltet. Dies kann bei bei sehr alten Monitoren sinnvoll sein oder wenn einige Fehler auftreten.</li><li><em>splash=verbose</em> -- Splash wird aktiviert; Kernel- und Boot-Nachrichten werden nach wie vor angezeigt.</li><li><em>splash=silent</em> -- Splash wird aktiviert, aber keine Nachrichten. Anstelle dessen wird ein Fortschrittsbalken gezeichnet.</li></ul></p>
diff --git a/themes/openSUSE/help-install/de/main::opt::o_vnc.html b/themes/openSUSE/help-install/de/main::opt::o_vnc.html
new file mode 100644
index 0000000..49f67fd
--- /dev/null
+++ b/themes/openSUSE/help-install/de/main::opt::o_vnc.html
@@ -0,0 +1,9 @@
+<a name="o_vncpassword"/>
+
+<h3>
+<a name="o_vnc">Installations-Optionen: vnc</a>
+</h3>
+
+<p>Um die VNC-Installation zu aktivieren, legen Sie die Parameter vnc und vncpassword fest: <ul><li><em>vnc=1 vncpassword=example</em></li></ul></p>
+
+<p>Der VNC-Server wird gestartet und Sie können YaST2 über irgendeinen VNC-Client von einem entfernten System aus steuern.</p>
diff --git a/themes/openSUSE/help-install/de/main::rescue.html b/themes/openSUSE/help-install/de/main::rescue.html
new file mode 100644
index 0000000..1e0fd44
--- /dev/null
+++ b/themes/openSUSE/help-install/de/main::rescue.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="rescue">Rettungssystem</a>
+</h3>
+
+<p><em>Rettungssystem</em> ist ein kleines RAM-Disk-Basissystem. Von dort aus können Sie alle möglichen Änderungen an einem installierten System vornehmen. Weil nur systemnahe Werkzeuge in diesem System verfügbar sind, ist es für Experten vorgesehen.</p>
diff --git a/themes/openSUSE/help-install/de/main::videomode.html b/themes/openSUSE/help-install/de/main::videomode.html
new file mode 100644
index 0000000..6baf4ff
--- /dev/null
+++ b/themes/openSUSE/help-install/de/main::videomode.html
@@ -0,0 +1,9 @@
+<h3>
+<a name="videomode">Auswahl des Videomodus</a>
+</h3>
+
+<p>Drücken Sie <em>@@@fkey_video@@@</em>, um die Liste der Modi zu erhalten, die Ihre Grafikkarte unterstützt. Der höchste Modus, den Ihr Monitor anzeigen kann, ist vorgewählt.</p>
+
+<p>Es ist möglich, dass Ihr Monitor nicht automatisch erkannt wird. Wählen Sie in diesem Fall Ihren bevorzugten Modus manuell aus.</p>
+
+<p>Falls Ihr System während der Installation Probleme mit der Grafikkarte hat, kann <em>Textmodus</em> eine brauchbare Problemumgehung sein.</p>
diff --git a/themes/openSUSE/help-install/de/navi.html b/themes/openSUSE/help-install/de/navi.html
new file mode 100644
index 0000000..29b0bb8
--- /dev/null
+++ b/themes/openSUSE/help-install/de/navi.html
@@ -0,0 +1 @@
+<p>Zurück zu <a href="#foobar">FOOBAR</a></p>
diff --git a/themes/openSUSE/help-install/el/main.html b/themes/openSUSE/help-install/el/main.html
new file mode 100644
index 0000000..b1a4c05
--- /dev/null
+++ b/themes/openSUSE/help-install/el/main.html
@@ -0,0 +1,103 @@
+<h3>
+<a name="main">Βοήθεια του Διαχειριστή Εκκίνησης</a>
+</h3>
+
+<p>
+Welcome to <em>@@@product@@@</em>
+</p>
+
+<p>
+Use this menu to select the desired function. If you have
+problems navigating in this help system, press
+<em>@@@fkey_help@@@</em> to enter the <a href="#help">περιγραφή</a> of the help
+system. The main functions in this menu are:
+</p>
+
+<p>
+<a href="#harddisk">Εκκίνηση από τον Σκληρό Δίσκο</a>: This selection will not do
+anything to the system. It only starts a previously installed
+operating system.
+</p>
+
+<p>
+<a href="#linux">Εγκατάσταση</a>:
+This installation mode works on most machines. If you experience a
+system freeze during boot or problems with detection of your hardware
+components, such as disk controllers or network cards, try one of the
+following installation options.
+</p>
+
+<p>
+<a href="#noacpi">Εγκατάσταση -- Το ACPI Απενεργοποιημένο</a>: Many of the
+currently-sold computers have incomplete or faulty ACPI
+implementations. This selection disables ACPI support in the
+kernel, but still enables many performance features, like DMA for IDE
+hard disks.
+</p>
+
+<p>
+<a href="#nolapic">Εγκατάσταση -- Το Τοπικό APIC είναι Απενεργοποιημένο</a>:
+If the normal installation fails, this might be due to the
+system hardware not supporting local APIC.
+If this seems to be the case, use this option to
+install without local APIC support.
+</p>
+
+<p>
+<a href="#failsafe">Εγκατάσταση -- Ασφαλείς Ρυθμίσεις </a>: If you were not
+successful with <em>Εγκατάσταση</em>, this selection might
+solve the issue.
+</p>
+
+<p>
+<a href="#rescue">Σύστημα Διάσωσης</a>: This boot image starts a small
+Linux system in RAM. This is useful if the system does not start properly.
+After booting this system, log in as root.
+</p>
+
+<p>
+<a href="#firmware">Δοκιμή Υπολογισμικού</a>: Runs a BIOS test tool that validates
+ACPI and other parts of your BIOS.
+</p>
+
+<p>
+<a href="#memtest">Έλεγχος Μνήμης</a>: Memory testing is useful for more than
+checking installation of new memory modules. It is a stress test
+for a big part of your computer system and may indicate hardware
+problems.
+</p>
+
+<p>
+<a href="#opt">Ρυθμίσεις Εκκίνησης</a>: The boot options may change the
+behavior of your system completely. They are settings for
+the kernel.
+</p>
+
+<p>
+<a href="#help">@@@fkey_help@@@ Help</a>: This is context sensitive. It will
+show different screens depending on the active element of the
+boot screen. There is also a description of this help system
+available.
+</p>
+
+<p>
+<a href="#keytable">@@@fkey_lang@@@</a>: Set language and keyboard mapping
+used by the boot loader.
+</p>
+
+<p>
+<a href="#videomode">@@@fkey_video@@@ Video Mode</a>: Here, choose between
+different screen resolutions while installing. If you encounter
+problems with the graphical installation, the <em>κατάσταση κειμένου</em> may
+be a work-around for you.
+</p>
+
+<p>
+<a href="#install_src">@@@fkey_inst@@@ Installation Source</a>: Choose the
+installation source.
+</p>
+
+<p>
+<a href="#driverupdate">@@@fkey_dud@@@ Driver Update</a>: For very new machines, a
+driver update may be needed to install the system.
+</p>
diff --git a/themes/openSUSE/help-install/el/main::bits.html b/themes/openSUSE/help-install/el/main::bits.html
new file mode 100644
index 0000000..9901988
--- /dev/null
+++ b/themes/openSUSE/help-install/el/main::bits.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="bits">Επιλογή Τύπου Λογισμικού</a>
+</h3>
+
+<p>
+You have the choice to install the 32-bit or 64-bit version of @@@product@@@.
+</p>
diff --git a/themes/openSUSE/help-install/el/main::driverupdate.html b/themes/openSUSE/help-install/el/main::driverupdate.html
new file mode 100644
index 0000000..089e233
--- /dev/null
+++ b/themes/openSUSE/help-install/el/main::driverupdate.html
@@ -0,0 +1,14 @@
+<h3>
+<a name="driverupdate">Ενημέρωση Οδηγού</a>
+</h3>
+
+<p>
+If you need a driver update floppy or CD-ROM, press <em>@@@fkey_dud@@@</em>. The
+boot loader asks you to insert the driver update medium after
+loading the Linux kernel.
+</p>
+
+<p>
+A driver update is typically a floppy with new versions of hardware
+drivers or bug fixes needed during installation.
+</p>
diff --git a/themes/openSUSE/help-install/el/main::failsafe.html b/themes/openSUSE/help-install/el/main::failsafe.html
new file mode 100644
index 0000000..5f5913f
--- /dev/null
+++ b/themes/openSUSE/help-install/el/main::failsafe.html
@@ -0,0 +1,11 @@
+<h3>
+<a name="failsafe">Εγκατάσταση -- Ασφαλείς Ρυθμίσεις </a>
+</h3>
+
+<p>
+Select <em>Εγκατάσταση -- Ασφαλείς Ρυθμίσεις </em> if you encounter hangs
+while installing or irreproducible errors. This option disables DMA
+for IDE drives and all power management features.
+See also the kernel options for <a href="#o_apm">apm</a>,
+<a href="#o_acpi">acpi</a> and <a href="#o_ide">ide</a>.
+</p>
diff --git a/themes/openSUSE/help-install/el/main::firmware.html b/themes/openSUSE/help-install/el/main::firmware.html
new file mode 100644
index 0000000..cbd601c
--- /dev/null
+++ b/themes/openSUSE/help-install/el/main::firmware.html
@@ -0,0 +1,9 @@
+<h3>
+<a name="firmware">Δοκιμή Υπολογισμικού</a>
+</h3>
+
+<p>
+Starts a BIOS checker that validates the ACPI tables
+and many other parts of your BIOS.
+Test results can be stored on usb disk or saved via network.
+</p>
diff --git a/themes/openSUSE/help-install/el/main::harddisk.html b/themes/openSUSE/help-install/el/main::harddisk.html
new file mode 100644
index 0000000..d69bb1c
--- /dev/null
+++ b/themes/openSUSE/help-install/el/main::harddisk.html
@@ -0,0 +1,16 @@
+<h3>
+<a name="harddisk">Εκκίνηση από τον Σκληρό Δίσκο</a>
+</h3>
+
+<p>
+Select <em>Εκκίνηση Εγκατεστημένου Λ.Σ.</em> to start the system installed on
+your local hard disk. This system must be installed properly, because
+only the MBR (Master Boot Record) on the first hard disk is started.
+The device ID of the first hard disk is provided by the BIOS of
+the computer.
+</p>
+
+<p>
+Use this if you forgot to remove the CD or DVD from your
+drive and want to start the computer from the hard disk.
+</p>
diff --git a/themes/openSUSE/help-install/el/main::help.html b/themes/openSUSE/help-install/el/main::help.html
new file mode 100644
index 0000000..61adfc6
--- /dev/null
+++ b/themes/openSUSE/help-install/el/main::help.html
@@ -0,0 +1,25 @@
+<h3>
+<a name="help">Χρήση του Συστήματος Βοήθειας</a>
+</h3>
+
+<p>
+The boot loader online help is context sensitive. It gives information
+about the selected menu item or, if you are editing boot options,
+it tries to look up information about the option in which the cursor is
+positioned.
+</p>
+
+<p>
+Navigation Keys
+<ul>
+ <li><em>Επάνω Βελάκι</em>: highlight previous link</li>
+ <li><em>Κάτω Βελάκι</em>: highlight next link</li>
+ <li><em>Αριστερό Βελάκι</em>, <em>Πισωγύρισμα</em>: return to previous topic</li>
+ <li><em>Δεξί Βελάκι</em>, <em>Εισαγωγή</em>, <em>Κενό</em>: follow link</li>
+ <li><em>Επάνω</em>: scroll up one page</li>
+ <li><em>Κάτω</em>: scroll down one page</li>
+ <li><em>Αρχή</em>: go to page start</li>
+ <li><em>Τέλος</em>: go to page end</li>
+ <li><em>Esc</em>: leave help</li>
+</ul>
+</p>
diff --git a/themes/openSUSE/help-install/el/main::install_src.html b/themes/openSUSE/help-install/el/main::install_src.html
new file mode 100644
index 0000000..77d7ae3
--- /dev/null
+++ b/themes/openSUSE/help-install/el/main::install_src.html
@@ -0,0 +1,12 @@
+<h3>
+<a name="install_src">Πηγή Εγκατάστασης</a>
+</h3>
+
+<p>
+Press <em>@@@fkey_inst@@@</em> to choose an installation source.
+</p>
+
+<p>
+This is the same as using the <a href="#o_install">εγκατάσταση</a>
+boot option.
+</p>
diff --git a/themes/openSUSE/help-install/el/main::keytable.html b/themes/openSUSE/help-install/el/main::keytable.html
new file mode 100644
index 0000000..cad1f3a
--- /dev/null
+++ b/themes/openSUSE/help-install/el/main::keytable.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="keytable">Επιλογή Γλώσσας και Διάταξης Πληκτρολογίου</a>
+</h3>
+
+<p>
+Press <em>@@@fkey_lang@@@</em> to change language and keyboard layout the boot loader uses.
+</p>
diff --git a/themes/openSUSE/help-install/el/main::linux.html b/themes/openSUSE/help-install/el/main::linux.html
new file mode 100644
index 0000000..82e1a58
--- /dev/null
+++ b/themes/openSUSE/help-install/el/main::linux.html
@@ -0,0 +1,10 @@
+<h3>
+<a name="linux">Εγκατάσταση</a>
+</h3>
+
+<p>
+Select <em>Εγκατάσταση</em> to start the default installation. The
+<a href="#opt">επιλογές εκκίνησης</a> entered are used in the
+start-up. This item activates many features of commonly available
+hardware.
+</p>
diff --git a/themes/openSUSE/help-install/el/main::memtest.html b/themes/openSUSE/help-install/el/main::memtest.html
new file mode 100644
index 0000000..f636667
--- /dev/null
+++ b/themes/openSUSE/help-install/el/main::memtest.html
@@ -0,0 +1,14 @@
+<h3>
+<a name="memtest">Έλεγχος Μνήμης</a>
+</h3>
+
+<p>
+The included <em>Έλεγχος Μνήμης</em> provides good possibilities to
+stress test the hardware of a system. Its main purpose is to detect
+broken RAM, but it also stresses many other parts of the system.
+</p>
+
+<p>
+There is no guarantee that the memory is good if no errors are
+found, although most of memory defects will be found.
+</p>
diff --git a/themes/openSUSE/help-install/el/main::noacpi.html b/themes/openSUSE/help-install/el/main::noacpi.html
new file mode 100644
index 0000000..4d2a188
--- /dev/null
+++ b/themes/openSUSE/help-install/el/main::noacpi.html
@@ -0,0 +1,24 @@
+<h3>
+<a name="noacpi">Εγκατάσταση -- Το ACPI Απενεργοποιημένο</a>
+</h3>
+
+<p>
+Current hardware usually requires ACPI (Advanced Configuration and Power Interface)
+to control the interrupt handling.
+ACPI completely replaces the old APM system.
+</p>
+
+<p>
+Select <em>Εγκατάσταση -- Το ACPI Απενεργοποιημένο</em> if you encounter
+problems during boot of the kernel. Known problems with machines that
+have problems with ACPI are:
+<ul>
+ <li>kernel freezes when booting</li>
+ <li>PCI Cards are not detected or initialized properly</li>
+</ul>
+</p>
+
+<p>
+You may also try the <a href="#firmware">Δοκιμή Υπολογισμικού</a> boot option
+and look at the test results of the ACPI validation.
+</p>
diff --git a/themes/openSUSE/help-install/el/main::nolapic.html b/themes/openSUSE/help-install/el/main::nolapic.html
new file mode 100644
index 0000000..606d392
--- /dev/null
+++ b/themes/openSUSE/help-install/el/main::nolapic.html
@@ -0,0 +1,14 @@
+<h3>
+<a name="nolapic">Εγκατάσταση -- Το Τοπικό APIC είναι Απενεργοποιημένο</a>
+</h3>
+
+<p>
+Normally there are no problems with the APIC (Advanced Programmable Interrupt
+Controller). But if you seem to have some, try this option to boot
+without local APIC support.
+</p>
+
+<p>
+Please don't confuse this with <a href="#noacpi">ACPI</a>
+(Advanced Configuration and Power Interface).
+</p>
diff --git a/themes/openSUSE/help-install/el/main::opt.html b/themes/openSUSE/help-install/el/main::opt.html
new file mode 100644
index 0000000..c0d89b1
--- /dev/null
+++ b/themes/openSUSE/help-install/el/main::opt.html
@@ -0,0 +1,28 @@
+<h3>
+<a name="opt">Ρυθμίσεις Εκκίνησης</a>
+</h3>
+
+<p>
+There are two types of boot options available. First, there are
+options that affect the installer. Second, there are kernel
+options. Some of the more common options are:
+</p>
+
+<p>
+a) installer options
+<ul>
+ <li><a href="#o_install">εγκατάσταση</a> -- select an installation source</li>
+ <li><a href="#network">επιλογές δικτύου</a> -- the network options</li>
+ <li><a href="#o_vnc">επιλογές vnc </a> -- options for installation via VNC</li>
+</ul>
+</p>
+
+<p>
+b) kernel options
+<ul>
+ <li><a href="#o_splash">αρχική οθόνη</a> -- influence the behavior of the splash screen</li>
+ <li><a href="#o_apm">apm</a> -- toggle power management</li>
+ <li><a href="#o_acpi">acpi</a> -- advanced configuration and power interface</li>
+ <li><a href="#o_ide">ide</a> -- control the IDE subsystem</li>
+</ul>
+</p>
diff --git a/themes/openSUSE/help-install/el/main::opt::network.html b/themes/openSUSE/help-install/el/main::opt::network.html
new file mode 100644
index 0000000..33a4e1c
--- /dev/null
+++ b/themes/openSUSE/help-install/el/main::opt::network.html
@@ -0,0 +1,35 @@
+<a name="o_hostip"/>
+<a name="o_netmask"/>
+<a name="o_gateway"/>
+
+<h3>
+<a name="network">Επιλογές Εγκατάστσαης: Επιλογές Δικτύου</a>
+</h3>
+
+<p>
+It is possible to configure the network interface right now. The
+hardware will be detected later by YaST2. The minimum set of options
+to configure your network card consists of host IP and netmask. For
+example:
+<ul>
+ <li>Διεύθυνση ΙΡ κόμβου=192.168.0.10 μάσκα δικτύου=255.255.255.0</li>
+</ul>
+</p>
+
+<p>
+or in a shorter form:
+<ul>
+ <li>Διεύθυνση ΙΡ κόμβου=192.168.0.10/24</li>
+</ul>
+</p>
+
+<p>
+If you specified a <a href="#o_install">εγκατάσταση μέσω δικτύου</a> and do
+not specify both of these options, the installer tries to configure
+the network interface with <em>dhcp</em>. If you need a default
+gateway, specify this with the option <em>πύλη</em>. For
+example:
+<ul>
+ <li>πύλη=192.168.0.8</li>
+</ul>
+</p>
diff --git a/themes/openSUSE/help-install/el/main::opt::o_acpi.html b/themes/openSUSE/help-install/el/main::opt::o_acpi.html
new file mode 100644
index 0000000..d11ee7e
--- /dev/null
+++ b/themes/openSUSE/help-install/el/main::opt::o_acpi.html
@@ -0,0 +1,23 @@
+<h3>
+<a name="o_acpi">Επιλογές Πυρήνα: acpi</a>
+</h3>
+
+<p>
+ACPI (Advanced Configuration and Power Interface) is a
+standard that defines power and configuration management interfaces
+between an operating system and the BIOS. By default, <em>acpi</em> is
+switched on when a BIOS is detected that is newer than from year
+2000. There are several commonly
+used parameters to control the behavior of ACPI:
+<ul>
+ <li><em>pci=noacpi</em> -- do not use ACPI to route PCI interrupts</li>
+ <li><em>acpi=oldboot</em> -- only the parts of ACPI that are relevant for booting remain activated</li>
+ <li><em>acpi=off</em> -- switch off ACPI completely</li>
+ <li><em>acpi=force</em> -- switch on ACPI even if your BIOS is dated before 2000</li>
+</ul>
+</p>
+
+<p>
+Especially on new computers, it replaces the old
+<a href="#o_apm">apm</a> system.
+</p>
diff --git a/themes/openSUSE/help-install/el/main::opt::o_apm.html b/themes/openSUSE/help-install/el/main::opt::o_apm.html
new file mode 100644
index 0000000..fb11a07
--- /dev/null
+++ b/themes/openSUSE/help-install/el/main::opt::o_apm.html
@@ -0,0 +1,21 @@
+<h3>
+<a name="o_apm">Επιλογές Πυρήνα: apm</a>
+</h3>
+
+<p>
+APM is one of the two power management strategies used on current
+computers. It is mainly used with laptops for functions like suspend
+to disk, but it may also be responsible for switching off the
+computer after power down. APM relies on a correct working BIOS. If
+the BIOS is broken, APM may have only limited use or even prevent the
+computer from working. Therefore, it may be switched off with the
+parameter
+<ul>
+ <li><em>apm=offapm=off</em> -- switch off APM completely</li>
+</ul>
+</p>
+
+<p>
+Some very new computers may take more advantage from the newer
+<a href="#o_acpi">ACPI</a>.
+</p>
diff --git a/themes/openSUSE/help-install/el/main::opt::o_ide.html b/themes/openSUSE/help-install/el/main::opt::o_ide.html
new file mode 100644
index 0000000..ad39a68
--- /dev/null
+++ b/themes/openSUSE/help-install/el/main::opt::o_ide.html
@@ -0,0 +1,12 @@
+<h3>
+<a name="o_ide">Επιλογές Πυρήνα: ide</a>
+</h3>
+
+<p>
+IDE is, unlike SCSI, commonly used in most desktop workstations.
+To circumvent some hardware problems that occur with IDE systems, use the
+kernel parameter:
+<ul>
+ <li><em>ide=nodma</em> -- switch off DMA for IDE drives</li>
+</ul>
+</p>
diff --git a/themes/openSUSE/help-install/el/main::opt::o_install.html b/themes/openSUSE/help-install/el/main::opt::o_install.html
new file mode 100644
index 0000000..dcdbcbc
--- /dev/null
+++ b/themes/openSUSE/help-install/el/main::opt::o_install.html
@@ -0,0 +1,30 @@
+<h3>
+<a name="o_install">Επιλογές Εγκατάστασης: εγκατάσταση</a>
+</h3>
+
+<p>
+By default, the local CD-ROMs are searched for the installation source.
+For a network install, select the
+<em>εγκατάσταση</em> option. Possible installation protocols are
+<ul>
+ <li>FTP</li>
+ <li>NFS</li>
+ <li>HTTP</li>
+</ul>
+</p>
+
+<p>
+The syntax to use is just like standard URLs. For example,
+if your server is found at 192.168.0.1 and you want to do an NFS-based
+install from the directory /install on this server, specify
+the source as follows:
+<ul>
+ <li>εγκατάσταση=nfs://192.168.0.1/install</li>
+</ul>
+</p>
+
+<p>
+The network card will either be configured with <em>dhcp</em> or you
+must specify the parameters yourself as described in the
+<a href="#network">επιλογές δικτύου</a>.
+</p>
diff --git a/themes/openSUSE/help-install/el/main::opt::o_splash.html b/themes/openSUSE/help-install/el/main::opt::o_splash.html
new file mode 100644
index 0000000..87cb02d
--- /dev/null
+++ b/themes/openSUSE/help-install/el/main::opt::o_splash.html
@@ -0,0 +1,12 @@
+<h3>
+<a name="o_splash">Επιλογές πυρήνα: αρχική οθόνη</a>
+</h3>
+
+<p>
+The splash screen is the picture shown during system start-up.
+<ul>
+ <li><em>splash=0</em> -- The splash screen is switched off. This may be useful with very old monitors or if some error occurs.</li>
+ <li><em>splase=verbose</em> -- Activates splash, kernel and boot messages are still shown.</li>
+ <li><em>splash=silent</em> -- Activates splash, but no messages. Instead a progress bar is drawn.</li>
+</ul>
+</p>
diff --git a/themes/openSUSE/help-install/el/main::opt::o_vnc.html b/themes/openSUSE/help-install/el/main::opt::o_vnc.html
new file mode 100644
index 0000000..bfddc4f
--- /dev/null
+++ b/themes/openSUSE/help-install/el/main::opt::o_vnc.html
@@ -0,0 +1,18 @@
+<a name="o_vncpassword"/>
+
+<h3>
+<a name="o_vnc">Επιλογές Εγκατάστασης: vnc</a>
+</h3>
+
+<p>
+To enable the VNC installation, specify the
+parameters vnc and vncpassword:
+<ul>
+ <li><em>vnc=1 κωδικός πρόσβασης vnc=παράδειγμα</em></li>
+</ul>
+</p>
+
+<p>
+The VNC server will be started and you may control YaST2 over any VNC
+client from a remote system.
+</p>
diff --git a/themes/openSUSE/help-install/el/main::rescue.html b/themes/openSUSE/help-install/el/main::rescue.html
new file mode 100644
index 0000000..fa15af2
--- /dev/null
+++ b/themes/openSUSE/help-install/el/main::rescue.html
@@ -0,0 +1,10 @@
+<h3>
+<a name="rescue">Σύστημα Διάσωσης</a>
+</h3>
+
+<p>
+The <em>Σύστημα Διάσωσης</em> is a small RAM disk base system. From there,
+it is possible to make all kinds of changes to an installed system. Because
+only low-level tools are available in this system, it is intended for
+experts.
+</p>
diff --git a/themes/openSUSE/help-install/el/main::videomode.html b/themes/openSUSE/help-install/el/main::videomode.html
new file mode 100644
index 0000000..91078fd
--- /dev/null
+++ b/themes/openSUSE/help-install/el/main::videomode.html
@@ -0,0 +1,18 @@
+<h3>
+<a name="videomode">Επιλογή Ρύθμισης Οθόνης</a>
+</h3>
+
+<p>
+Press <em>@@@fkey_video@@@</em> to get the list of video modes your graphics card
+supports. The highest mode your monitor can display is preselected.
+</p>
+
+<p>
+It is possible that your monitor cannot be detected automatically. In that
+case, select your preferred mode manually.
+</p>
+
+<p>
+If your system has problems with the graphics card during the
+installation, the <em>κατάσταση κειμένου</em> may be a usable work-around.
+</p>
diff --git a/themes/openSUSE/help-install/el/navi.html b/themes/openSUSE/help-install/el/navi.html
new file mode 100644
index 0000000..ce04575
--- /dev/null
+++ b/themes/openSUSE/help-install/el/navi.html
@@ -0,0 +1 @@
+<p>Επιστροφή στο <a href="#foobar">FOOBAR</a></p>
diff --git a/themes/openSUSE/help-install/en/main.html b/themes/openSUSE/help-install/en/main.html
new file mode 100644
index 0000000..e94a8d8
--- /dev/null
+++ b/themes/openSUSE/help-install/en/main.html
@@ -0,0 +1,103 @@
+<h3>
+<a name="main">Boot Loader Help</a>
+</h3>
+
+<p>
+Welcome to <em>@@@product@@@</em>
+</p>
+
+<p>
+Use this menu to select the desired function. If you have
+problems navigating in this help system, press
+<em>@@@fkey_help@@@</em> to enter the <a href="#help">description</a> of the help
+system. The main functions in this menu are:
+</p>
+
+<p>
+<a href="#harddisk">Boot from Hard Disk</a>: This selection will not do
+anything to the system. It only starts a previously installed
+operating system.
+</p>
+
+<p>
+<a href="#linux">Installation</a>:
+This installation mode works on most machines. If you experience a
+system freeze during boot or problems with detection of your hardware
+components, such as disk controllers or network cards, try one of the
+following installation options.
+</p>
+
+<p>
+<a href="#noacpi">Installation -- ACPI Disabled</a>: Many of the
+currently-sold computers have incomplete or faulty ACPI
+implementations. This selection disables ACPI support in the
+kernel, but still enables many performance features, like DMA for IDE
+hard disks.
+</p>
+
+<p>
+<a href="#nolapic">Installation -- Local APIC Disabled</a>:
+If the normal installation fails, this might be due to the
+system hardware not supporting local APIC.
+If this seems to be the case, use this option to
+install without local APIC support.
+</p>
+
+<p>
+<a href="#failsafe">Installation -- Safe Settings</a>: If you were not
+successful with <em>Installation</em>, this selection might
+solve the issue.
+</p>
+
+<p>
+<a href="#rescue">Rescue System</a>: This boot image starts a small
+Linux system in RAM. This is useful if the system does not start properly.
+After booting this system, log in as root.
+</p>
+
+<p>
+<a href="#firmware">Firmware Test</a>: Runs a BIOS test tool that validates
+ACPI and other parts of your BIOS.
+</p>
+
+<p>
+<a href="#memtest">Memory Test</a>: Memory testing is useful for more than
+checking installation of new memory modules. It is a stress test
+for a big part of your computer system and may indicate hardware
+problems.
+</p>
+
+<p>
+<a href="#opt">Boot Options</a>: The boot options may change the
+behavior of your system completely. They are settings for
+the kernel.
+</p>
+
+<p>
+<a href="#help">@@@fkey_help@@@ Help</a>: This is context sensitive. It will
+show different screens depending on the active element of the
+boot screen. There is also a description of this help system
+available.
+</p>
+
+<p>
+<a href="#keytable">@@@fkey_lang@@@</a>: Set language and keyboard mapping
+used by the boot loader.
+</p>
+
+<p>
+<a href="#videomode">@@@fkey_video@@@ Video Mode</a>: Here, choose between
+different screen resolutions while installing. If you encounter
+problems with the graphical installation, the <em>text mode</em> may
+be a work-around for you.
+</p>
+
+<p>
+<a href="#install_src">@@@fkey_inst@@@ Installation Source</a>: Choose the
+installation source.
+</p>
+
+<p>
+<a href="#driverupdate">@@@fkey_dud@@@ Driver Update</a>: For very new machines, a
+driver update may be needed to install the system.
+</p>
diff --git a/themes/openSUSE/help-install/en/main::bits.html b/themes/openSUSE/help-install/en/main::bits.html
new file mode 100644
index 0000000..3a389a8
--- /dev/null
+++ b/themes/openSUSE/help-install/en/main::bits.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="bits">Software Type Selection</a>
+</h3>
+
+<p>
+You have the choice to install the 32-bit or 64-bit version of @@@product@@@.
+</p>
diff --git a/themes/openSUSE/help-install/en/main::driverupdate.html b/themes/openSUSE/help-install/en/main::driverupdate.html
new file mode 100644
index 0000000..a26649b
--- /dev/null
+++ b/themes/openSUSE/help-install/en/main::driverupdate.html
@@ -0,0 +1,14 @@
+<h3>
+<a name="driverupdate">Driver Update</a>
+</h3>
+
+<p>
+If you need a driver update floppy or CD-ROM, press <em>@@@fkey_dud@@@</em>. The
+boot loader asks you to insert the driver update medium after
+loading the Linux kernel.
+</p>
+
+<p>
+A driver update is typically a floppy with new versions of hardware
+drivers or bug fixes needed during installation.
+</p>
diff --git a/themes/openSUSE/help-install/en/main::failsafe.html b/themes/openSUSE/help-install/en/main::failsafe.html
new file mode 100644
index 0000000..34a1d72
--- /dev/null
+++ b/themes/openSUSE/help-install/en/main::failsafe.html
@@ -0,0 +1,11 @@
+<h3>
+<a name="failsafe">Installation -- Safe Settings</a>
+</h3>
+
+<p>
+Select <em>Installation -- Safe Settings</em> if you encounter hangs
+while installing or irreproducible errors. This option disables DMA
+for IDE drives and all power management features.
+See also the kernel options for <a href="#o_apm">apm</a>,
+<a href="#o_acpi">acpi</a> and <a href="#o_ide">ide</a>.
+</p>
diff --git a/themes/openSUSE/help-install/en/main::firmware.html b/themes/openSUSE/help-install/en/main::firmware.html
new file mode 100644
index 0000000..da7d865
--- /dev/null
+++ b/themes/openSUSE/help-install/en/main::firmware.html
@@ -0,0 +1,9 @@
+<h3>
+<a name="firmware">Firmware Test</a>
+</h3>
+
+<p>
+Starts a BIOS checker that validates the ACPI tables
+and many other parts of your BIOS.
+Test results can be stored on usb disk or saved via network.
+</p>
diff --git a/themes/openSUSE/help-install/en/main::harddisk.html b/themes/openSUSE/help-install/en/main::harddisk.html
new file mode 100644
index 0000000..94753d8
--- /dev/null
+++ b/themes/openSUSE/help-install/en/main::harddisk.html
@@ -0,0 +1,16 @@
+<h3>
+<a name="harddisk">Boot from Hard Disk</a>
+</h3>
+
+<p>
+Select <em>Boot Installed OS</em> to start the system installed on
+your local hard disk. This system must be installed properly, because
+only the MBR (Master Boot Record) on the first hard disk is started.
+The device ID of the first hard disk is provided by the BIOS of
+the computer.
+</p>
+
+<p>
+Use this if you forgot to remove the CD or DVD from your
+drive and want to start the computer from the hard disk.
+</p>
diff --git a/themes/openSUSE/help-install/en/main::help.html b/themes/openSUSE/help-install/en/main::help.html
new file mode 100644
index 0000000..d7093f6
--- /dev/null
+++ b/themes/openSUSE/help-install/en/main::help.html
@@ -0,0 +1,25 @@
+<h3>
+<a name="help">Using the Help System</a>
+</h3>
+
+<p>
+The boot loader online help is context sensitive. It gives information
+about the selected menu item or, if you are editing boot options,
+it tries to look up information about the option in which the cursor is
+positioned.
+</p>
+
+<p>
+Navigation Keys
+<ul>
+ <li><em>Up Arrow</em>: highlight previous link</li>
+ <li><em>Down Arrow</em>: highlight next link</li>
+ <li><em>Left Arrow</em>, <em>Backspace</em>: return to previous topic</li>
+ <li><em>Right Arrow</em>, <em>Enter</em>, <em>Space</em>: follow link</li>
+ <li><em>Page Up</em>: scroll up one page</li>
+ <li><em>Page Down</em>: scroll down one page</li>
+ <li><em>Home</em>: go to page start</li>
+ <li><em>End</em>: go to page end</li>
+ <li><em>Esc</em>: leave help</li>
+</ul>
+</p>
diff --git a/themes/openSUSE/help-install/en/main::install_src.html b/themes/openSUSE/help-install/en/main::install_src.html
new file mode 100644
index 0000000..33b71c5
--- /dev/null
+++ b/themes/openSUSE/help-install/en/main::install_src.html
@@ -0,0 +1,12 @@
+<h3>
+<a name="install_src">Installation Source</a>
+</h3>
+
+<p>
+Press <em>@@@fkey_inst@@@</em> to choose an installation source.
+</p>
+
+<p>
+This is the same as using the <a href="#o_install">install</a>
+boot option.
+</p>
diff --git a/themes/openSUSE/help-install/en/main::keytable.html b/themes/openSUSE/help-install/en/main::keytable.html
new file mode 100644
index 0000000..91b9ab9
--- /dev/null
+++ b/themes/openSUSE/help-install/en/main::keytable.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="keytable">Language and Keyboard Layout Selection</a>
+</h3>
+
+<p>
+Press <em>@@@fkey_lang@@@</em> to change language and keyboard layout the boot loader uses.
+</p>
diff --git a/themes/openSUSE/help-install/en/main::linux.html b/themes/openSUSE/help-install/en/main::linux.html
new file mode 100644
index 0000000..e5efef4
--- /dev/null
+++ b/themes/openSUSE/help-install/en/main::linux.html
@@ -0,0 +1,10 @@
+<h3>
+<a name="linux">Installation</a>
+</h3>
+
+<p>
+Select <em>Installation</em> to start the default installation. The
+<a href="#opt">boot options</a> entered are used in the
+start-up. This item activates many features of commonly available
+hardware.
+</p>
diff --git a/themes/openSUSE/help-install/en/main::memtest.html b/themes/openSUSE/help-install/en/main::memtest.html
new file mode 100644
index 0000000..6127b06
--- /dev/null
+++ b/themes/openSUSE/help-install/en/main::memtest.html
@@ -0,0 +1,14 @@
+<h3>
+<a name="memtest">Memory Test</a>
+</h3>
+
+<p>
+The included <em>Memory Test</em> provides good possibilities to
+stress test the hardware of a system. Its main purpose is to detect
+broken RAM, but it also stresses many other parts of the system.
+</p>
+
+<p>
+There is no guarantee that the memory is good if no errors are
+found, although most of memory defects will be found.
+</p>
diff --git a/themes/openSUSE/help-install/en/main::noacpi.html b/themes/openSUSE/help-install/en/main::noacpi.html
new file mode 100644
index 0000000..8f33b45
--- /dev/null
+++ b/themes/openSUSE/help-install/en/main::noacpi.html
@@ -0,0 +1,24 @@
+<h3>
+<a name="noacpi">Installation -- ACPI Disabled</a>
+</h3>
+
+<p>
+Current hardware usually requires ACPI (Advanced Configuration and Power Interface)
+to control the interrupt handling.
+ACPI completely replaces the old APM system.
+</p>
+
+<p>
+Select <em>Installation -- ACPI Disabled</em> if you encounter
+problems during boot of the kernel. Known problems with machines that
+have problems with ACPI are:
+<ul>
+ <li>kernel freezes when booting</li>
+ <li>PCI Cards are not detected or initialized properly</li>
+</ul>
+</p>
+
+<p>
+You may also try the <a href="#firmware">Firmware Test</a> boot option
+and look at the test results of the ACPI validation.
+</p>
diff --git a/themes/openSUSE/help-install/en/main::nolapic.html b/themes/openSUSE/help-install/en/main::nolapic.html
new file mode 100644
index 0000000..c80f010
--- /dev/null
+++ b/themes/openSUSE/help-install/en/main::nolapic.html
@@ -0,0 +1,14 @@
+<h3>
+<a name="nolapic">Installation -- Local APIC Disabled</a>
+</h3>
+
+<p>
+Normally there are no problems with the APIC (Advanced Programmable Interrupt
+Controller). But if you seem to have some, try this option to boot
+without local APIC support.
+</p>
+
+<p>
+Please don't confuse this with <a href="#noacpi">ACPI</a>
+(Advanced Configuration and Power Interface).
+</p>
diff --git a/themes/openSUSE/help-install/en/main::opt.html b/themes/openSUSE/help-install/en/main::opt.html
new file mode 100644
index 0000000..903fe7a
--- /dev/null
+++ b/themes/openSUSE/help-install/en/main::opt.html
@@ -0,0 +1,28 @@
+<h3>
+<a name="opt">Boot Options</a>
+</h3>
+
+<p>
+There are two types of boot options available. First, there are
+options that affect the installer. Second, there are kernel
+options. Some of the more common options are:
+</p>
+
+<p>
+a) installer options
+<ul>
+ <li><a href="#o_install">install</a> -- select an installation source</li>
+ <li><a href="#network">network options</a> -- the network options</li>
+ <li><a href="#o_vnc">vnc options</a> -- options for installation via VNC</li>
+</ul>
+</p>
+
+<p>
+b) kernel options
+<ul>
+ <li><a href="#o_splash">splash</a> -- influence the behavior of the splash screen</li>
+ <li><a href="#o_apm">apm</a> -- toggle power management</li>
+ <li><a href="#o_acpi">acpi</a> -- advanced configuration and power interface</li>
+ <li><a href="#o_ide">ide</a> -- control the IDE subsystem</li>
+</ul>
+</p>
diff --git a/themes/openSUSE/help-install/en/main::opt::network.html b/themes/openSUSE/help-install/en/main::opt::network.html
new file mode 100644
index 0000000..da8541a
--- /dev/null
+++ b/themes/openSUSE/help-install/en/main::opt::network.html
@@ -0,0 +1,35 @@
+<a name="o_hostip"/>
+<a name="o_netmask"/>
+<a name="o_gateway"/>
+
+<h3>
+<a name="network">Installer Options: Network Options</a>
+</h3>
+
+<p>
+It is possible to configure the network interface right now. The
+hardware will be detected later by YaST2. The minimum set of options
+to configure your network card consists of host IP and netmask. For
+example:
+<ul>
+ <li>hostip=192.168.0.10 netmask=255.255.255.0</li>
+</ul>
+</p>
+
+<p>
+or in a shorter form:
+<ul>
+ <li>hostip=192.168.0.10/24</li>
+</ul>
+</p>
+
+<p>
+If you specified a <a href="#o_install">network-based install</a> and do
+not specify both of these options, the installer tries to configure
+the network interface with <em>dhcp</em>. If you need a default
+gateway, specify this with the option <em>gateway</em>. For
+example:
+<ul>
+ <li>gateway=192.168.0.8</li>
+</ul>
+</p>
diff --git a/themes/openSUSE/help-install/en/main::opt::o_acpi.html b/themes/openSUSE/help-install/en/main::opt::o_acpi.html
new file mode 100644
index 0000000..2991c6c
--- /dev/null
+++ b/themes/openSUSE/help-install/en/main::opt::o_acpi.html
@@ -0,0 +1,23 @@
+<h3>
+<a name="o_acpi">Kernel Options: acpi</a>
+</h3>
+
+<p>
+ACPI (Advanced Configuration and Power Interface) is a
+standard that defines power and configuration management interfaces
+between an operating system and the BIOS. By default, <em>acpi</em> is
+switched on when a BIOS is detected that is newer than from year
+2000. There are several commonly
+used parameters to control the behavior of ACPI:
+<ul>
+ <li><em>pci=noacpi</em> -- do not use ACPI to route PCI interrupts</li>
+ <li><em>acpi=oldboot</em> -- only the parts of ACPI that are relevant for booting remain activated</li>
+ <li><em>acpi=off</em> -- switch off ACPI completely</li>
+ <li><em>acpi=force</em> -- switch on ACPI even if your BIOS is dated before 2000</li>
+</ul>
+</p>
+
+<p>
+Especially on new computers, it replaces the old
+<a href="#o_apm">apm</a> system.
+</p>
diff --git a/themes/openSUSE/help-install/en/main::opt::o_apm.html b/themes/openSUSE/help-install/en/main::opt::o_apm.html
new file mode 100644
index 0000000..6a7f1a0
--- /dev/null
+++ b/themes/openSUSE/help-install/en/main::opt::o_apm.html
@@ -0,0 +1,21 @@
+<h3>
+<a name="o_apm">Kernel Options: apm</a>
+</h3>
+
+<p>
+APM is one of the two power management strategies used on current
+computers. It is mainly used with laptops for functions like suspend
+to disk, but it may also be responsible for switching off the
+computer after power down. APM relies on a correct working BIOS. If
+the BIOS is broken, APM may have only limited use or even prevent the
+computer from working. Therefore, it may be switched off with the
+parameter
+<ul>
+ <li><em>apm=off</em> -- switch off APM completely</li>
+</ul>
+</p>
+
+<p>
+Some very new computers may take more advantage from the newer
+<a href="#o_acpi">ACPI</a>.
+</p>
diff --git a/themes/openSUSE/help-install/en/main::opt::o_ide.html b/themes/openSUSE/help-install/en/main::opt::o_ide.html
new file mode 100644
index 0000000..0d95eb4
--- /dev/null
+++ b/themes/openSUSE/help-install/en/main::opt::o_ide.html
@@ -0,0 +1,12 @@
+<h3>
+<a name="o_ide">Kernel Options: ide</a>
+</h3>
+
+<p>
+IDE is, unlike SCSI, commonly used in most desktop workstations.
+To circumvent some hardware problems that occur with IDE systems, use the
+kernel parameter:
+<ul>
+ <li><em>ide=nodma</em> -- switch off DMA for IDE drives</li>
+</ul>
+</p>
diff --git a/themes/openSUSE/help-install/en/main::opt::o_install.html b/themes/openSUSE/help-install/en/main::opt::o_install.html
new file mode 100644
index 0000000..cbcc6cf
--- /dev/null
+++ b/themes/openSUSE/help-install/en/main::opt::o_install.html
@@ -0,0 +1,30 @@
+<h3>
+<a name="o_install">Installer Options: install</a>
+</h3>
+
+<p>
+By default, the local CD-ROMs are searched for the installation source.
+For a network install, select the
+<em>install</em> option. Possible installation protocols are
+<ul>
+ <li>FTP</li>
+ <li>NFS</li>
+ <li>HTTP</li>
+</ul>
+</p>
+
+<p>
+The syntax to use is just like standard URLs. For example,
+if your server is found at 192.168.0.1 and you want to do an NFS-based
+install from the directory /install on this server, specify
+the source as follows:
+<ul>
+ <li>install=nfs://192.168.0.1/install</li>
+</ul>
+</p>
+
+<p>
+The network card will either be configured with <em>dhcp</em> or you
+must specify the parameters yourself as described in the
+<a href="#network">network options</a>.
+</p>
diff --git a/themes/openSUSE/help-install/en/main::opt::o_splash.html b/themes/openSUSE/help-install/en/main::opt::o_splash.html
new file mode 100644
index 0000000..3028141
--- /dev/null
+++ b/themes/openSUSE/help-install/en/main::opt::o_splash.html
@@ -0,0 +1,12 @@
+<h3>
+<a name="o_splash">Kernel Options: splash</a>
+</h3>
+
+<p>
+The splash screen is the picture shown during system start-up.
+<ul>
+ <li><em>splash=0</em> -- The splash screen is switched off. This may be useful with very old monitors or if some error occurs.</li>
+ <li><em>splash=verbose</em> -- Activates splash, kernel and boot messages are still shown.</li>
+ <li><em>splash=silent</em> -- Activates splash, but no messages. Instead a progress bar is drawn.</li>
+</ul>
+</p>
diff --git a/themes/openSUSE/help-install/en/main::opt::o_vnc.html b/themes/openSUSE/help-install/en/main::opt::o_vnc.html
new file mode 100644
index 0000000..c303c2f
--- /dev/null
+++ b/themes/openSUSE/help-install/en/main::opt::o_vnc.html
@@ -0,0 +1,18 @@
+<a name="o_vncpassword"/>
+
+<h3>
+<a name="o_vnc">Installer Options: vnc</a>
+</h3>
+
+<p>
+To enable the VNC installation, specify the
+parameters vnc and vncpassword:
+<ul>
+ <li><em>vnc=1 vncpassword=example</em></li>
+</ul>
+</p>
+
+<p>
+The VNC server will be started and you may control YaST2 over any VNC
+client from a remote system.
+</p>
diff --git a/themes/openSUSE/help-install/en/main::rescue.html b/themes/openSUSE/help-install/en/main::rescue.html
new file mode 100644
index 0000000..cdd8362
--- /dev/null
+++ b/themes/openSUSE/help-install/en/main::rescue.html
@@ -0,0 +1,10 @@
+<h3>
+<a name="rescue">Rescue System</a>
+</h3>
+
+<p>
+The <em>Rescue System</em> is a small RAM disk base system. From there,
+it is possible to make all kinds of changes to an installed system. Because
+only low-level tools are available in this system, it is intended for
+experts.
+</p>
diff --git a/themes/openSUSE/help-install/en/main::videomode.html b/themes/openSUSE/help-install/en/main::videomode.html
new file mode 100644
index 0000000..fa98ca3
--- /dev/null
+++ b/themes/openSUSE/help-install/en/main::videomode.html
@@ -0,0 +1,18 @@
+<h3>
+<a name="videomode">Video Mode Selection</a>
+</h3>
+
+<p>
+Press <em>@@@fkey_video@@@</em> to get the list of video modes your graphics card
+supports. The highest mode your monitor can display is preselected.
+</p>
+
+<p>
+It is possible that your monitor cannot be detected automatically. In that
+case, select your preferred mode manually.
+</p>
+
+<p>
+If your system has problems with the graphics card during the
+installation, the <em>text mode</em> may be a usable work-around.
+</p>
diff --git a/themes/openSUSE/help-install/en/navi.html b/themes/openSUSE/help-install/en/navi.html
new file mode 100644
index 0000000..b4f8211
--- /dev/null
+++ b/themes/openSUSE/help-install/en/navi.html
@@ -0,0 +1,3 @@
+<p>
+Return to <a href="#foobar">FOOBAR</a>
+</p>
diff --git a/themes/openSUSE/help-install/es/main.html b/themes/openSUSE/help-install/es/main.html
new file mode 100644
index 0000000..60c8a0a
--- /dev/null
+++ b/themes/openSUSE/help-install/es/main.html
@@ -0,0 +1,35 @@
+<h3>
+<a name="main">Ayuda del cargador de arranque</a>
+</h3>
+
+<p>Bienvenido a <em>@@@product@@@</em></p>
+
+<p>Utilice este menú para seleccionar la función deseada. Si tiene problemas para desplazarse por este sistema de ayuda, pulse <em>@@@fkey_help@@@</em> para acceder a la <a href="#help">descripción</a> del sistema de ayuda. Las funciones principales de este menú son:</p>
+
+<p><a href="#harddisk">Arrancar desde disco duro</a>: Esta selección no hará nada en el sistema. Sólo iniciará un sistema operativo instalado previamente.</p>
+
+<p><a href="#linux">Instalación</a>: Este modo de instalación funciona en la mayoría de los equipos. Si experimenta un bloqueo del sistema durante el arranque o problemas a la hora de detectar los componentes de hardware, como los controladores de disco o las tarjetas de red, pruebe una de las siguientes opciones de instalación.</p>
+
+<p><a href="#noacpi">Instalación -- ACPI Inhabilitado</a>: Muchos de los equipos que se venden actualmente cuentan con implementaciones de ACPI incompletas o erróneas. Esta opción inhabilita la compatibilidad con ACPI del kernel, pero mantiene habilitadas muchas de las funciones de rendimiento, como DMA para los discos duros IDE.</p>
+
+<p><a href="#nolapic">Instalación -- APIC local Inhabilitado</a>: Si la instalación normal no se lleva a cabo correctamente, puede deberse a que el hardware del sistema no sea compatible con APIC local. Si cree este sea el caso, utilice esta opción para instalar sin compatibilidad con APIC local.</p>
+
+<p><a href="#failsafe">Instalación -- Ajustes seguros</a>: Si no ha tenido éxito con <em>Instalación</em>, esta selección puede que resuelva el problema.</p>
+
+<p><a href="#rescue">Sistema de rescate</a>: Esta imagen de arranque inicia un pequeño sistema Linux en RAM, lo que resulta útil si el sistema no se inicia correctamente. Tras arrancar este sistema, se debe iniciar sesión como usuario root.</p>
+
+<p><a href="#firmware">Prueba de firmware</a>: Ejecute la herramienta de prueba de la BIOS para comprobar ACPI y otras partes de su BIOS.</p>
+
+<p><a href="#memtest">Prueba de memoria</a>: La prueba de la memoria resulta útil no sólo para comprobar la instalación de nuevos módulos de memoria. Se trata de una prueba de carga de gran parte del sistema y puede poner de manifiesto otros problemas de hardware.</p>
+
+<p><a href="#opt">Opciones de arranque</a>: Las opciones de arranque pueden cambiar por completo el comportamiento del sistema. Se tratan de ajustes para el kernel.</p>
+
+<p><a href="#help">@@@fkey_help@@@ Ayuda</a>: Es sensible al contexto. Muestra distintas pantallas según el elemento activo de la pantalla de arranque. También hay disponible una descripción de este sistema de ayuda.</p>
+
+<p><a href="#keytable">@@@fkey_lang@@@</a>: Defina el idioma y la distribución del teclado que utilizará el cargador de arranque.</p>
+
+<p><a href="#videomode">@@@fkey_video@@@ Modo de vídeo</a>: Aquí debe elegir entre varias resoluciones de pantalla durante la instalación. Si se producen problemas con la instalación gráfica, puede que la opción <em>modo de texto</em> sirva de solución.</p>
+
+<p><a href="#install_src">@@@fkey_inst@@@ Fuente de instalación</a>: Elija el origen de instalación.</p>
+
+<p><a href="#driverupdate">@@@fkey_dud@@@ Actualización de controladores</a>: En los equipos muy nuevos, puede que se necesite una actualización de controladores para instalar el sistema.</p>
diff --git a/themes/openSUSE/help-install/es/main::bits.html b/themes/openSUSE/help-install/es/main::bits.html
new file mode 100644
index 0000000..467c29c
--- /dev/null
+++ b/themes/openSUSE/help-install/es/main::bits.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="bits">Selección de tipo de software</a>
+</h3>
+
+<p>Tiene la opción de instalar la versión de 32 bits o de 64 bits de @@@product@@@.</p>
diff --git a/themes/openSUSE/help-install/es/main::driverupdate.html b/themes/openSUSE/help-install/es/main::driverupdate.html
new file mode 100644
index 0000000..8423bd7
--- /dev/null
+++ b/themes/openSUSE/help-install/es/main::driverupdate.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="driverupdate">Actualización de controladores</a>
+</h3>
+
+<p>Si necesita un disquete o un CD-ROM de actualización de controladores, pulse <em>@@@fkey_dud@@@</em>. El cargador de arranque le pedirá que introduzca el medio de actualización de controladores tras cargar el kernel de Linux.</p>
+
+<p>Las actualizaciones del controlador suelen ser disquetes con versiones recientes de los controladores del hardware o con correcciones de errores necesarios durante la instalación.</p>
diff --git a/themes/openSUSE/help-install/es/main::failsafe.html b/themes/openSUSE/help-install/es/main::failsafe.html
new file mode 100644
index 0000000..5060017
--- /dev/null
+++ b/themes/openSUSE/help-install/es/main::failsafe.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="failsafe">Instalación -- Ajustes seguros</a>
+</h3>
+
+<p>Seleccione <em>Instalación -- Ajustes seguros</em> si se producen bloqueos o errores irreproducibles durante la instalación. Esta opción inhabilita DMA para las unidades IDE y todas las funciones de gestión de la energía. Consulte también las opciones del kernel para <a href="#o_apm">apm</a>, <a href="#o_acpi">acpi</a> y <a href="#o_ide">ide</a>.</p>
diff --git a/themes/openSUSE/help-install/es/main::firmware.html b/themes/openSUSE/help-install/es/main::firmware.html
new file mode 100644
index 0000000..bb3958e
--- /dev/null
+++ b/themes/openSUSE/help-install/es/main::firmware.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="firmware">Prueba de firmware</a>
+</h3>
+
+<p>Inicia una comprobación de la BIOS que comprueba las tablas ACPI y muchas otras partes de la BIOS. Los resultados de la prueba se pueden almacenar en un disco USB o almacenarse en una ubicación de red.</p>
diff --git a/themes/openSUSE/help-install/es/main::harddisk.html b/themes/openSUSE/help-install/es/main::harddisk.html
new file mode 100644
index 0000000..102b2a6
--- /dev/null
+++ b/themes/openSUSE/help-install/es/main::harddisk.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="harddisk">Arrancar desde disco duro</a>
+</h3>
+
+<p>Seleccione <em>Arrancar SO instalado</em> para iniciar el sistema instalado en el disco duro local. Este sistema se debe instalar de forma correcta, ya que sólo se inicia el MBR (sector de inicio principal) del primer disco duro. El ID de dispositivo del primer disco duro lo proporciona el BIOS del equipo.</p>
+
+<p>Utilice esto si olvida retirar el CD o el DVD de la unidad y desea iniciar el equipo desde el disco duro.</p>
diff --git a/themes/openSUSE/help-install/es/main::help.html b/themes/openSUSE/help-install/es/main::help.html
new file mode 100644
index 0000000..26a4510
--- /dev/null
+++ b/themes/openSUSE/help-install/es/main::help.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="help">Uso del sistema de ayuda</a>
+</h3>
+
+<p>La ayuda en línea del cargador de arranque es contextual. Proporciona información sobre el elemento de menú seleccionado o, si se están modificando las opciones de arranque, intenta buscar información sobre la opción en la que está situado el cursor.</p>
+
+<p>Teclas de navegación <ul><li><em>Flecha arriba</em>: resaltar el enlace anterior</li><li><em>Flecha abajo</em>: resaltar el enlace siguiente</li><li><em>Flecha a la izquierda</em>, <em>Retroceso</em>: volver al apartado anterior</li><li><em>Flecha a la derecha</em>, <em>Intro</em>, <em>Espacio</em>: seguir el enlace</li><li><em>Re Pág</em>: subir una página</li><li><em>Av Pág</em>: bajar una página</li><li><em>Inicio</em>: ir al inicio de la página</li><li><em>Fin</em>: ir al final de la página</li><li><em>Esc</em>: salir de la ayuda</li></ul></p>
diff --git a/themes/openSUSE/help-install/es/main::install_src.html b/themes/openSUSE/help-install/es/main::install_src.html
new file mode 100644
index 0000000..308135b
--- /dev/null
+++ b/themes/openSUSE/help-install/es/main::install_src.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="install_src">Fuente de instalación</a>
+</h3>
+
+<p>Pulse <em>@@@fkey_inst@@@</em> para seleccionar un origen de instalación.</p>
+
+<p>Esto es similar a usar la opción de arranque <a href="#o_install">instalar</a>.</p>
diff --git a/themes/openSUSE/help-install/es/main::keytable.html b/themes/openSUSE/help-install/es/main::keytable.html
new file mode 100644
index 0000000..e6a588a
--- /dev/null
+++ b/themes/openSUSE/help-install/es/main::keytable.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="keytable">Selección de idioma y distribución de teclado</a>
+</h3>
+
+<p>Pulse <em>@@@fkey_lang@@@</em> para cambiar el idioma y la distribución del teclado que utilizará el cargador de arranque.</p>
diff --git a/themes/openSUSE/help-install/es/main::linux.html b/themes/openSUSE/help-install/es/main::linux.html
new file mode 100644
index 0000000..9750521
--- /dev/null
+++ b/themes/openSUSE/help-install/es/main::linux.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="linux">Instalación</a>
+</h3>
+
+<p>Seleccione <em>Instalación</em> para iniciar la instalación por defecto. El valor <a href="#opt">opciones de arranque</a> introducido se utiliza durante el inicio. Este elemento activa muchas funciones del hardware disponible habitualmente.</p>
diff --git a/themes/openSUSE/help-install/es/main::memtest.html b/themes/openSUSE/help-install/es/main::memtest.html
new file mode 100644
index 0000000..0afad0c
--- /dev/null
+++ b/themes/openSUSE/help-install/es/main::memtest.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="memtest">Prueba de memoria</a>
+</h3>
+
+<p>El <em>Prueba de memoria</em> incluido ofrece muchas posibilidades de realizar una prueba de carga del hardware de un sistema. Su objetivo principal es detectar RAM dañada, pero también analiza muchas otras partes del sistema.</p>
+
+<p>No existen garantías de que la memoria no tenga problemas si no se encuentran errores, aunque se detectarán la mayoría de los defectos de memoria.</p>
diff --git a/themes/openSUSE/help-install/es/main::noacpi.html b/themes/openSUSE/help-install/es/main::noacpi.html
new file mode 100644
index 0000000..163a0cf
--- /dev/null
+++ b/themes/openSUSE/help-install/es/main::noacpi.html
@@ -0,0 +1,9 @@
+<h3>
+<a name="noacpi">Instalación -- ACPI Inhabilitado</a>
+</h3>
+
+<p>El hardware actual generalmente necesita ACPI para controlar la gestión de interrupciones. ACPI sustituye por completo el antiguo sistema APM.</p>
+
+<p>Seleccione <em>Instalación -- ACPI Inhabilitado</em> si encuentra problemas durante el arranque del kernel. Estos son algunos de los problemas conocidos de los equipos que presentan problemas con ACPI: <ul><li>El kernel se bloquea durante el arranque</li><li>Las tarjetas PCI no se detectan o no se inician correctamente</li></ul></p>
+
+<p>Puede intentar también la opción de arranque <a href="#firmware">Prueba de firmware</a> y revisar los resultados del la prueba de arranque de la comprobación de ACPI.</p>
diff --git a/themes/openSUSE/help-install/es/main::nolapic.html b/themes/openSUSE/help-install/es/main::nolapic.html
new file mode 100644
index 0000000..f2e7289
--- /dev/null
+++ b/themes/openSUSE/help-install/es/main::nolapic.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="nolapic">Instalación -- APIC local Inhabilitado</a>
+</h3>
+
+<p>Normalmente no se producen problemas con APIC (controlador avanzado de interrupciones programables). No obstante, si cree que sufre alguno, intente que esta opción arranque sin compatibilidad APIC local.</p>
+
+<p>No confunda esto con <a href="#noacpi">ACPI</a> (Interfaz avanzada de configuración y energía (ACPI))</p>
diff --git a/themes/openSUSE/help-install/es/main::opt.html b/themes/openSUSE/help-install/es/main::opt.html
new file mode 100644
index 0000000..799e153
--- /dev/null
+++ b/themes/openSUSE/help-install/es/main::opt.html
@@ -0,0 +1,9 @@
+<h3>
+<a name="opt">Opciones de arranque</a>
+</h3>
+
+<p>Hay dos tipos de opciones de arranque disponibles. En primer lugar, hay opciones que afectan al instalador. Por otro lado, existen opciones del kernel. Estas son algunas de las opciones más comunes:</p>
+
+<p>a) opciones del instalador<ul><li><a href="#o_install">instalar</a> -- seleccionar un origen de instalación</li><li><a href="#network">opciones de red</a> -- las opciones de red</li><li><a href="#o_vnc">opciones VNC</a> -- opciones para la instalación mediante VNC</li></ul></p>
+
+<p>b) opciones del kernel <ul><li><a href="#o_splash">pantalla inicial</a> -- influye en el comportamiento de la pantalla inicial</li><li><a href="#o_apm">apm</a> -- alterna la gestión de la energía</li><li><a href="#o_acpi">acpi</a> -- interfaz avanzada de configuración y energía (ACPI)</li><li><a href="#o_ide">ide</a> -- controla el subsistema IDE</li></ul></p>
diff --git a/themes/openSUSE/help-install/es/main::opt::network.html b/themes/openSUSE/help-install/es/main::opt::network.html
new file mode 100644
index 0000000..37ae126
--- /dev/null
+++ b/themes/openSUSE/help-install/es/main::opt::network.html
@@ -0,0 +1,13 @@
+<a name="o_hostip"/>
+<a name="o_netmask"/>
+<a name="o_gateway"/>
+
+<h3>
+<a name="network">Opciones del instalador: opciones de red</a>
+</h3>
+
+<p>Es posible configurar la interfaz de red ahora. YaST2 detectará el hardware posteriormente. El conjunto de opciones mínimo para configurar la tarjeta de red incluye la IP del host y la máscara de red. Por ejemplo: <ul><li>hostip=192.168.0.10 netmask=255.255.255.0</li></ul></p>
+
+<p>en más corto: <ul><li>hostip=192.168.0.10/24</li></ul></p>
+
+<p>Si se indica un <a href="#o_install">instalación basada en red</a> pero no se especifican estas dos opciones, el instalador intentará configurar la interfaz de red con <em>DHCP</em>. Si se necesita una pasarela (gateway) por defecto, establezca la opción <em>pasarela</em>. Por ejemplo: <ul><li>gateway=192.168.0.8</li></ul></p>
diff --git a/themes/openSUSE/help-install/es/main::opt::o_acpi.html b/themes/openSUSE/help-install/es/main::opt::o_acpi.html
new file mode 100644
index 0000000..5088859
--- /dev/null
+++ b/themes/openSUSE/help-install/es/main::opt::o_acpi.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="o_acpi">Opciones del kernel: acpi</a>
+</h3>
+
+<p>ACPI (interfaz avanzada de configuración y energía) es un estándar que define las interfaces de gestión de la configuración y la energía entre un sistema operativo y la BIOS. Por defecto, <em>acpi</em> se activa cuando se detecta que la BIOS es posterior al año 2000. Habitualmente, se utilizan varios parámetros para controlar el comportamiento de ACPI: <ul><li><em>pci=noacpi</em> -- no utiliza ACPI para asignar las interrupciones PCI</li><li><em>acpi=oldboot</em> -- sólo permanecen activadas las partes de ACPI que son importantes para el arranque</li><li><em>acpi=off</em> -- desactiva ACPI por completo</li><li><em>acpi=force</em> -- activa ACPI incluso si la BIOS es anterior al año 2000</li></ul></p>
+
+<p>Especialmente en equipos nuevos, sustituye al antiguo sistema <a href="#o_apm">apm</a>.</p>
diff --git a/themes/openSUSE/help-install/es/main::opt::o_apm.html b/themes/openSUSE/help-install/es/main::opt::o_apm.html
new file mode 100644
index 0000000..b88f1ed
--- /dev/null
+++ b/themes/openSUSE/help-install/es/main::opt::o_apm.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="o_apm">Opciones del kernel: apm</a>
+</h3>
+
+<p>APM es una de las dos estrategias de gestión de la energía que se utiliza en los equipos actuales. Se utiliza principalmente en portátiles para funciones como la suspensión a disco, pero también puede ser responsable de apagar el equipo cuando se corta la alimentación. APM se fundamenta en un funcionamiento correcto de la BIOS. Si la BIOS está dañada, puede que APM tenga un uso limitado, o que incluso impida que el equipo funcione. Por lo tanto, puede ser necesario desactivarlo con el parámetro <ul><li><em>apm=off</em> -- desactiva ACPI por completo</li></ul></p>
+
+<p>Algunos equipos muy nuevos pueden aprovechar mejor el <a href="#o_acpi">ACPI</a> más reciente.</p>
diff --git a/themes/openSUSE/help-install/es/main::opt::o_ide.html b/themes/openSUSE/help-install/es/main::opt::o_ide.html
new file mode 100644
index 0000000..bfa1b9e
--- /dev/null
+++ b/themes/openSUSE/help-install/es/main::opt::o_ide.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="o_ide">Opciones del kernel: ide</a>
+</h3>
+
+<p>IDE, a diferencia de SCSI, se utiliza en la mayoría de las estaciones de trabajo de escritorio. Para evitar algunos problemas de hardware que se producen con los sistemas IDE, utilice el parámetro del kernel: <ul><li><em>ide=nodma</em> -- desactiva DMA para las unidades IDE</li></ul></p>
diff --git a/themes/openSUSE/help-install/es/main::opt::o_install.html b/themes/openSUSE/help-install/es/main::opt::o_install.html
new file mode 100644
index 0000000..02a42b1
--- /dev/null
+++ b/themes/openSUSE/help-install/es/main::opt::o_install.html
@@ -0,0 +1,9 @@
+<h3>
+<a name="o_install">Opciones del instalador: instalar</a>
+</h3>
+
+<p>Por defecto, se busca el origen de la instalación en las unidades de CD-ROM locales. Para realizar una instalación desde la red, seleccione la opción <em>instalar</em>. Los protocolos de instalación posibles son <ul><li>FTP</li><li>NFS</li><li>HTTP</li></ul></p>
+
+<p>Se debe utilizar la misma sintaxis que para las URL usuales. Por ejemplo, si el servidor se encuentra en 192.168.0.1 y desea efectuar una instalación basada en NFS desde el directorio /install de ese servidor, indique el origen de esta forma: <ul><li>install=nfs://192.168.0.1/install</li></ul></p>
+
+<p>La tarjeta de red se configurará con <em>DHCP</em> o se deberán indicar los parámetros manualmente como se describe en la <a href="#network">opciones de red</a>.</p>
diff --git a/themes/openSUSE/help-install/es/main::opt::o_splash.html b/themes/openSUSE/help-install/es/main::opt::o_splash.html
new file mode 100644
index 0000000..0485375
--- /dev/null
+++ b/themes/openSUSE/help-install/es/main::opt::o_splash.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="o_splash">Opciones del kernel: pantalla inicial</a>
+</h3>
+
+<p>La pantalla inicial es la imagen que se muestra durante el inicio del sistema. <ul><li><em>splash=0</em> -- La pantalla inicial se desactiva. Esto puede ser útil en monitores muy antiguos o si se produce algún error.</li><li><em>splash=verbose</em> -- Activa la pantalla inicial y se siguen mostrando los mensajes del kernel y de arranque.</li><li><em>splash=silent</em> -- Activa la pantalla inicial, pero no los mensajes. En su lugar, se muestra una barra de progreso.</li></ul></p>
diff --git a/themes/openSUSE/help-install/es/main::opt::o_vnc.html b/themes/openSUSE/help-install/es/main::opt::o_vnc.html
new file mode 100644
index 0000000..5c1f850
--- /dev/null
+++ b/themes/openSUSE/help-install/es/main::opt::o_vnc.html
@@ -0,0 +1,9 @@
+<a name="o_vncpassword"/>
+
+<h3>
+<a name="o_vnc">Opciones del instalador: vnc</a>
+</h3>
+
+<p>Para habilitar la instalación con VNC, establezca los parámetros vnc y vncpassword: <ul><li><em>vnc=1 vncpassword=ejemplo</em></li></ul></p>
+
+<p>El servidor VNC se iniciará y será posible controlar YaST2 en cualquier cliente VNC desde un sistema remoto.</p>
diff --git a/themes/openSUSE/help-install/es/main::rescue.html b/themes/openSUSE/help-install/es/main::rescue.html
new file mode 100644
index 0000000..42d1f2a
--- /dev/null
+++ b/themes/openSUSE/help-install/es/main::rescue.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="rescue">Sistema de rescate</a>
+</h3>
+
+<p><em>Sistema de rescate</em> es un pequeño sistema base en disco RAM que permite realizar cualquier tipo de cambio en un sistema instalado. Puesto que en este sistema sólo hay disponibles herramientas de bajo nivel, está dirigido a usuarios expertos.</p>
diff --git a/themes/openSUSE/help-install/es/main::videomode.html b/themes/openSUSE/help-install/es/main::videomode.html
new file mode 100644
index 0000000..6e13935
--- /dev/null
+++ b/themes/openSUSE/help-install/es/main::videomode.html
@@ -0,0 +1,9 @@
+<h3>
+<a name="videomode">Selección de modo de vídeo</a>
+</h3>
+
+<p>Pulse <em>@@@fkey_video@@@</em> para obtener la lista de los modos de vídeo que admite la tarjeta gráfica. Aparece pre seleccionado el modo más elevado que admite su monitor.</p>
+
+<p>Es posible que su monitor no se detecte automáticamente. En ese caso, seleccione el modo que prefiera manualmente.</p>
+
+<p>Si su sistema tiene problemas con la tarjeta gráfica durante la instalación, puede que <em>modo de texto</em> sirva como solución.</p>
diff --git a/themes/openSUSE/help-install/es/navi.html b/themes/openSUSE/help-install/es/navi.html
new file mode 100644
index 0000000..9bf0272
--- /dev/null
+++ b/themes/openSUSE/help-install/es/navi.html
@@ -0,0 +1 @@
+<p>Volver a <a href="#foobar">FOOBAR</a></p>
diff --git a/themes/openSUSE/help-install/et/main.html b/themes/openSUSE/help-install/et/main.html
new file mode 100644
index 0000000..1c13170
--- /dev/null
+++ b/themes/openSUSE/help-install/et/main.html
@@ -0,0 +1,103 @@
+<h3>
+<a name="main">Alglaadija abi</a>
+</h3>
+
+<p>
+Welcome to <em>@@@product@@@</em>
+</p>
+
+<p>
+Use this menu to select the desired function. If you have
+problems navigating in this help system, press
+<em>@@@fkey_help@@@</em> to enter the <a href="#help">kirjeldus</a> of the help
+system. The main functions in this menu are:
+</p>
+
+<p>
+<a href="#harddisk">Alglaadimine kõvakettalt</a>: This selection will not do
+anything to the system. It only starts a previously installed
+operating system.
+</p>
+
+<p>
+<a href="#linux">Paigaldamine</a>:
+This installation mode works on most machines. If you experience a
+system freeze during boot or problems with detection of your hardware
+components, such as disk controllers or network cards, try one of the
+following installation options.
+</p>
+
+<p>
+<a href="#noacpi">Paigaldamine -- ACPI keelatud</a>: Many of the
+currently-sold computers have incomplete or faulty ACPI
+implementations. This selection disables ACPI support in the
+kernel, but still enables many performance features, like DMA for IDE
+hard disks.
+</p>
+
+<p>
+<a href="#nolapic">Paigaldamine--lokaalne APIC keelatud</a>:
+If the normal installation fails, this might be due to the
+system hardware not supporting local APIC.
+If this seems to be the case, use this option to
+install without local APIC support.
+</p>
+
+<p>
+<a href="#failsafe">Paigaldamine -- turvalised sätted</a>: If you were not
+successful with <em>Paigaldamine</em>, this selection might
+solve the issue.
+</p>
+
+<p>
+<a href="#rescue">Päästesüsteem</a>: This boot image starts a small
+Linux system in RAM. This is useful if the system does not start properly.
+After booting this system, log in as root.
+</p>
+
+<p>
+<a href="#firmware">Püsivara test</a>: Runs a BIOS test tool that validates
+ACPI and other parts of your BIOS.
+</p>
+
+<p>
+<a href="#memtest">Mälu testimine</a>: Memory testing is useful for more than
+checking installation of new memory modules. It is a stress test
+for a big part of your computer system and may indicate hardware
+problems.
+</p>
+
+<p>
+<a href="#opt">Alglaadimise sätted</a>: The boot options may change the
+behavior of your system completely. They are settings for
+the kernel.
+</p>
+
+<p>
+<a href="#help">@@@fkey_help@@@ Help</a>: This is context sensitive. It will
+show different screens depending on the active element of the
+boot screen. There is also a description of this help system
+available.
+</p>
+
+<p>
+<a href="#keytable">@@@fkey_lang@@@</a>: Set language and keyboard mapping
+used by the boot loader.
+</p>
+
+<p>
+<a href="#videomode">@@@fkey_video@@@ Video Mode</a>: Here, choose between
+different screen resolutions while installing. If you encounter
+problems with the graphical installation, the <em>tekstirežiim</em> may
+be a work-around for you.
+</p>
+
+<p>
+<a href="#install_src">@@@fkey_inst@@@ Installation Source</a>: Choose the
+installation source.
+</p>
+
+<p>
+<a href="#driverupdate">@@@fkey_dud@@@ Driver Update</a>: For very new machines, a
+driver update may be needed to install the system.
+</p>
diff --git a/themes/openSUSE/help-install/et/main::bits.html b/themes/openSUSE/help-install/et/main::bits.html
new file mode 100644
index 0000000..d36ee29
--- /dev/null
+++ b/themes/openSUSE/help-install/et/main::bits.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="bits">Tarkvara tüübi valimine</a>
+</h3>
+
+<p>
+You have the choice to install the 32-bit or 64-bit version of @@@product@@@.
+</p>
diff --git a/themes/openSUSE/help-install/et/main::driverupdate.html b/themes/openSUSE/help-install/et/main::driverupdate.html
new file mode 100644
index 0000000..231478e
--- /dev/null
+++ b/themes/openSUSE/help-install/et/main::driverupdate.html
@@ -0,0 +1,14 @@
+<h3>
+<a name="driverupdate">Draiverite uuendamine</a>
+</h3>
+
+<p>
+If you need a driver update floppy or CD-ROM, press <em>@@@fkey_dud@@@</em>. The
+boot loader asks you to insert the driver update medium after
+loading the Linux kernel.
+</p>
+
+<p>
+A driver update is typically a floppy with new versions of hardware
+drivers or bug fixes needed during installation.
+</p>
diff --git a/themes/openSUSE/help-install/et/main::failsafe.html b/themes/openSUSE/help-install/et/main::failsafe.html
new file mode 100644
index 0000000..75db303
--- /dev/null
+++ b/themes/openSUSE/help-install/et/main::failsafe.html
@@ -0,0 +1,11 @@
+<h3>
+<a name="failsafe">Paigaldamine -- turvalised sätted</a>
+</h3>
+
+<p>
+Select <em>Paigaldamine -- turvalised sätted</em> if you encounter hangs
+while installing or irreproducible errors. This option disables DMA
+for IDE drives and all power management features.
+See also the kernel options for <a href="#o_apm">apm</a>,
+<a href="#o_acpi">acpi</a> and <a href="#o_ide">ide</a>.
+</p>
diff --git a/themes/openSUSE/help-install/et/main::firmware.html b/themes/openSUSE/help-install/et/main::firmware.html
new file mode 100644
index 0000000..1b8d7e2
--- /dev/null
+++ b/themes/openSUSE/help-install/et/main::firmware.html
@@ -0,0 +1,9 @@
+<h3>
+<a name="firmware">Püsivara test</a>
+</h3>
+
+<p>
+Starts a BIOS checker that validates the ACPI tables
+and many other parts of your BIOS.
+Test results can be stored on usb disk or saved via network.
+</p>
diff --git a/themes/openSUSE/help-install/et/main::harddisk.html b/themes/openSUSE/help-install/et/main::harddisk.html
new file mode 100644
index 0000000..aeaa53b
--- /dev/null
+++ b/themes/openSUSE/help-install/et/main::harddisk.html
@@ -0,0 +1,16 @@
+<h3>
+<a name="harddisk">Alglaadimine kõvakettalt</a>
+</h3>
+
+<p>
+Select <em>Laadi paigaldatud OS</em> to start the system installed on
+your local hard disk. This system must be installed properly, because
+only the MBR (Master Boot Record) on the first hard disk is started.
+The device ID of the first hard disk is provided by the BIOS of
+the computer.
+</p>
+
+<p>
+Use this if you forgot to remove the CD or DVD from your
+drive and want to start the computer from the hard disk.
+</p>
diff --git a/themes/openSUSE/help-install/et/main::help.html b/themes/openSUSE/help-install/et/main::help.html
new file mode 100644
index 0000000..5766620
--- /dev/null
+++ b/themes/openSUSE/help-install/et/main::help.html
@@ -0,0 +1,25 @@
+<h3>
+<a name="help">Abisüsteemi kasutamine</a>
+</h3>
+
+<p>
+The boot loader online help is context sensitive. It gives information
+about the selected menu item or, if you are editing boot options,
+it tries to look up information about the option in which the cursor is
+positioned.
+</p>
+
+<p>
+Navigation Keys
+<ul>
+ <li><em>Nool üles</em>: highlight previous link</li>
+ <li><em>Nool alla</em>: highlight next link</li>
+ <li><em>Nool vasakule</em>, <em>Backspace</em>: return to previous topic</li>
+ <li><em>Nool paremale</em>, <em>Enter</em>, <em>Tühik</em>: follow link</li>
+ <li><em>PgUp</em>: scroll up one page</li>
+ <li><em>PgDn</em>: scroll down one page</li>
+ <li><em>Home</em>: go to page start</li>
+ <li><em>End</em>: go to page end</li>
+ <li><em>Esc</em>: leave help</li>
+</ul>
+</p>
diff --git a/themes/openSUSE/help-install/et/main::install_src.html b/themes/openSUSE/help-install/et/main::install_src.html
new file mode 100644
index 0000000..a3ad3a3
--- /dev/null
+++ b/themes/openSUSE/help-install/et/main::install_src.html
@@ -0,0 +1,12 @@
+<h3>
+<a name="install_src">Paigaldusallikas</a>
+</h3>
+
+<p>
+Press <em>@@@fkey_inst@@@</em> to choose an installation source.
+</p>
+
+<p>
+This is the same as using the <a href="#o_install">paigaldamine</a>
+boot option.
+</p>
diff --git a/themes/openSUSE/help-install/et/main::keytable.html b/themes/openSUSE/help-install/et/main::keytable.html
new file mode 100644
index 0000000..4d5991b
--- /dev/null
+++ b/themes/openSUSE/help-install/et/main::keytable.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="keytable">Keele ja klaviatuuri paigutuse valimine</a>
+</h3>
+
+<p>
+Press <em>@@@fkey_lang@@@</em> to change language and keyboard layout the boot loader uses.
+</p>
diff --git a/themes/openSUSE/help-install/et/main::linux.html b/themes/openSUSE/help-install/et/main::linux.html
new file mode 100644
index 0000000..5075946
--- /dev/null
+++ b/themes/openSUSE/help-install/et/main::linux.html
@@ -0,0 +1,10 @@
+<h3>
+<a name="linux">Paigaldamine</a>
+</h3>
+
+<p>
+Select <em>Paigaldamine</em> to start the default installation. The
+<a href="#opt">alglaadimise sätted</a> entered are used in the
+start-up. This item activates many features of commonly available
+hardware.
+</p>
diff --git a/themes/openSUSE/help-install/et/main::memtest.html b/themes/openSUSE/help-install/et/main::memtest.html
new file mode 100644
index 0000000..30e6d7c
--- /dev/null
+++ b/themes/openSUSE/help-install/et/main::memtest.html
@@ -0,0 +1,14 @@
+<h3>
+<a name="memtest">Mälu testimine</a>
+</h3>
+
+<p>
+The included <em>Mälu testimine</em> provides good possibilities to
+stress test the hardware of a system. Its main purpose is to detect
+broken RAM, but it also stresses many other parts of the system.
+</p>
+
+<p>
+There is no guarantee that the memory is good if no errors are
+found, although most of memory defects will be found.
+</p>
diff --git a/themes/openSUSE/help-install/et/main::noacpi.html b/themes/openSUSE/help-install/et/main::noacpi.html
new file mode 100644
index 0000000..68fd651
--- /dev/null
+++ b/themes/openSUSE/help-install/et/main::noacpi.html
@@ -0,0 +1,24 @@
+<h3>
+<a name="noacpi">Paigaldamine -- ACPI keelatud</a>
+</h3>
+
+<p>
+Current hardware usually requires ACPI (Advanced Configuration and Power Interface)
+to control the interrupt handling.
+ACPI completely replaces the old APM system.
+</p>
+
+<p>
+Select <em>Paigaldamine -- ACPI keelatud</em> if you encounter
+problems during boot of the kernel. Known problems with machines that
+have problems with ACPI are:
+<ul>
+ <li>kernel freezes when booting</li>
+ <li>PCI Cards are not detected or initialized properly</li>
+</ul>
+</p>
+
+<p>
+You may also try the <a href="#firmware">Püsivara test</a> boot option
+and look at the test results of the ACPI validation.
+</p>
diff --git a/themes/openSUSE/help-install/et/main::nolapic.html b/themes/openSUSE/help-install/et/main::nolapic.html
new file mode 100644
index 0000000..8342f89
--- /dev/null
+++ b/themes/openSUSE/help-install/et/main::nolapic.html
@@ -0,0 +1,14 @@
+<h3>
+<a name="nolapic">Paigaldamine--lokaalne APIC keelatud</a>
+</h3>
+
+<p>
+Normally there are no problems with the APIC (Advanced Programmable Interrupt
+Controller). But if you seem to have some, try this option to boot
+without local APIC support.
+</p>
+
+<p>
+Please don't confuse this with <a href="#noacpi">ACPI</a>
+(Advanced Configuration and Power Interface).
+</p>
diff --git a/themes/openSUSE/help-install/et/main::opt.html b/themes/openSUSE/help-install/et/main::opt.html
new file mode 100644
index 0000000..4c24198
--- /dev/null
+++ b/themes/openSUSE/help-install/et/main::opt.html
@@ -0,0 +1,28 @@
+<h3>
+<a name="opt">Alglaadimise sätted</a>
+</h3>
+
+<p>
+There are two types of boot options available. First, there are
+options that affect the installer. Second, there are kernel
+options. Some of the more common options are:
+</p>
+
+<p>
+a) installer options
+<ul>
+ <li><a href="#o_install">paigaldamine</a> -- select an installation source</li>
+ <li><a href="#network">võrgusätted</a> -- the network options</li>
+ <li><a href="#o_vnc">vnc sätted</a> -- options for installation via VNC</li>
+</ul>
+</p>
+
+<p>
+b) kernel options
+<ul>
+ <li><a href="#o_splash">splash</a> -- influence the behavior of the splash screen</li>
+ <li><a href="#o_apm">apm</a> -- toggle power management</li>
+ <li><a href="#o_acpi">acpi</a> -- advanced configuration and power interface</li>
+ <li><a href="#o_ide">ide</a> -- control the IDE subsystem</li>
+</ul>
+</p>
diff --git a/themes/openSUSE/help-install/et/main::opt::network.html b/themes/openSUSE/help-install/et/main::opt::network.html
new file mode 100644
index 0000000..c268c09
--- /dev/null
+++ b/themes/openSUSE/help-install/et/main::opt::network.html
@@ -0,0 +1,35 @@
+<a name="o_hostip"/>
+<a name="o_netmask"/>
+<a name="o_gateway"/>
+
+<h3>
+<a name="network">Paigaldussätted: võrgusätted</a>
+</h3>
+
+<p>
+It is possible to configure the network interface right now. The
+hardware will be detected later by YaST2. The minimum set of options
+to configure your network card consists of host IP and netmask. For
+example:
+<ul>
+ <li>hostip=192.168.0.10 netmask=255.255.255.0</li>
+</ul>
+</p>
+
+<p>
+or in a shorter form:
+<ul>
+ <li>hostip=192.168.0.10/24</li>
+</ul>
+</p>
+
+<p>
+If you specified a <a href="#o_install">võrgupõhine paigaldamine</a> and do
+not specify both of these options, the installer tries to configure
+the network interface with <em>dhcp</em>. If you need a default
+gateway, specify this with the option <em>lüüs</em>. For
+example:
+<ul>
+ <li>gateway=192.168.0.8</li>
+</ul>
+</p>
diff --git a/themes/openSUSE/help-install/et/main::opt::o_acpi.html b/themes/openSUSE/help-install/et/main::opt::o_acpi.html
new file mode 100644
index 0000000..82c57b0
--- /dev/null
+++ b/themes/openSUSE/help-install/et/main::opt::o_acpi.html
@@ -0,0 +1,23 @@
+<h3>
+<a name="o_acpi">Kerneli sätted: acpi</a>
+</h3>
+
+<p>
+ACPI (Advanced Configuration and Power Interface) is a
+standard that defines power and configuration management interfaces
+between an operating system and the BIOS. By default, <em>acpi</em> is
+switched on when a BIOS is detected that is newer than from year
+2000. There are several commonly
+used parameters to control the behavior of ACPI:
+<ul>
+ <li><em>pci=noacpi</em> -- do not use ACPI to route PCI interrupts</li>
+ <li><em>acpi=oldboot</em> -- only the parts of ACPI that are relevant for booting remain activated</li>
+ <li><em>acpi=off</em> -- switch off ACPI completely</li>
+ <li><em>acpi=force</em> -- switch on ACPI even if your BIOS is dated before 2000</li>
+</ul>
+</p>
+
+<p>
+Especially on new computers, it replaces the old
+<a href="#o_apm">apm</a> system.
+</p>
diff --git a/themes/openSUSE/help-install/et/main::opt::o_apm.html b/themes/openSUSE/help-install/et/main::opt::o_apm.html
new file mode 100644
index 0000000..8800aee
--- /dev/null
+++ b/themes/openSUSE/help-install/et/main::opt::o_apm.html
@@ -0,0 +1,21 @@
+<h3>
+<a name="o_apm">Kerneli sätted: apm</a>
+</h3>
+
+<p>
+APM is one of the two power management strategies used on current
+computers. It is mainly used with laptops for functions like suspend
+to disk, but it may also be responsible for switching off the
+computer after power down. APM relies on a correct working BIOS. If
+the BIOS is broken, APM may have only limited use or even prevent the
+computer from working. Therefore, it may be switched off with the
+parameter
+<ul>
+ <li><em>apm=off</em> -- switch off APM completely</li>
+</ul>
+</p>
+
+<p>
+Some very new computers may take more advantage from the newer
+<a href="#o_acpi">ACPI</a>.
+</p>
diff --git a/themes/openSUSE/help-install/et/main::opt::o_ide.html b/themes/openSUSE/help-install/et/main::opt::o_ide.html
new file mode 100644
index 0000000..1d7dca7
--- /dev/null
+++ b/themes/openSUSE/help-install/et/main::opt::o_ide.html
@@ -0,0 +1,12 @@
+<h3>
+<a name="o_ide">Kerneli sätted: ide</a>
+</h3>
+
+<p>
+IDE is, unlike SCSI, commonly used in most desktop workstations.
+To circumvent some hardware problems that occur with IDE systems, use the
+kernel parameter:
+<ul>
+ <li><em>ide=nodma</em> -- switch off DMA for IDE drives</li>
+</ul>
+</p>
diff --git a/themes/openSUSE/help-install/et/main::opt::o_install.html b/themes/openSUSE/help-install/et/main::opt::o_install.html
new file mode 100644
index 0000000..cd341df
--- /dev/null
+++ b/themes/openSUSE/help-install/et/main::opt::o_install.html
@@ -0,0 +1,30 @@
+<h3>
+<a name="o_install">Paigaldussätted: install</a>
+</h3>
+
+<p>
+By default, the local CD-ROMs are searched for the installation source.
+For a network install, select the
+<em>paigaldamine</em> option. Possible installation protocols are
+<ul>
+ <li>FTP</li>
+ <li>NFS</li>
+ <li>HTTP</li>
+</ul>
+</p>
+
+<p>
+The syntax to use is just like standard URLs. For example,
+if your server is found at 192.168.0.1 and you want to do an NFS-based
+install from the directory /install on this server, specify
+the source as follows:
+<ul>
+ <li>install=nfs://192.168.0.1/install</li>
+</ul>
+</p>
+
+<p>
+The network card will either be configured with <em>dhcp</em> or you
+must specify the parameters yourself as described in the
+<a href="#network">võrgusätted</a>.
+</p>
diff --git a/themes/openSUSE/help-install/et/main::opt::o_splash.html b/themes/openSUSE/help-install/et/main::opt::o_splash.html
new file mode 100644
index 0000000..2d97867
--- /dev/null
+++ b/themes/openSUSE/help-install/et/main::opt::o_splash.html
@@ -0,0 +1,12 @@
+<h3>
+<a name="o_splash">Kerneli sätted: splash</a>
+</h3>
+
+<p>
+The splash screen is the picture shown during system start-up.
+<ul>
+ <li><em>splash=0</em> -- The splash screen is switched off. This may be useful with very old monitors or if some error occurs.</li>
+ <li><em>splash=verbose</em> -- Activates splash, kernel and boot messages are still shown.</li>
+ <li><em>splash=silent</em> -- Activates splash, but no messages. Instead a progress bar is drawn.</li>
+</ul>
+</p>
diff --git a/themes/openSUSE/help-install/et/main::opt::o_vnc.html b/themes/openSUSE/help-install/et/main::opt::o_vnc.html
new file mode 100644
index 0000000..5559ef3
--- /dev/null
+++ b/themes/openSUSE/help-install/et/main::opt::o_vnc.html
@@ -0,0 +1,18 @@
+<a name="o_vncpassword"/>
+
+<h3>
+<a name="o_vnc">Paigaladussätted: vns</a>
+</h3>
+
+<p>
+To enable the VNC installation, specify the
+parameters vnc and vncpassword:
+<ul>
+ <li><em>vnc=1 vncpassword=n2ide</em></li>
+</ul>
+</p>
+
+<p>
+The VNC server will be started and you may control YaST2 over any VNC
+client from a remote system.
+</p>
diff --git a/themes/openSUSE/help-install/et/main::rescue.html b/themes/openSUSE/help-install/et/main::rescue.html
new file mode 100644
index 0000000..01fe045
--- /dev/null
+++ b/themes/openSUSE/help-install/et/main::rescue.html
@@ -0,0 +1,10 @@
+<h3>
+<a name="rescue">Päästesüsteem</a>
+</h3>
+
+<p>
+The <em>Päästesüsteem</em> is a small RAM disk base system. From there,
+it is possible to make all kinds of changes to an installed system. Because
+only low-level tools are available in this system, it is intended for
+experts.
+</p>
diff --git a/themes/openSUSE/help-install/et/main::videomode.html b/themes/openSUSE/help-install/et/main::videomode.html
new file mode 100644
index 0000000..23ff6cc
--- /dev/null
+++ b/themes/openSUSE/help-install/et/main::videomode.html
@@ -0,0 +1,18 @@
+<h3>
+<a name="videomode">Videorežiimi valimine</a>
+</h3>
+
+<p>
+Press <em>@@@fkey_video@@@</em> to get the list of video modes your graphics card
+supports. The highest mode your monitor can display is preselected.
+</p>
+
+<p>
+It is possible that your monitor cannot be detected automatically. In that
+case, select your preferred mode manually.
+</p>
+
+<p>
+If your system has problems with the graphics card during the
+installation, the <em>tekstirežiim</em> may be a usable work-around.
+</p>
diff --git a/themes/openSUSE/help-install/et/navi.html b/themes/openSUSE/help-install/et/navi.html
new file mode 100644
index 0000000..b726302
--- /dev/null
+++ b/themes/openSUSE/help-install/et/navi.html
@@ -0,0 +1 @@
+<p>Tagasi <a href="#foobar">FOOBAR</a> juurde</p>
diff --git a/themes/openSUSE/help-install/fi/main.html b/themes/openSUSE/help-install/fi/main.html
new file mode 100644
index 0000000..5516f59
--- /dev/null
+++ b/themes/openSUSE/help-install/fi/main.html
@@ -0,0 +1,35 @@
+<h3>
+<a name="main">Käynnistyslataajan ohje</a>
+</h3>
+
+<p><em>@@@product@@@</em>: Tervetuloa</p>
+
+<p>Valitse tästä valikosta haluttu toiminto. Jos ohjejärjestelmässä ilmenee ongelmia liikkumisessa, paina <em>@@@fkey_help@@@</em> päästäksesi ohjejärjestelmän <a href="#help">kuvaus</a>. Valikon päätoimintoja ovat:</p>
+
+<p><a href="#harddisk">Käynnistä kiintolevyltä</a>: Tämä valinta ei tee mitään järjestelmälle. Se käynnistää aiemmin asennetun käyttöjärjestelmän.</p>
+
+<p><a href="#linux">Asennus</a>: Tämä asennustila toimii useimmissa koneissa. Jos järjestelmä pysähtyy käynnistyksen aikana tai laitteiston tunnistamisessa on ongelmia (levyohjaimet ja verkkokortit), kokeile jotakin seuraavista asennusvalinnoista.</p>
+
+<p><a href="#noacpi">Asennus -- ACPI poissa käytöstä</a>: Useissa myynnissä olevissa tietokoneissa on keskeneräinen tai virheellinen ACPI-toteutus. Tämä valinta poistaa ACPI-tuen ytimestä, mutta käyttää silti useita suorituskykyä parantavia ominaisuuksia, kuten DMA-siirtotapaa IDE -kiintolevyille.</p>
+
+<p><a href="#nolapic">Asennus -- Paikallinen APIC pois käytöstä</a>: Jos järjestelmän normaali asennus epäonnistuu, tämä voi johtua paikallisen APIC-tuen riittämättömyydestä. Jos näin on, käytä tätä valintaa suorittaaksesi asennus ilman paikallista APIC-tukea.</p>
+
+<p><a href="#failsafe">Asennus -- Turvalliset asetukset</a>: Jos et onnistunut <em>Asennus</em> kanssa, tämä valinta saattaa ratkaista asian.</p>
+
+<p><a href="#rescue">Korjausjärjestelmä</a>: Tämä käynnistyslevykuva käynnistää pienen Linux-järjestelmän RAM-muistiin. Se on käytännöllinen, jos järjestelmä ei käynnisty kunnolla. Järjestelmän käynnistyttyä kirjaudu sisään pääkäyttäjänä (root).</p>
+
+<p><a href="#firmware">Laiteohjelmiston testi</a>: Suorittaa BIOS-tarkistuksen, joka vahvistaa ACPI-BIOS -ominaisuuksia.</p>
+
+<p><a href="#memtest">Muistitesti</a>: Muistitesti on käytännöllinen muutenkin kuin vain uusien muistimoduulien tarkistamisessa. Se on kestotesti suurelle osalle tietokonettasi ja voi osoittaa mahdolliset laiteongelmat.</p>
+
+<p><a href="#opt">Käynnistysvalinnat</a>: Käynnistysvalinnat voivat täydellisesti muuttaa järjestelmän käyttäytymistä. Ne ovat ytimen asetuksia.</p>
+
+<p><a href="#help">@@@fkey_help@@@ Ohje</a>: Tämä on kontekstiriippuvainen. Se näyttää eri asioita riippuen valitusta käynnistysnäytön kohdasta. Myös ohjejärjestelmän kuvaus on saatavilla.</p>
+
+<p><a href="#keytable">@@@fkey_lang@@@</a>: Aseta käynnistyslataajan käyttämä kieli ja näppäimistökartta.</p>
+
+<p><a href="#videomode">@@@fkey_video@@@ Videotila</a>: Tässä valitset asennuksen aikana käytettävän näytönkoon. Jos kohtaat ongelmia graafisessa asennuksessa, <em>tekstitila</em> voi olla toimiva vaihtoehto.</p>
+
+<p><a href="#install_src">@@@fkey_inst@@@ Asennuslähde</a>: Valitse asennuslähde.</p>
+
+<p><a href="#driverupdate">@@@fkey_dud@@@ Ohjainpäivitys</a>: Uusimmat tietokoneet voivat vaatia ajuripäivityksen, jotta järjestelmän voi asentaa.</p>
diff --git a/themes/openSUSE/help-install/fi/main::bits.html b/themes/openSUSE/help-install/fi/main::bits.html
new file mode 100644
index 0000000..dc4db83
--- /dev/null
+++ b/themes/openSUSE/help-install/fi/main::bits.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="bits">Ohjelmistotyypin valinta</a>
+</h3>
+
+<p>Voit valita asennatko 32-bittisen vai 64-bittisen @@@product@@@-version.</p>
diff --git a/themes/openSUSE/help-install/fi/main::driverupdate.html b/themes/openSUSE/help-install/fi/main::driverupdate.html
new file mode 100644
index 0000000..217907e
--- /dev/null
+++ b/themes/openSUSE/help-install/fi/main::driverupdate.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="driverupdate">Ohjainpäivitys</a>
+</h3>
+
+<p>Jos tarvitset ajurin päivitykseen levykkeen tai CD-ROM-levyn, paina <em>@@@fkey_dud@@@</em>. Käynnistyslataaja pyytää syöttämään ajurin päivitystietovälineen Linux-ytimen lataamisen jälkeen.</p>
+
+<p>Ajuripäivitys on yleensä levyke, jossa on uusin versio laiteajureista tai virhekorjaus, jota tarvitaan asennuksen aikana.</p>
diff --git a/themes/openSUSE/help-install/fi/main::failsafe.html b/themes/openSUSE/help-install/fi/main::failsafe.html
new file mode 100644
index 0000000..1ba547f
--- /dev/null
+++ b/themes/openSUSE/help-install/fi/main::failsafe.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="failsafe">Asennus -- Turvalliset asetukset</a>
+</h3>
+
+<p>Valitse <em>Asennus -- Turvalliset asetukset</em> jos asennus pysähtelee tai esiintyy satunnaisia virheitä. Valinta poistaa käytöstä DMA-tuen IDE -levyiltä ja kaikki virranhallintatoiminnot. Katso myös ytimen valinnat <a href="#o_apm">apm</a>, <a href="#o_acpi">acpi</a> ja <a href="#o_ide">ide</a>.</p>
diff --git a/themes/openSUSE/help-install/fi/main::firmware.html b/themes/openSUSE/help-install/fi/main::firmware.html
new file mode 100644
index 0000000..32c0071
--- /dev/null
+++ b/themes/openSUSE/help-install/fi/main::firmware.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="firmware">Laiteohjelmiston testi</a>
+</h3>
+
+<p>Käynnistää BIOS-tarkistuksen, joka vahvistaa ACPI-taulut ja monta muuta BIOSin osaa. Tarkistuksen voi tallentaa usb-muistille tai verkkoon.</p>
diff --git a/themes/openSUSE/help-install/fi/main::harddisk.html b/themes/openSUSE/help-install/fi/main::harddisk.html
new file mode 100644
index 0000000..3d5a263
--- /dev/null
+++ b/themes/openSUSE/help-install/fi/main::harddisk.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="harddisk">Käynnistä kiintolevyltä</a>
+</h3>
+
+<p>Valitse <em>Käynnistä asennettu käyttöjärjestelmä</em> käynnistääksesi paikalliselle kiintolevylle asennetun käyttöjärjestelmän. Järjestelmän tulee olla oikein asennettu, koska ensimmäiseltä levyltä käynnistetään vain MBR (Master Boot Record). Ensimmäisen kiintolevyn ID-laite saadaan tietokoneen BIOSista.</p>
+
+<p>Käytä tätä, jos unohdit poistaa CD- tai DVD-levyn asemasta ja haluat käynnistää tietokoneen kiintolevyltä.</p>
diff --git a/themes/openSUSE/help-install/fi/main::help.html b/themes/openSUSE/help-install/fi/main::help.html
new file mode 100644
index 0000000..aa10e2f
--- /dev/null
+++ b/themes/openSUSE/help-install/fi/main::help.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="help">Ohjejärjestelmän käyttäminen</a>
+</h3>
+
+<p>Käynnistyslataajan ohje on kontekstiriippuvainen. Se antaa tietoja valitusta valikon kohdasta tai, jos muokkaat käynnistysvalintoja, se yrittää hakea tietoa valinnasta, jolla kursori on.</p>
+
+<p>Ohjausnäppäimet <ul><li><em>Nuoli ylös</em>: korosta aiempi linkki</li><li><em>Nuoli alas</em>: korosta seuraava linkki</li><li><em>Nuoli vasemmalle</em>, <em>Askelpalautin</em>: palaa aiempaan ohjeeseen</li><li><em>Nuoli oikealle</em>, <em>Enter</em>, <em>Välilyönti</em>: seuraa linkkiä</li><li><em>Sivu ylös</em>: vierittää sivun ylöspäin</li><li><em>Sivu alas</em>: vierittää sivun alaspäin</li><li><em>Home</em>: mene sivun alkuun</li><li><em>End</em>: mene sivun loppuun</li><li><em>Esc</em>: sulje ohje</li></ul></p>
diff --git a/themes/openSUSE/help-install/fi/main::install_src.html b/themes/openSUSE/help-install/fi/main::install_src.html
new file mode 100644
index 0000000..8bb76fc
--- /dev/null
+++ b/themes/openSUSE/help-install/fi/main::install_src.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="install_src">Asennuslähde</a>
+</h3>
+
+<p>Paina <em>@@@fkey_inst@@@</em> valitaksesi asennuslähteen.</p>
+
+<p>Tämä tarkoittaa samaa kuin <a href="#o_install">asenna</a> käynnistysvalinnan käyttö.</p>
diff --git a/themes/openSUSE/help-install/fi/main::keytable.html b/themes/openSUSE/help-install/fi/main::keytable.html
new file mode 100644
index 0000000..f236a24
--- /dev/null
+++ b/themes/openSUSE/help-install/fi/main::keytable.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="keytable">Kielen ja näppäimistökartan valinnat</a>
+</h3>
+
+<p>Paina <em>@@@fkey_lang@@@</em> vaihtaaksesi käynnistyslataajan kieltä ja näppäimistökarttaa.</p>
diff --git a/themes/openSUSE/help-install/fi/main::linux.html b/themes/openSUSE/help-install/fi/main::linux.html
new file mode 100644
index 0000000..39d1877
--- /dev/null
+++ b/themes/openSUSE/help-install/fi/main::linux.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="linux">Asennus</a>
+</h3>
+
+<p>Valitse<em>Asennus</em> käynnistääksesi oletusasennuksen. <a href="#opt">käynnistysvalinnat</a>:sta käytetään käynnistämiseen. Valinta ottaa käyttöön useita yleisesti käytettävien laitteiden ominaisuuksia.</p>
diff --git a/themes/openSUSE/help-install/fi/main::memtest.html b/themes/openSUSE/help-install/fi/main::memtest.html
new file mode 100644
index 0000000..c80ba06
--- /dev/null
+++ b/themes/openSUSE/help-install/fi/main::memtest.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="memtest">Muistitesti</a>
+</h3>
+
+<p>Mukana oleva <em>Muistitesti</em> tarjoaa hyvän mahdollisuuden suorittaa kestotesti järjestelmän laitteille. Sen päätarkoitus on tunnistaa vioittunut RAM-muisti, mutta se rasittaa myös järjestelmän muita osia.</p>
+
+<p>Virheiden puuttuminen ei välttämättä johdu siitä, että muisti on kunnossa, vaikka yleensä useimmat muistin viat löytyvät.</p>
diff --git a/themes/openSUSE/help-install/fi/main::noacpi.html b/themes/openSUSE/help-install/fi/main::noacpi.html
new file mode 100644
index 0000000..1262c20
--- /dev/null
+++ b/themes/openSUSE/help-install/fi/main::noacpi.html
@@ -0,0 +1,9 @@
+<h3>
+<a name="noacpi">Asennus -- ACPI poissa käytöstä</a>
+</h3>
+
+<p>Uusimmat laitteistot vaativat tavallisesti ACPI-tuen (Advanced Configuration and Power Interface) ohjaamaan keskeytysten hallintaa. ACPI korvaa täysin vanhan APM-järjestelmän.</p>
+
+<p>Valitse <em>Asennus -- ACPI poissa käytöstä</em> jos kohtaat ongelmia ytimen käynnistyksen aikana. Tunnettuja ongelmia ACPI-tukea käyttävissä koneissa ovat: <ul><li>ydin pysähtyy käynnistettäessä</li><li>PCI-kortteja ei tunnistettu tai alustettu oikein</li></ul></p>
+
+<p>Voit myös kokeilla <a href="#firmware">Laiteohjelmiston testi</a> käynnistysvalintaa ja katsoa ACPI-vahvistuksen tarkistustuloksen.</p>
diff --git a/themes/openSUSE/help-install/fi/main::nolapic.html b/themes/openSUSE/help-install/fi/main::nolapic.html
new file mode 100644
index 0000000..41d6427
--- /dev/null
+++ b/themes/openSUSE/help-install/fi/main::nolapic.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="nolapic">Asennus -- Paikallinen APIC pois käytöstä</a>
+</h3>
+
+<p>Normaalisti APIC (Advanced Programmable Interrupt Controller) ei aiheuta ongelmia, mutta törmätessäsi ongelmiin käynnistä tietokone tällä valinnalla ilman paikallista APIC-tukea.</p>
+
+<p>Älä sekoita tätä <a href="#noacpi">ACPI</a>:iin (Advanced Configuration and Power Interface).</p>
diff --git a/themes/openSUSE/help-install/fi/main::opt.html b/themes/openSUSE/help-install/fi/main::opt.html
new file mode 100644
index 0000000..2d3afa8
--- /dev/null
+++ b/themes/openSUSE/help-install/fi/main::opt.html
@@ -0,0 +1,9 @@
+<h3>
+<a name="opt">Käynnistysvalinnat</a>
+</h3>
+
+<p>Voit valita kahdentyyppisiä käynnistysvalintoja: valinnat, jotka vaikuttavat asentimeen ja ytimen valinnat. Yleisiä valintoja ovat:</p>
+
+<p>a) Asentimen valinnat <ul><li><a href="#o_install">asenna</a> -- valitse asennuslähde</li><li><a href="#network">verkon valinnat</a> -- verkon valinnat</li><li><a href="#o_vnc">vnc-valinnat</a> -- valinnat VNC-asennusta varten</li></ul></p>
+
+<p>b) ytimen valinnat <ul><li><a href="#o_splash">splash</a> -- vaikuta splash-näytön käyttäytymiseen</li><li><a href="#o_apm">apm</a> -- vaihda virranhallinta päälle/pois</li><li><a href="#o_acpi">acpi</a> -- edistynyt määritys ja virranhallinta </li><li><a href="#o_ide">ide</a> -- ohjaa IDE-alijärjestelmää</li></ul></p>
diff --git a/themes/openSUSE/help-install/fi/main::opt::network.html b/themes/openSUSE/help-install/fi/main::opt::network.html
new file mode 100644
index 0000000..d9046ab
--- /dev/null
+++ b/themes/openSUSE/help-install/fi/main::opt::network.html
@@ -0,0 +1,13 @@
+<a name="o_hostip"/>
+<a name="o_netmask"/>
+<a name="o_gateway"/>
+
+<h3>
+<a name="network">Asentimen valinnat: Verkkovalinnat</a>
+</h3>
+
+<p>Verkkoliitäntä on mahdollista määrittää nyt. YaST tunnistaa laitteiston myöhemmin. Pakolliset valinnat verkon määrittämiseksi ovat IP-osoite ja aliverkon peite. Esimerkiksi: <ul><li>hostip=192.168.0.10 netmask=255.255.255.0</li></ul></p>
+
+<p>tai lyhyemmässä muodossa: <ul><li>hostip=192.168.0.10/24</li></ul></p>
+
+<p>Jos määritit <a href="#o_install">asennus verkosta</a>:n etkä määritä molempia näistä valinnoista, asennusohjelma yrittää määrittää verkkoliitännän <em>dhcp</em>:llä. Jos tarvitset oletusyhdyskäytävän, määritä se valinnalla <em>gateway</em>. Esimerkiksi: <ul><li>gateway=192.168.0.8</li></ul></p>
diff --git a/themes/openSUSE/help-install/fi/main::opt::o_acpi.html b/themes/openSUSE/help-install/fi/main::opt::o_acpi.html
new file mode 100644
index 0000000..fdea1ec
--- /dev/null
+++ b/themes/openSUSE/help-install/fi/main::opt::o_acpi.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="o_acpi">Ytimen valinnat: acpi</a>
+</h3>
+
+<p>ACPI (Advanced Configuration and Power Interface) on standardi, joka määrittelee virran- ja laitteistohallinnan liittymän käyttöjärjestelmän ja BIOSin välillä. Oletuksena <em>acpi</em> otetaan käyttöön, jos BIOS on uudempi kuin vuodelta 2000. Muutamia yleisesti käytettyjä parametreja ACPI-tuen ohjaamiseksi ovat: <ul><li><em>pci=noacpi</em> - älä käytä ACPI-tukea ohjaamaan PCI-keskeytyksiä</li><li><em>acpi=oldboot</em> - vain ne osat ACPI-tuesta, jotka kuuluvat käynnistykseen jäävät käyttöön</li><li><em>acpi=off</em> -- poista ACPI kokonaan käytöstä </li><li><em>acpi=force</em> -- käyttää ACPI-tukea vaikka BIOS olisi päivätty ennen vuotta 2000</li></ul></p>
+
+<p>Uusissa tietokoneissa tämä korvaa vanhan <a href="#o_apm">apm</a>-järjestelmän.</p>
diff --git a/themes/openSUSE/help-install/fi/main::opt::o_apm.html b/themes/openSUSE/help-install/fi/main::opt::o_apm.html
new file mode 100644
index 0000000..23e6b36
--- /dev/null
+++ b/themes/openSUSE/help-install/fi/main::opt::o_apm.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="o_apm">Ytimen valinnat: apm</a>
+</h3>
+
+<p>APM on toinen nykyisissä tietokoneissa käytettävistä virranhallinta strategioista. Sitä käytetään pääasiassa kannettavien tietokoneiden toiminnoissa kuten lepotila levylle, mutta se voi olla vastuussa myös tietokoneen sammuttamisesta. APM on riippuvainen toimivasta BIOSista. Jos BIOS on rikkinäinen, APM:llä voi olla vain rajoitettua käyttöä, tai se voi jopa estää tietokonetta toimimasta. Tämän takia APM voidaan poistaa käytöstä parametrilla <ul><li><em>apm=off</em> -- poista APM kokonaan käytöstä </li></ul></p>
+
+<p>Uusimmat tietokoneet voivat hyötyä enemmän uudemmasta <a href="#o_acpi">ACPI</a>:sta.</p>
diff --git a/themes/openSUSE/help-install/fi/main::opt::o_ide.html b/themes/openSUSE/help-install/fi/main::opt::o_ide.html
new file mode 100644
index 0000000..60b8071
--- /dev/null
+++ b/themes/openSUSE/help-install/fi/main::opt::o_ide.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="o_ide">Ytimen valinnat: ide</a>
+</h3>
+
+<p>IDE, toisin kuin SCSI, on yleisesti käytetty useimmissa työasemissa. Ohittaaksesi joitakin IDE-järjestelmien laitteisto-ongelmia, käytä ytimen parametria: <ul><li><em>ide=nodma</em> -- poista DMA käytöstä IDE-levyiltä</li></ul></p>
diff --git a/themes/openSUSE/help-install/fi/main::opt::o_install.html b/themes/openSUSE/help-install/fi/main::opt::o_install.html
new file mode 100644
index 0000000..68605ab
--- /dev/null
+++ b/themes/openSUSE/help-install/fi/main::opt::o_install.html
@@ -0,0 +1,9 @@
+<h3>
+<a name="o_install">Asentimen valinnat: asenna</a>
+</h3>
+
+<p>Oletuksena asennuslähteiksi etsitään paikallisia CD-ROM-asemia. Verkkoasennusta varten valitse <em>asenna</em>. Mahdollisia asennuskäytäntöjä ovat <ul><li>FTP</li><li>NFS</li><li>HTTP</li></ul></p>
+
+<p>Kirjoitusmuoto on kuten normaaleissa URL-osoitteissa. Esimerkiksi, jos palvelin löytyy osoitteesta 192.168.0.1 ja haluat tehdä NFS-pohjaisen asennuksen palvelimen /install-hakemistosta, määritä asennuslähde seuraavasti: <ul><li>install=nfs://192.168.0.1/install</li></ul></p>
+
+<p>Verkkokortti määritetään joko <em>dhcp</em>:llä, tai sinun pitää määrittää parametrit, kuten on kuvattu <a href="#network">verkon valinnat</a> kohdassa.</p>
diff --git a/themes/openSUSE/help-install/fi/main::opt::o_splash.html b/themes/openSUSE/help-install/fi/main::opt::o_splash.html
new file mode 100644
index 0000000..ffe38a8
--- /dev/null
+++ b/themes/openSUSE/help-install/fi/main::opt::o_splash.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="o_splash">Ytimen valinnat: splash</a>
+</h3>
+
+<p>Splash-näyttö on kuva, joka näytetään järjestelmän käynnistyksen yhteydessä. <ul><li><em>splash=0</em> -- Splash-näyttö ei ole käytössä. Tämä voi olla käytännöllistä todella vanhojen monitoreiden kanssa, tai jos virheitä ilmenee.</li><li><em>splash=verbose</em> -- Ottaa käyttöön splash-näyttö, ydin- ja käynnistysviestit näkyvät silti.</li><li><em>splash=silent</em> -- Ottaa käyttöön splash-näytön, mutta ei viestejä. Näiden sijasta käytetään etenemispalkkia.</li></ul></p>
diff --git a/themes/openSUSE/help-install/fi/main::opt::o_vnc.html b/themes/openSUSE/help-install/fi/main::opt::o_vnc.html
new file mode 100644
index 0000000..4ea259b
--- /dev/null
+++ b/themes/openSUSE/help-install/fi/main::opt::o_vnc.html
@@ -0,0 +1,9 @@
+<a name="o_vncpassword"/>
+
+<h3>
+<a name="o_vnc">Asentimen valinnat: vnc</a>
+</h3>
+
+<p>Ottaaksesi käyttöön VNC-asennuksen, määritä parametrit vnc ja vncpassword: <ul><li><em>vnc=1 vncpassword=esimerkki</em></li></ul></p>
+
+<p>VNC-palvelin käynnistetään ja voit hallita YaSTin avulla mitä tahansa VNC-asiakasohjelmaa etäjärjestelmästä.</p>
diff --git a/themes/openSUSE/help-install/fi/main::rescue.html b/themes/openSUSE/help-install/fi/main::rescue.html
new file mode 100644
index 0000000..c9834f3
--- /dev/null
+++ b/themes/openSUSE/help-install/fi/main::rescue.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="rescue">Korjausjärjestelmä</a>
+</h3>
+
+<p><em>Korjausjärjestelmä</em> on pieni RAM-levypohjainen perusjärjestelmä. Sen kautta on mahdollista tehdä kaikenlaisia muutoksia asennettuun järjestelmään. Koska vain matalan tason työkalut ovat saatavilla, se on tarkoitettu asiantuntijoille.</p>
diff --git a/themes/openSUSE/help-install/fi/main::videomode.html b/themes/openSUSE/help-install/fi/main::videomode.html
new file mode 100644
index 0000000..27ea913
--- /dev/null
+++ b/themes/openSUSE/help-install/fi/main::videomode.html
@@ -0,0 +1,9 @@
+<h3>
+<a name="videomode">Videotilan valinta</a>
+</h3>
+
+<p>Paina <em>@@@fkey_video@@@</em> saadaksesi luettelo näytönohjaimesi tukemista näyttötiloista. Korkein tila, jota näyttösi voi käyttää on esivalittu.</p>
+
+<p>On mahdollista, että näyttöäsi ei voida tunnistaa automaattisesti. Tässä tapauksessa valitse haluamasi tila manuaalisesti.</p>
+
+<p>Jos järjestelmässä on asennuksen aikana ongelmia näytönohjaimen kanssa, <em>tekstitila</em> voi olla toimiva vaihtoehto.</p>
diff --git a/themes/openSUSE/help-install/fi/navi.html b/themes/openSUSE/help-install/fi/navi.html
new file mode 100644
index 0000000..73cb4ee
--- /dev/null
+++ b/themes/openSUSE/help-install/fi/navi.html
@@ -0,0 +1 @@
+<p>Palaa <a href="#foobar">FOOBAR</a>.</p>
diff --git a/themes/openSUSE/help-install/fr/main.html b/themes/openSUSE/help-install/fr/main.html
new file mode 100644
index 0000000..c687a6a
--- /dev/null
+++ b/themes/openSUSE/help-install/fr/main.html
@@ -0,0 +1,35 @@
+<h3>
+<a name="main">Aide sur le chargeur d'amorçage</a>
+</h3>
+
+<p>Bienvenue sur <em>@@@product@@@</em></p>
+
+<p>Utilisez ce menu pour sélectionner la fonction désirée. Si vous rencontrez des problèmes de navigation dans ce système d'aide, appuyez sur <em>@@@fkey_help@@@</em> pour entrer dans la <a href="#help">description</a> du système d'aide. Les fonctions principales du menu sont :</p>
+
+<p><a href="#harddisk">Amorcer depuis le disque dur</a> : cette opération n'agit pas sur le système. Elle permet seulement de démarrer un système d'exploitation installé précédemment.</p>
+
+<p><a href="#linux">Installation</a> : ce mode d'installation fonctionne sur la plupart des machines. Si vous rencontrez un gel du système lors de l'amorçage ou des problèmes de reconnaissance des composants matériels tels que les contrôleurs de disque ou cartes réseau, essayez l'une des options d'installation suivantes.</p>
+
+<p><a href="#noacpi">Installation -- ACPI désactivé</a> : en général, les ordinateurs vendus actuellement ont des implémentations ACPI incomplètes ou défectueuses. Pour désactiver la prise en charge ACPI dans le kernel, utilisez la présente option. Celle-ci laisse toutefois actives de nombreuses fonctions de performances, notamment DMA pour les disques durs IDE.</p>
+
+<p><a href="#nolapic">Installation - APIC local désactivé</a> : Si l'installation normale échoue, cela peut être dû au fait que le matériel ne prend pas en charge l'APIC locale. Dans ce cas, utilisez cette option pour procéder à l'installation sans la prise en charge l'APIC locale.</p>
+
+<p><a href="#failsafe">Installation -- Paramètres sécurisés</a> : en cas d'échec avec <em>Installation</em>, cette option peut résoudre votre problème.</p>
+
+<p><a href="#rescue">Système de secours</a> : cette image d'amorçage démarre un petit système Linux en RAM. Cela est utile si le système ne démarre pas correctement. Une fois ce système amorcé, connectez-vous en tant que super-utilisateur (root).</p>
+
+<p><a href="#firmware">Test de microprogramme</a> : Lance un outil de test du BIOS qui valide l'ACPI et d'autres parties de votre BIOS.</p>
+
+<p><a href="#memtest">Test de mémoire</a> : le test de mémoire n'est pas uniquement utile à la vérification de l'installation des nouveaux modules de mémoire. C'est un test pour une grande partie de votre système et peut révéler des problèmes matériels.</p>
+
+<p><a href="#opt">Options d'amorçage</a> : les options d'amorçage peuvent changer complètement le fonctionnement de votre système. Elles correspondent aux paramètres du kernel.</p>
+
+<p><a href="#help">@@@fkey_help@@@ Aide</a> : cette aide est contextuelle. Elle affichera différents écrans selon l'élément actif de l'écran d'amorçage. Une description de ce système d'aide est également disponible.</p>
+
+<p><a href="#keytable">@@@fkey_lang@@@</a> : cette fonction permet de définir la langue et la disposition du clavier utilisées par le chargeur d'amorçage.</p>
+
+<p><a href="#videomode">@@@fkey_video@@@ Mode Video</a> : cette fonction permet de choisir entre différentes résolutions d'écran lors de l'installation. Si vous rencontrez des problèmes avec l'installation graphique, le <em>Mode texte</em> peut vous permettre de contourner le problème.</p>
+
+<p><a href="#install_src">@@@fkey_inst@@@ Source d'installation</a> : cette fonction permet de choisir la source d'installation.</p>
+
+<p><a href="#driverupdate">@@@fkey_dud@@@ Mise à jour de pilote</a> : pour les machines très récentes, une mise à jour de pilotes peut être nécessaire pour installer le système.</p>
diff --git a/themes/openSUSE/help-install/fr/main::bits.html b/themes/openSUSE/help-install/fr/main::bits.html
new file mode 100644
index 0000000..6ac0b50
--- /dev/null
+++ b/themes/openSUSE/help-install/fr/main::bits.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="bits">Sélection du type de logiciel</a>
+</h3>
+
+<p>Vous pouvez installer la version 32 ou 64 bits de @@@product@@@.</p>
diff --git a/themes/openSUSE/help-install/fr/main::driverupdate.html b/themes/openSUSE/help-install/fr/main::driverupdate.html
new file mode 100644
index 0000000..5ee52a5
--- /dev/null
+++ b/themes/openSUSE/help-install/fr/main::driverupdate.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="driverupdate">Mise à jour de pilotes</a>
+</h3>
+
+<p>Si vous nécessitez une disquette ou un CD de mise à jour des pilotes, appuyez sur <em>@@@fkey_dud@@@</em>. Le chargeur d'amorçage vous demandera d'insérer le support de mise à jour de pilotes après le chargement du noyau Linux.</p>
+
+<p>En général, une mise à jour de pilotes est une disquette contenant la nouvelle version de pilotes matériels ou les corrections de bogues nécessaires à l'installation.</p>
diff --git a/themes/openSUSE/help-install/fr/main::failsafe.html b/themes/openSUSE/help-install/fr/main::failsafe.html
new file mode 100644
index 0000000..02ce7b2
--- /dev/null
+++ b/themes/openSUSE/help-install/fr/main::failsafe.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="failsafe">Installation -- Paramètres sécurisés</a>
+</h3>
+
+<p>Sélectionnez <em>Installation -- Paramètres sécurisés</em> si votre système reste bloqué lors de l'installation ou si des erreurs non re-productibles se produisent. Cette option désactive DMA pour les unités IDE et toutes les fonctions de gestion de l'alimentation. Reportez-vous également aux options de noyau de <a href="#o_apm">apm</a>, <a href="#o_acpi">acpi</a> et <a href="#o_ide">ide</a>.</p>
diff --git a/themes/openSUSE/help-install/fr/main::firmware.html b/themes/openSUSE/help-install/fr/main::firmware.html
new file mode 100644
index 0000000..147645c
--- /dev/null
+++ b/themes/openSUSE/help-install/fr/main::firmware.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="firmware">Test de microprogramme</a>
+</h3>
+
+<p>Démarre un vérificateur de BIOS qui valide les tables ACPI et un grand nombre d'autres parties de votre BIOS. Les résultats de test peuvent être stockés sur un disque usb ou enregistrées sur le réseau. </p>
diff --git a/themes/openSUSE/help-install/fr/main::harddisk.html b/themes/openSUSE/help-install/fr/main::harddisk.html
new file mode 100644
index 0000000..adb3721
--- /dev/null
+++ b/themes/openSUSE/help-install/fr/main::harddisk.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="harddisk">Amorcer depuis le disque dur</a>
+</h3>
+
+<p>Sélectionnez <em>Amorcer le système installé</em> pour démarrer le système installé sur votre disque dur local. Ce système doit être installé correctement parce que seul le MBR (Master Boot Record - secteur d'amorçage principal) du premier disque dur est démarré. L'ID matériel du premier disque dur est fourni par le BIOS de l'ordinateur. </p>
+
+<p>Utilisez ce moyen si vous avez oublié de retirer le CD ou le DVD du lecteur et si vous voulez démarrer l'ordinateur depuis le disque dur.</p>
diff --git a/themes/openSUSE/help-install/fr/main::help.html b/themes/openSUSE/help-install/fr/main::help.html
new file mode 100644
index 0000000..857fbed
--- /dev/null
+++ b/themes/openSUSE/help-install/fr/main::help.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="help">Utilisation du système d'aide</a>
+</h3>
+
+<p>L'aide en ligne du chargeur d'amorçage est contextuelle. Elle fournit des informations sur l'élément du menu sélectionné. Lors de la modification de la configuration d'amorçage, elle recherche des informations sur l'option indiquée par l'emplacement du curseur.</p>
+
+<p>Touches de navigation <ul><li><em>Flèche haut</em> : mettre en sur-brillance le lien précédent</li><li><em>Flèche bas</em> : mettre en sur-brillance le lien suivant</li><li><em>Flèche gauche</em>, <em>Retour arrière</em> : retour à la rubrique précédente</li><li><em>Flèche droite</em>, <em>Entrée</em>, <em>Espace</em> : suivre le lien</li><li><em>Page haut</em> : faire défiler une page vers le haut</li><li><em>Page bas</em> : faire défiler une page vers le bas</li><li><em>Domicile</em> : aller au début de la page</li><li><em>Fin</em> : aller à la fin de la page</li><li><em>Échap</em> : quitter l'aide</li></ul></p>
diff --git a/themes/openSUSE/help-install/fr/main::install_src.html b/themes/openSUSE/help-install/fr/main::install_src.html
new file mode 100644
index 0000000..91948df
--- /dev/null
+++ b/themes/openSUSE/help-install/fr/main::install_src.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="install_src">Source d'installation</a>
+</h3>
+
+<p>Appuyez <em>@@@fkey_inst@@@</em> pour choisir une source d'installation</p>
+
+<p>Cette opération revient au même que d'utiliser l'option d'amorçage <a href="#o_install">install</a>.</p>
diff --git a/themes/openSUSE/help-install/fr/main::keytable.html b/themes/openSUSE/help-install/fr/main::keytable.html
new file mode 100644
index 0000000..4b19d95
--- /dev/null
+++ b/themes/openSUSE/help-install/fr/main::keytable.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="keytable">Sélection de la langue et de la disposition du clavier</a>
+</h3>
+
+<p>Appuyez sur <em>@@@fkey_lang@@@</em> pour changer la langue et la disposition du clavier utilisées par le chargeur d'amorçage.</p>
diff --git a/themes/openSUSE/help-install/fr/main::linux.html b/themes/openSUSE/help-install/fr/main::linux.html
new file mode 100644
index 0000000..0d3fd2e
--- /dev/null
+++ b/themes/openSUSE/help-install/fr/main::linux.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="linux">Installation</a>
+</h3>
+
+<p>Sélectionnez <em>Installation</em> pour démarrer l'installation par défaut. Les <a href="#opt">Options d'amorçage</a> entrées sont utilisées lors du démarrage. Cet élément active de nombreuses fonctions du matériel couramment disponible.</p>
diff --git a/themes/openSUSE/help-install/fr/main::memtest.html b/themes/openSUSE/help-install/fr/main::memtest.html
new file mode 100644
index 0000000..cd46b9a
--- /dev/null
+++ b/themes/openSUSE/help-install/fr/main::memtest.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="memtest">Test de mémoire</a>
+</h3>
+
+<p>Le <em>Test de mémoire</em> inclus fournit de bonnes possibilités de procéder à des tests de contraintes du matériel. Il vise principalement à détecter des RAM défectueuses mais il teste également beaucoup d'autres parties du système.</p>
+
+<p>Il n'y a aucune garantie que la mémoire est bonne si aucune erreur n'est trouvée, bien que la plupart des défauts de la mémoire soient détectés.</p>
diff --git a/themes/openSUSE/help-install/fr/main::noacpi.html b/themes/openSUSE/help-install/fr/main::noacpi.html
new file mode 100644
index 0000000..57d1bc0
--- /dev/null
+++ b/themes/openSUSE/help-install/fr/main::noacpi.html
@@ -0,0 +1,9 @@
+<h3>
+<a name="noacpi">Installation -- ACPI désactivé</a>
+</h3>
+
+<p>Les matériels actuels nécessitent généralement l'ACPI (Advanced Configuration and Power Interface) pour gérer les interruptions. L'ACPI remplace totalement l'ancien système APM.</p>
+
+<p>Sélectionnez <em>Installation -- ACPI désactivé</em> si vous rencontrez des problèmes lors de l'amorçage du noyau. Les problèmes connus avec ACPI sont : <ul><li>gels du noyau lors de l'amorçage</li><li>Les cartes PCI ne sont pas détectées ou initialisées correctement</li></ul></p>
+
+<p>Vous pouvez aussi essayer l'option d'amorçage <a href="#firmware">Test de microprogramme</a> et regarder les résultats de la validation ACPI.</p>
diff --git a/themes/openSUSE/help-install/fr/main::nolapic.html b/themes/openSUSE/help-install/fr/main::nolapic.html
new file mode 100644
index 0000000..f488f60
--- /dev/null
+++ b/themes/openSUSE/help-install/fr/main::nolapic.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="nolapic">Installation - APIC local désactivé</a>
+</h3>
+
+<p>Normalement, il n'existe pas de problème avec l'APIC (Advanced Programmable Interrupt Controller). Par contre, s'il vous semble que vous en rencontrez un, essayez cette option pour procéder à l'amorçage sans la prise en charge APIC locale.</p>
+
+<p>Merci de ne pas confondre avec <a href="#noacpi">acpi</a> (Advanced Configuration and Power Interface).</p>
diff --git a/themes/openSUSE/help-install/fr/main::opt.html b/themes/openSUSE/help-install/fr/main::opt.html
new file mode 100644
index 0000000..13c683c
--- /dev/null
+++ b/themes/openSUSE/help-install/fr/main::opt.html
@@ -0,0 +1,9 @@
+<h3>
+<a name="opt">Options d'amorçage</a>
+</h3>
+
+<p>Il y a deux types d'options d'amorçage disponibles. Celles qui agissent sur l'installateur et celles du noyau. Les plus courantes sont notamment les suivantes :</p>
+
+<p>a) Options du programme d'installation <ul><li><a href="#o_install">install</a> -- sélectionne une source d'installation</li><li><a href="#network">options réseau</a> -- les options réseau</li><li><a href="#o_vnc">options VNC</a> -- les options d'installation via VNC</li></ul></p>
+
+<p>b) Options du noyau <ul><li><a href="#o_splash">splash</a> -- détermine le fonctionnement de l'écran de démarrage</li><li><a href="#o_apm">apm</a> -- active ou non la fonction de gestion de l'alimentation</li><li><a href="#o_acpi">acpi</a> -- configuration avancée et interface de gestion de l'alimentation</li><li><a href="#o_ide">ide</a> -- contrôle le sous-système IDE</li></ul></p>
diff --git a/themes/openSUSE/help-install/fr/main::opt::network.html b/themes/openSUSE/help-install/fr/main::opt::network.html
new file mode 100644
index 0000000..688c01a
--- /dev/null
+++ b/themes/openSUSE/help-install/fr/main::opt::network.html
@@ -0,0 +1,13 @@
+<a name="o_hostip"/>
+<a name="o_netmask"/>
+<a name="o_gateway"/>
+
+<h3>
+<a name="network">Options du programme d'installation : options réseau</a>
+</h3>
+
+<p>Il est possible de configurer l'interface réseau dès maintenant. Le matériel sera détecté ultérieurement par YaST2. Le jeu minimum d'options pour configurer votre carte réseau consiste en l'IP d'hôte et le masque réseau. Par exemple :<ul><li>hostip=192.168.0.10 netmask=255.255.255.0</li></ul></p>
+
+<p>ou dans une forme plus courte : <ul><li>hostip=192.168.0.10/24</li></ul></p>
+
+<p>Si vous spécifiez une <a href="#o_install">installation basée réseau</a> et ne définissez aucune de ces deux options, le programme d'installation essaie de configurer l'interface réseau avec <em>DHCP</em>. Si vous nécessitez une passerelle par défaut, spécifiez-le avec l'option <em>Passerelle</em>. Par exemple : <ul><li>gateway=192.168.0.8</li></ul></p>
diff --git a/themes/openSUSE/help-install/fr/main::opt::o_acpi.html b/themes/openSUSE/help-install/fr/main::opt::o_acpi.html
new file mode 100644
index 0000000..81dadbf
--- /dev/null
+++ b/themes/openSUSE/help-install/fr/main::opt::o_acpi.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="o_acpi">Options de kernel : acpi</a>
+</h3>
+
+<p>Le standard ACPI (Advanced Configuration and Power Interface) définit les interfaces de gestion d'alimentation et de configuration entre un système d'exploitation et le BIOS. Par défaut, <em>acpi</em> est activé lorsqu'un BIOS ultérieur à l'année 2000 est détecté. Il existe plusieurs paramètres utilisés couramment pour contrôler le fonctionnement de ACPI : ul&gt;<li><em>pci=noacpi</em> -- ne pas utiliser ACPI pour router les interruptions PCI</li><li><em>acpi=oldboot</em> -- seules les parties de ACPI en rapport avec l'amorçage restent activées</li><li><em>acpi=off</em> -- désactiver complètement ACPI</li><li><em>acpi=force</em> -- activer ACPI même si votre BIOS est antérieur à 2000</li></p>
+
+<p>Le remplacement de l'ancien système <a href="#o_apm">apm</a> s'applique notamment aux nouveaux ordinateurs.</p>
diff --git a/themes/openSUSE/help-install/fr/main::opt::o_apm.html b/themes/openSUSE/help-install/fr/main::opt::o_apm.html
new file mode 100644
index 0000000..cc551a4
--- /dev/null
+++ b/themes/openSUSE/help-install/fr/main::opt::o_apm.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="o_apm">Options de kernel : apm</a>
+</h3>
+
+<p>APM est l'une des deux stratégies de gestion de l'alimentation des ordinateurs actuels. Elle est utilisée principalement sur les ordinateurs portables pour des fonctions telles que la mise en veille sur disque. Par ailleurs, elle peut désactiver l'ordinateur après sa mise hors tension. APM dépend du fonctionnement correct du BIOS. Si le BIOS est défectueux, APM peut être d'une utilité limitée ou même empêcher l'ordinateur de fonctionner. Dans ces cas, elle peut être désactivée à l'aide du paramètre <ul><li><em>apm=off</em> -- désactiver complètement APM</li></ul></p>
+
+<p>Certains ordinateurs très récent pourront tirer un plus grand avantage en utilisant le nouveau <a href="#o_acpi">acpi</a></p>
diff --git a/themes/openSUSE/help-install/fr/main::opt::o_ide.html b/themes/openSUSE/help-install/fr/main::opt::o_ide.html
new file mode 100644
index 0000000..d5c2595
--- /dev/null
+++ b/themes/openSUSE/help-install/fr/main::opt::o_ide.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="o_ide">Options de kernel : ide</a>
+</h3>
+
+<p>À la différence de SCSI, IDE est couramment utilisé sur la plupart des postes de travail de bureau. Pour contourner certains problèmes matériels des systèmes IDE, utilisez le paramètre de noyau suivant : <ul><li><em>ide=nodma</em> -- désactiver le DMA pour les lecteurs IDE</li></ul></p>
diff --git a/themes/openSUSE/help-install/fr/main::opt::o_install.html b/themes/openSUSE/help-install/fr/main::opt::o_install.html
new file mode 100644
index 0000000..7149b12
--- /dev/null
+++ b/themes/openSUSE/help-install/fr/main::opt::o_install.html
@@ -0,0 +1,9 @@
+<h3>
+<a name="o_install">Options du programme d'installation : install</a>
+</h3>
+
+<p>Par défaut, la source d'installation est recherchée dans les CD-ROM locaux. Pour une installation réseau, sélectionnez l'option <em>install</em>. Les protocoles d'installation possibles sont <ul><li>FTP</li><li>NFS</li><li>HTTP</li></ul></p>
+
+<p>La syntaxe à utiliser est simplement comme celle des URL standard. Par exemple, si votre serveur se trouve à l'adresse 192.168.0.1 et si vous voulez procéder à une installation basée NFS depuis le répertoire /install de ce serveur, spécifiez la source comme suit :<ul><li>install=nfs://192.168.0.1/install</li></ul></p>
+
+<p>La carte réseau sera configurée avec <em>DHCP</em> ou vous devrez spécifier les paramètres vous-même conformément à la description <a href="#network">options réseau</a>.</p>
diff --git a/themes/openSUSE/help-install/fr/main::opt::o_splash.html b/themes/openSUSE/help-install/fr/main::opt::o_splash.html
new file mode 100644
index 0000000..d91ceb5
--- /dev/null
+++ b/themes/openSUSE/help-install/fr/main::opt::o_splash.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="o_splash">Options de kernel : splash</a>
+</h3>
+
+<p>L'écran de démarrage est l'image affichée durant l'amorçage du système.<ul><li><em>splash=0</em> -- L'écran de démarrage est désactivé. Ça peut être utile avec des moniteurs très anciens ou si certaines erreurs surviennent.</li><li><em>splash=verbose</em> -- Active l'écran de démarrage sans faire disparaître les messages du noyau et d'amorçage.</li><li><em>splash=silent</em> -- Active l'écran de démarrage sans les messages. À la place, une barre de progression est représentée.</li></ul></p>
diff --git a/themes/openSUSE/help-install/fr/main::opt::o_vnc.html b/themes/openSUSE/help-install/fr/main::opt::o_vnc.html
new file mode 100644
index 0000000..89ed5c9
--- /dev/null
+++ b/themes/openSUSE/help-install/fr/main::opt::o_vnc.html
@@ -0,0 +1,9 @@
+<a name="o_vncpassword"/>
+
+<h3>
+<a name="o_vnc">Options du programme d'installation : vnc</a>
+</h3>
+
+<p>Pour activer l'installation VNC, spécifiez les paramètres vnc et vncpassword :<ul><li><em>vnc=1 vncpassword=example</em></li></ul></p>
+
+<p>Le serveur VNC sera démarré et vous pourrez contrôler YaST2 sur tout client VNC depuis un système distant.</p>
diff --git a/themes/openSUSE/help-install/fr/main::rescue.html b/themes/openSUSE/help-install/fr/main::rescue.html
new file mode 100644
index 0000000..940042d
--- /dev/null
+++ b/themes/openSUSE/help-install/fr/main::rescue.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="rescue">Système de secours</a>
+</h3>
+
+<p>Le <em>Système de secours</em> est un petit système de base sur RAM. Depuis ce système, il est possible de procéder à tous les types de changements sur un système installé. Étant donné que ce système ne dispose que d'outils de bas niveau, il est réservé aux experts.</p>
diff --git a/themes/openSUSE/help-install/fr/main::videomode.html b/themes/openSUSE/help-install/fr/main::videomode.html
new file mode 100644
index 0000000..5cd71b5
--- /dev/null
+++ b/themes/openSUSE/help-install/fr/main::videomode.html
@@ -0,0 +1,9 @@
+<h3>
+<a name="videomode">Sélection du mode vidéo</a>
+</h3>
+
+<p>Appuyez sur <em>@@@fkey_video@@@</em> pour obtenir la liste des modes vidéo pris en charge par votre carte graphique. Le mode d'affichage maximum de votre moniteur est pré sélectionné.</p>
+
+<p>Il est possible que votre moniteur ne soit pas détecté automatiquement. Dans ce cas, sélectionnez votre mode préféré manuellement.</p>
+
+<p>Si votre système rencontre des problèmes avec la carte graphique lors de l'installation, le <em>Mode texte</em> peut vous permettre de contourner le problème.</p>
diff --git a/themes/openSUSE/help-install/fr/navi.html b/themes/openSUSE/help-install/fr/navi.html
new file mode 100644
index 0000000..ef336c5
--- /dev/null
+++ b/themes/openSUSE/help-install/fr/navi.html
@@ -0,0 +1 @@
+<p>Retour à la rubrique <a href="#foobar">FOOBAR</a></p>
diff --git a/themes/openSUSE/help-install/gl/main.html b/themes/openSUSE/help-install/gl/main.html
new file mode 100644
index 0000000..6281e7c
--- /dev/null
+++ b/themes/openSUSE/help-install/gl/main.html
@@ -0,0 +1,35 @@
+<h3>
+<a name="main">Axuda do Cargador de Arrinque</a>
+</h3>
+
+<p>Benvido a <em>@@@product@@@</em></p>
+
+<p>Use este menú para seleccionar a función desexada. Se ten problemas ao navegar neste sistema de axuda, prema <em>@@@fkey_help@@@</em> para entrar no <a href="#help">descrición</a> do sistema de axuda. As funcións principais deste menú son:</p>
+
+<p><a href="#harddisk">Arrincar dende o Disco Duro</a>: Esta selección non lle fará nada ó sistema. Só inicia un sistema operativo xa instalado.</p>
+
+<p><a href="#linux">Instalación</a>: Este modo de instalación funciona na maioría das máquinas. Se ve que o sistema se conxela durante o inicio ou ten problemas coa detección dos compoñentes do hardware, coma controladoras de disco ou tarxetas de rede, probe unha das seguintes opcións de instalación.</p>
+
+<p><a href="#noacpi">Instalación -- ACPI Deshabilitado</a>: Moitos dos ordenadores que se venden hoxe en día veñen con implementacións de ACPI incompletas ou con fallos. Esta selección deshabilita o soporte de ACPI no kernel, pero aínda habilita moitas funcionalidades de rendemento coma DMA para discos duros IDE.</p>
+
+<p><a href="#nolapic">Instalación -- APIC Local Deshabilitado</a>: Se falla a instalación normal, podería deberse a que o hardware do sistema non soporta APIC local. Se parece que este é o caso, use esta opción para instalar sen soporte de APIC local.</p>
+
+<p><a href="#failsafe">Instalación -- Opcións Seguras</a>: Se non tivo éxito con <em>Instalación</em>, esta selección podería resolver o problema.</p>
+
+<p><a href="#rescue">Rescatar Sistema</a>: Esta imaxe de arrinque inicia un pequeno sistema Linux na RAM. Isto é útil se o sistema non inicia correctamente. Despois de iniciar este sistema, inicie sesión coma root.</p>
+
+<p><a href="#firmware">Proba de Firmware</a>: Executa unha ferramenta de proba da BIOS que valida ACPI e outras partes da BIOS.</p>
+
+<p><a href="#memtest">Proba de Memoria</a>: A proba de memoria é útil para máis cousas que para comprobar a instalación de novos módulos de memoria. É unha proba de rendemento para a maioría do sistema do ordenador e podería indicar problemas de hardware.</p>
+
+<p><a href="#opt">Opcións de Arrinque</a>: As opcións de arrinque poderían cambiar totalmente o comportamento do sistema. Son opcións para o kernel.</p>
+
+<p><a href="#help">@@@fkey_help@@@ Axuda</a>: Isto é sensible ó contexto. Amosará pantallas diferentes dependendo do elemento activo na pantalla de arrinque. Tamén hai dispoñible unha descrición deste sistema de axuda.</p>
+
+<p><a href="#keytable">@@@fkey_lang@@@</a>: Establecer a lingua e a disposición de teclado que usa o cargador de arrinque.</p>
+
+<p><a href="#videomode">@@@fkey_video@@@ Modo de Video</a>: Aquí pode elixir diferentes resolucións mentres instala. Se atopa problemas coa instalación gráfica, o <em>modo texto</em> podería ser unha segunda opción.</p>
+
+<p><a href="#install_src">@@@fkey_inst@@@ Fonte de Instalación</a>: Escolla a fonte de instalación.</p>
+
+<p><a href="#driverupdate">@@@fkey_dud@@@ Actualización do driver</a>: Podería ser necesaria unha actualizacións de drivers para instalar o sistema en máquinas moi novas.</p>
diff --git a/themes/openSUSE/help-install/gl/main::bits.html b/themes/openSUSE/help-install/gl/main::bits.html
new file mode 100644
index 0000000..562e821
--- /dev/null
+++ b/themes/openSUSE/help-install/gl/main::bits.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="bits">Selección de Tipo de Software</a>
+</h3>
+
+<p>Ten a oportunidade de instalar a versión de 32 bits ou de 64 bits de @@product@@@.</p>
diff --git a/themes/openSUSE/help-install/gl/main::driverupdate.html b/themes/openSUSE/help-install/gl/main::driverupdate.html
new file mode 100644
index 0000000..b616bb4
--- /dev/null
+++ b/themes/openSUSE/help-install/gl/main::driverupdate.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="driverupdate">Actualización de Driver</a>
+</h3>
+
+<p>Se precisa un disquete ou CD-ROM de actualizacións de drivers, prema <em>@@@fkey_dud@@@</em>. O cargador de arrinque solicítalle que insira o soporte de actualización de drivers despois de cargar o kernel Linux.</p>
+
+<p>Unha actualización de driver é normalmente un disquete con novas versións de drivers de hardware ou correccións de erros necesarias durante a instalación.</p>
diff --git a/themes/openSUSE/help-install/gl/main::failsafe.html b/themes/openSUSE/help-install/gl/main::failsafe.html
new file mode 100644
index 0000000..dc49c75
--- /dev/null
+++ b/themes/openSUSE/help-install/gl/main::failsafe.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="failsafe">Instalación -- Opcións Seguras</a>
+</h3>
+
+<p>Seleccione <em>Instalación -- Opcións Seguras</em> se se colga o sistema ó instalar ou se dan erros imposibles de reproducir. Esta opción deshabilita DMA para as unidades IDE ademais de todas as funcionalidades de xestión de enerxía. Mire tamén as opcións do kernel para <a href="#o_apm">apm</a>, <a href="#o_acpi">acpi</a> e <a href="#o_ide">ide</a>.</p>
diff --git a/themes/openSUSE/help-install/gl/main::firmware.html b/themes/openSUSE/help-install/gl/main::firmware.html
new file mode 100644
index 0000000..98f7688
--- /dev/null
+++ b/themes/openSUSE/help-install/gl/main::firmware.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="firmware">Proba de Firmware</a>
+</h3>
+
+<p>Inicia un comprobador da BIOS que valida as táboas de ACPI e moitas outras partes da BIOS. Os resultados da proba poden almacenarse nun disco usb ou gardarse a través da rede.</p>
diff --git a/themes/openSUSE/help-install/gl/main::harddisk.html b/themes/openSUSE/help-install/gl/main::harddisk.html
new file mode 100644
index 0000000..06da253
--- /dev/null
+++ b/themes/openSUSE/help-install/gl/main::harddisk.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="harddisk">Arrincar dende o Disco Duro</a>
+</h3>
+
+<p> Seleccione <em>Arrincar SO Instalado</em> para iniciar o sistema instalado no disco duro local. Este sistema debe estar instalado correctamente, porque só se inicia o MBR (Master Boot Record) do primeiro disco duro. O ID de dispositivo do primeiro disco duro é proporcionado pola BIOS do ordenador.</p>
+
+<p>Use isto se esqueceu quitar o CD ou o DVD da unidade e desexa iniciar o ordenador dende o disco duro.</p>
diff --git a/themes/openSUSE/help-install/gl/main::help.html b/themes/openSUSE/help-install/gl/main::help.html
new file mode 100644
index 0000000..e35a346
--- /dev/null
+++ b/themes/openSUSE/help-install/gl/main::help.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="help">Usando o Sistema de Axuda</a>
+</h3>
+
+<p>A axuda en liña do cargador de arrinque é sensible ó contexto. Da información sobre o elemento do menú seleccionado ou, se está editando as opcións de arrinque, intenta buscar información sobre a opción na que está posicionado o cursor.</p>
+
+<p>Teclas de Navegación<ul><li><em>Frecha Arriba</em>: resaltar a ligazón anterior</li><li><em>Frecha Abaixo</em>: resaltar a seguinte ligazón</li><li><em>Frecha Esquerda</em>, <em>Retroceso</em>: volver ó tema anterior</li><li><em>Frecha Dereita</em>, <em>Intro</em>, <em>Espazo</em>: seguir a ligazón</li><li><em>Re Páx</em>: desprazar cara arriba unha páxina</li><li><em>Av Páx</em>: desprazar cara abaixo unha páxina</li><li><em>Inicio</em>: ir ó inicio da páxina</li><li><em>Fin</em>: ir ó final da páxina</li><li><em>Esc</em>: deixar a axuda</li></ul></p>
diff --git a/themes/openSUSE/help-install/gl/main::install_src.html b/themes/openSUSE/help-install/gl/main::install_src.html
new file mode 100644
index 0000000..6376feb
--- /dev/null
+++ b/themes/openSUSE/help-install/gl/main::install_src.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="install_src">Fonte de Instalación</a>
+</h3>
+
+<p>Escolla <em>@@@fkey_inst@@@</em> para elixir unha fonte de instalación.</p>
+
+<p>Isto é o mesmo ca usar a opción de arrinque <a href="#o_install">instalar</a>.</p>
diff --git a/themes/openSUSE/help-install/gl/main::keytable.html b/themes/openSUSE/help-install/gl/main::keytable.html
new file mode 100644
index 0000000..32eadeb
--- /dev/null
+++ b/themes/openSUSE/help-install/gl/main::keytable.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="keytable">Selección de Lingua e Disposición de Teclado</a>
+</h3>
+
+<p>Prema <em>@@@fkey_lang@@@</em> para cambiar a lingua e a disposición de teclado que usa o cargador de arrinque.</p>
diff --git a/themes/openSUSE/help-install/gl/main::linux.html b/themes/openSUSE/help-install/gl/main::linux.html
new file mode 100644
index 0000000..c9dbf3c
--- /dev/null
+++ b/themes/openSUSE/help-install/gl/main::linux.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="linux">Instalación</a>
+</h3>
+
+<p>Seleccione <em>Instalación</em> para iniciar a instalación predeterminada. Os <a href="#opt">opcións de arrinque</a> introducidos úsanse no arrinque. Este elemento activa moitas funcionalidades dispoñibles no hardware comunmente usado.</p>
diff --git a/themes/openSUSE/help-install/gl/main::memtest.html b/themes/openSUSE/help-install/gl/main::memtest.html
new file mode 100644
index 0000000..06c6c5b
--- /dev/null
+++ b/themes/openSUSE/help-install/gl/main::memtest.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="memtest">Proba de Memoria</a>
+</h3>
+
+<p>A <placeholder-2/> incluída proporciona boas posibilidades para facer probas de rendemento do hardware dun sistema. O seu propósito principal é detectar RAM estragada, pero tamén esixe moito doutras partes do sistema.</p>
+
+<p>Non hai garantias de que a memoria estea ben se non se atopan erros, aínda que se atoparán a maioría dos defectos da memoria.</p>
diff --git a/themes/openSUSE/help-install/gl/main::noacpi.html b/themes/openSUSE/help-install/gl/main::noacpi.html
new file mode 100644
index 0000000..3864b0f
--- /dev/null
+++ b/themes/openSUSE/help-install/gl/main::noacpi.html
@@ -0,0 +1,9 @@
+<h3>
+<a name="noacpi">Instalación -- ACPI Deshabilitado</a>
+</h3>
+
+<p>O hardware actual normalmente precisa ACPI (Advanced Configuration and Power Interface) para controlar o manexo de interrupcións. ACPI substitúe totalmente ó antigo sistema APM</p>
+
+<p>Seleccione <em>Instalación -- ACPI Deshabilitado</em> se ten problemas durante o inicio do kernel. Os problemas coñecidos en máquinas que teñen problemas con ACPI son: <br><li>o kernel conxélase ao arrincar</li><li>As tarxetas PCI non se detectan ou se inicializan axeitadamente</li></br></p>
+
+<p>Tamén podería probar a opción de arrinque <a href="#firmware">Proba de Firmware</a> e mirar os resultados da proba de validación de ACPI.</p>
diff --git a/themes/openSUSE/help-install/gl/main::nolapic.html b/themes/openSUSE/help-install/gl/main::nolapic.html
new file mode 100644
index 0000000..49ec393
--- /dev/null
+++ b/themes/openSUSE/help-install/gl/main::nolapic.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="nolapic">Instalación -- APIC Local Deshabilitado</a>
+</h3>
+
+<p>Normalmente non hai problemas con APIC (Advanced Programmable Interrupt Controller). Pero se parece que ten algún, probe esta opción para arrincar sen soporte de APIC local.</p>
+
+<p>Non confunda isto con <a href="#noacpi">ACPI</a> (Advanced Configuration and Power Interface).</p>
diff --git a/themes/openSUSE/help-install/gl/main::opt.html b/themes/openSUSE/help-install/gl/main::opt.html
new file mode 100644
index 0000000..5d80a4b
--- /dev/null
+++ b/themes/openSUSE/help-install/gl/main::opt.html
@@ -0,0 +1,9 @@
+<h3>
+<a name="opt">Opcións de Arrinque</a>
+</h3>
+
+<p>Hai dous tipos de opcións de arrinque dispoñibles. Primeiro están as opcións que afectan ó instalador. Ademais están as opcións do kernel. Algunhas das opcións máis comúns son:</p>
+
+<p>a) opcións do instalador <ul><li><a href="#o_install">instalar</a> -- seleccione unha fonte de instalación</li><li><a href="#network">opcións de rede</a> -- as opcións de rede</li><li><a href="#o_vnc">opcións vnc</a> -- opcións de instalación a través de VNC</li></ul></p>
+
+<p>a) opcións do kernel <ul><li><a href="#o_splash">splash</a> -- influir no comportamento da pantalla de inicio (splash)</li><li><a href="#o_apm">apm</a> -- activar/desactivar a xestión de enerxía</li><li><a href="#o_acpi">acpi</a> -- interface avanzada de configuración e enerxía</li><li><a href="#o_ide">ide</a> -- controlar o subsistema IDE</li></ul></p>
diff --git a/themes/openSUSE/help-install/gl/main::opt::network.html b/themes/openSUSE/help-install/gl/main::opt::network.html
new file mode 100644
index 0000000..d3ab0f2
--- /dev/null
+++ b/themes/openSUSE/help-install/gl/main::opt::network.html
@@ -0,0 +1,13 @@
+<a name="o_hostip"/>
+<a name="o_netmask"/>
+<a name="o_gateway"/>
+
+<h3>
+<a name="network">Opcións do Instalador: Opcións de Rede</a>
+</h3>
+
+<p>É posible configurar a interface de rede agora. YaST ha detectar o hardware máis adiante. O conxunto mínimo de opcións para configurar a tarxeta de rede consiste nunha IP de máquina e unha máscara de rede. Por exemplo: <ul><li>hostip=192.168.0.10 netmask=255.255.255.0</li></ul></p>
+
+<p>en máis curto: <ul><li>hostip=192.168.0.10/24</li></ul></p>
+
+<p>Se especificou <a href="#o_install">instalación por rede</a> e non especificou ámbalas dúas opcións, o instalador intenta configurar a interface de rede con <em>dhcp</em>. Se precisa unha pasarela predeterminada, especifique isto coa opción <em>gateway</em>. Por exemplo: <ul><li>gateway=192.168.0.8</li></ul></p>
diff --git a/themes/openSUSE/help-install/gl/main::opt::o_acpi.html b/themes/openSUSE/help-install/gl/main::opt::o_acpi.html
new file mode 100644
index 0000000..5373ffe
--- /dev/null
+++ b/themes/openSUSE/help-install/gl/main::opt::o_acpi.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="o_acpi">Opcións do Kernel: acpi</a>
+</h3>
+
+<p> ACPI (Advanced Configuration and Power Interface) é un estándar que define interfaces de xestión de configuración e de enerxía entre un sistema operativo e a BIOS. Por defecto, actívase <em>acpi</em> cando se detecta unha BIOS posterior ó ano 2000. Hai varios parámetros que se usan normalmente para controlar o comportamento de ACPI: <ul><li><em>pci=noacpi</em> -- non usar ACPI para guiar as interrupcións PCI</li><li><em>acpi=oldboot</em> -- só permanecen activadas as partes de ACPI que son necesarias para arrincar</li><li><em>acpi=off</em> -- desactivar totalmente ACPI</li><li><em>acpi=force</em> -- activar ACPI incluso se a BIOS é anterior ó 2000</li></ul></p>
+
+<p>Sobre todo nos ordenadores novos, substitúe ó antigo sistema <a href="#o_apm">apm</a>.</p>
diff --git a/themes/openSUSE/help-install/gl/main::opt::o_apm.html b/themes/openSUSE/help-install/gl/main::opt::o_apm.html
new file mode 100644
index 0000000..a83a8a8
--- /dev/null
+++ b/themes/openSUSE/help-install/gl/main::opt::o_apm.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="o_apm">Opcións do Kernel: apm</a>
+</h3>
+
+<p>APM é unha das dúas estratexias de xestión de enerxía que se usan nos ordenadores actuais. Úsase principalmente nos portátiles para funcións coma suspender a disco, pero tamén pode ser responsable de apagar o ordenador despois dunha caída da enerxía. APM depende unha BIOS que funcione ben. Se a BIOS está estragada, APM podería ter só un uso limitado ou incluso evitaría que o ordenador funcionara. Polo tanto, debería desactivarse co parámetro <ul><li><em>apm=off</em> -- desactivar totalmente ACPI</li></ul></p>
+
+<p>Algúns sistemas novos poderían beneficiarse do novo <a href="#o_acpi">ACPI</a>.</p>
diff --git a/themes/openSUSE/help-install/gl/main::opt::o_ide.html b/themes/openSUSE/help-install/gl/main::opt::o_ide.html
new file mode 100644
index 0000000..54fdab8
--- /dev/null
+++ b/themes/openSUSE/help-install/gl/main::opt::o_ide.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="o_ide">Opcións do Kernel: ide</a>
+</h3>
+
+<p>IDE, a diferencia de SCSI, úsase normalmente na meirande parte das estacións de traballo de escritorio. Para evitar algúns problemas de hardware que ocorren cos sistemas IDE, use o parámetro do kernel: <ul><li><em>ide=nodma</em> -- desactivar DMA para dispositivos IDE</li></ul></p>
diff --git a/themes/openSUSE/help-install/gl/main::opt::o_install.html b/themes/openSUSE/help-install/gl/main::opt::o_install.html
new file mode 100644
index 0000000..948f9bb
--- /dev/null
+++ b/themes/openSUSE/help-install/gl/main::opt::o_install.html
@@ -0,0 +1,9 @@
+<h3>
+<a name="o_install">Opcións do Instalador: install</a>
+</h3>
+
+<p>Por defecto búscase a fonte de instalación nos CD-ROMs locais. Para unha instalación por rede seleccione a opción <placeholder1/>. Os protocolos de instalación posibles son <ul><li>FTP</li><li>NFS</li><li>HTTP</li></ul></p>
+
+<p>A sintaxe a usar é coma a dos URLs estándar. Por exemplo, se o servidor se atopa en 192.168.0.1 e desexa facer unha instalación por NFS dende o directorio /install dese servidor, especifique a fonte así: <ul><li>install=nfs://192.168.0.1/install</li></ul></p>
+
+<p>A tarxeta de rede pode configurarse con <em>dhcp</em> ou pode especificar os parámetros vostede mesmo tal coma se describe en <a href="#network">opcións de rede</a>.</p>
diff --git a/themes/openSUSE/help-install/gl/main::opt::o_splash.html b/themes/openSUSE/help-install/gl/main::opt::o_splash.html
new file mode 100644
index 0000000..2177438
--- /dev/null
+++ b/themes/openSUSE/help-install/gl/main::opt::o_splash.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="o_splash">Opcións do Kernel: splash</a>
+</h3>
+
+<p>A pantalla inicial é a imaxe que se mostra durante o inicio do sistema. <ul><li><em>splash=0</em> --A pantalla inicial está desactivada. Isto podería ser útil con monitores moi antigos ou se ocorre algún erro.</li><li><em>splash=verbose</em> -- Activa splash, as mensaxes de inicio e do núcleo siguen sendo amosadas.</li><li><em>splash=silent</em> -- Activa a pantalla de inicio (splash), pero sen mensaxes. En troques debúxase unha barra de progreso.</li></ul></p>
diff --git a/themes/openSUSE/help-install/gl/main::opt::o_vnc.html b/themes/openSUSE/help-install/gl/main::opt::o_vnc.html
new file mode 100644
index 0000000..19adc76
--- /dev/null
+++ b/themes/openSUSE/help-install/gl/main::opt::o_vnc.html
@@ -0,0 +1,9 @@
+<a name="o_vncpassword"/>
+
+<h3>
+<a name="o_vnc">Opcións do Instalador: vnc</a>
+</h3>
+
+<p>Para activar a instalación VNC, especifique os parámetros vnc e vncpassword: <ul><li><em>vnc=1 vncpassword=exemplo</em></li></ul></p>
+
+<p>Hase iniciar o servidor VNC e poderá controlar YaST2 a través de calquera cliente VNC dende un sistema remoto.</p>
diff --git a/themes/openSUSE/help-install/gl/main::rescue.html b/themes/openSUSE/help-install/gl/main::rescue.html
new file mode 100644
index 0000000..cdd8450
--- /dev/null
+++ b/themes/openSUSE/help-install/gl/main::rescue.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="rescue">Rescatar Sistema</a>
+</h3>
+
+<p>O <placeholder-2/> é un pequeno disco RAM dun sistema básico. Dende el é posible facer todo tipo de cambios nun sistema instalado. Debido a que só hai dispoñibles ferramentas de baixo nivel, está dirixido a expertos.</p>
diff --git a/themes/openSUSE/help-install/gl/main::videomode.html b/themes/openSUSE/help-install/gl/main::videomode.html
new file mode 100644
index 0000000..8949f51
--- /dev/null
+++ b/themes/openSUSE/help-install/gl/main::videomode.html
@@ -0,0 +1,9 @@
+<h3>
+<a name="videomode">Selección de Modo de Vídeo</a>
+</h3>
+
+<p>Prema <em>@@@fkey_video@@@</em> para obter a lista dos modos de vídeo que soporta a súa tarxeta gráfica. Selecciónase automaticamente o modo maior que pode mostrar o seu monitor.</p>
+
+<p>É posible que non se poida detectar automaticamente o seu monitor. Neste caso, seleccione o modo desexado a man.</p>
+
+<p>Se o sistema ten problemas ca tarxeta gráfica durante a instalación o <em>modo texto</em> podería ser unha segunda opción viable.</p>
diff --git a/themes/openSUSE/help-install/gl/navi.html b/themes/openSUSE/help-install/gl/navi.html
new file mode 100644
index 0000000..9bf0272
--- /dev/null
+++ b/themes/openSUSE/help-install/gl/navi.html
@@ -0,0 +1 @@
+<p>Volver a <a href="#foobar">FOOBAR</a></p>
diff --git a/themes/openSUSE/help-install/gu/main.html b/themes/openSUSE/help-install/gu/main.html
new file mode 100644
index 0000000..15afb37
--- /dev/null
+++ b/themes/openSUSE/help-install/gu/main.html
@@ -0,0 +1,103 @@
+<h3>
+<a name="main">બુટ લોડર મદદ</a>
+</h3>
+
+<p>
+Welcome to <em>@@@product@@@</em>
+</p>
+
+<p>
+Use this menu to select the desired function. If you have
+problems navigating in this help system, press
+<em>@@@fkey_help@@@</em> to enter the <a href="#help">વર્ણન</a> of the help
+system. The main functions in this menu are:
+</p>
+
+<p>
+<a href="#harddisk">હાર્ડ ડિસ્ક પરથી બુટ</a>: This selection will not do
+anything to the system. It only starts a previously installed
+operating system.
+</p>
+
+<p>
+<a href="#linux">ઈન્સ્ટોલેશન</a>:
+This installation mode works on most machines. If you experience a
+system freeze during boot or problems with detection of your hardware
+components, such as disk controllers or network cards, try one of the
+following installation options.
+</p>
+
+<p>
+<a href="#noacpi">ઈન્સ્ટોલેશન -- ACPI ડિસેબલ્ડ</a>: Many of the
+currently-sold computers have incomplete or faulty ACPI
+implementations. This selection disables ACPI support in the
+kernel, but still enables many performance features, like DMA for IDE
+hard disks.
+</p>
+
+<p>
+<a href="#nolapic">ઈન્સ્ટોલેશન -- Local APIC ડિસેબલ્ડ</a>:
+If the normal installation fails, this might be due to the
+system hardware not supporting local APIC.
+If this seems to be the case, use this option to
+install without local APIC support.
+</p>
+
+<p>
+<a href="#failsafe">ઈન્સ્ટોલેશન -- સલામતીભર્યા સેટિન્ગસ</a>: If you were not
+successful with <em>ઈન્સ્ટોલેશન</em>, this selection might
+solve the issue.
+</p>
+
+<p>
+<a href="#rescue">રેસ્ક્યુ સિસ્ટમ</a>: This boot image starts a small
+Linux system in RAM. This is useful if the system does not start properly.
+After booting this system, log in as root.
+</p>
+
+<p>
+<a href="#firmware">ફર્મવેર ટેસ્ટ</a>: Runs a BIOS test tool that validates
+ACPI and other parts of your BIOS.
+</p>
+
+<p>
+<a href="#memtest">મેમરી ટેસ્ટ</a>: Memory testing is useful for more than
+checking installation of new memory modules. It is a stress test
+for a big part of your computer system and may indicate hardware
+problems.
+</p>
+
+<p>
+<a href="#opt">બુટ વિકલ્પો</a>: The boot options may change the
+behavior of your system completely. They are settings for
+the kernel.
+</p>
+
+<p>
+<a href="#help">@@@fkey_help@@@ Help</a>: This is context sensitive. It will
+show different screens depending on the active element of the
+boot screen. There is also a description of this help system
+available.
+</p>
+
+<p>
+<a href="#keytable">@@@fkey_lang@@@</a>: Set language and keyboard mapping
+used by the boot loader.
+</p>
+
+<p>
+<a href="#videomode">@@@fkey_video@@@ Video Mode</a>: Here, choose between
+different screen resolutions while installing. If you encounter
+problems with the graphical installation, the <em>ટેક્સ્ટ મોડ</em> may
+be a work-around for you.
+</p>
+
+<p>
+<a href="#install_src">@@@fkey_inst@@@ Installation Source</a>: Choose the
+installation source.
+</p>
+
+<p>
+<a href="#driverupdate">@@@fkey_dud@@@ Driver Update</a>: For very new machines, a
+driver update may be needed to install the system.
+</p>
diff --git a/themes/openSUSE/help-install/gu/main::bits.html b/themes/openSUSE/help-install/gu/main::bits.html
new file mode 100644
index 0000000..d9500b8
--- /dev/null
+++ b/themes/openSUSE/help-install/gu/main::bits.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="bits">સોફ્ટવેર પ્રકારની પસંદગી</a>
+</h3>
+
+<p>
+You have the choice to install the 32-bit or 64-bit version of @@@product@@@.
+</p>
diff --git a/themes/openSUSE/help-install/gu/main::driverupdate.html b/themes/openSUSE/help-install/gu/main::driverupdate.html
new file mode 100644
index 0000000..b1249eb
--- /dev/null
+++ b/themes/openSUSE/help-install/gu/main::driverupdate.html
@@ -0,0 +1,14 @@
+<h3>
+<a name="driverupdate">ડ્રાયવર અપડેટ</a>
+</h3>
+
+<p>
+If you need a driver update floppy or CD-ROM, press <em>@@@fkey_dud@@@</em>. The
+boot loader asks you to insert the driver update medium after
+loading the Linux kernel.
+</p>
+
+<p>
+A driver update is typically a floppy with new versions of hardware
+drivers or bug fixes needed during installation.
+</p>
diff --git a/themes/openSUSE/help-install/gu/main::failsafe.html b/themes/openSUSE/help-install/gu/main::failsafe.html
new file mode 100644
index 0000000..1c5e664
--- /dev/null
+++ b/themes/openSUSE/help-install/gu/main::failsafe.html
@@ -0,0 +1,11 @@
+<h3>
+<a name="failsafe">ઈન્સ્ટોલેશન -- સલામતીભર્યા સેટિન્ગસ</a>
+</h3>
+
+<p>
+Select <em>ઈન્સ્ટોલેશન -- સલામતીભર્યા સેટિન્ગસ</em> if you encounter hangs
+while installing or irreproducible errors. This option disables DMA
+for IDE drives and all power management features.
+See also the kernel options for <a href="#o_apm">apm</a>,
+<a href="#o_acpi">acpi</a> and <a href="#o_ide">ide</a>.
+</p>
diff --git a/themes/openSUSE/help-install/gu/main::firmware.html b/themes/openSUSE/help-install/gu/main::firmware.html
new file mode 100644
index 0000000..79db2a8
--- /dev/null
+++ b/themes/openSUSE/help-install/gu/main::firmware.html
@@ -0,0 +1,9 @@
+<h3>
+<a name="firmware">ફર્મવેર ટેસ્ટ</a>
+</h3>
+
+<p>
+Starts a BIOS checker that validates the ACPI tables
+and many other parts of your BIOS.
+Test results can be stored on usb disk or saved via network.
+</p>
diff --git a/themes/openSUSE/help-install/gu/main::harddisk.html b/themes/openSUSE/help-install/gu/main::harddisk.html
new file mode 100644
index 0000000..36e0db5
--- /dev/null
+++ b/themes/openSUSE/help-install/gu/main::harddisk.html
@@ -0,0 +1,16 @@
+<h3>
+<a name="harddisk">હાર્ડ ડિસ્ક પરથી બુટ</a>
+</h3>
+
+<p>
+Select <em>બુટ ઈન્સ્ટોલ્ડ OS</em> to start the system installed on
+your local hard disk. This system must be installed properly, because
+only the MBR (Master Boot Record) on the first hard disk is started.
+The device ID of the first hard disk is provided by the BIOS of
+the computer.
+</p>
+
+<p>
+Use this if you forgot to remove the CD or DVD from your
+drive and want to start the computer from the hard disk.
+</p>
diff --git a/themes/openSUSE/help-install/gu/main::help.html b/themes/openSUSE/help-install/gu/main::help.html
new file mode 100644
index 0000000..5d6e8a9
--- /dev/null
+++ b/themes/openSUSE/help-install/gu/main::help.html
@@ -0,0 +1,25 @@
+<h3>
+<a name="help">મદદ સિસ્ટમ વાપરવી</a>
+</h3>
+
+<p>
+The boot loader online help is context sensitive. It gives information
+about the selected menu item or, if you are editing boot options,
+it tries to look up information about the option in which the cursor is
+positioned.
+</p>
+
+<p>
+Navigation Keys
+<ul>
+ <li><em>ઉપર જતું તીર</em>: highlight previous link</li>
+ <li><em>નીચે જતું તીર</em>: highlight next link</li>
+ <li><em>ડાબે જતું તીર</em>, <em>બેકસ્પેસ</em>: return to previous topic</li>
+ <li><em>જમણે જતું તીર</em>, <em>એન્ટર</em>, <em>સ્પેસ</em>: follow link</li>
+ <li><em>ઉપર નું પૃષ્ઠ</em>: scroll up one page</li>
+ <li><em>નીચે નું પૃષ્ઠ</em>: scroll down one page</li>
+ <li><em>ઘર</em>: go to page start</li>
+ <li><em>છેડે</em>: go to page end</li>
+ <li><em>એસ્કેપ</em>: leave help</li>
+</ul>
+</p>
diff --git a/themes/openSUSE/help-install/gu/main::install_src.html b/themes/openSUSE/help-install/gu/main::install_src.html
new file mode 100644
index 0000000..f49849c
--- /dev/null
+++ b/themes/openSUSE/help-install/gu/main::install_src.html
@@ -0,0 +1,12 @@
+<h3>
+<a name="install_src">ઈન્સ્ટોલેશન સોર્સ</a>
+</h3>
+
+<p>
+Press <em>@@@fkey_inst@@@</em> to choose an installation source.
+</p>
+
+<p>
+This is the same as using the <a href="#o_install">ઈન્સ્ટોલ</a>
+boot option.
+</p>
diff --git a/themes/openSUSE/help-install/gu/main::keytable.html b/themes/openSUSE/help-install/gu/main::keytable.html
new file mode 100644
index 0000000..80cb3c5
--- /dev/null
+++ b/themes/openSUSE/help-install/gu/main::keytable.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="keytable">ભાષા અને કીબોર્ડ લેઆઉટ પસંદગી</a>
+</h3>
+
+<p>
+Press <em>@@@fkey_lang@@@</em> to change language and keyboard layout the boot loader uses.
+</p>
diff --git a/themes/openSUSE/help-install/gu/main::linux.html b/themes/openSUSE/help-install/gu/main::linux.html
new file mode 100644
index 0000000..a407042
--- /dev/null
+++ b/themes/openSUSE/help-install/gu/main::linux.html
@@ -0,0 +1,10 @@
+<h3>
+<a name="linux">ઈન્સ્ટોલેશન</a>
+</h3>
+
+<p>
+Select <em>ઈન્સ્ટોલેશન</em> to start the default installation. The
+<a href="#opt">બુટ વિકલ્પો</a> entered are used in the
+start-up. This item activates many features of commonly available
+hardware.
+</p>
diff --git a/themes/openSUSE/help-install/gu/main::memtest.html b/themes/openSUSE/help-install/gu/main::memtest.html
new file mode 100644
index 0000000..b1d2bf8
--- /dev/null
+++ b/themes/openSUSE/help-install/gu/main::memtest.html
@@ -0,0 +1,14 @@
+<h3>
+<a name="memtest">મેમરી ટેસ્ટ</a>
+</h3>
+
+<p>
+The included <em>મેમરી ટેસ્ટ</em> provides good possibilities to
+stress test the hardware of a system. Its main purpose is to detect
+broken RAM, but it also stresses many other parts of the system.
+</p>
+
+<p>
+There is no guarantee that the memory is good if no errors are
+found, although most of memory defects will be found.
+</p>
diff --git a/themes/openSUSE/help-install/gu/main::noacpi.html b/themes/openSUSE/help-install/gu/main::noacpi.html
new file mode 100644
index 0000000..a07da56
--- /dev/null
+++ b/themes/openSUSE/help-install/gu/main::noacpi.html
@@ -0,0 +1,24 @@
+<h3>
+<a name="noacpi">ઈન્સ્ટોલેશન -- ACPI ડિસેબલ્ડ</a>
+</h3>
+
+<p>
+Current hardware usually requires ACPI (Advanced Configuration and Power Interface)
+to control the interrupt handling.
+ACPI completely replaces the old APM system.
+</p>
+
+<p>
+Select <em>ઈન્સ્ટોલેશન -- ACPI ડિસેબલ્ડ</em> if you encounter
+problems during boot of the kernel. Known problems with machines that
+have problems with ACPI are:
+<ul>
+ <li>kernel freezes when booting</li>
+ <li>PCI Cards are not detected or initialized properly</li>
+</ul>
+</p>
+
+<p>
+You may also try the <a href="#firmware">ફર્મવેર ટેસ્ટ</a> boot option
+and look at the test results of the ACPI validation.
+</p>
diff --git a/themes/openSUSE/help-install/gu/main::nolapic.html b/themes/openSUSE/help-install/gu/main::nolapic.html
new file mode 100644
index 0000000..a87b943
--- /dev/null
+++ b/themes/openSUSE/help-install/gu/main::nolapic.html
@@ -0,0 +1,14 @@
+<h3>
+<a name="nolapic">ઈન્સ્ટોલેશન -- Local APIC ડિસેબલ્ડ</a>
+</h3>
+
+<p>
+Normally there are no problems with the APIC (Advanced Programmable Interrupt
+Controller). But if you seem to have some, try this option to boot
+without local APIC support.
+</p>
+
+<p>
+Please don't confuse this with <a href="#noacpi">ACPI</a>
+(Advanced Configuration and Power Interface).
+</p>
diff --git a/themes/openSUSE/help-install/gu/main::opt.html b/themes/openSUSE/help-install/gu/main::opt.html
new file mode 100644
index 0000000..93fcc13
--- /dev/null
+++ b/themes/openSUSE/help-install/gu/main::opt.html
@@ -0,0 +1,28 @@
+<h3>
+<a name="opt">બુટ વિકલ્પો</a>
+</h3>
+
+<p>
+There are two types of boot options available. First, there are
+options that affect the installer. Second, there are kernel
+options. Some of the more common options are:
+</p>
+
+<p>
+a) installer options
+<ul>
+ <li><a href="#o_install">ઈન્સ્ટોલ</a> -- select an installation source</li>
+ <li><a href="#network">નેટવર્ક વિકલ્પો</a> -- the network options</li>
+ <li><a href="#o_vnc">vnc વિકલ્પો</a> -- options for installation via VNC</li>
+</ul>
+</p>
+
+<p>
+b) kernel options
+<ul>
+ <li><a href="#o_splash">સ્પ્લેશ</a> -- influence the behavior of the splash screen</li>
+ <li><a href="#o_apm">apm</a> -- toggle power management</li>
+ <li><a href="#o_acpi">acpi</a> -- advanced configuration and power interface</li>
+ <li><a href="#o_ide">ide</a> -- control the IDE subsystem</li>
+</ul>
+</p>
diff --git a/themes/openSUSE/help-install/gu/main::opt::network.html b/themes/openSUSE/help-install/gu/main::opt::network.html
new file mode 100644
index 0000000..df67578
--- /dev/null
+++ b/themes/openSUSE/help-install/gu/main::opt::network.html
@@ -0,0 +1,35 @@
+<a name="o_hostip"/>
+<a name="o_netmask"/>
+<a name="o_gateway"/>
+
+<h3>
+<a name="network">ઈન્સ્ટોલર વિકલ્પો: નેટવર્ક વિકલ્પો</a>
+</h3>
+
+<p>
+It is possible to configure the network interface right now. The
+hardware will be detected later by YaST2. The minimum set of options
+to configure your network card consists of host IP and netmask. For
+example:
+<ul>
+ <li>hostip=192.168.0.10 netmask=255.255.255.0</li>
+</ul>
+</p>
+
+<p>
+or in a shorter form:
+<ul>
+ <li>hostip=192.168.0.10/24</li>
+</ul>
+</p>
+
+<p>
+If you specified a <a href="#o_install">નેટવર્ક-બેઝ્ડ ઈન્સ્ટોલ</a> and do
+not specify both of these options, the installer tries to configure
+the network interface with <em>dhcp</em>. If you need a default
+gateway, specify this with the option <em>ગેટવે</em>. For
+example:
+<ul>
+ <li>ગેટવે=192.168.0.8</li>
+</ul>
+</p>
diff --git a/themes/openSUSE/help-install/gu/main::opt::o_acpi.html b/themes/openSUSE/help-install/gu/main::opt::o_acpi.html
new file mode 100644
index 0000000..5990366
--- /dev/null
+++ b/themes/openSUSE/help-install/gu/main::opt::o_acpi.html
@@ -0,0 +1,23 @@
+<h3>
+<a name="o_acpi">કેર્નાલ વિકલ્પો: acpi</a>
+</h3>
+
+<p>
+ACPI (Advanced Configuration and Power Interface) is a
+standard that defines power and configuration management interfaces
+between an operating system and the BIOS. By default, <em>acpi</em> is
+switched on when a BIOS is detected that is newer than from year
+2000. There are several commonly
+used parameters to control the behavior of ACPI:
+<ul>
+ <li><em>pci=noacpi</em> -- do not use ACPI to route PCI interrupts</li>
+ <li><em>acpi=oldboot</em> -- only the parts of ACPI that are relevant for booting remain activated</li>
+ <li><em>acpi=off</em> -- switch off ACPI completely</li>
+ <li><em>acpi=force</em> -- switch on ACPI even if your BIOS is dated before 2000</li>
+</ul>
+</p>
+
+<p>
+Especially on new computers, it replaces the old
+<a href="#o_apm">apm</a> system.
+</p>
diff --git a/themes/openSUSE/help-install/gu/main::opt::o_apm.html b/themes/openSUSE/help-install/gu/main::opt::o_apm.html
new file mode 100644
index 0000000..fe008f4
--- /dev/null
+++ b/themes/openSUSE/help-install/gu/main::opt::o_apm.html
@@ -0,0 +1,21 @@
+<h3>
+<a name="o_apm">કેર્નાલ વિકલ્પો</a>
+</h3>
+
+<p>
+APM is one of the two power management strategies used on current
+computers. It is mainly used with laptops for functions like suspend
+to disk, but it may also be responsible for switching off the
+computer after power down. APM relies on a correct working BIOS. If
+the BIOS is broken, APM may have only limited use or even prevent the
+computer from working. Therefore, it may be switched off with the
+parameter
+<ul>
+ <li><em>apm=off</em> -- switch off APM completely</li>
+</ul>
+</p>
+
+<p>
+Some very new computers may take more advantage from the newer
+<a href="#o_acpi">ACPI</a>.
+</p>
diff --git a/themes/openSUSE/help-install/gu/main::opt::o_ide.html b/themes/openSUSE/help-install/gu/main::opt::o_ide.html
new file mode 100644
index 0000000..fe69313
--- /dev/null
+++ b/themes/openSUSE/help-install/gu/main::opt::o_ide.html
@@ -0,0 +1,12 @@
+<h3>
+<a name="o_ide"> કેર્નાલ વિકલ્પો: ide</a>
+</h3>
+
+<p>
+IDE is, unlike SCSI, commonly used in most desktop workstations.
+To circumvent some hardware problems that occur with IDE systems, use the
+kernel parameter:
+<ul>
+ <li><em>ide=nodma</em> -- switch off DMA for IDE drives</li>
+</ul>
+</p>
diff --git a/themes/openSUSE/help-install/gu/main::opt::o_install.html b/themes/openSUSE/help-install/gu/main::opt::o_install.html
new file mode 100644
index 0000000..7b4721e
--- /dev/null
+++ b/themes/openSUSE/help-install/gu/main::opt::o_install.html
@@ -0,0 +1,30 @@
+<h3>
+<a name="o_install">ઈન્સ્ટોલર વિકલ્પો: ઈન્સ્ટોલ</a>
+</h3>
+
+<p>
+By default, the local CD-ROMs are searched for the installation source.
+For a network install, select the
+<em>ઈન્સ્ટોલ</em> option. Possible installation protocols are
+<ul>
+ <li>FTP</li>
+ <li>NFS</li>
+ <li>HTTP</li>
+</ul>
+</p>
+
+<p>
+The syntax to use is just like standard URLs. For example,
+if your server is found at 192.168.0.1 and you want to do an NFS-based
+install from the directory /install on this server, specify
+the source as follows:
+<ul>
+ <li>install=nfs://192.168.0.1/install</li>
+</ul>
+</p>
+
+<p>
+The network card will either be configured with <em>dhcp</em> or you
+must specify the parameters yourself as described in the
+<a href="#network">નેટવર્ક વિકલ્પો</a>.
+</p>
diff --git a/themes/openSUSE/help-install/gu/main::opt::o_splash.html b/themes/openSUSE/help-install/gu/main::opt::o_splash.html
new file mode 100644
index 0000000..38d2024
--- /dev/null
+++ b/themes/openSUSE/help-install/gu/main::opt::o_splash.html
@@ -0,0 +1,12 @@
+<h3>
+<a name="o_splash">કેર્નાલ વિકલ્પો: સ્પ્લેશ</a>
+</h3>
+
+<p>
+The splash screen is the picture shown during system start-up.
+<ul>
+ <li><em>સ્પ્લેશ=0</em> -- The splash screen is switched off. This may be useful with very old monitors or if some error occurs.</li>
+ <li><em>સ્પ્લેશ=નકામા શબ્દો</em> -- Activates splash, kernel and boot messages are still shown.</li>
+ <li><em>સ્પ્લેશ=નિશબ્દ</em> -- Activates splash, but no messages. Instead a progress bar is drawn.</li>
+</ul>
+</p>
diff --git a/themes/openSUSE/help-install/gu/main::opt::o_vnc.html b/themes/openSUSE/help-install/gu/main::opt::o_vnc.html
new file mode 100644
index 0000000..e3d2cec
--- /dev/null
+++ b/themes/openSUSE/help-install/gu/main::opt::o_vnc.html
@@ -0,0 +1,18 @@
+<a name="o_vncpassword"/>
+
+<h3>
+<a name="o_vnc">ઈન્સ્ટોલર વિકલ્પો: vnc</a>
+</h3>
+
+<p>
+To enable the VNC installation, specify the
+parameters vnc and vncpassword:
+<ul>
+ <li><em>vnc=1 vncpassword=example</em></li>
+</ul>
+</p>
+
+<p>
+The VNC server will be started and you may control YaST2 over any VNC
+client from a remote system.
+</p>
diff --git a/themes/openSUSE/help-install/gu/main::rescue.html b/themes/openSUSE/help-install/gu/main::rescue.html
new file mode 100644
index 0000000..c94c5cc
--- /dev/null
+++ b/themes/openSUSE/help-install/gu/main::rescue.html
@@ -0,0 +1,10 @@
+<h3>
+<a name="rescue">રેસ્ક્યુ સિસ્ટમ</a>
+</h3>
+
+<p>
+The <em>રેસ્ક્યુ સિસ્ટમ</em> is a small RAM disk base system. From there,
+it is possible to make all kinds of changes to an installed system. Because
+only low-level tools are available in this system, it is intended for
+experts.
+</p>
diff --git a/themes/openSUSE/help-install/gu/main::videomode.html b/themes/openSUSE/help-install/gu/main::videomode.html
new file mode 100644
index 0000000..d126b30
--- /dev/null
+++ b/themes/openSUSE/help-install/gu/main::videomode.html
@@ -0,0 +1,18 @@
+<h3>
+<a name="videomode">વિઇયો મોડ પસંદગી</a>
+</h3>
+
+<p>
+Press <em>@@@fkey_video@@@</em> to get the list of video modes your graphics card
+supports. The highest mode your monitor can display is preselected.
+</p>
+
+<p>
+It is possible that your monitor cannot be detected automatically. In that
+case, select your preferred mode manually.
+</p>
+
+<p>
+If your system has problems with the graphics card during the
+installation, the <em>ટેક્સ્ટ મોડ</em> may be a usable work-around.
+</p>
diff --git a/themes/openSUSE/help-install/gu/navi.html b/themes/openSUSE/help-install/gu/navi.html
new file mode 100644
index 0000000..9ad6c9e
--- /dev/null
+++ b/themes/openSUSE/help-install/gu/navi.html
@@ -0,0 +1 @@
+<p>પાછા ફરો <a href="#foobar">FOOBAR</a></p>
diff --git a/themes/openSUSE/help-install/hr/main.html b/themes/openSUSE/help-install/hr/main.html
new file mode 100644
index 0000000..398f481
--- /dev/null
+++ b/themes/openSUSE/help-install/hr/main.html
@@ -0,0 +1,103 @@
+<h3>
+<a name="main">Boot Loader Help</a>
+</h3>
+
+<p>
+Welcome to <em>@@@product@@@</em>
+</p>
+
+<p>
+Use this menu to select the desired function. If you have
+problems navigating in this help system, press
+<em>@@@fkey_help@@@</em> to enter the <a href="#help">opis</a> of the help
+system. The main functions in this menu are:
+</p>
+
+<p>
+<a href="#harddisk">Podigni sustav s tvrdog diska</a>: This selection will not do
+anything to the system. It only starts a previously installed
+operating system.
+</p>
+
+<p>
+<a href="#linux">Instalacija</a>:
+This installation mode works on most machines. If you experience a
+system freeze during boot or problems with detection of your hardware
+components, such as disk controllers or network cards, try one of the
+following installation options.
+</p>
+
+<p>
+<a href="#noacpi">Instalacija -- ACPI onemogućen</a>: Many of the
+currently-sold computers have incomplete or faulty ACPI
+implementations. This selection disables ACPI support in the
+kernel, but still enables many performance features, like DMA for IDE
+hard disks.
+</p>
+
+<p>
+<a href="#nolapic">Instalacija -- lokalni APIC onemogućen</a>:
+If the normal installation fails, this might be due to the
+system hardware not supporting local APIC.
+If this seems to be the case, use this option to
+install without local APIC support.
+</p>
+
+<p>
+<a href="#failsafe">Instalacija -- sigurne postavke</a>: If you were not
+successful with <em>Instalacija</em>, this selection might
+solve the issue.
+</p>
+
+<p>
+<a href="#rescue">Sustav za spašavanje</a>: This boot image starts a small
+Linux system in RAM. This is useful if the system does not start properly.
+After booting this system, log in as root.
+</p>
+
+<p>
+<a href="#firmware">Test firmware-a</a>: Runs a BIOS test tool that validates
+ACPI and other parts of your BIOS.
+</p>
+
+<p>
+<a href="#memtest">Test memorije</a>: Memory testing is useful for more than
+checking installation of new memory modules. It is a stress test
+for a big part of your computer system and may indicate hardware
+problems.
+</p>
+
+<p>
+<a href="#opt">Izbori podizanja sustava</a>: The boot options may change the
+behavior of your system completely. They are settings for
+the kernel.
+</p>
+
+<p>
+<a href="#help">@@@fkey_help@@@ Pomoć</a>: This is context sensitive. It will
+show different screens depending on the active element of the
+boot screen. There is also a description of this help system
+available.
+</p>
+
+<p>
+<a href="#keytable">@@@fkey_lang@@@</a>: Set language and keyboard mapping
+used by the boot loader.
+</p>
+
+<p>
+<a href="#videomode">@@@fkey_video@@@ Video način</a>: Here, choose between
+different screen resolutions while installing. If you encounter
+problems with the graphical installation, the <em>tekstualni način</em> may
+be a work-around for you.
+</p>
+
+<p>
+<a href="#install_src">@@@fkey_inst@@@ Installation Source</a>: Choose the
+installation source.
+</p>
+
+<p>
+<a href="#driverupdate">@@@fkey_dud@@@ Dogradnja upravljačkog programa</a>: For very new machines, a
+driver update may be needed to install the system.
+</p>
diff --git a/themes/openSUSE/help-install/hr/main::bits.html b/themes/openSUSE/help-install/hr/main::bits.html
new file mode 100644
index 0000000..75596e4
--- /dev/null
+++ b/themes/openSUSE/help-install/hr/main::bits.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="bits">Odabir vrste programa</a>
+</h3>
+
+<p>
+You have the choice to install the 32-bit or 64-bit version of @@@product@@@.
+</p>
diff --git a/themes/openSUSE/help-install/hr/main::driverupdate.html b/themes/openSUSE/help-install/hr/main::driverupdate.html
new file mode 100644
index 0000000..7ff645a
--- /dev/null
+++ b/themes/openSUSE/help-install/hr/main::driverupdate.html
@@ -0,0 +1,14 @@
+<h3>
+<a name="driverupdate">Dogradnja upravljačkog programa</a>
+</h3>
+
+<p>
+If you need a driver update floppy or CD-ROM, press <em>@@@fkey_dud@@@</em>. The
+boot loader asks you to insert the driver update medium after
+loading the Linux kernel.
+</p>
+
+<p>
+A driver update is typically a floppy with new versions of hardware
+drivers or bug fixes needed during installation.
+</p>
diff --git a/themes/openSUSE/help-install/hr/main::failsafe.html b/themes/openSUSE/help-install/hr/main::failsafe.html
new file mode 100644
index 0000000..f9809b6
--- /dev/null
+++ b/themes/openSUSE/help-install/hr/main::failsafe.html
@@ -0,0 +1,11 @@
+<h3>
+<a name="failsafe">Instalacija -- sigurne postavke</a>
+</h3>
+
+<p>
+Select <em>Instalacija -- sigurne postavke</em> if you encounter hangs
+while installing or irreproducible errors. This option disables DMA
+for IDE drives and all power management features.
+See also the kernel options for <a href="#o_apm">apm</a>,
+<a href="#o_acpi">acpi</a> and <a href="#o_ide">ide</a>.
+</p>
diff --git a/themes/openSUSE/help-install/hr/main::firmware.html b/themes/openSUSE/help-install/hr/main::firmware.html
new file mode 100644
index 0000000..c023ffb
--- /dev/null
+++ b/themes/openSUSE/help-install/hr/main::firmware.html
@@ -0,0 +1,9 @@
+<h3>
+<a name="firmware">Test firmware-a</a>
+</h3>
+
+<p>
+Starts a BIOS checker that validates the ACPI tables
+and many other parts of your BIOS.
+Test results can be stored on usb disk or saved via network.
+</p>
diff --git a/themes/openSUSE/help-install/hr/main::harddisk.html b/themes/openSUSE/help-install/hr/main::harddisk.html
new file mode 100644
index 0000000..82227b5
--- /dev/null
+++ b/themes/openSUSE/help-install/hr/main::harddisk.html
@@ -0,0 +1,16 @@
+<h3>
+<a name="harddisk">Podigni sustav s tvrdog diska</a>
+</h3>
+
+<p>
+Select <em>Podigni instalirani operacijski sustav</em> to start the system installed on
+your local hard disk. This system must be installed properly, because
+only the MBR (Master Boot Record) on the first hard disk is started.
+The device ID of the first hard disk is provided by the BIOS of
+the computer.
+</p>
+
+<p>
+Use this if you forgot to remove the CD or DVD from your
+drive and want to start the computer from the hard disk.
+</p>
diff --git a/themes/openSUSE/help-install/hr/main::help.html b/themes/openSUSE/help-install/hr/main::help.html
new file mode 100644
index 0000000..640a20b
--- /dev/null
+++ b/themes/openSUSE/help-install/hr/main::help.html
@@ -0,0 +1,25 @@
+<h3>
+<a name="help">Koristim sustav pomoći</a>
+</h3>
+
+<p>
+The boot loader online help is context sensitive. It gives information
+about the selected menu item or, if you are editing boot options,
+it tries to look up information about the option in which the cursor is
+positioned.
+</p>
+
+<p>
+Navigation Keys
+<ul>
+ <li><em>Strelica gore</em>: highlight previous link</li>
+ <li><em>Strelica dolje</em>: highlight next link</li>
+ <li><em>Strelica lijevo</em>, <em>Brisanje</em>: return to previous topic</li>
+ <li><em>Strelica desno</em>, <em>Enter</em>, <em>Razmak</em>: follow link</li>
+ <li><em>Stranica gore</em>: scroll up one page</li>
+ <li><em>Stranica dolje</em>: scroll down one page</li>
+ <li><em>Kuća</em>: go to page start</li>
+ <li><em>Kraj</em>: go to page end</li>
+ <li><em>Esc</em>: leave help</li>
+</ul>
+</p>
diff --git a/themes/openSUSE/help-install/hr/main::install_src.html b/themes/openSUSE/help-install/hr/main::install_src.html
new file mode 100644
index 0000000..f32334d
--- /dev/null
+++ b/themes/openSUSE/help-install/hr/main::install_src.html
@@ -0,0 +1,12 @@
+<h3>
+<a name="install_src">Instalacijski izvor</a>
+</h3>
+
+<p>
+Press <em>@@@fkey_inst@@@</em> to choose an installation source.
+</p>
+
+<p>
+This is the same as using the <a href="#o_install">instaliraj</a>
+boot option.
+</p>
diff --git a/themes/openSUSE/help-install/hr/main::keytable.html b/themes/openSUSE/help-install/hr/main::keytable.html
new file mode 100644
index 0000000..2c57b4b
--- /dev/null
+++ b/themes/openSUSE/help-install/hr/main::keytable.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="keytable">Odabir jezika i rasporeda tipkovnice</a>
+</h3>
+
+<p>
+Press <em>@@@fkey_lang@@@</em> to change language and keyboard layout the boot loader uses.
+</p>
diff --git a/themes/openSUSE/help-install/hr/main::linux.html b/themes/openSUSE/help-install/hr/main::linux.html
new file mode 100644
index 0000000..5f1fff1
--- /dev/null
+++ b/themes/openSUSE/help-install/hr/main::linux.html
@@ -0,0 +1,10 @@
+<h3>
+<a name="linux">Instalacija</a>
+</h3>
+
+<p>
+Select <em>Instalacija</em> to start the default installation. The
+<a href="#opt">boot options</a> entered are used in the
+start-up. This item activates many features of commonly available
+hardware.
+</p>
diff --git a/themes/openSUSE/help-install/hr/main::memtest.html b/themes/openSUSE/help-install/hr/main::memtest.html
new file mode 100644
index 0000000..52f22b1
--- /dev/null
+++ b/themes/openSUSE/help-install/hr/main::memtest.html
@@ -0,0 +1,14 @@
+<h3>
+<a name="memtest">Test memorije</a>
+</h3>
+
+<p>
+The included <em>Test memorije</em> provides good possibilities to
+stress test the hardware of a system. Its main purpose is to detect
+broken RAM, but it also stresses many other parts of the system.
+</p>
+
+<p>
+There is no guarantee that the memory is good if no errors are
+found, although most of memory defects will be found.
+</p>
diff --git a/themes/openSUSE/help-install/hr/main::noacpi.html b/themes/openSUSE/help-install/hr/main::noacpi.html
new file mode 100644
index 0000000..1cbaeb6
--- /dev/null
+++ b/themes/openSUSE/help-install/hr/main::noacpi.html
@@ -0,0 +1,24 @@
+<h3>
+<a name="noacpi">Instalacija -- ACPI onemogućen</a>
+</h3>
+
+<p>
+Current hardware usually requires ACPI (Advanced Configuration and Power Interface)
+to control the interrupt handling.
+ACPI completely replaces the old APM system.
+</p>
+
+<p>
+Select <em>Instalacija -- ACPI onemogućen</em> if you encounter
+problems during boot of the kernel. Known problems with machines that
+have problems with ACPI are:
+<ul>
+ <li>kernel freezes when booting</li>
+ <li>PCI Cards are not detected or initialized properly</li>
+</ul>
+</p>
+
+<p>
+You may also try the <a href="#firmware">Test firmware-a</a> boot option
+and look at the test results of the ACPI validation.
+</p>
diff --git a/themes/openSUSE/help-install/hr/main::nolapic.html b/themes/openSUSE/help-install/hr/main::nolapic.html
new file mode 100644
index 0000000..58776e1
--- /dev/null
+++ b/themes/openSUSE/help-install/hr/main::nolapic.html
@@ -0,0 +1,14 @@
+<h3>
+<a name="nolapic">Instalacija -- lokalni APIC onemogućen</a>
+</h3>
+
+<p>
+Normally there are no problems with the APIC (Advanced Programmable Interrupt
+Controller). But if you seem to have some, try this option to boot
+without local APIC support.
+</p>
+
+<p>
+Please don't confuse this with <a href="#noacpi">ACPI</a>
+(Advanced Configuration and Power Interface).
+</p>
diff --git a/themes/openSUSE/help-install/hr/main::opt.html b/themes/openSUSE/help-install/hr/main::opt.html
new file mode 100644
index 0000000..714fe3a
--- /dev/null
+++ b/themes/openSUSE/help-install/hr/main::opt.html
@@ -0,0 +1,28 @@
+<h3>
+<a name="opt">Izbori podizanja sustava</a>
+</h3>
+
+<p>
+There are two types of boot options available. First, there are
+options that affect the installer. Second, there are kernel
+options. Some of the more common options are:
+</p>
+
+<p>
+a) installer options
+<ul>
+ <li><a href="#o_install">instaliraj</a> -- select an installation source</li>
+ <li><a href="#network">mrežni izbori</a> -- the network options</li>
+ <li><a href="#o_vnc">vnc izbori</a> -- options for installation via VNC</li>
+</ul>
+</p>
+
+<p>
+b) kernel options
+<ul>
+ <li><a href="#o_splash">splash</a> -- influence the behavior of the splash screen</li>
+ <li><a href="#o_apm">apm</a> -- toggle power management</li>
+ <li><a href="#o_acpi">acpi</a> -- advanced configuration and power interface</li>
+ <li><a href="#o_ide">ide</a> -- control the IDE subsystem</li>
+</ul>
+</p>
diff --git a/themes/openSUSE/help-install/hr/main::opt::network.html b/themes/openSUSE/help-install/hr/main::opt::network.html
new file mode 100644
index 0000000..0e0d67b
--- /dev/null
+++ b/themes/openSUSE/help-install/hr/main::opt::network.html
@@ -0,0 +1,35 @@
+<a name="o_hostip"/>
+<a name="o_netmask"/>
+<a name="o_gateway"/>
+
+<h3>
+<a name="network">Installer Options: Network Options</a>
+</h3>
+
+<p>
+It is possible to configure the network interface right now. The
+hardware will be detected later by YaST2. The minimum set of options
+to configure your network card consists of host IP and netmask. For
+example:
+<ul>
+ <li>hostip=192.168.0.10 netmask=255.255.255.0</li>
+</ul>
+</p>
+
+<p>
+or in a shorter form:
+<ul>
+ <li>hostip=192.168.0.10/24</li>
+</ul>
+</p>
+
+<p>
+If you specified a <a href="#o_install">mrežna instalacija</a> and do
+not specify both of these options, the installer tries to configure
+the network interface with <em>dhcp</em>. If you need a default
+gateway, specify this with the option <em>gateway</em>. For
+example:
+<ul>
+ <li>gateway=192.168.0.8</li>
+</ul>
+</p>
diff --git a/themes/openSUSE/help-install/hr/main::opt::o_acpi.html b/themes/openSUSE/help-install/hr/main::opt::o_acpi.html
new file mode 100644
index 0000000..d0690f1
--- /dev/null
+++ b/themes/openSUSE/help-install/hr/main::opt::o_acpi.html
@@ -0,0 +1,23 @@
+<h3>
+<a name="o_acpi">Izbori jezgre: acpi</a>
+</h3>
+
+<p>
+ACPI (Advanced Configuration and Power Interface) is a
+standard that defines power and configuration management interfaces
+between an operating system and the BIOS. By default, <em>acpi</em> is
+switched on when a BIOS is detected that is newer than from year
+2000. There are several commonly
+used parameters to control the behavior of ACPI:
+<ul>
+ <li><em>pci=noacpi</em> -- do not use ACPI to route PCI interrupts</li>
+ <li><em>acpi=oldboot</em> -- only the parts of ACPI that are relevant for booting remain activated</li>
+ <li><em>acpi=off</em> -- switch off ACPI completely</li>
+ <li><em>acpi=force</em> -- switch on ACPI even if your BIOS is dated before 2000</li>
+</ul>
+</p>
+
+<p>
+Especially on new computers, it replaces the old
+<a href="#o_apm">apm</a> system.
+</p>
diff --git a/themes/openSUSE/help-install/hr/main::opt::o_apm.html b/themes/openSUSE/help-install/hr/main::opt::o_apm.html
new file mode 100644
index 0000000..92a317d
--- /dev/null
+++ b/themes/openSUSE/help-install/hr/main::opt::o_apm.html
@@ -0,0 +1,21 @@
+<h3>
+<a name="o_apm">Izbori jezgre: apm</a>
+</h3>
+
+<p>
+APM is one of the two power management strategies used on current
+computers. It is mainly used with laptops for functions like suspend
+to disk, but it may also be responsible for switching off the
+computer after power down. APM relies on a correct working BIOS. If
+the BIOS is broken, APM may have only limited use or even prevent the
+computer from working. Therefore, it may be switched off with the
+parameter
+<ul>
+ <li><em>apm=off</em> -- switch off APM completely</li>
+</ul>
+</p>
+
+<p>
+Some very new computers may take more advantage from the newer
+<a href="#o_acpi">ACPI</a>.
+</p>
diff --git a/themes/openSUSE/help-install/hr/main::opt::o_ide.html b/themes/openSUSE/help-install/hr/main::opt::o_ide.html
new file mode 100644
index 0000000..0ee3d92
--- /dev/null
+++ b/themes/openSUSE/help-install/hr/main::opt::o_ide.html
@@ -0,0 +1,12 @@
+<h3>
+<a name="o_ide">Izbori jezgre: ide</a>
+</h3>
+
+<p>
+IDE is, unlike SCSI, commonly used in most desktop workstations.
+To circumvent some hardware problems that occur with IDE systems, use the
+kernel parameter:
+<ul>
+ <li><em>ide=nodma</em> -- switch off DMA for IDE drives</li>
+</ul>
+</p>
diff --git a/themes/openSUSE/help-install/hr/main::opt::o_install.html b/themes/openSUSE/help-install/hr/main::opt::o_install.html
new file mode 100644
index 0000000..3b1991a
--- /dev/null
+++ b/themes/openSUSE/help-install/hr/main::opt::o_install.html
@@ -0,0 +1,30 @@
+<h3>
+<a name="o_install">Installer Options: install</a>
+</h3>
+
+<p>
+By default, the local CD-ROMs are searched for the installation source.
+For a network install, select the
+<em>instaliraj</em> option. Possible installation protocols are
+<ul>
+ <li>FTP</li>
+ <li>NFS</li>
+ <li>HTTP</li>
+</ul>
+</p>
+
+<p>
+The syntax to use is just like standard URLs. For example,
+if your server is found at 192.168.0.1 and you want to do an NFS-based
+install from the directory /install on this server, specify
+the source as follows:
+<ul>
+ <li>install=nfs://192.168.0.1/install</li>
+</ul>
+</p>
+
+<p>
+The network card will either be configured with <em>dhcp</em> or you
+must specify the parameters yourself as described in the
+<a href="#network">mrežni izbori</a>.
+</p>
diff --git a/themes/openSUSE/help-install/hr/main::opt::o_splash.html b/themes/openSUSE/help-install/hr/main::opt::o_splash.html
new file mode 100644
index 0000000..a4d1a5c
--- /dev/null
+++ b/themes/openSUSE/help-install/hr/main::opt::o_splash.html
@@ -0,0 +1,12 @@
+<h3>
+<a name="o_splash">Izbori kernela: splash</a>
+</h3>
+
+<p>
+The splash screen is the picture shown during system start-up.
+<ul>
+ <li><em>splash=0</em> -- The splash screen is switched off. This may be useful with very old monitors or if some error occurs.</li>
+ <li><em>splash=verbose</em> -- Activates splash, kernel and boot messages are still shown.</li>
+ <li><em>splash=silent</em> -- Activates splash, but no messages. Instead a progress bar is drawn.</li>
+</ul>
+</p>
diff --git a/themes/openSUSE/help-install/hr/main::opt::o_vnc.html b/themes/openSUSE/help-install/hr/main::opt::o_vnc.html
new file mode 100644
index 0000000..67819da
--- /dev/null
+++ b/themes/openSUSE/help-install/hr/main::opt::o_vnc.html
@@ -0,0 +1,18 @@
+<a name="o_vncpassword"/>
+
+<h3>
+<a name="o_vnc">Installer Options: vnc</a>
+</h3>
+
+<p>
+To enable the VNC installation, specify the
+parameters vnc and vncpassword:
+<ul>
+ <li><em>vnc=1 vncpassword=primjer</em></li>
+</ul>
+</p>
+
+<p>
+The VNC server will be started and you may control YaST2 over any VNC
+client from a remote system.
+</p>
diff --git a/themes/openSUSE/help-install/hr/main::rescue.html b/themes/openSUSE/help-install/hr/main::rescue.html
new file mode 100644
index 0000000..d20e5df
--- /dev/null
+++ b/themes/openSUSE/help-install/hr/main::rescue.html
@@ -0,0 +1,10 @@
+<h3>
+<a name="rescue">Sustav za spašavanje</a>
+</h3>
+
+<p>
+The <em>Sustav za spašavanje</em> is a small RAM disk base system. From there,
+it is possible to make all kinds of changes to an installed system. Because
+only low-level tools are available in this system, it is intended for
+experts.
+</p>
diff --git a/themes/openSUSE/help-install/hr/main::videomode.html b/themes/openSUSE/help-install/hr/main::videomode.html
new file mode 100644
index 0000000..f1e0440
--- /dev/null
+++ b/themes/openSUSE/help-install/hr/main::videomode.html
@@ -0,0 +1,18 @@
+<h3>
+<a name="videomode">Odabir video načina</a>
+</h3>
+
+<p>
+Press <em>@@@fkey_video@@@</em> to get the list of video modes your graphics card
+supports. The highest mode your monitor can display is preselected.
+</p>
+
+<p>
+It is possible that your monitor cannot be detected automatically. In that
+case, select your preferred mode manually.
+</p>
+
+<p>
+If your system has problems with the graphics card during the
+installation, the <em>tekstualni način</em> may be a usable work-around.
+</p>
diff --git a/themes/openSUSE/help-install/hr/navi.html b/themes/openSUSE/help-install/hr/navi.html
new file mode 100644
index 0000000..3e8a924
--- /dev/null
+++ b/themes/openSUSE/help-install/hr/navi.html
@@ -0,0 +1 @@
+<p>Vrati se na <a href="#foobar">FOOBAR</a></p>
diff --git a/themes/openSUSE/help-install/hu/main.html b/themes/openSUSE/help-install/hu/main.html
new file mode 100644
index 0000000..44d3ade
--- /dev/null
+++ b/themes/openSUSE/help-install/hu/main.html
@@ -0,0 +1,35 @@
+<h3>
+<a name="main">Rendszertöltő-súgó</a>
+</h3>
+
+<p>Üdvözli az <em>@@@product@@@</em></p>
+
+<p>Válassza ki a kívánt funkciót a menüből. Ha gondot okoz a súgórendszerben való navigáció, az <em>@@@fkey_help@@@</em> billentyű megnyomásával elolvashatja a súgórendszer <a href="#help">leírás</a>át. A menü legfontosabb funkciói:</p>
+
+<p><a href="#harddisk">Rendszerindítás merevlemezről</a>: Elindítja a már korábban telepített rendszert a merevlemezről. Ebben az esetben semmilyen módosítás nem történik a rendszeren.</p>
+
+<p><a href="#linux">Telepítés</a>: Ez a telepítési mód a legtöbb gépen működik. Ha rendszerindítás közben lefagyást észlel, vagy problémák jelentkeznek a hardverkomponensek (például lemezvezérlők vagy hálózati kártyák) felismerése során, akkor próbálkozzon meg az alábbi telepítési beállításokkal.</p>
+
+<p><a href="#noacpi">Telepítés - ACPI-támogatás nélkül</a>: Nagyon sok mai számítógépen nem teljes vagy hibás az ACPI megvalósítása. Ez a menüpont letiltja a kernel ACPI-támogatását, ugyanakkor megtart számos további teljesítménynövelő funkciót, például az IDE-merevlemezek DMA-támogatását.</p>
+
+<p><a href="#nolapic">Telepítés - Helyi APIC-támogatás nélkül</a>: Ha a telepítés sikertelen, annak egyik oka az lehet, hogy a hardver nem rendelkezik helyi APIC-támogatással. Ebben az esetben telepítsen helyi APIC-támogatás nélkül.</p>
+
+<p><a href="#failsafe">Telepítés - Biztonságos beállításokkal</a>: Ha a <em>Telepítés</em> használata nem volt sikeres, ez a mód lehet, hogy megoldja a problémát.</p>
+
+<p><a href="#rescue">Mentőrendszer</a>: Ez a rendszerkép egy kisméretű rendszert indít el a memóriából. Akkor hasznos, ha a rendszer nem megfelelően indul. A rendszer betöltése után jelentkezzen be root felhasználóként.</p>
+
+<p><a href="#firmware">Firmware-teszt</a>: BIOS-ellenőrző eszközt futtat, amely ellenőrzi az ACPI-t és a BIOS egyes részeit.</p>
+
+<p><a href="#memtest">Memóriateszt</a>: A memóriatesztelés nemcsak az újonnan behelyezett memóriamodulok ellenőrzésére jó, hanem a rendszer nagy részét terheli és alkalmas lehet hardverproblémák kimutatására.</p>
+
+<p><a href="#opt">Rendszerindítási paraméterek</a>: A rendszerindítási paraméterek teljesen megváltoztathatják a rendszer viselkedését. Ezek a kernel beállításai.</p>
+
+<p><a href="#help">@@@fkey_help@@@ Súgó</a>: Környezetérzékeny súgó. A rendszerindítási képernyő aktív elemétől függően más és más képernyőket jelenít meg és magáról a súgórendszerről is található leírás.</p>
+
+<p><a href="#keytable">@@@fkey_lang@@@</a>: Itt választható ki a rendszertöltő által használt nyelvi és billentyűzetbeállítás.</p>
+
+<p><a href="#videomode">@@@fkey_video@@@ Videomód</a>: Itt választhatja ki a telepítés során használt képernyőfelbontást. Ha probléma van a grafikus telepítéssel, próbálja meg a <em>karakteres mód</em>-ot.</p>
+
+<p><a href="#install_src">@@@fkey_inst@@@ Telepítési forrás</a>: Válasszon telepítési forrást.</p>
+
+<p><a href="#driverupdate">@@@fkey_dud@@@ Illesztőprogram-frissítés</a>: Nagyon új gépek esetében szükség lehet valamely illesztőprogram frissítésére a rendszer telepítéséhez.</p>
diff --git a/themes/openSUSE/help-install/hu/main::bits.html b/themes/openSUSE/help-install/hu/main::bits.html
new file mode 100644
index 0000000..21e2c23
--- /dev/null
+++ b/themes/openSUSE/help-install/hu/main::bits.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="bits">Szoftvertípus kiválasztása</a>
+</h3>
+
+<p>Telepítheti az @@@product@@@ 32, vagy 64 bites változatát.</p>
diff --git a/themes/openSUSE/help-install/hu/main::driverupdate.html b/themes/openSUSE/help-install/hu/main::driverupdate.html
new file mode 100644
index 0000000..f43d423
--- /dev/null
+++ b/themes/openSUSE/help-install/hu/main::driverupdate.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="driverupdate">Illesztőprogram-frissítés</a>
+</h3>
+
+<p>Ha egy illesztőprogramot tartalmazó hajlékonylemezt vagy CD-t kíván használni, nyomja meg az <em>@@@fkey_dud@@@</em> billentyűt. A rendszertöltő a Linux kernel betöltése után kéri az adathordozó behelyezésére.</p>
+
+<p>Az új illesztőprogram általában egy hajlékonylemezen található, amelyen lehet egy frissebb verzió vagy egy egyszerű hibajavítás is.</p>
diff --git a/themes/openSUSE/help-install/hu/main::failsafe.html b/themes/openSUSE/help-install/hu/main::failsafe.html
new file mode 100644
index 0000000..b07670e
--- /dev/null
+++ b/themes/openSUSE/help-install/hu/main::failsafe.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="failsafe">Telepítés - Biztonságos beállításokkal</a>
+</h3>
+
+<p>Ha telepítés közben lefagyásokat vagy nem megismételhető hibákat észlel, válassza a <em>Telepítés - Biztonságos beállításokkal</em> beállítást, amely letiltja az IDE-meghajtók DMA-támogatását és az összes energiaellátás-felügyeleti funkciót. Tekintse meg továbbá az <a href="#o_apm">apm</a>, az <a href="#o_acpi">acpi</a> és <a href="#o_ide">ide</a> paramétereket is.</p>
diff --git a/themes/openSUSE/help-install/hu/main::firmware.html b/themes/openSUSE/help-install/hu/main::firmware.html
new file mode 100644
index 0000000..164499f
--- /dev/null
+++ b/themes/openSUSE/help-install/hu/main::firmware.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="firmware">Firmware-teszt</a>
+</h3>
+
+<p>Elindítja a BIOS ellenőrzését, amely ellenőrzi az ACPI-táblákat és a BIOS egyéb részeit. Az ellenőrzés eredménye lementhető USB-eszközre vagy hálózaton keresztül.</p>
diff --git a/themes/openSUSE/help-install/hu/main::harddisk.html b/themes/openSUSE/help-install/hu/main::harddisk.html
new file mode 100644
index 0000000..841c7d3
--- /dev/null
+++ b/themes/openSUSE/help-install/hu/main::harddisk.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="harddisk">Rendszerindítás merevlemezről</a>
+</h3>
+
+<p>A <em>Rendszerindítás merevlemezről</em> beállítással indítható el a helyi merevlemezen telepített rendszer. A rendszert helyesen kell telepíteni, mert csak az első merevlemez mester rendszerindító rekordja (MBR) kerül indításra. Az első merevlemez eszközazonosítóját a számítógép BIOS-a biztosítja.</p>
+
+<p>Ez akkor hasznos, ha a meghajtóban felejtette a CD-t vagy a DVD-t, és feltétlenül a merevlemezről kívánja elindítani a rendszert.</p>
diff --git a/themes/openSUSE/help-install/hu/main::help.html b/themes/openSUSE/help-install/hu/main::help.html
new file mode 100644
index 0000000..2e4bb5f
--- /dev/null
+++ b/themes/openSUSE/help-install/hu/main::help.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="help">A súgórendszer használata</a>
+</h3>
+
+<p>A rendszertöltő online súgója helyzetfüggő segítséget nyújt az egyes kiválasztott menüpontokhoz. Ezenfelül az egyes rendszerindítási opciókhoz is információval szolgál. Ez akkor lehet hasznos, ha éppen egy bejegyzés szerkesztése válik szükségessé.</p>
+
+<p>Navigációs gombok <ul><li><em>Felfelé nyíl</em>: Előző hivatkozás kiválasztása</li><li><em>Lefelé nyíl</em>: Következő hivatkozás kiválasztása</li><li><em>Bal nyíl</em>, <em>Vissza</em>: Vissza az előző témához</li><li><em>Jobb nyíl</em>, <em>Enter</em>, <em>Szóköz</em>: Hivatkozás követése</li><li><em>Page Up</em>: Görgetés felfelé</li><li><em>Page Down</em>: Görgetés lefelé</li><li><em>Home</em>: Ugrás az oldal elejére</li><li><em>End</em>: Ugrás az oldal végére</li><li><em>Esc</em>: Kilépés</li></ul></p>
diff --git a/themes/openSUSE/help-install/hu/main::install_src.html b/themes/openSUSE/help-install/hu/main::install_src.html
new file mode 100644
index 0000000..1986fcf
--- /dev/null
+++ b/themes/openSUSE/help-install/hu/main::install_src.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="install_src">Telepítési forrás</a>
+</h3>
+
+<p><em>@@@fkey_inst@@@</em> -- telepítési forrás megadása</p>
+
+<p>Ez ugyanaz, mint a <a href="#o_install">telepítés</a> paraméter használata.</p>
diff --git a/themes/openSUSE/help-install/hu/main::keytable.html b/themes/openSUSE/help-install/hu/main::keytable.html
new file mode 100644
index 0000000..a75c1f9
--- /dev/null
+++ b/themes/openSUSE/help-install/hu/main::keytable.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="keytable">Nyelv és billentyűzet kiválasztása</a>
+</h3>
+
+<p>Az <em>@@@fkey_lang@@@</em> billentyű megnyomásával kiválasztható az indítóképernyő és a billentyűzet nyelve.</p>
diff --git a/themes/openSUSE/help-install/hu/main::linux.html b/themes/openSUSE/help-install/hu/main::linux.html
new file mode 100644
index 0000000..2c530cd
--- /dev/null
+++ b/themes/openSUSE/help-install/hu/main::linux.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="linux">Telepítés</a>
+</h3>
+
+<p>A <em>Telepítés</em> beállítással indul az alapértelmezett telepítés. A megadott <a href="#opt">rendszerindítási paraméterek</a> alkalmazásra kerülnek. Ez a beállítás a szokásosan elérhető hardvereszközök számos funkcióját aktiválja.</p>
diff --git a/themes/openSUSE/help-install/hu/main::memtest.html b/themes/openSUSE/help-install/hu/main::memtest.html
new file mode 100644
index 0000000..ca05820
--- /dev/null
+++ b/themes/openSUSE/help-install/hu/main::memtest.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="memtest">Memóriateszt</a>
+</h3>
+
+<p>A beépített <em>Memóriateszt</em> jó lehetőséget nyújt egy rendszer hardvereszközeinek ellenőrzésére. Elsődleges célja természetesen a hibás RAM-modulok azonosítása, de a rendszer egyéb részeit is terheli.</p>
+
+<p>Az, hogy a rendszer nem talál hibát, még nem garancia a memória tökéletességére, bár a legtöbb hiba előjön a vizsgálat során.</p>
diff --git a/themes/openSUSE/help-install/hu/main::noacpi.html b/themes/openSUSE/help-install/hu/main::noacpi.html
new file mode 100644
index 0000000..e7b81b3
--- /dev/null
+++ b/themes/openSUSE/help-install/hu/main::noacpi.html
@@ -0,0 +1,9 @@
+<h3>
+<a name="noacpi">Telepítés - ACPI-támogatás nélkül</a>
+</h3>
+
+<p>A nagyon friss hardvereszközök néha igénylik az ACPI meglétét a megszakítások kezeléséhez. Az ACPI teljesen felváltja a régi APM rendszert.</p>
+
+<p>Ha problémákba ütközik a kernel indítása során, válassza a <em>Telepítés - ACPI-támogatás nélkül</em> beállítást. Ismert problémák hibás ACPI-vel rendelkező gépek esetén: <ul><li>a kernel lefagy rendszerindítás közben</li><li>PCI-kártyák nem találhatók, vagy nem sikerül tökéletesen előkészíteni őket</li></ul></p>
+
+<p>Érdemes kipróbálni a <a href="#firmware">Firmware-teszt</a> beállítást, megnézni az ACPI-ellenőrzés eredményét.</p>
diff --git a/themes/openSUSE/help-install/hu/main::nolapic.html b/themes/openSUSE/help-install/hu/main::nolapic.html
new file mode 100644
index 0000000..8bc3f07
--- /dev/null
+++ b/themes/openSUSE/help-install/hu/main::nolapic.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="nolapic">Telepítés - Helyi APIC-támogatás nélkül</a>
+</h3>
+
+<p>Általában nincs probléma az APIC (Advanced Programmable Interrupt Controller) vezérlővel, azonban vannak olyan esetek, amikor célszerű APIC-támogatás nélkül indítani a rendszert.</p>
+
+<p>Ezt ne tévessze össze az <a href="#noacpi">ACPI</a> (Advanced Configuration and Power Interface) vezérlővel.</p>
diff --git a/themes/openSUSE/help-install/hu/main::opt.html b/themes/openSUSE/help-install/hu/main::opt.html
new file mode 100644
index 0000000..0f52190
--- /dev/null
+++ b/themes/openSUSE/help-install/hu/main::opt.html
@@ -0,0 +1,9 @@
+<h3>
+<a name="opt">Rendszerindítási paraméterek</a>
+</h3>
+
+<p>Kétféle rendszerindítási paraméter használható. Egyes paraméterek a telepítőprogram működését befolyásolják, mások pedig a kernel működését. Néhány a leggyakoribb paraméterek közül:</p>
+
+<p>a) telepítési beállítások <ul><li><a href="#o_install">telepítés</a> -- telepítési forrás kiválasztása</li><li><a href="#network">hálózati beállítások</a> -- hálózati beállítások</li><li><a href="#o_vnc">vnc-beállítások</a> -- beállítások VNC-n keresztüli telepítéshez</li></ul></p>
+
+<p>b) kernelbeállítások <ul><li><a href="#o_splash">splash</a> -- indítóképernyő beállítása</li><li><a href="#o_apm">apm</a> -- energiagazdálkodás beállítása</li><li><a href="#o_acpi">acpi</a> -- ACPI energiakezelési rendszer</li><li><a href="#o_ide">ide</a> -- IDE-alrendszer beállítása</li></ul></p>
diff --git a/themes/openSUSE/help-install/hu/main::opt::network.html b/themes/openSUSE/help-install/hu/main::opt::network.html
new file mode 100644
index 0000000..aefc418
--- /dev/null
+++ b/themes/openSUSE/help-install/hu/main::opt::network.html
@@ -0,0 +1,13 @@
+<a name="o_hostip"/>
+<a name="o_netmask"/>
+<a name="o_gateway"/>
+
+<h3>
+<a name="network">Telepítési beállítások: Hálózati beállítások</a>
+</h3>
+
+<p>Lehetőség van a hálózati csatoló beállítására. A YaST a hardvert később felismeri. A hálózat beállításához legalább a gép IP-címét és hálózati maszkját meg kell adni. Például: <ul><li>hostip=192.168.0.10 netmask=255.255.255.0</li></ul></p>
+
+<p>vagy rövidebb formában: <ul><li>hostip=192.168.0.10/24</li></ul></p>
+
+<p>Ha a <a href="#o_install">telepítés hálózatról</a> kiválasztásakor nem adja meg mindkét paramétert, akkor a telepítőprogram megpróbálja <em>dhcp</em>-n keresztül beállítani a hálózati csatolót. Amennyiben szükséges, az alapértelmezett átjáró a <em>gateway</em> paraméterrel adható meg. Például: <ul><li>gateway=192.168.0.8</li></ul></p>
diff --git a/themes/openSUSE/help-install/hu/main::opt::o_acpi.html b/themes/openSUSE/help-install/hu/main::opt::o_acpi.html
new file mode 100644
index 0000000..dc568ae
--- /dev/null
+++ b/themes/openSUSE/help-install/hu/main::opt::o_acpi.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="o_acpi">Kernelbeállítások: acpi</a>
+</h3>
+
+<p>Az ACPI (Advanced Configuration and Power Interface) szabvány meghatározza, hogy az operációs rendszer és a BIOS között hogyan működjenek az energiakezelési funkciók. Alapértelmezett esetben akkor van bekapcsolva az <em>acpi</em> opció, ha az egy 2000. év után készült BIOS-verziót talál. Az ACPI viselkedését az alábbi opciókkal lehet pontosan beállítani: <ul><li><em>pci=noacpi</em> -- ne használja az ACPI-t PCI-megszakításokhoz</li><li><em>acpi=oldboot</em> -- az ACPI rendszerindításhoz szükséges részeinek bekapcsolása</li><li><em>acpi=off</em> -- az ACPI teljes kikapcsolása</li><li><em>acpi=force</em> -- ACPI bekapcsolása annak ellenére, hogy a BIOS a 2000. év előtt készült</li></ul></p>
+
+<p>Új számítógépeken az ACPI teljes mértékben helyettesíti az <a href="#o_apm">apm</a> rendszert.</p>
diff --git a/themes/openSUSE/help-install/hu/main::opt::o_apm.html b/themes/openSUSE/help-install/hu/main::opt::o_apm.html
new file mode 100644
index 0000000..0a24962
--- /dev/null
+++ b/themes/openSUSE/help-install/hu/main::opt::o_apm.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="o_apm">Kernelbeállítások: apm</a>
+</h3>
+
+<p>Az APM (Advanced Power Management) egy energiakezelő rendszer. Használatának leginkább hordozható számítógépeken van értelme, ahol átmenetileg fel lehet függeszteni a rendszer futását. Akkor lehet szüksége energiakezelő rendszerre, ha azt szeretné, hogy a rendszer leállításakor automatikusan kikapcsoljon a rendszer. Az APM működése erősen függ a számítógép BIOS rendszerétől. Ha nem jó a BIOS, vagy hibásan van beállítva, akkor az APM bekapcsolása mellékhatásokhoz vezethet. Ilyenkor letilthatja az APM bekapcsolását a következő paraméterrel: <ul><li><em>apm=off</em> -- az ACPI teljes kikapcsolása</li></ul></p>
+
+<p>Az újabb számítógépeken az APM helyett az <a href="#o_acpi">ACPI</a> rendszer használata javasolt.</p>
diff --git a/themes/openSUSE/help-install/hu/main::opt::o_ide.html b/themes/openSUSE/help-install/hu/main::opt::o_ide.html
new file mode 100644
index 0000000..b93adb8
--- /dev/null
+++ b/themes/openSUSE/help-install/hu/main::opt::o_ide.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="o_ide">Kernelbeállítások: ide</a>
+</h3>
+
+<p>A legtöbb munkaállomás nem SCSI-, hanem IDE-csatolót használ. Az IDE-rendszer esetleges hardverproblémáinak kikerüléséhez szüksége lehet a következő paraméterre: <ul><li><em>ide=nodma</em> -- IDE-meghajtók DMA-kezelésének kikapcsolása</li></ul></p>
diff --git a/themes/openSUSE/help-install/hu/main::opt::o_install.html b/themes/openSUSE/help-install/hu/main::opt::o_install.html
new file mode 100644
index 0000000..55c9760
--- /dev/null
+++ b/themes/openSUSE/help-install/hu/main::opt::o_install.html
@@ -0,0 +1,9 @@
+<h3>
+<a name="o_install">Telepítési beállítások: install</a>
+</h3>
+
+<p>Alapértelmezés szerint telepítési forrásként a helyi CD-olvasókat keresi végig a rendszer. Hálózati telepítéshez a <em>telepítés</em> paramétert kell használni. A telepítéshez használható protokollok: <ul><li>FTP</li><li>NFS</li><li>HTTP</li></ul></p>
+
+<p>A szintaxis pontosan olyan, mint a szabványos URL. Ha például a kiszolgáló a 192.168.0.1 címen található és a kiszolgáló /install könyvtárából kíván NFS-alapú telepítést végrehajtani, akkor így kell megadni a forrást: <ul><li>install=nfs://192.168.0.1/install</li></ul></p>
+
+<p>A hálózati kártya beállítása történhet <em>dhcp</em> segítségével, vagy a <a href="#network">hálózati beállítások</a> között bemutatott módon megadhatók kézzel a paraméterek.</p>
diff --git a/themes/openSUSE/help-install/hu/main::opt::o_splash.html b/themes/openSUSE/help-install/hu/main::opt::o_splash.html
new file mode 100644
index 0000000..90d5287
--- /dev/null
+++ b/themes/openSUSE/help-install/hu/main::opt::o_splash.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="o_splash">Kernelbeállítások: splash</a>
+</h3>
+
+<p>A rendszerindításkor látható grafikus képernyőt splash screennek nevezzük. <ul><li><em>splash=0</em> -- Indítóképernyő kikapcsolása. Ez akkor lehet hasznos, ha nagyon régi a monitora, illetve olyan, amelyen az indítóképernyő hibásan jelenik meg.</li><li><em>splash=verbose</em> -- Indítóképernyő bekapcsolása. A kernel- és a rendszerindítási üzenetek a háttérben láthatók.</li><li><em>splash=silent</em> -- Indítóképernyő bekapcsolása. A rendszerüzenetek nem láthatók. Helyette egy grafikus kijelző tájékoztatást ad a rendszerindítási folyamatról.</li></ul></p>
diff --git a/themes/openSUSE/help-install/hu/main::opt::o_vnc.html b/themes/openSUSE/help-install/hu/main::opt::o_vnc.html
new file mode 100644
index 0000000..34212d9
--- /dev/null
+++ b/themes/openSUSE/help-install/hu/main::opt::o_vnc.html
@@ -0,0 +1,9 @@
+<a name="o_vncpassword"/>
+
+<h3>
+<a name="o_vnc">Telepítési beállítások: vnc</a>
+</h3>
+
+<p>A VNC-telepítés bekapcsolásához a vnc és a vncpassword paramétereket kell megadni: <ul><li><em>vnc=1 vncpassword=mintajelszó</em></li></ul></p>
+
+<p>A VNC-kiszolgáló elindul és a YaST távolról, VNC-kliensen keresztül vezérelhető.</p>
diff --git a/themes/openSUSE/help-install/hu/main::rescue.html b/themes/openSUSE/help-install/hu/main::rescue.html
new file mode 100644
index 0000000..2459a0d
--- /dev/null
+++ b/themes/openSUSE/help-install/hu/main::rescue.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="rescue">Mentőrendszer</a>
+</h3>
+
+<p>A <em>Mentőrendszer</em> egy kisméretű, RAM-lemez alapú rendszer, így lehetséges egy már telepített rendszer módosítása. Mivel ebben a rendszerben csak alacsony szintű eszközök érhetők el, használatát kizárólag szakembereknek javasoljuk.</p>
diff --git a/themes/openSUSE/help-install/hu/main::videomode.html b/themes/openSUSE/help-install/hu/main::videomode.html
new file mode 100644
index 0000000..1e2c60a
--- /dev/null
+++ b/themes/openSUSE/help-install/hu/main::videomode.html
@@ -0,0 +1,9 @@
+<h3>
+<a name="videomode">Videomód kiválasztása</a>
+</h3>
+
+<p>Nyomja meg az <em>@@@fkey_video@@@</em> billentyűt a grafikus kártya által támogatott videomódok listájának lekéréséhez. A monitor által támogatott legnagyobb felbontás alapértelmezésként kerül kiválasztásra.</p>
+
+<p>Előfordulhat, hogy a monitor automatikus felismerése sikertelen, ebben az esetben állítsa be a használni kívánt felbontást.</p>
+
+<p>Ha gondok vannak a grafikus kártyával a telepítés során, a <em>karakteres mód</em> nyújthat kerülő megoldást.</p>
diff --git a/themes/openSUSE/help-install/hu/navi.html b/themes/openSUSE/help-install/hu/navi.html
new file mode 100644
index 0000000..9f927ee
--- /dev/null
+++ b/themes/openSUSE/help-install/hu/navi.html
@@ -0,0 +1 @@
+<p>Vissza a <a href="#foobar">FOOBAR</a> részhez.</p>
diff --git a/themes/openSUSE/help-install/it/main.html b/themes/openSUSE/help-install/it/main.html
new file mode 100644
index 0000000..405fa1e
--- /dev/null
+++ b/themes/openSUSE/help-install/it/main.html
@@ -0,0 +1,35 @@
+<h3>
+<a name="main">Guida del caricatore di avvio</a>
+</h3>
+
+<p>Benvenuto in <em>@@@product@@@</em></p>
+
+<p>Usa questo menu per selezionare la funzione desiderata. Se hai problemi durante l'esplorazione di questa Guida, premi <em>@@@fkey_help@@@</em> per visualizzare il <a href="#help">descrizione</a> della Guida. Le principali funzioni disponibili in questo menu sono:</p>
+
+<p><a href="#harddisk">Avvio dal disco rigido</a>: Questa selezione non esegue alcuna operazione sul sistema. Avvia solo un sistema operativo precedentemente installato.</p>
+
+<p><a href="#linux">Installazione</a>: Questa modlità di installazione funziona sulla maggior parte dei computer. Se si verifica un arresto del sistema durante l'avvio, oppure in caso di problemi nel rilevamento di componenti hardware quali controllori di dischi o schede di rete, prova a selezionare una delle seguenti opzioni di installazione.</p>
+
+<p><a href="#noacpi">Installazione -- ACPI disabilitata</a>: Molti computer attualmente in commercio dispongono di implementazioni ACPI incomplete o difettose. Questa selezione disabilita il supporto ACPI nel kernel ma abilita molte funzionalità ad alte prestazioni, quali la tecnologia DMA per i dischi rigidi IDE.</p>
+
+<p><a href="#nolapic">Installazione -- APIC locale disabilitata</a>: Se l'installazione normale non viene completata, è possibile che il sistema hardware non supporti l'APIC locale. In questo caso, utilizza l'opzione di installazione senza il supporto dell'APIC locale.</p>
+
+<p><a href="#failsafe">Installazione -- Impostazioni di protezione</a>: Se non hai avuto successo con <em>Installazione</em>, questa selezione può risolvere il problema.</p>
+
+<p><a href="#rescue">Sistema di salvataggio</a>: Questa immagine di avvio carica un piccolo sistema Linux nella RAM. Ciò è utile se il sistema non si avvia correttamente. Dopo aver avviato questo sistema, effettua il login come utente root.</p>
+
+<p><a href="#firmware">Verifica firmware</a>: Avvia uno strumento di verifica del BIOS che valida l'ACPI ed altri componenti del BIOS.</p>
+
+<p><a href="#memtest">Verifica della memoria</a>: Il test della memoria è utile non solo per verificare l'installazione dei nuovi moduli di memoria: è un test molto stressante per buona parte dei componenti del computer e può evidenziare problemi hardware.</p>
+
+<p><a href="#opt">Opzioni di boot</a>: Le opzioni di avvio, relative al kernel, possono modificare completamente il comportamento del sistema in uso.</p>
+
+<p><a href="#help">@@@fkey_help@@@ Guida</a>: Questa opzione è contestuale. Visualizza schermate diverse in base all'elemento attivo nella schermata di avvio. È inoltre disponibile una descrizione di questa Guida.</p>
+
+<p><a href="#keytable">@@@fkey_lang@@@</a>: Imposta la lingua e la mappatura della tastiera utilizzate dal caricatore di avvio.</p>
+
+<p><a href="#videomode">@@@fkey_video@@@ Modalità video</a>: Qui puoi scegliere tra diverse risoluzioni dello schermo durante l'installazione. Se incontri problemi durante l'installazione grafica, puoi usare <em>modo testo</em> per aggirarli.</p>
+
+<p><a href="#install_src">@@@fkey_inst@@@ Sorgente di installazione</a>: Scegli la sorgente di installazione.</p>
+
+<p><a href="#driverupdate">@@@fkey_dud@@@ Aggiornamento driver</a>: per computer molto recenti, per installare il sistema può rendersi necessario un aggiornamento dei driver.</p>
diff --git a/themes/openSUSE/help-install/it/main::bits.html b/themes/openSUSE/help-install/it/main::bits.html
new file mode 100644
index 0000000..dbd21b1
--- /dev/null
+++ b/themes/openSUSE/help-install/it/main::bits.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="bits">Selezione tipo di applicazione</a>
+</h3>
+
+<p>Puoi scegliere di installare la versione a 32 o 64 bit di @@@product@@@.</p>
diff --git a/themes/openSUSE/help-install/it/main::driverupdate.html b/themes/openSUSE/help-install/it/main::driverupdate.html
new file mode 100644
index 0000000..97b316a
--- /dev/null
+++ b/themes/openSUSE/help-install/it/main::driverupdate.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="driverupdate">Aggiornamento driver</a>
+</h3>
+
+<p>Se è necessario un floppy o un CD ROM di aggiornamento driver, premi <em>@@@fkey_dud@@@</em>. Dopo il caricamento del kernel Linux, ti verrà chiesto di inserire il supporto di aggiornamento driver.</p>
+
+<p>Un aggiornamento driver è costituito in genere da un floppy contenente nuove versioni dei driver hardware o correzioni dei bug necessarie durante l'installazione.</p>
diff --git a/themes/openSUSE/help-install/it/main::failsafe.html b/themes/openSUSE/help-install/it/main::failsafe.html
new file mode 100644
index 0000000..2850d06
--- /dev/null
+++ b/themes/openSUSE/help-install/it/main::failsafe.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="failsafe">Installazione -- Impostazioni di protezione</a>
+</h3>
+
+<p>Seleziona <em>Installazione -- Impostazioni di protezione</em> se si verificano interruzioni durante l'installazione oppure errori non riproducibili. Questa opzione disabilita la funzionalità DMA per le unità IDE e, inoltre, tutte le funzionalità di risparmio energetico. Vedi anche le opzioni del kernel relative a <a href="#o_apm">apm</a>, <a href="#o_acpi">acpi</a> e <a href="#o_ide">IDE</a>.</p>
diff --git a/themes/openSUSE/help-install/it/main::firmware.html b/themes/openSUSE/help-install/it/main::firmware.html
new file mode 100644
index 0000000..32c3ad9
--- /dev/null
+++ b/themes/openSUSE/help-install/it/main::firmware.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="firmware">Verifica firmware</a>
+</h3>
+
+<p>Avvia un controllo del BIOS che valida le tabelle ACPI e molte altre parti del BIOS. È possibile archiviare i risultati del test in un disco usb o salvarli via rete.</p>
diff --git a/themes/openSUSE/help-install/it/main::harddisk.html b/themes/openSUSE/help-install/it/main::harddisk.html
new file mode 100644
index 0000000..1f2f651
--- /dev/null
+++ b/themes/openSUSE/help-install/it/main::harddisk.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="harddisk">Avvio dal disco rigido</a>
+</h3>
+
+<p>Seleziona <em>Avvia sistema operativo installato</em> per avviare il sistema installato nel disco rigido locale. Questo sistema deve essere installato correttamente perché solo l'MBR (Master Boot Record) viene avviato sul primo disco rigido. L'ID del dispositivo del primo disco rigido viene fornito dal BIOS del computer.</p>
+
+<p>Usa questa opzione se hai dimenticato di rimuovere il CD o DVD dall'unità e desideri avviare il computer dal disco rigido.</p>
diff --git a/themes/openSUSE/help-install/it/main::help.html b/themes/openSUSE/help-install/it/main::help.html
new file mode 100644
index 0000000..f9d2688
--- /dev/null
+++ b/themes/openSUSE/help-install/it/main::help.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="help">Uso della Guida</a>
+</h3>
+
+<p>La Guida in linea del caricatore di avvio è sensibile al contesto e visualizza le informazioni sulla voce di menu selezionata, oppure, durante la modifica delle opzioni di avvio, tenta di individuare le informazioni relative all'opzione su cui è posizionato il cursore.</p>
+
+<p>Tasti di navigazione <ul><li><em>Freccia su</em>: evidenzia il collegamento precedente</li><li><em>Fraccia giù</em>: evidenzia il collegamento successivo</li><li><em>Freccia sinistra</em>, <em>Backspace</em>: torna all'argomento precedente</li><li><em>Fraccia destra</em>, <em>Invio</em>, <em>Spazio</em>: visita il collegamento</li><li><em>PgSu</em>: scorre verso l'alto una pagina alla volta</li><li><em>PgGiù</em>: scorre verso il basso una pagina alla volta</li><li><em>Casa</em>: va a inizio pagina</li><li><em>Termine</em>: va a fine pagina</li><li><em>Esc</em>: chiude la Guida</li></ul></p>
diff --git a/themes/openSUSE/help-install/it/main::install_src.html b/themes/openSUSE/help-install/it/main::install_src.html
new file mode 100644
index 0000000..99a6e7e
--- /dev/null
+++ b/themes/openSUSE/help-install/it/main::install_src.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="install_src">Sorgente di installazione</a>
+</h3>
+
+<p>Premi <em>@@@fkey_inst@@@</em> per selezionare una sorgente di installazione.</p>
+
+<p>Questa opzione equivale all'opzione di avvio <a href="#o_install">installa</a>.</p>
diff --git a/themes/openSUSE/help-install/it/main::keytable.html b/themes/openSUSE/help-install/it/main::keytable.html
new file mode 100644
index 0000000..5258d4c
--- /dev/null
+++ b/themes/openSUSE/help-install/it/main::keytable.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="keytable">Selezione layout tastiera e lingua</a>
+</h3>
+
+<p>Premi <em>@@@fkey_lang@@@</em> per cambiare la lingua e il layout della tastiera utilizzati dal caricatore di avvio.</p>
diff --git a/themes/openSUSE/help-install/it/main::linux.html b/themes/openSUSE/help-install/it/main::linux.html
new file mode 100644
index 0000000..f07ea86
--- /dev/null
+++ b/themes/openSUSE/help-install/it/main::linux.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="linux">Installazione</a>
+</h3>
+
+<p>Seleziona <em>Installazione</em> per avviare l'installazione predefinita. Il <a href="#opt">Opzioni di boot</a> inserito è utilizzato nella fase di avvio. Questa voce attiva molte funzioni dei componenti hardware comunemente disponibili.</p>
diff --git a/themes/openSUSE/help-install/it/main::memtest.html b/themes/openSUSE/help-install/it/main::memtest.html
new file mode 100644
index 0000000..ff9ea39
--- /dev/null
+++ b/themes/openSUSE/help-install/it/main::memtest.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="memtest">Verifica della memoria</a>
+</h3>
+
+<p>Il <em>Verifica della memoria</em> incluso offre buone possibilità di testare l'hardware di un sistema. Il suo scopo principale consiste nel rilevare interruzioni nella RAM nonché altri problemi nel sistema.</p>
+
+<p>Nonostante la maggior parte dei difetti venga rilevata, non c'è comunque nessuna garanzia che la memoria sia a posto se non viene evidenziato nessun errore.</p>
diff --git a/themes/openSUSE/help-install/it/main::noacpi.html b/themes/openSUSE/help-install/it/main::noacpi.html
new file mode 100644
index 0000000..e2a2465
--- /dev/null
+++ b/themes/openSUSE/help-install/it/main::noacpi.html
@@ -0,0 +1,9 @@
+<h3>
+<a name="noacpi">Installazione -- ACPI disabilitata</a>
+</h3>
+
+<p>L'hardware attuale di solito richiede l'ACPI (Advanced Configuration and Power Interface) per controllare la gestione degli interrupt. L'ACPI sostituisce completamente il vecchio sistema APM.</p>
+
+<p>Seleziona <em>Installazione -- ACPI disabilitata</em> se si verificano problemi durante l'avvio del kernel. I problemi noti con la tecnologia ACPI nei computer sono: <ul><li>Il kernel si blocca all'avvio</li><li>Le schede PCI non sono rilevate o inizializzate correttamente</li></ul></p>
+
+<p>Puoi anche provare con l'opzione di avvio <a href="#firmware">Verifica firmware</a> e verificare i risultati del test della convalida dell'ACPI.</p>
diff --git a/themes/openSUSE/help-install/it/main::nolapic.html b/themes/openSUSE/help-install/it/main::nolapic.html
new file mode 100644
index 0000000..cc41fb6
--- /dev/null
+++ b/themes/openSUSE/help-install/it/main::nolapic.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="nolapic">Installazione -- APIC locale disabilitata</a>
+</h3>
+
+<p>Normalmente non si verificano problemi con l'APIC (Advanced Programmable Interrupt Controller). Se dovessero verificarsi, prova questa opzione ad avviare senza il supporto APIC locale.</p>
+
+<p>Per favore non confonderti con <a href="#noacpi">ACPI</a> (Advanced Configuration and Power Interface).</p>
diff --git a/themes/openSUSE/help-install/it/main::opt.html b/themes/openSUSE/help-install/it/main::opt.html
new file mode 100644
index 0000000..b67a38e
--- /dev/null
+++ b/themes/openSUSE/help-install/it/main::opt.html
@@ -0,0 +1,9 @@
+<h3>
+<a name="opt">Opzioni di boot</a>
+</h3>
+
+<p>Sono disponibili due tipi di opzioni di avvio: quelle che influenzano il programma di installazione e quelle che agiscono sul kernel. Alcune delle opzioni più comuni sono:</p>
+
+<p>a) optioni del programma d'installazione <ul><li><a href="#o_install">installa</a> -- seleziona una sorgente di installazione</li><li><a href="#network">opzioni di rete</a> -- le opzioni di rete</li><li><a href="#o_vnc">opzioni VNC</a> -- opzioni per l'installazione via VNC</li></ul></p>
+
+<p>b) opzioni kernel <ul><li><a href="#o_splash">schermata di avvio</a> -- influenza il comportamento della schermata di avvio</li><li><a href="#o_apm">apm</a> -- attiva o disattiva il risparmio energetico</li><li><a href="#o_acpi">acpi</a> -- interfaccia per il risparmio energetico e la configurazione avanzata</li><li><a href="#o_ide">IDE</a> -- controlla il sottosistema IDE</li></ul></p>
diff --git a/themes/openSUSE/help-install/it/main::opt::network.html b/themes/openSUSE/help-install/it/main::opt::network.html
new file mode 100644
index 0000000..8dd6127
--- /dev/null
+++ b/themes/openSUSE/help-install/it/main::opt::network.html
@@ -0,0 +1,13 @@
+<a name="o_hostip"/>
+<a name="o_netmask"/>
+<a name="o_gateway"/>
+
+<h3>
+<a name="network">Opzioni programma di installazione: Opzioni di rete</a>
+</h3>
+
+<p>È possibile configurare subito l'interfaccia di rete. L'hardware verrà rilevato successivamente da YaST2. Per configurare la scheda di rete, è necessario specificare almeno l'IP host e la netmask. Ad esempio: <ul><li>iphost=192.168.0.10 netmask=255.255.255.0</li></ul></p>
+
+<p>o in forma contratta: <ul><li>iphost=192.168.0.10/24</li></ul></p>
+
+<p>Se specifichi un <a href="#o_install">installazione basata su rete</a> ma non specifichi entrambe queste opzioni, il programma di installazione cerca di configurare l'interfaccia di rete con <em>dhcp</em>. Se hai bisogno di un gateway predefinito, specificalo con l'opzione <em>gateway</em>. Ad esempio: <ul><li>gateway=192.168.0.8</li></ul></p>
diff --git a/themes/openSUSE/help-install/it/main::opt::o_acpi.html b/themes/openSUSE/help-install/it/main::opt::o_acpi.html
new file mode 100644
index 0000000..20c16b3
--- /dev/null
+++ b/themes/openSUSE/help-install/it/main::opt::o_acpi.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="o_acpi">Opzioni kernel: acpi</a>
+</h3>
+
+<p>ACPI (Advanced Configuration and Power Interface) è uno standard che definisce le interfacce di gestione del risparmio energetico e della configurazione tra un sistema operativo e il BIOS. Di solito, <em>acpi</em> viene attivato ogni volta che viene rilevato un BIOS successivo all'anno 2000. Esistono molti parametri comunemente utilizzati per controllare il comportamento di ACPI: <ul><li><em>pci=noacpi</em> -- non usare l'ACPI per smistare gli interrupt PCI</li><li><em>acpi=oldboot</em> -- solo i componenti di ACPI che sono necessari al boot rimangono attivi</li><li><em>acpi=off</em> -- disattiva completamente ACPI</li><li><em>acpi=force</em> -- attiva ACPI anche se il BIOS installato è precedente al 2000</li></ul></p>
+
+<p>In particolare nei nuovi computer sostituisce il vecchio sistema <a href="#o_apm">apm</a>.</p>
diff --git a/themes/openSUSE/help-install/it/main::opt::o_apm.html b/themes/openSUSE/help-install/it/main::opt::o_apm.html
new file mode 100644
index 0000000..c848b57
--- /dev/null
+++ b/themes/openSUSE/help-install/it/main::opt::o_apm.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="o_apm">Opzioni kernel: apm</a>
+</h3>
+
+<p>APM è una delle due strategie di risparmio energetico utiizzata nei computer moderni. Viene utilizzata principalmente sui computer portatili per funzioni quali la sospensione su disco, tuttavia può controllare anche l'arresto del computer dopo lo spegnimento. La funzionalità APM dipende dal corretto funzionamento del BIOS. Se il BIOS non funziona correttamente, APM può essere utilizzata in maniera limitata o può addirittura impedire il funzionamento del computer. Per questo motivo, è possibile disattivarla con il parametro <ul><li><em>apm=off</em> -- disattiva completamente APM</li></ul></p>
+
+<p>Alcuni computer di nuova generazione possono beneficiare maggiormente del recente <a href="#o_acpi">ACPI</a>.</p>
diff --git a/themes/openSUSE/help-install/it/main::opt::o_ide.html b/themes/openSUSE/help-install/it/main::opt::o_ide.html
new file mode 100644
index 0000000..c7b61cb
--- /dev/null
+++ b/themes/openSUSE/help-install/it/main::opt::o_ide.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="o_ide">Opzioni kernel: ide</a>
+</h3>
+
+<p>Nella maggior parte delle workstation desktop vengono utilizzati dispositivi IDE, anziché SCSI. Per aggirare alcuni problemi hardware che possono verificarsi con i sistemi IDE, utiizza il parametro del kernel: <ul><li><em>ide=nodma</em> -- disattiva il DMA per le unità IDE</li></ul></p>
diff --git a/themes/openSUSE/help-install/it/main::opt::o_install.html b/themes/openSUSE/help-install/it/main::opt::o_install.html
new file mode 100644
index 0000000..86df115
--- /dev/null
+++ b/themes/openSUSE/help-install/it/main::opt::o_install.html
@@ -0,0 +1,9 @@
+<h3>
+<a name="o_install">Opzioni programma di installazione: installa</a>
+</h3>
+
+<p>Di solito, l'origine dell'installazione viene cercata nei CD-ROM locali. Per l'installazione di rete, seleziona l'opzione <em>installa</em>. I protocolli di installazione possibili sono: <ul><li>FTP</li><li>NFS</li><li>HTTP</li></ul></p>
+
+<p>La sintassi da utilizzare è analoga agli URL standard. Se ad esempio il server è disponibile all'indirizzo 192.168.0.1 e vuoi eseguire un'installazione basata su NFS dalla directory /install di tale server, specifica la sorgente nel seguente modo: <ul><li>install=nfs://192.168.0.1/install</li></ul></p>
+
+<p>La scheda di rete sarà configurata con <em>dhcp</em> oppure dovrai specificare manualmente i parametri come descritto in <a href="#network">opzioni di rete</a>.</p>
diff --git a/themes/openSUSE/help-install/it/main::opt::o_splash.html b/themes/openSUSE/help-install/it/main::opt::o_splash.html
new file mode 100644
index 0000000..57984e7
--- /dev/null
+++ b/themes/openSUSE/help-install/it/main::opt::o_splash.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="o_splash">Opzioni kernel: schermata di avvio</a>
+</h3>
+
+<p>La schermata di avvio corrisponde all'immagine visualizzata all'avvio del sistema. <ul><li><em>schermata di avvio=0</em> -- La schermata di avvio viene disattivata. Ciò può essere utile quando si utilizzano monitor molto vecchi o quando si verificano errori.</li><li><em>schermata di avvio=verbose</em> -- Attiva la schermata di avvio con la visualizzazione dei messaggi del kernel e di avvio.</li><li><em>schermata di avvio=silent</em> -- Attiva una schermata di avvio senza messaggi. Viene invece visualizzata una barra di avanzamento.</li></ul></p>
diff --git a/themes/openSUSE/help-install/it/main::opt::o_vnc.html b/themes/openSUSE/help-install/it/main::opt::o_vnc.html
new file mode 100644
index 0000000..8c56af4
--- /dev/null
+++ b/themes/openSUSE/help-install/it/main::opt::o_vnc.html
@@ -0,0 +1,9 @@
+<a name="o_vncpassword"/>
+
+<h3>
+<a name="o_vnc">Opzioni programma di installazione: vnc</a>
+</h3>
+
+<p>Per abilitare l'installazione VNC, specifica i parametri vnc e vncpassword:<ul><li><em>vnc=1 vncpassword=example</em></li></ul></p>
+
+<p>Il server VNC verrà avviato e potrai controllare YaST2 attraverso qualsiasi client VNC da un sistema remoto.</p>
diff --git a/themes/openSUSE/help-install/it/main::rescue.html b/themes/openSUSE/help-install/it/main::rescue.html
new file mode 100644
index 0000000..783dcbc
--- /dev/null
+++ b/themes/openSUSE/help-install/it/main::rescue.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="rescue">Sistema di salvataggio</a>
+</h3>
+
+<p><em>Sistema di salvataggio</em> è un piccolo sistema di base caricato in memoria. Da qui è possibile apportare qualunque tipo di modifica ad un sistema installato. Dato che in questo sistema sono disponibili solo strumenti di basso livello, è consigliato per utenti esperti.</p>
diff --git a/themes/openSUSE/help-install/it/main::videomode.html b/themes/openSUSE/help-install/it/main::videomode.html
new file mode 100644
index 0000000..9720ae4
--- /dev/null
+++ b/themes/openSUSE/help-install/it/main::videomode.html
@@ -0,0 +1,9 @@
+<h3>
+<a name="videomode">Selezione modalità video</a>
+</h3>
+
+<p>Premere <em>@@@fkey_video@@@</em> per visualizzare l'elenco delle modalità video supportate dalla scheda grafica in uso. La modalità migliore supportata dal monitor è preselezionata.</p>
+
+<p>È possibile che il monitor non venga rilevato automaticamente. In questo caso, seleziona manualmente la modalità preferita.</p>
+
+<p>Se nel sistema si verificano problemi con la scheda grafica durante l'installazione, è possibile utilizzare <em>modo testo</em> per aggirarli.</p>
diff --git a/themes/openSUSE/help-install/it/navi.html b/themes/openSUSE/help-install/it/navi.html
new file mode 100644
index 0000000..ebdce46
--- /dev/null
+++ b/themes/openSUSE/help-install/it/navi.html
@@ -0,0 +1 @@
+<p>Ritorna a <a href="#foobar">FOOBAR</a></p>
diff --git a/themes/openSUSE/help-install/ja/main.html b/themes/openSUSE/help-install/ja/main.html
new file mode 100644
index 0000000..c717b64
--- /dev/null
+++ b/themes/openSUSE/help-install/ja/main.html
@@ -0,0 +1,35 @@
+<h3>
+<a name="main">ブートローダヘルプ</a>
+</h3>
+
+<p><em>@@@product@@@</em> へようこそ</p>
+
+<p>このメニューを使用して目的の機能を選択してください。 このヘルプシステムの操作がうまくいかない場合、 <em>@@@fkey_help@@@</em> キーを押してヘルプシステムの <a href="#help">説明</a> に入ってください。このメニューの主な機能は次の通りです:</p>
+
+<p><a href="#harddisk">ハードディスクから起動</a>: この選択ではシステムには何も変更を加えません。インストールされたオペレーティングシステムを起動するだけです。</p>
+
+<p><a href="#linux">インストール</a>: このインストールモードはほとんどのコンピュータで機能します。 起動中にシステムがフリーズする場合、またはディスクコントローラやネットワークカードなどのハードウエアコンポーネントの検出に問題がある場合、次のインストールオプションを試してください。</p>
+
+<p><a href="#noacpi">インストール -- ACPI 無効</a>: 現在販売されている多くのコンピュータは ACPI を完全に実装していないか、実装に問題があります。この選択によりカーネルの ACPI サポートは無効になりますが、 IDE ハードディスク用の DMA のような多くのパフォーマンス機能は変わらず有効になります。</p>
+
+<p><a href="#nolapic">インストール -- ローカル APIC 無効</a>: 標準インストールが失敗した場合、お使いのハードウエアがローカル APIC に対応していないためかもしれません。 これが原因と考えられる場合は、このオプションを使ってローカル APIC 対応なしでインストールを行なってください。</p>
+
+<p><a href="#failsafe">インストール -- 安全設定</a>: <em>インストール</em> がうまくいかなかった場合、このオプションを選択すると問題が解決されるかもしれません。</p>
+
+<p><a href="#rescue">レスキューシステム</a>: このブートイメージではメモリ内で動作する小さな Linux システムを起動します。この仕組みはシステムが正しく起動しない場合に役立ちます。起動後は root でログインしてください。</p>
+
+<p><a href="#firmware">ファームウエアのテスト</a>: ACPI とその他の BIOS 項目の妥当性を検証するテストツールを起動します。</p>
+
+<p><a href="#memtest">メモリテスト</a>: メモリテストは新しくインストールしたメモリモジュールがきちんと動作しているか確認することができるだけではありません。これはコンピュータシステムの耐久テストであり、ハードウエアの問題が判明することもあります。</p>
+
+<p><a href="#opt">起動オプション</a>: 起動オプションはシステムの動作を完全に変更してしまうかもしれません。 このオプションはカーネル用の設定です。</p>
+
+<p><a href="#help">@@@fkey_help@@@ ヘルプ</a>: このヘルプは状況依存です。起動画面で現在選択中の項目に応じて異なる画面を表示します。このヘルプシステム自身の説明も記載されています。</p>
+
+<p><a href="#keytable">@@@fkey_lang@@@</a>: ブートローダで使用する言語とキーボードマップを設定します。</p>
+
+<p><a href="#videomode">@@@fkey_video@@@ ビデオモード</a>: ここではインストール中に使用する画面解像度を選択します。 グラフィカルなインストールに際して問題が発生した場合、 <em>テキストモード</em> で回避できるかもしれません。</p>
+
+<p><a href="#install_src">@@@fkey_inst@@@ インストール元</a>: インストール元を選択します。</p>
+
+<p><a href="#driverupdate">@@@fkey_dud@@@ ドライバ更新</a>: とても新しいコンピュータにインストールする場合は、ドライバ更新が必要になるかもしれません。</p>
diff --git a/themes/openSUSE/help-install/ja/main::bits.html b/themes/openSUSE/help-install/ja/main::bits.html
new file mode 100644
index 0000000..967d8b0
--- /dev/null
+++ b/themes/openSUSE/help-install/ja/main::bits.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="bits">ソフトウエア種類の選択</a>
+</h3>
+
+<p>@@@product@@@ のうち 32 ビット版と 64 ビット版のどちらをインストールするかを選択することができます。</p>
diff --git a/themes/openSUSE/help-install/ja/main::driverupdate.html b/themes/openSUSE/help-install/ja/main::driverupdate.html
new file mode 100644
index 0000000..7a167f4
--- /dev/null
+++ b/themes/openSUSE/help-install/ja/main::driverupdate.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="driverupdate">ドライバ更新</a>
+</h3>
+
+<p>ドライバ更新のフロッピィディスクまたは CD-ROM を指定する必要がある場合、 <em>@@@fkey_dud@@@</em> を押してください。 Linux カーネルをロードした後、ブートローダがドライバ更新メディアを挿入するよう要求します。</p>
+
+<p>ドライバ更新は一般に、インストールの際に必要となる新しいバージョンのドライバまたはバグ修正が入ったフロッピィディスクの形で提供されます。</p>
diff --git a/themes/openSUSE/help-install/ja/main::failsafe.html b/themes/openSUSE/help-install/ja/main::failsafe.html
new file mode 100644
index 0000000..da1a907
--- /dev/null
+++ b/themes/openSUSE/help-install/ja/main::failsafe.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="failsafe">インストール -- 安全設定</a>
+</h3>
+
+<p>インストール中にハングアップしたり、再現不可能なエラーが発生した場合には <em>インストール -- 安全設定</em> を選択してください。このオプションは IDE ドライブの DMA 設定とすべての電源管理機能を無効にします。 <a href="#o_apm">apm</a> 、 <a href="#o_acpi">acpi</a> および <a href="#o_ide">ide</a> についてのカーネルオプションも併せて参照してください。</p>
diff --git a/themes/openSUSE/help-install/ja/main::firmware.html b/themes/openSUSE/help-install/ja/main::firmware.html
new file mode 100644
index 0000000..5b030f7
--- /dev/null
+++ b/themes/openSUSE/help-install/ja/main::firmware.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="firmware">ファームウエアのテスト</a>
+</h3>
+
+<p>ACPI テーブルと他の多くの BIOS 部品を検証する BIOS チェッカーを開始します。 結果は USB ディスクか、またはネットワーク経由で保存することができます。</p>
diff --git a/themes/openSUSE/help-install/ja/main::harddisk.html b/themes/openSUSE/help-install/ja/main::harddisk.html
new file mode 100644
index 0000000..01478fc
--- /dev/null
+++ b/themes/openSUSE/help-install/ja/main::harddisk.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="harddisk">ハードディスクから起動</a>
+</h3>
+
+<p>お使いのローカルハードディスクにインストールしてあるシステムを起動するには <em>インストール済みの OS を起動</em> を選択してください。起動ができるのは最初のハードディスクの MBR (Master Boot Record) だけであるため、システムを正しくインストールしてある状態でなければなりません。最初のハードディスクデバイス ID はコンピュータの BIOS から提供されるものを使用します。</p>
+
+<p>お使いのドライブから CD や DVD を取り出すのを忘れていてハードディスクからコンピュータを起動したい場合、このオプションをお使いください。</p>
diff --git a/themes/openSUSE/help-install/ja/main::help.html b/themes/openSUSE/help-install/ja/main::help.html
new file mode 100644
index 0000000..16a1ef5
--- /dev/null
+++ b/themes/openSUSE/help-install/ja/main::help.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="help">ヘルプシステムの使用</a>
+</h3>
+
+<p>ブートローダのオンラインヘルプは状況に合わせた表示を行ないます。メニュー項目を選択している場合はその項目についての情報を提供するほか、起動オプションを編集している場合はカーソル位置のオプションについて情報を調べます。</p>
+
+<p>操作キー <ul><li><em>上矢印</em>: 前のリンクを強調表示する</li><li><em>下矢印</em>: 次のリンクを強調表示する</li><li><em>左矢印</em>, <em>Backspace</em>: 前のトピックに戻る</li><li><em>右矢印</em>, <em>Enter</em>, <em>スペース</em>: リンクをたどる</li><li><em>Page Up</em>: 1 ページ分スクロールアップ</li><li><em>Page Down</em>: 1 ページ分スクロールダウン</li><li><em>Home</em>: ページの初めにジャンプ</li><li><em>End</em>: ページの最後にジャンプ</li><li><em>Esc</em>: ヘルプの終了</li></ul></p>
diff --git a/themes/openSUSE/help-install/ja/main::install_src.html b/themes/openSUSE/help-install/ja/main::install_src.html
new file mode 100644
index 0000000..624a121
--- /dev/null
+++ b/themes/openSUSE/help-install/ja/main::install_src.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="install_src">インストール元</a>
+</h3>
+
+<p><em>@@@fkey_inst@@@</em> を押すとインストール元を選択することができます。</p>
+
+<p>このオプションは <a href="#o_install">インストール</a> ブートオプションと同じ意味です。</p>
diff --git a/themes/openSUSE/help-install/ja/main::keytable.html b/themes/openSUSE/help-install/ja/main::keytable.html
new file mode 100644
index 0000000..bd01723
--- /dev/null
+++ b/themes/openSUSE/help-install/ja/main::keytable.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="keytable">言語とキーボードレイアウトの選択</a>
+</h3>
+
+<p>ブートローダで使用する言語とキーボードレイアウトを変更するには、 <em>@@@fkey_lang@@@</em> を押してください。</p>
diff --git a/themes/openSUSE/help-install/ja/main::linux.html b/themes/openSUSE/help-install/ja/main::linux.html
new file mode 100644
index 0000000..d954352
--- /dev/null
+++ b/themes/openSUSE/help-install/ja/main::linux.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="linux">インストール</a>
+</h3>
+
+<p>既定のインストールを開始するには <em>インストール</em> を選んでください。入力された <em>インストール</em> は起動時に使用されます。この項目を選択すると一般的に利用可能な多くのハードウエアが使用できます。</p>
diff --git a/themes/openSUSE/help-install/ja/main::memtest.html b/themes/openSUSE/help-install/ja/main::memtest.html
new file mode 100644
index 0000000..582c68c
--- /dev/null
+++ b/themes/openSUSE/help-install/ja/main::memtest.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="memtest">メモリテスト</a>
+</h3>
+
+<p>付属の <em>メモリテスト</em> を使用することでハードウエアの耐久テストを行なうことができます。この主な目的は壊れたメモリを検出することですが、システムの他の部品についての耐久度を調べることもできます。</p>
+
+<p>ほとんどのメモリ欠陥を検出することができますが、エラーが検出されなくてもメモリが正常であるという保証にはなりません。</p>
diff --git a/themes/openSUSE/help-install/ja/main::noacpi.html b/themes/openSUSE/help-install/ja/main::noacpi.html
new file mode 100644
index 0000000..4b644d1
--- /dev/null
+++ b/themes/openSUSE/help-install/ja/main::noacpi.html
@@ -0,0 +1,9 @@
+<h3>
+<a name="noacpi">インストール -- ACPI 無効</a>
+</h3>
+
+<p>現在のハードウエアでは割り込み処理をコントロールするために ACPI (Advanced Configuration and Power Interface) を必要とする場合があります。 ACPI は古い APM システムに完全に取って代わるものです。</p>
+
+<p>カーネルの起動中に問題が発生した場合、 <em>インストール -- ACPI 無効</em> を選択してください。 ACPI に問題があるコンピュータについての既知の問題点は次の通りです: <ul><li>起動時にカーネルがフリーズする</li><li>PCI カードが正しく検出されていないか、正しく初期化されていない</li></ul></p>
+
+<p><a href="#firmware">ファームウエアのテスト</a> の起動オプションを指定して ACPI 妥当性テストの結果を見ることもできます。</p>
diff --git a/themes/openSUSE/help-install/ja/main::nolapic.html b/themes/openSUSE/help-install/ja/main::nolapic.html
new file mode 100644
index 0000000..73eaba3
--- /dev/null
+++ b/themes/openSUSE/help-install/ja/main::nolapic.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="nolapic">インストール -- ローカル APIC 無効</a>
+</h3>
+
+<p>通常は APIC (Advanced Programmable Interrupt Controller) を利用しても何も問題はありません。 ただし、何か問題が発生した場合はこのオプションを使ってローカル APIC サポートなしで起動してみてください。</p>
+
+<p><a href="#noacpi">ACPI</a> (Advanced Configuration and Power Interface) と取り違えないよう注意してください。</p>
diff --git a/themes/openSUSE/help-install/ja/main::opt.html b/themes/openSUSE/help-install/ja/main::opt.html
new file mode 100644
index 0000000..dc44691
--- /dev/null
+++ b/themes/openSUSE/help-install/ja/main::opt.html
@@ -0,0 +1,9 @@
+<h3>
+<a name="opt">起動オプション</a>
+</h3>
+
+<p>使用できる起動オプションには 2 種類あります。 1 つはインストーラに影響を与えるオプションで、もう 1 つはカーネルオプションです。よく使われるオプションの一部を次に示します:</p>
+
+<p>a) インストーラオプション <ul><li><a href="#o_install">インストール</a> -- インストール元の選択</li><li><a href="#network">ネットワークオプション</a> -- ネットワークオプション</li><li><a href="#o_vnc">VNC オプション</a> -- VNC を経由してインストールするオプション</li></ul></p>
+
+<p>b) カーネルオプション <ul><li><a href="#o_splash">スプラッシュ</a> -- スプラッシュ画面の動作に影響を与えます</li><li><a href="#o_apm">apm</a> -- 電源管理を切り替えます</li><li><a href="#o_acpi">acpi</a> -- "詳細設定と電源インタフェース" の略称です</li><li><a href="#o_ide">ide</a> -- IDE サブシステムを操作します</li></ul></p>
diff --git a/themes/openSUSE/help-install/ja/main::opt::network.html b/themes/openSUSE/help-install/ja/main::opt::network.html
new file mode 100644
index 0000000..cdb27f7
--- /dev/null
+++ b/themes/openSUSE/help-install/ja/main::opt::network.html
@@ -0,0 +1,13 @@
+<a name="o_hostip"/>
+<a name="o_netmask"/>
+<a name="o_gateway"/>
+
+<h3>
+<a name="network">インストーラオプション: ネットワークオプション</a>
+</h3>
+
+<p>ネットワークインタフェースを今すぐ設定することができます。ハードウェアは YaST2 を利用して後から検出します。ネットワークカードを設定するオプションの最低限の設定は IP アドレスとサブネットマスクの項目です。例: <ul><li>hostip=192.168.0.10 netmask=255.255.255.0</li></ul></p>
+
+<p>または短縮して: <ul><li>hostip=192.168.0.10/24</li></ul></p>
+
+<p><a href="#o_install">ネットワークベースのインストール</a> を指定しながらこれらのオプションを両方とも指定しない場合、インストーラは <em>DHCP</em> でネットワークインタフェースを設定しようとします。デフォルトゲートウエイが必要な場合、オプション <em>ゲートウエイ</em> でこのゲートウエイを指定してください。例: <ul><li>gateway=192.168.0.8</li></ul></p>
diff --git a/themes/openSUSE/help-install/ja/main::opt::o_acpi.html b/themes/openSUSE/help-install/ja/main::opt::o_acpi.html
new file mode 100644
index 0000000..b09f95b
--- /dev/null
+++ b/themes/openSUSE/help-install/ja/main::opt::o_acpi.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="o_acpi">カーネルオプション: acpi</a>
+</h3>
+
+<p>ACPI (Advanced Configuration and Power Interface) は、オペレーティングシステムと BIOS の間で決められた電源と設定管理インタフェースの標準です。既定では <em>acpi</em> は BIOS が 2000 年より新しいものであると有効になります。 ACPI の動作をコントロールするために、いくつかのパラメータが用意されています: <ul><li><em>pci=noacpi</em> -- PCI の割り込み制御に ACPI を使わないようにする</li><li><em>acpi=oldboot</em> -- ACPI のうち起動に関連する部分だけを有効にする</li><li><em>acpi=off</em> -- ACPI を完全に無効化する</li><li><em>acpi=force</em> -- BIOS が 2000 年以前の日付の場合でも ACPI を有効にする</li></ul></p>
+
+<p>特に新しいコンピュータでは、古い <a href="#o_apm">apm</a> システムに取って代わっています。</p>
diff --git a/themes/openSUSE/help-install/ja/main::opt::o_apm.html b/themes/openSUSE/help-install/ja/main::opt::o_apm.html
new file mode 100644
index 0000000..33c8228
--- /dev/null
+++ b/themes/openSUSE/help-install/ja/main::opt::o_apm.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="o_apm">カーネルオプション: apm</a>
+</h3>
+
+<p>APM は現在のコンピュータで使用される 2 種類の電源管理ストラテジのうちの 1 つです。この機能はディスクへのサスペンド (Suspend to disk) のような機能に対してノート PC で主に使用されますが、パワーダウンした後にコンピュータの電源をオフにするような機能もあります。 APM は BIOS が正しく動作することを前提に作られているため、 BIOS が壊れた場合は APM の使用が制限されたり、コンピュータが機能しないこともあります。そのため、下記のパラメータでオフにすることもできます <ul><li><em>apm=off</em> -- APM を完全に無効化する</li></ul></p>
+
+<p>いくつかの最新コンピュータでは新しい <a href="#o_acpi">ACPI</a> を利用したほうが利点があるかもしれません。</p>
diff --git a/themes/openSUSE/help-install/ja/main::opt::o_ide.html b/themes/openSUSE/help-install/ja/main::opt::o_ide.html
new file mode 100644
index 0000000..39cef84
--- /dev/null
+++ b/themes/openSUSE/help-install/ja/main::opt::o_ide.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="o_ide">カーネルオプション: ide</a>
+</h3>
+
+<p>IDE は SCSI と異なり、ほとんどのデスクトップワークステーションで広く使用されています。 IDE システムに発生したハードウェア問題を回避するには、カーネルパラメータを使用してください: <ul><li><em>ide=nodma</em> -- IDE ドライブの DMA を無効にする</li></ul></p>
diff --git a/themes/openSUSE/help-install/ja/main::opt::o_install.html b/themes/openSUSE/help-install/ja/main::opt::o_install.html
new file mode 100644
index 0000000..1304a86
--- /dev/null
+++ b/themes/openSUSE/help-install/ja/main::opt::o_install.html
@@ -0,0 +1,9 @@
+<h3>
+<a name="o_install">インストーラオプション: インストール</a>
+</h3>
+
+<p>既定ではローカルの CD-ROM ドライブをインストール元として検索します。ネットワークインストールの場合、 <em>インストール</em> オプションを選択してください。使用可能なインストールプロトコルは下記の通りです。 <ul><li>FTP</li><li>NFS</li><li>HTTP</li></ul></p>
+
+<p>使用する構文は一般的な URL に似ています。 例えばサーバが 192.168.0.1 で、そのサーバのディレクトリ /install から NFS ベースのインストールを行なう場合、以下のようにソースを指定してください: <ul><li>install=nfs://192.168.0.1/install</li></ul></p>
+
+<p>ネットワークカードは <em>DHCP</em> で設定するか、 <a href="#network">ネットワークオプション</a> で説明したように自分でパラメータを指定する必要があります。</p>
diff --git a/themes/openSUSE/help-install/ja/main::opt::o_splash.html b/themes/openSUSE/help-install/ja/main::opt::o_splash.html
new file mode 100644
index 0000000..6bd486b
--- /dev/null
+++ b/themes/openSUSE/help-install/ja/main::opt::o_splash.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="o_splash">カーネルオプション: splash</a>
+</h3>
+
+<p>スプラッシュ画面とはシステムが起動する際に表示される画像のことです。 <ul><li><em>splash=0</em> -- スプラッシュ画面を無効にします。とても古いコンピュータを使用している場合や、何らかのエラーが起こる場合に便利です。</li><li><em>splash=verbose</em> -- スプラッシュ画面を有効にし、あわせてカーネルと起動時のメッセージを表示します。</li><li><em>splash=silent</em> -- スプラッシュ画面を有効にしますが、メッセージを表示しません。進行状況のバーのみを表示します。</li></ul></p>
diff --git a/themes/openSUSE/help-install/ja/main::opt::o_vnc.html b/themes/openSUSE/help-install/ja/main::opt::o_vnc.html
new file mode 100644
index 0000000..1db4c7b
--- /dev/null
+++ b/themes/openSUSE/help-install/ja/main::opt::o_vnc.html
@@ -0,0 +1,9 @@
+<a name="o_vncpassword"/>
+
+<h3>
+<a name="o_vnc">インストーラオプション:vnc</a>
+</h3>
+
+<p>VNC インストールを使用するには、パラメータ vnc と vncpassword を指定してください: <ul><li><em>vnc=1 vncpassword=example</em></li></ul></p>
+
+<p>VNC サーバが起動され、リモートシステムから任意の VNC クライアントを経由して YaST2 をコントロールすることができるようになります。</p>
diff --git a/themes/openSUSE/help-install/ja/main::rescue.html b/themes/openSUSE/help-install/ja/main::rescue.html
new file mode 100644
index 0000000..6e17318
--- /dev/null
+++ b/themes/openSUSE/help-install/ja/main::rescue.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="rescue">レスキューシステム</a>
+</h3>
+
+<p><em>レスキューシステム</em> は小型の RAM ディスクベースのシステムです。ここからインストール済みのシステムにあらゆる種類の変更を行なうことができます。このシステムでは低レベルのツールしか使用できないため、このオプションは熟練者を対象にしています。</p>
diff --git a/themes/openSUSE/help-install/ja/main::videomode.html b/themes/openSUSE/help-install/ja/main::videomode.html
new file mode 100644
index 0000000..7ae04f3
--- /dev/null
+++ b/themes/openSUSE/help-install/ja/main::videomode.html
@@ -0,0 +1,9 @@
+<h3>
+<a name="videomode">ビデオモード選択</a>
+</h3>
+
+<p>グラフィックカードがサポートするビデオモードの一覧を表示するには <em>@@@fkey_video@@@</em> キーを押してください。モニタが表示できるもっとも高いモードがあらかじめ選択されています。</p>
+
+<p>モニタが自動的に検出されないこともあります。その場合は手動でモードを選択してください。</p>
+
+<p>インストール中にグラフィックカードに問題が発生した場合、 <em>テキストモード</em> が回避方法になるかもしれません。</p>
diff --git a/themes/openSUSE/help-install/ja/navi.html b/themes/openSUSE/help-install/ja/navi.html
new file mode 100644
index 0000000..c5d9cb9
--- /dev/null
+++ b/themes/openSUSE/help-install/ja/navi.html
@@ -0,0 +1 @@
+<p><a href="#foobar">FOOBAR</a> に戻る</p>
diff --git a/themes/openSUSE/help-install/ko/main.html b/themes/openSUSE/help-install/ko/main.html
new file mode 100644
index 0000000..6dc442f
--- /dev/null
+++ b/themes/openSUSE/help-install/ko/main.html
@@ -0,0 +1,35 @@
+<h3>
+<a name="main">부트 로더 도움말</a>
+</h3>
+
+<p><em>@@@product@@@</em> 에 오신것을 환영합니다</p>
+
+<p>이 메뉴를 사용하여 원하는 기능을 선택합니다. 이 도움말 시스템에서 문제가 발생하면 <em>@@@fkey_help@@@</em>를 눌러 도움말 시스템의 <a href="#help">설명</a> 에 들어가세요. 이 메뉴에서 주요 기능은 다음과 같습니다:</p>
+
+<p><a href="#harddisk">하드디스크로 부팅</a>: 이 선택사항은 앞서 설치된 운영체제만 시작할 뿐 시스템에 아무런 영향을 주지 않습니다.</p>
+
+<p><a href="#linux">설치</a>: 대부분의 머신은 이 설치 모드를 사용합니다. 부팅 도중 시스템이 멈추거나 하드웨어 관련 문제(디스크 제어기, 네트워크 카드 같은)가 발생하면, 다음의 설치 옵션 중 하나를 선택하세요.</p>
+
+<p><a href="#noacpi">설치 -- ACPI 비활성화</a>: 현재 판매되는 대부분의 컴퓨터가 불완전하거나, ACPI의 구현에 결함이 있습니다. 이 선택사항은 커널에서 ACPI 지원을 비활성화 시킵니다. 하지만 IDE 하드디스크의 DMA 기능 같은것들은 활성화합니다.</p>
+
+<p><a href="#nolapic">설치 -- 내부 APIC 비활성화</a>: 만약 정상적인 설치에 실패했다면, 시스템 하드웨어가 로컬 APIC를 지원하지 않을 수 있습니다. 그런 경우라면, 이 옵션을 사용하여 로컬 APIC 지원 없이 설치를 해보세요.</p>
+
+<p><a href="#failsafe">설치 -- 안전 설정</a>: <em>설치</em>에 성공하지 못한 경우에는, 이 선택 항목으로 문제를 해결 할 수도 있습니다.</p>
+
+<p><a href="#rescue">시스템 복구</a>: 이 부팅 이미지는 RAM 을 이용한 작은 리눅스 시스템을 시작 시킵니다. 이것은 시스템에 문제가 발생한 경우에 유용합니다. 이것으로 부팅시킨 뒤, 루트로 로그인 할 수 있습니다.</p>
+
+<p><a href="#firmware">펌웨어 검사</a>: ACPI 및 BIOS의 부분의 유효성을 확인 할 BIOS 검사 도구가 실행 됩니다.</p>
+
+<p><a href="#memtest">메모리 검사</a>: 메모리 검사는 새 메모리 모듈을 검사하는데 유용합니다. 컴퓨터 시스템의 중요한 부분 및 문제에 대한 검사입니다.</p>
+
+<p><a href="#opt">부트 옵션</a>: 부트 옵션은 커널에 대한 설정입니다. 사용자 시스템 동작을 최적화 할 수 있게 변경할 수 있습니다.</p>
+
+<p><a href="#help">@@@fkey_help@@@ 도움말</a>: 이것은 context sensitive 입니다. 부팅화면의 활성에 따라 서로 다른 화면을 보여 줍니다. 여기에 대한 설명은 도움말 시스템에 있습니다.</p>
+
+<p><a href="#keytable">@@@fkey_lang@@@</a>: 부트로더가 사용하는 언어와 키보드 배열 지정 합니다.</p>
+
+<p><a href="#videomode">@@@fkey_video@@@ 비디오 모드</a>: 여기에서 설치 할 때의 해상도중 다른것을 선택합니다. 그래픽 모드 설치에 문제가 생길 수도 있고, 작업 도중 <em>텍스트 모드</em> 있을 수 있습니다.</p>
+
+<p><a href="#install_src">@@@fkey_inst@@@ 설치 소스</a>: 설치할 소스를 선택합니다.</p>
+
+<p><a href="#driverupdate">@@@fkey_dud@@@ 드라이버 업데이트</a>: 최근 출시된 머신을 위해 드라이버 업데이트 설치가 필요 할 수 있습니다.</p>
diff --git a/themes/openSUSE/help-install/ko/main::bits.html b/themes/openSUSE/help-install/ko/main::bits.html
new file mode 100644
index 0000000..85e2b69
--- /dev/null
+++ b/themes/openSUSE/help-install/ko/main::bits.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="bits">소프트웨어 방식 선택</a>
+</h3>
+
+<p>@@@product@@@ 의 32비트 또는 64비트 버전을 선택하세요.</p>
diff --git a/themes/openSUSE/help-install/ko/main::driverupdate.html b/themes/openSUSE/help-install/ko/main::driverupdate.html
new file mode 100644
index 0000000..e1511aa
--- /dev/null
+++ b/themes/openSUSE/help-install/ko/main::driverupdate.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="driverupdate">드라이버 업데이트</a>
+</h3>
+
+<p>플로피 디스크나 CD-ROM 드라이버 업데이트가 필요하면, <em>@@@fkey_dud@@@</em>를 누르세요. 리눅스 커널을 불러온 후에 부트 로더가 드라이버 업데이트 매체 삽입을 요구 할 것입니다.</p>
+
+<p>드라이버 업데이트는 일반적으로 새 버전의 하드웨어 드라이버나, 버그 수정을 뜻합니다.</p>
diff --git a/themes/openSUSE/help-install/ko/main::failsafe.html b/themes/openSUSE/help-install/ko/main::failsafe.html
new file mode 100644
index 0000000..79ab17f
--- /dev/null
+++ b/themes/openSUSE/help-install/ko/main::failsafe.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="failsafe">설치 -- 안전 설정</a>
+</h3>
+
+<p>설치 또는 irreproducible 오류를 만났을때 <em>설치 -- 안전 설정</em> 를 선택하세요. 이 옵션은 IDE 드라이버의 DMA 와 모든 전원 관리 기능을 비활성화 합니다. 커널 옵션 <a href="#o_apm">apm</a>, <a href="#o_acpi">acpi</a>, <a href="#o_ide">ide</a>을 참조하세요.</p>
diff --git a/themes/openSUSE/help-install/ko/main::firmware.html b/themes/openSUSE/help-install/ko/main::firmware.html
new file mode 100644
index 0000000..7a213f8
--- /dev/null
+++ b/themes/openSUSE/help-install/ko/main::firmware.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="firmware">펌웨어 검사</a>
+</h3>
+
+<p>BIOS 검사기를 시작 합니다. BIOS의 ACPI 테이블 및 기타 부분의 유효성을 검사하고, 검사 결과를 USB 디스크나 네트워크를 통해 저장 할 수 있습니다.</p>
diff --git a/themes/openSUSE/help-install/ko/main::harddisk.html b/themes/openSUSE/help-install/ko/main::harddisk.html
new file mode 100644
index 0000000..cb20c2f
--- /dev/null
+++ b/themes/openSUSE/help-install/ko/main::harddisk.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="harddisk">하드디스크로 부팅</a>
+</h3>
+
+<p><em>설치된 OS 로 부팅</em> 선택으로 하드디스크에 설치된 시스템으로 시작합니다. 이에 앞서 첫번째 하드디스크를 시작 할 때 MBR (Master Boot Record) 을 찾으므로 설치된 시스템이 있어야 합니다. 첫번째 하드디스크를 지칭하는 장치 ID 를 컴퓨터 BIOS(CMOS 셋업)에서 지정할 수 있습니다.</p>
+
+<p>하드디스크로 컴퓨터를 시작하려고 하는데 잊어버리고 CD나 DVD를 꺼내지 않게되면 이것을 사용하세요.</p>
diff --git a/themes/openSUSE/help-install/ko/main::help.html b/themes/openSUSE/help-install/ko/main::help.html
new file mode 100644
index 0000000..8cc6bbf
--- /dev/null
+++ b/themes/openSUSE/help-install/ko/main::help.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="help">도움말 시스템 사용</a>
+</h3>
+
+<p>부트로더 온라인 도움말은 context sensitive 입니다. 선택한 메뉴 아이템에 대한 정보를 얻거나, 부트 옵션을 편집 할 때 옵션에 커서가 올라가있으면 거기에 대한 정보를 조회 할 수 있습니다.</p>
+
+<p>키 <ul><li><em>위 화살표</em>: 앞의 링크를 하이라이트</li><li><em>아래 화살표</em>: 다음 링크를 하이라이트</li><li><em>왼쪽 화살표</em>, <em>백스페이스</em>: 이전 주제로 되돌아가기</li><li><em>오른쪽 화살표</em>, <em>엔터</em>, <em>스페이스</em>: 다음 링크를</li><li><em>페이지 업</em>: 한장 위로</li><li><em>페이지 다운</em>: 한장 아래로</li><li><em>처음</em>: 첫장으로</li><li><em>End</em>: 마지막 장으로</li><li><em>Esc</em>: 도움말 떠남</li></ul></p>
diff --git a/themes/openSUSE/help-install/ko/main::install_src.html b/themes/openSUSE/help-install/ko/main::install_src.html
new file mode 100644
index 0000000..8e580f7
--- /dev/null
+++ b/themes/openSUSE/help-install/ko/main::install_src.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="install_src">설치 소스</a>
+</h3>
+
+<p><em>@@@fkey_inst@@@</em> 를 눌러 설치할 소스를 선택합니다.</p>
+
+<p>이것은 <a href="#o_install">설치</a> 부트 옵션을 사용하는것과 같은 것입니다.</p>
diff --git a/themes/openSUSE/help-install/ko/main::keytable.html b/themes/openSUSE/help-install/ko/main::keytable.html
new file mode 100644
index 0000000..ca3b7a5
--- /dev/null
+++ b/themes/openSUSE/help-install/ko/main::keytable.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="keytable">언어 및 키보드 배열 선택</a>
+</h3>
+
+<p><em>@@@fkey_lang@@@</em> 을 눌러 부트 로더가 사용할 언어 및 키보드 배열을 변경합니다.</p>
diff --git a/themes/openSUSE/help-install/ko/main::linux.html b/themes/openSUSE/help-install/ko/main::linux.html
new file mode 100644
index 0000000..01d4d53
--- /dev/null
+++ b/themes/openSUSE/help-install/ko/main::linux.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="linux">설치</a>
+</h3>
+
+<p><em>설치</em> 선택으로 기본 설치를 시작합니다. <a href="#opt">부트 옵션</a> 입력은 시작 할 때 사용됩니다. 이 항목은 하드웨어에서 사용할 수 있는 많은 기능을 활성화 할 수 있습니다.</p>
diff --git a/themes/openSUSE/help-install/ko/main::memtest.html b/themes/openSUSE/help-install/ko/main::memtest.html
new file mode 100644
index 0000000..335f068
--- /dev/null
+++ b/themes/openSUSE/help-install/ko/main::memtest.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="memtest">메모리 검사</a>
+</h3>
+
+<p>포함된 <em>메모리 검사</em> 는 시스템의 하드웨어 스트레스 검사를 제공합니다. 주요 기능은 고장난 RAM 을 감지하거나, 시스템 내의 많은 부분의 스트레스를 감지합니다.</p>
+
+<p>메모리 오류가 발견되지 않았을 경우에도 메모리가 정상적일 것이라는 보장은 없습니다만, 대부분의 메모리 결함을 감지합니다.</p>
diff --git a/themes/openSUSE/help-install/ko/main::noacpi.html b/themes/openSUSE/help-install/ko/main::noacpi.html
new file mode 100644
index 0000000..0584d9d
--- /dev/null
+++ b/themes/openSUSE/help-install/ko/main::noacpi.html
@@ -0,0 +1,9 @@
+<h3>
+<a name="noacpi">설치 -- ACPI 비활성화</a>
+</h3>
+
+<p>현재 하드웨어는 ACPI (Advanced Configuration and Power Interface) 를 제어하는 인터럽트 처리를 요구합니다. 구형 APM 시스템을 ACPI 는 완벽하게 대체합니다.</p>
+
+<p><em>설치 -- ACPI 비활성화</em> 를 선택하여 커널의 부팅 도중 문제가 발생한 경우 머신이 가지고 있는 알려진 문제 ACPI가: <ul><li>부팅 도중 커널 뻗어버림</li><li>PCI 카드가 감지되지 않았거나 적당히 초기화됨</li></ul></p>
+
+<p><a href="#firmware">펌웨어 검사</a> 을 사용해 부트 옵션 및 ACPI 유효성 검사 결과 볼 수 있습니다.</p>
diff --git a/themes/openSUSE/help-install/ko/main::nolapic.html b/themes/openSUSE/help-install/ko/main::nolapic.html
new file mode 100644
index 0000000..5cb3b24
--- /dev/null
+++ b/themes/openSUSE/help-install/ko/main::nolapic.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="nolapic">설치 -- 내부 APIC 비활성화</a>
+</h3>
+
+<p>보통은 APIC (Advanced Programmable Interrupt Controller)에는 문제가 생기지 않습니다. 하지만 문제가 생긴것으로 보이면, 이 옵션을 사용하여 부팅 할 때 로컬 APIC 지원 없이 해보세요.</p>
+
+<p><a href="#noacpi">ACPI</a> (Advanced Configuration and Power Interface)와 혼동하지 마세요.</p>
diff --git a/themes/openSUSE/help-install/ko/main::opt.html b/themes/openSUSE/help-install/ko/main::opt.html
new file mode 100644
index 0000000..e6cef1c
--- /dev/null
+++ b/themes/openSUSE/help-install/ko/main::opt.html
@@ -0,0 +1,9 @@
+<h3>
+<a name="opt">부트 옵션</a>
+</h3>
+
+<p>부트 옵션으로 두가지 방식을 사용할 수 있습니다. 첫번째로, 설치 프로그램에 영향을 주는 옵션이고 두번째로, 커널 옵션 입니다. 일반적인 옵션은 다음과 같습니다:</p>
+
+<p>a) 설치프로그램 옵션들 <ul><li><a href="#o_install">설치</a> -- 설치 소스 선택</li><li><a href="#network">네트워크 옵션</a> -- 네트워크 옵션</li><li><a href="#o_vnc">VNC 옵션</a> -- VNC를 통한 설치를 위한 옵션</li></ul></p>
+
+<p>b) 커널 옵션 <ul><li><a href="#o_splash">스플래시</a> -- 스플래시 화면의 동작 영향</li><li><a href="#o_apm">apm</a> -- 전원 관리 전환</li><li><a href="#o_acpi">acpi</a> -- 고급 설정 및 전원 인터페이스</li><li><a href="#o_ide">ide</a> -- IDE 서브시스템 제어</li></ul></p>
diff --git a/themes/openSUSE/help-install/ko/main::opt::network.html b/themes/openSUSE/help-install/ko/main::opt::network.html
new file mode 100644
index 0000000..a63f5b3
--- /dev/null
+++ b/themes/openSUSE/help-install/ko/main::opt::network.html
@@ -0,0 +1,13 @@
+<a name="o_hostip"/>
+<a name="o_netmask"/>
+<a name="o_gateway"/>
+
+<h3>
+<a name="network">설치 옵션: Network Options</a>
+</h3>
+
+<p>지금 바로 네트워크 인터페이스를 구성할 수 있습니다. 하드웨어는 나중에 YaST2에서 감지할 것입니다. 최소 옵션으로 호스트 IP 와 넷마스크로 네트워크 카드를 설정하세요. 예를 들어:<ul><li>hostip=192.168.0.10 netmask=255.255.255.0</li></ul></p>
+
+<p>또는 짧은 양식에서: <ul><li>hostip=192.168.0.10/24</li></ul></p>
+
+<p><a href="#o_install">네트워크 설치</a> 을 지정하고 이러한 옵션을 둘 다 지정하지 않고, 설치프로그램에서 네트워크 인터페이스를 <em>dhcp</em> 와 함께 설정합니다. 만약 기본 게이트웨이가 필요하면, <em>gateway</em> 옵션을 지정합니다. 예를 들어:<ul><li>gateway=192.168.0.8</li></ul></p>
diff --git a/themes/openSUSE/help-install/ko/main::opt::o_acpi.html b/themes/openSUSE/help-install/ko/main::opt::o_acpi.html
new file mode 100644
index 0000000..fdb9589
--- /dev/null
+++ b/themes/openSUSE/help-install/ko/main::opt::o_acpi.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="o_acpi">커널 옵션: acpi</a>
+</h3>
+
+<p>ACPI는 (Advanced Configuration and Power Interface) 운영체제와 바이오스간의 전원관리 인터페이스를 정의하고 있는 표준입니다. 기본적으로 <em>acpi</em>2000년 이후에 제조된 바이오스를 사용하고 있다면 acpi 옵션이 활성화될 것입니다. 다음은 ACPI 동작을 제어하기위해 일반적으로 사용되는 항목입니다:<ul><li><em>pci=noacpi</em> -- PCI 인터럽트 전달에 ACPI를 사용하지 않음</li><li><em>acpi=oldboot</em> -- 부팅과 관련된 부분 중 ACPI 부분만 활성화</li><li><em>acpi=off</em> -- ACPI 를 완전히 끄기</li><li><em>acpi=force</em> -- 2000년 이전에 제조된 바이오스일지라도 강제로 ACPI 옵션을 켜기</li></ul></p>
+
+<p>특히 최신 컴퓨터에서 구형 <a href="#o_apm">apm</a> 시스템을 대체합니다.</p>
diff --git a/themes/openSUSE/help-install/ko/main::opt::o_apm.html b/themes/openSUSE/help-install/ko/main::opt::o_apm.html
new file mode 100644
index 0000000..8a86d90
--- /dev/null
+++ b/themes/openSUSE/help-install/ko/main::opt::o_apm.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="o_apm">커널 옵션: apm</a>
+</h3>
+
+<p>APM(Advanced Power Management)은 요즘 컴퓨터에서 사용되고 있는 두 종류의 전원관리기술 중 하나입니다. 주로 휴대용에서 사용되는 "디스크 일시 중지"같은 기능은 물론, 전원이 공급이 중단된 이후의 컴퓨터를 끄는데 이 기술이 사용됩니다. APM은 정상적으로 동작하는 바이오스에 의지합니다. 만일 바이오스에 문제가 발생한다면 APM을 사용하는데 제약이 따를 뿐만 아니라 심지어 컴퓨터 동작을 방해할 수도 있습니다. 그러므로 APM 관련 항목은 기본적으로 매개변수 <ul><li><em>apm=off</em> -- ACPI 를 완전히 끄기</li></ul> 와 함께 꺼져있을 수 있습니다.</p>
+
+<p>최신 컴퓨터의 경우 새로운 <a href="#o_acpi">ACPI</a> 이 보다 더 유용할 것입니다.</p>
diff --git a/themes/openSUSE/help-install/ko/main::opt::o_ide.html b/themes/openSUSE/help-install/ko/main::opt::o_ide.html
new file mode 100644
index 0000000..22ffddb
--- /dev/null
+++ b/themes/openSUSE/help-install/ko/main::opt::o_ide.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="o_ide">커널 옵션: ide</a>
+</h3>
+
+<p>SCSI 와는 달리 IDE 는 대부분의 데스크톱 워크스테이션에서 사용되고 있습니다. IDE 시스템에 문제가 발생할 경우에는 커널 매개변수를 사용하세요: <ul><li><em>ide=nodma</em> -- IDE 드라이브용 DMA 끄기</li></ul></p>
diff --git a/themes/openSUSE/help-install/ko/main::opt::o_install.html b/themes/openSUSE/help-install/ko/main::opt::o_install.html
new file mode 100644
index 0000000..2b5c5f0
--- /dev/null
+++ b/themes/openSUSE/help-install/ko/main::opt::o_install.html
@@ -0,0 +1,9 @@
+<h3>
+<a name="o_install">설치 옵션: install</a>
+</h3>
+
+<p>기본적으로, 내부 CD-ROM의 설치 소스를 검색합니다. 네트워크 인스톨을 위해서는<em>설치</em> 옵션을 선택합니다. 설치 진행이 가능한 프로토콜은 <ul><li>FTP</li><li>NFS</li><li>HTTP</li></ul></p>
+
+<p>구문 사용은 표준 URL 같은 것만을 사용합니다. 예를 들어, 192.168.0.1 에서 서버를 찾고 하고자 하는 NFS 기반 설치를 이 서버의 디렉터리인 /install 에서 할 수 있습니다. 지정되는 소스는 다음과 같습니다: <ul><li>install=nfs://192.168.0.1/install</li></ul></p>
+
+<p>네트워크 카드는 둘중 하나를 사용하여 구성됩니다. <em>dhcp</em> 또는 <a href="#network">네트워크 옵션</a> 에서 자신의 설명에 따라 매개 변수를 지정해야 합니다.</p>
diff --git a/themes/openSUSE/help-install/ko/main::opt::o_splash.html b/themes/openSUSE/help-install/ko/main::opt::o_splash.html
new file mode 100644
index 0000000..5c091aa
--- /dev/null
+++ b/themes/openSUSE/help-install/ko/main::opt::o_splash.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="o_splash">커널 옵션: splash</a>
+</h3>
+
+<p>스플래시 스크린은 시스템이 시작되는 동안 보여지는 사진입니다.<ul><li><em>splash=0</em> -- 스플래시 스크린은 꺼져 있습니다. 아주 오래된 모니터를 사용하고 있거나, 오류가 발생했을 수 있습니다.</li><li><em>splash=verbose</em> -- 스플래시, 커널 및 부트 메시지가 보여지는 상태에서 활성화</li><li><em>splash=silent</em> -- 스플래시 활성화, 하지만 메시지는 없고, 대신에 진행률 막대가 그려집니다.</li></ul></p>
diff --git a/themes/openSUSE/help-install/ko/main::opt::o_vnc.html b/themes/openSUSE/help-install/ko/main::opt::o_vnc.html
new file mode 100644
index 0000000..8de632d
--- /dev/null
+++ b/themes/openSUSE/help-install/ko/main::opt::o_vnc.html
@@ -0,0 +1,9 @@
+<a name="o_vncpassword"/>
+
+<h3>
+<a name="o_vnc">설치 옵션: vnc</a>
+</h3>
+
+<p>VNC 설치를 활성화 한뒤 VNC 파라메터와 VNC 열쇠글 지정: <ul><li><em>vnc=1 vncpassword=example</em></li></ul></p>
+
+<p>원격 시스템 VNC 클라이언트에 대한 제어 및 VNC 서버 관리를 YaST2 에서 할 수 있습니다.</p>
diff --git a/themes/openSUSE/help-install/ko/main::rescue.html b/themes/openSUSE/help-install/ko/main::rescue.html
new file mode 100644
index 0000000..c4ca1d3
--- /dev/null
+++ b/themes/openSUSE/help-install/ko/main::rescue.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="rescue">시스템 복구</a>
+</h3>
+
+<p><em>시스템 복구</em> 는 적은 용량의 RAM 디스크를 기반으로 한 시스템입니다. 여기서, 설치된 시스템에 대한 모든 조정을 할 수 있습니다. 이 시스템에서 전문가를 위한 적은 도구만 사용가능합니다.</p>
diff --git a/themes/openSUSE/help-install/ko/main::videomode.html b/themes/openSUSE/help-install/ko/main::videomode.html
new file mode 100644
index 0000000..d9be08c
--- /dev/null
+++ b/themes/openSUSE/help-install/ko/main::videomode.html
@@ -0,0 +1,9 @@
+<h3>
+<a name="videomode">비디오 모드 선택</a>
+</h3>
+
+<p><em>@@@fkey_video@@@</em> 를 눌러 그래픽 카드가 지원하는 비디오 모드 목록을 가져옵니다. 모니터에 표시할 수 있는 높은 모드를 미리 선택 할 수 있습니다.</p>
+
+<p>사용자의 모니터가 자동으로 검색하지 못한 것도 가능합니다. 이 경우, 원하는 모드를 수동으로 선택하세요.</p>
+
+<p>그래픽 카드에 문제가 있는 경우, 설치하는 동안 <em>텍스트 모드</em> 을 사용 할 수 있습니다.</p>
diff --git a/themes/openSUSE/help-install/ko/navi.html b/themes/openSUSE/help-install/ko/navi.html
new file mode 100644
index 0000000..e1dc55e
--- /dev/null
+++ b/themes/openSUSE/help-install/ko/navi.html
@@ -0,0 +1 @@
+<p><a href="#foobar">FOOBAR</a> 에 되돌아감</p>
diff --git a/themes/openSUSE/help-install/ky/main.html b/themes/openSUSE/help-install/ky/main.html
new file mode 100644
index 0000000..2316625
--- /dev/null
+++ b/themes/openSUSE/help-install/ky/main.html
@@ -0,0 +1,35 @@
+<h3>
+<a name="main">Жүктөөгүч жардамы</a>
+</h3>
+
+<p><em>@@@product@@@</em> кош келиңиздер</p>
+
+<p>Керектүү функцияны тандоо үчүн төмөнкү менюну колдонуңуз. Эгерде сизде жардам системасын аралоосунда кыйынчылыктар чыкса, анда жардам системанын <a href="#help">мүнөзүн</a> көрүү үчүн <em>@@@fkey_help@@@</em> баскычын басыңыз. Бул менюда көрсөтүлгөн негизги функциялар:</p>
+
+<p><a href="#harddisk">Катуу дисктен жүктөлүү</a>: Бул тандоо, системага эч нерсе кылбайт. Ал мурда орнотулган операциондук системаны гана жүктөйт.</p>
+
+<p><a href="#linux">Орнотуу</a>: Бул режим көптөгөн учурларда иштетилет. Эгерде сиздин системаңыз жай иштеп баштаса же аппаратык жабдыктардын(диск контроллери же тармак карталары) аныктоосунда кыйынчылыктар пайда болсо, анда төмөнкү орнотуу параметрлерин колдонуп көрүңүз.</p>
+
+<p><a href="#noacpi">Орнотуу - ACPI өчүк</a>: Көптөгөн сатылган компьютерлер толук эмес же туура эмес ACPI реализациясын камтышы мүмкүн. Бул тандоо ядро ичинде ACPI колдоосун өчүрөт бирок кээ бир ылдамдыкка тиешелүү өзгөчөлүктөр жандырылган, мисалы IDE катуу дисктер үчүн DMA режими.</p>
+
+<p><a href="#nolapic">Орнотуу - локалдык APIC өчүк</a>: Эгерде жөнөкөй орнотуу болбой жатса анда сиздин жабдыктарыңыз APIC'ти колдобоошу мүмкүн. Эгерде ошондой болсо анда орнотууну APIC'сиз колдоо менен бул параметрди колдонуңуз.</p>
+
+<p><a href="#failsafe">Орнотуу - коопсуз ырастоо параметрлери</a>: Эгерде сиз <em>Орнотуу</em> менен орнотууну аткаралбай калсаңыз анда бул тандоо сизге жардма бериши мүмкүн</p>
+
+<p><a href="#rescue">Аварийдик система</a>: Бул жүктөөлүчү элес RAM эсине кичинекей Linux системасын жүктөйт. Эгерде сиздин системаңыз туура эмес башталып жатса бул ыкма өтө пайдалуу. Бул системанын жүктөөлүшү менен root колдонуучу атын колдонуп кириңиз.</p>
+
+<p><a href="#firmware">Программа-жабдыктар текшерүүсү</a>: ACPI жана BIOS'тун башка бөлүктөрүн текшерген BIOS текшерүү аспабын иштетет.</p>
+
+<p><a href="#memtest">Эс тести</a>: Эс тести жөн эле жаңы эс модулдарын текшерүүсүнө караганда өтө пайдалуу ыкма. Бул компьютер системасын көптөгөн бөлүктөрүн стресстик текшерүү жана жабдыктарда табылган каталарды аныкташы мүмкүн.</p>
+
+<p><a href="#opt">Жүктөө параметрлери</a>: Жүктөөлүү параметрлери сиздин системаңыздын журушун толугу менен өзгөртүшү мүмкүн. Бул ядро ырастоолору.</p>
+
+<p><a href="#help">@@@fkey_help@@@ Жардам</a>: Мазмундан көз каранды. Жүктөө экрандын активдүү элементке тиешелүү жардамы көрсөтүлөт жана бул жардам системанын баяны дагы камтылган.</p>
+
+<p><a href="#keytable">@@@fkey_lang@@@</a>: Орноткуч колдонуучу тилин жана клавиатура жайгалышын тандаңыз.</p>
+
+<p><a href="#videomode">@@@fkey_video@@@ Видео режими</a>: Орнотуу мезгилинде колдонуулучу экран мүмкүнчүлүгүн тандаңыз. Эгерде сизде графикалык орнотууда кыйынчылыктар пайда болсо, анда <em>тексттик режим</em> сизге жардам бериши мүмкүн.</p>
+
+<p><a href="#install_src">@@@fkey_inst@@@ Орнотуу булагы</a>: Орнотуу булагын тандоо.</p>
+
+<p><a href="#driverupdate">@@@fkey_dud@@@ Драйвер жаңылоосу</a>: Көбүнчө жаңы компьютерлер Драйвер жаңылоосун керектеши мүмкүн</p>
diff --git a/themes/openSUSE/help-install/ky/main::bits.html b/themes/openSUSE/help-install/ky/main::bits.html
new file mode 100644
index 0000000..677bf94
--- /dev/null
+++ b/themes/openSUSE/help-install/ky/main::bits.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="bits">Программалык камсыздоону тандоо</a>
+</h3>
+
+<p>Сиз орнотуу версиясын тандап алышыңыз мүмкүн: 32 же 64 биттик @@@product@@@ версиясы.</p>
diff --git a/themes/openSUSE/help-install/ky/main::driverupdate.html b/themes/openSUSE/help-install/ky/main::driverupdate.html
new file mode 100644
index 0000000..af28c4d
--- /dev/null
+++ b/themes/openSUSE/help-install/ky/main::driverupdate.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="driverupdate">Драйвер жаңылоосу</a>
+</h3>
+
+<p>Эгерде сизге драйвер жаңылоосу дискета же CD-ROM керек болсо, анда <em>@@@fkey_dud@@@</em> баскычын басыңыз. Жүктөөгүч Linux ядросу жүктөлгөндөн кийин драйвер жаңылоосун камтыган булакты киргизүүнү талап кылат.</p>
+
+<p>Драйвер жаңылоосу бул жабдыктардын жаңы драйве версиясын же орнотуу мезгилинде керектүү каталардын жамактарын камтыган жөнөкөй дискета.</p>
diff --git a/themes/openSUSE/help-install/ky/main::failsafe.html b/themes/openSUSE/help-install/ky/main::failsafe.html
new file mode 100644
index 0000000..cb27e73
--- /dev/null
+++ b/themes/openSUSE/help-install/ky/main::failsafe.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="failsafe">Орнотуу - коопсуз ырастоо параметрлери</a>
+</h3>
+
+<p>Эгерде системаңыз орнотуу мезгилинде жай иштеп асылып жатса же түшүнүксүз каталар чыгып баратса, анда <em>Орнотуу - коопсуз ырастоо параметрлери</em>'н тандаңыз. Бул параметр IDE түзүлүштөр үчүн DMA режимин жана бардык электр камсыздоо башкаруунун өзгөчөлүктөрүн өчүрөт. Кошумча <a href="#o_apm">apm</a>, <a href="#o_acpi">acpi</a> жана <a href="#o_ide">ide</a> ядро параметрлерин дагы караңыз.</p>
diff --git a/themes/openSUSE/help-install/ky/main::firmware.html b/themes/openSUSE/help-install/ky/main::firmware.html
new file mode 100644
index 0000000..eb80e9c
--- /dev/null
+++ b/themes/openSUSE/help-install/ky/main::firmware.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="firmware">Программа-жабдыктар текшерүүсү</a>
+</h3>
+
+<p>BIOS'тун ACPI мүмкүнчүлүгүн жана BIOS'тун башка бөлүкчөлөрдүн BIOS текшерүүсүн иштетет. Текшерүү жыйынтыгын usb дискке же тармак аркылуу сактоо мүмкүн.</p>
diff --git a/themes/openSUSE/help-install/ky/main::harddisk.html b/themes/openSUSE/help-install/ky/main::harddisk.html
new file mode 100644
index 0000000..582f9b5
--- /dev/null
+++ b/themes/openSUSE/help-install/ky/main::harddisk.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="harddisk">Катуу дисктен жүктөөлүү</a>
+</h3>
+
+<p>Сиздин катуу дискиңизде орнотулган системаны жүктөө үчүн <em>Орнотулган ОС жүктөө</em> тандаңыз. Бул система орнотулган болушу керек эмнеге дегенде биринчи катуу дисктин MBR(Башкы жүктөө жазылышы) гана баштатылат. Биринчи катуу диск түзүлүшүнүн ID'син компьютердин BIOS'у аныктап берет.</p>
+
+<p>Эгерде сиз CD же DVD диск түзүлүшүнөн алып чыгууну унутуп жана компьютерди катуу дисктен жүктөөсүн каалаган учурда бул ыкманы колдонуңуз.</p>
diff --git a/themes/openSUSE/help-install/ky/main::help.html b/themes/openSUSE/help-install/ky/main::help.html
new file mode 100644
index 0000000..82619db
--- /dev/null
+++ b/themes/openSUSE/help-install/ky/main::help.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="help">Жардам системасын колдонуу</a>
+</h3>
+
+<p>Онлайндык жүктөөгүч жардамы мазмундан көз каранды. Ал менюдан тандалаган элемент боюнча маалымат берет, же эгерде сиз жүктөөлүү параметрлерин өзгөртүп жаткан учурда, параметрде турган курсор боюнча маалыматты көрсөтүүнү аракеттенет.</p>
+
+<p>Башкаруу баскычтары <ul><li><em>Жогору жебеси</em>: мурунку шилтемени жаркыратат</li><li><em>Ылдый жебеси</em>: кийинки шилтемени жаркыратат</li><li><em>Солго жебеси</em>, <em>Backspace</em>: мурунку бөлүмгө өтүү</li><li><em>Оңго жебеси</em>, <em>Enter</em>, <em>Боштук</em>: шилтемедем өтүү</li><li><em>Page Up</em>: мурунку бетке өтүү</li><li><em>Page Down</em>: кийинки бетке өтүү</li><li><em>Home</em>: беттин башына өтүү</li><li><em>End</em>: беттин аягына өтүү</li><li><em>Esc</em>: жардам системасындан чыгуу</li></ul></p>
diff --git a/themes/openSUSE/help-install/ky/main::install_src.html b/themes/openSUSE/help-install/ky/main::install_src.html
new file mode 100644
index 0000000..7f4b05b
--- /dev/null
+++ b/themes/openSUSE/help-install/ky/main::install_src.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="install_src">Орнотуу булагы</a>
+</h3>
+
+<p>Орнотуу булагын тандоо үчүн <em>@@@fkey_inst@@@</em> баскычын басыңыз.</p>
+
+<p>Бул эгерде <a href="#o_install">орнотуу</a> жүктөө параметрин колдонгондой эле, экөө бир нерсе.</p>
diff --git a/themes/openSUSE/help-install/ky/main::keytable.html b/themes/openSUSE/help-install/ky/main::keytable.html
new file mode 100644
index 0000000..45f6731
--- /dev/null
+++ b/themes/openSUSE/help-install/ky/main::keytable.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="keytable">Тилди жана клавиатура жайгалышын тандоо</a>
+</h3>
+
+<p>Жүктөгүч колдонуучу тилин жана клавиатурасын өзгөртүү үчүн <em>@@@fkey_lang@@@</em> баскычын басыңыз.</p>
diff --git a/themes/openSUSE/help-install/ky/main::linux.html b/themes/openSUSE/help-install/ky/main::linux.html
new file mode 100644
index 0000000..d60101e
--- /dev/null
+++ b/themes/openSUSE/help-install/ky/main::linux.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="linux">Орнотуу</a>
+</h3>
+
+<p>Орнотууну алдын ала баштоо үчүн <em>Орнотуу</em>'ну тандаңыз. Көрсөтүлгөн <a href="#opt">жүктөө параметрлери</a> дагы башталышта колдонулат. Бул пункт бар болгон жабдыктандын көптөгөн жалпы өзгөчөлүктөрүн активдештирет.</p>
diff --git a/themes/openSUSE/help-install/ky/main::memtest.html b/themes/openSUSE/help-install/ky/main::memtest.html
new file mode 100644
index 0000000..0848bfe
--- /dev/null
+++ b/themes/openSUSE/help-install/ky/main::memtest.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="memtest">Эс тести</a>
+</h3>
+
+<p><em>Эс тести</em> жанык параметри системанын жабдыктардын стресстик тесттин жакшы мүмкүнчүлүгүн берет. Негизги максаты бузук RAM'дарды аныктоо, бирок андан тышкары системанын калган бөлктөрдүн жүктөмү аткарылат.</p>
+
+<p>Эгерде эч кандай ката табылбаган болсо, анда эстин жакшы экендигин эч кандай кепилдиги жок бирок эстин көптөгөн дефектери табылмак эле.</p>
diff --git a/themes/openSUSE/help-install/ky/main::noacpi.html b/themes/openSUSE/help-install/ky/main::noacpi.html
new file mode 100644
index 0000000..72e57d7
--- /dev/null
+++ b/themes/openSUSE/help-install/ky/main::noacpi.html
@@ -0,0 +1,9 @@
+<h3>
+<a name="noacpi">Орнотуу - ACPI өчүк</a>
+</h3>
+
+<p>Заманбап жабдыктарда көбүнчө токтолуштардын башкаруу үчүн ACPI (Жетилген система ырастоо интерфейси жана энергияны камсыздоо башкаруучусу) колдонулат. ACPI толугу менен эски APM системасын ордун алмаштырат.</p>
+
+<p>Жүктөөлүү кезинде ядро менен кыйынчылыктар пайда болсо, анда <em>Орнотуу - ACPI өчүк</em> тандаңыз. AC проблемаларын камтыган белгилүү машиналар проблемалары: <ul><li>ядро жүктөөлүүдө токтотулуп жатат</li><li>PCI платалары табылган жок же туура эмес аныкталышты</li></ul></p>
+
+<p>Сиз <a href="#firmware">Программа-жабдыктар текшерүүсү</a> жүктөөлүү параметрин колдоно аласыз жана ACPI текшерүү жыйынтыгын көрө аласыз.</p>
diff --git a/themes/openSUSE/help-install/ky/main::nolapic.html b/themes/openSUSE/help-install/ky/main::nolapic.html
new file mode 100644
index 0000000..c4f69d6
--- /dev/null
+++ b/themes/openSUSE/help-install/ky/main::nolapic.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="nolapic">Орнотуу - локалдык APIC өчүк</a>
+</h3>
+
+<p>Көбүнчө APIC (Жетилген программалоочу токтотулуштар башкаруучусу) менен эч кандай кыйынчылыктар пайда болбойт. Бирок эгерде сиз кээ бир проблемаларды тапкан болсоңуз, анда бул параметрди APIC колдоосуз жүктөөлүүнү колдонуп көрүңүз.</p>
+
+<p><a href="#noacpi">ACPI</a> (Жетилген система ырастоо интерфейси жана энергияны камсыздоо башкаруучусу) менен адаштырбаңыз.</p>
diff --git a/themes/openSUSE/help-install/ky/main::opt.html b/themes/openSUSE/help-install/ky/main::opt.html
new file mode 100644
index 0000000..19c1290
--- /dev/null
+++ b/themes/openSUSE/help-install/ky/main::opt.html
@@ -0,0 +1,9 @@
+<h3>
+<a name="opt">Жүктөөлүү параметрлери</a>
+</h3>
+
+<p>Жүктөөлүү параметрлердин эки түрү бар. Биринчиси бул орноткучка таасир тийгизген параметрлер. Экинчиси болсо ядро параметрлери. Алардын эң көп колдонулгандары:</p>
+
+<p>a) орнотуу параметрлери: <ul><li><a href="#o_install">орнотуу</a> -- орнотуу булагын тандаңыз</li><li><a href="#network">тармак параметрлери</a> -- тармак параметрлери</li><li><a href="#o_vnc">vnc параметрлери</a> -- VNC аркылуу орнотуунун параметрлери</li></ul></p>
+
+<p>b) ядро параметрлери: <ul><li><a href="#o_splash">заставка</a> -- экрандык заставканы жандыруу/өчүрүү</li><li><a href="#o_apm">apm</a> -- электр камсыздоо башкаруусун иштетет</li><li><a href="#o_acpi">acpi</a> -- система ырастоо жетилген интерфейси жана энергияны камсыздоо башкаруучу</li><li><a href="#o_ide">ide</a> -- IDE системасын башкарат</li></ul></p>
diff --git a/themes/openSUSE/help-install/ky/main::opt::network.html b/themes/openSUSE/help-install/ky/main::opt::network.html
new file mode 100644
index 0000000..cfbc48b
--- /dev/null
+++ b/themes/openSUSE/help-install/ky/main::opt::network.html
@@ -0,0 +1,13 @@
+<a name="o_hostip"/>
+<a name="o_netmask"/>
+<a name="o_gateway"/>
+
+<h3>
+<a name="network">Орнотуу параметрлери: Тармак параметрлери</a>
+</h3>
+
+<p>Тармак интерфейсин азыр ырастап койсо болот. Жабдык кийинчерек YaST2 менен аныкталат. Тармак картанын минималдуу ырастоо параметрлери түйюндүн IP адреси жана тармак маскасы болуп эсептелинет. Мисалы: <ul><li>hostip=192.168.0.10 netmask=255.255.255.0</li></ul></p>
+
+<p>же анын кыска формасында: <ul><li>hostip=192.168.0.10/24</li></ul></p>
+
+<p>Ушул эки параметрлерди көрсөтпөй сиз <a href="#o_install">тармак менен орнотуу</a>'ну тандасаңыз, анда орноткуч тармак картасын <em>dhcp</em> жардамы менен ырастап көрөт. Эгерде сизге алдын ала шлюз керек болсо, анда аны <em>шлюз</em> параметри менен көрсөтүңүз. Мисалы: <ul><li>gateway=192.168.0.8</li></ul></p>
diff --git a/themes/openSUSE/help-install/ky/main::opt::o_acpi.html b/themes/openSUSE/help-install/ky/main::opt::o_acpi.html
new file mode 100644
index 0000000..7faeb79
--- /dev/null
+++ b/themes/openSUSE/help-install/ky/main::opt::o_acpi.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="o_acpi">Ядро параметрлери: acpi</a>
+</h3>
+
+<p>ACPI (Система ырастоо жетилген интерфейси жана энергияны камсыздоо башкаруучу) бул операциондук система жана BIOS арасында стандарттык ырастоо жана энергияны камсыздоо башкаруу интерфесин түзөт. Алыдын ала, <li><em>pci=noacpi</em> -- PCI токтолуштарды башкарууда ACPIди колдонбоо</li> жанык, эгерде BIOS дата версиясы 2000 жылдан кийин аныкталса. ACPI журуш-турушун башкаруу үчүн бир нече жалпы параметрлер бар: <ul><li><em>pci=noacpi</em> -- PCI токтолуштарды башкарууда ACPIди колдонбоо</li><li><em>acpi=oldboot</em> -- ACPIдин жүктөлүүгө арналган бөлүгү гана активдүү калат</li><li><em>acpi=off</em> -- ACPIди толугу менен өчүрөт</li><li><em>acpi=force</em> -- BIOS дата версиясы 2000 жылдан мурун болсо да ACPIди жандырат</li></ul></p>
+
+<p>Жаңы компьютердерде эски <a href="#o_apm">apm</a> системасын ордун алмаштырат.</p>
diff --git a/themes/openSUSE/help-install/ky/main::opt::o_apm.html b/themes/openSUSE/help-install/ky/main::opt::o_apm.html
new file mode 100644
index 0000000..9b1afc9
--- /dev/null
+++ b/themes/openSUSE/help-install/ky/main::opt::o_apm.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="o_apm">Ядро параметрлери: apm</a>
+</h3>
+
+<p>APM бул азыркы компьютерлерде колдонулуп жаткан электр камсыздоо башкаруусунун эки стратегиядан бириси. Ал негизинен лаптоп компьютерлерде дискти токтотуу функцияларында колдонулат, бирок электр булагы өчкөн учурларда компьютердин өчүүсүндө колдонулушу мүмкүн. APM BIOSтун туура иштөөсүндө байланыштуу. Эгерде BIOS бузук болсо, анда APM колдонууда чектелүү же компьютер менен иштөөгө тыю салынышы мүмкүн. Бирок аны төмөнкү параметр менен өчүрсө болот <ul><li><em>apm=off</em> -- ACPIди толугу менен өчүрөт</li></ul></p>
+
+<p>Кээ бир гана жаңы компьютердер башка <a href="#o_acpi">ACPI</a> караганда үстөмдүгү бар.</p>
diff --git a/themes/openSUSE/help-install/ky/main::opt::o_ide.html b/themes/openSUSE/help-install/ky/main::opt::o_ide.html
new file mode 100644
index 0000000..9292776
--- /dev/null
+++ b/themes/openSUSE/help-install/ky/main::opt::o_ide.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="o_ide">Ядро параметрлери: ide</a>
+</h3>
+
+<p>IDE, SCSI'ге караганда көбүнчө иштөө станцияларында колдонулат. IDE системаларда кээ бир жабдык каталарды чечүү үчүн, ядронун пераметрлерин колдонуңуз: <ul><li><em>ide=nodma</em> -- IDE дисктер үчүн DMA режимин өчүрүү</li></ul></p>
diff --git a/themes/openSUSE/help-install/ky/main::opt::o_install.html b/themes/openSUSE/help-install/ky/main::opt::o_install.html
new file mode 100644
index 0000000..0ceb19b
--- /dev/null
+++ b/themes/openSUSE/help-install/ky/main::opt::o_install.html
@@ -0,0 +1,9 @@
+<h3>
+<a name="o_install">Орнотуу параметрлери: install</a>
+</h3>
+
+<p>Алдын ала локалдык CD-ROM түзүлүштөрү орнотуу булактары болуп эсептелинет. Тармактан орнотуу үчүн <em>орнотуу</em>'ну тандаңыз. Мүмкүн болгон тармак протоколдору: <ul><li>FTP</li><li>NFS</li><li>HTTP</li></ul></p>
+
+<p>Колдонулуп жаткан синтаксис бул жөнөкөй стандарттык эле URL. Мисалы, эгерде сиздин сервериңиз 192.168.0.1 адресинде жайгашкан болсо жана сиз ошол сервердин /install каталогундан NFS прокотол аркылуу орнотууну кааласаңыз, анда орнотуу булагын төмөнкүдөй көрсөтүңүз: <ul><li>install=nfs://192.168.0.1/install</li></ul></p>
+
+<p>Тармак картасы <em>dhcp</em> жардамы менен ырасталат же сиз <a href="#network">тармак параметрлери</a> бөлүмүндө баяндалгандай өзүңуз ырастоолорду көрсөтүшүңүз керек.</p>
diff --git a/themes/openSUSE/help-install/ky/main::opt::o_splash.html b/themes/openSUSE/help-install/ky/main::opt::o_splash.html
new file mode 100644
index 0000000..df0d177
--- /dev/null
+++ b/themes/openSUSE/help-install/ky/main::opt::o_splash.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="o_splash">Ядро параметрлери: splash</a>
+</h3>
+
+<p>Экрандык заставка бул система жүктөлүп жатканда көрсөтүүлүчү сүрөт. <ul><li><em>splash=0</em> -- Экрандык заставка өчүк. Бул өтө эски мониторлор колдонулуп же кандайдыр бир ката бар болгон кезде өтө пайдалуу ыкма.</li><li><em>splash=verbose</em> -- Экрандык заставка жанык, бирок жүктөө жана ядро билдирүүлөрү көрсөтүлөт.</li><li><em>splash=silent</em> -- Экрандык заставка жанык жана эч кандай билдирүүлөр көрсөтүлбөйт. Билдирүүлөр ордуна аткарылып жаткан жүктөлүү индикатору көрсөтүлөт.</li></ul></p>
diff --git a/themes/openSUSE/help-install/ky/main::opt::o_vnc.html b/themes/openSUSE/help-install/ky/main::opt::o_vnc.html
new file mode 100644
index 0000000..0961ed0
--- /dev/null
+++ b/themes/openSUSE/help-install/ky/main::opt::o_vnc.html
@@ -0,0 +1,9 @@
+<a name="o_vncpassword"/>
+
+<h3>
+<a name="o_vnc">Орнотуу параметрлери: vnc</a>
+</h3>
+
+<p>VNC орнотууга уруксат берүү үчүн vnc жана vncpassword параметрлерин көрсөтүңүз: <ul><li><em>vnc=1 vncpassword=example</em></li></ul></p>
+
+<p>VNC сервери баштатылат жана сиз башка узактагы системалардан VNC клиенти менен YaST2'ни башкара аласыз.</p>
diff --git a/themes/openSUSE/help-install/ky/main::rescue.html b/themes/openSUSE/help-install/ky/main::rescue.html
new file mode 100644
index 0000000..3961fa1
--- /dev/null
+++ b/themes/openSUSE/help-install/ky/main::rescue.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="rescue">Аварийдик система</a>
+</h3>
+
+<p><em>Аварийдик система</em> бул RAM'да кичинекей базалык система. Анын ичинен орнотулган системага өзгөртүүлөрдү киргизсе болот. Анын ичинде төмөн-деңгээлдүү утилиталар камтылган жана ошол үчүн специалисттерге гана арналган.</p>
diff --git a/themes/openSUSE/help-install/ky/main::videomode.html b/themes/openSUSE/help-install/ky/main::videomode.html
new file mode 100644
index 0000000..e685d92
--- /dev/null
+++ b/themes/openSUSE/help-install/ky/main::videomode.html
@@ -0,0 +1,9 @@
+<h3>
+<a name="videomode">Видео режимин тандоо</a>
+</h3>
+
+<p>Сиздин видео-карточкаңыз колдогон видео режимдердин тизмесин алуу үчүн <em>@@@fkey_video@@@</em> баскычын басыңыз. Монитордун эң жакшы режими тандалган болушу мүмкүн.</p>
+
+<p>Балким сиздин мониторуңуз автоматтык түрдө аныкталбай калышы мүмкүн, анда жеке кол менен сиз каалаган режимди тандап алыңыз.</p>
+
+<p>Эгерде сизде графикалык орнотууда кыйынчылыктар пайда болсо, анда <em>тексттик режим</em> сизге жардам бериши мүмкүн.</p>
diff --git a/themes/openSUSE/help-install/ky/navi.html b/themes/openSUSE/help-install/ky/navi.html
new file mode 100644
index 0000000..907c102
--- /dev/null
+++ b/themes/openSUSE/help-install/ky/navi.html
@@ -0,0 +1 @@
+<p><a href="#foobar">FOOBAR</a> кайтуу</p>
diff --git a/themes/openSUSE/help-install/lt/main.html b/themes/openSUSE/help-install/lt/main.html
new file mode 100644
index 0000000..aeb41bd
--- /dev/null
+++ b/themes/openSUSE/help-install/lt/main.html
@@ -0,0 +1,35 @@
+<h3>
+<a name="main">Paleidyklės pagalba</a>
+</h3>
+
+<p>Jus sveikina <em>@@@product@@@</em></p>
+
+<p>Šį meniu naudokite norimos funkcijos pasirinkimui. Jei kyla problemų naršant šią pagalbos sistemą, nuspauskite <em>@@@fkey_help@@@</em> ir pasirodys pagalbos sistemos <a href="#help">aprašas</a>. Pagrindinės šio meniu funkcijos yra:</p>
+
+<p><a href="#harddisk">Paleisti iš standžiojo disko</a>: Šis pasirinkimas sistemai nieko nedaro. Jis tik paleidžia anksčiau įdiegtą operacinę sistemą.</p>
+
+<p><a href="#linux">Diegimas</a>: Ši diegimo veiksena veikia daugumoje kompiuterių. Jei sistema nulūždavo paleidimo metu ar kildavo problemų su aparatinės įrangos aptikimu, pvz., diskų valdikliais ar tinklo plokštėmis, mėginkite vieną iš sekančių diegimo parametrų.</p>
+
+<p><a href="#noacpi">Diegimas -- ACPI uždraustas</a>: Daug šiuo metu parduodamų kompiuterių turi nepilną arba ydingą ACPI. Šis pasirinkimas uždraudžia ACPI palaikymą branduolio lygyje, bet vis tiek įgalina daugybę veikimo savybių, pvz., IDE standžiųjų diskų DMA.</p>
+
+<p><a href="#nolapic">Diegimas -- Vietinis APIC uždraustas</a>: Jei įprastai įdiegti nepavyksta, galbūt taip atsitinka dėl to, kad sistemos aparatinė įranga nepalaiko vietinio APIC. Jei taip ir yra, diegimui be vietinio APIC palaikymo rinkitės šią parinktį.</p>
+
+<p><a href="#failsafe">Diegimas -- Saugios nuostatos</a>: Jei <em>Diegimas</em> nebuvo sėkmingas, mėginkite dar kartą naudodami šią parinktį.</p>
+
+<p><a href="#rescue">Avarinė sistema</a>: Šis paleidimo atvaizdis paleidžia mažą Linux sistemą operatyvioje atmintyje. Naudinga tuomet, kai sistema nepasileidžia tinkamai. Paleidę šią sistemą, prisijunkite kaip naudotojas „root“.</p>
+
+<p><a href="#firmware">Programinės aparatinės įrangos patikrinimas</a>: Paleidžia BIOS testavimo įrankį, kuris patikrina ACPI ir kitas BIOS dalis.</p>
+
+<p><a href="#memtest">Atminties testas</a>: Atminties testas naudingas ne tik tikrinant naujus atminties modulius. Tai svarbus testas didžiajai jūsų kompiuterio sistemos daliai. Taip galima aptikti aparatinės įrangos problemas.</p>
+
+<p><a href="#opt">Paleidimo parametrai</a>: Paleidimo parametrai gali visiškai pakeisti sistemos elgseną. Tai branduolio nuostatos.</p>
+
+<p><a href="#help">@@@fkey_help@@@ Pagalba</a>: Ypač priklauso nuo konteksto. Priklausomai nuo aktyvaus paleidimo lango elemento, bus rodomas atitinkamas langas. Kartu tai ir šios pagalbos sistemos pagalbos aprašas.</p>
+
+<p><a href="#keytable">@@@fkey_lang@@@</a>: Pasirinkite kalbą ir klaviatūros išdėstymą, kuriuos naudos paleidyklė.</p>
+
+<p><a href="#videomode">@@@fkey_video@@@ Vaizdo veiksena</a>: Čia pasirinkite diegimo metu naudosimą ekrano skiriamąją gebą. Jei grafinio diegimo metu kyla nesklandumų, jų išvengti gali padėti <em>tekstinė veiksena</em>.</p>
+
+<p><a href="#install_src">@@@fkey_inst@@@ Diegimo šaltinis</a>: Pasirinkite diegimo šaltinį.</p>
+
+<p><a href="#driverupdate">@@@fkey_dud@@@ Tvarkyklės atnaujinimas</a>: Norint įdiegti sistemą naujuose kompiuteriuose, gali reikti atnaujinti tvarkykles.</p>
diff --git a/themes/openSUSE/help-install/lt/main::bits.html b/themes/openSUSE/help-install/lt/main::bits.html
new file mode 100644
index 0000000..752e87e
--- /dev/null
+++ b/themes/openSUSE/help-install/lt/main::bits.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="bits">Programinės įrangos tipo pasirinkimas</a>
+</h3>
+
+<p>Galite įdiegti 32 bitų arba 64 bitų @@@product@@@ versiją.</p>
diff --git a/themes/openSUSE/help-install/lt/main::driverupdate.html b/themes/openSUSE/help-install/lt/main::driverupdate.html
new file mode 100644
index 0000000..e8cafce
--- /dev/null
+++ b/themes/openSUSE/help-install/lt/main::driverupdate.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="driverupdate">Tvarkyklės atnaujinimas</a>
+</h3>
+
+<p>Jei reikia atnaujinti tvarkykles iš diskelio ar CD, spauskite <em>@@@fkey_dud@@@</em>. Paleidyklė paprašys įdėti tvarkyklės atnaujinimui reikalingą laikmeną po to, kai bus įkeltas Linux branduolys.</p>
+
+<p>Tvarkyklės atnaujinimai paprastai būna diskelyje su diegimui reikalingomis naujomis aparatinės įrangos tvarkyklėmis arba klaidų ištaisymais.</p>
diff --git a/themes/openSUSE/help-install/lt/main::failsafe.html b/themes/openSUSE/help-install/lt/main::failsafe.html
new file mode 100644
index 0000000..7d5c1db
--- /dev/null
+++ b/themes/openSUSE/help-install/lt/main::failsafe.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="failsafe">Diegimas -- Saugios nuostatos</a>
+</h3>
+
+<p>Jei diegimas stringa arba įvyksta neištaisomų klaidų, pasirinkite <em>Diegimas -- Saugios nuostatos</em>. Ši parinktis uždraudžia IDE tvarkyklėse DMA ir energijos valdymo savybes. Taip pat žiūrėkite <a href="#o_apm">apm</a>, <a href="#o_acpi">acpi</a> ir <a href="#o_ide">ide</a> branduolio parametrus.</p>
diff --git a/themes/openSUSE/help-install/lt/main::firmware.html b/themes/openSUSE/help-install/lt/main::firmware.html
new file mode 100644
index 0000000..6c957dc
--- /dev/null
+++ b/themes/openSUSE/help-install/lt/main::firmware.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="firmware">Programinės aparatinės įrangos patikrinimas</a>
+</h3>
+
+<p>Paleidžia BIOS tikrinimo programėlę, kuri patikrina ACPI lenteles ir įvairias kitas BIOS dalis. Testo rezultatus galima įrašyti į usb diską arba per tinklą.</p>
diff --git a/themes/openSUSE/help-install/lt/main::harddisk.html b/themes/openSUSE/help-install/lt/main::harddisk.html
new file mode 100644
index 0000000..0c25e30
--- /dev/null
+++ b/themes/openSUSE/help-install/lt/main::harddisk.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="harddisk">Paleisti iš standžiojo disko</a>
+</h3>
+
+<p>Norėdami paleisti vietiniame standžiajame diske įdiegtą sistemą, rinkitės <em>Paleisti įdiegtą OS</em>. Ta sistema turi būti tinkamai įdiegta, nes paleidžiamas tik pirmajame standžiajame diske esantis MBR (pagrindinis paleidimo įrašas). Pirmojo standžiojo disko identifikatorių nurodo kompiuterio BIOS sistema.</p>
+
+<p>Naudokite, jei pamiršote pašalinti CD arba DVD iš diskasukio, bet norite kompiuterį paleisti iš standžiojo disko.</p>
diff --git a/themes/openSUSE/help-install/lt/main::help.html b/themes/openSUSE/help-install/lt/main::help.html
new file mode 100644
index 0000000..f9ed13d
--- /dev/null
+++ b/themes/openSUSE/help-install/lt/main::help.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="help">Naudojimasis pagalbos sistema</a>
+</h3>
+
+<p>Paleidyklės nuotolinė pagalba labai priklauso nuo konteksto. Ji pateikia informaciją apie meniu punktą, o keičiant sistemos paleidimo parametrus, ieško informacijos apie parinktį, ties kuria yra žymeklis.</p>
+
+<p>Judėjimo klavišai <ul><li><em>Rodyklė į viršų</em>: paryškinti ankstesnę nuorodą</li><li><em>Rodyklė į apačią</em>: paryškinti tolesnę nuorodą</li><li><em>Rodyklė į kairę</em>, <em>Naikinti</em>: grįžti į ankstesnę temą</li><li><em>Rodyklė į dešinę</em>, <em>Įvesti (Enter)</em>, <em>Tarpas</em>: sekti nuoroda</li><li><em>Psl Aukštyn (Pg Up)</em>: eiti link puslapio pradžios</li><li><em>Psl Žemyn (Pg Down)</em>: eiti link puslapio pabaigos</li><li><em>Pradžia (Home)</em>: eiti į puslapio pradžią</li><li><em>Pabaiga (End)</em>: eiti į puslapio pabaigą</li><li><em>Gr (Esc)</em>: palikti pagalbą</li></ul></p>
diff --git a/themes/openSUSE/help-install/lt/main::install_src.html b/themes/openSUSE/help-install/lt/main::install_src.html
new file mode 100644
index 0000000..1607d69
--- /dev/null
+++ b/themes/openSUSE/help-install/lt/main::install_src.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="install_src">Diegimo šaltinis</a>
+</h3>
+
+<p>Norėdami pasirinkti diegimo šaltinį, spauskite <em>@@@fkey_inst@@@</em>.</p>
+
+<p>Tai tas pats, kaip ir naudojant sistemos paleidimo parinktį <a href="#o_install">įdiegti</a>.</p>
diff --git a/themes/openSUSE/help-install/lt/main::keytable.html b/themes/openSUSE/help-install/lt/main::keytable.html
new file mode 100644
index 0000000..c3cfe8c
--- /dev/null
+++ b/themes/openSUSE/help-install/lt/main::keytable.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="keytable">Kalbos ir klaviatūros išdėstymo pasirinkimas</a>
+</h3>
+
+<p>Norėdami pakeisti kalbą ir klaviatūros išdėstymą, kuriuos naudos paleidyklė, spauskite <em>@@@fkey_lang@@@</em>.</p>
diff --git a/themes/openSUSE/help-install/lt/main::linux.html b/themes/openSUSE/help-install/lt/main::linux.html
new file mode 100644
index 0000000..17884b5
--- /dev/null
+++ b/themes/openSUSE/help-install/lt/main::linux.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="linux">Diegimas</a>
+</h3>
+
+<p>Norėdami pradėti diegti įprastu būdu, rinkitės <em>Diegimas</em>. Įkraunant naudojami nurodyti <a href="#opt">paleidimo parametrai</a>. Šis elementas aktyvuoja daugybę dažniausiai naudojamų funkcijų.</p>
diff --git a/themes/openSUSE/help-install/lt/main::memtest.html b/themes/openSUSE/help-install/lt/main::memtest.html
new file mode 100644
index 0000000..8c51533
--- /dev/null
+++ b/themes/openSUSE/help-install/lt/main::memtest.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="memtest">Atminties testas</a>
+</h3>
+
+<p><em>Atminties testas</em> leidžia atlikti svarbų sistemos aparatinės įrangos testą. Svarbiausias tikslas - aptikti RAM pažeidimus, bet taip pat patikrinamos ir kitos sistemos dalys.</p>
+
+<p>Jei nerasta klaidų, nereiškia, kad atmintis yra gera, tačiau dauguma atminties defektų bus rasti.</p>
diff --git a/themes/openSUSE/help-install/lt/main::noacpi.html b/themes/openSUSE/help-install/lt/main::noacpi.html
new file mode 100644
index 0000000..388e481
--- /dev/null
+++ b/themes/openSUSE/help-install/lt/main::noacpi.html
@@ -0,0 +1,9 @@
+<h3>
+<a name="noacpi">Diegimas -- ACPI uždraustas</a>
+</h3>
+
+<p>Šiuolaikinei aparatinei įrangai reikia ACPI (angl., Advanced Configuration and Power Interface) tam, kad valdytų pertrūkių apdorojimą. ACPI visiškai pakeičia senąją APM sistemą.</p>
+
+<p>Jei įkraunant branduolį kyla problemų, rinkitės <em>Diegimas -- ACPI uždraustas</em>. Mašinų, turinčių problemų su ACPI, požymiai: <ul><li>branduolys pakimba paleidimo metu</li><li>PCI plokštės tinkamai neaptiktos ar nepaleistos</li></ul></p>
+
+<p>Taip pat galite bandyti paleidimo parametrą <a href="#firmware">Programinės aparatinės įrangos patikrinimas</a> ir pažiūrėti į ACPI tikrinimo rezultatus.</p>
diff --git a/themes/openSUSE/help-install/lt/main::nolapic.html b/themes/openSUSE/help-install/lt/main::nolapic.html
new file mode 100644
index 0000000..fecea0a
--- /dev/null
+++ b/themes/openSUSE/help-install/lt/main::nolapic.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="nolapic">Diegimas -- Vietinis APIC uždraustas</a>
+</h3>
+
+<p>Paprastai nebūna bėdų su APIC (Advanced Programmable Interrupt Controller). Bet jei manote, kad tokių bėdų yra, šiuo parametru bandykite sistemą paleisti be vietinio APIC palaikymo.</p>
+
+<p>Nepainiokite su <a href="#noacpi">ACPI</a> (Advanced Configuration and Power Interface).</p>
diff --git a/themes/openSUSE/help-install/lt/main::opt.html b/themes/openSUSE/help-install/lt/main::opt.html
new file mode 100644
index 0000000..c31dd34
--- /dev/null
+++ b/themes/openSUSE/help-install/lt/main::opt.html
@@ -0,0 +1,9 @@
+<h3>
+<a name="opt">Paleidimo parametrai</a>
+</h3>
+
+<p>Yra du sistemos paleidimo parametrų tipai. Pirmieji parametrai susiję su diegimo sistema. Antrieji yra branduolio parametrai. Dažniausiai praverčiantys yra šie:</p>
+
+<p>a) diegimo parametrai <ul><li><a href="#o_install">įdiegti</a> -- pasirinkti diegimo šaltinį</li><li><a href="#network">tinklo parametrai</a> -- tinklo parametrai</li><li><a href="#o_vnc">vnc parametrai</a> -- parametrai diegimui per VNC</li></ul></p>
+
+<p>b) branduolio parametrai <ul><li><a href="#o_splash">splash</a> -- daro įtaką pristatymo ekrano elgsenai</li><li><a href="#o_apm">apm</a> -- perjungia maitinimo valdymą</li><li><a href="#o_acpi">acpi</a> -- sudėtingesnė konfigūracija ir energijos sąsaja</li><li><a href="#o_ide">ide</a> -- kontroliuoja IDE posistemį</li></ul></p>
diff --git a/themes/openSUSE/help-install/lt/main::opt::network.html b/themes/openSUSE/help-install/lt/main::opt::network.html
new file mode 100644
index 0000000..4ad7aab
--- /dev/null
+++ b/themes/openSUSE/help-install/lt/main::opt::network.html
@@ -0,0 +1,13 @@
+<a name="o_hostip"/>
+<a name="o_netmask"/>
+<a name="o_gateway"/>
+
+<h3>
+<a name="network">Diegimo parametrai: Tinklo parametrai</a>
+</h3>
+
+<p>Galima sukonfigūruoti tinklą. YaST2 aparatinę įrangą aptiks vėliau. Tinklo plokštės konfigūravimui užtenka pagrindinio kompiuterio IP ar tinklo kaukės. Pavyzdys: <ul><li>hostip=192.168.0.10 netmask=255.255.255.0</li></ul></p>
+
+<p>arba trumpesne forma: <ul><li>hostip=192.168.0.10/24</li></ul></p>
+
+<p>Jei nurodote <a href="#o_install">diegimas per tinklą</a>, bet nenurodote abiejų šių parametrų, diegimo sistema bando bando konfigūruoti tinklą per <em>dhcp</em>. Jei reikia nurodyti pagrindinį tinklų sietuvą naudokitės parametru <em>gateway</em>. Pavyzdys: <ul><li>gateway=192.168.0.8</li></ul></p>
diff --git a/themes/openSUSE/help-install/lt/main::opt::o_acpi.html b/themes/openSUSE/help-install/lt/main::opt::o_acpi.html
new file mode 100644
index 0000000..98b3c4b
--- /dev/null
+++ b/themes/openSUSE/help-install/lt/main::opt::o_acpi.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="o_acpi">Branduolio parametrai: acpi</a>
+</h3>
+
+<p>ACPI (Sudėtingesnė konfigūracija ir energijos sąsaja) yra standartas, apibrėžiantis energijos ir konfigūracijos tvarkymo sąsajas tarp operacinės sistemos ir BIOS. Paprastai <em>acpi</em> yra įjungta, kai aptinkamas naujesnis nei 2000 metų BIOS. Yra keli dažnai naudojami ACPI elgsenos parametrai: <ul><li><em>pci=noacpi</em> -- PCI pertraukčių nukreipimui nenaudoti ACPI </li><li><em>acpi=oldboot</em> -- lieka aktyvuotos tik su sistemos paleidimu susijusios ACPI dalys</li><li><em>acpi=off</em> -- visiškai išjungti ACPI</li><li><em>acpi=force</em> -- įjungti ACPI net jei BIOS senesnis nei 2000-ųjų metų</li></ul></p>
+
+<p>Naujausiuose kompiuteriuose ja pakeičiama senoji <a href="#o_apm">apm</a> sistema.</p>
diff --git a/themes/openSUSE/help-install/lt/main::opt::o_apm.html b/themes/openSUSE/help-install/lt/main::opt::o_apm.html
new file mode 100644
index 0000000..2f2e985
--- /dev/null
+++ b/themes/openSUSE/help-install/lt/main::opt::o_apm.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="o_apm">Branduolio parametrai: apm</a>
+</h3>
+
+<p>APM yra viena iš dviejų energijos valdymo strategijų, naudojamų dabartiniuose kompiuteriuose. Ji paprastai naudojama nešiojamuosiuose kompiuteriuose tokioms funkcijoms kaip sustabdymui į diską, tačiau taip pat gali būti atsakinga už kompiuterio išjungimą atjungus maitinimą. APM pasikliauna tinkamai veikiančia BIOS. Jei BIOS sugadinta, APM naudojamo galimybės sumažėja ar net neleidžia kompiuteriui veikti. Bet kuriuo atveju ją galima išjungti naudojant parametrą <ul><li><em>apm=off</em> -- visiškai išjungti APM</li></ul></p>
+
+<p>Kai kurie patys naujausi kompiuteriai gali išnaudoti daugiau galimybių su naujesniu <a href="#o_acpi">ACPI</a>.</p>
diff --git a/themes/openSUSE/help-install/lt/main::opt::o_ide.html b/themes/openSUSE/help-install/lt/main::opt::o_ide.html
new file mode 100644
index 0000000..71da1af
--- /dev/null
+++ b/themes/openSUSE/help-install/lt/main::opt::o_ide.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="o_ide">Branduolio parametrai: ide</a>
+</h3>
+
+<p>IDE, kitaip nei SCSI, paprastai naudojama daugumoje stalo kompiuteriais aprūpintų darbo vietų. Norėdami išvengti kai kurių aparatinės įrangos nesklandumų su IDE sistema, naudokite branduolio parametrą: <ul><li><em>ide=nodma</em> -- IDE įrenginiams išjungti DMA</li></ul></p>
diff --git a/themes/openSUSE/help-install/lt/main::opt::o_install.html b/themes/openSUSE/help-install/lt/main::opt::o_install.html
new file mode 100644
index 0000000..3a438cf
--- /dev/null
+++ b/themes/openSUSE/help-install/lt/main::opt::o_install.html
@@ -0,0 +1,9 @@
+<h3>
+<a name="o_install">Diegimo parametrai: install</a>
+</h3>
+
+<p>Numatytuoju atveju bandoma CD diegimo šaltinį. Jei norite diegti per tinklą, rinkitės parametrą <em>įdiegti</em>. Palaikomi diegimo protokolai: <ul><li>FTP</li><li>NFS</li><li>HTTP</li></ul></p>
+
+<p>Naudojama sintaksė – standartinis URL. Pavyzdžiui, jei Jūsų serveris randamas adresu 192.168.0.1, o diegti norite NFS pagrindu iš šio serverio katalogo „/diegimas“, šaltinį nurodykite taip: <ul><li>install=nfs://192.168.0.1/diegimas</li></ul></p>
+
+<p>Tinklo plokštę galima sukonfigūruoti per <em>dhcp</em>, arba galite parametrus nurodyti patys, remdamiesi pagalbos skyreliu <a href="#network">tinklo parametrai</a>.</p>
diff --git a/themes/openSUSE/help-install/lt/main::opt::o_splash.html b/themes/openSUSE/help-install/lt/main::opt::o_splash.html
new file mode 100644
index 0000000..4b109a8
--- /dev/null
+++ b/themes/openSUSE/help-install/lt/main::opt::o_splash.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="o_splash">Branduolio parametrai: splash</a>
+</h3>
+
+<p>Pristatymas - tai paveikslėlis, rodomas sistemos paleidimo metu. <ul><li><em>splash=0</em> -- Pristatymo ekranas išjungtas. Naudinga labai seniems monitoriams arba klaidų pasirodymo atveju.</li><li><em>splash=verbose</em> -- Aktyvuoja pristatymo ekraną, tačiau branduolio ir sistemos paleidimo pranešimai vis tiek bus rodomi.</li><li><em>splash=silent</em> -- Aktyvuoja pristatymą, bet ne pranešimus. Vietoj to piešiama eigos juosta.</li></ul></p>
diff --git a/themes/openSUSE/help-install/lt/main::opt::o_vnc.html b/themes/openSUSE/help-install/lt/main::opt::o_vnc.html
new file mode 100644
index 0000000..c19b552
--- /dev/null
+++ b/themes/openSUSE/help-install/lt/main::opt::o_vnc.html
@@ -0,0 +1,9 @@
+<a name="o_vncpassword"/>
+
+<h3>
+<a name="o_vnc">Diegimo parametrai: vnc</a>
+</h3>
+
+<p>Kad įgalintumėte VNC diegimą, nurodykite parametrus vnc ir vncpassword: <ul><li><em>vnc=1 vncpassword=pavyzdys</em></li></ul></p>
+
+<p>Bus paleistas VNC serveris ir galėsite kontroliuoti YaST2 per bet kokį VNC klientą iš nutolusios sistemos.</p>
diff --git a/themes/openSUSE/help-install/lt/main::rescue.html b/themes/openSUSE/help-install/lt/main::rescue.html
new file mode 100644
index 0000000..741fb7c
--- /dev/null
+++ b/themes/openSUSE/help-install/lt/main::rescue.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="rescue">Avarinė sistema</a>
+</h3>
+
+<p><em>Avarinė sistema</em> yra maža sistema, RAM disko pagrindu. Čia galima atlikti įvairius įdiegtos sistemos pakeitimus. Kadangi šioje sistemoje pateikiami žemo lygio įrankiai, ji yra skirta ekspertams.</p>
diff --git a/themes/openSUSE/help-install/lt/main::videomode.html b/themes/openSUSE/help-install/lt/main::videomode.html
new file mode 100644
index 0000000..7bcec89
--- /dev/null
+++ b/themes/openSUSE/help-install/lt/main::videomode.html
@@ -0,0 +1,9 @@
+<h3>
+<a name="videomode">Vaizdo veiksenos pasirinkimas</a>
+</h3>
+
+<p>Norėdami pamatyti plokštes, kurias palaiko jūsų vaizdo plokštė, spauskite <em>@@@fkey_video@@@</em>. Savaime jau parinkta aukščiausia veiksena, kuria gali dirbti Jūsų vaizduoklis.</p>
+
+<p>Gali būti, kad jūsų vaizduoklio nepavyko aptikti automatiškai. Tokiu atveju, norimą veikseną pasirinkite patys.</p>
+
+<p>Jei diegimo metu kyla bėdų su vaizdo plokšte, <em>tekstinė veiksena</em> gali padėti jų išvengti.</p>
diff --git a/themes/openSUSE/help-install/lt/navi.html b/themes/openSUSE/help-install/lt/navi.html
new file mode 100644
index 0000000..60f7f07
--- /dev/null
+++ b/themes/openSUSE/help-install/lt/navi.html
@@ -0,0 +1 @@
+<p>Grįžti į <a href="#foobar">FOOBAR</a></p>
diff --git a/themes/openSUSE/help-install/mr/main.html b/themes/openSUSE/help-install/mr/main.html
new file mode 100644
index 0000000..5ee559f
--- /dev/null
+++ b/themes/openSUSE/help-install/mr/main.html
@@ -0,0 +1,103 @@
+<h3>
+<a name="main">बूट लोडर मदत</a>
+</h3>
+
+<p>
+Welcome to <em>@@@product@@@</em>
+</p>
+
+<p>
+Use this menu to select the desired function. If you have
+problems navigating in this help system, press
+<em>@@@fkey_help@@@</em> to enter the <a href="#help">वर्णन</a> of the help
+system. The main functions in this menu are:
+</p>
+
+<p>
+<a href="#harddisk">हार्ड डिस्कमधून बूट करा</a>: This selection will not do
+anything to the system. It only starts a previously installed
+operating system.
+</p>
+
+<p>
+<a href="#linux">स्थापना</a>:
+This installation mode works on most machines. If you experience a
+system freeze during boot or problems with detection of your hardware
+components, such as disk controllers or network cards, try one of the
+following installation options.
+</p>
+
+<p>
+<a href="#noacpi">स्थापना--एसीपीआय अक्षम</a>: Many of the
+currently-sold computers have incomplete or faulty ACPI
+implementations. This selection disables ACPI support in the
+kernel, but still enables many performance features, like DMA for IDE
+hard disks.
+</p>
+
+<p>
+<a href="#nolapic"> स्थापना—एपीआयसी अक्षम </a>:
+If the normal installation fails, this might be due to the
+system hardware not supporting local APIC.
+If this seems to be the case, use this option to
+install without local APIC support.
+</p>
+
+<p>
+<a href="#failsafe"> स्थापना – सुरक्षित सेटिंग्स </a>: If you were not
+successful with <em>स्थापना</em>, this selection might
+solve the issue.
+</p>
+
+<p>
+<a href="#rescue">बचाव प्रणाली</a>: This boot image starts a small
+Linux system in RAM. This is useful if the system does not start properly.
+After booting this system, log in as root.
+</p>
+
+<p>
+<a href="#firmware">फर्मवेअर चाचणी</a>: Runs a BIOS test tool that validates
+ACPI and other parts of your BIOS.
+</p>
+
+<p>
+<a href="#memtest">स्मरण चाचणी </a>: Memory testing is useful for more than
+checking installation of new memory modules. It is a stress test
+for a big part of your computer system and may indicate hardware
+problems.
+</p>
+
+<p>
+<a href="#opt">बूट विकल्प</a>: The boot options may change the
+behavior of your system completely. They are settings for
+the kernel.
+</p>
+
+<p>
+<a href="#help">@@@fkey_help@@@ Help</a>: This is context sensitive. It will
+show different screens depending on the active element of the
+boot screen. There is also a description of this help system
+available.
+</p>
+
+<p>
+<a href="#keytable">@@@fkey_lang@@@</a>: Set language and keyboard mapping
+used by the boot loader.
+</p>
+
+<p>
+<a href="#videomode">@@@fkey_video@@@ Video Mode</a>: Here, choose between
+different screen resolutions while installing. If you encounter
+problems with the graphical installation, the <em>अक्षर स्थिती </em> may
+be a work-around for you.
+</p>
+
+<p>
+<a href="#install_src">@@@fkey_inst@@@ Installation Source</a>: Choose the
+installation source.
+</p>
+
+<p>
+<a href="#driverupdate">@@@fkey_dud@@@ Driver Update</a>: For very new machines, a
+driver update may be needed to install the system.
+</p>
diff --git a/themes/openSUSE/help-install/mr/main::bits.html b/themes/openSUSE/help-install/mr/main::bits.html
new file mode 100644
index 0000000..f246418
--- /dev/null
+++ b/themes/openSUSE/help-install/mr/main::bits.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="bits">सोफ्टवेयर प्रकार निवड</a>
+</h3>
+
+<p>
+You have the choice to install the 32-bit or 64-bit version of @@@product@@@.
+</p>
diff --git a/themes/openSUSE/help-install/mr/main::driverupdate.html b/themes/openSUSE/help-install/mr/main::driverupdate.html
new file mode 100644
index 0000000..5a5afad
--- /dev/null
+++ b/themes/openSUSE/help-install/mr/main::driverupdate.html
@@ -0,0 +1,14 @@
+<h3>
+<a name="driverupdate">ड्रायव्हर अद्ययावत</a>
+</h3>
+
+<p>
+If you need a driver update floppy or CD-ROM, press <em>@@@fkey_dud@@@</em>. The
+boot loader asks you to insert the driver update medium after
+loading the Linux kernel.
+</p>
+
+<p>
+A driver update is typically a floppy with new versions of hardware
+drivers or bug fixes needed during installation.
+</p>
diff --git a/themes/openSUSE/help-install/mr/main::failsafe.html b/themes/openSUSE/help-install/mr/main::failsafe.html
new file mode 100644
index 0000000..c6df55b
--- /dev/null
+++ b/themes/openSUSE/help-install/mr/main::failsafe.html
@@ -0,0 +1,11 @@
+<h3>
+<a name="failsafe"> स्थापना – सुरक्षित सेटिंग्स </a>
+</h3>
+
+<p>
+Select <em> स्थापना – सुरक्षित सेटिंग्स </em> if you encounter hangs
+while installing or irreproducible errors. This option disables DMA
+for IDE drives and all power management features.
+See also the kernel options for <a href="#o_apm">एपिएम</a>,
+<a href="#o_acpi"> एसिपिआई </a> and <a href="#o_ide">आईडिई</a>.
+</p>
diff --git a/themes/openSUSE/help-install/mr/main::firmware.html b/themes/openSUSE/help-install/mr/main::firmware.html
new file mode 100644
index 0000000..059d227
--- /dev/null
+++ b/themes/openSUSE/help-install/mr/main::firmware.html
@@ -0,0 +1,9 @@
+<h3>
+<a name="firmware">फर्मवेअर चाचणी</a>
+</h3>
+
+<p>
+Starts a BIOS checker that validates the ACPI tables
+and many other parts of your BIOS.
+Test results can be stored on usb disk or saved via network.
+</p>
diff --git a/themes/openSUSE/help-install/mr/main::harddisk.html b/themes/openSUSE/help-install/mr/main::harddisk.html
new file mode 100644
index 0000000..f732d04
--- /dev/null
+++ b/themes/openSUSE/help-install/mr/main::harddisk.html
@@ -0,0 +1,16 @@
+<h3>
+<a name="harddisk">हार्ड डिस्कमधून बूट करा</a>
+</h3>
+
+<p>
+Select <em> बूट स्थापना ओएस </em> to start the system installed on
+your local hard disk. This system must be installed properly, because
+only the MBR (Master Boot Record) on the first hard disk is started.
+The device ID of the first hard disk is provided by the BIOS of
+the computer.
+</p>
+
+<p>
+Use this if you forgot to remove the CD or DVD from your
+drive and want to start the computer from the hard disk.
+</p>
diff --git a/themes/openSUSE/help-install/mr/main::help.html b/themes/openSUSE/help-install/mr/main::help.html
new file mode 100644
index 0000000..f02a542
--- /dev/null
+++ b/themes/openSUSE/help-install/mr/main::help.html
@@ -0,0 +1,25 @@
+<h3>
+<a name="help">मदत प्रणाली वापरताना</a>
+</h3>
+
+<p>
+The boot loader online help is context sensitive. It gives information
+about the selected menu item or, if you are editing boot options,
+it tries to look up information about the option in which the cursor is
+positioned.
+</p>
+
+<p>
+Navigation Keys
+<ul>
+ <li><em>ऊर्ध्वगामी बाण</em>: highlight previous link</li>
+ <li><em>अधोगामी बाण</em>: highlight next link</li>
+ <li><em>डावा बाण</em>, <em>बेकस्पेस</em>: return to previous topic</li>
+ <li><em>उजवा बाण</em>, <em>एन्टर</em>, <em>जागा</em>: follow link</li>
+ <li><em>पान वर</em>: scroll up one page</li>
+ <li><em>पान खाली</em>: scroll down one page</li>
+ <li><em>होम</em>: go to page start</li>
+ <li><em>एन्ड</em>: go to page end</li>
+ <li><em>एस्केप</em>: leave help</li>
+</ul>
+</p>
diff --git a/themes/openSUSE/help-install/mr/main::install_src.html b/themes/openSUSE/help-install/mr/main::install_src.html
new file mode 100644
index 0000000..71d72b6
--- /dev/null
+++ b/themes/openSUSE/help-install/mr/main::install_src.html
@@ -0,0 +1,12 @@
+<h3>
+<a name="install_src"> स्थापना स्त्रोत</a>
+</h3>
+
+<p>
+Press <em>@@@fkey_inst@@@</em> to choose an installation source.
+</p>
+
+<p>
+This is the same as using the <a href="#o_install"> स्थापना </a>
+boot option.
+</p>
diff --git a/themes/openSUSE/help-install/mr/main::keytable.html b/themes/openSUSE/help-install/mr/main::keytable.html
new file mode 100644
index 0000000..9e45beb
--- /dev/null
+++ b/themes/openSUSE/help-install/mr/main::keytable.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="keytable">भाषा व किबोर्ड रचना निवड</a>
+</h3>
+
+<p>
+Press <em>@@@fkey_lang@@@</em> to change language and keyboard layout the boot loader uses.
+</p>
diff --git a/themes/openSUSE/help-install/mr/main::linux.html b/themes/openSUSE/help-install/mr/main::linux.html
new file mode 100644
index 0000000..a5599fb
--- /dev/null
+++ b/themes/openSUSE/help-install/mr/main::linux.html
@@ -0,0 +1,10 @@
+<h3>
+<a name="linux">स्थापना</a>
+</h3>
+
+<p>
+Select <em>स्थापना</em> to start the default installation. The
+<a href="#opt">बूट विकल्प</a> entered are used in the
+start-up. This item activates many features of commonly available
+hardware.
+</p>
diff --git a/themes/openSUSE/help-install/mr/main::memtest.html b/themes/openSUSE/help-install/mr/main::memtest.html
new file mode 100644
index 0000000..61dd0a1
--- /dev/null
+++ b/themes/openSUSE/help-install/mr/main::memtest.html
@@ -0,0 +1,14 @@
+<h3>
+<a name="memtest">स्मरण चाचणी </a>
+</h3>
+
+<p>
+The included <em>स्मरण चाचणी </em> provides good possibilities to
+stress test the hardware of a system. Its main purpose is to detect
+broken RAM, but it also stresses many other parts of the system.
+</p>
+
+<p>
+There is no guarantee that the memory is good if no errors are
+found, although most of memory defects will be found.
+</p>
diff --git a/themes/openSUSE/help-install/mr/main::noacpi.html b/themes/openSUSE/help-install/mr/main::noacpi.html
new file mode 100644
index 0000000..5a3f3a1
--- /dev/null
+++ b/themes/openSUSE/help-install/mr/main::noacpi.html
@@ -0,0 +1,24 @@
+<h3>
+<a name="noacpi">स्थापना--एसीपीआय अक्षम</a>
+</h3>
+
+<p>
+Current hardware usually requires ACPI (Advanced Configuration and Power Interface)
+to control the interrupt handling.
+ACPI completely replaces the old APM system.
+</p>
+
+<p>
+Select <em>स्थापना--एसीपीआय अक्षम</em> if you encounter
+problems during boot of the kernel. Known problems with machines that
+have problems with ACPI are:
+<ul>
+ <li>kernel freezes when booting</li>
+ <li>PCI Cards are not detected or initialized properly</li>
+</ul>
+</p>
+
+<p>
+You may also try the <a href="#firmware">फर्मवेअर चाचणी</a> boot option
+and look at the test results of the ACPI validation.
+</p>
diff --git a/themes/openSUSE/help-install/mr/main::nolapic.html b/themes/openSUSE/help-install/mr/main::nolapic.html
new file mode 100644
index 0000000..2538c63
--- /dev/null
+++ b/themes/openSUSE/help-install/mr/main::nolapic.html
@@ -0,0 +1,14 @@
+<h3>
+<a name="nolapic"> स्थापना—एपीआयसी अक्षम </a>
+</h3>
+
+<p>
+Normally there are no problems with the APIC (Advanced Programmable Interrupt
+Controller). But if you seem to have some, try this option to boot
+without local APIC support.
+</p>
+
+<p>
+Please don't confuse this with <a href="#noacpi">एसिपिआई</a>
+(Advanced Configuration and Power Interface).
+</p>
diff --git a/themes/openSUSE/help-install/mr/main::opt.html b/themes/openSUSE/help-install/mr/main::opt.html
new file mode 100644
index 0000000..74c4ee8
--- /dev/null
+++ b/themes/openSUSE/help-install/mr/main::opt.html
@@ -0,0 +1,28 @@
+<h3>
+<a name="opt">बूट विकल्प</a>
+</h3>
+
+<p>
+There are two types of boot options available. First, there are
+options that affect the installer. Second, there are kernel
+options. Some of the more common options are:
+</p>
+
+<p>
+a) installer options
+<ul>
+ <li><a href="#o_install"> स्थापना </a> -- select an installation source</li>
+ <li><a href="#network">नेटवर्क विकल्प </a> -- the network options</li>
+ <li><a href="#o_vnc"> विएनसि विकल्प </a> -- options for installation via VNC</li>
+</ul>
+</p>
+
+<p>
+b) kernel options
+<ul>
+ <li><a href="#o_splash">स्प्लेश</a> -- influence the behavior of the splash screen</li>
+ <li><a href="#o_apm">एपिएम</a> -- toggle power management</li>
+ <li><a href="#o_acpi"> एसिपिआई </a> -- advanced configuration and power interface</li>
+ <li><a href="#o_ide">आईडिई</a> -- control the IDE subsystem</li>
+</ul>
+</p>
diff --git a/themes/openSUSE/help-install/mr/main::opt::network.html b/themes/openSUSE/help-install/mr/main::opt::network.html
new file mode 100644
index 0000000..f9d479b
--- /dev/null
+++ b/themes/openSUSE/help-install/mr/main::opt::network.html
@@ -0,0 +1,35 @@
+<a name="o_hostip"/>
+<a name="o_netmask"/>
+<a name="o_gateway"/>
+
+<h3>
+<a name="network"> स्थापनेचे विकल्प : नेटवर्क विकल्प </a>
+</h3>
+
+<p>
+It is possible to configure the network interface right now. The
+hardware will be detected later by YaST2. The minimum set of options
+to configure your network card consists of host IP and netmask. For
+example:
+<ul>
+ <li>होस्टाआइपि=१९२.१६८.०.१० नेट्मास्क्= २५५.२५५.२५५.०</li>
+</ul>
+</p>
+
+<p>
+or in a shorter form:
+<ul>
+ <li> होस्टाआइपि=१९२.१६८.०.१० </li>
+</ul>
+</p>
+
+<p>
+If you specified a <a href="#o_install"> नेटवर्क बेस्ड स्थापना </a> and do
+not specify both of these options, the installer tries to configure
+the network interface with <em>डिएचसिपि</em>. If you need a default
+gateway, specify this with the option <em>गेटवे</em>. For
+example:
+<ul>
+ <li>गेटवे= १९२.१६८.०.१० </li>
+</ul>
+</p>
diff --git a/themes/openSUSE/help-install/mr/main::opt::o_acpi.html b/themes/openSUSE/help-install/mr/main::opt::o_acpi.html
new file mode 100644
index 0000000..2e29a39
--- /dev/null
+++ b/themes/openSUSE/help-install/mr/main::opt::o_acpi.html
@@ -0,0 +1,23 @@
+<h3>
+<a name="o_acpi">केर्नल विकल्प = एसिपिआइ</a>
+</h3>
+
+<p>
+ACPI (Advanced Configuration and Power Interface) is a
+standard that defines power and configuration management interfaces
+between an operating system and the BIOS. By default, <em> एसिपिआई </em> is
+switched on when a BIOS is detected that is newer than from year
+2000. There are several commonly
+used parameters to control the behavior of ACPI:
+<ul>
+ <li><em>पिसिआइ=नो एसिपिआइ </em> -- do not use ACPI to route PCI interrupts</li>
+ <li><em> एसिपिआइ = ओल्ड बूट</em> -- only the parts of ACPI that are relevant for booting remain activated</li>
+ <li><em> एसिपिआइ = ओफ</em> -- switch off ACPI completely</li>
+ <li><em> एसिपिआइ =फोर्स</em> -- switch on ACPI even if your BIOS is dated before 2000</li>
+</ul>
+</p>
+
+<p>
+Especially on new computers, it replaces the old
+<a href="#o_apm">एपिएम</a> system.
+</p>
diff --git a/themes/openSUSE/help-install/mr/main::opt::o_apm.html b/themes/openSUSE/help-install/mr/main::opt::o_apm.html
new file mode 100644
index 0000000..68409e7
--- /dev/null
+++ b/themes/openSUSE/help-install/mr/main::opt::o_apm.html
@@ -0,0 +1,21 @@
+<h3>
+<a name="o_apm"> केर्नल विकल्प: एपिएम</a>
+</h3>
+
+<p>
+APM is one of the two power management strategies used on current
+computers. It is mainly used with laptops for functions like suspend
+to disk, but it may also be responsible for switching off the
+computer after power down. APM relies on a correct working BIOS. If
+the BIOS is broken, APM may have only limited use or even prevent the
+computer from working. Therefore, it may be switched off with the
+parameter
+<ul>
+ <li><em> एपिएम = ओफ</em> -- switch off APM completely</li>
+</ul>
+</p>
+
+<p>
+Some very new computers may take more advantage from the newer
+<a href="#o_acpi">एसिपिआई</a>.
+</p>
diff --git a/themes/openSUSE/help-install/mr/main::opt::o_ide.html b/themes/openSUSE/help-install/mr/main::opt::o_ide.html
new file mode 100644
index 0000000..d5234a6
--- /dev/null
+++ b/themes/openSUSE/help-install/mr/main::opt::o_ide.html
@@ -0,0 +1,12 @@
+<h3>
+<a name="o_ide"> केर्नल विकल्प = आइडिई </a>
+</h3>
+
+<p>
+IDE is, unlike SCSI, commonly used in most desktop workstations.
+To circumvent some hardware problems that occur with IDE systems, use the
+kernel parameter:
+<ul>
+ <li><em> आइडिई नोडिएमए</em> -- switch off DMA for IDE drives</li>
+</ul>
+</p>
diff --git a/themes/openSUSE/help-install/mr/main::opt::o_install.html b/themes/openSUSE/help-install/mr/main::opt::o_install.html
new file mode 100644
index 0000000..dc1aae8
--- /dev/null
+++ b/themes/openSUSE/help-install/mr/main::opt::o_install.html
@@ -0,0 +1,30 @@
+<h3>
+<a name="o_install">स्थापनेचे विकल्प: स्थापना </a>
+</h3>
+
+<p>
+By default, the local CD-ROMs are searched for the installation source.
+For a network install, select the
+<em> स्थापना </em> option. Possible installation protocols are
+<ul>
+ <li>FTP</li>
+ <li>NFS</li>
+ <li>HTTP</li>
+</ul>
+</p>
+
+<p>
+The syntax to use is just like standard URLs. For example,
+if your server is found at 192.168.0.1 and you want to do an NFS-based
+install from the directory /install on this server, specify
+the source as follows:
+<ul>
+ <li> स्थापना =एनएफएस://१९२.१६८.०.१/ स्थापना </li>
+</ul>
+</p>
+
+<p>
+The network card will either be configured with <em>डिएचसिपि</em> or you
+must specify the parameters yourself as described in the
+<a href="#network">नेटवर्क विकल्प </a>.
+</p>
diff --git a/themes/openSUSE/help-install/mr/main::opt::o_splash.html b/themes/openSUSE/help-install/mr/main::opt::o_splash.html
new file mode 100644
index 0000000..af2fdc3
--- /dev/null
+++ b/themes/openSUSE/help-install/mr/main::opt::o_splash.html
@@ -0,0 +1,12 @@
+<h3>
+<a name="o_splash">केर्नल विकल्प: स्प्लेश </a>
+</h3>
+
+<p>
+The splash screen is the picture shown during system start-up.
+<ul>
+ <li><em>स्प्लेश=०</em> -- The splash screen is switched off. This may be useful with very old monitors or if some error occurs.</li>
+ <li><em>स्प्लेश = वर्बोस</em> -- Activates splash, kernel and boot messages are still shown.</li>
+ <li><em> स्प्लेश= शांत</em> -- Activates splash, but no messages. Instead a progress bar is drawn.</li>
+</ul>
+</p>
diff --git a/themes/openSUSE/help-install/mr/main::opt::o_vnc.html b/themes/openSUSE/help-install/mr/main::opt::o_vnc.html
new file mode 100644
index 0000000..3b0cdee
--- /dev/null
+++ b/themes/openSUSE/help-install/mr/main::opt::o_vnc.html
@@ -0,0 +1,18 @@
+<a name="o_vncpassword"/>
+
+<h3>
+<a name="o_vnc"> स्थापनेचे विकल्प : विएनसि</a>
+</h3>
+
+<p>
+To enable the VNC installation, specify the
+parameters vnc and vncpassword:
+<ul>
+ <li><em> विएनसि=१ विएनसि पासवर्ड=उदाहरण</em></li>
+</ul>
+</p>
+
+<p>
+The VNC server will be started and you may control YaST2 over any VNC
+client from a remote system.
+</p>
diff --git a/themes/openSUSE/help-install/mr/main::rescue.html b/themes/openSUSE/help-install/mr/main::rescue.html
new file mode 100644
index 0000000..8cf636a
--- /dev/null
+++ b/themes/openSUSE/help-install/mr/main::rescue.html
@@ -0,0 +1,10 @@
+<h3>
+<a name="rescue">बचाव प्रणाली</a>
+</h3>
+
+<p>
+The <em>बचाव प्रणाली</em> is a small RAM disk base system. From there,
+it is possible to make all kinds of changes to an installed system. Because
+only low-level tools are available in this system, it is intended for
+experts.
+</p>
diff --git a/themes/openSUSE/help-install/mr/main::videomode.html b/themes/openSUSE/help-install/mr/main::videomode.html
new file mode 100644
index 0000000..a04f889
--- /dev/null
+++ b/themes/openSUSE/help-install/mr/main::videomode.html
@@ -0,0 +1,18 @@
+<h3>
+<a name="videomode"> व्हिडिओ स्थिती निवड</a>
+</h3>
+
+<p>
+Press <em>@@@fkey_video@@@</em> to get the list of video modes your graphics card
+supports. The highest mode your monitor can display is preselected.
+</p>
+
+<p>
+It is possible that your monitor cannot be detected automatically. In that
+case, select your preferred mode manually.
+</p>
+
+<p>
+If your system has problems with the graphics card during the
+installation, the <em>अक्षर स्थिती </em> may be a usable work-around.
+</p>
diff --git a/themes/openSUSE/help-install/mr/navi.html b/themes/openSUSE/help-install/mr/navi.html
new file mode 100644
index 0000000..fc318c7
--- /dev/null
+++ b/themes/openSUSE/help-install/mr/navi.html
@@ -0,0 +1 @@
+<p>परत जा<a href="#foobar">FOOBAR</a></p>
diff --git a/themes/openSUSE/help-install/nb/main.html b/themes/openSUSE/help-install/nb/main.html
new file mode 100644
index 0000000..62ca05c
--- /dev/null
+++ b/themes/openSUSE/help-install/nb/main.html
@@ -0,0 +1,35 @@
+<h3>
+<a name="main">Hjelp for oppstartslaster</a>
+</h3>
+
+<p>Velkommen til <em>@@@product@@@</em></p>
+
+<p>Bruk denne menyen for å velge ønsket funksjon. Hvis du har problemer med å finne frem i hjelpesystemet, trykk <em>@@@fkey_help@@@</em> for å vise <a href="#help">beskrivelse</a> for hjelpesystemet. Hovedfunksjonene i denne menyen er:</p>
+
+<p><a href="#harddisk">Start fra harddisk</a>: Dette valget gjør ingenting med systemet. Det starter bare et tidligere installert operativsystem.</p>
+
+<p><a href="#linux">Installasjon</a>: Denne installasjonsmodusen fungerer for de fleste datamaskiner. Hvis systemet fryser under oppstart eller hvis det oppstår problemer med registrering av maskinvarekomponenter, f.eks. diskkontrollere eller nettverkskort, kan du forsøke ett av følgende installasjonsvalg.</p>
+
+<p><a href="#noacpi">Installasjon--ACPI deaktivert</a>: Mange datamaskiner har ufullstendige eller defekte ACPI-funksjoner. Dette valget deaktiverer ACPI-støtte i kjernen, men mange andre ytelsesfunksjoner vil fremdeles være aktivert, som DMA for IDE-harddisker.</p>
+
+<p><a href="#nolapic">Installasjon--Lokal APIC deaktivert</a>: Hvis den vanlige installasjonen mislykkes, kan det skyldes at maskinvaren ikke støtter lokal APIC. Hvis dette ser ut til å være tilfellet, bruker du dette alternativet til å installere uten lokal APIC-støtte.</p>
+
+<p><a href="#failsafe">Installasjon--sikker modus</a>: Hvis <em>Installasjon</em> mislyktes, kan dette valget løse problemet.</p>
+
+<p><a href="#rescue">Redningssystem</a>: Dette oppstartsdiskbildet starter et lite Linux-system fra minnet. Dette er nyttig hvis systemet ikke starter som det skal. Logg inn som rot etter at systemet har startet opp.</p>
+
+<p><a href="#firmware">Fastvarekontroll</a>: Kjører et BIOS-testverktøy som kontrollerer APCI og andre deler av BIOS.</p>
+
+<p><a href="#memtest">Minnekontroll</a>: Kontroll av minnet er nyttig i flere situasjoner enn testing av nye minnebrikker. Kontrollen er en belastningstest for store deler av systemet, og kan påvise forskjellige maskinvarefeil.</p>
+
+<p><a href="#opt">Oppstartsalternativer</a>: Oppstartsvalgene kan endre systemets funksjon helt. Det er innstillinger som påvirker kjernen.</p>
+
+<p><a href="#help">@@@fkey_help@@@ Hjelp</a>: Hjelpen er kontekstsensitiv. Ulike skjermbilder vil vises, avhengig av det aktive elementet på oppstartsskjermen. Det finnes også en beskrivelse av dette Hjelp-systemet.</p>
+
+<p><a href="#keytable">@@@fkey_lang@@@</a>: Angi språk og tastaturoppsett for oppstartslasteren.</p>
+
+<p><a href="#videomode">@@@fkey_video@@@ Skjermmodus</a>: Her kan du velge mellom ulike skjermoppløsninger for installasjonen. Hvis det oppstår problemer med den grafiske installasjonen, kan <em>tekstmodus</em> være en løsning.</p>
+
+<p><a href="#install_src">@@@fkey_inst@@@ Installasjonskilde</a>: Velg installasjonskilden.</p>
+
+<p><a href="#driverupdate">@@@fkey_dud@@@ Driveroppdatering</a>: På helt nye maskiner kan det hende at du trenger en driveroppdatering for å installere systemet.</p>
diff --git a/themes/openSUSE/help-install/nb/main::bits.html b/themes/openSUSE/help-install/nb/main::bits.html
new file mode 100644
index 0000000..9949469
--- /dev/null
+++ b/themes/openSUSE/help-install/nb/main::bits.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="bits">Valg av programvaretype</a>
+</h3>
+
+<p>Du kan velge å installere en 32-bit- eller 64-bit-versjon av @@@product@@@.</p>
diff --git a/themes/openSUSE/help-install/nb/main::driverupdate.html b/themes/openSUSE/help-install/nb/main::driverupdate.html
new file mode 100644
index 0000000..ff40630
--- /dev/null
+++ b/themes/openSUSE/help-install/nb/main::driverupdate.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="driverupdate">Driveroppdatering</a>
+</h3>
+
+<p>Trykk <em>@@@fkey_dud@@@</em> hvis du trenger en diskett eller en CD-ROM med en driveroppdatering. Oppstartslasteren vil be deg om å sette inn mediet med driveroppdateringen etter at Linux-kjernen er lastet.</p>
+
+<p>En driveroppdatering er vanligvis en diskett med nye versjoner av maskinvaredrivere eller oppdateringer som kreves for installasjonen.</p>
diff --git a/themes/openSUSE/help-install/nb/main::failsafe.html b/themes/openSUSE/help-install/nb/main::failsafe.html
new file mode 100644
index 0000000..59644c7
--- /dev/null
+++ b/themes/openSUSE/help-install/nb/main::failsafe.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="failsafe">Installasjon--sikker modus</a>
+</h3>
+
+<p>Velg<em>Installasjon--sikker modus</em> hvis systemet henger under installasjonen eller ved uforklarlige feil. Dette valget deaktiverer DMA for IDE-disker og alle strømstyringsfunksjoner. Se også kjernevalgene for <a href="#o_apm">apm</a>, <a href="#o_acpi">acpi</a> og <a href="#o_ide">ide</a>.</p>
diff --git a/themes/openSUSE/help-install/nb/main::firmware.html b/themes/openSUSE/help-install/nb/main::firmware.html
new file mode 100644
index 0000000..d2955c1
--- /dev/null
+++ b/themes/openSUSE/help-install/nb/main::firmware.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="firmware">Fastvarekontroll</a>
+</h3>
+
+<p>Starter en BIOS-testverktøy som bekrefter gyldigheten av ACPI-tabellene og mange andre deler av BIOS. Resultatene kan lagres på en USB-enhet eller via på nettverket.</p>
diff --git a/themes/openSUSE/help-install/nb/main::harddisk.html b/themes/openSUSE/help-install/nb/main::harddisk.html
new file mode 100644
index 0000000..ebb11e8
--- /dev/null
+++ b/themes/openSUSE/help-install/nb/main::harddisk.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="harddisk">Start fra harddisk</a>
+</h3>
+
+<p>Velg<em>Start installert OS</em> for å starte systemet som er installert på den lokale harddisken. Dette systemet må være riktig installert fordi bare MBR (Master Boot Record) på første harddisk vil bli startet. Enhets-ID-en for første harddisk hentes fra datamaskinens BIOS.</p>
+
+<p>Bruk dette valget hvis du glemte å fjerne CD-en eller DVD-en fra stasjonen og vil starte datamaskinen fra harddisken.</p>
diff --git a/themes/openSUSE/help-install/nb/main::help.html b/themes/openSUSE/help-install/nb/main::help.html
new file mode 100644
index 0000000..de77a75
--- /dev/null
+++ b/themes/openSUSE/help-install/nb/main::help.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="help">Bruke Hjelp-systemet</a>
+</h3>
+
+<p>Den elektroniske hjelpen for oppstartslasteren er kontekstsensitiv. Den gir informasjon om det valgte menyelementet eller forsøker å finne informasjon om valget som markøren er plassert på, når du redigerer oppstartsvalg.</p>
+
+<p>Navigasjonstaster <ul><li><em>Pil opp</em>: aktiver forrige lenke</li><li><em>Pil ned</em>: aktiver neste lenke</li><li><em>Pil venstre</em>, <em>Backspace</em>: tilbake til forrige emne</li><li><em>Pil høyre</em>, <em>Enter</em>, <em>Mellomrom</em>: følg lenken</li><li><em>Page Up</em>: bla én side oppover</li><li><em>Page Down</em>: bla én side nedover</li><li><em>Home</em>: til begynnelsen av siden</li><li><em>End</em>: til slutten av siden</li><li><em>Esc</em>: avslutt hjelpen</li></ul></p>
diff --git a/themes/openSUSE/help-install/nb/main::install_src.html b/themes/openSUSE/help-install/nb/main::install_src.html
new file mode 100644
index 0000000..966ba3f
--- /dev/null
+++ b/themes/openSUSE/help-install/nb/main::install_src.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="install_src">Installasjonskilde</a>
+</h3>
+
+<p>Trykk <em>@@@fkey_inst@@@</em> for å velge en installasjonskilde.</p>
+
+<p>Dette er det samme som å bruke oppstartsvalget <a href="#o_install">installer</a>.</p>
diff --git a/themes/openSUSE/help-install/nb/main::keytable.html b/themes/openSUSE/help-install/nb/main::keytable.html
new file mode 100644
index 0000000..4e6b318
--- /dev/null
+++ b/themes/openSUSE/help-install/nb/main::keytable.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="keytable">Valg av språk og tastaturoppsett</a>
+</h3>
+
+<p>Trykk på <em>@@@fkey_lang@@@</em> for å endre språket og tastaturoppsettet for oppstartslasteren.</p>
diff --git a/themes/openSUSE/help-install/nb/main::linux.html b/themes/openSUSE/help-install/nb/main::linux.html
new file mode 100644
index 0000000..d07f8b1
--- /dev/null
+++ b/themes/openSUSE/help-install/nb/main::linux.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="linux">Installasjon</a>
+</h3>
+
+<p>Velg<em>Installasjon</em> for å starte en standardinstallasjon. Angitt <a href="#opt">oppstartsalternativer</a> benyttes ved oppstart. Dette elementet aktiverer mange funksjoner i vanlig tilgjengelig maskinvare.</p>
diff --git a/themes/openSUSE/help-install/nb/main::memtest.html b/themes/openSUSE/help-install/nb/main::memtest.html
new file mode 100644
index 0000000..36f6fca
--- /dev/null
+++ b/themes/openSUSE/help-install/nb/main::memtest.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="memtest">Minnekontroll</a>
+</h3>
+
+<p><em>Minnekontroll</em> gir gode muligheter til å kontrollere maskinvaren på systemet. Hovedformålet er å oppdage dårlige minnebrikker, men andre deler av systemet blir også kontrollert.</p>
+
+<p>Det er ikke helt sikkert at minnet er feilfritt dersom ingen feil blir funnet, selv om de fleste minnefeil vil bli funnet.</p>
diff --git a/themes/openSUSE/help-install/nb/main::noacpi.html b/themes/openSUSE/help-install/nb/main::noacpi.html
new file mode 100644
index 0000000..484d2de
--- /dev/null
+++ b/themes/openSUSE/help-install/nb/main::noacpi.html
@@ -0,0 +1,9 @@
+<h3>
+<a name="noacpi">Installasjon--ACPI deaktivert</a>
+</h3>
+
+<p>Nye datamaskiner krever iblant ACPI (Advanced Configuration and Power Interface) for å styre avbruddshandlingen. ACPI erstatter det tidligere APM-systemet.</p>
+
+<p>Velg <em>Installasjon--ACPI deaktivert</em> hvis det oppstår problemer under oppstart av kjernen. Vanlige problemer på maskiner med ACPI-feil er: <ul><li>kjernen fryser under oppstart</li><li>PCI-kort er ikke registrert eller riktig initialisert</li></ul></p>
+
+<p>Du kan også forsøke oppstartsvalget <a href="#firmware">Fastvarekontroll</a> og kontrollere testresultatene etter ACPI-kontrollen.</p>
diff --git a/themes/openSUSE/help-install/nb/main::nolapic.html b/themes/openSUSE/help-install/nb/main::nolapic.html
new file mode 100644
index 0000000..4acecb1
--- /dev/null
+++ b/themes/openSUSE/help-install/nb/main::nolapic.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="nolapic">Installasjon--Lokal APIC deaktivert</a>
+</h3>
+
+<p>Vanligvis er det ingen problemer med APIC (Advanced Programmable Interrupt Controller). Hvis du likevel skulle støte på noen, forsøk dette valget for å starte uten lokal APIC-støtte.</p>
+
+<p>Ikke bland dette sammen med <a href="#noacpi">ACPI</a> (advanced configuration and power interface).</p>
diff --git a/themes/openSUSE/help-install/nb/main::opt.html b/themes/openSUSE/help-install/nb/main::opt.html
new file mode 100644
index 0000000..56f6ed8
--- /dev/null
+++ b/themes/openSUSE/help-install/nb/main::opt.html
@@ -0,0 +1,9 @@
+<h3>
+<a name="opt">Oppstartsalternativer</a>
+</h3>
+
+<p>Det er to tilgjengelige typer oppstartsvalg, valg for installasjonsprogrammet og valg for kjernen. Noen av de vanligste valgene er:</p>
+
+<p>a) valg for installasjonsprogrammet <ul><li><a href="#o_install">installer</a> -- velg en installasjonskilde</li><li><a href="#network">nettverksvalg</a> -- nettverksvalg</li><li><a href="#o_vnc">vnc-valg</a> -- valg for installasjon via VNC</li></ul></p>
+
+<p>b) valg for kjernen <ul><li><a href="#o_splash">skjerm</a> -- påvirker oppstartsbildet</li><li><a href="#o_apm">apm</a> -- slå strømstyring av og på</li><li><a href="#o_acpi">acpi</a> -- avansert oppsett og strømstyringsvalg</li><li><a href="#o_ide">ide</a> -- kontroller IDE-systemet</li></ul></p>
diff --git a/themes/openSUSE/help-install/nb/main::opt::network.html b/themes/openSUSE/help-install/nb/main::opt::network.html
new file mode 100644
index 0000000..a4592d2
--- /dev/null
+++ b/themes/openSUSE/help-install/nb/main::opt::network.html
@@ -0,0 +1,13 @@
+<a name="o_hostip"/>
+<a name="o_netmask"/>
+<a name="o_gateway"/>
+
+<h3>
+<a name="network">Installasjonsvalg: nettverksvalg</a>
+</h3>
+
+<p>Du kan sette opp nettverksgrensesnittet allerede nå. Maskinvaren vil ble registrert senere av YaST2. Du må minst angi IP-adressen og nettverksmasken for å konfigurere et nettverkskort. For eksempel:<ul><li>hostip=192.168.0.10 netmask=255.255.255.0</li></ul></p>
+
+<p>eller i et kortere format: <ul><li>hostip=192.168.0.10/24</li></ul></p>
+
+<p>Hvis du spesifiserte en <a href="#o_install">nettverksbasert installasjon</a> uten å definere disse to valgene, vil installasjonsprogrammet forsøke å konfigurere nettverksgrensesnittet med <em>dhcp</em>. Hvis du trenger en standard systemport, angir du dette med valget <em>systemport</em>. For eksempel: <ul><li>gateway=192.168.0.8</li></ul></p>
diff --git a/themes/openSUSE/help-install/nb/main::opt::o_acpi.html b/themes/openSUSE/help-install/nb/main::opt::o_acpi.html
new file mode 100644
index 0000000..3d28f91
--- /dev/null
+++ b/themes/openSUSE/help-install/nb/main::opt::o_acpi.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="o_acpi">Kjernevalg: acpi</a>
+</h3>
+
+<p>ACPI (Advanced Configuration and Power Interface) er en standard som definerer kommunikasjonen med hensyn til strømstyring og konfigurasjon mellom et operativsystem og BIOS. Som standard aktiveres <em>acpi</em> dersom BIOS er nyere enn fra år 2000. Det finnes flere vanlige parametere som som styrer ACPI-funksjonen:<ul><li><em>pci=noacpi</em> -- ikke bruk ACPI for å rute PCI-avbrudd</li><li><em>acpi=oldboot</em> -- bare de delene av ACPI som er relevant for oppstart, skal være aktivert</li><li><em>acpi=off</em> -- deaktiver ACPI helt</li><li><em>acpi=force</em> -- aktiver ACPI selv om BIOS er eldre enn fra 2000</li></ul></p>
+
+<p>Spesielt på nye datamaskiner, erstatter dette det tidligere <a href="#o_apm">apm</a>-systemet.</p>
diff --git a/themes/openSUSE/help-install/nb/main::opt::o_apm.html b/themes/openSUSE/help-install/nb/main::opt::o_apm.html
new file mode 100644
index 0000000..e4277c1
--- /dev/null
+++ b/themes/openSUSE/help-install/nb/main::opt::o_apm.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="o_apm">Kjernevalg: apm</a>
+</h3>
+
+<p>APM er én av to strømstyringsstrategier som brukes på moderne datamaskiner. APM brukes hovedsakelig på bærbare maskiner for funksjoner som diskdvale, men kan også slå av maskinen når strømmen brytes. APM krever at BIOS fungerer riktig. Hvis BIOS er skadet, har APM begrenset nytte, og kan til og med føre til at datamaskinen ikke fungerer. Derfor kan APM deaktiveres med parameteren <ul><li><em>apm=off</em> -- deaktiver APM helt</li></ul></p>
+
+<p>For enkelte helt nye datamaskiner kan det være en fordel å bruke den nyere <a href="#o_acpi">ACPI</a>.</p>
diff --git a/themes/openSUSE/help-install/nb/main::opt::o_ide.html b/themes/openSUSE/help-install/nb/main::opt::o_ide.html
new file mode 100644
index 0000000..02850f0
--- /dev/null
+++ b/themes/openSUSE/help-install/nb/main::opt::o_ide.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="o_ide">Kjernevalg: ide</a>
+</h3>
+
+<p>IDE benyttes, i motsetning til SCSI, for de fleste skrivebordsmaskiner. For å unngå enkelte maskinvareproblemer som forekommer med IDE-systemer, bruk kjerneparameteren: <ul><li><em>ide=nodma</em> -- deaktiver DMA for IDE-disker</li></ul></p>
diff --git a/themes/openSUSE/help-install/nb/main::opt::o_install.html b/themes/openSUSE/help-install/nb/main::opt::o_install.html
new file mode 100644
index 0000000..f34c0a2
--- /dev/null
+++ b/themes/openSUSE/help-install/nb/main::opt::o_install.html
@@ -0,0 +1,9 @@
+<h3>
+<a name="o_install">Installasjonsvalg: installer</a>
+</h3>
+
+<p>Som standard søker installasjonsprogrammet etter en kilde på lokale CD-ROM-stasjoner. For en nettverksinstallasjon, velg <em>installer</em>. Mulige installasjonsprotokoller er <ul><li>FTP</li><li>NFS</li><li>HTTP</li></ul></p>
+
+<p>Syntaksen er den samme som i vanlige nettadresser. Hvis for eksempel serveren befinner seg på 192.168.0.1 og du vil utføre en NFS-basert installasjon fra katalogen /install på denne serveren, angir du følgende kilde: <ul><li>install=nfs://192.168.0.1/install</li></ul></p>
+
+<p>Nettverkskortet vil enten bli konfigurert med <em>dhcp</em>, eller du må definere parametrene selv, som beskrevet i <a href="#network">nettverksvalg</a>.</p>
diff --git a/themes/openSUSE/help-install/nb/main::opt::o_splash.html b/themes/openSUSE/help-install/nb/main::opt::o_splash.html
new file mode 100644
index 0000000..68786d5
--- /dev/null
+++ b/themes/openSUSE/help-install/nb/main::opt::o_splash.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="o_splash">Kjernevalg: splash</a>
+</h3>
+
+<p>Oppstartsskjermen er bildet som vises når systemet starter opp. <ul><li><em>splash=0</em> -- Oppstartsbildet slås av. Dette kan være nyttig for svært gamle skjermer, eller hvis det oppstår feil.</li><li><em>splash=verbose</em> -- Aktiverer et oppstartsbilde, men kjerne- og oppstartsmeldinger vises likevel.</li><li><em>splash=silent</em> -- Aktiverer et oppstartsbilde, men ingen meldinger. En forløpsindikator vises i stedet.</li></ul></p>
diff --git a/themes/openSUSE/help-install/nb/main::opt::o_vnc.html b/themes/openSUSE/help-install/nb/main::opt::o_vnc.html
new file mode 100644
index 0000000..133e600
--- /dev/null
+++ b/themes/openSUSE/help-install/nb/main::opt::o_vnc.html
@@ -0,0 +1,9 @@
+<a name="o_vncpassword"/>
+
+<h3>
+<a name="o_vnc">Installasjonsvalg: vnc</a>
+</h3>
+
+<p>For å aktivere VNC-installasjon, definer parametrene vnc og vncpassword: <ul><li><em>vnc=1 vncpassword=eksempel</em></li></ul></p>
+
+<p>VNC-serveren vil bli startet, og du kan styre YaST2 via en VNC-klient fra et eksternt system.</p>
diff --git a/themes/openSUSE/help-install/nb/main::rescue.html b/themes/openSUSE/help-install/nb/main::rescue.html
new file mode 100644
index 0000000..f50e146
--- /dev/null
+++ b/themes/openSUSE/help-install/nb/main::rescue.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="rescue">Redningssystem</a>
+</h3>
+
+<p><em>Redningssystem</em> er et lite grunnsystem som kjøres direkte fra minnet. Fra dette er det mulig å utføre alle slags endringer på et installert system. Dette systemet inneholder bare grunnleggende verktøy, og er beregnet på avanserte brukere.</p>
diff --git a/themes/openSUSE/help-install/nb/main::videomode.html b/themes/openSUSE/help-install/nb/main::videomode.html
new file mode 100644
index 0000000..9289bd1
--- /dev/null
+++ b/themes/openSUSE/help-install/nb/main::videomode.html
@@ -0,0 +1,9 @@
+<h3>
+<a name="videomode">Valg av skjermmodus</a>
+</h3>
+
+<p>Trykk <em>@@@fkey_video@@@</em> for å få opp en liste over skjermmoduser som støttes av grafikkortet. Den høyeste modusen som støttes av skjermen, er forhåndsvalgt.</p>
+
+<p>Det kan hende at skjermen ikke oppdages automatisk. Velg i så fall ønsket modus manuelt.</p>
+
+<p>Hvis systemet har problemer med grafikkortet under installasjonen, kan det hende at <em>tekstmodus</em> bruker en reserveløsning.</p>
diff --git a/themes/openSUSE/help-install/nb/navi.html b/themes/openSUSE/help-install/nb/navi.html
new file mode 100644
index 0000000..224e300
--- /dev/null
+++ b/themes/openSUSE/help-install/nb/navi.html
@@ -0,0 +1 @@
+<p>Tilbake til <a href="#foobar">FOOBAR</a></p>
diff --git a/themes/openSUSE/help-install/nl/main.html b/themes/openSUSE/help-install/nl/main.html
new file mode 100644
index 0000000..ceb87c8
--- /dev/null
+++ b/themes/openSUSE/help-install/nl/main.html
@@ -0,0 +1,35 @@
+<h3>
+<a name="main">Bootloader-help</a>
+</h3>
+
+<p>Welkom bij <em>@@@product@@@</em></p>
+
+<p>Gebruik dit menu om de gewenste functie te selecteren. Als u problemen ondervindt bij het navigeren door dit helpsysteem, druk dan op <em>@@@fkey_help@@@</em> om <a href="#help">beschrijving</a> van het helpsysteem binnen te gaan. De hoofdfuncties van dit menu zijn:</p>
+
+<p><a href="#harddisk">Van harde schijf opstarten</a>: Deze selectie zal geen wijzigingen aan het systeem aanbrengen. Het start enkel een eerder geïnstalleerd besturingssysteem op.</p>
+
+<p><a href="#linux">Installatie</a> Deze installatiemodus werkt op de meeste computers. Als uw systeem bevriest tijdens het opstarten of problemen ondervindt bij het detecteren van uw hardwarecomponenten, zoals schijfcontrollers of netwerkkaarten, probeer dan een van de volgende installatieopties.</p>
+
+<p><a href="#noacpi">Installatie - ACPI uitgeschakeld</a>: Veel van de computers die momenteel worden verkocht hebben een incomplete of verkeerde ACPI-implementatie. Deze selectie schakelt ACPI-ondersteuning in de kernel uit, maar laat veel prestatiefuncties, zoals DMA voor IDE-stations, geactiveerd.</p>
+
+<p><a href="#nolapic">Installatie -- Lokale APIC uitgeschakeld</a>: Als de normale installatie mislukt, dan kan dit worden veroorzaakt doordat uw hardware geen lokale APIC ondersteunt. Als dit het geval blijkt, gebruik dan deze optie om zonder ondersteuning voor APIC te installeren.</p>
+
+<p><a href="#failsafe">Installatie - Veilige instellingen</a>: Als u niet succesvol was met <em>Installatie</em>, dan kan deze selectie het probleem mogelijk oplossen.</p>
+
+<p><a href="#rescue">Reddingssysteem</a>: Deze bootimage start een klein Linux-systeem in uw RAM-geheugen. U kunt het gebruiken als uw systeem niet goed opstart. Na het starten van dit systeem dient u als root in te loggen.</p>
+
+<p><a href="#firmware">Firmware-test</a>: Voert een BIOS-test uit die ACPI en andere delen van uw BIOS valideert.</p>
+
+<p><a href="#memtest">Geheugentest</a>: Geheugen testen kunt u voor meer gebruiken dan alleen om het installeren van nieuwe geheugenmodules te controleren. Het doet een stesstest van een groot deel van uw computersysteem en kan hardwareproblemen ontdekken.</p>
+
+<p><a href="#opt">Opstartopties</a>: De opstartopties kunnen het gedrag van uw systeem compleet veranderen. Het zijn instellingen voor de kernel.</p>
+
+<p><a href="#help">@@@fkey_help@@@ Hulp</a>:Dit is contextgevoelig. Het zal verschillende schermen tonen afhankelijk van het actieve element in het opstartscherm. Er is ook een beschrijving van dit helpsysteem beschikbaar.</p>
+
+<p><a href="#keytable">@@@fkey_lang@@@</a>: Stel de taal en toetsenbordindeling in om te gebruiken in de bootloader.</p>
+
+<p><a href="#videomode">@@@fkey_video@@@ Videomodus</a>: Hier kunt u tijdens de installatie kiezen uit verschillende schermresoluties. Als u problemen ondervindt met het grafische installatieprogramma, dan kan <em>tekstmodus</em> misschien beter voor u werken.</p>
+
+<p><a href="#install_src">@@@fkey_inst@@@ Installatiebron</a>: Kies de installatiebron.</p>
+
+<p><a href="#driverupdate">@@@fkey_dud@@@ Opwaardering voor apparaatstuurprogramma</a>: Voor zeer nieuwe computers kan een stuurprogramma-opwaardering nodig zijn om het systeem te installeren.</p>
diff --git a/themes/openSUSE/help-install/nl/main::bits.html b/themes/openSUSE/help-install/nl/main::bits.html
new file mode 100644
index 0000000..b3c24b9
--- /dev/null
+++ b/themes/openSUSE/help-install/nl/main::bits.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="bits">Softwaretype selecteren</a>
+</h3>
+
+<p>U kunt kiezen uit het installeren van een 32-bits of 64-bits versie van @@@product@@@.</p>
diff --git a/themes/openSUSE/help-install/nl/main::driverupdate.html b/themes/openSUSE/help-install/nl/main::driverupdate.html
new file mode 100644
index 0000000..0941264
--- /dev/null
+++ b/themes/openSUSE/help-install/nl/main::driverupdate.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="driverupdate">Stuurprogramma-opwaardering</a>
+</h3>
+
+<p>Als u een diskette of cd-rom met bijgewerkte stuurprogramma's nodig heeft, druk op <em>@@@fkey_dud@@@</em>. De bootloader zal u vragen om het medium te plaatsen nadat de Linux-kernel is geladen.</p>
+
+<p>Een stuurprogramma-opwaardering is meestal een diskette met nieuwe versies van stuurprogramma's of foutreparaties die nodig zijn gedurende de installatie.</p>
diff --git a/themes/openSUSE/help-install/nl/main::failsafe.html b/themes/openSUSE/help-install/nl/main::failsafe.html
new file mode 100644
index 0000000..059995b
--- /dev/null
+++ b/themes/openSUSE/help-install/nl/main::failsafe.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="failsafe">Installatie - Veilige instellingen</a>
+</h3>
+
+<p>Selecteer <em>Installatie - Veilige instellingen</em> als het systeem blijft hangen tijdens de installatie of niet-reproduceerbare fouten geeft. Deze optie schakelt DMA voor IDE-stations uit en alle energiebeheerfuncties. Zie ook de kernelopties voor <a href="#o_apm">apm</a>, <a href="#o_acpi">acpi</a> en <a href="#o_ide">ide</a>.</p>
diff --git a/themes/openSUSE/help-install/nl/main::firmware.html b/themes/openSUSE/help-install/nl/main::firmware.html
new file mode 100644
index 0000000..0571647
--- /dev/null
+++ b/themes/openSUSE/help-install/nl/main::firmware.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="firmware">Firmware-test</a>
+</h3>
+
+<p>Start een BIOS-controleprogramma dat de ACPI-tabellen en vele andere delen van uw BIOS valideert. Testresultaten kunnen worden opgeslagen op een USB-schijf of over een netwerk.</p>
diff --git a/themes/openSUSE/help-install/nl/main::harddisk.html b/themes/openSUSE/help-install/nl/main::harddisk.html
new file mode 100644
index 0000000..46516f5
--- /dev/null
+++ b/themes/openSUSE/help-install/nl/main::harddisk.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="harddisk">Van harde schijf opstarten</a>
+</h3>
+
+<p>Selecteer <em>Geïnstalleerd systeem starten</em> om een systeem dat op uw lokale harde schijf is geïnstalleerd te starten. Dit systeem moet goed zijn geïnstalleerd, omdat alleen de MBR op de eerste harde schijf wordt gestart. Het station-ID van de eerste harde schijf wordt geleverd door de BIOS van de computer.</p>
+
+<p>Gebruik dit als u vergeten bent de cd en dvd uit uw station te verwijderen en de computer vanaf de harde schijf wilt opstarten.</p>
diff --git a/themes/openSUSE/help-install/nl/main::help.html b/themes/openSUSE/help-install/nl/main::help.html
new file mode 100644
index 0000000..3e61b35
--- /dev/null
+++ b/themes/openSUSE/help-install/nl/main::help.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="help">Het helpsysteem gebruiken</a>
+</h3>
+
+<p>De online-help van de bootloader is contextgevoelig. Het geeft u informatie over de geselecteerde menuoptie of, als u opstartopties aan het bewerken bent, probeert het informatie over de optie die zich onder de cursor bevindt op te zoeken.</p>
+
+<p>Navigatietoetsen <ul><li><em>Pijl omhoog</em>: vorige koppeling accentueren</li><li><em>Pijl omlaag</em>: volgende koppeling accentueren</li><li><em>Pijl links</em>, <em>Backspace</em>: ga terug naar het vorige onderwerp</li><li><em>Pijl rechts</em>, <em>Enter</em>, <em>Spatie</em>: volg de koppeling</li><li><em>Page Up</em>: ga een pagina omhoog</li><li><em>Pagina omlaag</em>: ga een pagina omlaag</li><li><em>Startpagina</em>: ga naar paginabegin</li><li><em>Einde</em>: ga naar pagina-einde</li><li><em>Esc</em>: verlaat de helpfunctie</li></ul></p>
diff --git a/themes/openSUSE/help-install/nl/main::install_src.html b/themes/openSUSE/help-install/nl/main::install_src.html
new file mode 100644
index 0000000..597fd21
--- /dev/null
+++ b/themes/openSUSE/help-install/nl/main::install_src.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="install_src">Installatiebron</a>
+</h3>
+
+<p>Druk op <em>@@@fkey_inst@@@</em> om een installatiebron te selecteren.</p>
+
+<p>Dit is hetzelfde als de opstartoptie <a href="#o_install">installeren</a> gebruiken.</p>
diff --git a/themes/openSUSE/help-install/nl/main::keytable.html b/themes/openSUSE/help-install/nl/main::keytable.html
new file mode 100644
index 0000000..8728893
--- /dev/null
+++ b/themes/openSUSE/help-install/nl/main::keytable.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="keytable">Taal en toetsenbordindeling selecteren</a>
+</h3>
+
+<p>Druk op <em>@@@fkey_lang@@@</em> om de taal en toetsenbordindeling van de bootloader te wijzigen.</p>
diff --git a/themes/openSUSE/help-install/nl/main::linux.html b/themes/openSUSE/help-install/nl/main::linux.html
new file mode 100644
index 0000000..cfd1a01
--- /dev/null
+++ b/themes/openSUSE/help-install/nl/main::linux.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="linux">Installatie</a>
+</h3>
+
+<p>Selecteer <em>Installatie</em> om de standaard installatie te starten. De ingevoerde <a href="#opt">opstartopties</a> worden gebruikt tijdens het opstarten. Dit item activeert veel functies van algemeen beschikbare hardware.</p>
diff --git a/themes/openSUSE/help-install/nl/main::memtest.html b/themes/openSUSE/help-install/nl/main::memtest.html
new file mode 100644
index 0000000..5a9fd37
--- /dev/null
+++ b/themes/openSUSE/help-install/nl/main::memtest.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="memtest">Geheugentest</a>
+</h3>
+
+<p>De ingesloten <em>Geheugentest</em> levert goede mogelijkheden tot een stress-test van de hardware van een systeem. Het hoofddoel is om kapot RAM-geheugen te ontdekken, maar het test ook vele andere onderdelen van het systeem.</p>
+
+<p>Er is geen garantie dat het geheugen goed is als er geen fouten zijn gevonden alhoewel de meeste fouten in het geheugen zullen worden gevonden.</p>
diff --git a/themes/openSUSE/help-install/nl/main::noacpi.html b/themes/openSUSE/help-install/nl/main::noacpi.html
new file mode 100644
index 0000000..f0c33a9
--- /dev/null
+++ b/themes/openSUSE/help-install/nl/main::noacpi.html
@@ -0,0 +1,9 @@
+<h3>
+<a name="noacpi">Installatie - ACPI uitgeschakeld</a>
+</h3>
+
+<p>Hedendaagse hardware vereist gebruikelijk ACPI (Advanced Configuration and Power Interface) voor het aansturen van de interrupt afhandeling. ACPI vervangt het oude APM-systeem volledig.</p>
+
+<p>Selecteer <em>Installatie - ACPI uitgeschakeld</em> als u problemen tegenkomt tijdens het opstarten van de kernel. Bekende problemen met computers die problemen met ACPI hebben zijn: <ul><li>kernel bevriest tijdens het opstarten</li><li>PCI-kaarten zijn niet goed gedetecteerd of geïnitialiseerd</li></ul></p>
+
+<p>U kunt ook de opstartoptie <a href="#firmware">Firmware-test</a> proberen en de testresultaten van de ACPI-validatie bekijken.</p>
diff --git a/themes/openSUSE/help-install/nl/main::nolapic.html b/themes/openSUSE/help-install/nl/main::nolapic.html
new file mode 100644
index 0000000..d656921
--- /dev/null
+++ b/themes/openSUSE/help-install/nl/main::nolapic.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="nolapic">Installatie -- Lokale APIC uitgeschakeld</a>
+</h3>
+
+<p>Normaliter zijn er geen problemen met APIC (Advanced Programmable Interrupt Controller). Maar als u toch problemen tegenkomt, dan kunt u deze opstartoptie proberen om zonder APIC-ondersteuning op te starten.</p>
+
+<p>Verwar dit niet met <a href="#noacpi">ACPI</a> (Advanced Configuration and Power Interface).</p>
diff --git a/themes/openSUSE/help-install/nl/main::opt.html b/themes/openSUSE/help-install/nl/main::opt.html
new file mode 100644
index 0000000..e6356d9
--- /dev/null
+++ b/themes/openSUSE/help-install/nl/main::opt.html
@@ -0,0 +1,9 @@
+<h3>
+<a name="opt">Opstartopties</a>
+</h3>
+
+<p>Er zijn twee soorten opstartopties beschikbaar. De eersten zijn opties die het installatieprogramma beïnvloeden. De tweede zijn de kernelopties. Sommige meer algemene opties zijn:</p>
+
+<p>a) installatieopties <ul><li><a href="#o_install">installeren</a> -- een installatiebron selecteren</li><li><a href="#network">netwerkopties</a> -- de netwerkopties</li><li><a href="#o_vnc">vnc-opties</a> -- opties voor installatie via VNC</li></ul></p>
+
+<p>b) kernelopties <ul><li><a href="#o_splash">opstartscherm</a> -- beïnvloedt het gedrag van het opstartscherm (splash)</li><li><a href="#o_apm">apm</a> -- schakel energiebeheer om</li><li><a href="#o_acpi">acpi</a> -- geavanceerde configuratie en energie-interface</li><li><a href="#o_ide">ide</a> -- het IDE-subsysteem aansturen</li></ul></p>
diff --git a/themes/openSUSE/help-install/nl/main::opt::network.html b/themes/openSUSE/help-install/nl/main::opt::network.html
new file mode 100644
index 0000000..45545bc
--- /dev/null
+++ b/themes/openSUSE/help-install/nl/main::opt::network.html
@@ -0,0 +1,13 @@
+<a name="o_hostip"/>
+<a name="o_netmask"/>
+<a name="o_gateway"/>
+
+<h3>
+<a name="network">Installatieopties: netwerkopties</a>
+</h3>
+
+<p>Het is mogelijk om nu het netwerkinterface in te stellen. De hardware zal later door YaST2 worden gedetecteerd. De minimale set opties om uw netwerkkaart mee in te stellen bestaat uit een host-IP en netwerkmasker. Bijvoorbeeld: <ul><li>hostip=192.168.0.10 netmask=255.255.255.0</li></ul></p>
+
+<p>of in een kortere vorm: <ul><li>hostip=192.168.0.10/24</li></ul></p>
+
+<p>Als u een <a href="#o_install">netwerkinstallatie</a> hebt gespecificeerd maar niet deze beide opties, dan zal het installatieprogramma proberen de netwerkinterface in te stellen met <em>dhcp</em>. Als u een standaardgateway nodig hebt, geef die dan op met de optie <em>gateway</em>. Bijvoorbeeld: <ul><li>gateway=192.168.0.8</li></ul></p>
diff --git a/themes/openSUSE/help-install/nl/main::opt::o_acpi.html b/themes/openSUSE/help-install/nl/main::opt::o_acpi.html
new file mode 100644
index 0000000..fc21e4c
--- /dev/null
+++ b/themes/openSUSE/help-install/nl/main::opt::o_acpi.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="o_acpi">Kernelopties: acpi</a>
+</h3>
+
+<p>ACPI (Advanced Configuration and Power Interface) is een standaard die interfaces voor energie- en configuratiebeheer tussen een besturingssysteem en de BIOS definieert. Standaard wordt <em>acpi</em>ingeschakeld als een BIOS is gevonden die nieuwer is dan uit het jaar 2000. Er zijn diverse veelgebruikte parameters die het gedrag van ACPI bepalen: <ul><li><em>pci=noacpi</em> -- gebruik geen ACPI voor het routeren van PCI-interrupts</li><li><em>acpi=oldboot</em> -- alleen de delen van ACPI die relevant zijn voor het opstarten blijven geactiveerd</li><li><em>acpi=off</em> -- schakel ACPI volledig uit</li><li><em>acpi=force</em> -- schakel ACPI in, ook als uw BIOS van voor 2000 is</li></ul></p>
+
+<p>Vooral bij nieuwe computers, het vervangt het oude <a href="#o_apm">apm</a>-systeem.</p>
diff --git a/themes/openSUSE/help-install/nl/main::opt::o_apm.html b/themes/openSUSE/help-install/nl/main::opt::o_apm.html
new file mode 100644
index 0000000..00e818f
--- /dev/null
+++ b/themes/openSUSE/help-install/nl/main::opt::o_apm.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="o_apm">Kernelopties: apm</a>
+</h3>
+
+<p>APM is een van de twee energiebeheerstrategieën die gebruikt wordt op de huidige computers. Het wordt voornamelijk gebruikt bij laptops voor functies zoals slaapstand naar schijf, maar het kan ook verantwoordelijk zijn voor het uitschakelen van de computer nadat u deze heeft afgesloten. APM is afhankelijk van een correct werkend BIOS. Als een BIOS niet correct werkt, dan kan APM slechts gedeeltelijk werken of zelfs het functioneren van de computer belemmeren. Daarom kunt u het met deze parameter uitschakelen.<ul><li><em>apm=off</em> -- schakel APM volledig uit</li></ul></p>
+
+<p>Sommige zeer nieuwe computers hebben meer voordeel bij het nieuwere <a href="#o_acpi">ACPI</a>.</p>
diff --git a/themes/openSUSE/help-install/nl/main::opt::o_ide.html b/themes/openSUSE/help-install/nl/main::opt::o_ide.html
new file mode 100644
index 0000000..06f8ef5
--- /dev/null
+++ b/themes/openSUSE/help-install/nl/main::opt::o_ide.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="o_ide">Kernelopties: ide</a>
+</h3>
+
+<p>IDE wordt, in tegenstelling tot SCSI, algemeen gebruikt in de meeste desktopcomputers. Om hardwareproblemen die bij IDE-systemen kunnen voorkomen te omzeilen gebruikt u de parameter: <ul><li><em>ide=nodma</em> -- DMA voor IDE-stations uitschakelen</li></ul></p>
diff --git a/themes/openSUSE/help-install/nl/main::opt::o_install.html b/themes/openSUSE/help-install/nl/main::opt::o_install.html
new file mode 100644
index 0000000..ce4c3e3
--- /dev/null
+++ b/themes/openSUSE/help-install/nl/main::opt::o_install.html
@@ -0,0 +1,9 @@
+<h3>
+<a name="o_install">Installatieopties: installeren</a>
+</h3>
+
+<p>Standaard worden de lokale CD-ROM's doorzocht op de installatiebron. Voor een netwerkinstallatie selecteert u de optie <em>installeren</em>. Mogelijke installatieprotocollen zijn <ul><li>FTP</li><li>NFS</li><li>HTTP</li></ul></p>
+
+<p>De syntaxis die u moet gebruiken is hetzelfde als bij standaard URL-adressen. Bijvoorbeeld, als uw server gevonden is op 192.168.0.1 en u wilt een op NFS gebaseerde installatie doen vanuit de map /install op deze server, geef dan de bron als volgt op: <ul><li>install=nfs://192.168.0.1/install</li></ul></p>
+
+<p>De netwerkkaart zal worden ingesteld met <em>dhcp</em>, of u kunt zelf de parameters opgeven zoals beschreven in <a href="#network">netwerkopties</a>.</p>
diff --git a/themes/openSUSE/help-install/nl/main::opt::o_splash.html b/themes/openSUSE/help-install/nl/main::opt::o_splash.html
new file mode 100644
index 0000000..93f91c1
--- /dev/null
+++ b/themes/openSUSE/help-install/nl/main::opt::o_splash.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="o_splash">Kernelopties: opstartscherm</a>
+</h3>
+
+<p>Het opstartscherm is de afbeelding die getoond wordt tijdens de systeemstart. Deze wordt ook wel 'splash' genoemd. <ul><li><em>splash=0</em> -- Het opstartscherm (splash) is uitgeschakeld. Deze optie is bedoeld voor zeer oude beeldschermen of als er zich een fout voordoet.</li><li><em>splash=verbose</em> -- Activeert het opstartscherm (splash), maar kernel- en opstartmeldingen worden nog steeds getoond.</li><li><em>splash=silent</em> -- Activeert het opstartscherm (splash) zonder verdere meldingen. In plaats daarvan wordt een voortgangsbalk getoond.</li></ul></p>
diff --git a/themes/openSUSE/help-install/nl/main::opt::o_vnc.html b/themes/openSUSE/help-install/nl/main::opt::o_vnc.html
new file mode 100644
index 0000000..d5bba26
--- /dev/null
+++ b/themes/openSUSE/help-install/nl/main::opt::o_vnc.html
@@ -0,0 +1,9 @@
+<a name="o_vncpassword"/>
+
+<h3>
+<a name="o_vnc">Installatieopties: vnc</a>
+</h3>
+
+<p>Om de VNC-installatie te activeren geeft u de parameters vnc en vncpassword op: <ul><li><em>vnc=1 vncpassword=voorbeeld</em></li></ul></p>
+
+<p>De VNC-server zal worden gestart en u kunt YaST-2 aansturen met een VNC-cliënt op een systeem op afstand.</p>
diff --git a/themes/openSUSE/help-install/nl/main::rescue.html b/themes/openSUSE/help-install/nl/main::rescue.html
new file mode 100644
index 0000000..68c821f
--- /dev/null
+++ b/themes/openSUSE/help-install/nl/main::rescue.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="rescue">Reddingssysteem</a>
+</h3>
+
+<p>De <em>Reddingssysteem</em> is een klein op RAM-disk gebaseerd systeem. U kunt er allerhande wijzigingen aan een geïnstalleerd systeem mee aanbrengen. Omdat alleen elementaire programma's beschikbaar zijn is het bedoeld voor experts.</p>
diff --git a/themes/openSUSE/help-install/nl/main::videomode.html b/themes/openSUSE/help-install/nl/main::videomode.html
new file mode 100644
index 0000000..e6688de
--- /dev/null
+++ b/themes/openSUSE/help-install/nl/main::videomode.html
@@ -0,0 +1,9 @@
+<h3>
+<a name="videomode">Videomodus selecteren</a>
+</h3>
+
+<p>Druk op <em>@@@fkey_video@@@</em> om een lijst met videomodussen die uw grafische kaart ondersteunt te krijgen. De hoogste modus die uw monitor kan weergeven is voorgeselecteerd.</p>
+
+<p>Het is mogelijk dat uw monitor niet automatisch kan worden gedetecteerd. In dat geval kunt u hier de juiste modus handmatig selecteren.</p>
+
+<p>Als u tijdens de installatie problemen ondervindt met de grafische kaart, dan kan <em>tekstmodus</em> een bruikbare omweg leveren.</p>
diff --git a/themes/openSUSE/help-install/nl/navi.html b/themes/openSUSE/help-install/nl/navi.html
new file mode 100644
index 0000000..112f78c
--- /dev/null
+++ b/themes/openSUSE/help-install/nl/navi.html
@@ -0,0 +1 @@
+<p>Terug naar <a href="#foobar">FOOBAR</a></p>
diff --git a/themes/openSUSE/help-install/pa/main.html b/themes/openSUSE/help-install/pa/main.html
new file mode 100644
index 0000000..1d74b3e
--- /dev/null
+++ b/themes/openSUSE/help-install/pa/main.html
@@ -0,0 +1,60 @@
+<h3>
+<a name="main">ਬੂਟ ਲੋਡਰ ਮੱਦਦ</a>
+</h3>
+
+<p><em>@@@product@@@</em> ਵਲੋਂ ਜੀ ਆਇਆਂ ਨੂੰ</p>
+
+<p>ਇਹ ਮੇਨੂ ਨੂੰ ਲੋੜੀਦੇ ਫੰਕਸ਼ਨ ਲਈ ਵਰਤੋਂ। ਜੇ ਤੁਹਾਨੂੰ ਇਹ ਮੱਦਦ ਸਿਸਟਮ ਵਿੱਚ ਨੇਵੀਗੇਸ਼ਨ ਦੌਰਾਨ ਸਮੱਸਿਆ ਹੈ ਤਾਂ, ਮੱਦਦ ਸਿਸਟਮ ਉੱਤੇ <em>@@@fkey_help@@@</em> ਨੂੰ <a href="#help">ਵੇਰਵਾ</a> ਉੱਤੇ ਜਾਣ ਲਈ ਦਬਾਓ। ਇਹ ਮੇਨੂ ਵਿੱਚ ਮੁੱਖ ਫੰਕਸ਼ਨ ਹਨ:</p>
+
+<p><a href="#harddisk">ਹਾਰਡ ਡਿਸਕ ਤੋਂ ਬੂਟ</a>: ਇਹ ਚੋਣ ਸਿਸਟਮ ਉੱਤੇ ਕੁਝ ਨਹੀਂ ਕਰੇਗੀ। ਇਹ ਸਿਰਫ਼ ਪਹਿਲਾਂ ਇੰਸਟਾਲ ਹੋਏ ਓਪਰੇਟਿਗ ਸਿਸਟਮ ਨੂੰ ਹੀ ਚਲਾਏਗੀ।</p>
+
+<p><a href="#linux">ਇੰਸਟਾਲੇਸ਼ਨ</a>: ਇਹ ਇੰਸਟਾਲੇਸ਼ਨ ਬਹੁਤੀਆਂ ਮਸ਼ੀਨਾਂ ਉੱਤੇ ਕੰਮ ਕਰਦੀ ਹੈ। ਜੇ ਤੁਹਾਨੂੰ ਬੂਟ ਸਮੇਂ ਸਿਸਟਮ ਰੁਕਣ ਜਾਂ ਤੁਹਾਡੇ ਹਾਰਡਵੇਅਰ ਭਾਗ ਦੀ ਖੋਜ ਦੌਰਾਨ ਸਮੱਸਿਆ ਹੈ, ਜਿਵੇਂ ਕਿ ਡਿਸਕ ਕੰਟਰੋਲਰ ਜਾਂ ਨੈੱਟਵਰਕ ਕਾਰਡ, ਤਾਂ ਹੇਠ ਦਿੱਤੀਆਂ ਇੰਸਟਾਲੇਸ਼ਨ ਚੋਣਾਂ ਵਿੱਚ ਇੱਕ ਨਾਲ ਕੋਸ਼ਿਸ਼ ਕਰੋ।</p>
+
+<p>
+<a href="#noacpi">ਇੰਸਟਾਲੇਸ਼ਨ -- ACPI ਆਯੋਗ</a>: Many of the
+currently-sold computers have incomplete or faulty ACPI
+implementations. This selection disables ACPI support in the
+kernel, but still enables many performance features, like DMA for IDE
+hard disks.
+</p>
+
+<p>
+<a href="#nolapic">ਇੰਸਟਾਲੇਸ਼ਨ -- ਲੋਕਲ APIC ਆਯੋਗ</a>:
+If the normal installation fails, this might be due to the
+system hardware not supporting local APIC.
+If this seems to be the case, use this option to
+install without local APIC support.
+</p>
+
+<p><a href="#failsafe">ਇੰਸਟਾਲੇਸ਼ਨ -- ਸੁਰੱਖਿਅਤ ਸੈਟਿੰਗ</a>: ਜੇ ਤੁਸੀਂ <em>ਇੰਸਟਾਲੇਸ਼ਨ</em> ਨਾਲ ਸਫ਼ਲ ਨਹੀਂ ਹੋਏ ਤਾਂ ਇਹ ਚੋਣ ਮਸਲਾ ਹੱਲ ਕਰ ਸਕਦੀ ਹੈ।</p>
+
+<p><a href="#rescue">ਰਿਸਕਿਊ ਸਿਸਟਮ</a>: ਇਹ ਬੂਟ ਈਮੇਜ਼ RAM ਵਿੱਚ ਇੱਕ ਛੋਟਾ ਲਿਨਕਸ ਸਿਸਟਮ ਚਲਾਉਦਾ ਹੈ। ਇਹ ਤਾਂ ਸਹਾਇਕ ਹੈ, ਜਦੋਂ ਤੁਹਾਡਾ ਸਿਸਟਮ ਠੀਕ ਤਰ੍ਹਾਂ ਚਾਲੂ ਨਾ ਹੋਵੇ। ਇਹ ਸਿਸਟਮ ਬੂਟ ਕਰਨ ਬਾਅਦ, root ਵਾਂਗ ਲਾਗਇਨ ਕਰੋ।</p>
+
+<p>
+<a href="#firmware">ਫਾਇਰਮਵੇਅਰ ਟੈਸਟ</a>: Runs a BIOS test tool that validates
+ACPI and other parts of your BIOS.
+</p>
+
+<p>
+<a href="#memtest">ਮੈਮੋਰੀ ਟੈਸਟ</a>: Memory testing is useful for more than
+checking installation of new memory modules. It is a stress test
+for a big part of your computer system and may indicate hardware
+problems.
+</p>
+
+<p><a href="#opt">ਬੂਟ ਚੋਣ</a>: ਬੂਟ ਚੋਣਾਂ ਤੁਹਾਡੇ ਸਿਸਟਮ ਦਾ ਰਵੱਈਆ ਪੂਰੀ ਤਰ੍ਹਾਂ ਬਦਲ ਸਕਦੀਆਂ ਹਨ। ਇਹ ਕਰਨਲ ਲਈ ਸੈਟਿੰਗਾਂ ਹਨ।</p>
+
+<p>
+<a href="#help"> ਮੱਦਦ</a>: This is context sensitive. It will
+show different screens depending on the active element of the
+boot screen. There is also a description of this help system
+available.
+</p>
+
+<p><a href="#keytable">@@@fkey_lang@@@</a>: ਬੂਟ ਲੋਡਰ ਨਾਲ ਵਰਤਣ ਲਈ ਭਾਸ਼ਾ ਅਤੇ ਕੀ-ਬੋਰਡ ਮੈਪਿੰਗ ਸੈੱਟ ਕਰੋ।</p>
+
+<p><a href="#videomode"> ਵੀਡਿਓ ਮੋਡ</a>: ਇੱਥੇ, ਇੰਸਟਾਲੇਸ਼ਨ ਦੇ ਦੌਰਾਨ ਵੱਖ ਵੱਖ ਸਕਰੀਨ ਰੈਜ਼ੋਲੇਸ਼ਨ ਬਦਲੋ। ਜੇ ਤੁਹਾਨੂੰ ਗਰਾਫਿਕਲ ਇੰਸਟਾਲੇਸ਼ਨ ਲਈ ਸਮੱਸਿਆ ਆ ਰਹੀ ਹੈ ਤਾਂ ਤੁਹਾਡੇ ਲਈ <em>ਟੈਕਸਟ ਮੋਡ</em> ਸਹਾਇਕ ਹੋ ਸਕਦੀ ਹੈ।</p>
+
+<p><a href="#install_src">@@@fkey_inst@@@ ਇੰਸਟਾਲੇਸ਼ਨ ਸਰੋਤ</a>: ਇੰਸਟਾਲੇਸ਼ਨ ਸਰੋਤ ਚੁਣੋ।</p>
+
+<p><a href="#driverupdate">@@@fkey_dud@@@ ਡਰਾਇਵਰ ਅੱਪਡੇਟ</a> ਬਹੁਤ ਹੀ ਨਵੀਆਂ ਮਸ਼ੀਨ ਵਾਸਤੇ, ਸਿਸਟਮ ਇੰਸਟਾਲ ਕਰਨ ਲਈ ਇੱਕ ਡਰਾਇਵਰ ਅੱਪਡੇਟ ਦੀ ਲੋੜ ਪੈ ਸਕਦੀ ਹੈ।</p>
diff --git a/themes/openSUSE/help-install/pa/main::bits.html b/themes/openSUSE/help-install/pa/main::bits.html
new file mode 100644
index 0000000..46766a1
--- /dev/null
+++ b/themes/openSUSE/help-install/pa/main::bits.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="bits">ਸਾਫਟਵੇਅਰ ਕਿਸਮ ਚੋਣ</a>
+</h3>
+
+<p>ਤੁਸੀਂ @@@product@@@ ਦੇ 32-ਬਿੱਟ ਜਾਂ 64-ਬਿੱਟ ਵਰਜਨ ਦੀ ਇੰਸਟਾਲੇਸ਼ਨ ਕਰਨ ਲਈ ਚੋਣ ਕਰਨੀ ਹੈ।</p>
diff --git a/themes/openSUSE/help-install/pa/main::driverupdate.html b/themes/openSUSE/help-install/pa/main::driverupdate.html
new file mode 100644
index 0000000..5afc38a
--- /dev/null
+++ b/themes/openSUSE/help-install/pa/main::driverupdate.html
@@ -0,0 +1,14 @@
+<h3>
+<a name="driverupdate">ਡਰਾਇਵਰ ਅੱਪਡੇਟ</a>
+</h3>
+
+<p>
+If you need a driver update floppy or CD-ROM, press <em>@@@fkey_dud@@@</em>. The
+boot loader asks you to insert the driver update medium after
+loading the Linux kernel.
+</p>
+
+<p>
+A driver update is typically a floppy with new versions of hardware
+drivers or bug fixes needed during installation.
+</p>
diff --git a/themes/openSUSE/help-install/pa/main::failsafe.html b/themes/openSUSE/help-install/pa/main::failsafe.html
new file mode 100644
index 0000000..5e4fb0a
--- /dev/null
+++ b/themes/openSUSE/help-install/pa/main::failsafe.html
@@ -0,0 +1,11 @@
+<h3>
+<a name="failsafe">ਇੰਸਟਾਲੇਸ਼ਨ -- ਸੁਰੱਖਿਅਤ ਸੈਟਿੰਗ</a>
+</h3>
+
+<p>
+Select <em>ਇੰਸਟਾਲੇਸ਼ਨ -- ਸੁਰੱਖਿਅਤ ਸੈਟਿੰਗ</em> if you encounter hangs
+while installing or irreproducible errors. This option disables DMA
+for IDE drives and all power management features.
+See also the kernel options for <a href="#o_apm">apm</a>,
+<a href="#o_acpi">acpi</a> and <a href="#o_ide">ide</a>.
+</p>
diff --git a/themes/openSUSE/help-install/pa/main::firmware.html b/themes/openSUSE/help-install/pa/main::firmware.html
new file mode 100644
index 0000000..da3a6fc
--- /dev/null
+++ b/themes/openSUSE/help-install/pa/main::firmware.html
@@ -0,0 +1,9 @@
+<h3>
+<a name="firmware">ਫਾਇਰਮਵੇਅਰ ਟੈਸਟ</a>
+</h3>
+
+<p>
+Starts a BIOS checker that validates the ACPI tables
+and many other parts of your BIOS.
+Test results can be stored on usb disk or saved via network.
+</p>
diff --git a/themes/openSUSE/help-install/pa/main::harddisk.html b/themes/openSUSE/help-install/pa/main::harddisk.html
new file mode 100644
index 0000000..e47696a
--- /dev/null
+++ b/themes/openSUSE/help-install/pa/main::harddisk.html
@@ -0,0 +1,13 @@
+<h3>
+<a name="harddisk">ਹਾਰਡ ਡਿਸਕ ਤੋਂ ਬੂਟ</a>
+</h3>
+
+<p>
+Select <em>ਇੰਸਟਾਲ ਹੋਇਆ OS ਬੂਟ ਕਰੋ</em> to start the system installed on
+your local hard disk. This system must be installed properly, because
+only the MBR (Master Boot Record) on the first hard disk is started.
+The device ID of the first hard disk is provided by the BIOS of
+the computer.
+</p>
+
+<p>ਇਹ ਚੋਣ ਕਰੋ, ਜੇ ਤੁਸੀਂ ਆਪਣੀ ਡਰਾਇਵ ਵਿੱਚੋਂ CD ਜਾਂ DVD ਨੂੰ ਹਟਾਉਣਾ ਭੁੱਲ ਗਏ ਅਤੇ ਆਪਣੇ ਕੰਪਿਊਟਰ ਨੂੰ ਹਾਰਡ ਡਿਸਕ ਤੋਂ ਬੂਟ ਕਰਵਾਉਣਾ ਚਾਹੁੰਦੇ ਹੋ।</p>
diff --git a/themes/openSUSE/help-install/pa/main::help.html b/themes/openSUSE/help-install/pa/main::help.html
new file mode 100644
index 0000000..5a723eb
--- /dev/null
+++ b/themes/openSUSE/help-install/pa/main::help.html
@@ -0,0 +1,12 @@
+<h3>
+<a name="help">ਮੱਦਦ ਸਿਸਟਮ ਦੀ ਵਰਤੋਂ</a>
+</h3>
+
+<p>
+The boot loader online help is context sensitive. It gives information
+about the selected menu item or, if you are editing boot options,
+it tries to look up information about the option in which the cursor is
+positioned.
+</p>
+
+<p>ਨੇਵੀਗੇਸ਼ਨ ਸਵਿੱਚਾਂ <ul><li><em>ਤੀਰ ਉੱਤੇ</em>: ਪਿਛਲਾ ਲਿੰਕ ਹਾਈਲਾਈਟ</li><li><em>ਹੇਠਾਂ ਤੀਰ</em>: ਅੱਗੇ ਲਿੰਕ ਹਾਈਲਾਈਟ</li><li><em>ਖੱਬਾ ਤੀਰ</em>, <em>ਬੈਕਸਪੇਸ</em>: ਪਿਛਲੇ ਵਿਸ਼ੇ ਉੱਤੇ ਜਾਓ</li><li><em>ਸੱਜਾ ਤੀਰ</em>, <em>ਐਂਟਰ</em>, <em>ਥਾਂ</em>: ਲਿੰਕ ਖੋਲ੍ਹੋ</li><li><em>Page Up</em>: ਇੱਕ ਪੇਜ਼ ਉੱਤੇ ਜਾਓ</li><li><em>Page Down</em>: ਪੇਜ਼ ਹੇਠਾਂ ਜਾਓ</li><li><em>ਘਰ</em>: ਪੇਜ਼ ਸ਼ੁਰੂ ਉੱਤੇ ਜਾਓ</li><li><em>ਅੰਤ</em>: ਪੇਜ਼ ਅਖੀਰ ਉੱਤੇ ਜਾਓ</li><li><em>Esc</em>: ਮੱਦਦ ਛੱਡੋ</li></ul></p>
diff --git a/themes/openSUSE/help-install/pa/main::install_src.html b/themes/openSUSE/help-install/pa/main::install_src.html
new file mode 100644
index 0000000..4394304
--- /dev/null
+++ b/themes/openSUSE/help-install/pa/main::install_src.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="install_src">ਇੰਸਟਾਲੇਸ਼ਨ ਸਰੋਤ</a>
+</h3>
+
+<p>ਇੱਕ ਇੰਸਟਾਲੇਸ਼ਨ ਸਰੋਤ ਚੁਣਨ ਲਈ <em>@@@fkey_inst@@@</em> ਦੱਬੋ।</p>
+
+<p>ਇਹ ਬੂਟ ਚੋਣ <a href="#o_install">ਇੰਸਟਾਲ</a> ਵਰਤਣ ਵਾਂਗ ਹੀ ਹੈ।</p>
diff --git a/themes/openSUSE/help-install/pa/main::keytable.html b/themes/openSUSE/help-install/pa/main::keytable.html
new file mode 100644
index 0000000..a8a694f
--- /dev/null
+++ b/themes/openSUSE/help-install/pa/main::keytable.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="keytable">ਭਾਸ਼ਾ ਅਤੇ ਕੀਬੋਰਡ ਲੇਆਉਟ ਚੋਣ</a>
+</h3>
+
+<p>ਬੂਟ ਲੋਡਰ ਵਰਤੋਂ ਲਈ ਭਾਸ਼ਾ ਅਤੇ ਕੀ-ਬੋਰਡ ਬਦਲਣ ਲਈ <em>@@@fkey_lang@@@</em> ਵਰਤੋਂ। </p>
diff --git a/themes/openSUSE/help-install/pa/main::linux.html b/themes/openSUSE/help-install/pa/main::linux.html
new file mode 100644
index 0000000..6191364
--- /dev/null
+++ b/themes/openSUSE/help-install/pa/main::linux.html
@@ -0,0 +1,10 @@
+<h3>
+<a name="linux">ਇੰਸਟਾਲੇਸ਼ਨ</a>
+</h3>
+
+<p>
+Select <em>ਇੰਸਟਾਲੇਸ਼ਨ</em> to start the default installation. The
+<a href="#opt">ਬੂਟ ਚੋਣ</a> entered are used in the
+start-up. This item activates many features of commonly available
+hardware.
+</p>
diff --git a/themes/openSUSE/help-install/pa/main::memtest.html b/themes/openSUSE/help-install/pa/main::memtest.html
new file mode 100644
index 0000000..ea85931
--- /dev/null
+++ b/themes/openSUSE/help-install/pa/main::memtest.html
@@ -0,0 +1,11 @@
+<h3>
+<a name="memtest">ਮੈਮੋਰੀ ਟੈਸਟ</a>
+</h3>
+
+<p>
+The included <em>ਮੈਮੋਰੀ ਟੈਸਟ</em> provides good possibilities to
+stress test the hardware of a system. Its main purpose is to detect
+broken RAM, but it also stresses many other parts of the system.
+</p>
+
+<p>ਜੇ ਕੋਈ ਗਲਤੀ ਨਹੀਂ ਵੀ ਲੱਭੀ ਤਾਂ ਵੀ ਇਹ ਕੋਈ ਗਾਰੰਟੀ ਨਹੀਂ ਹੈ ਕਿ ਮੈਮੋਰੀ ਠੀਕ ਹੈ, ਤਾਂ ਵੀ ਬਹੁਤ ਵਾਰ ਨੁਕਸ ਵਾਲੀ ਮੈਮੋਰੀ ਖੋਜੀ ਹੀ ਲਈ ਜਾਂਦੀ ਹੈ।</p>
diff --git a/themes/openSUSE/help-install/pa/main::noacpi.html b/themes/openSUSE/help-install/pa/main::noacpi.html
new file mode 100644
index 0000000..ab0c2b8
--- /dev/null
+++ b/themes/openSUSE/help-install/pa/main::noacpi.html
@@ -0,0 +1,24 @@
+<h3>
+<a name="noacpi">ਇੰਸਟਾਲੇਸ਼ਨ -- ACPI ਆਯੋਗ</a>
+</h3>
+
+<p>
+Current hardware usually requires ACPI (Advanced Configuration and Power Interface)
+to control the interrupt handling.
+ACPI completely replaces the old APM system.
+</p>
+
+<p>
+Select <em>ਇੰਸਟਾਲੇਸ਼ਨ -- ACPI ਆਯੋਗ</em> if you encounter
+problems during boot of the kernel. Known problems with machines that
+have problems with ACPI are:
+<ul>
+ <li>ਬੂਟ ਦੌਰਾਨ ਕਰਨਲ ਫਰੀਜ਼ ਹੈ</li>
+ <li>PCI Cards are not detected or initialized properly</li>
+</ul>
+</p>
+
+<p>
+You may also try the <a href="#firmware">ਫਾਇਰਮਵੇਅਰ ਟੈਸਟ</a> boot option
+and look at the test results of the ACPI validation.
+</p>
diff --git a/themes/openSUSE/help-install/pa/main::nolapic.html b/themes/openSUSE/help-install/pa/main::nolapic.html
new file mode 100644
index 0000000..f30b31a
--- /dev/null
+++ b/themes/openSUSE/help-install/pa/main::nolapic.html
@@ -0,0 +1,11 @@
+<h3>
+<a name="nolapic">ਇੰਸਟਾਲੇਸ਼ਨ -- ਲੋਕਲ APIC ਆਯੋਗ</a>
+</h3>
+
+<p>
+Normally there are no problems with the APIC (Advanced Programmable Interrupt
+Controller). But if you seem to have some, try this option to boot
+without local APIC support.
+</p>
+
+<p>ਕਿਰਪਾ ਕਰੇਕ ਇਸ ਨੂੰ <a href="#noacpi">ACPI</a> (ਐਂਡਵਾਂਸ ਕੰਨਫੀਗਰੇਸ਼ਨ ਐਂਡ ਪਾਵਰ ਇੰਟਰਫੇਸ) ਨਾਲ ਉਲਝਾਉ ਨਾ।</p>
diff --git a/themes/openSUSE/help-install/pa/main::opt.html b/themes/openSUSE/help-install/pa/main::opt.html
new file mode 100644
index 0000000..bf9d976
--- /dev/null
+++ b/themes/openSUSE/help-install/pa/main::opt.html
@@ -0,0 +1,9 @@
+<h3>
+<a name="opt">ਬੂਟ ਚੋਣ</a>
+</h3>
+
+<p>ਦੋ ਕਿਸਮ ਦੀਆਂ ਬੂਟ ਚੋਣਾਂ ਉਪਲੱਬਧ ਹਨ। ਪਹਿਲੀਆਂ, ਜੋ ਕਿ ਇੰਸਟਾਲਰ ਨੂੰ ਪਰਭਾਵਿਤ ਕਰਦੀਆਂ ਹਨ। ਦੂਜੀਆਂ, ਜੋ ਕਿ ਕਰਨਲ ਚੋਣਾਂ ਹਨ। ਕੁਝ ਬਹੁਤ ਹੀ ਆਮ ਵਰਤੋਂ ਲਈ ਹਨ:</p>
+
+<p>ਓ) ਇੰਸਟਾਲਰ ਚੋਣਾਂ <ul><li><a href="#o_install">ਇੰਸਟਾਲ</a> -- ਇੱਕ ਇੰਸਟਾਲੇਸ਼ਨ ਸਰੋਤ ਚੁਣੋ</li><li><a href="#network">ਨੈੱਟਵਰਕ ਚੋਣਾਂ</a> -- ਨੈੱਟਵਰਕ ਚੋਣਾਂ</li><li><a href="#o_vnc">vnc ਚੋਣਾਂ</a> -- VNC ਰਾਹੀਂ ਇੰਸਟਾਲੇਸ਼ਨ ਚੋਣਾਂ</li></ul></p>
+
+<p>b) ਕਰਨਲ ਚੋਣਾਂ <ul><li><a href="#o_splash">splash</a> -- ਸਪਲੈਸ਼ ਸਕਰੀਨ ਦਾ ਰਵੱਈਆ ਪਰਭਾਵਿਤ ਕਰੋ</li><li><a href="#o_apm">apm</a> -- ਪਾਵਰ ਮੈਨੇਜ਼ਮੈਂਟ ਬਦਲੋ</li><li><a href="#o_acpi">acpi</a> -- ਐਂਡਵਾਂਸ ਕੰਨਫੀਗਰੇਸ਼ਨ ਐਂਡ ਪਾਵਰ ਇੰਟਰਫੇਸ</li><li><a href="#o_ide">ide</a> -- IDE ਸਬ-ਸਿਸਟਮ ਕੰਟਰੋਲ ਕਰੋ</li></ul></p>
diff --git a/themes/openSUSE/help-install/pa/main::opt::network.html b/themes/openSUSE/help-install/pa/main::opt::network.html
new file mode 100644
index 0000000..7b9b0df
--- /dev/null
+++ b/themes/openSUSE/help-install/pa/main::opt::network.html
@@ -0,0 +1,22 @@
+<a name="o_hostip"/>
+<a name="o_netmask"/>
+<a name="o_gateway"/>
+
+<h3>
+<a name="network">ਇੰਸਟਾਲਰ ਚੋਣਾਂ: ਨੈੱਟਵਰਕ ਚੋਣਾਂ</a>
+</h3>
+
+<p>ਹੁਣ ਨੈੱਟਵਰਕ ਇੰਟਰਫੇਸ ਦੀ ਸੰਰਚਨਾ ਕਰਨੀ ਸੰਭਵ ਹੈ। ਹਾਰਡਵੇਅਰ ਨੂੰ YaST2 ਨਾਲ ਬਾਅਦ 'ਚ ਖੋਜਿਆ ਜਾਵੇਗਾ। ਤੁਹਾਡੇ ਨੈੱਟਵਰਕ ਕਾਰਡ ਦੀ ਸੰਰਚਨਾ ਲਈ ਘੱਟੋ-ਘੱਟ ਸੰਰਚਨਾ ਲਈ ਹੋਸਟ IP ਅਤੇ ਨੈੱਟਮਾਸਕ ਹੋਣਾ ਲਜ਼ਮੀ ਹੈ। ਜਿਵੇਂ ਕਿ: <li>hostip=192.168.0.10 netmask=255.255.255.0</li></p>
+
+<p>ਜਾਂ ਛੋਟੇ ਰੂਪ ਵਿੱਚ: <ul><li>hostip=192.168.0.10/24</li></ul></p>
+
+<p>
+If you specified a <a href="#o_install">ਨੈੱਟਵਰਕ ਅਧਾਰਿਤ ਇੰਸਟਾਲ</a> and do
+not specify both of these options, the installer tries to configure
+the network interface with <em>dhcp</em>. If you need a default
+gateway, specify this with the option <em>ਗੇਟਵੇ</em>. For
+example:
+<ul>
+ <li>gateway=192.168.0.8</li>
+</ul>
+</p>
diff --git a/themes/openSUSE/help-install/pa/main::opt::o_acpi.html b/themes/openSUSE/help-install/pa/main::opt::o_acpi.html
new file mode 100644
index 0000000..52a21cd
--- /dev/null
+++ b/themes/openSUSE/help-install/pa/main::opt::o_acpi.html
@@ -0,0 +1,20 @@
+<h3>
+<a name="o_acpi">ਕਰਨਲ ਚੋਣਾਂ: acpi</a>
+</h3>
+
+<p>
+ACPI (Advanced Configuration and Power Interface) is a
+standard that defines power and configuration management interfaces
+between an operating system and the BIOS. By default, <em>acpi</em> is
+switched on when a BIOS is detected that is newer than from year
+2000. There are several commonly
+used parameters to control the behavior of ACPI:
+<ul>
+ <li><em>pci=noacpi</em> -- PCI ਇੰਟਰੱਪਟ ਰੂਟ ਲਈ ACPI ਨਾ ਵਰਤੋਂ</li>
+ <li><em>acpi=oldboot</em> -- ACPI ਦੇ ਭਾਗ, ਜੋ ਕਿ ਬੂਟਿੰਗ ਲਈ ਢੁੱਕਵੇਂ ਹਨ, ਹੀ ਐਕਟਿਵੇਟਡ ਰਹਿਣਗੇ</li>
+ <li><em>acpi=off</em> -- ਪੂਰੀ ਤਰ੍ਹਾਂ ACPI ਸਵਿੱਚ ਆਫ਼ ਕਰੋ</li>
+ <li><em>acpi=force</em> -- ਜੇ ਤੁਹਾਡਾ BIOS 2000 ਤੋਂ ਪੁਰਾਣਾ ਹੈ ਤਾਂ ਵੀ ACPI ਸਵਿੱਚ ਆਨ ਰੱਖੋ</li>
+</ul>
+</p>
+
+<p>ਖਾਸ ਤੌਰ ਉੱਤੇ ਨਵੇਂ ਕੰਪਿਊਟਰਾਂ ਉੱਤੇ, <a href="#o_apm">apm</a> ਸਿਸਟਮ ਨੂੰ ਬਦਲੋ।</p>
diff --git a/themes/openSUSE/help-install/pa/main::opt::o_apm.html b/themes/openSUSE/help-install/pa/main::opt::o_apm.html
new file mode 100644
index 0000000..87a1dba
--- /dev/null
+++ b/themes/openSUSE/help-install/pa/main::opt::o_apm.html
@@ -0,0 +1,18 @@
+<h3>
+<a name="o_apm">ਕਰਨਲ ਚੋਣਾਂ: apm</a>
+</h3>
+
+<p>
+APM is one of the two power management strategies used on current
+computers. It is mainly used with laptops for functions like suspend
+to disk, but it may also be responsible for switching off the
+computer after power down. APM relies on a correct working BIOS. If
+the BIOS is broken, APM may have only limited use or even prevent the
+computer from working. Therefore, it may be switched off with the
+parameter
+<ul>
+ <li><em>apm=off</em> -- ਪੂਰੀ ਤਰ੍ਹਾਂ APM ਸਵਿੱਚ ਆਫ਼ ਕਰੋ</li>
+</ul>
+</p>
+
+<p>ਕੁਝ ਬਹੁਤ ਹੀ ਨਵੇਂ ਕੰਪਿਊਟਰ, ਨਵੇਂ <a href="#o_acpi">ACPI</a> ਤੋਂ ਫਾਇਦਾ ਲੈ ਵੀ ਸਕਦੇ ਹਨ।</p>
diff --git a/themes/openSUSE/help-install/pa/main::opt::o_ide.html b/themes/openSUSE/help-install/pa/main::opt::o_ide.html
new file mode 100644
index 0000000..011ee50
--- /dev/null
+++ b/themes/openSUSE/help-install/pa/main::opt::o_ide.html
@@ -0,0 +1,12 @@
+<h3>
+<a name="o_ide">ਕਰਨਲ ਚੋਣਾਂ: ide</a>
+</h3>
+
+<p>
+IDE is, unlike SCSI, commonly used in most desktop workstations.
+To circumvent some hardware problems that occur with IDE systems, use the
+kernel parameter:
+<ul>
+ <li><em>ide=nodma</em> --IDE ਡਰਾਇਵਾਂ ਲਈ DMA ਸਵਿੱਚ ਆਫ਼ ਕਰੋ</li>
+</ul>
+</p>
diff --git a/themes/openSUSE/help-install/pa/main::opt::o_install.html b/themes/openSUSE/help-install/pa/main::opt::o_install.html
new file mode 100644
index 0000000..d04db31
--- /dev/null
+++ b/themes/openSUSE/help-install/pa/main::opt::o_install.html
@@ -0,0 +1,30 @@
+<h3>
+<a name="o_install">ਇੰਸਟਾਲਰ ਚੋਣ: ਇੰਸਟਾਲ</a>
+</h3>
+
+<p>
+By default, the local CD-ROMs are searched for the installation source.
+For a network install, select the
+<em>ਇੰਸਟਾਲ</em> option. Possible installation protocols are
+<ul>
+ <li>FTP</li>
+ <li> </li>
+ <li>HTTP</li>
+</ul>
+</p>
+
+<p>
+The syntax to use is just like standard URLs. For example,
+if your server is found at 192.168.0.1 and you want to do an NFS-based
+install from the directory /install on this server, specify
+the source as follows:
+<ul>
+ <li>install=nfs://192.168.0.1/install</li>
+</ul>
+</p>
+
+<p>
+The network card will either be configured with <em>dhcp</em> or you
+must specify the parameters yourself as described in the
+<a href="#network">ਨੈੱਟਵਰਕ ਚੋਣਾਂ</a>.
+</p>
diff --git a/themes/openSUSE/help-install/pa/main::opt::o_splash.html b/themes/openSUSE/help-install/pa/main::opt::o_splash.html
new file mode 100644
index 0000000..ae0abb3
--- /dev/null
+++ b/themes/openSUSE/help-install/pa/main::opt::o_splash.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="o_splash">ਕਰਨਲ ਚੋਣਾਂ: splash</a>
+</h3>
+
+<p>ਸਵਾਗਤੀ ਸਕਰੀਨ ਸਿਸਟਮ ਸ਼ੁਰੂ ਹੋਣ ਦੌਰਾਨ ਵਿਖਾਈ ਜਾਂਦੀ ਹੈ। <ul><li><em>splash=0</em> -- The splash screen is switched off. This may be useful with very old monitors or if some error occurs.</li><li><em>splash=verbose</em> -- Activates splash, kernel and boot messages are still shown.</li><li><em>splash=silent</em> -- Activates splash, but no messages. Instead a progress bar is drawn.</li></ul></p>
diff --git a/themes/openSUSE/help-install/pa/main::opt::o_vnc.html b/themes/openSUSE/help-install/pa/main::opt::o_vnc.html
new file mode 100644
index 0000000..bc4acdc
--- /dev/null
+++ b/themes/openSUSE/help-install/pa/main::opt::o_vnc.html
@@ -0,0 +1,15 @@
+<a name="o_vncpassword"/>
+
+<h3>
+<a name="o_vnc">ਇੰਸਟਾਲਰ ਚੋਣਾਂ: vnc</a>
+</h3>
+
+<p>
+To enable the VNC installation, specify the
+parameters vnc and vncpassword:
+<ul>
+ <li><em>vnc=1 vncpassword=example</em></li>
+</ul>
+</p>
+
+<p>VNC ਸਰਵਰ ਚਾਲੂ ਕੀਤਾ ਜਾਵੇਗਾ ਅਤੇ ਤੁਸੀਂ ਇੱਕ ਰਿਮੋਟ ਸਿਸਟਮ ਉੱਤੇ ਕਿਸੇ VNC ਕਲਾਇਟ ਨਾਲ YaST2 ਨੂੰ ਕੰਟਰੋਲ ਕਰ ਸਕਦੇ ਹੋ।</p>
diff --git a/themes/openSUSE/help-install/pa/main::rescue.html b/themes/openSUSE/help-install/pa/main::rescue.html
new file mode 100644
index 0000000..802e2bc
--- /dev/null
+++ b/themes/openSUSE/help-install/pa/main::rescue.html
@@ -0,0 +1,10 @@
+<h3>
+<a name="rescue">ਰਿਸਕਿਊ ਸਿਸਟਮ</a>
+</h3>
+
+<p>
+The <em>ਰਿਸਕਿਊ ਸਿਸਟਮ</em> is a small RAM disk base system. From there,
+it is possible to make all kinds of changes to an installed system. Because
+only low-level tools are available in this system, it is intended for
+experts.
+</p>
diff --git a/themes/openSUSE/help-install/pa/main::videomode.html b/themes/openSUSE/help-install/pa/main::videomode.html
new file mode 100644
index 0000000..6d4e2db
--- /dev/null
+++ b/themes/openSUSE/help-install/pa/main::videomode.html
@@ -0,0 +1,9 @@
+<h3>
+<a name="videomode">ਵੀਡਿਓ ਮੋਡ ਚੋਣ</a>
+</h3>
+
+<p>ਆਪਣੇ ਗਰਾਫਿਕਸ ਕਾਰਡ ਵਲੋਂ ਸਹਾਇਕ ਵੀਡਿਆ ਮੋਡ ਦੀ ਲਿਸਟ ਵੇਖਣ ਲਈ <em>@@@fkey_video@@@</em> ਦੱਬੋ। ਤੁਹਾਡੇ ਮਾਨੀਟਰ ਵਲੋਂ ਵੱਧ ਤੋਂ ਵੱਧ ਵੇਖਾਉਣ ਯੋਗ ਮੋਡ ਪਹਿਲਾਂ ਹੀ ਚੁਣਿਆ ਹੈ।</p>
+
+<p>ਇਹ ਸੰਭਵ ਹੈ ਕਿ ਤੁਹਾਡਾ ਮਾਨੀਟਰ ਆਟੋਮੈਟਿਕ ਨਾ ਖੋਜਿਆ ਜਾ ਸਕਦਾ ਹੋਵੇ। ਇਸ ਹਾਲਤ ਵਿੱਚ ਆਪਣੀ ਪਸੰਦ ਖੁਦ ਕਰੋ।</p>
+
+<p>ਜੇਕਰ ਇੰਸਟਾਲੇਸ਼ਨ ਦੌਰਾਨ ਤੁਹਾਡੇ ਸਿਸਟਮ ਨੂੰ ਗਰਾਫਿਕਸ ਕਾਰਡ ਨਾਲ ਸਮੱਸਿਆ ਆਈ ਹੈ ਤਾਂ <em>ਟੈਕਸਟ ਮੋਡ</em> ਇੱਕ ਸਹਾਇਕ ਹੋ ਸਕਦਾ ਹੈ।</p>
diff --git a/themes/openSUSE/help-install/pa/navi.html b/themes/openSUSE/help-install/pa/navi.html
new file mode 100644
index 0000000..12e3c7f
--- /dev/null
+++ b/themes/openSUSE/help-install/pa/navi.html
@@ -0,0 +1 @@
+<p><a href="#foobar">FOOBAR</a> ਉੱਤੇ ਜਾਓ</p>
diff --git a/themes/openSUSE/help-install/pl/main.html b/themes/openSUSE/help-install/pl/main.html
new file mode 100644
index 0000000..f32cd7a
--- /dev/null
+++ b/themes/openSUSE/help-install/pl/main.html
@@ -0,0 +1,103 @@
+<h3>
+<a name="main">Pomoc programu rozruchowego</a>
+</h3>
+
+<p>
+Welcome to <em>@@@product@@@</em>
+</p>
+
+<p>
+Use this menu to select the desired function. If you have
+problems navigating in this help system, press
+<em>@@@fkey_help@@@</em> to enter the <a href="#help">Opis</a> of the help
+system. The main functions in this menu are:
+</p>
+
+<p>
+<a href="#harddisk">Uruchomienie z dysku twardego</a>: This selection will not do
+anything to the system. It only starts a previously installed
+operating system.
+</p>
+
+<p>
+<a href="#linux">Instalacja</a>:
+This installation mode works on most machines. If you experience a
+system freeze during boot or problems with detection of your hardware
+components, such as disk controllers or network cards, try one of the
+following installation options.
+</p>
+
+<p>
+<a href="#noacpi">Instalacja (bez ACPI)</a>: Many of the
+currently-sold computers have incomplete or faulty ACPI
+implementations. This selection disables ACPI support in the
+kernel, but still enables many performance features, like DMA for IDE
+hard disks.
+</p>
+
+<p>
+<a href="#nolapic">Instalacja (bez lokalnego APIC)</a>:
+If the normal installation fails, this might be due to the
+system hardware not supporting local APIC.
+If this seems to be the case, use this option to
+install without local APIC support.
+</p>
+
+<p>
+<a href="#failsafe">Instalacja (bezpieczne ustawienia)</a>: If you were not
+successful with <em>Instalacja</em>, this selection might
+solve the issue.
+</p>
+
+<p>
+<a href="#rescue">System ratunkowy</a>: This boot image starts a small
+Linux system in RAM. This is useful if the system does not start properly.
+After booting this system, log in as root.
+</p>
+
+<p>
+<a href="#firmware">Test oprogramowania sprzętowego</a>: Runs a BIOS test tool that validates
+ACPI and other parts of your BIOS.
+</p>
+
+<p>
+<a href="#memtest">Test pamięci</a>: Memory testing is useful for more than
+checking installation of new memory modules. It is a stress test
+for a big part of your computer system and may indicate hardware
+problems.
+</p>
+
+<p>
+<a href="#opt">Opcje uruchamiania</a>: The boot options may change the
+behavior of your system completely. They are settings for
+the kernel.
+</p>
+
+<p>
+<a href="#help">@@@fkey_help@@@ Help</a>: This is context sensitive. It will
+show different screens depending on the active element of the
+boot screen. There is also a description of this help system
+available.
+</p>
+
+<p>
+<a href="#keytable">@@@fkey_lang@@@</a>: Set language and keyboard mapping
+used by the boot loader.
+</p>
+
+<p>
+<a href="#videomode">@@@fkey_video@@@ Video Mode</a>: Here, choose between
+different screen resolutions while installing. If you encounter
+problems with the graphical installation, the <em>Tryb tekstowy</em> may
+be a work-around for you.
+</p>
+
+<p>
+<a href="#install_src">@@@fkey_inst@@@ Installation Source</a>: Choose the
+installation source.
+</p>
+
+<p>
+<a href="#driverupdate">@@@fkey_dud@@@ Driver Update</a>: For very new machines, a
+driver update may be needed to install the system.
+</p>
diff --git a/themes/openSUSE/help-install/pl/main::bits.html b/themes/openSUSE/help-install/pl/main::bits.html
new file mode 100644
index 0000000..7aa8002
--- /dev/null
+++ b/themes/openSUSE/help-install/pl/main::bits.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="bits">Wybór typu oprogramowania</a>
+</h3>
+
+<p>
+You have the choice to install the 32-bit or 64-bit version of @@@product@@@.
+</p>
diff --git a/themes/openSUSE/help-install/pl/main::driverupdate.html b/themes/openSUSE/help-install/pl/main::driverupdate.html
new file mode 100644
index 0000000..cb8eac9
--- /dev/null
+++ b/themes/openSUSE/help-install/pl/main::driverupdate.html
@@ -0,0 +1,14 @@
+<h3>
+<a name="driverupdate">Aktualizacja sterowników</a>
+</h3>
+
+<p>
+If you need a driver update floppy or CD-ROM, press <em>@@@fkey_dud@@@</em>. The
+boot loader asks you to insert the driver update medium after
+loading the Linux kernel.
+</p>
+
+<p>
+A driver update is typically a floppy with new versions of hardware
+drivers or bug fixes needed during installation.
+</p>
diff --git a/themes/openSUSE/help-install/pl/main::failsafe.html b/themes/openSUSE/help-install/pl/main::failsafe.html
new file mode 100644
index 0000000..7cef1f4
--- /dev/null
+++ b/themes/openSUSE/help-install/pl/main::failsafe.html
@@ -0,0 +1,11 @@
+<h3>
+<a name="failsafe">Instalacja (bezpieczne ustawienia)</a>
+</h3>
+
+<p>
+Select <em>Instalacja (bezpieczne ustawienia)</em> if you encounter hangs
+while installing or irreproducible errors. This option disables DMA
+for IDE drives and all power management features.
+See also the kernel options for <a href="#o_apm">apm</a>,
+<a href="#o_acpi">acpi</a> and <a href="#o_ide">ide</a>.
+</p>
diff --git a/themes/openSUSE/help-install/pl/main::firmware.html b/themes/openSUSE/help-install/pl/main::firmware.html
new file mode 100644
index 0000000..dd2b0b1
--- /dev/null
+++ b/themes/openSUSE/help-install/pl/main::firmware.html
@@ -0,0 +1,9 @@
+<h3>
+<a name="firmware">Test oprogramowania sprzętowego</a>
+</h3>
+
+<p>
+Starts a BIOS checker that validates the ACPI tables
+and many other parts of your BIOS.
+Test results can be stored on usb disk or saved via network.
+</p>
diff --git a/themes/openSUSE/help-install/pl/main::harddisk.html b/themes/openSUSE/help-install/pl/main::harddisk.html
new file mode 100644
index 0000000..d2e141b
--- /dev/null
+++ b/themes/openSUSE/help-install/pl/main::harddisk.html
@@ -0,0 +1,16 @@
+<h3>
+<a name="harddisk">Uruchomienie z dysku twardego</a>
+</h3>
+
+<p>
+Select <em>Start zainstalowanego systemu</em> to start the system installed on
+your local hard disk. This system must be installed properly, because
+only the MBR (Master Boot Record) on the first hard disk is started.
+The device ID of the first hard disk is provided by the BIOS of
+the computer.
+</p>
+
+<p>
+Use this if you forgot to remove the CD or DVD from your
+drive and want to start the computer from the hard disk.
+</p>
diff --git a/themes/openSUSE/help-install/pl/main::help.html b/themes/openSUSE/help-install/pl/main::help.html
new file mode 100644
index 0000000..30dfad2
--- /dev/null
+++ b/themes/openSUSE/help-install/pl/main::help.html
@@ -0,0 +1,25 @@
+<h3>
+<a name="help">Używanie systemu pomocy</a>
+</h3>
+
+<p>
+The boot loader online help is context sensitive. It gives information
+about the selected menu item or, if you are editing boot options,
+it tries to look up information about the option in which the cursor is
+positioned.
+</p>
+
+<p>
+Navigation Keys
+<ul>
+ <li><em>Strzałka 'w górę'</em>: highlight previous link</li>
+ <li><em>Strzałka 'w dół'</em>: highlight next link</li>
+ <li><em>Strzałka 'w lewo'</em>, <em>Backspace</em>: return to previous topic</li>
+ <li><em>Strzałka 'w prawo'</em>, <em>Enter</em>, <em>Spacja</em>: follow link</li>
+ <li><em>Page Up</em>: scroll up one page</li>
+ <li><em>Page Down</em>: scroll down one page</li>
+ <li><em>Home</em>: go to page start</li>
+ <li><em>End</em>: go to page end</li>
+ <li><em>Esc</em>: leave help</li>
+</ul>
+</p>
diff --git a/themes/openSUSE/help-install/pl/main::install_src.html b/themes/openSUSE/help-install/pl/main::install_src.html
new file mode 100644
index 0000000..ce93489
--- /dev/null
+++ b/themes/openSUSE/help-install/pl/main::install_src.html
@@ -0,0 +1,12 @@
+<h3>
+<a name="install_src">Źródło instalacji</a>
+</h3>
+
+<p>
+Press <em>@@@fkey_inst@@@</em> to choose an installation source.
+</p>
+
+<p>
+This is the same as using the <a href="#o_install">Zainstaluj</a>
+boot option.
+</p>
diff --git a/themes/openSUSE/help-install/pl/main::keytable.html b/themes/openSUSE/help-install/pl/main::keytable.html
new file mode 100644
index 0000000..9b55337
--- /dev/null
+++ b/themes/openSUSE/help-install/pl/main::keytable.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="keytable">Ustawienia języka i klawiatury</a>
+</h3>
+
+<p>
+Press <em>@@@fkey_lang@@@</em> to change language and keyboard layout the boot loader uses.
+</p>
diff --git a/themes/openSUSE/help-install/pl/main::linux.html b/themes/openSUSE/help-install/pl/main::linux.html
new file mode 100644
index 0000000..dd9cc9c
--- /dev/null
+++ b/themes/openSUSE/help-install/pl/main::linux.html
@@ -0,0 +1,10 @@
+<h3>
+<a name="linux">Instalacja</a>
+</h3>
+
+<p>
+Select <em>Instalacja</em> to start the default installation. The
+<a href="#opt">Opcje uruchamiania</a> entered are used in the
+start-up. This item activates many features of commonly available
+hardware.
+</p>
diff --git a/themes/openSUSE/help-install/pl/main::memtest.html b/themes/openSUSE/help-install/pl/main::memtest.html
new file mode 100644
index 0000000..31ac2da
--- /dev/null
+++ b/themes/openSUSE/help-install/pl/main::memtest.html
@@ -0,0 +1,14 @@
+<h3>
+<a name="memtest">Test pamięci</a>
+</h3>
+
+<p>
+The included <em>Test pamięci</em> provides good possibilities to
+stress test the hardware of a system. Its main purpose is to detect
+broken RAM, but it also stresses many other parts of the system.
+</p>
+
+<p>
+There is no guarantee that the memory is good if no errors are
+found, although most of memory defects will be found.
+</p>
diff --git a/themes/openSUSE/help-install/pl/main::noacpi.html b/themes/openSUSE/help-install/pl/main::noacpi.html
new file mode 100644
index 0000000..381ec8a
--- /dev/null
+++ b/themes/openSUSE/help-install/pl/main::noacpi.html
@@ -0,0 +1,24 @@
+<h3>
+<a name="noacpi">Instalacja (bez ACPI)</a>
+</h3>
+
+<p>
+Current hardware usually requires ACPI (Advanced Configuration and Power Interface)
+to control the interrupt handling.
+ACPI completely replaces the old APM system.
+</p>
+
+<p>
+Select <em>Instalacja (bez ACPI)</em> if you encounter
+problems during boot of the kernel. Known problems with machines that
+have problems with ACPI are:
+<ul>
+ <li>kernel freezes when booting</li>
+ <li>PCI Cards are not detected or initialized properly</li>
+</ul>
+</p>
+
+<p>
+You may also try the <a href="#firmware">Test oprogramowania sprzętowego</a> boot option
+and look at the test results of the ACPI validation.
+</p>
diff --git a/themes/openSUSE/help-install/pl/main::nolapic.html b/themes/openSUSE/help-install/pl/main::nolapic.html
new file mode 100644
index 0000000..4c24d25
--- /dev/null
+++ b/themes/openSUSE/help-install/pl/main::nolapic.html
@@ -0,0 +1,14 @@
+<h3>
+<a name="nolapic">Instalacja (bez lokalnego APIC)</a>
+</h3>
+
+<p>
+Normally there are no problems with the APIC (Advanced Programmable Interrupt
+Controller). But if you seem to have some, try this option to boot
+without local APIC support.
+</p>
+
+<p>
+Please don't confuse this with <a href="#noacpi">ACPI</a>
+(Advanced Configuration and Power Interface).
+</p>
diff --git a/themes/openSUSE/help-install/pl/main::opt.html b/themes/openSUSE/help-install/pl/main::opt.html
new file mode 100644
index 0000000..90ed713
--- /dev/null
+++ b/themes/openSUSE/help-install/pl/main::opt.html
@@ -0,0 +1,28 @@
+<h3>
+<a name="opt">Opcje uruchamiania</a>
+</h3>
+
+<p>
+There are two types of boot options available. First, there are
+options that affect the installer. Second, there are kernel
+options. Some of the more common options are:
+</p>
+
+<p>
+a) installer options
+<ul>
+ <li><a href="#o_install">Zainstaluj</a> -- select an installation source</li>
+ <li><a href="#network">Opcje sieciowe</a> -- the network options</li>
+ <li><a href="#o_vnc">Opcje vnc</a> -- options for installation via VNC</li>
+</ul>
+</p>
+
+<p>
+b) kernel options
+<ul>
+ <li><a href="#o_splash">splash</a> -- influence the behavior of the splash screen</li>
+ <li><a href="#o_apm">apm</a> -- toggle power management</li>
+ <li><a href="#o_acpi">acpi</a> -- advanced configuration and power interface</li>
+ <li><a href="#o_ide">ide</a> -- control the IDE subsystem</li>
+</ul>
+</p>
diff --git a/themes/openSUSE/help-install/pl/main::opt::network.html b/themes/openSUSE/help-install/pl/main::opt::network.html
new file mode 100644
index 0000000..394e8ef
--- /dev/null
+++ b/themes/openSUSE/help-install/pl/main::opt::network.html
@@ -0,0 +1,35 @@
+<a name="o_hostip"/>
+<a name="o_netmask"/>
+<a name="o_gateway"/>
+
+<h3>
+<a name="network">Opcje instalatora: ustawienia sieciowe</a>
+</h3>
+
+<p>
+It is possible to configure the network interface right now. The
+hardware will be detected later by YaST2. The minimum set of options
+to configure your network card consists of host IP and netmask. For
+example:
+<ul>
+ <li>hostip:192.168.0.10 netmas=255.255.255.0</li>
+</ul>
+</p>
+
+<p>
+or in a shorter form:
+<ul>
+ <li>hostip=192.168.0.10/24</li>
+</ul>
+</p>
+
+<p>
+If you specified a <a href="#o_install">instalacja sieciowa</a> and do
+not specify both of these options, the installer tries to configure
+the network interface with <em>dhcp</em>. If you need a default
+gateway, specify this with the option <em>bramka sieciowa</em>. For
+example:
+<ul>
+ <li>gateway=192.168.0.8</li>
+</ul>
+</p>
diff --git a/themes/openSUSE/help-install/pl/main::opt::o_acpi.html b/themes/openSUSE/help-install/pl/main::opt::o_acpi.html
new file mode 100644
index 0000000..5b9ba73
--- /dev/null
+++ b/themes/openSUSE/help-install/pl/main::opt::o_acpi.html
@@ -0,0 +1,23 @@
+<h3>
+<a name="o_acpi">Opcje jądra: acpi</a>
+</h3>
+
+<p>
+ACPI (Advanced Configuration and Power Interface) is a
+standard that defines power and configuration management interfaces
+between an operating system and the BIOS. By default, <em>acpi</em> is
+switched on when a BIOS is detected that is newer than from year
+2000. There are several commonly
+used parameters to control the behavior of ACPI:
+<ul>
+ <li><em>pci=noacpi</em> -- do not use ACPI to route PCI interrupts</li>
+ <li><em>acpi=oldboot</em> -- only the parts of ACPI that are relevant for booting remain activated</li>
+ <li><em>acpi=off</em> -- switch off ACPI completely</li>
+ <li><em>acpi=force</em> -- switch on ACPI even if your BIOS is dated before 2000</li>
+</ul>
+</p>
+
+<p>
+Especially on new computers, it replaces the old
+<a href="#o_apm">apm</a> system.
+</p>
diff --git a/themes/openSUSE/help-install/pl/main::opt::o_apm.html b/themes/openSUSE/help-install/pl/main::opt::o_apm.html
new file mode 100644
index 0000000..7a119ac
--- /dev/null
+++ b/themes/openSUSE/help-install/pl/main::opt::o_apm.html
@@ -0,0 +1,21 @@
+<h3>
+<a name="o_apm">Opcje ogólne: apm</a>
+</h3>
+
+<p>
+APM is one of the two power management strategies used on current
+computers. It is mainly used with laptops for functions like suspend
+to disk, but it may also be responsible for switching off the
+computer after power down. APM relies on a correct working BIOS. If
+the BIOS is broken, APM may have only limited use or even prevent the
+computer from working. Therefore, it may be switched off with the
+parameter
+<ul>
+ <li><em>apm=off</em> -- switch off APM completely</li>
+</ul>
+</p>
+
+<p>
+Some very new computers may take more advantage from the newer
+<a href="#o_acpi">ACPI</a>.
+</p>
diff --git a/themes/openSUSE/help-install/pl/main::opt::o_ide.html b/themes/openSUSE/help-install/pl/main::opt::o_ide.html
new file mode 100644
index 0000000..69b7762
--- /dev/null
+++ b/themes/openSUSE/help-install/pl/main::opt::o_ide.html
@@ -0,0 +1,12 @@
+<h3>
+<a name="o_ide">Opcje jądra: ide</a>
+</h3>
+
+<p>
+IDE is, unlike SCSI, commonly used in most desktop workstations.
+To circumvent some hardware problems that occur with IDE systems, use the
+kernel parameter:
+<ul>
+ <li><em>ide=nodma</em> -- switch off DMA for IDE drives</li>
+</ul>
+</p>
diff --git a/themes/openSUSE/help-install/pl/main::opt::o_install.html b/themes/openSUSE/help-install/pl/main::opt::o_install.html
new file mode 100644
index 0000000..2f9b2d2
--- /dev/null
+++ b/themes/openSUSE/help-install/pl/main::opt::o_install.html
@@ -0,0 +1,30 @@
+<h3>
+<a name="o_install">Opcje instalatora: zainstaluj</a>
+</h3>
+
+<p>
+By default, the local CD-ROMs are searched for the installation source.
+For a network install, select the
+<em>Zainstaluj</em> option. Possible installation protocols are
+<ul>
+ <li>FTP</li>
+ <li>NFS</li>
+ <li>HTTP</li>
+</ul>
+</p>
+
+<p>
+The syntax to use is just like standard URLs. For example,
+if your server is found at 192.168.0.1 and you want to do an NFS-based
+install from the directory /install on this server, specify
+the source as follows:
+<ul>
+ <li>install=nfs://192.168.0.1/install</li>
+</ul>
+</p>
+
+<p>
+The network card will either be configured with <em>dhcp</em> or you
+must specify the parameters yourself as described in the
+<a href="#network">Opcje sieciowe</a>.
+</p>
diff --git a/themes/openSUSE/help-install/pl/main::opt::o_splash.html b/themes/openSUSE/help-install/pl/main::opt::o_splash.html
new file mode 100644
index 0000000..44804ae
--- /dev/null
+++ b/themes/openSUSE/help-install/pl/main::opt::o_splash.html
@@ -0,0 +1,12 @@
+<h3>
+<a name="o_splash">Opcje jądra: splash</a>
+</h3>
+
+<p>
+The splash screen is the picture shown during system start-up.
+<ul>
+ <li><em>splash = 0</em> -- The splash screen is switched off. This may be useful with very old monitors or if some error occurs.</li>
+ <li><em>splash=verbose</em> -- Activates splash, kernel and boot messages are still shown.</li>
+ <li><em>splash=silent</em> -- Activates splash, but no messages. Instead a progress bar is drawn.</li>
+</ul>
+</p>
diff --git a/themes/openSUSE/help-install/pl/main::opt::o_vnc.html b/themes/openSUSE/help-install/pl/main::opt::o_vnc.html
new file mode 100644
index 0000000..2017a05
--- /dev/null
+++ b/themes/openSUSE/help-install/pl/main::opt::o_vnc.html
@@ -0,0 +1,18 @@
+<a name="o_vncpassword"/>
+
+<h3>
+<a name="o_vnc">Opcje instalatora: vnc</a>
+</h3>
+
+<p>
+To enable the VNC installation, specify the
+parameters vnc and vncpassword:
+<ul>
+ <li><em>vnc=1 vncpassword=example</em></li>
+</ul>
+</p>
+
+<p>
+The VNC server will be started and you may control YaST2 over any VNC
+client from a remote system.
+</p>
diff --git a/themes/openSUSE/help-install/pl/main::rescue.html b/themes/openSUSE/help-install/pl/main::rescue.html
new file mode 100644
index 0000000..64cfe2f
--- /dev/null
+++ b/themes/openSUSE/help-install/pl/main::rescue.html
@@ -0,0 +1,10 @@
+<h3>
+<a name="rescue">System ratunkowy</a>
+</h3>
+
+<p>
+The <em>System ratunkowy</em> is a small RAM disk base system. From there,
+it is possible to make all kinds of changes to an installed system. Because
+only low-level tools are available in this system, it is intended for
+experts.
+</p>
diff --git a/themes/openSUSE/help-install/pl/main::videomode.html b/themes/openSUSE/help-install/pl/main::videomode.html
new file mode 100644
index 0000000..49d01ba
--- /dev/null
+++ b/themes/openSUSE/help-install/pl/main::videomode.html
@@ -0,0 +1,18 @@
+<h3>
+<a name="videomode">Wybór trybu wyświetlania</a>
+</h3>
+
+<p>
+Press <em>@@@fkey_video@@@</em> to get the list of video modes your graphics card
+supports. The highest mode your monitor can display is preselected.
+</p>
+
+<p>
+It is possible that your monitor cannot be detected automatically. In that
+case, select your preferred mode manually.
+</p>
+
+<p>
+If your system has problems with the graphics card during the
+installation, the <em>Tryb tekstowy</em> may be a usable work-around.
+</p>
diff --git a/themes/openSUSE/help-install/pl/navi.html b/themes/openSUSE/help-install/pl/navi.html
new file mode 100644
index 0000000..376310f
--- /dev/null
+++ b/themes/openSUSE/help-install/pl/navi.html
@@ -0,0 +1 @@
+<p>Wróć do <a href="#foobar">FOOBAR</a></p>
diff --git a/themes/openSUSE/help-install/pt/main.html b/themes/openSUSE/help-install/pt/main.html
new file mode 100644
index 0000000..9452e63
--- /dev/null
+++ b/themes/openSUSE/help-install/pt/main.html
@@ -0,0 +1,101 @@
+<h3>
+<a name="main">Ajuda da Rotina de Arranque</a>
+</h3>
+
+<p>Bem vindo a <em>@@@product@@@</em></p>
+
+<p>
+Use this menu to select the desired function. If you have
+problems navigating in this help system, press
+<em>@@@fkey_help@@@</em> to enter the <a href="#help">descrição</a> of the help
+system. The main functions in this menu are:
+</p>
+
+<p>
+<a href="#harddisk">Arrancar de Disco Rígido</a>: This selection will not do
+anything to the system. It only starts a previously installed
+operating system.
+</p>
+
+<p>
+<a href="#linux">Instalação</a>:
+This installation mode works on most machines. If you experience a
+system freeze during boot or problems with detection of your hardware
+components, such as disk controllers or network cards, try one of the
+following installation options.
+</p>
+
+<p>
+<a href="#noacpi">Instalação -- ACPI Desactivado</a>: Many of the
+currently-sold computers have incomplete or faulty ACPI
+implementations. This selection disables ACPI support in the
+kernel, but still enables many performance features, like DMA for IDE
+hard disks.
+</p>
+
+<p>
+<a href="#nolapic">Instalação -- APIC Local Desactivado</a>:
+If the normal installation fails, this might be due to the
+system hardware not supporting local APIC.
+If this seems to be the case, use this option to
+install without local APIC support.
+</p>
+
+<p>
+<a href="#failsafe">Instalação -- Definições Seguras</a>: If you were not
+successful with <em>Instalação</em>, this selection might
+solve the issue.
+</p>
+
+<p>
+<a href="#rescue">Sistema de Recuperação</a>: This boot image starts a small
+Linux system in RAM. This is useful if the system does not start properly.
+After booting this system, log in as root.
+</p>
+
+<p>
+<a href="#firmware">Testar Firmware</a>: Runs a BIOS test tool that validates
+ACPI and other parts of your BIOS.
+</p>
+
+<p>
+<a href="#memtest">Teste de Memória</a>: Memory testing is useful for more than
+checking installation of new memory modules. It is a stress test
+for a big part of your computer system and may indicate hardware
+problems.
+</p>
+
+<p>
+<a href="#opt">Opções de Arranque</a>: The boot options may change the
+behavior of your system completely. They are settings for
+the kernel.
+</p>
+
+<p>
+<a href="#help">@@@fkey_help@@@ Help</a>: This is context sensitive. It will
+show different screens depending on the active element of the
+boot screen. There is also a description of this help system
+available.
+</p>
+
+<p>
+<a href="#keytable">@@@fkey_lang@@@</a>: Set language and keyboard mapping
+used by the boot loader.
+</p>
+
+<p>
+<a href="#videomode">@@@fkey_video@@@ Modo de Video</a>: Here, choose between
+different screen resolutions while installing. If you encounter
+problems with the graphical installation, the <em>modo texto</em> may
+be a work-around for you.
+</p>
+
+<p>
+<a href="#install_src">@@@fkey_inst@@@ Fonte de Instalação</a>: Choose the
+installation source.
+</p>
+
+<p>
+<a href="#driverupdate">@@@fkey_dud@@@ Actualização do Driver</a>: For very new machines, a
+driver update may be needed to install the system.
+</p>
diff --git a/themes/openSUSE/help-install/pt/main::bits.html b/themes/openSUSE/help-install/pt/main::bits.html
new file mode 100644
index 0000000..f667d27
--- /dev/null
+++ b/themes/openSUSE/help-install/pt/main::bits.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="bits">Escolha do Tipo de Software</a>
+</h3>
+
+<p>
+You have the choice to install the 32-bit or 64-bit version of @@@product@@@.
+</p>
diff --git a/themes/openSUSE/help-install/pt/main::driverupdate.html b/themes/openSUSE/help-install/pt/main::driverupdate.html
new file mode 100644
index 0000000..dc64555
--- /dev/null
+++ b/themes/openSUSE/help-install/pt/main::driverupdate.html
@@ -0,0 +1,14 @@
+<h3>
+<a name="driverupdate">Actualização de Driver</a>
+</h3>
+
+<p>
+If you need a driver update floppy or CD-ROM, press <em>@@@fkey_dud@@@</em>. The
+boot loader asks you to insert the driver update medium after
+loading the Linux kernel.
+</p>
+
+<p>
+A driver update is typically a floppy with new versions of hardware
+drivers or bug fixes needed during installation.
+</p>
diff --git a/themes/openSUSE/help-install/pt/main::failsafe.html b/themes/openSUSE/help-install/pt/main::failsafe.html
new file mode 100644
index 0000000..6365672
--- /dev/null
+++ b/themes/openSUSE/help-install/pt/main::failsafe.html
@@ -0,0 +1,11 @@
+<h3>
+<a name="failsafe">Instalação -- Definições Seguras</a>
+</h3>
+
+<p>
+Select <em>Instalação -- Definições Seguras</em> if you encounter hangs
+while installing or irreproducible errors. This option disables DMA
+for IDE drives and all power management features.
+See also the kernel options for <a href="#o_apm">apm</a>,
+<a href="#o_acpi">acpi</a> and <a href="#o_ide">ide</a>.
+</p>
diff --git a/themes/openSUSE/help-install/pt/main::firmware.html b/themes/openSUSE/help-install/pt/main::firmware.html
new file mode 100644
index 0000000..24303da
--- /dev/null
+++ b/themes/openSUSE/help-install/pt/main::firmware.html
@@ -0,0 +1,9 @@
+<h3>
+<a name="firmware">Testar Firmware</a>
+</h3>
+
+<p>
+Starts a BIOS checker that validates the ACPI tables
+and many other parts of your BIOS.
+Test results can be stored on usb disk or saved via network.
+</p>
diff --git a/themes/openSUSE/help-install/pt/main::harddisk.html b/themes/openSUSE/help-install/pt/main::harddisk.html
new file mode 100644
index 0000000..6a8f629
--- /dev/null
+++ b/themes/openSUSE/help-install/pt/main::harddisk.html
@@ -0,0 +1,16 @@
+<h3>
+<a name="harddisk">Arrancar de Disco Rígido</a>
+</h3>
+
+<p>
+Select <em>Arrancar SO instalado</em> to start the system installed on
+your local hard disk. This system must be installed properly, because
+only the MBR (Master Boot Record) on the first hard disk is started.
+The device ID of the first hard disk is provided by the BIOS of
+the computer.
+</p>
+
+<p>
+Use this if you forgot to remove the CD or DVD from your
+drive and want to start the computer from the hard disk.
+</p>
diff --git a/themes/openSUSE/help-install/pt/main::help.html b/themes/openSUSE/help-install/pt/main::help.html
new file mode 100644
index 0000000..e7d474b
--- /dev/null
+++ b/themes/openSUSE/help-install/pt/main::help.html
@@ -0,0 +1,25 @@
+<h3>
+<a name="help">Utilizando o Sistema de Ajuda</a>
+</h3>
+
+<p>
+The boot loader online help is context sensitive. It gives information
+about the selected menu item or, if you are editing boot options,
+it tries to look up information about the option in which the cursor is
+positioned.
+</p>
+
+<p>
+Navigation Keys
+<ul>
+ <li><em>Seta para Cima</em>: highlight previous link</li>
+ <li><em>Seta para Baixo</em>: highlight next link</li>
+ <li><em>Seta para a Esquerda</em>, <em>Backspace</em>: return to previous topic</li>
+ <li><em>Seta para a Direita</em>, <em>Enter</em>, <em>Barra de Espaços</em>: follow link</li>
+ <li><em>Page Up</em>: scroll up one page</li>
+ <li><em>Page Down</em>: scroll down one page</li>
+ <li><em>Home</em>: go to page start</li>
+ <li><em>End</em>: go to page end</li>
+ <li><em>Esc</em>: leave help</li>
+</ul>
+</p>
diff --git a/themes/openSUSE/help-install/pt/main::install_src.html b/themes/openSUSE/help-install/pt/main::install_src.html
new file mode 100644
index 0000000..7b68766
--- /dev/null
+++ b/themes/openSUSE/help-install/pt/main::install_src.html
@@ -0,0 +1,12 @@
+<h3>
+<a name="install_src">Origem de Instalação</a>
+</h3>
+
+<p>
+Press <em>@@@fkey_inst@@@</em> to choose an installation source.
+</p>
+
+<p>
+This is the same as using the <a href="#o_install">Instalar</a>
+boot option.
+</p>
diff --git a/themes/openSUSE/help-install/pt/main::keytable.html b/themes/openSUSE/help-install/pt/main::keytable.html
new file mode 100644
index 0000000..7177a4d
--- /dev/null
+++ b/themes/openSUSE/help-install/pt/main::keytable.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="keytable">Selecção de Teclado e Idioma</a>
+</h3>
+
+<p>
+Press <em>@@@fkey_lang@@@</em> to change language and keyboard layout the boot loader uses.
+</p>
diff --git a/themes/openSUSE/help-install/pt/main::linux.html b/themes/openSUSE/help-install/pt/main::linux.html
new file mode 100644
index 0000000..caea13b
--- /dev/null
+++ b/themes/openSUSE/help-install/pt/main::linux.html
@@ -0,0 +1,10 @@
+<h3>
+<a name="linux">Instalação</a>
+</h3>
+
+<p>
+Select <em>Instalação</em> to start the default installation. The
+<a href="#opt">Opções de Arranque</a> entered are used in the
+start-up. This item activates many features of commonly available
+hardware.
+</p>
diff --git a/themes/openSUSE/help-install/pt/main::memtest.html b/themes/openSUSE/help-install/pt/main::memtest.html
new file mode 100644
index 0000000..19d4bee
--- /dev/null
+++ b/themes/openSUSE/help-install/pt/main::memtest.html
@@ -0,0 +1,14 @@
+<h3>
+<a name="memtest">Teste de Memória</a>
+</h3>
+
+<p>
+The included <em>Teste de Memória</em> provides good possibilities to
+stress test the hardware of a system. Its main purpose is to detect
+broken RAM, but it also stresses many other parts of the system.
+</p>
+
+<p>
+There is no guarantee that the memory is good if no errors are
+found, although most of memory defects will be found.
+</p>
diff --git a/themes/openSUSE/help-install/pt/main::noacpi.html b/themes/openSUSE/help-install/pt/main::noacpi.html
new file mode 100644
index 0000000..55e9307
--- /dev/null
+++ b/themes/openSUSE/help-install/pt/main::noacpi.html
@@ -0,0 +1,24 @@
+<h3>
+<a name="noacpi">Instalação -- ACPI Desactivado</a>
+</h3>
+
+<p>
+Current hardware usually requires ACPI (Advanced Configuration and Power Interface)
+to control the interrupt handling.
+ACPI completely replaces the old APM system.
+</p>
+
+<p>
+Select <em>Instalação -- ACPI Desactivado</em> if you encounter
+problems during boot of the kernel. Known problems with machines that
+have problems with ACPI are:
+<ul>
+ <li>kernel freezes when booting</li>
+ <li>PCI Cards are not detected or initialized properly</li>
+</ul>
+</p>
+
+<p>
+You may also try the <a href="#firmware">Testar Firmware</a> boot option
+and look at the test results of the ACPI validation.
+</p>
diff --git a/themes/openSUSE/help-install/pt/main::nolapic.html b/themes/openSUSE/help-install/pt/main::nolapic.html
new file mode 100644
index 0000000..92e3554
--- /dev/null
+++ b/themes/openSUSE/help-install/pt/main::nolapic.html
@@ -0,0 +1,14 @@
+<h3>
+<a name="nolapic">Instalação -- APIC Local Desactivado</a>
+</h3>
+
+<p>
+Normally there are no problems with the APIC (Advanced Programmable Interrupt
+Controller). But if you seem to have some, try this option to boot
+without local APIC support.
+</p>
+
+<p>
+Please don't confuse this with <a href="#noacpi">ACPI</a>
+(Advanced Configuration and Power Interface).
+</p>
diff --git a/themes/openSUSE/help-install/pt/main::opt.html b/themes/openSUSE/help-install/pt/main::opt.html
new file mode 100644
index 0000000..231f37b
--- /dev/null
+++ b/themes/openSUSE/help-install/pt/main::opt.html
@@ -0,0 +1,28 @@
+<h3>
+<a name="opt">Opções de Arranque</a>
+</h3>
+
+<p>
+There are two types of boot options available. First, there are
+options that affect the installer. Second, there are kernel
+options. Some of the more common options are:
+</p>
+
+<p>
+a) installer options
+<ul>
+ <li><a href="#o_install">Instalar</a> -- select an installation source</li>
+ <li><a href="#network">opções de rede</a> -- the network options</li>
+ <li><a href="#o_vnc">opções vnc</a> -- options for installation via VNC</li>
+</ul>
+</p>
+
+<p>
+b) kernel options
+<ul>
+ <li><a href="#o_splash">splash</a> -- influence the behavior of the splash screen</li>
+ <li><a href="#o_apm">apm</a> -- toggle power management</li>
+ <li><a href="#o_acpi">acpi</a> -- advanced configuration and power interface</li>
+ <li><a href="#o_ide">ide</a> -- control the IDE subsystem</li>
+</ul>
+</p>
diff --git a/themes/openSUSE/help-install/pt/main::opt::network.html b/themes/openSUSE/help-install/pt/main::opt::network.html
new file mode 100644
index 0000000..53c9413
--- /dev/null
+++ b/themes/openSUSE/help-install/pt/main::opt::network.html
@@ -0,0 +1,35 @@
+<a name="o_hostip"/>
+<a name="o_netmask"/>
+<a name="o_gateway"/>
+
+<h3>
+<a name="network">Opções de Instalador: Opções de Rede</a>
+</h3>
+
+<p>
+It is possible to configure the network interface right now. The
+hardware will be detected later by YaST2. The minimum set of options
+to configure your network card consists of host IP and netmask. For
+example:
+<ul>
+ <li>hostip=192.168.0.10 netmask=255.255.255.0</li>
+</ul>
+</p>
+
+<p>
+or in a shorter form:
+<ul>
+ <li>hostip=192.168.0.10/24</li>
+</ul>
+</p>
+
+<p>
+If you specified a <a href="#o_install">instalação por rede</a> and do
+not specify both of these options, the installer tries to configure
+the network interface with <em>dhcp</em>. If you need a default
+gateway, specify this with the option <em>gateway</em>. For
+example:
+<ul>
+ <li>gateway=192.168.0.8</li>
+</ul>
+</p>
diff --git a/themes/openSUSE/help-install/pt/main::opt::o_acpi.html b/themes/openSUSE/help-install/pt/main::opt::o_acpi.html
new file mode 100644
index 0000000..7989b7f
--- /dev/null
+++ b/themes/openSUSE/help-install/pt/main::opt::o_acpi.html
@@ -0,0 +1,23 @@
+<h3>
+<a name="o_acpi">Opções de Kernel: acpi</a>
+</h3>
+
+<p>
+ACPI (Advanced Configuration and Power Interface) is a
+standard that defines power and configuration management interfaces
+between an operating system and the BIOS. By default, <em>acpi</em> is
+switched on when a BIOS is detected that is newer than from year
+2000. There are several commonly
+used parameters to control the behavior of ACPI:
+<ul>
+ <li><em>pci=noacpi</em> -- do not use ACPI to route PCI interrupts</li>
+ <li><em>acpi=oldboot</em> -- only the parts of ACPI that are relevant for booting remain activated</li>
+ <li><em>acpi=off</em> -- switch off ACPI completely</li>
+ <li><em>acpi=force</em> -- switch on ACPI even if your BIOS is dated before 2000</li>
+</ul>
+</p>
+
+<p>
+Especially on new computers, it replaces the old
+<a href="#o_apm">apm</a> system.
+</p>
diff --git a/themes/openSUSE/help-install/pt/main::opt::o_apm.html b/themes/openSUSE/help-install/pt/main::opt::o_apm.html
new file mode 100644
index 0000000..d48567d
--- /dev/null
+++ b/themes/openSUSE/help-install/pt/main::opt::o_apm.html
@@ -0,0 +1,21 @@
+<h3>
+<a name="o_apm">Opções de Kernel: apm</a>
+</h3>
+
+<p>
+APM is one of the two power management strategies used on current
+computers. It is mainly used with laptops for functions like suspend
+to disk, but it may also be responsible for switching off the
+computer after power down. APM relies on a correct working BIOS. If
+the BIOS is broken, APM may have only limited use or even prevent the
+computer from working. Therefore, it may be switched off with the
+parameter
+<ul>
+ <li><em>apm=off</em> -- switch off APM completely</li>
+</ul>
+</p>
+
+<p>
+Some very new computers may take more advantage from the newer
+<a href="#o_acpi">ACPI</a>.
+</p>
diff --git a/themes/openSUSE/help-install/pt/main::opt::o_ide.html b/themes/openSUSE/help-install/pt/main::opt::o_ide.html
new file mode 100644
index 0000000..637dafd
--- /dev/null
+++ b/themes/openSUSE/help-install/pt/main::opt::o_ide.html
@@ -0,0 +1,12 @@
+<h3>
+<a name="o_ide">Opções de Kernel: ide</a>
+</h3>
+
+<p>
+IDE is, unlike SCSI, commonly used in most desktop workstations.
+To circumvent some hardware problems that occur with IDE systems, use the
+kernel parameter:
+<ul>
+ <li><em>ide=nodma</em> -- switch off DMA for IDE drives</li>
+</ul>
+</p>
diff --git a/themes/openSUSE/help-install/pt/main::opt::o_install.html b/themes/openSUSE/help-install/pt/main::opt::o_install.html
new file mode 100644
index 0000000..e0a810b
--- /dev/null
+++ b/themes/openSUSE/help-install/pt/main::opt::o_install.html
@@ -0,0 +1,30 @@
+<h3>
+<a name="o_install">Opções de Instalador: instalar</a>
+</h3>
+
+<p>
+By default, the local CD-ROMs are searched for the installation source.
+For a network install, select the
+<em>Instalar</em> option. Possible installation protocols are
+<ul>
+ <li>FTP</li>
+ <li>NFS</li>
+ <li>HTTP</li>
+</ul>
+</p>
+
+<p>
+The syntax to use is just like standard URLs. For example,
+if your server is found at 192.168.0.1 and you want to do an NFS-based
+install from the directory /install on this server, specify
+the source as follows:
+<ul>
+ <li>install=nfs://192.168.0.1/install</li>
+</ul>
+</p>
+
+<p>
+The network card will either be configured with <em>dhcp</em> or you
+must specify the parameters yourself as described in the
+<a href="#network">opções de rede</a>.
+</p>
diff --git a/themes/openSUSE/help-install/pt/main::opt::o_splash.html b/themes/openSUSE/help-install/pt/main::opt::o_splash.html
new file mode 100644
index 0000000..9e2d4ef
--- /dev/null
+++ b/themes/openSUSE/help-install/pt/main::opt::o_splash.html
@@ -0,0 +1,12 @@
+<h3>
+<a name="o_splash">Opções de Kernel: splash</a>
+</h3>
+
+<p>
+The splash screen is the picture shown during system start-up.
+<ul>
+ <li><em>splash=0</em> -- The splash screen is switched off. This may be useful with very old monitors or if some error occurs.</li>
+ <li><em>splash=verbose</em> -- Activates splash, kernel and boot messages are still shown.</li>
+ <li><em>splash=silent</em> -- Activates splash, but no messages. Instead a progress bar is drawn.</li>
+</ul>
+</p>
diff --git a/themes/openSUSE/help-install/pt/main::opt::o_vnc.html b/themes/openSUSE/help-install/pt/main::opt::o_vnc.html
new file mode 100644
index 0000000..3eaa311
--- /dev/null
+++ b/themes/openSUSE/help-install/pt/main::opt::o_vnc.html
@@ -0,0 +1,18 @@
+<a name="o_vncpassword"/>
+
+<h3>
+<a name="o_vnc">Opções de Instalador: vnc</a>
+</h3>
+
+<p>
+To enable the VNC installation, specify the
+parameters vnc and vncpassword:
+<ul>
+ <li><em>vnc=1 vncpassword=exemplo</em></li>
+</ul>
+</p>
+
+<p>
+The VNC server will be started and you may control YaST2 over any VNC
+client from a remote system.
+</p>
diff --git a/themes/openSUSE/help-install/pt/main::rescue.html b/themes/openSUSE/help-install/pt/main::rescue.html
new file mode 100644
index 0000000..a904779
--- /dev/null
+++ b/themes/openSUSE/help-install/pt/main::rescue.html
@@ -0,0 +1,10 @@
+<h3>
+<a name="rescue">Sistema de Recuperação</a>
+</h3>
+
+<p>
+The <em>Sistema de Recuperação</em> is a small RAM disk base system. From there,
+it is possible to make all kinds of changes to an installed system. Because
+only low-level tools are available in this system, it is intended for
+experts.
+</p>
diff --git a/themes/openSUSE/help-install/pt/main::videomode.html b/themes/openSUSE/help-install/pt/main::videomode.html
new file mode 100644
index 0000000..1b2f0fd
--- /dev/null
+++ b/themes/openSUSE/help-install/pt/main::videomode.html
@@ -0,0 +1,18 @@
+<h3>
+<a name="videomode">Selecção de Modo de Vídeo</a>
+</h3>
+
+<p>
+Press <em>@@@fkey_video@@@</em> to get the list of video modes your graphics card
+supports. The highest mode your monitor can display is preselected.
+</p>
+
+<p>
+It is possible that your monitor cannot be detected automatically. In that
+case, select your preferred mode manually.
+</p>
+
+<p>
+If your system has problems with the graphics card during the
+installation, the <em>modo texto</em> may be a usable work-around.
+</p>
diff --git a/themes/openSUSE/help-install/pt/navi.html b/themes/openSUSE/help-install/pt/navi.html
new file mode 100644
index 0000000..10a6dec
--- /dev/null
+++ b/themes/openSUSE/help-install/pt/navi.html
@@ -0,0 +1 @@
+<p>Voltar para <a href="#foobar">FOOBAR</a></p>
diff --git a/themes/openSUSE/help-install/pt_BR/main.html b/themes/openSUSE/help-install/pt_BR/main.html
new file mode 100644
index 0000000..16cd914
--- /dev/null
+++ b/themes/openSUSE/help-install/pt_BR/main.html
@@ -0,0 +1,35 @@
+<h3>
+<a name="main">Ajuda do carregador de inicialização</a>
+</h3>
+
+<p>Bem-vindo ao <em>@@@product@@@</em></p>
+
+<p>Use este menu para selecionar a função desejada. Se você tiver problemas ao navegar neste sistema de ajuda, pressione <em>@@@fkey_help@@@</em> para acessar a <a href="#help">descrição</a> do sistema de ajuda. As principais funções deste menu são:</p>
+
+<p><a href="#harddisk">Inicializar a partir do disco rígido</a>: Esta seleção não fará nada no sistema. Ela apenas inicia um sistema operacional instalado anteriormente.</p>
+
+<p><a href="#linux">Instalação</a>: Este modo de instalação funciona na maioria das máquinas. Se o sistema travar durante a inicialização ou se houver problemas na detecção dos componentes de hardware, como controladores de disco ou placas de rede, tente uma das seguintes opções de instalação.</p>
+
+<p><a href="#noacpi">Instalação -- ACPI desabilitada</a>: Muitos dos computadores vendidos atualmente possuem implementações de ACPI incompletas ou defeituosas. Esta seleção desabilita o suporte a ACPI no kernel, mas ainda habilita muitos recursos de desempenho, como o DMA para os discos rígidos IDE.</p>
+
+<p><a href="#nolapic">Instalação -- APIC local desabilitado</a>: Se a instalação normal falhar, isto pode ser devido ao hardware do sistema não suportar o APIC local. Se isto parecer ser o caso, use esta opção para instalar sem suporte ao APIC local.</p>
+
+<p><a href="#failsafe">Instalação -- Configurações seguras</a>: Se você não tiver obtido sucesso com <em>Instalação</em>, esta seleção talvez resolva o problema.</p>
+
+<p><a href="#rescue">Sistema de recuperação</a>: Essa imagem de inicialização inicia um pequeno sistema Linux na RAM. Isso é útil se o sistema não for iniciado corretamente. Após inicializar esse sistema, efetue o login como root.</p>
+
+<p><a href="#firmware">Teste de firmware</a>: Executa uma ferramenta de teste da BIOS que valida a ACPI e outras partes da BIOS.</p>
+
+<p><a href="#memtest">Teste de memória</a>: O teste de memória é útil não só para verificar a instalação de novos módulos de memória, mas também para testar uma grande parte de seu computador e pode indicar problemas de hardware.</p>
+
+<p><a href="#opt">Opções de inicialização</a>: As opções de inicialização podem alterar completamente o comportamento de seu sistema. Elas são as configurações para o kernel.</p>
+
+<p><a href="#help">@@@fkey_help@@@ Ajuda</a>: Esta opção é sensível ao contexto. Ela exibirá telas diferentes dependendo do elemento ativo da tela de inicialização. Também há uma descrição desse sistema de ajuda disponível.</p>
+
+<p><a href="#keytable">@@@fkey_lang@@@</a>: Definir o idioma e o mapeamento do teclado usados pelo carregador de inicialização.</p>
+
+<p><a href="#videomode">@@@fkey_video@@@ Modo de vídeo</a>: Aqui, escolha entre as diferentes resoluções de tela durante a instalação. Se houver problemas com a instalação gráfica, o <em>modo de texto</em> poderá ser uma solução para você.</p>
+
+<p><a href="#install_src">@@@fkey_inst@@@ Fonte de instalação</a>: Escolher a fonte de instalação.</p>
+
+<p><a href="#driverupdate">@@@fkey_dud@@@ Atualização de driver</a>: Para máquinas mais novas, pode ser necessária uma atualização de driver para instalar o sistema.</p>
diff --git a/themes/openSUSE/help-install/pt_BR/main::bits.html b/themes/openSUSE/help-install/pt_BR/main::bits.html
new file mode 100644
index 0000000..6ca3417
--- /dev/null
+++ b/themes/openSUSE/help-install/pt_BR/main::bits.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="bits">Seleção do tipo de software</a>
+</h3>
+
+<p>Você tem a opção de instalar a versão de 32 ou 64 bits do @@@product@@@.</p>
diff --git a/themes/openSUSE/help-install/pt_BR/main::driverupdate.html b/themes/openSUSE/help-install/pt_BR/main::driverupdate.html
new file mode 100644
index 0000000..94ad42d
--- /dev/null
+++ b/themes/openSUSE/help-install/pt_BR/main::driverupdate.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="driverupdate">Atualização de driver</a>
+</h3>
+
+<p>Se você precisar de um disquete ou CD-ROM de atualização de driver, pressione <em>@@@fkey_dud@@@</em>. O carregador de inicialização pedirá que você insira a mídia de atualização de driver após carregar o kernel do Linux.</p>
+
+<p>Uma atualização de driver é geralmente um disquete com novas versões de drivers de hardware ou correções de erros necessárias durante a instalação.</p>
diff --git a/themes/openSUSE/help-install/pt_BR/main::failsafe.html b/themes/openSUSE/help-install/pt_BR/main::failsafe.html
new file mode 100644
index 0000000..aa19885
--- /dev/null
+++ b/themes/openSUSE/help-install/pt_BR/main::failsafe.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="failsafe">Instalação -- Configurações seguras</a>
+</h3>
+
+<p>Selecione <em>Instalação -- Configurações seguras</em> se ocorrerem travamentos ou erros irreproduzíveis durante a instalação. Essa opção desabilita o DMA para unidades IDE e todos os recursos de gerenciamento de energia. Consulte também as opções do kernel para <a href="#o_apm">apm</a>, <a href="#o_acpi">acpi</a> e <a href="#o_ide">ide</a>.</p>
diff --git a/themes/openSUSE/help-install/pt_BR/main::firmware.html b/themes/openSUSE/help-install/pt_BR/main::firmware.html
new file mode 100644
index 0000000..716fe48
--- /dev/null
+++ b/themes/openSUSE/help-install/pt_BR/main::firmware.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="firmware">Teste de firmware</a>
+</h3>
+
+<p>Inicia um verificador de BIOS que valida as tabelas ACPI e várias outras partes da BIOS. Os resultados do teste podem ser armazenados em um disco usb ou salvos via rede.</p>
diff --git a/themes/openSUSE/help-install/pt_BR/main::harddisk.html b/themes/openSUSE/help-install/pt_BR/main::harddisk.html
new file mode 100644
index 0000000..b751baf
--- /dev/null
+++ b/themes/openSUSE/help-install/pt_BR/main::harddisk.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="harddisk">Inicializar a partir do disco rígido</a>
+</h3>
+
+<p>Selecione <em>Iniciar o sistema operacional instalado</em> para iniciar o sistema instalado no disco rígido local. Esse sistema deve estar instalado corretamente, pois apenas o MBR (Master Boot Record) no primeiro disco rígido é iniciado. O ID do dispositivo do primeiro disco rígido é fornecido pela BIOS do computador.</p>
+
+<p>Utilize esta opção se você tiver esquecido de remover o CD ou o DVD da unidade e deseja iniciar o computador a partir do disco rígido.</p>
diff --git a/themes/openSUSE/help-install/pt_BR/main::help.html b/themes/openSUSE/help-install/pt_BR/main::help.html
new file mode 100644
index 0000000..48cc2f1
--- /dev/null
+++ b/themes/openSUSE/help-install/pt_BR/main::help.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="help">Usando o sistema de ajuda</a>
+</h3>
+
+<p>A ajuda online do carregador de inicialização é sensível ao contexto. Ela fornece informações sobre o item de menu selecionado ou se você estiver editando as opções de inicialização, ela tenta procurar informações sobre a opção em que o cursor está posicionado.</p>
+
+<p>Teclas de navegação <ul><li><em>Seta para cima</em>: realçar o link anterior</li><li><em>Seta para baixo</em>: realçar o próximo link</li><li><em>Seta para a esquerda</em>, <em>Tecla backspace</em>: retornar ao tópico anterior</li><li><em>Seta para a direita</em>, <em>Enter</em>, <em>Espaço</em>: seguir o link</li><li><em>Page up</em>: rolar uma página para cima</li><li><em>Page down</em>: rolar uma página para baixo</li><li><em>Pasta do usuário</em>: ir para o início da página</li><li><em>End</em>: ir para o final da página</li><li><em>Esc</em>: sair da ajuda</li></ul></p>
diff --git a/themes/openSUSE/help-install/pt_BR/main::install_src.html b/themes/openSUSE/help-install/pt_BR/main::install_src.html
new file mode 100644
index 0000000..86e10ca
--- /dev/null
+++ b/themes/openSUSE/help-install/pt_BR/main::install_src.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="install_src">Fonte de instalação</a>
+</h3>
+
+<p>Pressione <em>@@@fkey_inst@@@</em> para selecionar uma fonte de instalação.</p>
+
+<p>Isto é o mesmo que usar a opção de inicialização <a href="#o_install">instalar</a>.</p>
diff --git a/themes/openSUSE/help-install/pt_BR/main::keytable.html b/themes/openSUSE/help-install/pt_BR/main::keytable.html
new file mode 100644
index 0000000..27fe51f
--- /dev/null
+++ b/themes/openSUSE/help-install/pt_BR/main::keytable.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="keytable">Seleção de idioma e layout de teclado</a>
+</h3>
+
+<p>Pressione <em>@@@fkey_lang@@@</em> para alterar o idioma e o layout de teclado usados pelo carregador de inicialização.</p>
diff --git a/themes/openSUSE/help-install/pt_BR/main::linux.html b/themes/openSUSE/help-install/pt_BR/main::linux.html
new file mode 100644
index 0000000..5c13b46
--- /dev/null
+++ b/themes/openSUSE/help-install/pt_BR/main::linux.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="linux">Instalação</a>
+</h3>
+
+<p>Selecione <em>Instalação</em> para iniciar a instalação padrão. As <a href="#opt">opções de inicialização</a> digitadas são usadas na inicialização. Esse item ativa muitos recursos de hardware frequentemente disponíveis.</p>
diff --git a/themes/openSUSE/help-install/pt_BR/main::memtest.html b/themes/openSUSE/help-install/pt_BR/main::memtest.html
new file mode 100644
index 0000000..5d99b61
--- /dev/null
+++ b/themes/openSUSE/help-install/pt_BR/main::memtest.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="memtest">Teste de memória</a>
+</h3>
+
+<p>O <em>Teste de memória</em> incluído oferece boas possibilidades de executar um teste de stress no hardware de um sistema. Seu objetivo principal é detectar memórias RAM com defeitos, mas também testa muitas outras partes do sistema.</p>
+
+<p>Não há garantia de que a memória esteja boa se não forem encontrados erros, embora a maioria dos defeitos de memória seja encontrada.</p>
diff --git a/themes/openSUSE/help-install/pt_BR/main::noacpi.html b/themes/openSUSE/help-install/pt_BR/main::noacpi.html
new file mode 100644
index 0000000..1f2682b
--- /dev/null
+++ b/themes/openSUSE/help-install/pt_BR/main::noacpi.html
@@ -0,0 +1,9 @@
+<h3>
+<a name="noacpi">Instalação -- ACPI desabilitada</a>
+</h3>
+
+<p>O hardware mais novo geralmente requer que a ACPI (Advanced Configuration and Power Interface - Interface Avançada de Configuração e Energia) controle o gerenciamento de interrupções. A ACPI substitui completamente o antigo sistema APM.</p>
+
+<p>Selecione <em>Instalação -- ACPI desabilitada</em> se você encontrar problemas durante a inicialização do kernel. Os problemas conhecidos de máquinas que têm problemas com ACPI são: <ul><li>o kernel trava durante a inicialização</li><li>Placas PCI não são detectadas ou inicializadas corretamente</li></ul></p>
+
+<p>Você também pode tentar a opção de inicialização <a href="#firmware">Teste de firmware</a> e ver os resultados do teste de validação da ACPI.</p>
diff --git a/themes/openSUSE/help-install/pt_BR/main::nolapic.html b/themes/openSUSE/help-install/pt_BR/main::nolapic.html
new file mode 100644
index 0000000..2fe306d
--- /dev/null
+++ b/themes/openSUSE/help-install/pt_BR/main::nolapic.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="nolapic">Instalação -- APIC local desabilitado</a>
+</h3>
+
+<p>Normalmente não há problemas com o APIC (Advanced Programmable Interrupt Controller - Controlador avançado de interrupção programável). Mas, se você acha que há algum problema, tente esta opção para inicializar sem o suporte à APIC local.</p>
+
+<p>Por favor, não confunda isto com <a href="#noacpi">ACPI</a> (ACPI - Interface avançada de configuração e energia).</p>
diff --git a/themes/openSUSE/help-install/pt_BR/main::opt.html b/themes/openSUSE/help-install/pt_BR/main::opt.html
new file mode 100644
index 0000000..b1f0cad
--- /dev/null
+++ b/themes/openSUSE/help-install/pt_BR/main::opt.html
@@ -0,0 +1,9 @@
+<h3>
+<a name="opt">Opções de inicialização</a>
+</h3>
+
+<p>Há dois tipos de opções de inicialização disponíveis. Primeiro, há opções que afetam o instalador. Em segundo, há as opções do kernel. Algumas das opções mais comuns são:</p>
+
+<p>a) opções do instalador <ul><li><a href="#o_install">instalar</a> -- selecionar uma fonte de instalação</li><li><a href="#network">opções de rede</a> -- as opções de rede</li><li><a href="#o_vnc">opções do vnc</a> -- opções para instalação via VNC</li></ul></p>
+
+<p>b) opções do kernel <ul><li><a href="#o_splash">tela de inicialização</a> -- influenciar o comportamento da tela de inicialização</li><li><a href="#o_apm">apm</a> -- alternar o gerenciamento de energia</li><li><a href="#o_acpi">acpi</a> -- interface avançada de configuração e energia</li><li><a href="#o_ide">ide</a> -- controlar o subsistema IDE</li></ul></p>
diff --git a/themes/openSUSE/help-install/pt_BR/main::opt::network.html b/themes/openSUSE/help-install/pt_BR/main::opt::network.html
new file mode 100644
index 0000000..550eff7
--- /dev/null
+++ b/themes/openSUSE/help-install/pt_BR/main::opt::network.html
@@ -0,0 +1,13 @@
+<a name="o_hostip"/>
+<a name="o_netmask"/>
+<a name="o_gateway"/>
+
+<h3>
+<a name="network">Opções do instalador: opções de rede</a>
+</h3>
+
+<p>É possível configurar a interface de rede agora. O hardware será detectado mais tarde pelo YaST2. O conjunto mínimo de opções para configurar a placa de rede consiste em máscara de rede e IP de host. Por exemplo: <ul><li>hostip=192.168.0.10 netmask=255.255.255.0</li></ul></p>
+
+<p>ou numa forma mais curta: <ul><li>hostip=192.168.0.10/24</li></ul></p>
+
+<p>Se você tiver especificado uma <a href="#o_install">instalação baseada em rede</a> e não especificar essas duas opções, o instalador tentará configurar a interface de rede com <em>dhcp</em>. Se precisar de um gateway padrão, especifique-o com a opção <em>gateway</em>. Por exemplo: <ul><li>gateway=192.168.0.8</li></ul></p>
diff --git a/themes/openSUSE/help-install/pt_BR/main::opt::o_acpi.html b/themes/openSUSE/help-install/pt_BR/main::opt::o_acpi.html
new file mode 100644
index 0000000..93987ad
--- /dev/null
+++ b/themes/openSUSE/help-install/pt_BR/main::opt::o_acpi.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="o_acpi">Opções do kernel: acpi</a>
+</h3>
+
+<p>O ACPI (Advanced Configuration and Power Interface - Interface avançada de configuração e energia) é um padrão que define as interfaces de gerenciamento de configuração e energia entre o sistema operacional e a BIOS. Por padrão, <em>acpi</em> é ativado quando é detectado uma BIOS mais recente do que o ano 2000. Há vários parâmetros normalmente usados para controlar o comportamento do ACPI: <ul><li><em>pci=noacpi</em> -- não usar o ACPI para rotear as interrupções PCI</li><li><em>acpi=oldboot</em> -- apenas as partes da ACPI que são relevantes para a inicialização permanecem ativadas</li><li><em>acpi=off</em> -- desativar o ACPI completamente</li><li><em>acpi=force</em> -- ativar o ACPI mesmo que a BIOS tenha data anterior a 2000</li></ul></p>
+
+<p>Especialmente em novos computadores, ele substitui o antigo sistema <a href="#o_apm">apm</a>.</p>
diff --git a/themes/openSUSE/help-install/pt_BR/main::opt::o_apm.html b/themes/openSUSE/help-install/pt_BR/main::opt::o_apm.html
new file mode 100644
index 0000000..62c87bc
--- /dev/null
+++ b/themes/openSUSE/help-install/pt_BR/main::opt::o_apm.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="o_apm">Opções do kernel: apm</a>
+</h3>
+
+<p>O APM é uma das duas estratégias de gerenciamento de energia usadas nos computadores atuais. Ele é usado principalmente com notebooks para funções como suspender para o disco, mas também pode ser responsável pela desativação do computador após uma queda de energia. O APM depende do correto funcionamento da BIOS. Se a BIOS estiver danificada, o APM pode ter seu uso limitado ou até pode impedir o funcionamento do computador. Portanto, ele pode ser desativado com o parâmetro <ul><li><em>apm=off</em> -- desativar o ACPI completamente</li></ul></p>
+
+<p>Alguns computadores mais novos podem tirar mais proveito do <a href="#o_acpi">ACPI</a> mais recente.</p>
diff --git a/themes/openSUSE/help-install/pt_BR/main::opt::o_ide.html b/themes/openSUSE/help-install/pt_BR/main::opt::o_ide.html
new file mode 100644
index 0000000..d3a387c
--- /dev/null
+++ b/themes/openSUSE/help-install/pt_BR/main::opt::o_ide.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="o_ide">Opções do kernel: ide</a>
+</h3>
+
+<p>O IDE é, diferente do SCSI, comumente utilizado na maioria das estações de trabalho. Para contornar alguns problemas de hardware que ocorrem com os sistemas IDE, use o parâmetro do kernel: <ul><li><em>ide=nodma</em> -- desativar o DMA para unidades IDE</li></ul></p>
diff --git a/themes/openSUSE/help-install/pt_BR/main::opt::o_install.html b/themes/openSUSE/help-install/pt_BR/main::opt::o_install.html
new file mode 100644
index 0000000..cf87178
--- /dev/null
+++ b/themes/openSUSE/help-install/pt_BR/main::opt::o_install.html
@@ -0,0 +1,9 @@
+<h3>
+<a name="o_install">Opções do instalador: instalar</a>
+</h3>
+
+<p>Por padrão, a fonte de instalação é pesquisada nos CD-ROMs locais. Para uma instalação pela rede, selecione a opção <em>instalar</em>. Os protocolos de instalação possíveis são <ul><li>FTP</li><li>NFS</li><li>HTTP</li></ul></p>
+
+<p>A sintaxe a ser usada é semelhante ao padrão dos URLs. Por exemplo, se o servidor for encontrado em 192.168.0.1 e você desejar fazer uma instalação baseada em NFS do diretório /install desse servidor, especifique a fonte da seguinte forma: <ul><li>install=nfs://192.168.0.1/install</li></ul></p>
+
+<p>A placa de rede ou será configurada com <em>dhcp</em> ou você mesmo deverá especificar os parâmetros, conforme descrito em <a href="#network">opções de rede</a>.</p>
diff --git a/themes/openSUSE/help-install/pt_BR/main::opt::o_splash.html b/themes/openSUSE/help-install/pt_BR/main::opt::o_splash.html
new file mode 100644
index 0000000..4f58fee
--- /dev/null
+++ b/themes/openSUSE/help-install/pt_BR/main::opt::o_splash.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="o_splash">Opções do kernel: splash</a>
+</h3>
+
+<p>A tela de inicialização é a imagem exibida durante a inicialização do sistema. <ul><li><em>splash=0</em> -- A tela de inicialização é desativada. Isso poderá ser útil com monitores muito antigos ou se ocorrerem erros.</li><li><em>splash=verbose</em> -- Ativa a tela de inicialização, as mensagens do kernel e de inicialização ainda são exibidas.</li><li><em>splash=silent</em> -- Ativa a tela de inicialização, mas sem exibir mensagens. Em vez disso é exibida uma barra de progresso.</li></ul></p>
diff --git a/themes/openSUSE/help-install/pt_BR/main::opt::o_vnc.html b/themes/openSUSE/help-install/pt_BR/main::opt::o_vnc.html
new file mode 100644
index 0000000..1c13045
--- /dev/null
+++ b/themes/openSUSE/help-install/pt_BR/main::opt::o_vnc.html
@@ -0,0 +1,9 @@
+<a name="o_vncpassword"/>
+
+<h3>
+<a name="o_vnc">Opções do instalador: vnc</a>
+</h3>
+
+<p>Para habilitar a instalação do VNC, especifique os parâmetros vnc e vncpassword: <ul><li><em>vnc=1 vncpassword=exemplo</em></li></ul></p>
+
+<p>O servidor VNC será iniciado e você poderá controlar o YaST2 em qualquer cliente VNC de um sistema remoto.</p>
diff --git a/themes/openSUSE/help-install/pt_BR/main::rescue.html b/themes/openSUSE/help-install/pt_BR/main::rescue.html
new file mode 100644
index 0000000..342e089
--- /dev/null
+++ b/themes/openSUSE/help-install/pt_BR/main::rescue.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="rescue">Sistema de recuperação</a>
+</h3>
+
+<p>O <em>Sistema de recuperação</em> é um pequeno sistema base de disco RAM. Com ele, é possível fazer todos os tipos de alterações em um sistema instalado. Como há apenas ferramentas de baixo nível disponíveis nesse sistema, ele se destina a usuários avançados.</p>
diff --git a/themes/openSUSE/help-install/pt_BR/main::videomode.html b/themes/openSUSE/help-install/pt_BR/main::videomode.html
new file mode 100644
index 0000000..3ad48ed
--- /dev/null
+++ b/themes/openSUSE/help-install/pt_BR/main::videomode.html
@@ -0,0 +1,9 @@
+<h3>
+<a name="videomode">Seleção do modo de vídeo</a>
+</h3>
+
+<p>Pressione <em>@@@fkey_video@@@</em> para obter a lista de modos de vídeo suportados por sua placa de vídeo. O modo mais elevado que seu monitor pode exibir é pré-selecionado.</p>
+
+<p>É possível que seu monitor não possa ser detectado automaticamente. Nesse caso, selecione manualmente seu modo preferido.</p>
+
+<p>Se o seu sistema tiver problemas com a placa de vídeo durante a instalação, o <em>modo de texto</em> poderá ser uma solução viável.</p>
diff --git a/themes/openSUSE/help-install/pt_BR/navi.html b/themes/openSUSE/help-install/pt_BR/navi.html
new file mode 100644
index 0000000..0e5e183
--- /dev/null
+++ b/themes/openSUSE/help-install/pt_BR/navi.html
@@ -0,0 +1 @@
+<p>Retornar a <a href="#foobar">FOOBAR</a></p>
diff --git a/themes/openSUSE/help-install/ro/main.html b/themes/openSUSE/help-install/ro/main.html
new file mode 100644
index 0000000..e33e293
--- /dev/null
+++ b/themes/openSUSE/help-install/ro/main.html
@@ -0,0 +1,35 @@
+<h3>
+<a name="main">Ajutor bootloader</a>
+</h3>
+
+<p>Bine-aţi venit la <em>@@@product@@@</em></p>
+
+<p>Utilizaţi acest meniu pentru a selecta funcţia dorită. Dacă apar probleme la navigarea prin acest sistem de ajutor, apăsaţi <em>@@@fkey_help@@@</em> pentru a deschide <a href="#help">descriere</a> al sistemului de ajutor. Funcţiile principale ale acestui meniu sunt:</p>
+
+<p><a href="#harddisk">Porneşte de pe hard disc</a>: Această opţiune nu are nici un efect asupra sistemului. Porneşte doar un sistem de operare instalat anterior.</p>
+
+<p><a href="#linux">Instalare</a>: Acest mod de instalare funcţionează pe majoritatea maşinilor. Dacă sistemul se blochează la bootare sau dacă apar probleme la detectarea componentelor hardware, ca de exemplu controllere de disc sau plăci de reţea, încercaţi cu una dintre următoarele opţiuni de instalare.</p>
+
+<p><a href="#noacpi">Instalare -- ACPI deactivat</a>: Multe dintre calculatoarele actuale au implementări APIC incomplete sau defectuoase. Această opţiune deactivează suportul APIC din kernel, însă păstrează activate anumite funcţionalităţi pentru performanţă, ca de exemplu DMA pentru hard disk-uri IDE.</p>
+
+<p><a href="#nolapic">Instalare -- APIC local dezactivat</a>: Dacă instalarea normală eşuează, poate fi din cauza hardware-ului din sistem ce nu suportă APIC local. Dacă aceasta pare a fi cauza, utilizaţi această opţiune pentru a instala fără suport APIC local.</p>
+
+<p><a href="#failsafe">Instalare -- Setări sigure</a>: Dacă nu aţi reuşit cu <em>Instalare</em>, puteţi încerca această variantă.</p>
+
+<p><a href="#rescue">Sistem de salvare</a>: Această imagine de boot porneşte un mini-sistem Linux în RAM. Poate fi util dacă sistemul nu porneşte corect. După bootare, autentificaţi-vă ca root.</p>
+
+<p><a href="#firmware">Test firmware</a>: Rulează un utilitare de testare a BIOS-ului, ce validează ACPI şi alte părţi ale BIOS-ului dvs.</p>
+
+<p><a href="#memtest">Test de memorie</a>: Testarea memoriei nu este utilă doar pentru verificarea instalării noilor module de memorie. Este de asemenea un test de rezistenţă pentru o mare parte a sistemului dvs. şi poate descoperi eventualele probleme hardware existente.</p>
+
+<p><a href="#opt">Opţiuni de boot</a>: Opţiunile de boot pot modifica complet comportamentul sistemului dvs. Sunt setări pentru kernel.</p>
+
+<p><a href="#help">@@@fkey_help@@@ Ajutor</a>: Acesta este sensibil la context. Va afişa diverse ecrane în funcţie de elementul activ din ecranul de boot. Există de asemenea o descriere a acestui sistem de ajutor.</p>
+
+<p><a href="#keytable">@@@fkey_lang@@@</a>: Setează limba şi aranjamentul de tastatură utilizate de bootloader.</p>
+
+<p><a href="#videomode">@@@fkey_video@@@ Modul Video</a>: Aici puteţi alege rezoluţia ecranului la instalare. Dacă apar probleme la instalarea grafică, o soluţie de moment poate fi <em>mod text</em>.</p>
+
+<p><a href="#install_src">@@@fkey_inst@@@ Sursa instalării</a>: Alegeţi sursa de instalare.</p>
+
+<p><a href="#driverupdate">@@@fkey_dud@@@ Actualizări drivere</a>: În cazul computerelor foarte noi, pentru instalarea sistemului poate fi necesară o actualizare de drivere.</p>
diff --git a/themes/openSUSE/help-install/ro/main::bits.html b/themes/openSUSE/help-install/ro/main::bits.html
new file mode 100644
index 0000000..d6d4745
--- /dev/null
+++ b/themes/openSUSE/help-install/ro/main::bits.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="bits">Selecţie tip software</a>
+</h3>
+
+<p>Puteţi alege între versiunea pe 32 de biţi şi 64 de biţi a @@@product@@@.</p>
diff --git a/themes/openSUSE/help-install/ro/main::driverupdate.html b/themes/openSUSE/help-install/ro/main::driverupdate.html
new file mode 100644
index 0000000..983ec5c
--- /dev/null
+++ b/themes/openSUSE/help-install/ro/main::driverupdate.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="driverupdate">Actualizare driver</a>
+</h3>
+
+<p><h3><em>@@@fkey_dud@@@</em></h3> Dacă aveţi nevoie de o dischetă sau un CD-ROM de actualizare a driverelor, apăsaţi <em>@@@fkey_dud@@@</em>. Bootloader-ul vă va cere să introduceţi mediul de actualizare după încărcarea kernelului Linux.</p>
+
+<p>O actualizare de driver este în mod normal o dischetă cu versiuni noi ale driverelor hardware sau corecturi de erori necesare în timpul instalării.</p>
diff --git a/themes/openSUSE/help-install/ro/main::failsafe.html b/themes/openSUSE/help-install/ro/main::failsafe.html
new file mode 100644
index 0000000..6e9167e
--- /dev/null
+++ b/themes/openSUSE/help-install/ro/main::failsafe.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="failsafe">Instalare -- Setări sigure</a>
+</h3>
+
+<p>Selectaţi <em>Instalare -- Setări sigure</em> dacă sistemul se blochează la instalare sau dacă apar erori ce nu se pot reproduce. Această opţiune deactivează DMA pentru unităţile IDE şi toate funcţionalităţile de gestiune a alimentării. Vedeţi şi opţiunile kernel pentru <a href="#o_apm">apm</a>, <a href="#o_acpi">acpi</a> şi <a href="#o_ide">ide</a>.</p>
diff --git a/themes/openSUSE/help-install/ro/main::firmware.html b/themes/openSUSE/help-install/ro/main::firmware.html
new file mode 100644
index 0000000..b5fb6e1
--- /dev/null
+++ b/themes/openSUSE/help-install/ro/main::firmware.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="firmware">Test firmware</a>
+</h3>
+
+<p>Porneşte o aplicaţie de validare a BIOS-ului ce validează tabelele ACPI şi multe alte părţi ale BIOS-ului dvs. Rezultatele testului pot fi stocate pe un disc usb sau pot fi salvate prin reţea.</p>
diff --git a/themes/openSUSE/help-install/ro/main::harddisk.html b/themes/openSUSE/help-install/ro/main::harddisk.html
new file mode 100644
index 0000000..6d75543
--- /dev/null
+++ b/themes/openSUSE/help-install/ro/main::harddisk.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="harddisk">Porneşte de pe hard disc</a>
+</h3>
+
+<p>Selectaţi <em>Bootează sistemul de operare instalat</em> pentru a porni sistemul instalat pe harddisk-ul dvs. local. Acest sistem trebuie să fie instala corect, deoarece va fi pornit doar MBR-ul (Master Boot Record) de pe primul harddisk. ID-ul de dispozitiv al primului harddisk este furnizat de BIOS-ul calculatorului.</p>
+
+<p>Utilizaţi această opţiune dacă aţi uitat să îndepărtaţi CD-ul sau DVD-ul din unitate şi doriţi să porniţi calculatorul de pe harddisk.</p>
diff --git a/themes/openSUSE/help-install/ro/main::help.html b/themes/openSUSE/help-install/ro/main::help.html
new file mode 100644
index 0000000..0e44cc7
--- /dev/null
+++ b/themes/openSUSE/help-install/ro/main::help.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="help">Utilzarea sistemului de ajutor</a>
+</h3>
+
+<p>Ajutorul online al bootloader-ului este dependent de context. Oferă informaţii despre elementul de meniu selectat sau, dacă editaţi opţiunile de boot, încearcă să caute informaţii despre opţiunea pe care este poziţionat cursorul.</p>
+
+<p>Taste de navigare <ul><li><em>Săgeată în sus</em>: se evidenţiază legătura precedentă</li><li><em>Săgeată în jos</em>: se evidenţiază legătura următoare</li><li><em>Săgeată stânga</em>, <em>Inapoi</em>: înapoi la tema anterioară</li><li><em>Săgeată dreapta</em>, <em>Enter</em>, <em>Spaţiu</em>: urmaţi linkul</li><li><em>Pagină sus</em>: derulează o pagină în sus</li><li><em>Pagină jos</em>: derulează o pagină în jos</li><li><em>Acasă</em>: salt la începutul paginii</li><li><em>Sfârşit</em>: salt la sfârşitul paginii</li><li><em>Esc</em>: părăseşte ajutorul</li></ul></p>
diff --git a/themes/openSUSE/help-install/ro/main::install_src.html b/themes/openSUSE/help-install/ro/main::install_src.html
new file mode 100644
index 0000000..89e6056
--- /dev/null
+++ b/themes/openSUSE/help-install/ro/main::install_src.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="install_src">Sursă de instalare</a>
+</h3>
+
+<p>Apăsaţi <em>@@@fkey_inst@@@</em> pentru a selecta o sursă de instalare.</p>
+
+<p>Este echivalent cu utilizarea opţiunii de boot <a href="#o_install">instalează</a>.</p>
diff --git a/themes/openSUSE/help-install/ro/main::keytable.html b/themes/openSUSE/help-install/ro/main::keytable.html
new file mode 100644
index 0000000..087ec01
--- /dev/null
+++ b/themes/openSUSE/help-install/ro/main::keytable.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="keytable">Selecţie limbă şi mapare tastatură</a>
+</h3>
+
+<p>Apăsaţi <em>@@@fkey_lang@@@</em> pentru a modifica limba şi maparea de tastatură utilizată de bootloader.</p>
diff --git a/themes/openSUSE/help-install/ro/main::linux.html b/themes/openSUSE/help-install/ro/main::linux.html
new file mode 100644
index 0000000..4ef29a4
--- /dev/null
+++ b/themes/openSUSE/help-install/ro/main::linux.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="linux">Instalare</a>
+</h3>
+
+<p>Selectaţi <em>Instalare</em> pentru a porni instalarea implicită. <a href="#opt">opţiuni de boot</a> introduse sunt utilizate la pornire. Acest element activează diferite funcţii ale hardware-ului uzual disponibil.</p>
diff --git a/themes/openSUSE/help-install/ro/main::memtest.html b/themes/openSUSE/help-install/ro/main::memtest.html
new file mode 100644
index 0000000..813dc9d
--- /dev/null
+++ b/themes/openSUSE/help-install/ro/main::memtest.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="memtest">Test de memorie</a>
+</h3>
+
+<p><em>Test de memorie</em> inclus oferă posibilitatea de a testa intensiv hardware-ul unui sistem. Scopul principal este detectarea de RAM defect, dar acţionează şi asupra altor părţi ale sistemului.</p>
+
+<p>Dacă nu au fost găsite erori, nu există garanţia că memoria este intactă, chiar dacă majoritatea defectelor de memorie sunt în general detectate.</p>
diff --git a/themes/openSUSE/help-install/ro/main::noacpi.html b/themes/openSUSE/help-install/ro/main::noacpi.html
new file mode 100644
index 0000000..c615c57
--- /dev/null
+++ b/themes/openSUSE/help-install/ro/main::noacpi.html
@@ -0,0 +1,9 @@
+<h3>
+<a name="noacpi">Instalare -- ACPI deactivat</a>
+</h3>
+
+<p>Configuraţia hardware actuală cere ACPI (Advanced Configuration and Power Interface) pentru controlul manipulării întreruperilor. ACPI înlocuieşte complet vechiul sistem APM.</p>
+
+<p>Selectaţi <em>Instalare -- ACPI deactivat</em> dacă apar probleme în timpul bootări kernelului. Problemele cunoscute ale maşinilor care prezintă probleme cu ACPI sunt: <ul><li>kernelul se blochează la bootare</li><li>plăcile PCI nu se detectează sau nu se iniţializează corect</li></ul></p>
+
+<p>Puteţi încerca şi opţiunea de boot <a href="#firmware">Test firmware</a> şi consulta rezultatele testului de validare ACPI.</p>
diff --git a/themes/openSUSE/help-install/ro/main::nolapic.html b/themes/openSUSE/help-install/ro/main::nolapic.html
new file mode 100644
index 0000000..9e4fe9f
--- /dev/null
+++ b/themes/openSUSE/help-install/ro/main::nolapic.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="nolapic">Instalare -- APIC local dezactivat</a>
+</h3>
+
+<p>În mod normal nu sunt probleme cu APIC (Advanced Programmable Interrupt Controller). Dacă totuşi apar, încercaţi această opţiune pentru a boota fără suport APIC local.</p>
+
+<p>A nu se confunda cu <a href="#noacpi">ACPI</a> (Advanced Configuration and Power Interface).</p>
diff --git a/themes/openSUSE/help-install/ro/main::opt.html b/themes/openSUSE/help-install/ro/main::opt.html
new file mode 100644
index 0000000..313deca
--- /dev/null
+++ b/themes/openSUSE/help-install/ro/main::opt.html
@@ -0,0 +1,9 @@
+<h3>
+<a name="opt">Opţiuni de boot</a>
+</h3>
+
+<p>Există două tipuri de opţiuni de boot disponibile: opţiunile ce afectează instalatorul şi opţiunile kernel. Câteva dintre opţiunile uzuale sunt:</p>
+
+<p>a) opţiuni instalator <ul><li><a href="#o_install">instalează</a> -- selectaţi o sursă de instalare</li><li><a href="#network">opţiuni reţea</a> -- opţiunile reţea</li><li><a href="#o_vnc">opţiuni vnc</a> -- opţiuni pentru instalarea via VNC</li></ul></p>
+
+<p>b) opţiuni kernel <ul><li><a href="#o_splash">splash</a> -- influenţează comportamentul ecranului de întâmpinare</li><li><a href="#o_apm">apm</a> -- comută gestiunea alimentării</li><li><a href="#o_acpi">acpi</a> -- configurare avansată şi interfaţă alimentare</li><li><a href="#o_ide">ide</a> -- controlează subsistemul IDE</li></ul></p>
diff --git a/themes/openSUSE/help-install/ro/main::opt::network.html b/themes/openSUSE/help-install/ro/main::opt::network.html
new file mode 100644
index 0000000..8957038
--- /dev/null
+++ b/themes/openSUSE/help-install/ro/main::opt::network.html
@@ -0,0 +1,13 @@
+<a name="o_hostip"/>
+<a name="o_netmask"/>
+<a name="o_gateway"/>
+
+<h3>
+<a name="network">Opţiuni instalare: Opţiuni reţea</a>
+</h3>
+
+<p>Puteţi configura interfaţa de reţea chiar acum. Hardware-ul va fi detectat mai târziu de YaST. Opţiunile minime pentru configurarea plăcii de reţea sunt IP-ul gazdei şi masca de reţea. De exemplu: <ul><li>hostip=192.168.0.10 netmask=255.255.255.0</li></ul></p>
+
+<p>sau în formă prescurtată: <ul><li>hostip=192.168.0.10/24</li></ul></p>
+
+<p>Dacă aţi specificat un <a href="#o_install">instalare bazată pe reţea</a> şi nu aţi specificat ambele opţiuni, instalatorul încearcă să configureze interfaţa de reţea cu <em>dhcp</em>. Dacă necesitaţi un gateway implicit, specificaţi-l cu opţiunea <em>gateway</em>. De exemplu: <ul><li>gateway=192.168.0.8</li></ul></p>
diff --git a/themes/openSUSE/help-install/ro/main::opt::o_acpi.html b/themes/openSUSE/help-install/ro/main::opt::o_acpi.html
new file mode 100644
index 0000000..81b0edb
--- /dev/null
+++ b/themes/openSUSE/help-install/ro/main::opt::o_acpi.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="o_acpi">Opţiuni kernel: acpi</a>
+</h3>
+
+<p>ACPI (Advanced Configuration and Power Interface - Interfaţă avansată pentru configurare şi alimentare) este un standard ce defineşte interfeţele de gestiune a alimentării şi a configuraţiei între sistemul de operare şi BIOS. Implicit, <em>acpi</em> este activ dacă se detectează un BIOS mai nou de 2000. Există mai mulţi parametri utilizaţi pentru controlul comportamentului ACPI: <ul><li><em>pci=noacpi</em> -- nu utiliza ACPI pentru rutarea întreruperilor PCI</li><li><em>acpi=oldboot</em> -- rămân activate doar acele părţi ale ACPI relevante pentru boot</li><li><em>acpi=off</em> -- dezactivează ACPI complet</li><li><em>acpi=force</em> -- activează ACPI chiar dacă BIOS-ul este anterior anului 2000</li></ul></p>
+
+<p>În special pe calculatoare noi, înlocuieşte vechiul sistem <a href="#o_apm">apm</a>.</p>
diff --git a/themes/openSUSE/help-install/ro/main::opt::o_apm.html b/themes/openSUSE/help-install/ro/main::opt::o_apm.html
new file mode 100644
index 0000000..b20f41a
--- /dev/null
+++ b/themes/openSUSE/help-install/ro/main::opt::o_apm.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="o_apm">Opţiuni kernel: apm</a>
+</h3>
+
+<p>APM este una dintre cele două strategii de gestiune a alimentării utilizate de calculatoarele moderne. Este utilizată în special pe laptop-uri pentru funcţii ca hibernarea, dar poate fi de asemenea responsabilă pentru deconectarea de la reţea a calculatorului după ce a fost oprit. APM se bazează pe un BIOS ce funcţionează corect. Dacă BIOS-ul este defect, APM poate funcţiona doar în mod restrâns sau poate chiar împiedica funcţionarea corectă a calculatorului. De aceea poate fi dezactivat cu parametrul <ul><li><em>apm=off</em> -- dezactivează APM complet</li></ul></p>
+
+<p>Pentru unele calculatoare foarte noi poate fi mai avantajos mai noul <a href="#o_acpi">ACPI</a>.</p>
diff --git a/themes/openSUSE/help-install/ro/main::opt::o_ide.html b/themes/openSUSE/help-install/ro/main::opt::o_ide.html
new file mode 100644
index 0000000..3614c8b
--- /dev/null
+++ b/themes/openSUSE/help-install/ro/main::opt::o_ide.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="o_ide">Opţiuni kernel: ide</a>
+</h3>
+
+<p>IDE este, spre deosebire de SCSI, utilizat în mod curent de cele mai multe staţii de lucru desktop. Pentru a evita anumite probleme hardware ce apar pe sistemele IDE, utilizaţi parametrul kernel: <ul><li><em>ide=nodma</em> -- dezactivează DMA pentru unităţile IDE</li></ul></p>
diff --git a/themes/openSUSE/help-install/ro/main::opt::o_install.html b/themes/openSUSE/help-install/ro/main::opt::o_install.html
new file mode 100644
index 0000000..b0451a6
--- /dev/null
+++ b/themes/openSUSE/help-install/ro/main::opt::o_install.html
@@ -0,0 +1,9 @@
+<h3>
+<a name="o_install">Opţiuni instalare: instalează</a>
+</h3>
+
+<p>Implicit, sursa de instalare se caută pe CD-ROM-urile locale. Pentru o instalare din reţea, selectaţi opţiunea <em>instalează</em>. Protocoalele de instalare posibile sunt <ul><li>FTP</li><li>NFS</li><li>HTTP</li></ul></p>
+
+<p>Sintaxa utilizată este ca şi cea a URL-urilor standard. De exemplu, dacă serverul dvs. se află la 192.168.0.1 şi doriţi o instalare pe bază de NFS de pe directorul /install de pe acest server, specificaţi sursa astfel: <ul><li>install=nfs://192.168.0.1/install</li></ul></p>
+
+<p>Placa de reţea va fi configurată fie cu <em>dhcp</em>, fie cu parametrii specificaţi de dvs. conform instrucţiunilor de la <a href="#network">opţiuni reţea</a>.</p>
diff --git a/themes/openSUSE/help-install/ro/main::opt::o_splash.html b/themes/openSUSE/help-install/ro/main::opt::o_splash.html
new file mode 100644
index 0000000..a1e778b
--- /dev/null
+++ b/themes/openSUSE/help-install/ro/main::opt::o_splash.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="o_splash">Opţiuni kernel: splash (ecran de pornire)</a>
+</h3>
+
+<p>Ecranul de start este imaginea afişată în timp ce porneşte sistemul. <ul><li><em>splash=0</em> -- Ecranul de pornire este dezactivat. Acest lucru poate fi util pentru monitoarele foarte vechi sau în cazul apariţiei unei erori.</li><li><em>splash=verbose</em> -- Activează ecranului de pornire, mesajele kernel şi boot sunt afişate în continuare.</li><li><em>splash=silent</em> -- Activează ecranul de pornire, dar fără mesaje. În schimb se afişează o bară de progres.</li></ul></p>
diff --git a/themes/openSUSE/help-install/ro/main::opt::o_vnc.html b/themes/openSUSE/help-install/ro/main::opt::o_vnc.html
new file mode 100644
index 0000000..cd6c494
--- /dev/null
+++ b/themes/openSUSE/help-install/ro/main::opt::o_vnc.html
@@ -0,0 +1,9 @@
+<a name="o_vncpassword"/>
+
+<h3>
+<a name="o_vnc">Opţiuni instalare: vnc</a>
+</h3>
+
+<p>Pentru a activa instalarea VNC, specificaţi parametrii vnc şi vncpassword: <ul><li><em>vnc=1 vncpassword=example</em></li></ul></p>
+
+<p>Va fi pornit serverul VNC şi puteţi accesa YaST2 la distanţă utilizând orice tip de client VNC.</p>
diff --git a/themes/openSUSE/help-install/ro/main::rescue.html b/themes/openSUSE/help-install/ro/main::rescue.html
new file mode 100644
index 0000000..3f2be8d
--- /dev/null
+++ b/themes/openSUSE/help-install/ro/main::rescue.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="rescue">Sistem de salvare</a>
+</h3>
+
+<p><em>Sistem de salvare</em> este un sistem de bază pe disc RAM. De acolo se pot efectua diferite modificări asupra unui sistem instalat. Deoarece acest sistem dispune doar de utilitare de nivel jos, este destinat experţilor.</p>
diff --git a/themes/openSUSE/help-install/ro/main::videomode.html b/themes/openSUSE/help-install/ro/main::videomode.html
new file mode 100644
index 0000000..4401955
--- /dev/null
+++ b/themes/openSUSE/help-install/ro/main::videomode.html
@@ -0,0 +1,9 @@
+<h3>
+<a name="videomode">Selecţie mod video</a>
+</h3>
+
+<p>Apăsaţi <em>@@@fkey_video@@@</em> pentru a obţine lista modurilor video suportate de placa dvs. grafică. Modul de afişare cel mai înalt suportat de monitor va fi preselectat.</p>
+
+<p>Este posibil ca monitorul dvs. să nu poată fi detectat automat. În acest caz, selectaţi manual modul dorit.</p>
+
+<p>Dacă la instalare pe sistemul dvs. apar probleme cu placa grafică, o soluţie posibilă este <em>mod text</em>.</p>
diff --git a/themes/openSUSE/help-install/ro/navi.html b/themes/openSUSE/help-install/ro/navi.html
new file mode 100644
index 0000000..53b0f6f
--- /dev/null
+++ b/themes/openSUSE/help-install/ro/navi.html
@@ -0,0 +1 @@
+<p>Înapoi la <a href="#foobar">FOOBAR</a></p>
diff --git a/themes/openSUSE/help-install/ru/main.html b/themes/openSUSE/help-install/ru/main.html
new file mode 100644
index 0000000..c84c3fd
--- /dev/null
+++ b/themes/openSUSE/help-install/ru/main.html
@@ -0,0 +1,35 @@
+<h3>
+<a name="main">Справка загрузчика</a>
+</h3>
+
+<p>Добро пожаловать в <em>@@@product@@@</em></p>
+
+<p>Используйте это меню для выбора необходимой функции. Если у вас проблемы с управлением в данной системе помощи, нажмите<em>@@@fkey_help@@@</em>, чтобы войти в <a href="#help">описание</a> системы помощи. Главные функции в этом меню:</p>
+
+<p><a href="#harddisk">Загрузка с жёсткого диска</a>: Этот выбор ничего не сделает с системой. Просто будет запущена ранее установленная операционная система.</p>
+
+<p><a href="#linux">Установка</a>: Этот режим установки работает на большинстве компьютеров. Если при загрузке у вас зависает система или возникают проблемы с обнаружением аппаратного обеспечения, такого как контроллеры диска или сетевые платы, попробуйте один из следующих вариантов установки.</p>
+
+<p><a href="#noacpi">Установка - ACPI выключен</a>: Многие продаваемые компьютеры имеют неполную или неверную реализацию ACPI. Выбор этой опции отключает поддержку ACPI в ядре, однако многие особенности, влияющие на быстродействие, всё равно включены, например, DMA для жёстких дисков IDE.</p>
+
+<p><a href="#nolapic">Установка - локальный APIC выключен</a>: Если обычная установка даёт сбой, возможно, ваше оборудование не поддерживает APIC. Если это так, используйте этот параметр для установки без поддержки APIC.</p>
+
+<p><a href="#failsafe">Установка - безопасные параметры настройки</a>: Если у вас не получается с <em>Установка</em>, этот выбор может помочь вам.</p>
+
+<p><a href="#rescue">Восстановление системы</a>: Этот загрузочный образ запускает маленькую Linux-систему в RAM. Это полезно, если ваша система запускается неправильно. После загрузки этой системы войдите как root.</p>
+
+<p><a href="#firmware">Проверка прошивок</a>: Запускает инструмент проверки BIOS, который проверяет ACPI и другие части вашего BIOS.</p>
+
+<p><a href="#memtest">Проверка памяти</a>: Тест памяти более полезен, чем просто проверка новых модулей памяти. Это стрессовая проверка большей части вашей компьютерной системы и может выявить проблемы в оборудовании.</p>
+
+<p><a href="#opt">Параметры загрузки</a>: Параметры загрузки могут полностью изменять поведение вашей системы. Это настройки ядра.</p>
+
+<p><a href="#help">@@@fkey_help@@@ Help</a>: Зависит от содержания. Будут показаны разные экраны в зависимости от активного элемента экрана загрузки. Также есть описание этой системы помощи.</p>
+
+<p><a href="#keytable">@@@fkey_lang@@@</a>: Установить язык и раскладку клавиатуры, используемые загрузчиком.</p>
+
+<p><a href="#videomode">@@@fkey_video@@@ Разрешение</a>: Выберите необходимое разрешение экрана, используемое при установке. Если у вас есть проблемы с графической установкой, <em>текстовый режим</em> может поможет вам.</p>
+
+<p><a href="#install_src">@@@fkey_inst@@@ Источник установки</a>: Выберите источник установки.</p>
+
+<p><a href="#driverupdate">@@@fkey_dud@@@ Обновления драйверов</a>: Для очень новых машин системе могут понадобиться обновления драйверов.</p>
diff --git a/themes/openSUSE/help-install/ru/main::bits.html b/themes/openSUSE/help-install/ru/main::bits.html
new file mode 100644
index 0000000..0467343
--- /dev/null
+++ b/themes/openSUSE/help-install/ru/main::bits.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="bits">Выбор типа программного обеспечения</a>
+</h3>
+
+<p>Вы должны выбрать, устанавливать 32-разрядную или 64-разрядную версию @@@product@@@.</p>
diff --git a/themes/openSUSE/help-install/ru/main::driverupdate.html b/themes/openSUSE/help-install/ru/main::driverupdate.html
new file mode 100644
index 0000000..3a62cdd
--- /dev/null
+++ b/themes/openSUSE/help-install/ru/main::driverupdate.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="driverupdate">Обновление драйверов</a>
+</h3>
+
+<p>Если вам необходима дискета или CD-ROM с обновлениями драйверов, нажмите <em>@@@fkey_dud@@@</em>. Загрузчик попросит вас вставить носитель с обновлениями драйверов после загрузки ядра Linux.</p>
+
+<p>Обновления драйверов - это обычно дискета с новыми версиями драйверов оборудования или исправлениями ошибок, необходимыми во время установки.</p>
diff --git a/themes/openSUSE/help-install/ru/main::failsafe.html b/themes/openSUSE/help-install/ru/main::failsafe.html
new file mode 100644
index 0000000..bb1b7ad
--- /dev/null
+++ b/themes/openSUSE/help-install/ru/main::failsafe.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="failsafe">Установка - безопасные параметры настройки</a>
+</h3>
+
+<p>Выберите <em>Установка - безопасные параметры настройки</em>, если при установке у вас зависает система или возникают непонятные ошибки. Этот параметр отключает DMA для IDE-устройств и все особенности управления питанием. Смотри также параметры ядра <a href="#o_apm">apm</a>, <a href="#o_acpi">acpi</a> и <a href="#o_ide">ide</a>.</p>
diff --git a/themes/openSUSE/help-install/ru/main::firmware.html b/themes/openSUSE/help-install/ru/main::firmware.html
new file mode 100644
index 0000000..6de6959
--- /dev/null
+++ b/themes/openSUSE/help-install/ru/main::firmware.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="firmware">Проверка прошивок</a>
+</h3>
+
+<p>Запускает проверку BIOS на совместимость с ACPI и другими частями вашего BIOS. Результат проверки можно сохранить на usb-диске или по сети.</p>
diff --git a/themes/openSUSE/help-install/ru/main::harddisk.html b/themes/openSUSE/help-install/ru/main::harddisk.html
new file mode 100644
index 0000000..cc6d1af
--- /dev/null
+++ b/themes/openSUSE/help-install/ru/main::harddisk.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="harddisk">Загрузка с жёсткого диска</a>
+</h3>
+
+<p>Выберите <em>Загрузить установленную ОС</em>, чтобы запустить систему, установленную на вашем жестком диске. Эта система должна быть правильно установлена, так как запускается только MBR (Главная загрузочная запись) первого жесткого диска. ID устройства первого жёсткого диска предоставляет BIOS компьютера.</p>
+
+<p>Используйте это, если вы забыли вытащить CD или DVD из дисковода и хотите запустить компьютер с жёсткого диска.</p>
diff --git a/themes/openSUSE/help-install/ru/main::help.html b/themes/openSUSE/help-install/ru/main::help.html
new file mode 100644
index 0000000..4d5cab2
--- /dev/null
+++ b/themes/openSUSE/help-install/ru/main::help.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="help">Использование системы справки</a>
+</h3>
+
+<p>Текст справки загрузчика зависит от контекста. Она дает информацию по выбранному элементу меню или, если вы редактируете параметр загрузки, она пытается найти информацию о параметре, на котором стоит курсор.</p>
+
+<p>Кнопки управления <ul><li><em>Стрелка вверх</em>: выделяет предыдущую ссылку</li><li><em>Стрелка вниз</em>: выделяет следующую ссылку</li><li><em>Стрелка влево</em>, <em>Backspace</em>: вернуться к предыдущей главе</li><li><em>Стрелка вправо</em>, <em>Enter</em>, <em>Пробел</em>: перейти по ссылке</li><li><em>Page Up</em>: пролистать одну страницу назад</li><li><em>Page Down</em>: пролистать одну страницу вперёд</li><li><em>Home</em>: перейти к началу страницы</li><li><em>End</em>: перейти к концу страницы</li><li><em>Esc</em>: выйти из справки</li></ul></p>
diff --git a/themes/openSUSE/help-install/ru/main::install_src.html b/themes/openSUSE/help-install/ru/main::install_src.html
new file mode 100644
index 0000000..ea8cffa
--- /dev/null
+++ b/themes/openSUSE/help-install/ru/main::install_src.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="install_src">Источник установки</a>
+</h3>
+
+<p>Нажмите <em>@@@fkey_inst@@@</em>, чтобы выбрать источник установки.</p>
+
+<p>Это то же самое, если использовать параметр загрузки <a href="#o_install">установить</a>.</p>
diff --git a/themes/openSUSE/help-install/ru/main::keytable.html b/themes/openSUSE/help-install/ru/main::keytable.html
new file mode 100644
index 0000000..f5f2311
--- /dev/null
+++ b/themes/openSUSE/help-install/ru/main::keytable.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="keytable">Выбор языка и раскладки клавиатуры</a>
+</h3>
+
+<p>Нажмите <em>@@@fkey_lang@@@</em>, чтобы изменить язык и раскладку клавиатуры, которые использует загрузчик.</p>
diff --git a/themes/openSUSE/help-install/ru/main::linux.html b/themes/openSUSE/help-install/ru/main::linux.html
new file mode 100644
index 0000000..224b561
--- /dev/null
+++ b/themes/openSUSE/help-install/ru/main::linux.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="linux">Установка</a>
+</h3>
+
+<p>Выберите <em>Установка</em>, чтобы начать установку по умолчанию. При запуске используются <a href="#opt">параметры загрузки</a>. Этот пункт активирует многие общие особенности доступного оборудования.</p>
diff --git a/themes/openSUSE/help-install/ru/main::memtest.html b/themes/openSUSE/help-install/ru/main::memtest.html
new file mode 100644
index 0000000..603435d
--- /dev/null
+++ b/themes/openSUSE/help-install/ru/main::memtest.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="memtest">Проверка памяти</a>
+</h3>
+
+<p>Включенный параметр <em>Проверка памяти</em> предоставляет хорошую возможность для стрессового теста оборудования системы. Главная цель - обнаружить неисправные RAM, но кроме этого происходит нагрузка на остальные части системы.</p>
+
+<p>Если не обнаружено ошибок, нет гарантии, что память хорошая, однако большинство дефектов памяти были бы обнаружены.</p>
diff --git a/themes/openSUSE/help-install/ru/main::noacpi.html b/themes/openSUSE/help-install/ru/main::noacpi.html
new file mode 100644
index 0000000..905c55d
--- /dev/null
+++ b/themes/openSUSE/help-install/ru/main::noacpi.html
@@ -0,0 +1,9 @@
+<h3>
+<a name="noacpi">Установка - ACPI выключен</a>
+</h3>
+
+<p>Современное оборудование обычно использует APIC (Усовершенствованный интерфейс настройки системы и управления питанием) для управления прерываниями. ACPI полностью заменяет старую систему APM.</p>
+
+<p>Выберите <em>Установка - ACPI выключен</em>, если есть проблемы с ядром во время загрузки. Известные проблемы с машинами, которые имеют проблемы с ACPI: <ul><li>ядро приостанавливается при загрузке</li><li>PCI-платы не обнаружены или неверно инициализированы</li></ul></p>
+
+<p>Вы можете попробовать использовать параметр загрузки <a href="#firmware">Проверка прошивок</a> и посмотреть результат проверки ACPI.</p>
diff --git a/themes/openSUSE/help-install/ru/main::nolapic.html b/themes/openSUSE/help-install/ru/main::nolapic.html
new file mode 100644
index 0000000..661bed0
--- /dev/null
+++ b/themes/openSUSE/help-install/ru/main::nolapic.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="nolapic">Установка - локальный APIC выключен</a>
+</h3>
+
+<p>Обычно с APIC (Усовершенствованный программируемый контроллер прерываний) проблем не возникает. Но если вы обнаружили некоторые, попробуйте этот параметр для загрузки без поддержки APIC.</p>
+
+<p>Не путайте это с <a href="#noacpi">ACPI</a> (Усовершенствованный интерфейс настройки системы и управления питанием).</p>
diff --git a/themes/openSUSE/help-install/ru/main::opt.html b/themes/openSUSE/help-install/ru/main::opt.html
new file mode 100644
index 0000000..8d4095c
--- /dev/null
+++ b/themes/openSUSE/help-install/ru/main::opt.html
@@ -0,0 +1,9 @@
+<h3>
+<a name="opt">Параметры загрузки</a>
+</h3>
+
+<p>Есть два типа параметров загрузки. Во-первых, это параметры, которые влияют на установщик. Во-вторых, это параметры ядра. Некоторые из наиболее распостранённых параметров:</p>
+
+<p>a) параметры установки <ul><li><a href="#o_install">установить</a> -- выберите источник установки</li><li><a href="#network">параметры сети</a> -- сетевые параметры</li><li><a href="#o_vnc">параметры vnc</a> -- параметры для установки через VNC</li></ul></p>
+
+<p>b) параметры ядра <ul><li><a href="#o_splash">заставка</a> -- влияет на поведение заставки</li><li><a href="#o_apm">apm</a> -- переключает управление питанием</li><li><a href="#o_acpi">acpi</a> -- Усовершенствованный интерфейс настройки системы и управления питанием</li><li><a href="#o_ide">ide</a> -- управляет подсистемой IDE</li></ul></p>
diff --git a/themes/openSUSE/help-install/ru/main::opt::network.html b/themes/openSUSE/help-install/ru/main::opt::network.html
new file mode 100644
index 0000000..15ffdbf
--- /dev/null
+++ b/themes/openSUSE/help-install/ru/main::opt::network.html
@@ -0,0 +1,13 @@
+<a name="o_hostip"/>
+<a name="o_netmask"/>
+<a name="o_gateway"/>
+
+<h3>
+<a name="network">Параметры установки: Параметры сети</a>
+</h3>
+
+<p>Можно настроить сетевой интерфейс прямо сейчас. Оборудование будет определено позже с помощью YaST2. Минимальный набор параметров вашей сетевой карты состоит из IP-адреса узла и сетевой маски. Пример: <ul><li>hostip=192.168.0.10 netmask=255.255.255.0</li></ul></p>
+
+<p>или в коротком виде: <ul><li>hostip=192.168.0.10/24</li></ul></p>
+
+<p>Если вы указали <a href="#o_install">сетевая установка</a> и не указали оба эти параметра, установщик попытается настроить сетевой интерфейс с <em>dhcp</em>. Если вам необходим шлюз по умолчанию, укажите это с параметром <em>gateway</em>. Например: <ul><li>gateway=192.168.0.8</li></ul></p>
diff --git a/themes/openSUSE/help-install/ru/main::opt::o_acpi.html b/themes/openSUSE/help-install/ru/main::opt::o_acpi.html
new file mode 100644
index 0000000..85792ac
--- /dev/null
+++ b/themes/openSUSE/help-install/ru/main::opt::o_acpi.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="o_acpi">Параметры ядра: acpi</a>
+</h3>
+
+<p>ACPI (Усовершенствованный интерфейс настройки системы и управления питанием) является стандартом, который определяет интерфейс управления питанием и настройками между операционной системой и BIOS. По умолчанию <li><em>pci=noacpi</em> -- не использовать ACPI для управления прерываниями PCI</li> включён, если определяется, что версия BIOS датирована позднее, чем 2000 г. Есть несколько общих параметров для управления поведением ACPI: <ul><li><em>pci=noacpi</em> -- не использовать ACPI для управления прерываниями PCI</li><li><em>acpi=oldboot</em> -- только часть ACPI, которая относится к загрузке, остаётся активной</li><li><em>acpi=off</em> -- выключает ACPI полностью</li><li><em>acpi=force</em> -- включает ACPI, даже если ваш BIOS выпущен до 2000 года</li></ul></p>
+
+<p>Особенно на новых компьютерах, заменяет старый <a href="#o_apm">apm</a> системы.</p>
diff --git a/themes/openSUSE/help-install/ru/main::opt::o_apm.html b/themes/openSUSE/help-install/ru/main::opt::o_apm.html
new file mode 100644
index 0000000..c01bd4c
--- /dev/null
+++ b/themes/openSUSE/help-install/ru/main::opt::o_apm.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="o_apm">Параметры ядра: apm</a>
+</h3>
+
+<p>APM - это одна из двух стратегий управления питанием, используемых в настоящее время в компьютерах. Она в основном используется в ноутбуках для таких функций, как остановка диска, но она также может использоваться для отключения компьютера во время отключения питания. APM зависит от правильной работы BIOS. Если BIOS неисправен, APM ограничено в применении или запретит работу компьютера. Однако, она может быть отключена опцией <ul><li><em>apm=off</em> -- выключает APM полностью</li></ul></p>
+
+<p>Некоторые очень новые компьютеры имеют преимущество от <a href="#o_acpi">ACPI</a>.</p>
diff --git a/themes/openSUSE/help-install/ru/main::opt::o_ide.html b/themes/openSUSE/help-install/ru/main::opt::o_ide.html
new file mode 100644
index 0000000..e7344ce
--- /dev/null
+++ b/themes/openSUSE/help-install/ru/main::opt::o_ide.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="o_ide">Параметры ядра: ide</a>
+</h3>
+
+<p>IDE, в отличии от SCSI, обычно используется в большинстве рабочих станций. Чтобы предотвратить некоторые проблемы с оборудованием, которые случаются с IDE-системами, используйте параметр ядра: <ul><li><em>ide=nodma</em> -- выключить DMA для IDE-дисков</li></ul></p>
diff --git a/themes/openSUSE/help-install/ru/main::opt::o_install.html b/themes/openSUSE/help-install/ru/main::opt::o_install.html
new file mode 100644
index 0000000..00249cc
--- /dev/null
+++ b/themes/openSUSE/help-install/ru/main::opt::o_install.html
@@ -0,0 +1,9 @@
+<h3>
+<a name="o_install">Параметры установки: install</a>
+</h3>
+
+<p>По умолчанию источником установки являются локальные CD-ROMы. Для сетевой установки выберите параметр <em>установить</em>. Возможные сетевые протоколы <ul><li>FTP</li><li>NFS</li><li>HTTP</li></ul></p>
+
+<p>Используется синтаксис стандартного URL. Например, если ваш сервер находится по адресу 192.168.0.1 и вы хотите осуществить установку с NFS из каталога /install на этом сервере, укажите источник в следующем виде: <ul><li>install=nfs://192.168.0.1/install</li></ul></p>
+
+<p>Сетевая карта будет настроена с <em>dhcp</em> или вы сами должны указать параметры как описано в <a href="#network">параметры сети</a>.</p>
diff --git a/themes/openSUSE/help-install/ru/main::opt::o_splash.html b/themes/openSUSE/help-install/ru/main::opt::o_splash.html
new file mode 100644
index 0000000..bf4a374
--- /dev/null
+++ b/themes/openSUSE/help-install/ru/main::opt::o_splash.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="o_splash">Параметры ядра: splash</a>
+</h3>
+
+<p>Заставка - это картинка, показываемая во время загрузки системы. <ul><li><em>splash=0</em> -- Заставка отключена. Это может быть полезным с очень старыми мониторами или когда надо видеть ошибки на экране.</li><li><em>splash=verbose</em> -- Активирует заставку, сообщения загрузки и ядра по-прежнему показываются.</li><li><em>splash=silent</em> -- Активирует заставку, но без сообщений. Вместо этого будет показ прогресс выполнения.</li></ul></p>
diff --git a/themes/openSUSE/help-install/ru/main::opt::o_vnc.html b/themes/openSUSE/help-install/ru/main::opt::o_vnc.html
new file mode 100644
index 0000000..1ffde33
--- /dev/null
+++ b/themes/openSUSE/help-install/ru/main::opt::o_vnc.html
@@ -0,0 +1,9 @@
+<a name="o_vncpassword"/>
+
+<h3>
+<a name="o_vnc">Параметры установки: vnc</a>
+</h3>
+
+<p>Для установки по VNC укажите параметры vnc и vncpassword: <ul><li><em>vnc=1 vncpassword=example</em></li></ul></p>
+
+<p>VNC-сервер будет запущен и вы сможете управлять YaST2 через любой VNC-клиент с удалённой системы.</p>
diff --git a/themes/openSUSE/help-install/ru/main::rescue.html b/themes/openSUSE/help-install/ru/main::rescue.html
new file mode 100644
index 0000000..bc17390
--- /dev/null
+++ b/themes/openSUSE/help-install/ru/main::rescue.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="rescue">Восстановление системы</a>
+</h3>
+
+<p><em>Восстановление системы</em> - это маленькая базовая система в ОЗУ. Из неё возможно сделать различные изменения в установленной системе. Так как здесь доступны только низкоуровневые утилиты, она предназначена только для специалистов.</p>
diff --git a/themes/openSUSE/help-install/ru/main::videomode.html b/themes/openSUSE/help-install/ru/main::videomode.html
new file mode 100644
index 0000000..fd0e68e
--- /dev/null
+++ b/themes/openSUSE/help-install/ru/main::videomode.html
@@ -0,0 +1,9 @@
+<h3>
+<a name="videomode">Выбор разрешения</a>
+</h3>
+
+<p>Нажмите <em>@@@fkey_video@@@</em>, чтобы получить список режимов, которые поддерживает ваша видеокарта. Наилучший режим для вашего монитора может быть уже выбран.</p>
+
+<p>Возможно, что ваш монитор не будет определён автоматически. В этом случае выберите желаемый режим вручную.</p>
+
+<p>Если ваша система имеет проблемы с видеокартой во время установки, может пригодиться <em>текстовый режим</em>.</p>
diff --git a/themes/openSUSE/help-install/ru/navi.html b/themes/openSUSE/help-install/ru/navi.html
new file mode 100644
index 0000000..cd041a4
--- /dev/null
+++ b/themes/openSUSE/help-install/ru/navi.html
@@ -0,0 +1 @@
+<p>Возврат к <a href="#foobar">FOOBAR</a></p>
diff --git a/themes/openSUSE/help-install/sk/main.html b/themes/openSUSE/help-install/sk/main.html
new file mode 100644
index 0000000..0f69a45
--- /dev/null
+++ b/themes/openSUSE/help-install/sk/main.html
@@ -0,0 +1,103 @@
+<h3>
+<a name="main">Pomocník pre správcu štartu</a>
+</h3>
+
+<p>
+Welcome to <em>@@@product@@@</em>
+</p>
+
+<p>
+Use this menu to select the desired function. If you have
+problems navigating in this help system, press
+<em>@@@fkey_help@@@</em> to enter the <a href="#help">Popis</a> of the help
+system. The main functions in this menu are:
+</p>
+
+<p>
+<a href="#harddisk">Spustiť systém z pevného disku</a>: This selection will not do
+anything to the system. It only starts a previously installed
+operating system.
+</p>
+
+<p>
+<a href="#linux">Inštalácia</a>:
+This installation mode works on most machines. If you experience a
+system freeze during boot or problems with detection of your hardware
+components, such as disk controllers or network cards, try one of the
+following installation options.
+</p>
+
+<p>
+<a href="#noacpi">Inštalácia - bez ACPI</a>: Many of the
+currently-sold computers have incomplete or faulty ACPI
+implementations. This selection disables ACPI support in the
+kernel, but still enables many performance features, like DMA for IDE
+hard disks.
+</p>
+
+<p>
+<a href="#nolapic">Inštalácia - bez lokálneho APIC</a>:
+If the normal installation fails, this might be due to the
+system hardware not supporting local APIC.
+If this seems to be the case, use this option to
+install without local APIC support.
+</p>
+
+<p>
+<a href="#failsafe">Inštalácia -- Záchranný režim</a>: If you were not
+successful with <em>Inštalácia</em>, this selection might
+solve the issue.
+</p>
+
+<p>
+<a href="#rescue">Záchranný systém</a>: This boot image starts a small
+Linux system in RAM. This is useful if the system does not start properly.
+After booting this system, log in as root.
+</p>
+
+<p>
+<a href="#firmware">Test firmvéru</a>: Runs a BIOS test tool that validates
+ACPI and other parts of your BIOS.
+</p>
+
+<p>
+<a href="#memtest">Test pamäte</a>: Memory testing is useful for more than
+checking installation of new memory modules. It is a stress test
+for a big part of your computer system and may indicate hardware
+problems.
+</p>
+
+<p>
+<a href="#opt">Možnosti štartu</a>: The boot options may change the
+behavior of your system completely. They are settings for
+the kernel.
+</p>
+
+<p>
+<a href="#help">@@@fkey_help@@@ Help</a>: This is context sensitive. It will
+show different screens depending on the active element of the
+boot screen. There is also a description of this help system
+available.
+</p>
+
+<p>
+<a href="#keytable">@@@fkey_lang@@@</a>: Set language and keyboard mapping
+used by the boot loader.
+</p>
+
+<p>
+<a href="#videomode">@@@fkey_video@@@ Video Mode</a>: Here, choose between
+different screen resolutions while installing. If you encounter
+problems with the graphical installation, the <em>Textový režim</em> may
+be a work-around for you.
+</p>
+
+<p>
+<a href="#install_src">@@@fkey_inst@@@ Installation Source</a>: Choose the
+installation source.
+</p>
+
+<p>
+<a href="#driverupdate">@@@fkey_dud@@@ Driver Update</a>: For very new machines, a
+driver update may be needed to install the system.
+</p>
diff --git a/themes/openSUSE/help-install/sk/main::bits.html b/themes/openSUSE/help-install/sk/main::bits.html
new file mode 100644
index 0000000..2e53d2e
--- /dev/null
+++ b/themes/openSUSE/help-install/sk/main::bits.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="bits">Výber typu sofvéru</a>
+</h3>
+
+<p>
+You have the choice to install the 32-bit or 64-bit version of @@@product@@@.
+</p>
diff --git a/themes/openSUSE/help-install/sk/main::driverupdate.html b/themes/openSUSE/help-install/sk/main::driverupdate.html
new file mode 100644
index 0000000..1ba918e
--- /dev/null
+++ b/themes/openSUSE/help-install/sk/main::driverupdate.html
@@ -0,0 +1,14 @@
+<h3>
+<a name="driverupdate">Aktualizácia ovládačov</a>
+</h3>
+
+<p>
+If you need a driver update floppy or CD-ROM, press <em>@@@fkey_dud@@@</em>. The
+boot loader asks you to insert the driver update medium after
+loading the Linux kernel.
+</p>
+
+<p>
+A driver update is typically a floppy with new versions of hardware
+drivers or bug fixes needed during installation.
+</p>
diff --git a/themes/openSUSE/help-install/sk/main::failsafe.html b/themes/openSUSE/help-install/sk/main::failsafe.html
new file mode 100644
index 0000000..817934b
--- /dev/null
+++ b/themes/openSUSE/help-install/sk/main::failsafe.html
@@ -0,0 +1,11 @@
+<h3>
+<a name="failsafe">Inštalácia -- Záchranný režim</a>
+</h3>
+
+<p>
+Select <em>Inštalácia -- Záchranný režim</em> if you encounter hangs
+while installing or irreproducible errors. This option disables DMA
+for IDE drives and all power management features.
+See also the kernel options for <a href="#o_apm">apm</a>,
+<a href="#o_acpi">acpi</a> and <a href="#o_ide">ide</a>.
+</p>
diff --git a/themes/openSUSE/help-install/sk/main::firmware.html b/themes/openSUSE/help-install/sk/main::firmware.html
new file mode 100644
index 0000000..757a7c3
--- /dev/null
+++ b/themes/openSUSE/help-install/sk/main::firmware.html
@@ -0,0 +1,9 @@
+<h3>
+<a name="firmware">Test firmvéru</a>
+</h3>
+
+<p>
+Starts a BIOS checker that validates the ACPI tables
+and many other parts of your BIOS.
+Test results can be stored on usb disk or saved via network.
+</p>
diff --git a/themes/openSUSE/help-install/sk/main::harddisk.html b/themes/openSUSE/help-install/sk/main::harddisk.html
new file mode 100644
index 0000000..4176281
--- /dev/null
+++ b/themes/openSUSE/help-install/sk/main::harddisk.html
@@ -0,0 +1,16 @@
+<h3>
+<a name="harddisk">Spustiť systém z pevného disku</a>
+</h3>
+
+<p>
+Select <em>Štartovať nainštalovaný systém</em> to start the system installed on
+your local hard disk. This system must be installed properly, because
+only the MBR (Master Boot Record) on the first hard disk is started.
+The device ID of the first hard disk is provided by the BIOS of
+the computer.
+</p>
+
+<p>
+Use this if you forgot to remove the CD or DVD from your
+drive and want to start the computer from the hard disk.
+</p>
diff --git a/themes/openSUSE/help-install/sk/main::help.html b/themes/openSUSE/help-install/sk/main::help.html
new file mode 100644
index 0000000..f3800c2
--- /dev/null
+++ b/themes/openSUSE/help-install/sk/main::help.html
@@ -0,0 +1,25 @@
+<h3>
+<a name="help">Ako používať tohto pomocníka</a>
+</h3>
+
+<p>
+The boot loader online help is context sensitive. It gives information
+about the selected menu item or, if you are editing boot options,
+it tries to look up information about the option in which the cursor is
+positioned.
+</p>
+
+<p>
+Navigation Keys
+<ul>
+ <li><em>Šipka hore</em>: highlight previous link</li>
+ <li><em>Šipka dolu</em>: highlight next link</li>
+ <li><em>Šipka vľavo</em>, <em>Backspace</em>: return to previous topic</li>
+ <li><em>Šipka vpravo</em>, <em>Enter</em>, <em>Medzerník</em>: follow link</li>
+ <li><em>kláves Page Up</em>: scroll up one page</li>
+ <li><em>kláves Page Down</em>: scroll down one page</li>
+ <li><em>Domov</em>: go to page start</li>
+ <li><em>kláves End</em>: go to page end</li>
+ <li><em>Esc</em>: leave help</li>
+</ul>
+</p>
diff --git a/themes/openSUSE/help-install/sk/main::install_src.html b/themes/openSUSE/help-install/sk/main::install_src.html
new file mode 100644
index 0000000..ba97f57
--- /dev/null
+++ b/themes/openSUSE/help-install/sk/main::install_src.html
@@ -0,0 +1,12 @@
+<h3>
+<a name="install_src">Inštalačný zdroj</a>
+</h3>
+
+<p>
+Press <em>@@@fkey_inst@@@</em> to choose an installation source.
+</p>
+
+<p>
+This is the same as using the <a href="#o_install">inštalovať</a>
+boot option.
+</p>
diff --git a/themes/openSUSE/help-install/sk/main::keytable.html b/themes/openSUSE/help-install/sk/main::keytable.html
new file mode 100644
index 0000000..f3c87f1
--- /dev/null
+++ b/themes/openSUSE/help-install/sk/main::keytable.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="keytable">Voľba jazyka a klávesnice</a>
+</h3>
+
+<p>
+Press <em>@@@fkey_lang@@@</em> to change language and keyboard layout the boot loader uses.
+</p>
diff --git a/themes/openSUSE/help-install/sk/main::linux.html b/themes/openSUSE/help-install/sk/main::linux.html
new file mode 100644
index 0000000..924c4eb
--- /dev/null
+++ b/themes/openSUSE/help-install/sk/main::linux.html
@@ -0,0 +1,10 @@
+<h3>
+<a name="linux">Inštalácia</a>
+</h3>
+
+<p>
+Select <em>Inštalácia</em> to start the default installation. The
+<a href="#opt">Možnosti štartu</a> entered are used in the
+start-up. This item activates many features of commonly available
+hardware.
+</p>
diff --git a/themes/openSUSE/help-install/sk/main::memtest.html b/themes/openSUSE/help-install/sk/main::memtest.html
new file mode 100644
index 0000000..430e88e
--- /dev/null
+++ b/themes/openSUSE/help-install/sk/main::memtest.html
@@ -0,0 +1,14 @@
+<h3>
+<a name="memtest">Test pamäte</a>
+</h3>
+
+<p>
+The included <em>Test pamäte</em> provides good possibilities to
+stress test the hardware of a system. Its main purpose is to detect
+broken RAM, but it also stresses many other parts of the system.
+</p>
+
+<p>
+There is no guarantee that the memory is good if no errors are
+found, although most of memory defects will be found.
+</p>
diff --git a/themes/openSUSE/help-install/sk/main::noacpi.html b/themes/openSUSE/help-install/sk/main::noacpi.html
new file mode 100644
index 0000000..3c8d502
--- /dev/null
+++ b/themes/openSUSE/help-install/sk/main::noacpi.html
@@ -0,0 +1,24 @@
+<h3>
+<a name="noacpi">Inštalácia - bez ACPI</a>
+</h3>
+
+<p>
+Current hardware usually requires ACPI (Advanced Configuration and Power Interface)
+to control the interrupt handling.
+ACPI completely replaces the old APM system.
+</p>
+
+<p>
+Select <em>Inštalácia - bez ACPI</em> if you encounter
+problems during boot of the kernel. Known problems with machines that
+have problems with ACPI are:
+<ul>
+ <li>kernel freezes when booting</li>
+ <li>PCI Cards are not detected or initialized properly</li>
+</ul>
+</p>
+
+<p>
+You may also try the <a href="#firmware">Test firmvéru</a> boot option
+and look at the test results of the ACPI validation.
+</p>
diff --git a/themes/openSUSE/help-install/sk/main::nolapic.html b/themes/openSUSE/help-install/sk/main::nolapic.html
new file mode 100644
index 0000000..5865353
--- /dev/null
+++ b/themes/openSUSE/help-install/sk/main::nolapic.html
@@ -0,0 +1,14 @@
+<h3>
+<a name="nolapic">Inštalácia - bez lokálneho APIC</a>
+</h3>
+
+<p>
+Normally there are no problems with the APIC (Advanced Programmable Interrupt
+Controller). But if you seem to have some, try this option to boot
+without local APIC support.
+</p>
+
+<p>
+Please don't confuse this with <a href="#noacpi">ACPI</a>
+(Advanced Configuration and Power Interface).
+</p>
diff --git a/themes/openSUSE/help-install/sk/main::opt.html b/themes/openSUSE/help-install/sk/main::opt.html
new file mode 100644
index 0000000..b68baf5
--- /dev/null
+++ b/themes/openSUSE/help-install/sk/main::opt.html
@@ -0,0 +1,28 @@
+<h3>
+<a name="opt">Možnosti štartu</a>
+</h3>
+
+<p>
+There are two types of boot options available. First, there are
+options that affect the installer. Second, there are kernel
+options. Some of the more common options are:
+</p>
+
+<p>
+a) installer options
+<ul>
+ <li><a href="#o_install">inštalovať</a> -- select an installation source</li>
+ <li><a href="#network">voľby siete</a> -- the network options</li>
+ <li><a href="#o_vnc">Voľby vnc</a> -- options for installation via VNC</li>
+</ul>
+</p>
+
+<p>
+b) kernel options
+<ul>
+ <li><a href="#o_splash">úvodná obrazovka</a> -- influence the behavior of the splash screen</li>
+ <li><a href="#o_apm">apm</a> -- toggle power management</li>
+ <li><a href="#o_acpi">acpi</a> -- advanced configuration and power interface</li>
+ <li><a href="#o_ide">ide</a> -- control the IDE subsystem</li>
+</ul>
+</p>
diff --git a/themes/openSUSE/help-install/sk/main::opt::network.html b/themes/openSUSE/help-install/sk/main::opt::network.html
new file mode 100644
index 0000000..d4f52b7
--- /dev/null
+++ b/themes/openSUSE/help-install/sk/main::opt::network.html
@@ -0,0 +1,35 @@
+<a name="o_hostip"/>
+<a name="o_netmask"/>
+<a name="o_gateway"/>
+
+<h3>
+<a name="network">Inštalačné možnosti: Sieťové voľby</a>
+</h3>
+
+<p>
+It is possible to configure the network interface right now. The
+hardware will be detected later by YaST2. The minimum set of options
+to configure your network card consists of host IP and netmask. For
+example:
+<ul>
+ <li>hostip=192.168.0.10 netmask=255.255.255.0</li>
+</ul>
+</p>
+
+<p>
+or in a shorter form:
+<ul>
+ <li>hostip=192.168.0.10/24</li>
+</ul>
+</p>
+
+<p>
+If you specified a <a href="#o_install">inštalácia po sieti</a> and do
+not specify both of these options, the installer tries to configure
+the network interface with <em>dhcp</em>. If you need a default
+gateway, specify this with the option <em>brána</em>. For
+example:
+<ul>
+ <li>gateway=192.168.0.8</li>
+</ul>
+</p>
diff --git a/themes/openSUSE/help-install/sk/main::opt::o_acpi.html b/themes/openSUSE/help-install/sk/main::opt::o_acpi.html
new file mode 100644
index 0000000..58dd968
--- /dev/null
+++ b/themes/openSUSE/help-install/sk/main::opt::o_acpi.html
@@ -0,0 +1,23 @@
+<h3>
+<a name="o_acpi">Voľba jadra: acpi</a>
+</h3>
+
+<p>
+ACPI (Advanced Configuration and Power Interface) is a
+standard that defines power and configuration management interfaces
+between an operating system and the BIOS. By default, <em>acpi</em> is
+switched on when a BIOS is detected that is newer than from year
+2000. There are several commonly
+used parameters to control the behavior of ACPI:
+<ul>
+ <li><em>pci=noacpi</em> -- do not use ACPI to route PCI interrupts</li>
+ <li><em>acpi=oldboot</em> -- only the parts of ACPI that are relevant for booting remain activated</li>
+ <li><em>acpi=off</em> -- switch off ACPI completely</li>
+ <li><em>acpi=force</em> -- switch on ACPI even if your BIOS is dated before 2000</li>
+</ul>
+</p>
+
+<p>
+Especially on new computers, it replaces the old
+<a href="#o_apm">apm</a> system.
+</p>
diff --git a/themes/openSUSE/help-install/sk/main::opt::o_apm.html b/themes/openSUSE/help-install/sk/main::opt::o_apm.html
new file mode 100644
index 0000000..fefd8ed
--- /dev/null
+++ b/themes/openSUSE/help-install/sk/main::opt::o_apm.html
@@ -0,0 +1,21 @@
+<h3>
+<a name="o_apm">Voľba jadra: apm</a>
+</h3>
+
+<p>
+APM is one of the two power management strategies used on current
+computers. It is mainly used with laptops for functions like suspend
+to disk, but it may also be responsible for switching off the
+computer after power down. APM relies on a correct working BIOS. If
+the BIOS is broken, APM may have only limited use or even prevent the
+computer from working. Therefore, it may be switched off with the
+parameter
+<ul>
+ <li><em>apm=off</em> -- switch off APM completely</li>
+</ul>
+</p>
+
+<p>
+Some very new computers may take more advantage from the newer
+<a href="#o_acpi">ACPI</a>.
+</p>
diff --git a/themes/openSUSE/help-install/sk/main::opt::o_ide.html b/themes/openSUSE/help-install/sk/main::opt::o_ide.html
new file mode 100644
index 0000000..6a25d38
--- /dev/null
+++ b/themes/openSUSE/help-install/sk/main::opt::o_ide.html
@@ -0,0 +1,12 @@
+<h3>
+<a name="o_ide">Voľba jadra: ide</a>
+</h3>
+
+<p>
+IDE is, unlike SCSI, commonly used in most desktop workstations.
+To circumvent some hardware problems that occur with IDE systems, use the
+kernel parameter:
+<ul>
+ <li><em>ide=nodma</em> -- switch off DMA for IDE drives</li>
+</ul>
+</p>
diff --git a/themes/openSUSE/help-install/sk/main::opt::o_install.html b/themes/openSUSE/help-install/sk/main::opt::o_install.html
new file mode 100644
index 0000000..10326e3
--- /dev/null
+++ b/themes/openSUSE/help-install/sk/main::opt::o_install.html
@@ -0,0 +1,30 @@
+<h3>
+<a name="o_install">Voľba inštalácie: instalácia</a>
+</h3>
+
+<p>
+By default, the local CD-ROMs are searched for the installation source.
+For a network install, select the
+<em>inštalovať</em> option. Possible installation protocols are
+<ul>
+ <li>FTP</li>
+ <li>NFS</li>
+ <li>HTTP</li>
+</ul>
+</p>
+
+<p>
+The syntax to use is just like standard URLs. For example,
+if your server is found at 192.168.0.1 and you want to do an NFS-based
+install from the directory /install on this server, specify
+the source as follows:
+<ul>
+ <li>install=nfs://192.168.0.1/install</li>
+</ul>
+</p>
+
+<p>
+The network card will either be configured with <em>dhcp</em> or you
+must specify the parameters yourself as described in the
+<a href="#network">voľby siete</a>.
+</p>
diff --git a/themes/openSUSE/help-install/sk/main::opt::o_splash.html b/themes/openSUSE/help-install/sk/main::opt::o_splash.html
new file mode 100644
index 0000000..1db667e
--- /dev/null
+++ b/themes/openSUSE/help-install/sk/main::opt::o_splash.html
@@ -0,0 +1,12 @@
+<h3>
+<a name="o_splash">Voľby jadra: úvodná obrazovka</a>
+</h3>
+
+<p>
+The splash screen is the picture shown during system start-up.
+<ul>
+ <li><em>splash=0</em> -- The splash screen is switched off. This may be useful with very old monitors or if some error occurs.</li>
+ <li><em>splash=verbose</em> -- Activates splash, kernel and boot messages are still shown.</li>
+ <li><em>splash=silent</em> -- Activates splash, but no messages. Instead a progress bar is drawn.</li>
+</ul>
+</p>
diff --git a/themes/openSUSE/help-install/sk/main::opt::o_vnc.html b/themes/openSUSE/help-install/sk/main::opt::o_vnc.html
new file mode 100644
index 0000000..33e408c
--- /dev/null
+++ b/themes/openSUSE/help-install/sk/main::opt::o_vnc.html
@@ -0,0 +1,18 @@
+<a name="o_vncpassword"/>
+
+<h3>
+<a name="o_vnc">Voľba inštalácie: vnc</a>
+</h3>
+
+<p>
+To enable the VNC installation, specify the
+parameters vnc and vncpassword:
+<ul>
+ <li><em>vnc=1 vncpassword=mojeheslo</em></li>
+</ul>
+</p>
+
+<p>
+The VNC server will be started and you may control YaST2 over any VNC
+client from a remote system.
+</p>
diff --git a/themes/openSUSE/help-install/sk/main::rescue.html b/themes/openSUSE/help-install/sk/main::rescue.html
new file mode 100644
index 0000000..8e7fe61
--- /dev/null
+++ b/themes/openSUSE/help-install/sk/main::rescue.html
@@ -0,0 +1,10 @@
+<h3>
+<a name="rescue">Záchranný systém</a>
+</h3>
+
+<p>
+The <em>Záchranný systém</em> is a small RAM disk base system. From there,
+it is possible to make all kinds of changes to an installed system. Because
+only low-level tools are available in this system, it is intended for
+experts.
+</p>
diff --git a/themes/openSUSE/help-install/sk/main::videomode.html b/themes/openSUSE/help-install/sk/main::videomode.html
new file mode 100644
index 0000000..e31c3ac
--- /dev/null
+++ b/themes/openSUSE/help-install/sk/main::videomode.html
@@ -0,0 +1,18 @@
+<h3>
+<a name="videomode">Voľba zobrazovacieho režimu</a>
+</h3>
+
+<p>
+Press <em>@@@fkey_video@@@</em> to get the list of video modes your graphics card
+supports. The highest mode your monitor can display is preselected.
+</p>
+
+<p>
+It is possible that your monitor cannot be detected automatically. In that
+case, select your preferred mode manually.
+</p>
+
+<p>
+If your system has problems with the graphics card during the
+installation, the <em>Textový režim</em> may be a usable work-around.
+</p>
diff --git a/themes/openSUSE/help-install/sk/navi.html b/themes/openSUSE/help-install/sk/navi.html
new file mode 100644
index 0000000..b4f8211
--- /dev/null
+++ b/themes/openSUSE/help-install/sk/navi.html
@@ -0,0 +1,3 @@
+<p>
+Return to <a href="#foobar">FOOBAR</a>
+</p>
diff --git a/themes/openSUSE/help-install/sv/main.html b/themes/openSUSE/help-install/sv/main.html
new file mode 100644
index 0000000..5579a4d
--- /dev/null
+++ b/themes/openSUSE/help-install/sv/main.html
@@ -0,0 +1,35 @@
+<h3>
+<a name="main">Hjälp om starthanterare</a>
+</h3>
+
+<p>Välkommen till <em>@@@product@@@</em></p>
+
+<p>Välj önskad funktion på menyn. Om du har problem med att navigera i hjälpsystemet trycker du på <em>@@@fkey_help@@@</em> och går till <a href="#help">beskrivning</a> i hjälpsystemet. Menyns huvudfunktioner är: </p>
+
+<p><a href="#harddisk">Starta från hårddisk</a>: Det här valet kommer inte att göra något med systemet. Det startar endast ett tidigare installerat operativsystem.</p>
+
+<p><a href="#linux">Installation</a>: Det här installationsläget fungerar på de flesta datorer. Om du upplever att systemet låser sig under start eller problem med identifiering av hårdvarukomponenter, som t ex diskstyrenheter eller nätverkskort, försök med något av följande installationsalternativ.</p>
+
+<p><a href="#noacpi">Installation - ACPI inaktiverat</a>: Många av de datorer som säljs för tillfället har en ofullständig eller felaktig implementering av ACPI. Det här valet inaktiverar ACPI-stöd i kärnan, men aktiverar många prestandafunktioner, t ex DMA för IDE-hårddiskar.</p>
+
+<p><a href="#nolapic">Installation - Lokal APIC inaktiverat</a>: Om den vanliga installationen misslyckas kan det bero på att systemmaskinvaran inte har stöd för lokal APIC. Om detta verkar vara fallet använder du det här alternativet och installerar utan stöd för lokal APIC.</p>
+
+<p><a href="#failsafe">Installation - Säkra inställningar</a>: Om du inte lyckades med <em>Installation</em>, kan det här valet kanske lösa problemet.</p>
+
+<p><a href="#rescue">Räddningssystem</a>: Den här startavbilden startar ett litet Linux-system i RAM. Det här är användbart om systemet inte startar ordentligt. Logga in som root när du har startat det här systemet.</p>
+
+<p><a href="#firmware">Test av fast program</a>: Kör en BIOS-test som kontrollerar ACPI och andra funktioner i ditt BIOS.</p>
+
+<p><a href="#memtest">Minnestest</a>: Minnestestning kan användas till mer än att kontrollera installationen av nya minnesmoduler. Det är ett stresstest för en stor del av datorsystemet och kan ge indikationer på eventuella maskinvaruproblem.</p>
+
+<p><a href="#opt">Startalternativ</a>: Startalternativen kan förändra datorns beteende. De är inställningar för kärnan.</p>
+
+<p><a href="#help">@@@fkey_help@@@ Hjälp</a>: Detta är skiftlägeskänsligt. Olika fönster visas beroende på vilket element som är aktivt på startskärmen. En beskrivning av hjälpsystemet finns tillgänglig.</p>
+
+<p><a href="#keytable">@@@fkey_lang@@@</a>: Ange det språk och den tangentbordsmappning som ska användas av starthanteraren.</p>
+
+<p><a href="#videomode">@@@fkey_video@@@ Skärmläge</a>: Här väljer du skärmupplösning under installationen. Om du stöter på problem med den grafiska installationen kanske <em>textläge</em> fungerar bättre.</p>
+
+<p><a href="#install_src">@@@fkey_inst@@@ Installationskälla</a>: Välj installationskälla.</p>
+
+<p><a href="#driverupdate">@@@fkey_dud@@@ Drivrutinsuppdatering</a>: För väldigt nya datorer kan en drivrutinsuppdatering behövas för att installera systemet.</p>
diff --git a/themes/openSUSE/help-install/sv/main::bits.html b/themes/openSUSE/help-install/sv/main::bits.html
new file mode 100644
index 0000000..db6a2ee
--- /dev/null
+++ b/themes/openSUSE/help-install/sv/main::bits.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="bits">Val av mjukvarutyp</a>
+</h3>
+
+<p>Du kan välja att installera 32-bitars eller 64-bitars versionen av @@@product@@@.</p>
diff --git a/themes/openSUSE/help-install/sv/main::driverupdate.html b/themes/openSUSE/help-install/sv/main::driverupdate.html
new file mode 100644
index 0000000..7f9219b
--- /dev/null
+++ b/themes/openSUSE/help-install/sv/main::driverupdate.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="driverupdate">Drivrutinsuppdatering</a>
+</h3>
+
+<p>Om du behöver en diskett eller CD-ROM-skiva med drivrutinsuppdateringar trycker du på <em>@@@fkey_dud@@@</em>. När Linux-kärnan har lästs in uppmanas du av starthanteraren att sätta in mediet med drivrutinsuppdateringen.</p>
+
+<p>En drivrutinsuppdatering är vanligtvis en diskett med nya versioner av maskinvarudrivrutiner eller programkorrigeringar som behövs vid installationen.</p>
diff --git a/themes/openSUSE/help-install/sv/main::failsafe.html b/themes/openSUSE/help-install/sv/main::failsafe.html
new file mode 100644
index 0000000..724ac9c
--- /dev/null
+++ b/themes/openSUSE/help-install/sv/main::failsafe.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="failsafe">Installation - Säkra inställningar</a>
+</h3>
+
+<p>Välj <em>Installation - Säkra inställningar</em> om systemet hänger under installationen eller om fel uppstår som inte går att återskapa. Med det här alternativet inaktiveras DMA för IDE-enheter och samtliga strömsparfunktioner. Se även kärnalternativen för <a href="#o_apm">apm</a>, <a href="#o_acpi">acpi</a> och <a href="#o_ide">ide</a>.</p>
diff --git a/themes/openSUSE/help-install/sv/main::firmware.html b/themes/openSUSE/help-install/sv/main::firmware.html
new file mode 100644
index 0000000..aefe82e
--- /dev/null
+++ b/themes/openSUSE/help-install/sv/main::firmware.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="firmware">Test av fast program</a>
+</h3>
+
+<p>Startar en BIOS-kontrollfunktion som validerar ACPI-tabellerna och många andra delar av BIOS. Testresultaten kan lagras på USB-enhet eller sparas via nätverk.</p>
diff --git a/themes/openSUSE/help-install/sv/main::harddisk.html b/themes/openSUSE/help-install/sv/main::harddisk.html
new file mode 100644
index 0000000..b61b274
--- /dev/null
+++ b/themes/openSUSE/help-install/sv/main::harddisk.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="harddisk">Starta från hårddisk</a>
+</h3>
+
+<p>Välj <em>Starta installerat system</em> om du vill starta det system som finns installerat på den lokala hårddisken. Systemet måste vara korrekt installerat eftersom endast MBR (Master Boot Record) på den första hårddisken startas. Den första hårddiskens enhets-ID tillhandahålls av datorns BIOS.</p>
+
+<p>Använd det här om du glömde att ta ur cd:n eller dvd:n från enheten och vill starta datorn från hårddisken.</p>
diff --git a/themes/openSUSE/help-install/sv/main::help.html b/themes/openSUSE/help-install/sv/main::help.html
new file mode 100644
index 0000000..ea4031f
--- /dev/null
+++ b/themes/openSUSE/help-install/sv/main::help.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="help">Att använda hjälpsystemet</a>
+</h3>
+
+<p>Direkthjälpen för starthanteraren är sammanhangskänslig. Den innehåller information om det valda menyalternativet eller, om du redigerar startalternativ, söker efter information om det alternativ där markören befinner sig.</p>
+
+<p>Navigationstangenter <ul><li><em>Uppåtpil</em>: färglägg föregående länk</li><li><em>Neråtpil</em>: färglägg nästa länk</li><li><em>Vänsterpil</em>, <em>Backsteg</em>: återgå till föregående ämne</li><li><em>Högerpil</em>, <em>Enter</em>, <em>Mellanslag</em>: följ länk</li><li><em>Page Up</em>: rulla upp en sida</li><li><em>Page Down</em>: rulla ner en sida</li><li><em>Home</em>: gå till sidstart</li><li><em>End</em>: gå till sidslut</li><li><em>Esc</em>: lämna hjälpen</li></ul></p>
diff --git a/themes/openSUSE/help-install/sv/main::install_src.html b/themes/openSUSE/help-install/sv/main::install_src.html
new file mode 100644
index 0000000..924c790
--- /dev/null
+++ b/themes/openSUSE/help-install/sv/main::install_src.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="install_src">Installationskälla</a>
+</h3>
+
+<p>Tryck <em>@@@fkey_inst@@@</em> för att välja en installationskälla.</p>
+
+<p>Detta har samma funktion som att använda startalternativet <a href="#o_install">installera</a>.</p>
diff --git a/themes/openSUSE/help-install/sv/main::keytable.html b/themes/openSUSE/help-install/sv/main::keytable.html
new file mode 100644
index 0000000..8fcdd59
--- /dev/null
+++ b/themes/openSUSE/help-install/sv/main::keytable.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="keytable">Val av språk och tangentbordslayout</a>
+</h3>
+
+<p>Tryck på <em>@@@fkey_lang@@@</em> för att ändra språket och tangentbordslayouten som starthanteraren ska använda.</p>
diff --git a/themes/openSUSE/help-install/sv/main::linux.html b/themes/openSUSE/help-install/sv/main::linux.html
new file mode 100644
index 0000000..d4f419b
--- /dev/null
+++ b/themes/openSUSE/help-install/sv/main::linux.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="linux">Installation</a>
+</h3>
+
+<p>Välj <em>Installation</em> om du vill starta standardinstallationen. Angiven <a href="#opt">startalternativ</a> används i startprocessen. Den här posten aktiverar många funktioner på vanlig maskinvara.</p>
diff --git a/themes/openSUSE/help-install/sv/main::memtest.html b/themes/openSUSE/help-install/sv/main::memtest.html
new file mode 100644
index 0000000..97799e4
--- /dev/null
+++ b/themes/openSUSE/help-install/sv/main::memtest.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="memtest">Minnestest</a>
+</h3>
+
+<p>Den medföljande <em>Minnestest</em> ger goda möjligheter att stresstesta systemets maskinvara. Huvudsyftet är att upptäcka skadat RAM-minne, men även många andra delar av systemet testas.</p>
+
+<p>Att inga fel hittas är ingen garanti för att minnet fungerar, även om de flesta typer av minnesfel kan hittas.</p>
diff --git a/themes/openSUSE/help-install/sv/main::noacpi.html b/themes/openSUSE/help-install/sv/main::noacpi.html
new file mode 100644
index 0000000..e92853d
--- /dev/null
+++ b/themes/openSUSE/help-install/sv/main::noacpi.html
@@ -0,0 +1,9 @@
+<h3>
+<a name="noacpi">Installation - ACPI inaktiverat</a>
+</h3>
+
+<p>För den aktuella maskinvaran krävs vanligtvis ACPI (Advanced Configuration and Power Interface) för styrning av avbrottshanteringen. ACPI ersätter det tidigare APM-systemet fullt ut.</p>
+
+<p>Välj <em>Installation - ACPI inaktiverat</em> om du upplever problem under start av kärnan. Kända problem med datorer som har problem med ACPI är: <ul><li>kärnan hänger sig vid start</li><li>PCI-kort identifieras eller initieras inte ordentligt</li></ul></p>
+
+<p>Du kan också prova startalternativet <a href="#firmware">Test av fast program</a> och se testresultaten av ACPI-kontrollen.</p>
diff --git a/themes/openSUSE/help-install/sv/main::nolapic.html b/themes/openSUSE/help-install/sv/main::nolapic.html
new file mode 100644
index 0000000..f2cdfd7
--- /dev/null
+++ b/themes/openSUSE/help-install/sv/main::nolapic.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="nolapic">Installation - Lokal APIC inaktiverat</a>
+</h3>
+
+<p>Normalt är det inga problem med APIC (Advanced Programmable Interrupt Controller). Om det ändå skulle uppstå problem kan du pröva det här alternativet för start utan lokalt APIC-stöd.</p>
+
+<p>Förväxla inte detta med <a href="#noacpi">ACPI</a> (Advanced Configuration and Power Interface).</p>
diff --git a/themes/openSUSE/help-install/sv/main::opt.html b/themes/openSUSE/help-install/sv/main::opt.html
new file mode 100644
index 0000000..4f3f6d0
--- /dev/null
+++ b/themes/openSUSE/help-install/sv/main::opt.html
@@ -0,0 +1,9 @@
+<h3>
+<a name="opt">Startalternativ</a>
+</h3>
+
+<p>Två typer av startalternativ finns tillgängliga. Alternativ som påverkar installationsprogrammet, samt kärnalternativ. Här är några av de vanligaste alternativen:</p>
+
+<p>a) installationsalternativ <ul><li><a href="#o_install">installera</a> -- välj en installationskälla</li><li><a href="#network">nätverksalternativ</a> -- nätverksalternativen</li><li><a href="#o_vnc">vnc-alternativ</a> -- alternativ för installation via VNC</li></ul></p>
+
+<p>b) kärnalternativ <ul><li><a href="#o_splash">startskärm</a> -- påverka startskärmens uppträdande</li><li><a href="#o_apm">apm</a> -- hantera strömsparfunktioner</li><li><a href="#o_acpi">acpi</a> -- avancerat inställnings- och strömhanteringsgränssnitt</li><li><a href="#o_ide">ide</a> -- kontrollera IDE-undersystemet</li></ul></p>
diff --git a/themes/openSUSE/help-install/sv/main::opt::network.html b/themes/openSUSE/help-install/sv/main::opt::network.html
new file mode 100644
index 0000000..2558523
--- /dev/null
+++ b/themes/openSUSE/help-install/sv/main::opt::network.html
@@ -0,0 +1,13 @@
+<a name="o_hostip"/>
+<a name="o_netmask"/>
+<a name="o_gateway"/>
+
+<h3>
+<a name="network">Installationsalternativ: Nätverksalternativ</a>
+</h3>
+
+<p>Det går att ställa in nätverksgränssnittet nu. Maskinvaran känns av senare av YaST2. Minimialternativen för inställning av nätverkskortet utgörs av värd-IP och nätmask. Exempel: <ul><li>värd-ip=192.168.0.10 nätmask=255.255.255.0</li></ul></p>
+
+<p>eller i kortare form: <ul><li>värd-ip=192.168.0.10/24</li></ul></p>
+
+<p>Om du angav en <a href="#o_install">nätverksbaserad installation</a> och inte anger båda de här alternativen, försöker installationsprogrammet ställa in nätverksgränssnittet med <em>dhcp</em>. Om du behöver en standard-gateway anger du detta med alternativet <em>gateway</em>. Exempel: <ul><li>gateway=192.168.0.8</li></ul></p>
diff --git a/themes/openSUSE/help-install/sv/main::opt::o_acpi.html b/themes/openSUSE/help-install/sv/main::opt::o_acpi.html
new file mode 100644
index 0000000..b322ebf
--- /dev/null
+++ b/themes/openSUSE/help-install/sv/main::opt::o_acpi.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="o_acpi">Kärnalternativ: acpi</a>
+</h3>
+
+<p>ACPI (Advanced Configuration and Power Interface) är en standard som definierar gränssnitt för ström- och inställningshantering mellan operativsystemet och BIOS. Som standard aktiveras <em>acpi</em> när ett BIOS upptäcks som är tillverkat senare än år 2000. Det finns flera vanliga parametrar som styr ACPI:s beteende: <ul><li><em>pci=noacpi</em> -- använd inte ACPI för att hantera PCI-avbrott</li><li><em>acpi=oldboot</em> -- enbart de funktioner i ACPI som är relavanta för uppstart är aktiverade</li><li><em>acpi=av</em> -- stäng av ACPI helt</li><li><em>acpi=tvinga</em> -- slå på ACPI även om ditt BIOS är tillverkat före 2000</li></ul></p>
+
+<p>På speciellt nya datorer ersätter den det gamla <a href="#o_apm">apm</a> systemet.</p>
diff --git a/themes/openSUSE/help-install/sv/main::opt::o_apm.html b/themes/openSUSE/help-install/sv/main::opt::o_apm.html
new file mode 100644
index 0000000..b3c15d8
--- /dev/null
+++ b/themes/openSUSE/help-install/sv/main::opt::o_apm.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="o_apm">Kärnalternativ: apm</a>
+</h3>
+
+<p>APM är en av två strömsparstrategier som används på dagens datorer. Den används oftast på bärbara datorer för funktioner som vänteläge, men kan också hantera avstängning av datorn efter att strömbrytaren tryckts ned. För att APM ska fungera krävs en korrekt fungerande BIOS. Om BIOS är felaktig kanske APM endast har begränsade funktioner och den kan till och med hindra datorn från att fungera som den ska. Den kan därför stängas av med parametern <ul><li><em>apm=av</em> -- stäng av APM helt</li></ul></p>
+
+<p>En del nya datorer kan dra större fördel av det senare <a href="#o_acpi">ACPI</a>.</p>
diff --git a/themes/openSUSE/help-install/sv/main::opt::o_ide.html b/themes/openSUSE/help-install/sv/main::opt::o_ide.html
new file mode 100644
index 0000000..0646139
--- /dev/null
+++ b/themes/openSUSE/help-install/sv/main::opt::o_ide.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="o_ide">Kärnalternativ: ide</a>
+</h3>
+
+<p>Till skillnad mot SCSI används IDE på de flesta skrivbordsdatorer. För att kringgå vissa maskinvaruproblem som uppstår med IDE-system använder du följande kärnparameter: <ul><li><em>ide=nodma</em> -- stäng av DMA för IDE-enheter</li></ul></p>
diff --git a/themes/openSUSE/help-install/sv/main::opt::o_install.html b/themes/openSUSE/help-install/sv/main::opt::o_install.html
new file mode 100644
index 0000000..ae97432
--- /dev/null
+++ b/themes/openSUSE/help-install/sv/main::opt::o_install.html
@@ -0,0 +1,9 @@
+<h3>
+<a name="o_install">Installationsalternativ: installera</a>
+</h3>
+
+<p>Som standard söks de lokala CD-ROM-skivorna igenom efter installationskällan. För nätverksinstallation väljer du alternativet <em>installera</em>. Möjliga installationsprotokoll är <ul><li>FTP</li><li>NFS</li><li>HTTP</li></ul></p>
+
+<p>Samma syntax som för vanliga URL:er används. Om servern t.ex. finns på 192.168.0.1 och du vill göra en NFS-baserad installation från katalogen /install på den servern, anger du källan enligt följande:<ul><li>installera=nfs://192.168.0.1/install</li></ul></p>
+
+<p>Antingen ställs nätverkskortet in med <em>dhcp</em> eller så anger du själv inställningarna enligt anvisningarna i <a href="#network">nätverksalternativ</a>.</p>
diff --git a/themes/openSUSE/help-install/sv/main::opt::o_splash.html b/themes/openSUSE/help-install/sv/main::opt::o_splash.html
new file mode 100644
index 0000000..9c22ffb
--- /dev/null
+++ b/themes/openSUSE/help-install/sv/main::opt::o_splash.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="o_splash">Kärnalternativ: startskärm</a>
+</h3>
+
+<p>Startskärmen är bilden som visas när systemet startar. <ul><li><em>startskärm=0</em> -- Startskärmen stängs av. Detta kan vara praktiskt på äldre bildskärmar eller om fel uppstår.</li><li><em>startskärm=utförlig</em> -- Aktiverar startskärmar. Kärn- och startmeddelanden visas fortfarande.</li><li><em>startskärm=tyst</em> -- Aktiverar startskärm, men inga meddelanden. Istället visas ett fortskridandefält.</li></ul></p>
diff --git a/themes/openSUSE/help-install/sv/main::opt::o_vnc.html b/themes/openSUSE/help-install/sv/main::opt::o_vnc.html
new file mode 100644
index 0000000..8f888d3
--- /dev/null
+++ b/themes/openSUSE/help-install/sv/main::opt::o_vnc.html
@@ -0,0 +1,9 @@
+<a name="o_vncpassword"/>
+
+<h3>
+<a name="o_vnc">Installationsalternativ: vnc</a>
+</h3>
+
+<p>För att aktivera VNC-installationen, ange parametrarna vnc och vncpassword: <ul><li><em>vnc=1 vnclösenord=exempel</em></li></ul></p>
+
+<p>VNC-servern kommer att startas och du kan styra YaST2 från en VNC-klient från ett fjärrsystem.</p>
diff --git a/themes/openSUSE/help-install/sv/main::rescue.html b/themes/openSUSE/help-install/sv/main::rescue.html
new file mode 100644
index 0000000..c8e760c
--- /dev/null
+++ b/themes/openSUSE/help-install/sv/main::rescue.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="rescue">Räddningssystem</a>
+</h3>
+
+<p><em>Räddningssystem</em> är ett litet RAM-diskbassystem. Därifrån går det att utföra alla typer av ändringar på ett installerat system. Eftersom endast verktyg på låg nivå finns tillgängliga i systemet är det avsett för experter.</p>
diff --git a/themes/openSUSE/help-install/sv/main::videomode.html b/themes/openSUSE/help-install/sv/main::videomode.html
new file mode 100644
index 0000000..b9ae041
--- /dev/null
+++ b/themes/openSUSE/help-install/sv/main::videomode.html
@@ -0,0 +1,9 @@
+<h3>
+<a name="videomode">Val av videoläge</a>
+</h3>
+
+<p>Tryck på <em>@@@fkey_video@@@</em> om du vill se en lista med de skärmlägen som stöds av grafikkortet. Det högsta läge som stöds av bildskärmen är förvalt.</p>
+
+<p>Det är möjligt att din bildskärm inte kan identifieras automatiskt. Om så är fallet, välj läget du föredrar manuellt.</p>
+
+<p>Om systemet har problem med grafikkortet under installationen, kanske <em>textläge</em> kan lösa problemet.</p>
diff --git a/themes/openSUSE/help-install/sv/navi.html b/themes/openSUSE/help-install/sv/navi.html
new file mode 100644
index 0000000..5ec7d44
--- /dev/null
+++ b/themes/openSUSE/help-install/sv/navi.html
@@ -0,0 +1 @@
+<p>Återgå till <a href="#foobar">FOOBAR</a></p>
diff --git a/themes/openSUSE/help-install/th/main.html b/themes/openSUSE/help-install/th/main.html
new file mode 100644
index 0000000..36811dc
--- /dev/null
+++ b/themes/openSUSE/help-install/th/main.html
@@ -0,0 +1,35 @@
+<h3>
+<a name="main">ช่วยเหลือเกี่ยวกับตัวจัดการการบูต</a>
+</h3>
+
+<p>ยินดีต้อนรับสู่ <em>@@@product@@@</em></p>
+
+<p>ใช้เมนูนี้เพื่อเลือกฟังก์ชันที่ต้องการใช้ หากคุณมีปัญหากับการนำทางของระบบช่วยเหลือนี้ ให้กดที่ <em>@@@fkey_help@@@</em> เพื่อไปยัง <a href="#help">ข้อมูลอธิบาย</a> ของระบบช่วยเหลือ โดยฟังก์ชันหลัก ๆ ในเมนูนี้มีดังนี้:</p>
+
+<p><a href="#harddisk">บูตจากฮาร์ดดิสก์</a>: การเลือกนี้จะไม่ทำอะไรกับระบบ โดยจะมีเพียงการเริ่มระบบที่ถูกติดตั้งไว้ก่อนหน้านี้</p>
+
+<p><a href="#linux">ทำการติดตั้ง</a>: การติดตั้งในโหมดนี้ส่วนมากจะใช้ได้กับเกือบทุกเครื่อง หากคุณเคยเจอเหตุการณ์ระบบค้างในระหว่างการบูตระบบ หรือเกิดปัญหาในการตรวจหาองค์ประกอบของฮาร์ดแวร์ของคุณ เช่น ตัวควบคุมดิสก์ หรือแผงวงจรเครือข่าย ให้เลือกใช้ตัวเลือกการติดตั้งตัวใดตัวหนึ่งต่อไปนี้</p>
+
+<p><a href="#noacpi">ทำการติดตั้ง -- ปิดการใช้งาน ACPI</a>: เครื่องคอมพิวเตอร์ที่มีจำหน่ายในปัจจุบันส่วนมากนั้นมักมีระบบ ACPI ที่ไม่สมบูรณ์หรือผิดพลาดมาให้ การเลือกนี้จะเป็นการปิดการรองรับระบบ ACPI ในระดับเคอร์เนล แต่จะยังคงเปิดใช้งานคุณลักษณะส่วนมากที่เกี่ยวข้องกับประสิทธิภาพอยู่ เช่น DMA สำหรับฮาร์ดดิสก์แบบ IDE เป็นต้น</p>
+
+<p><a href="#nolapic">ทำการติดตั้ง -- ปิดการใช้งาน APIC ภายใน</a>: หากการติดตั้งในแบบปกตินี้เกิดล้มเหลว อาจจะเป็นไปได้ว่าฮาร์ดแวร์ของระบบไม่มีการรองรับการทำงานของ APIC อยู่ภายใน หากเกิดเหตุการณ์นี้ ให้ใช้ตัวเลือกนี้เพื่อทำการติดตั้งโดยไม่เปิดใช้การรองรับ APIC ภายใน</p>
+
+<p><a href="#failsafe">ทำการติดตั้ง -- โหมดตั้งค่าแบบปลอดภัย</a>: หากคุณไม่ประสบผลสำเร็จกับ <em>ทำการติดตั้ง</em>, ส่วนนี้อาจจะช่วยแก้ปัญหาดังกล่าวได้</p>
+
+<p><a href="#rescue">กู้ระบบ</a>: อิมเมจการบูตตัวนี้ จะใช้เริ่มระบบลินุกซ์ขนาดเล็กในหน่วยความจำ ซึ่งมีประโยชน์ในกรณีที่ระบบไม่สามารถเริ่มการทำงานได้อย่างถูกต้อง หลังจากการบูตระบบขนาดเล็กนี้แล้ว ให้ทำการล็อกอินเป็นผู้ใช้ root</p>
+
+<p><a href="#firmware">ทดสอบเฟิร์มแวร์</a>: เรียกเครื่องมือทดสอบไบออสเพื่อตรวจการทำงานของ ACPI และส่วนอื่น ๆ ของไบออสของคุณ</p>
+
+<p><a href="#memtest">ทดสอบหน่วยความจำ</a>: การทดสอบหน่วยความจำนั้นมีประโยชน์มากกว่าเป็นการตรวจสอบการติดตั้งหน่วยความจำใหม่เท่านั้น แต่มันสามารถจะใช้ทดสอบส่วนที่สำคัญของระบบของคุณเพื่อชี้ว่าฮาร์ดแวร์มีปัญหาในการทำงานหรือไม่ก็ได้</p>
+
+<p><a href="#opt">ตัวเลือกการบูตระบบ</a>: ตัวเลือกการบูตอาจจะเปลี่ยนพฤติกรรมของระบบของคุณได้อย่างสมบูรณ์ โดยมันจะทำการตั้งค่าให้กับเคอร์เนลระบบ</p>
+
+<p><a href="#help">@@@fkey_help@@@ ช่วยเหลือ</a>: นี่เป็นส่วนที่แปรผันได้ เนื่องจากมันจะแสดงหน้าต่างที่แตกต่างกันออกไป ขึ้นอยู่กับว่ากำลังใช้งานส่วนใดของหน้าจอการบูตอยู่ โดยจะเป็นการแสดงข้อมูลอธิบายคล้ายกับระบบช่วยเหลือที่เห็นอยู่นี้</p>
+
+<p><a href="#keytable">@@@fkey_lang@@@</a>: ตั้งค่าภาษาและการจัดผังแป้นพิมพ์ที่จะใช้กับตัวจัดการการบูต</p>
+
+<p><a href="#videomode">@@@fkey_video@@@ โหมดแสดงผล</a>: คุณสามารถเลือกความละเอียดการแสดงผลของหน้าจอที่จะใช้ในระหว่างการติดตั้งได้ที่นี่ หากคุณพบปัญหาในการใช้การติดตั้งผ่านระบบกราฟิก คุณอาจใช้ <em>โหมดข้อความ</em> เพื่อใช้ทดแทนมันได้เช่นกัน</p>
+
+<p><a href="#install_src">@@@fkey_inst@@@ แหล่งใช้ติดตั้ง</a>: เลือกแหล่งต้นทางสำหรับติดตั้ง</p>
+
+<p><a href="#driverupdate">@@@fkey_dud@@@ ปรับรุ่นไดรเวอร์</a>: สำหรับเครื่องใหม่ ๆ อาจจำเป็นต้องใช้ไดรเวอร์ที่ทันสมัยเพื่อใช้ทำการติดตั้งระบบ</p>
diff --git a/themes/openSUSE/help-install/th/main::bits.html b/themes/openSUSE/help-install/th/main::bits.html
new file mode 100644
index 0000000..0b35a5f
--- /dev/null
+++ b/themes/openSUSE/help-install/th/main::bits.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="bits">เลือกประเภทซอฟต์แวร์</a>
+</h3>
+
+<p>คุณมีทางเลือกในการติดตั้ง ว่าจะติดตั้ง @@@product@@@ ในแบบระบบ 32 บิต หรือ 64 บิต</p>
diff --git a/themes/openSUSE/help-install/th/main::driverupdate.html b/themes/openSUSE/help-install/th/main::driverupdate.html
new file mode 100644
index 0000000..4c93e59
--- /dev/null
+++ b/themes/openSUSE/help-install/th/main::driverupdate.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="driverupdate">ปรับรุ่นไดรเวอร์</a>
+</h3>
+
+<p>หากคุณจำเป็นต้องใช้แผ่นฟลอปปีหรือซีดีรอมของไดรเวอร์รุ่นใหม่ ให้กดที่ <em>@@@fkey_dud@@@</em> จากนั้นตัวจัดการการบูตระบบจะแจ้งให้คุณใส่สื่อของไดรเวอร์รุ่นใหม่หลังจากทำการโหลดเคอร์เนลของระบบลินุกซ์แล้ว</p>
+
+<p>ไดรเวอร์รุ่นใหม่โดยทั่วไปจะเป็นแผ่นฟลอปปีที่มีไดรเวอร์รุ่นใหม่ของฮาร์ดแวร์ หรือเป็นตัวที่แก้บั๊กการทำงานที่ผิดพลาด ซึ่งจำเป็นต่อการติดตั้ง</p>
diff --git a/themes/openSUSE/help-install/th/main::failsafe.html b/themes/openSUSE/help-install/th/main::failsafe.html
new file mode 100644
index 0000000..b73a5b4
--- /dev/null
+++ b/themes/openSUSE/help-install/th/main::failsafe.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="failsafe">ทำการติดตั้ง -- โหมดตั้งค่าแบบปลอดภัย</a>
+</h3>
+
+<p>เลือก <em>ทำการติดตั้ง -- โหมดตั้งค่าแบบปลอดภัย</em> หากคุณพบว่าเครื่องมีอาการค้างหรือมีข้อผิดพลาดในระหว่างทำการติดตั้ง ตัวเลือกนี้จะทำการปิดการทำงงาน DMA ของไดรฟ์แบบ IDE และปิดคุณสมบัติการประหยัดพลังงานทั้งหมดของมันด้วย โปรดดูตัวเลือก <a href="#o_apm">apm</a>, <a href="#o_acpi">acpi</a> และ <a href="#o_ide">ide</a> ของเคอร์เนลร่วมด้วย</p>
diff --git a/themes/openSUSE/help-install/th/main::firmware.html b/themes/openSUSE/help-install/th/main::firmware.html
new file mode 100644
index 0000000..4052630
--- /dev/null
+++ b/themes/openSUSE/help-install/th/main::firmware.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="firmware">ทดสอบเฟิร์มแวร์</a>
+</h3>
+
+<p>เรียกตัวทดสอบไบออสเพื่อตรวจสอบการทำงานของตาราง ACPI และส่วนอื่น ๆ ของไบออสของคุณ ผลลัพธ์ของการทดสอบจะถูกจัดเก็บไว้บนดิสก์แบบ USB หรือผ่านระบบเครือข่ายก็ได้</p>
diff --git a/themes/openSUSE/help-install/th/main::harddisk.html b/themes/openSUSE/help-install/th/main::harddisk.html
new file mode 100644
index 0000000..32ee398
--- /dev/null
+++ b/themes/openSUSE/help-install/th/main::harddisk.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="harddisk">บูตจากฮาร์ดดิสก์</a>
+</h3>
+
+<p>เลือก <em>บูตระบบที่ติดตั้งไว้</em> เพื่อเริ่มทำการติดตั้งลงในฮาร์ดดิสก์ภายในของคุณ ซึ่งระบบนี้ควรจะติดตั้งได้อย่างถูกต้อง เนื่องจากจะมีเพียงส่วน MBR (Master Boot Record) บนฮาร์ดดิสก์ตัวแรกเท่านั้นที่จะถูกเริ่มการทำงาน และหมายเลขประจำตัวอุปกรณ์ของฮาร์ดดิสก์ตัวแรกก็ได้มาจากการให้ค่าของไบออส</p>
+
+<p>ใช้นี่ หากคุณลืมที่จะเอาแผ่นซีดีหรือดีวีดีออกจากไดรฟ์ของคุณ และต้องการจะเริ่มการทำงานของเครื่องจากฮาร์ดดิสก์</p>
diff --git a/themes/openSUSE/help-install/th/main::help.html b/themes/openSUSE/help-install/th/main::help.html
new file mode 100644
index 0000000..14c2634
--- /dev/null
+++ b/themes/openSUSE/help-install/th/main::help.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="help">การใช้ระบบช่วยเหลือ</a>
+</h3>
+
+<p>ระบบช่วยเหลือของตัวจัดการการบูตนั้นผันแปรได้ โดยมันจะให้ข้อมูลเกี่ยวกับรายการเมนูที่เลือกไว้ หรือ หากคุณทำการแก้ไขตัวเลือกการบูต มันจะพยายามหาข้อมูลเกี่ยวกับตัวเลือกที่มีเคอร์เซอร์เลือกอยู่</p>
+
+<p>ปุ่มพิมพ์ที่ใช้ในการนำทาง <ul><li><em>ปุ่มลูกศรขึ้น</em>: ไปยังส่วนเชื่อมโยงก่อนหน้า</li><li><em>ปุ่มลูกศรลง</em>: ไปยังส่วนเชื่อมโยงถัดไป</li><li><em>ปุ่มลูกศรซ้าย</em>, <em>ปุ่ม Backspace</em>: กลับไปยังหัวข้อก่อนหน้า</li><li><em>ปุ่มลูกศรขวา</em>, <em>ปุ่ม Enter</em>, <em>ปุ่ม Space</em>: ตามส่วนเชื่อมโยง</li><li><em>ปุ่ม Page Up</em>: เลื่อนขึ้นหนึ่งหน้า</li><li><em>ปุ่ม Page Down</em>: เลื่อนลงหนึ่งหน้า</li><li><em>ปุ่ม Home</em>: ไปยังหน้าเริ่มต้น</li><li><em>ปุ่ม End</em>: ไปยังหน้าสุดท้าย</li><li><em>ปุ่ม Esc</em>: ออกจากความช่วยเหลือ</li></ul></p>
diff --git a/themes/openSUSE/help-install/th/main::install_src.html b/themes/openSUSE/help-install/th/main::install_src.html
new file mode 100644
index 0000000..4b58b62
--- /dev/null
+++ b/themes/openSUSE/help-install/th/main::install_src.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="install_src">แหล่งที่จะใช้ในการติดตั้ง</a>
+</h3>
+
+<p>กด <em>@@@fkey_inst@@@</em> เพื่อเลือกแหล่งที่จะใช้ในการติดตั้ง</p>
+
+<p>นี่เหมือนกับการใช้ตัวเลือกการบูต <a href="#o_install">ติดตั้ง</a></p>
diff --git a/themes/openSUSE/help-install/th/main::keytable.html b/themes/openSUSE/help-install/th/main::keytable.html
new file mode 100644
index 0000000..220c378
--- /dev/null
+++ b/themes/openSUSE/help-install/th/main::keytable.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="keytable">การเลือกภาษาและผังแป้นพิมพ์</a>
+</h3>
+
+<p>กด <em>@@@fkey_lang@@@</em> เพื่อเปลี่ยนภาษาและผังแป้นพิมพ์ที่จะใช้กับตัวจัดการการบูต</p>
diff --git a/themes/openSUSE/help-install/th/main::linux.html b/themes/openSUSE/help-install/th/main::linux.html
new file mode 100644
index 0000000..c239236
--- /dev/null
+++ b/themes/openSUSE/help-install/th/main::linux.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="linux">ทำการติดตั้ง</a>
+</h3>
+
+<p>เลือก <em>ทำการติดตั้ง</em> เพื่อเริ่มการติดตั้งแบบปริยาย ค่า <a href="#opt">ตัวเลือกการบูต</a> ที่ป้อนมา จะถูกใช้ในระหว่างการเริ่มระบบ รายการนี้จะเป็นการเรียกใช้คุณลักษณะจำนวนมากของฮาร์ดแวร์พื้นฐานที่มีอยู่</p>
diff --git a/themes/openSUSE/help-install/th/main::memtest.html b/themes/openSUSE/help-install/th/main::memtest.html
new file mode 100644
index 0000000..462a031
--- /dev/null
+++ b/themes/openSUSE/help-install/th/main::memtest.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="memtest">ทดสอบหน่วยความจำ</a>
+</h3>
+
+<p>การรวม <em>ทดสอบหน่วยความจำ</em> เป็นโอกาสดีที่จะได้ทำการทดสอบฮาร์ดแวร์ของระบบ โดยจุดประสงค์หลักของมันคือการตรวจสอบหน่วยความจำที่เสียหาย แต่มันก็สามารถใช้ในการตรวจสอบส่วนอื่น ๆ ของระบบได้เช่นกัน</p>
+
+<p>หากไม่มีการพบข้อผิดพลาด ก็ไม่ได้เป็นการรับประกันว่าหน่วยความจำจะไม่เสียหาย</p>
diff --git a/themes/openSUSE/help-install/th/main::noacpi.html b/themes/openSUSE/help-install/th/main::noacpi.html
new file mode 100644
index 0000000..107ac25
--- /dev/null
+++ b/themes/openSUSE/help-install/th/main::noacpi.html
@@ -0,0 +1,9 @@
+<h3>
+<a name="noacpi">ทำการติดตั้ง -- ปิดการใช้งาน ACPI</a>
+</h3>
+
+<p>ฮาร์ดแวร์ปัจจุบันต้องการใช้ ACPI (Advanced Configuration and Power Interface) เพื่อควบคุมการจัดการอินเทอร์รัปต์ โดยทัวไปแล้ว ACPI นั้นจะใช้ทดแทนระบบ APM (ระบบจัดการพลังงานแบบเก่า) อย่างสมบูรณ์</p>
+
+<p>เลือก <em>ทำการติดตั้ง -- ปิดการใช้งาน ACPI</em> หากคุณพบปัญหาในระหว่างการบูตเคอร์เนล ปัญหาที่ทราบของเครื่องที่มักจะมีปัญหากับ ACPI คือ: <ul><li>เคอร์เนลค้างในระหว่างทำการบูตระบบ</li><li>แผงวงจร PCI ไม่ได้ถูกตรวจสอบ หรือถูกเตรียมการทำงานอย่างไม่ถูกต้อง</li></ul></p>
+
+<p>คุณอาจจะลองใช้ตัวเลือกการบูต <a href="#firmware">ทดสอบเฟิร์มแวร์</a> และดูผลการทดสอบการตรวจสอบการทำงาน ACPI</p>
diff --git a/themes/openSUSE/help-install/th/main::nolapic.html b/themes/openSUSE/help-install/th/main::nolapic.html
new file mode 100644
index 0000000..9595469
--- /dev/null
+++ b/themes/openSUSE/help-install/th/main::nolapic.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="nolapic">ทำการติดตั้ง -- ปิดการใช้งาน APIC ภายใน</a>
+</h3>
+
+<p>ตามปกติแล้วมักจะไม่พบปัญหาในการใช้งาน APIC (Advanced Programmable Interrupt Controller) แต่หากคุณพบปัญหา ให้ลองใช้ตัวเลือกนี้ เพื่อบูตระบบโดยไม่ใช้การรองรับ APIC ภายใน</p>
+
+<p>โปรดอย่าสับสนระหว่างตัวเลือกนี้กับ <a href="#noacpi">ACPI</a> (Advanced Configuration and Power Interface)</p>
diff --git a/themes/openSUSE/help-install/th/main::opt.html b/themes/openSUSE/help-install/th/main::opt.html
new file mode 100644
index 0000000..4ef3629
--- /dev/null
+++ b/themes/openSUSE/help-install/th/main::opt.html
@@ -0,0 +1,9 @@
+<h3>
+<a name="opt">ตัวเลือกการบูตระบบ</a>
+</h3>
+
+<p>มีตัวเลือกการบูตระบบสองประเภทให้คุณได้เลือกใช้ ตัวแรก เป็นตัวเลือกที่จะมีผลกับตัวติดตั้ง ตัวที่สอง จะเป็นตัวเลือกที่ใช้กับเคอร์เนล โดยมีตัวเลือกพื้นฐานที่ใช้ร่วมกันบางตัว คือ:</p>
+
+<p>ก) ตัวเลือกของตัวติดตั้ง <ul><li><a href="#o_install">ติดตั้ง</a> -- เลือกแหล่งที่จะใช้ในการติดตั้ง</li><li><a href="#network">ตัวเลือกเครือข่าย</a> -- ตัวเลือกเครือข่าย</li><li><a href="#o_vnc">ตัวเลือก VNC</a> -- ตัวเลือกในการติดตั้งผ่านทาง VNC</li></ul></p>
+
+<p>ข) ตัวเลือกของเคอร์เนล <ul><li><a href="#o_splash">splash</a> -- กำหนดพฤติกรรมของหน้าจอ splash</li><li><a href="#o_apm">apm</a> -- สลับการเปิด/ปิดระบบจัดการพลังงาน</li><li><a href="#o_acpi">acpi</a> -- ACPI - ส่วนเชื่อมต่อด้านพลังงานและการปรับแต่งค่าขั้นก้าวหน้า</li><li><a href="#o_ide">ide</a> -- ควบคุมระบบย่อยของ IDE</li></ul></p>
diff --git a/themes/openSUSE/help-install/th/main::opt::network.html b/themes/openSUSE/help-install/th/main::opt::network.html
new file mode 100644
index 0000000..e29a5ad
--- /dev/null
+++ b/themes/openSUSE/help-install/th/main::opt::network.html
@@ -0,0 +1,13 @@
+<a name="o_hostip"/>
+<a name="o_netmask"/>
+<a name="o_gateway"/>
+
+<h3>
+<a name="network">ตัวเลือกของตัวติดตั้ง: ตัวเลือกเครือข่าย</a>
+</h3>
+
+<p>คุณสามารถที่จะทำการปรับแต่งส่วนเชื่อมต่อเครือข่ายได้ในตอนนี้เลยก็ได้ โดยตัวฮาร์ดแวร์จะถูกตรวจสอบในภายหลังโดยโปรแกรม YaST2 ทั้งนี้จะมีชุดของตัวเลือกในการปรับแต่งค่าแผงวงจรเครือข่ายของคุณ ซึ่งประกอบด้วย ค่าเลขไอพีของเครื่อง และค่าเน็ตมาสก์ ตัวอย่างเช่น: <ul><li>hostip=192.168.0.10 netmask=255.255.255.0</li></ul></p>
+
+<p>หรือใช้แบบย่อ เช่น: <ul><li>hostip=192.168.0.10/24</li></ul></p>
+
+<p>หากคุณระบุ <a href="#o_install">ติดตั้งผ่านเครือข่าย</a> และไม่ได้ระบุตัวเลือกทั้งสอง ตัวติดตั้งจะทำการปรับแต่งส่วนเชื่อมต่อเครือข่ายด้วย <em>dhcp</em> หากคุณต้องการใช้เกตเวย์ปริยาย ให้ระบุด้วยตัวเลือก <em>gateway</em> ตัวอย่างเช่น: <ul><li>gateway=192.168.0.8</li></ul></p>
diff --git a/themes/openSUSE/help-install/th/main::opt::o_acpi.html b/themes/openSUSE/help-install/th/main::opt::o_acpi.html
new file mode 100644
index 0000000..85e7643
--- /dev/null
+++ b/themes/openSUSE/help-install/th/main::opt::o_acpi.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="o_acpi">ตัวเลือกของเคอร์เนล: acpi</a>
+</h3>
+
+<p>ACPI (Advanced Configuration and Power Interface) เป็นมาตรฐานในการกำหนดส่วนเชื่อมต่อการใช้พลังงานและการจัดการปรับแต่งค่าของระบบปฏิบัติการและไบออก, โดยปริยายแล้ว ตัวเลือก <em>acpi</em> จะถูกเปิดใช้งานหากตรวจสอบพบว่า ไบออสของเครื่องมีความใหม่กว่าปี ค.ศ.2000 นอกจากนี้ยังมีพารามิเตอร์ทั่วไปอีกหลายตัวที่ใช้ในการควบคุมพฤติกรรมของ ACPI คือ: <ul><li><em>pci=noacpi</em> -- ไม่ต้องใช้ ACPI เพื่อหาเส้นทางอินเทอร์รัพต์ PCI</li><li><em>acpi=oldboot</em> -- มีเฉพาะส่วนของ ACPI ที่สัมพันธ์กับการบูตที่ยังทำงานเหลืออยู่</li><li><em>acpi=off</em> -- ปิดการใช้งาน ACPI อย่างสมบูรณ์</li><li><em>acpi=force</em> -- เปิดใช้งาน ACPI แม้ว่าไบออสของคุณจะเก่ากว่าปี ค.ศ.2000</li></ul></p>
+
+<p>โดยเฉพาะอย่างยิ่งบนคอมพิวเตอร์รุ่นใหม่ ๆ มันจะทำการแทนที่ตัวเลือก <a href="#o_apm">apm</a> เดิมของระบบ</p>
diff --git a/themes/openSUSE/help-install/th/main::opt::o_apm.html b/themes/openSUSE/help-install/th/main::opt::o_apm.html
new file mode 100644
index 0000000..5fdfc2d
--- /dev/null
+++ b/themes/openSUSE/help-install/th/main::opt::o_apm.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="o_apm">ตัวเลือกของเคอร์เนล: apm</a>
+</h3>
+
+<p>ระบบ APM นั้นเป็นหนึ่งในสองของระบบจัดการพลังงาน ที่มีการใช้กันอยู่ในคอมพิวเตอร์ต่าง ๆ ในปัจจุบัน ซึ่งมุ่งใช้ในเครื่องแลปทอปเป็นหลักเพื่อให้สามารถใช้งานในบางรูปแบบ เช่น การปิดพักเครื่องโดยเก็บสถานะลงดิสก์ เป็นต้น แต่มันก็อาจจะทำหน้าที่ในการปิดสวิตช์เครื่องคอมพิวเตอร์หลังจากการปิดระบบแล้วก็ได้เช่นกัน ทั้งนี้ APM นั้น จำเป็นต้องอาศัยการทำงานร่วมกับไบออสที่รองรับมันด้วย หากไบออสเกิดเสียหาย ระบบ APM อาจจะมีการจำกัดการใช้งานเครื่อง หรืออาจจะทำให้เครื่องไม่สามารถใช้งานได้เลยก็ได้ ดังนั้น คุณอาจจะปิดการทำงานของมันได้ โดยใช้พารามิเตอร์ <ul><li><em>apm=off</em> -- ปิดการทำงานของ APM อย่างสมบูรณ์</li></ul></p>
+
+<p>คอมพิวเตอร์ใหม่ ๆ บางรุ่น อาจจะมีการจัดการที่ก้าวหน้ามากกว่า <a href="#o_acpi">ACPI</a></p>
diff --git a/themes/openSUSE/help-install/th/main::opt::o_ide.html b/themes/openSUSE/help-install/th/main::opt::o_ide.html
new file mode 100644
index 0000000..b0d114e
--- /dev/null
+++ b/themes/openSUSE/help-install/th/main::opt::o_ide.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="o_ide">ตัวเลือกของเคอร์เนล: ide</a>
+</h3>
+
+<p>ส่วนเชื่อมต่ออุปกรณ์แบบ IDE นั้น ไม่ได้คล้ายกับส่วนเชื่อมต่อแบบ SCSI ที่มักจะถูกใช้กับเครื่องสถานีงาน (เวิร์กสเตชัน) แต่อย่างใด เพื่อหลีกเลี่ยงปัญหาบางอย่างของฮาร์ดแวร์ที่อาจจะเกิดกับระบบ IDE ให้ลองใช้พารามิเตอร์ของเคอร์เนล: <ul><li><em>ide=nodma</em> -- ปิดการใช้ DMA กับไดรฟ์แบบ IDE</li></ul></p>
diff --git a/themes/openSUSE/help-install/th/main::opt::o_install.html b/themes/openSUSE/help-install/th/main::opt::o_install.html
new file mode 100644
index 0000000..45093bc
--- /dev/null
+++ b/themes/openSUSE/help-install/th/main::opt::o_install.html
@@ -0,0 +1,9 @@
+<h3>
+<a name="o_install">ตัวเลือกของตัวติดตั้ง: ติดตั้ง</a>
+</h3>
+
+<p>โดยปริยายแล้ว จะมีการค้นหาแหล่งที่จะใช้ติดตั้งจากซีดีรอมภายใน หากใช้การติดตั้งผ่านเครือข่าย ให้เลือกตัวเลือก <em>ติดตั้ง</em> แทน โดยให้เลือกใช้โพรโทคอลของบริการเพื่อใช้ติดตั้งว่าเป็นแบบใด ได้แก่ <ul><li>บริการ FTP</li><li>จุดแชร์ผ่านบริการ NFS</li><li>บริการ HTTP</li></ul></p>
+
+<p>รูปแบบที่ใช้นี้ จะดูคล้ายกับค่าที่อยู่ URL มาตรฐาน ตัวอย่างเช่น หากเครื่องแม่ข่ายบริการของคุณคือ 192.168.0.1 และคุณต้องการติดตั้งผ่านจุดแชร์ของบริการ NFS โดยมีจุดแชร์ (หรือไดเรกทอรี) บนแม่ข่าย คือ /install, ให้ระบุแหล่งที่ใช้ติดตั้งตามค่านี้: <ul><li>install=nfs://192.168.0.1/install</li></ul></p>
+
+<p>แผงวงจรเครือข่ายอาจจะถูกปรับแต่งด้วย <em>dhcp</em> หรือคุณอาจจะระบุค่าพารามิเตอร์ด้วยตัวคุณเองก็ได้ ตามที่ได้อธิบายไว้ใน <a href="#network">ตัวเลือกเครือข่าย</a></p>
diff --git a/themes/openSUSE/help-install/th/main::opt::o_splash.html b/themes/openSUSE/help-install/th/main::opt::o_splash.html
new file mode 100644
index 0000000..ece7480
--- /dev/null
+++ b/themes/openSUSE/help-install/th/main::opt::o_splash.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="o_splash">ตัวเลือกของเคอร์เนล: splash</a>
+</h3>
+
+<p>หน้าจอบังข้อความการบูตระบบ (splash) คือภาพที่จะแสดงในระหว่างการเริ่มการทำงานของระบบ <ul><li><em>splash=0</em> -- หน้าจอบังข้อความการบูตระบบ (splash) จะถูกปิดการใช้งาน ซึ่งจะมีประโยชน์ในการตรวจสอบดูข้อความผิดพลาดบางอย่างที่อาจจะเกิดขึ้นในระหว่างการเริ่มการทำงานของระบบ</li><li><em>splash=verbose</em> -- เปิดใช้งานหน้าจอบังข้อความการบูตระบบ (splash), และยังมีการแสดงข้อความของการบูตระบบและข้อความของเคอร์เนลอยู่</li><li><em>splash=silent</em> -- เปิดใช้งานหน้าจอบังข้อความการบูตระบบ (splash), แต่จะไม่มีการแสดงข้อความใด ๆ โดยจะใช้แถบแสดงความคืบหน้าการบูตระบบแทน</li></ul></p>
diff --git a/themes/openSUSE/help-install/th/main::opt::o_vnc.html b/themes/openSUSE/help-install/th/main::opt::o_vnc.html
new file mode 100644
index 0000000..6853d18
--- /dev/null
+++ b/themes/openSUSE/help-install/th/main::opt::o_vnc.html
@@ -0,0 +1,9 @@
+<a name="o_vncpassword"/>
+
+<h3>
+<a name="o_vnc">ตัวเลือกของตัวติดตั้ง: vnc</a>
+</h3>
+
+<p>เพื่อเปิดใช้การติดตั้งผ่านทาง VNC ให้ป้อนพารามิเตอร์ vnc และ vncpasswd: <ul><li><em>vnc=1 vncpassword=ตัวอย่าง</em></li></ul></p>
+
+<p>บริการ VNC จะเริ่มการทำงาน และคุณจะสามารถควบคุม YaST2 ผ่านทางไคลเอนต์ VNC ได้จากระยะไกล</p>
diff --git a/themes/openSUSE/help-install/th/main::rescue.html b/themes/openSUSE/help-install/th/main::rescue.html
new file mode 100644
index 0000000..cd97863
--- /dev/null
+++ b/themes/openSUSE/help-install/th/main::rescue.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="rescue">กู้ระบบ</a>
+</h3>
+
+<p><em>กู้ระบบ</em> คือระบบดิสก์ขนาดเล็กบนหน่วยความจำ ซึ่งช่วยให้สามารถทำการเปลี่ยนแปลงระบบที่ติดตั้งไว้แล้วได้หลายรูปแบบ แต่เนื่องจากมันจำเป็นต้องใช้ร่วมกับเครื่องมือในระดับต่ำ จึงมีจุดมุ่งหมายสำหรับให้ผู้เชี่ยวชาญเท่านั้น</p>
diff --git a/themes/openSUSE/help-install/th/main::videomode.html b/themes/openSUSE/help-install/th/main::videomode.html
new file mode 100644
index 0000000..7db9e83
--- /dev/null
+++ b/themes/openSUSE/help-install/th/main::videomode.html
@@ -0,0 +1,9 @@
+<h3>
+<a name="videomode">การเลือกโหมดวิดีโอ</a>
+</h3>
+
+<p>กด <em>@@@fkey_video@@@</em> เพื่อดูรายการโหมดแสดงผลที่แผงวงจรแสดงผลของคุณรองรับ โดยจะมีการเลือกโหมดแสดงผลสูงสุดที่จอภาพของคุณรองรับได้ไว้ให้</p>
+
+<p>ในบางกรณีอาจจะไม่สามารถตรวจสอบจอภาพของคุณได้อัตโนมัติ ซึ่งหากเกิดขึ้น ให้คุณทำการเลือกโหมดที่ต้องการด้วยตัวคุณเอง</p>
+
+<p>หากระบบของคุณมีปัญหากับแผงวงจรแสดงผลในระหว่างการติดตั้ง จะมีการใช้ <em>โหมดข้อความ</em> แทน</p>
diff --git a/themes/openSUSE/help-install/th/navi.html b/themes/openSUSE/help-install/th/navi.html
new file mode 100644
index 0000000..bcf3581
--- /dev/null
+++ b/themes/openSUSE/help-install/th/navi.html
@@ -0,0 +1 @@
+<p>ย้อนกลับไปยัง <a href="#foobar">FOOBAR</a></p>
diff --git a/themes/openSUSE/help-install/uk/main.html b/themes/openSUSE/help-install/uk/main.html
new file mode 100644
index 0000000..dfedf30
--- /dev/null
+++ b/themes/openSUSE/help-install/uk/main.html
@@ -0,0 +1,35 @@
+<h3>
+<a name="main">Довідка для завантажувача</a>
+</h3>
+
+<p>Ласкаво просимо до <em>@@@product@@@</em></p>
+
+<p>Використовуйте це меню для вибирання бажаної функції. Якщо виникнуть проблеми з навігацією в цій системі довідки, натисніть <em>@@@fkey_help@@@</em>, щоб увійти в <a href="#help">опис</a> системи довідки. Головні функції цього меню:</p>
+
+<p><a href="#harddisk">Завантаження з жорсткого диска</a>: Цей вибір нічого не зробить з системою. Він тільки запустить раніше встановлену операційну систему.</p>
+
+<p><a href="#linux">Встановлення</a>: Цей режим встановлення підходить для більшості машин. Якщо ваша система замерзає під час завантаження або має проблеми з виявленням компонентів вашого обладнання, таких як контролерів дисків або мережних плат, спробуйте один з наступних параметрів встановлення.</p>
+
+<p><a href="#noacpi">Встановлення — ACPI вимкнено</a>: Багато комп'ютерів мають неповні або неправильні впровадження ACPI. Ця секція вимикає підтримку ACPI в ядрі, однак уможливлює багато можливостей швидкодії, таких як DMA для жорстких дисків IDE.</p>
+
+<p><a href="#nolapic">Встановлення — локальне APIC вимкнено</a>: Якщо нормальне встановлення зазнає невдачі, то причиною може бути, що обладнання системи не підтримує локального APIC. Якщо це справді так, вживайте цей параметр для встановлення без підтримки APIC.</p>
+
+<p><a href="#failsafe">Встановлення — безпечні параметри</a>: Якщо у вас не вийшло з <em>Встановлення</em>, цей вибір, можливо, вам допоможе.</p>
+
+<p><a href="#rescue">Порятунок системи</a>: Цей штамп завантаження запускає малу систему Linux в RAM. Це корисне, якщо система належно не запускається. Після завантаження цієї системи увійдіть в неї як root (адміністратор).</p>
+
+<p><a href="#firmware">Тест мікропрограмного забезпечення</a>: Запускає засіб тестування BIOS, який перевіряє ACPI й інші частин вашого BIOS.</p>
+
+<p><a href="#memtest">Тест пам'яті</a>: Тестування пам'яті корисне не тільки для перевірки встановлення нових модулів пам'яті. Цей тест робить навантаження на значну частину вашої системи і може виявити проблеми з апаратним обладнанням.</p>
+
+<p><a href="#opt">Параметри завантаження</a>: Параметри завантаження можуть цілком змінити поведінку вашої системи. Це параметри для ядра.</p>
+
+<p><a href="#help">@@@fkey_help@@@ Довідка</a>: Залежить від контексту. Буде показувати різну інформацію залежно від активного елемента екрана завантаження. Також є і опис цієї системи довідки.</p>
+
+<p><a href="#keytable">@@@fkey_lang@@@</a>: Вкажіть мову і розкладку клавіатури для завантажувача.</p>
+
+<p><a href="#videomode">@@@fkey_video@@@ Режим відео</a>: Тут можна вибрати різні роздільності екрана під час встановлення. Якщо ви зіткнетесь з проблемами під час графічного встановлення, то <em>текстовий режим</em> може допомогти обійти ці проблеми.</p>
+
+<p><a href="#install_src">@@@fkey_inst@@@ Джерело встановлення</a>: Виберіть джерело встановлення.</p>
+
+<p><a href="#driverupdate">@@@fkey_dud@@@ Оновлення драйверів</a>: Для дуже нових комп'ютерів, щоб встановити систему, можливо, потрібне оновлення драйверів.</p>
diff --git a/themes/openSUSE/help-install/uk/main::bits.html b/themes/openSUSE/help-install/uk/main::bits.html
new file mode 100644
index 0000000..6e9d128
--- /dev/null
+++ b/themes/openSUSE/help-install/uk/main::bits.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="bits">Вибір типу програмного забезпечення</a>
+</h3>
+
+<p>Ви можете вибрати і встановити або 32-бітову, або 64-бітову версію @@@product@@@.</p>
diff --git a/themes/openSUSE/help-install/uk/main::driverupdate.html b/themes/openSUSE/help-install/uk/main::driverupdate.html
new file mode 100644
index 0000000..3237d87
--- /dev/null
+++ b/themes/openSUSE/help-install/uk/main::driverupdate.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="driverupdate">Оновлення драйверів</a>
+</h3>
+
+<p>Якщо ви потребуєте вставити дискету або компакт-диск з оновленнями драйверів, натисніть <em>@@@fkey_dud@@@</em>. Завантажувач попросить вас вставити носій оновлення драйверів після завантаження ядра Linux.</p>
+
+<p>Оновлення драйверів — це, зазвичай, дискета з новими версіями драйверів для обладнання чи з виправленнями помилок, які потрібні під час встановлення.</p>
diff --git a/themes/openSUSE/help-install/uk/main::failsafe.html b/themes/openSUSE/help-install/uk/main::failsafe.html
new file mode 100644
index 0000000..597c7cc
--- /dev/null
+++ b/themes/openSUSE/help-install/uk/main::failsafe.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="failsafe">Встановлення — безпечні параметри</a>
+</h3>
+
+<p>Виберіть <em>Встановлення — безпечні параметри</em>, якщо ви зазнаєте зависання під час встановлення або випадкові помилки. Цей параметр вимикає DMA для приводів IDE і всі функції керування живленням. Див. також про параметри ядра для <a href="#o_apm">apm</a>, <a href="#o_acpi">acpi</a> і <a href="#o_ide">ide</a>.</p>
diff --git a/themes/openSUSE/help-install/uk/main::firmware.html b/themes/openSUSE/help-install/uk/main::firmware.html
new file mode 100644
index 0000000..0afde48
--- /dev/null
+++ b/themes/openSUSE/help-install/uk/main::firmware.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="firmware">Тест мікропрограмного забезпечення</a>
+</h3>
+
+<p>Запускає тестування BIOS, яке перевіряє таблиці ACPI і багато інших частин вашого BIOS. Результати тестування можна зберігати на диску usb або через мережу.</p>
diff --git a/themes/openSUSE/help-install/uk/main::harddisk.html b/themes/openSUSE/help-install/uk/main::harddisk.html
new file mode 100644
index 0000000..157b1c3
--- /dev/null
+++ b/themes/openSUSE/help-install/uk/main::harddisk.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="harddisk">Завантаження з жорсткого диска</a>
+</h3>
+
+<p>Виберіть <em>Завантажити встановлену ОС</em>, щоб запустити систему встановлену на жорсткому диску. Ця система мусить бути правильно встановленою, тому що буде запущено тільки MBR (Master Boot Record) на першому жорсткому диску. Ідентифікатор пристрою першого жорсткого диска надається BIOS-ом комп'ютера.</p>
+
+<p>Скористайтесь цим, якщо ви забули вийняти з вашого приводу компакт-диск або DVD й хочете запустити комп'ютер з жорсткого диска.</p>
diff --git a/themes/openSUSE/help-install/uk/main::help.html b/themes/openSUSE/help-install/uk/main::help.html
new file mode 100644
index 0000000..0539bd4
--- /dev/null
+++ b/themes/openSUSE/help-install/uk/main::help.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="help">Використання системи довідки</a>
+</h3>
+
+<p>Довідка завантажувача реагує на контекст. Вона надає інформацію про вибраний елемент меню або, якщо ви редагуєте параметри завантаження, вона намагається знайти інформацію про параметр, над яким знаходиться курсор.</p>
+
+<p>Ключі навігації <ul><li><em>Стрілка вгору</em>: підсвітити попереднє посилання</li><li><em>Стрілка вниз</em>: підсвітити наступне посилання</li><li><em>Стрілка ліворуч</em>, <em>Назад</em>: повернутись до попередньої теми</li><li><em>Стрілка праворуч</em>, <em>Ввід (Enter)</em>, <em>Пробіл</em>: перейти за посиланням</li><li><em>Сторінка вгору</em>: прокрутити сторінку вгору</li><li><em>Сторінка вниз</em>: прокрутити сторінку вниз</li><li><em>Домівка</em>: перейти до початку сторінки</li><li><em>Кінець</em>: перейти до кінця сторінки</li><li><em>Esc</em>: вийти з довідки</li></ul></p>
diff --git a/themes/openSUSE/help-install/uk/main::install_src.html b/themes/openSUSE/help-install/uk/main::install_src.html
new file mode 100644
index 0000000..f64b948
--- /dev/null
+++ b/themes/openSUSE/help-install/uk/main::install_src.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="install_src">Джерело встановлення</a>
+</h3>
+
+<p>Натисніть <em>@@@fkey_inst@@@</em>, щоб вибрати джерело встановлення.</p>
+
+<p>Це те саме, що використання параметра завантаження <a href="#o_install">встановити</a>.</p>
diff --git a/themes/openSUSE/help-install/uk/main::keytable.html b/themes/openSUSE/help-install/uk/main::keytable.html
new file mode 100644
index 0000000..a4e2f67
--- /dev/null
+++ b/themes/openSUSE/help-install/uk/main::keytable.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="keytable">Вибір мови та розкладки клавіатури</a>
+</h3>
+
+<p>Натисніть <em>@@@fkey_lang@@@</em>, щоб змінити мову та розкладку клавіатури, які використовує завантажувач.</p>
diff --git a/themes/openSUSE/help-install/uk/main::linux.html b/themes/openSUSE/help-install/uk/main::linux.html
new file mode 100644
index 0000000..a680e3e
--- /dev/null
+++ b/themes/openSUSE/help-install/uk/main::linux.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="linux">Встановлення</a>
+</h3>
+
+<p>Виберіть <em>Встановлення</em>, щоб запустити типове встановлення. <a href="#opt">параметри завантаження</a> використовуються при запуску. Цей елемент активує багато можливостей загально наявного апаратного обладнання.</p>
diff --git a/themes/openSUSE/help-install/uk/main::memtest.html b/themes/openSUSE/help-install/uk/main::memtest.html
new file mode 100644
index 0000000..1d24012
--- /dev/null
+++ b/themes/openSUSE/help-install/uk/main::memtest.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="memtest">Тест пам'яті</a>
+</h3>
+
+<p>Включене <em>Тест пам'яті</em> надає добру можливість для навантажувального тесту вашої системи. Хоча головна мета - це виявлення несправної RAM, але тест також робить навантаження на інші частини системи.</p>
+
+<p>Якщо не знайдено помилок, це ще не є гарантією, що пам'ять добра, хоча буде знайдено більшість дефектів пам'яті.</p>
diff --git a/themes/openSUSE/help-install/uk/main::noacpi.html b/themes/openSUSE/help-install/uk/main::noacpi.html
new file mode 100644
index 0000000..38c20ca
--- /dev/null
+++ b/themes/openSUSE/help-install/uk/main::noacpi.html
@@ -0,0 +1,9 @@
+<h3>
+<a name="noacpi">Встановлення — ACPI вимкнено</a>
+</h3>
+
+<p>Найновіше апаратне обладнання часом потребує ACPI (інтерфейс розширеного налаштування та керування живленням) для керування обробкою перепинів. ACPI цілком заміняє стару систему APM.</p>
+
+<p>Виберіть <em>Встановлення — ACPI вимкнено</em>, якщо ви зіткнетесь з проблемами під час завантаження ядра. Відомі наступні проблеми в комп'ютерах, які мають проблеми з ACPI: </p>
+
+<p>Також, можете спробувати параметр завантаження <a href="#firmware">Тест мікропрограмного забезпечення</a> і переглянути результати тестування ACPI.</p>
diff --git a/themes/openSUSE/help-install/uk/main::nolapic.html b/themes/openSUSE/help-install/uk/main::nolapic.html
new file mode 100644
index 0000000..9e232db
--- /dev/null
+++ b/themes/openSUSE/help-install/uk/main::nolapic.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="nolapic">Встановлення — локальне APIC вимкнено</a>
+</h3>
+
+<p>Зазвичай, не виникає проблем з APIC (Advanced Programmable Interrupt Controller). Але, якщо у вас виникли проблеми, спробуйте цей параметр, щоб завантажити без підтримки APIC.</p>
+
+<p>Будь ласка, не сплутайте це з <a href="#noacpi">ACPI</a> (інтерфейс розширеного налаштування та керування живленням).</p>
diff --git a/themes/openSUSE/help-install/uk/main::opt.html b/themes/openSUSE/help-install/uk/main::opt.html
new file mode 100644
index 0000000..23d2cc3
--- /dev/null
+++ b/themes/openSUSE/help-install/uk/main::opt.html
@@ -0,0 +1,9 @@
+<h3>
+<a name="opt">Параметри завантаження</a>
+</h3>
+
+<p>Є два типи наявних параметрів завантаження. По-перше, є параметри, які впливають на програму встановлення. По-друге, є параметри ядра. Найпоширеніші параметри:</p>
+
+<p>a) параметри встановлення <ul><li><a href="#o_install">встановити</a> — виберіть джерело встановлення</li><li><a href="#network">мережні параметри</a> — мережні параметри</li><li><a href="#o_vnc">параметри vnc</a> — параметри для встановлення через VNC</li></ul></p>
+
+<p>b) параметри ядра <ul><li><a href="#o_splash">заставка</a> — керування поведінкою заставки</li><li><a href="#o_apm">apm</a> — перемикання керування живленням</li><li><a href="#o_acpi">acpi</a> — інтерфейс розширеного налаштування та керування живленням</li><li><a href="#o_ide">ide</a> — керування підсистемою IDE</li></ul></p>
diff --git a/themes/openSUSE/help-install/uk/main::opt::network.html b/themes/openSUSE/help-install/uk/main::opt::network.html
new file mode 100644
index 0000000..7ab927c
--- /dev/null
+++ b/themes/openSUSE/help-install/uk/main::opt::network.html
@@ -0,0 +1,13 @@
+<a name="o_hostip"/>
+<a name="o_netmask"/>
+<a name="o_gateway"/>
+
+<h3>
+<a name="network">Параметри встановлення: мережні параметри</a>
+</h3>
+
+<p>Можна налаштувати мережний інтерфейс вже тепер. YaST2 виявить обладнання пізніше. Мінімальний набір параметрів для налаштування вашої мережної плати складається з адреси IP вузла і мережної маски. Наприклад: <ul><li>hostip=192.168.0.10 netmask=255.255.255.0</li></ul></p>
+
+<p>або в короткій формі: <ul><li>hostip=192.168.0.10/24</li></ul></p>
+
+<p>Якщо ви вказали <a href="#o_install">встановлення через мережу</a>, але не вказали обидва параметри, то програма встановлення намагається налаштувати мережний інтерфейс з <em>dhcp</em>. Якщо вам потрібний типовий шлюз, вкажіть це за допомогою параметра <em>шлюз</em>. Наприклад: <ul><li>gateway=192.168.0.8</li></ul></p>
diff --git a/themes/openSUSE/help-install/uk/main::opt::o_acpi.html b/themes/openSUSE/help-install/uk/main::opt::o_acpi.html
new file mode 100644
index 0000000..9cfb7d7
--- /dev/null
+++ b/themes/openSUSE/help-install/uk/main::opt::o_acpi.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="o_acpi">Параметри ядра: acpi</a>
+</h3>
+
+<p>ACPI (Advanced Configuration and Power Interface) — це стандарт, яким визначаються інтерфейси керування живленням та налаштуванням між операційною системою і BIOS. Типово, <em>acpi</em> вмикається, коли виявлено BIOS датований після 2000 року. Є декілька загальновживаних параметрів для керування поведінкою ACPI: <ul><li><em>pci=noacpi</em> — не використовувати ACPI для перенаправлення перепинів PCI</li><li><em>acpi=oldboot</em> — тільки частини ACPI, які стосуються завантаження, залишаться активованими</li><li><em>acpi=off</em> — цілком вимкнути ACPI</li><li><em>acpi=force</em> — увімкнути ACPI, навіть якщо ваш BIOS створено до 2000 року</li></ul></p>
+
+<p>Особливо на нових комп'ютерах, вона замінює стару систему <a href="#o_apm">apm</a>.</p>
diff --git a/themes/openSUSE/help-install/uk/main::opt::o_apm.html b/themes/openSUSE/help-install/uk/main::opt::o_apm.html
new file mode 100644
index 0000000..c42923b
--- /dev/null
+++ b/themes/openSUSE/help-install/uk/main::opt::o_apm.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="o_apm">Параметри ядра: apm</a>
+</h3>
+
+<p>APM — це одна з двох стратегій керування живленням, які застосовуються в сучасних комп'ютерах. Зазвичай, вона використовується в лептопах для таких функцій, як режим сну зі збереженням на диск, але також може вживатись для вимикання комп'ютера після знеструмлення. APM покладається на правильне функціонування BIOS. Якщо щось у BIOS не гаразд, APM, можливо, матиме тільки обмежене використання, або, навіть, перешкоджатими правильному функціонуванню комп'ютера. Тому, його можна вимкнути параметром <ul><li><em>apm=off</em> — цілком вимкнути APM</li></ul></p>
+
+<p>Деякі найновіші комп'ютери можуть мати користь з новішого <a href="#o_acpi">ACPI</a>.</p>
diff --git a/themes/openSUSE/help-install/uk/main::opt::o_ide.html b/themes/openSUSE/help-install/uk/main::opt::o_ide.html
new file mode 100644
index 0000000..0278d78
--- /dev/null
+++ b/themes/openSUSE/help-install/uk/main::opt::o_ide.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="o_ide">Параметри ядра: ide</a>
+</h3>
+
+<p>На відміну від SCSI, IDE найчастіше зустрічається в більшості стільничних робочих станцій. Щоб обійти деякі проблеми в обладнанні, скористайтесь параметром ядра: <ul><li><em>ide=nodma</em>— вимкнути DMA для IDE-приводів</li></ul></p>
diff --git a/themes/openSUSE/help-install/uk/main::opt::o_install.html b/themes/openSUSE/help-install/uk/main::opt::o_install.html
new file mode 100644
index 0000000..1649c58
--- /dev/null
+++ b/themes/openSUSE/help-install/uk/main::opt::o_install.html
@@ -0,0 +1,9 @@
+<h3>
+<a name="o_install">Параметри встановлення: install</a>
+</h3>
+
+<p>Типово, за джерелом встановлення ведеться пошук в пристроях CD-ROM. Для мережного встановлення виберіть параметр <em>встановити</em>. Можливі наступні протоколи встановлення <ul><li>FTP</li><li>NFS</li><li>HTTP</li></ul></p>
+
+<p>Треба використовувати синтаксис як в стандартних URL. Наприклад, якщо ваш сервер знаходиться на 192.168.0.1 і ви хочете робити встановлення з каталогу NFS /install на цьому сервері, то вкажіть джерело так: <ul><li>install=nfs://192.168.0.1/install</li></ul></p>
+
+<p>Мережну плату буде налаштовано через <em>dhcp</em> або ви мусите самі вказати параметри, як описано в <a href="#network">мережні параметри</a>.</p>
diff --git a/themes/openSUSE/help-install/uk/main::opt::o_splash.html b/themes/openSUSE/help-install/uk/main::opt::o_splash.html
new file mode 100644
index 0000000..21ed4ef
--- /dev/null
+++ b/themes/openSUSE/help-install/uk/main::opt::o_splash.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="o_splash">Параметри ядра: splash</a>
+</h3>
+
+<p>Заставка екрана — це малюнок, який показується під час запуску системи. <ul><li><em>splash=0</em> — Показ заставки вимкнено. Може придатись для дуже старих моніторів або, якщо виникає якась помилка.</li><li><em>splash=verbose</em> — Активує заставку, але буде показано повідомлення ядра та завантаження.</li><li><em>splash=silent</em> — Активує заставку, але замість повідомлень показується смужка поступу.</li></ul></p>
diff --git a/themes/openSUSE/help-install/uk/main::opt::o_vnc.html b/themes/openSUSE/help-install/uk/main::opt::o_vnc.html
new file mode 100644
index 0000000..3eb1378
--- /dev/null
+++ b/themes/openSUSE/help-install/uk/main::opt::o_vnc.html
@@ -0,0 +1,9 @@
+<a name="o_vncpassword"/>
+
+<h3>
+<a name="o_vnc">Параметри встановлення: vnc</a>
+</h3>
+
+<p>Щоб уможливити встановлення через VNC, вкажіть параметри vnc і vncpassword: <ul><li><em>vnc=1 vncpassword=example</em></li></ul></p>
+
+<p>Буде запущено сервер VNC і ви зможете керувати програмою YaST2 через будь-який клієнт VNC з віддаленої системи.</p>
diff --git a/themes/openSUSE/help-install/uk/main::rescue.html b/themes/openSUSE/help-install/uk/main::rescue.html
new file mode 100644
index 0000000..a9f9e40
--- /dev/null
+++ b/themes/openSUSE/help-install/uk/main::rescue.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="rescue">Порятунок системи</a>
+</h3>
+
+<p><em>Порятунок системи</em> — це мала базова система на диску RAM. Звідти можна робити різноманітні зміни у встановленій системі. Оскільки в цій системі наявні тільки засоби низького рівня, вона призначена для експертів.</p>
diff --git a/themes/openSUSE/help-install/uk/main::videomode.html b/themes/openSUSE/help-install/uk/main::videomode.html
new file mode 100644
index 0000000..15d7492
--- /dev/null
+++ b/themes/openSUSE/help-install/uk/main::videomode.html
@@ -0,0 +1,9 @@
+<h3>
+<a name="videomode">Вибір відеорежиму</a>
+</h3>
+
+<p>Натисніть <em>@@@fkey_video@@@</em>, щоб отримати список відеорежимів, які підтримуються вашою графічною платою. Вибрано найвищий режим, який підтримується вашим монітором.</p>
+
+<p>Ймовірно, ваш монітор неможливо виявити автоматично. У цьому випадку, виберіть бажаний режим вручну.</p>
+
+<p>Якщо під час встановлення у вашій системі виникнуть проблеми з графічною платою, то можете скористатись <em>текстовий режим</em>.</p>
diff --git a/themes/openSUSE/help-install/uk/navi.html b/themes/openSUSE/help-install/uk/navi.html
new file mode 100644
index 0000000..5f87cff
--- /dev/null
+++ b/themes/openSUSE/help-install/uk/navi.html
@@ -0,0 +1 @@
+<p>Повернутись до <a href="#foobar">FOOBAR</a></p>
diff --git a/themes/openSUSE/help-install/xh/main.html b/themes/openSUSE/help-install/xh/main.html
new file mode 100644
index 0000000..251f1e6
--- /dev/null
+++ b/themes/openSUSE/help-install/xh/main.html
@@ -0,0 +1,103 @@
+<h3>
+<a name="main">Uncedo Lomlayishi Womiselo Lwenkqubo</a>
+</h3>
+
+<p>
+Welcome to <em>@@@product@@@</em>
+</p>
+
+<p>
+Use this menu to select the desired function. If you have
+problems navigating in this help system, press
+<em>@@@fkey_help@@@</em> to enter the <a href="#help">inkcazelo</a> of the help
+system. The main functions in this menu are:
+</p>
+
+<p>
+<a href="#harddisk">Misela Inkqubo Kwiqokobhe Lekhompyutha</a>: This selection will not do
+anything to the system. It only starts a previously installed
+operating system.
+</p>
+
+<p>
+<a href="#linux">Ukuhlohla</a>:
+This installation mode works on most machines. If you experience a
+system freeze during boot or problems with detection of your hardware
+components, such as disk controllers or network cards, try one of the
+following installation options.
+</p>
+
+<p>
+<a href="#noacpi">Ukuhlohlwa kwe--ACPI Kususwe Isakhono</a>: Many of the
+currently-sold computers have incomplete or faulty ACPI
+implementations. This selection disables ACPI support in the
+kernel, but still enables many performance features, like DMA for IDE
+hard disks.
+</p>
+
+<p>
+<a href="#nolapic">Ukuhlohlwa kwe--APIC Yendawo Leyo Kususwe Isakhono</a>:
+If the normal installation fails, this might be due to the
+system hardware not supporting local APIC.
+If this seems to be the case, use this option to
+install without local APIC support.
+</p>
+
+<p>
+<a href="#failsafe">Imimiselo Yokuhlohla -- Ikhuselekile</a>: If you were not
+successful with <em>Ukuhlohla</em>, this selection might
+solve the issue.
+</p>
+
+<p>
+<a href="#rescue">Isixokelelwano Sokuhlangula</a>: This boot image starts a small
+Linux system in RAM. This is useful if the system does not start properly.
+After booting this system, log in as root.
+</p>
+
+<p>
+<a href="#firmware">Uvavanyo lwe-Firmware</a>: Runs a BIOS test tool that validates
+ACPI and other parts of your BIOS.
+</p>
+
+<p>
+<a href="#memtest">Uvavanyo Lukavimba Wolwazi</a>: Memory testing is useful for more than
+checking installation of new memory modules. It is a stress test
+for a big part of your computer system and may indicate hardware
+problems.
+</p>
+
+<p>
+<a href="#opt">Izikhethwa Zomiselo Lwenkqubo</a>: The boot options may change the
+behavior of your system completely. They are settings for
+the kernel.
+</p>
+
+<p>
+<a href="#help">@@@fkey_help@@@ Help</a>: This is context sensitive. It will
+show different screens depending on the active element of the
+boot screen. There is also a description of this help system
+available.
+</p>
+
+<p>
+<a href="#keytable">@@@fkey_lang@@@</a>: Set language and keyboard mapping
+used by the boot loader.
+</p>
+
+<p>
+<a href="#videomode">@@@fkey_video@@@ Video Mode</a>: Here, choose between
+different screen resolutions while installing. If you encounter
+problems with the graphical installation, the <em>imo yokusebenza ngesiqendu</em> may
+be a work-around for you.
+</p>
+
+<p>
+<a href="#install_src">@@@fkey_inst@@@ Installation Source</a>: Choose the
+installation source.
+</p>
+
+<p>
+<a href="#driverupdate">@@@fkey_dud@@@ Driver Update</a>: For very new machines, a
+driver update may be needed to install the system.
+</p>
diff --git a/themes/openSUSE/help-install/xh/main::bits.html b/themes/openSUSE/help-install/xh/main::bits.html
new file mode 100644
index 0000000..3a1a79b
--- /dev/null
+++ b/themes/openSUSE/help-install/xh/main::bits.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="bits">Okukhethiweyo Kohlobo Lokungaphakathi Ekhompyutheni</a>
+</h3>
+
+<p>
+You have the choice to install the 32-bit or 64-bit version of @@@product@@@.
+</p>
diff --git a/themes/openSUSE/help-install/xh/main::driverupdate.html b/themes/openSUSE/help-install/xh/main::driverupdate.html
new file mode 100644
index 0000000..d594e06
--- /dev/null
+++ b/themes/openSUSE/help-install/xh/main::driverupdate.html
@@ -0,0 +1,14 @@
+<h3>
+<a name="driverupdate">Uhlaziyo Lomqhubi</a>
+</h3>
+
+<p>
+If you need a driver update floppy or CD-ROM, press <em>@@@fkey_dud@@@</em>. The
+boot loader asks you to insert the driver update medium after
+loading the Linux kernel.
+</p>
+
+<p>
+A driver update is typically a floppy with new versions of hardware
+drivers or bug fixes needed during installation.
+</p>
diff --git a/themes/openSUSE/help-install/xh/main::failsafe.html b/themes/openSUSE/help-install/xh/main::failsafe.html
new file mode 100644
index 0000000..99ce311
--- /dev/null
+++ b/themes/openSUSE/help-install/xh/main::failsafe.html
@@ -0,0 +1,11 @@
+<h3>
+<a name="failsafe">Imimiselo Yokuhlohla -- Ikhuselekile</a>
+</h3>
+
+<p>
+Select <em>Imimiselo Yokuhlohla -- Ikhuselekile</em> if you encounter hangs
+while installing or irreproducible errors. This option disables DMA
+for IDE drives and all power management features.
+See also the kernel options for <a href="#o_apm">i-apm</a>,
+<a href="#o_acpi">i-acpi</a> and <a href="#o_ide">i-ide</a>.
+</p>
diff --git a/themes/openSUSE/help-install/xh/main::firmware.html b/themes/openSUSE/help-install/xh/main::firmware.html
new file mode 100644
index 0000000..91a91a8
--- /dev/null
+++ b/themes/openSUSE/help-install/xh/main::firmware.html
@@ -0,0 +1,9 @@
+<h3>
+<a name="firmware">Uvavanyo lwe-Firmware</a>
+</h3>
+
+<p>
+Starts a BIOS checker that validates the ACPI tables
+and many other parts of your BIOS.
+Test results can be stored on usb disk or saved via network.
+</p>
diff --git a/themes/openSUSE/help-install/xh/main::harddisk.html b/themes/openSUSE/help-install/xh/main::harddisk.html
new file mode 100644
index 0000000..fbbab8a
--- /dev/null
+++ b/themes/openSUSE/help-install/xh/main::harddisk.html
@@ -0,0 +1,16 @@
+<h3>
+<a name="harddisk">Misela Inkqubo Kwiqokobhe Lekhompyutha</a>
+</h3>
+
+<p>
+Select <em>I-OS Ehlohlwe Umiselo Lwenkqubo</em> to start the system installed on
+your local hard disk. This system must be installed properly, because
+only the MBR (Master Boot Record) on the first hard disk is started.
+The device ID of the first hard disk is provided by the BIOS of
+the computer.
+</p>
+
+<p>
+Use this if you forgot to remove the CD or DVD from your
+drive and want to start the computer from the hard disk.
+</p>
diff --git a/themes/openSUSE/help-install/xh/main::help.html b/themes/openSUSE/help-install/xh/main::help.html
new file mode 100644
index 0000000..6248e03
--- /dev/null
+++ b/themes/openSUSE/help-install/xh/main::help.html
@@ -0,0 +1,25 @@
+<h3>
+<a name="help">Kusetyenziswa Isixokelelwano Soncedo</a>
+</h3>
+
+<p>
+The boot loader online help is context sensitive. It gives information
+about the selected menu item or, if you are editing boot options,
+it tries to look up information about the option in which the cursor is
+positioned.
+</p>
+
+<p>
+Navigation Keys
+<ul>
+ <li><em>Isalathi-phezulu</em>: highlight previous link</li>
+ <li><em>Isalathi-ezantsi</em>: highlight next link</li>
+ <li><em>Isalathi-ekhohlo</em>, <em>Emva ngesithuba</em>: return to previous topic</li>
+ <li><em>Isalathi-kunene</em>, <em>Ngenisa</em>, <em>Isithuba</em>: follow link</li>
+ <li><em>Tyhila Phezulu</em>: scroll up one page</li>
+ <li><em>Tyhila Ezantsi</em>: scroll down one page</li>
+ <li><em>Ekhaya</em>: go to page start</li>
+ <li><em>Isiphelo</em>: go to page end</li>
+ <li><em>Baleka</em>: leave help</li>
+</ul>
+</p>
diff --git a/themes/openSUSE/help-install/xh/main::install_src.html b/themes/openSUSE/help-install/xh/main::install_src.html
new file mode 100644
index 0000000..1b82099
--- /dev/null
+++ b/themes/openSUSE/help-install/xh/main::install_src.html
@@ -0,0 +1,12 @@
+<h3>
+<a name="install_src">Umthombo Wokuhlohla</a>
+</h3>
+
+<p>
+Press <em>@@@fkey_inst@@@</em> to choose an installation source.
+</p>
+
+<p>
+This is the same as using the <a href="#o_install">hlohla</a>
+boot option.
+</p>
diff --git a/themes/openSUSE/help-install/xh/main::keytable.html b/themes/openSUSE/help-install/xh/main::keytable.html
new file mode 100644
index 0000000..18e9456
--- /dev/null
+++ b/themes/openSUSE/help-install/xh/main::keytable.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="keytable">Ulwimi Nokukhethwayo Kokumisa kakuhle Ibhodi Yamaqhosha</a>
+</h3>
+
+<p>
+Press <em>@@@fkey_lang@@@</em> to change language and keyboard layout the boot loader uses.
+</p>
diff --git a/themes/openSUSE/help-install/xh/main::linux.html b/themes/openSUSE/help-install/xh/main::linux.html
new file mode 100644
index 0000000..a63ef64
--- /dev/null
+++ b/themes/openSUSE/help-install/xh/main::linux.html
@@ -0,0 +1,10 @@
+<h3>
+<a name="linux">Ukuhlohla</a>
+</h3>
+
+<p>
+Select <em>Ukuhlohla</em> to start the default installation. The
+<a href="#opt">izikhethwa zomiselo lwenkqubo</a> entered are used in the
+start-up. This item activates many features of commonly available
+hardware.
+</p>
diff --git a/themes/openSUSE/help-install/xh/main::memtest.html b/themes/openSUSE/help-install/xh/main::memtest.html
new file mode 100644
index 0000000..fdfcc3c
--- /dev/null
+++ b/themes/openSUSE/help-install/xh/main::memtest.html
@@ -0,0 +1,14 @@
+<h3>
+<a name="memtest">Uvavanyo Lukavimba Wolwazi</a>
+</h3>
+
+<p>
+The included <em>Uvavanyo Lukavimba Wolwazi</em> provides good possibilities to
+stress test the hardware of a system. Its main purpose is to detect
+broken RAM, but it also stresses many other parts of the system.
+</p>
+
+<p>
+There is no guarantee that the memory is good if no errors are
+found, although most of memory defects will be found.
+</p>
diff --git a/themes/openSUSE/help-install/xh/main::noacpi.html b/themes/openSUSE/help-install/xh/main::noacpi.html
new file mode 100644
index 0000000..9c47da6
--- /dev/null
+++ b/themes/openSUSE/help-install/xh/main::noacpi.html
@@ -0,0 +1,24 @@
+<h3>
+<a name="noacpi">Ukuhlohlwa kwe--ACPI Kususwe Isakhono</a>
+</h3>
+
+<p>
+Current hardware usually requires ACPI (Advanced Configuration and Power Interface)
+to control the interrupt handling.
+ACPI completely replaces the old APM system.
+</p>
+
+<p>
+Select <em>Ukuhlohlwa kwe--ACPI Kususwe Isakhono</em> if you encounter
+problems during boot of the kernel. Known problems with machines that
+have problems with ACPI are:
+<ul>
+ <li>kernel freezes when booting</li>
+ <li>PCI Cards are not detected or initialized properly</li>
+</ul>
+</p>
+
+<p>
+You may also try the <a href="#firmware">Uvavanyo lwe-Firmware</a> boot option
+and look at the test results of the ACPI validation.
+</p>
diff --git a/themes/openSUSE/help-install/xh/main::nolapic.html b/themes/openSUSE/help-install/xh/main::nolapic.html
new file mode 100644
index 0000000..c051065
--- /dev/null
+++ b/themes/openSUSE/help-install/xh/main::nolapic.html
@@ -0,0 +1,14 @@
+<h3>
+<a name="nolapic">Ukuhlohlwa kwe--APIC Yendawo Leyo Kususwe Isakhono</a>
+</h3>
+
+<p>
+Normally there are no problems with the APIC (Advanced Programmable Interrupt
+Controller). But if you seem to have some, try this option to boot
+without local APIC support.
+</p>
+
+<p>
+Please don't confuse this with <a href="#noacpi">i-ACPI</a>
+(Advanced Configuration and Power Interface).
+</p>
diff --git a/themes/openSUSE/help-install/xh/main::opt.html b/themes/openSUSE/help-install/xh/main::opt.html
new file mode 100644
index 0000000..1d1f481
--- /dev/null
+++ b/themes/openSUSE/help-install/xh/main::opt.html
@@ -0,0 +1,28 @@
+<h3>
+<a name="opt">Izikhethwa Zomiselo Lwenkqubo</a>
+</h3>
+
+<p>
+There are two types of boot options available. First, there are
+options that affect the installer. Second, there are kernel
+options. Some of the more common options are:
+</p>
+
+<p>
+a) installer options
+<ul>
+ <li><a href="#o_install">hlohla</a> -- select an installation source</li>
+ <li><a href="#network">izikhethwa zomsebenzi wothungelwano</a> -- the network options</li>
+ <li><a href="#o_vnc">Izikhethwa ze-vnc</a> -- options for installation via VNC</li>
+</ul>
+</p>
+
+<p>
+b) kernel options
+<ul>
+ <li><a href="#o_splash">tshiza</a> -- influence the behavior of the splash screen</li>
+ <li><a href="#o_apm">i-apm</a> -- toggle power management</li>
+ <li><a href="#o_acpi">i-acpi</a> -- advanced configuration and power interface</li>
+ <li><a href="#o_ide">i-ide</a> -- control the IDE subsystem</li>
+</ul>
+</p>
diff --git a/themes/openSUSE/help-install/xh/main::opt::network.html b/themes/openSUSE/help-install/xh/main::opt::network.html
new file mode 100644
index 0000000..88a2707
--- /dev/null
+++ b/themes/openSUSE/help-install/xh/main::opt::network.html
@@ -0,0 +1,35 @@
+<a name="o_hostip"/>
+<a name="o_netmask"/>
+<a name="o_gateway"/>
+
+<h3>
+<a name="network">Izikhethwa Zomhlohli: Izikhethwa Zomsebenzi Wothungelwano</a>
+</h3>
+
+<p>
+It is possible to configure the network interface right now. The
+hardware will be detected later by YaST2. The minimum set of options
+to configure your network card consists of host IP and netmask. For
+example:
+<ul>
+ <li>hostip=192.168.0.10 netmask=255.255.255.0</li>
+</ul>
+</p>
+
+<p>
+or in a shorter form:
+<ul>
+ <li>hostip=192.168.0.10/24</li>
+</ul>
+</p>
+
+<p>
+If you specified a <a href="#o_install">ukuhlohla okusekwe kumsebenzi wothungelwano</a> and do
+not specify both of these options, the installer tries to configure
+the network interface with <em>i-dhcp</em>. If you need a default
+gateway, specify this with the option <em>Indlela yesango</em>. For
+example:
+<ul>
+ <li>indlela yesango=192.168.0.8</li>
+</ul>
+</p>
diff --git a/themes/openSUSE/help-install/xh/main::opt::o_acpi.html b/themes/openSUSE/help-install/xh/main::opt::o_acpi.html
new file mode 100644
index 0000000..5087eb6
--- /dev/null
+++ b/themes/openSUSE/help-install/xh/main::opt::o_acpi.html
@@ -0,0 +1,23 @@
+<h3>
+<a name="o_acpi">Izikhethwa ze-Kernel: i-acpi</a>
+</h3>
+
+<p>
+ACPI (Advanced Configuration and Power Interface) is a
+standard that defines power and configuration management interfaces
+between an operating system and the BIOS. By default, <em>i-acpi</em> is
+switched on when a BIOS is detected that is newer than from year
+2000. There are several commonly
+used parameters to control the behavior of ACPI:
+<ul>
+ <li><em>i-pci=noacpi</em> -- do not use ACPI to route PCI interrupts</li>
+ <li><em>i-acpi=umiselolwakudala</em> -- only the parts of ACPI that are relevant for booting remain activated</li>
+ <li><em>i-acpi=imo yokungasebenzi</em> -- switch off ACPI completely</li>
+ <li><em>i-acpi=yonyanzelo</em> -- switch on ACPI even if your BIOS is dated before 2000</li>
+</ul>
+</p>
+
+<p>
+Especially on new computers, it replaces the old
+<a href="#o_apm">i-apm</a> system.
+</p>
diff --git a/themes/openSUSE/help-install/xh/main::opt::o_apm.html b/themes/openSUSE/help-install/xh/main::opt::o_apm.html
new file mode 100644
index 0000000..b2180bf
--- /dev/null
+++ b/themes/openSUSE/help-install/xh/main::opt::o_apm.html
@@ -0,0 +1,21 @@
+<h3>
+<a name="o_apm">Izikhethwa ze-Kernel: i-apm</a>
+</h3>
+
+<p>
+APM is one of the two power management strategies used on current
+computers. It is mainly used with laptops for functions like suspend
+to disk, but it may also be responsible for switching off the
+computer after power down. APM relies on a correct working BIOS. If
+the BIOS is broken, APM may have only limited use or even prevent the
+computer from working. Therefore, it may be switched off with the
+parameter
+<ul>
+ <li><em>i-apm=imo yokungasebenzi</em> -- switch off APM completely</li>
+</ul>
+</p>
+
+<p>
+Some very new computers may take more advantage from the newer
+<a href="#o_acpi">i-ACPI</a>.
+</p>
diff --git a/themes/openSUSE/help-install/xh/main::opt::o_ide.html b/themes/openSUSE/help-install/xh/main::opt::o_ide.html
new file mode 100644
index 0000000..79d973b
--- /dev/null
+++ b/themes/openSUSE/help-install/xh/main::opt::o_ide.html
@@ -0,0 +1,12 @@
+<h3>
+<a name="o_ide">Izikhethwa ze-Kernel: i-ide</a>
+</h3>
+
+<p>
+IDE is, unlike SCSI, commonly used in most desktop workstations.
+To circumvent some hardware problems that occur with IDE systems, use the
+kernel parameter:
+<ul>
+ <li><em>i-ide=nodma</em> -- switch off DMA for IDE drives</li>
+</ul>
+</p>
diff --git a/themes/openSUSE/help-install/xh/main::opt::o_install.html b/themes/openSUSE/help-install/xh/main::opt::o_install.html
new file mode 100644
index 0000000..1b4178e
--- /dev/null
+++ b/themes/openSUSE/help-install/xh/main::opt::o_install.html
@@ -0,0 +1,30 @@
+<h3>
+<a name="o_install">Izikhethwa Zomhlohli: hlohla</a>
+</h3>
+
+<p>
+By default, the local CD-ROMs are searched for the installation source.
+For a network install, select the
+<em>hlohla</em> option. Possible installation protocols are
+<ul>
+ <li>FTP</li>
+ <li>NFS</li>
+ <li>HTTP</li>
+</ul>
+</p>
+
+<p>
+The syntax to use is just like standard URLs. For example,
+if your server is found at 192.168.0.1 and you want to do an NFS-based
+install from the directory /install on this server, specify
+the source as follows:
+<ul>
+ <li>ukuhlohla=nfs://192.168.0.1/ukuhlohla</li>
+</ul>
+</p>
+
+<p>
+The network card will either be configured with <em>i-dhcp</em> or you
+must specify the parameters yourself as described in the
+<a href="#network">izikhethwa zomsebenzi wothungelwano</a>.
+</p>
diff --git a/themes/openSUSE/help-install/xh/main::opt::o_splash.html b/themes/openSUSE/help-install/xh/main::opt::o_splash.html
new file mode 100644
index 0000000..6ee3c2a
--- /dev/null
+++ b/themes/openSUSE/help-install/xh/main::opt::o_splash.html
@@ -0,0 +1,12 @@
+<h3>
+<a name="o_splash">Izikhethwa ze-Kernel: tshiza</a>
+</h3>
+
+<p>
+The splash screen is the picture shown during system start-up.
+<ul>
+ <li><em>tshiza=0</em> -- The splash screen is switched off. This may be useful with very old monitors or if some error occurs.</li>
+ <li><em>tshiza=umlembelele</em> -- Activates splash, kernel and boot messages are still shown.</li>
+ <li><em>tshiza=ngokuthula</em> -- Activates splash, but no messages. Instead a progress bar is drawn.</li>
+</ul>
+</p>
diff --git a/themes/openSUSE/help-install/xh/main::opt::o_vnc.html b/themes/openSUSE/help-install/xh/main::opt::o_vnc.html
new file mode 100644
index 0000000..5bbfc27
--- /dev/null
+++ b/themes/openSUSE/help-install/xh/main::opt::o_vnc.html
@@ -0,0 +1,18 @@
+<a name="o_vncpassword"/>
+
+<h3>
+<a name="o_vnc">Izikhethwa Zomhlohli: i-vnc</a>
+</h3>
+
+<p>
+To enable the VNC installation, specify the
+parameters vnc and vncpassword:
+<ul>
+ <li><em>vnc=1 vncigamalokugqithisa=umzekelo</em></li>
+</ul>
+</p>
+
+<p>
+The VNC server will be started and you may control YaST2 over any VNC
+client from a remote system.
+</p>
diff --git a/themes/openSUSE/help-install/xh/main::rescue.html b/themes/openSUSE/help-install/xh/main::rescue.html
new file mode 100644
index 0000000..f02788b
--- /dev/null
+++ b/themes/openSUSE/help-install/xh/main::rescue.html
@@ -0,0 +1,10 @@
+<h3>
+<a name="rescue">Isixokelelwano Sokuhlangula</a>
+</h3>
+
+<p>
+The <em>Isixokelelwano Sokuhlangula</em> is a small RAM disk base system. From there,
+it is possible to make all kinds of changes to an installed system. Because
+only low-level tools are available in this system, it is intended for
+experts.
+</p>
diff --git a/themes/openSUSE/help-install/xh/main::videomode.html b/themes/openSUSE/help-install/xh/main::videomode.html
new file mode 100644
index 0000000..c11a0d9
--- /dev/null
+++ b/themes/openSUSE/help-install/xh/main::videomode.html
@@ -0,0 +1,18 @@
+<h3>
+<a name="videomode">Okukhethwayo Kwimo Yevidiyo</a>
+</h3>
+
+<p>
+Press <em>@@@fkey_video@@@</em> to get the list of video modes your graphics card
+supports. The highest mode your monitor can display is preselected.
+</p>
+
+<p>
+It is possible that your monitor cannot be detected automatically. In that
+case, select your preferred mode manually.
+</p>
+
+<p>
+If your system has problems with the graphics card during the
+installation, the <em>imo yokusebenza ngesiqendu</em> may be a usable work-around.
+</p>
diff --git a/themes/openSUSE/help-install/xh/navi.html b/themes/openSUSE/help-install/xh/navi.html
new file mode 100644
index 0000000..1034cf9
--- /dev/null
+++ b/themes/openSUSE/help-install/xh/navi.html
@@ -0,0 +1 @@
+<p>Buyela <a href="#foobar">FOOBAR</a>.</p>
diff --git a/themes/openSUSE/help-install/zh_CN/main.html b/themes/openSUSE/help-install/zh_CN/main.html
new file mode 100644
index 0000000..7d95a40
--- /dev/null
+++ b/themes/openSUSE/help-install/zh_CN/main.html
@@ -0,0 +1,86 @@
+<h3>
+<a name="main">引导加载程序帮助</a>
+</h3>
+
+<p>欢迎使用 <em>@@@product@@@</em></p>
+
+<p>可使用此菜单选择所需的功能。如果您在导航此帮助系统时有问题,请按 <em>@@@fkey_help@@@</em> 以进入帮助系统的 <a href="#help">描述</a>。此菜单中的主要功能有:</p>
+
+<p><a href="#harddisk">从硬盘引导</a>:此选择对系统无影响。它只会启动先前安装的操作系统。</p>
+
+<p><a href="#linux">安装</a>:此安装方式在大部分计算机上有效。如果在引导期间遇到系统死机或检测硬件组件时遇到问题(如磁盘控制器或网卡),则尝试使用以下安装选项之一。</p>
+
+<p>
+<a href="#noacpi">安装 - 禁用 ACPI</a>: Many of the
+currently-sold computers have incomplete or faulty ACPI
+implementations. This selection disables ACPI support in the
+kernel, but still enables many performance features, like DMA for IDE
+hard disks.
+</p>
+
+<p>
+<a href="#nolapic">安装 - 禁用本地 APIC</a>:
+If the normal installation fails, this might be due to the
+system hardware not supporting local APIC.
+If this seems to be the case, use this option to
+install without local APIC support.
+</p>
+
+<p>
+<a href="#failsafe">安装 - 安全设置</a>: If you were not
+successful with <em>安装</em>, this selection might
+solve the issue.
+</p>
+
+<p>
+<a href="#rescue">救援系统</a>: This boot image starts a small
+Linux system in RAM. This is useful if the system does not start properly.
+After booting this system, log in as root.
+</p>
+
+<p>
+<a href="#firmware">固件测试</a>: Runs a BIOS test tool that validates
+ACPI and other parts of your BIOS.
+</p>
+
+<p>
+<a href="#memtest">内存测试</a>: Memory testing is useful for more than
+checking installation of new memory modules. It is a stress test
+for a big part of your computer system and may indicate hardware
+problems.
+</p>
+
+<p>
+<a href="#opt">引导选项</a>: The boot options may change the
+behavior of your system completely. They are settings for
+the kernel.
+</p>
+
+<p>
+<a href="#help">@@@fkey_help@@@ Help</a>: This is context sensitive. It will
+show different screens depending on the active element of the
+boot screen. There is also a description of this help system
+available.
+</p>
+
+<p>
+<a href="#keytable">@@@fkey_lang@@@</a>: Set language and keyboard mapping
+used by the boot loader.
+</p>
+
+<p>
+<a href="#videomode">@@@fkey_video@@@ Video Mode</a>: Here, choose between
+different screen resolutions while installing. If you encounter
+problems with the graphical installation, the <em>文本方式</em> may
+be a work-around for you.
+</p>
+
+<p>
+<a href="#install_src">@@@fkey_inst@@@ Installation Source</a>: Choose the
+installation source.
+</p>
+
+<p>
+<a href="#driverupdate">@@@fkey_dud@@@ Driver Update</a>: For very new machines, a
+driver update may be needed to install the system.
+</p>
diff --git a/themes/openSUSE/help-install/zh_CN/main::bits.html b/themes/openSUSE/help-install/zh_CN/main::bits.html
new file mode 100644
index 0000000..5245eee
--- /dev/null
+++ b/themes/openSUSE/help-install/zh_CN/main::bits.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="bits">软件类型选择</a>
+</h3>
+
+<p>
+You have the choice to install the 32-bit or 64-bit version of @@@product@@@.
+</p>
diff --git a/themes/openSUSE/help-install/zh_CN/main::driverupdate.html b/themes/openSUSE/help-install/zh_CN/main::driverupdate.html
new file mode 100644
index 0000000..a348e67
--- /dev/null
+++ b/themes/openSUSE/help-install/zh_CN/main::driverupdate.html
@@ -0,0 +1,14 @@
+<h3>
+<a name="driverupdate">驱动程序更新</a>
+</h3>
+
+<p>
+If you need a driver update floppy or CD-ROM, press <em>@@@fkey_dud@@@</em>. The
+boot loader asks you to insert the driver update medium after
+loading the Linux kernel.
+</p>
+
+<p>
+A driver update is typically a floppy with new versions of hardware
+drivers or bug fixes needed during installation.
+</p>
diff --git a/themes/openSUSE/help-install/zh_CN/main::failsafe.html b/themes/openSUSE/help-install/zh_CN/main::failsafe.html
new file mode 100644
index 0000000..839b4fa
--- /dev/null
+++ b/themes/openSUSE/help-install/zh_CN/main::failsafe.html
@@ -0,0 +1,11 @@
+<h3>
+<a name="failsafe">安装 - 安全设置</a>
+</h3>
+
+<p>
+Select <em>安装 - 安全设置</em> if you encounter hangs
+while installing or irreproducible errors. This option disables DMA
+for IDE drives and all power management features.
+See also the kernel options for <a href="#o_apm">apm</a>,
+<a href="#o_acpi">acpi</a> and <a href="#o_ide">ide</a>.
+</p>
diff --git a/themes/openSUSE/help-install/zh_CN/main::firmware.html b/themes/openSUSE/help-install/zh_CN/main::firmware.html
new file mode 100644
index 0000000..487b6e8
--- /dev/null
+++ b/themes/openSUSE/help-install/zh_CN/main::firmware.html
@@ -0,0 +1,9 @@
+<h3>
+<a name="firmware">固件测试</a>
+</h3>
+
+<p>
+Starts a BIOS checker that validates the ACPI tables
+and many other parts of your BIOS.
+Test results can be stored on usb disk or saved via network.
+</p>
diff --git a/themes/openSUSE/help-install/zh_CN/main::harddisk.html b/themes/openSUSE/help-install/zh_CN/main::harddisk.html
new file mode 100644
index 0000000..20a9702
--- /dev/null
+++ b/themes/openSUSE/help-install/zh_CN/main::harddisk.html
@@ -0,0 +1,16 @@
+<h3>
+<a name="harddisk">从硬盘引导</a>
+</h3>
+
+<p>
+Select <em>引导已安装的操作系统</em> to start the system installed on
+your local hard disk. This system must be installed properly, because
+only the MBR (Master Boot Record) on the first hard disk is started.
+The device ID of the first hard disk is provided by the BIOS of
+the computer.
+</p>
+
+<p>
+Use this if you forgot to remove the CD or DVD from your
+drive and want to start the computer from the hard disk.
+</p>
diff --git a/themes/openSUSE/help-install/zh_CN/main::help.html b/themes/openSUSE/help-install/zh_CN/main::help.html
new file mode 100644
index 0000000..21d1a9c
--- /dev/null
+++ b/themes/openSUSE/help-install/zh_CN/main::help.html
@@ -0,0 +1,12 @@
+<h3>
+<a name="help">使用帮助系统</a>
+</h3>
+
+<p>
+The boot loader online help is context sensitive. It gives information
+about the selected menu item or, if you are editing boot options,
+it tries to look up information about the option in which the cursor is
+positioned.
+</p>
+
+<p>导航键 <ul><li><em>向上箭头</em>: highlight previous link</li><li><em>向下箭头</em>: highlight next link</li><li><em>向左箭头</em>, <em>Backspace</em>: return to previous topic</li><li><em>向右箭头</em>, <em>Enter</em>, <em>Space</em>: follow link</li><li><em>Page Up</em>: scroll up one page</li><li><em>Page Down</em>: scroll down one page</li><li><em>Home</em>: go to page start</li><li><em>End</em>: go to page end</li><li><em>Esc</em>: leave help</li></ul></p>
diff --git a/themes/openSUSE/help-install/zh_CN/main::install_src.html b/themes/openSUSE/help-install/zh_CN/main::install_src.html
new file mode 100644
index 0000000..54c4591
--- /dev/null
+++ b/themes/openSUSE/help-install/zh_CN/main::install_src.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="install_src">安装源</a>
+</h3>
+
+<p>按 <em>@@@fkey_inst@@@</em> 来选择安装源。</p>
+
+<p>这与使用 <a href="#o_install">安装</a> 引导选项是一样的。</p>
diff --git a/themes/openSUSE/help-install/zh_CN/main::keytable.html b/themes/openSUSE/help-install/zh_CN/main::keytable.html
new file mode 100644
index 0000000..81b0919
--- /dev/null
+++ b/themes/openSUSE/help-install/zh_CN/main::keytable.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="keytable">语言和键盘布局选择</a>
+</h3>
+
+<p>按 <em>@@@fkey_lang@@@</em> 以更改引导加载程序使用的语言和键盘布局。</p>
diff --git a/themes/openSUSE/help-install/zh_CN/main::linux.html b/themes/openSUSE/help-install/zh_CN/main::linux.html
new file mode 100644
index 0000000..e905c24
--- /dev/null
+++ b/themes/openSUSE/help-install/zh_CN/main::linux.html
@@ -0,0 +1,10 @@
+<h3>
+<a name="linux">安装</a>
+</h3>
+
+<p>
+Select <em>安装</em> to start the default installation. The
+<a href="#opt">引导选项</a> entered are used in the
+start-up. This item activates many features of commonly available
+hardware.
+</p>
diff --git a/themes/openSUSE/help-install/zh_CN/main::memtest.html b/themes/openSUSE/help-install/zh_CN/main::memtest.html
new file mode 100644
index 0000000..dd992b0
--- /dev/null
+++ b/themes/openSUSE/help-install/zh_CN/main::memtest.html
@@ -0,0 +1,14 @@
+<h3>
+<a name="memtest">内存测试</a>
+</h3>
+
+<p>
+The included <em>内存测试</em> provides good possibilities to
+stress test the hardware of a system. Its main purpose is to detect
+broken RAM, but it also stresses many other parts of the system.
+</p>
+
+<p>
+There is no guarantee that the memory is good if no errors are
+found, although most of memory defects will be found.
+</p>
diff --git a/themes/openSUSE/help-install/zh_CN/main::noacpi.html b/themes/openSUSE/help-install/zh_CN/main::noacpi.html
new file mode 100644
index 0000000..859758c
--- /dev/null
+++ b/themes/openSUSE/help-install/zh_CN/main::noacpi.html
@@ -0,0 +1,24 @@
+<h3>
+<a name="noacpi">安装 - 禁用 ACPI</a>
+</h3>
+
+<p>
+Current hardware usually requires ACPI (Advanced Configuration and Power Interface)
+to control the interrupt handling.
+ACPI completely replaces the old APM system.
+</p>
+
+<p>
+Select <em>安装 - 禁用 ACPI</em> if you encounter
+problems during boot of the kernel. Known problems with machines that
+have problems with ACPI are:
+<ul>
+ <li>kernel freezes when booting</li>
+ <li>PCI Cards are not detected or initialized properly</li>
+</ul>
+</p>
+
+<p>
+You may also try the <a href="#firmware">固件测试</a> boot option
+and look at the test results of the ACPI validation.
+</p>
diff --git a/themes/openSUSE/help-install/zh_CN/main::nolapic.html b/themes/openSUSE/help-install/zh_CN/main::nolapic.html
new file mode 100644
index 0000000..fd2fb56
--- /dev/null
+++ b/themes/openSUSE/help-install/zh_CN/main::nolapic.html
@@ -0,0 +1,14 @@
+<h3>
+<a name="nolapic">安装 - 禁用本地 APIC</a>
+</h3>
+
+<p>
+Normally there are no problems with the APIC (Advanced Programmable Interrupt
+Controller). But if you seem to have some, try this option to boot
+without local APIC support.
+</p>
+
+<p>
+Please don't confuse this with <a href="#noacpi">ACPI</a>
+(Advanced Configuration and Power Interface).
+</p>
diff --git a/themes/openSUSE/help-install/zh_CN/main::opt.html b/themes/openSUSE/help-install/zh_CN/main::opt.html
new file mode 100644
index 0000000..af4a305
--- /dev/null
+++ b/themes/openSUSE/help-install/zh_CN/main::opt.html
@@ -0,0 +1,28 @@
+<h3>
+<a name="opt">引导选项</a>
+</h3>
+
+<p>
+There are two types of boot options available. First, there are
+options that affect the installer. Second, there are kernel
+options. Some of the more common options are:
+</p>
+
+<p>
+a) installer options
+<ul>
+ <li><a href="#o_install">安装</a> -- select an installation source</li>
+ <li><a href="#network">网络选项</a> -- the network options</li>
+ <li><a href="#o_vnc">VNC 选项</a> -- options for installation via VNC</li>
+</ul>
+</p>
+
+<p>
+b) kernel options
+<ul>
+ <li><a href="#o_splash">splash</a> -- influence the behavior of the splash screen</li>
+ <li><a href="#o_apm">apm</a> -- toggle power management</li>
+ <li><a href="#o_acpi">acpi</a> -- advanced configuration and power interface</li>
+ <li><a href="#o_ide">ide</a> -- control the IDE subsystem</li>
+</ul>
+</p>
diff --git a/themes/openSUSE/help-install/zh_CN/main::opt::network.html b/themes/openSUSE/help-install/zh_CN/main::opt::network.html
new file mode 100644
index 0000000..13fc7b1
--- /dev/null
+++ b/themes/openSUSE/help-install/zh_CN/main::opt::network.html
@@ -0,0 +1,35 @@
+<a name="o_hostip"/>
+<a name="o_netmask"/>
+<a name="o_gateway"/>
+
+<h3>
+<a name="network">安装程序选项:网络选项</a>
+</h3>
+
+<p>
+It is possible to configure the network interface right now. The
+hardware will be detected later by YaST2. The minimum set of options
+to configure your network card consists of host IP and netmask. For
+example:
+<ul>
+ <li>hostip=192.168.0.10 netmask=255.255.255.0</li>
+</ul>
+</p>
+
+<p>
+or in a shorter form:
+<ul>
+ <li>hostip=192.168.0.10/24</li>
+</ul>
+</p>
+
+<p>
+If you specified a <a href="#o_install">基于网络的安装</a> and do
+not specify both of these options, the installer tries to configure
+the network interface with <em>dhcp</em>. If you need a default
+gateway, specify this with the option <em>网关</em>. For
+example:
+<ul>
+ <li>gateway=192.168.0.8</li>
+</ul>
+</p>
diff --git a/themes/openSUSE/help-install/zh_CN/main::opt::o_acpi.html b/themes/openSUSE/help-install/zh_CN/main::opt::o_acpi.html
new file mode 100644
index 0000000..a20c40d
--- /dev/null
+++ b/themes/openSUSE/help-install/zh_CN/main::opt::o_acpi.html
@@ -0,0 +1,23 @@
+<h3>
+<a name="o_acpi">内核选项:acpi</a>
+</h3>
+
+<p>
+ACPI (Advanced Configuration and Power Interface) is a
+standard that defines power and configuration management interfaces
+between an operating system and the BIOS. By default, <em>acpi</em> is
+switched on when a BIOS is detected that is newer than from year
+2000. There are several commonly
+used parameters to control the behavior of ACPI:
+<ul>
+ <li><em>pci=noacpi</em> -- do not use ACPI to route PCI interrupts</li>
+ <li><em>acpi=oldboot</em> -- only the parts of ACPI that are relevant for booting remain activated</li>
+ <li><em>acpi=off</em> -- switch off ACPI completely</li>
+ <li><em>acpi=force</em> -- switch on ACPI even if your BIOS is dated before 2000</li>
+</ul>
+</p>
+
+<p>
+Especially on new computers, it replaces the old
+<a href="#o_apm">apm</a> system.
+</p>
diff --git a/themes/openSUSE/help-install/zh_CN/main::opt::o_apm.html b/themes/openSUSE/help-install/zh_CN/main::opt::o_apm.html
new file mode 100644
index 0000000..2ec5b5f
--- /dev/null
+++ b/themes/openSUSE/help-install/zh_CN/main::opt::o_apm.html
@@ -0,0 +1,21 @@
+<h3>
+<a name="o_apm">内核选项:apm</a>
+</h3>
+
+<p>
+APM is one of the two power management strategies used on current
+computers. It is mainly used with laptops for functions like suspend
+to disk, but it may also be responsible for switching off the
+computer after power down. APM relies on a correct working BIOS. If
+the BIOS is broken, APM may have only limited use or even prevent the
+computer from working. Therefore, it may be switched off with the
+parameter
+<ul>
+ <li><em>apm=off</em> -- switch off APM completely</li>
+</ul>
+</p>
+
+<p>
+Some very new computers may take more advantage from the newer
+<a href="#o_acpi">ACPI</a>.
+</p>
diff --git a/themes/openSUSE/help-install/zh_CN/main::opt::o_ide.html b/themes/openSUSE/help-install/zh_CN/main::opt::o_ide.html
new file mode 100644
index 0000000..a46c033
--- /dev/null
+++ b/themes/openSUSE/help-install/zh_CN/main::opt::o_ide.html
@@ -0,0 +1,12 @@
+<h3>
+<a name="o_ide">内核选项:ide</a>
+</h3>
+
+<p>
+IDE is, unlike SCSI, commonly used in most desktop workstations.
+To circumvent some hardware problems that occur with IDE systems, use the
+kernel parameter:
+<ul>
+ <li><em>ide=nodma</em> -- switch off DMA for IDE drives</li>
+</ul>
+</p>
diff --git a/themes/openSUSE/help-install/zh_CN/main::opt::o_install.html b/themes/openSUSE/help-install/zh_CN/main::opt::o_install.html
new file mode 100644
index 0000000..2e6e99c
--- /dev/null
+++ b/themes/openSUSE/help-install/zh_CN/main::opt::o_install.html
@@ -0,0 +1,30 @@
+<h3>
+<a name="o_install">安装程序选项:install</a>
+</h3>
+
+<p>
+By default, the local CD-ROMs are searched for the installation source.
+For a network install, select the
+<em>安装</em> option. Possible installation protocols are
+<ul>
+ <li>FTP</li>
+ <li>NFS</li>
+ <li>HTTP</li>
+</ul>
+</p>
+
+<p>
+The syntax to use is just like standard URLs. For example,
+if your server is found at 192.168.0.1 and you want to do an NFS-based
+install from the directory /install on this server, specify
+the source as follows:
+<ul>
+ <li>install=nfs://192.168.0.1/install</li>
+</ul>
+</p>
+
+<p>
+The network card will either be configured with <em>dhcp</em> or you
+must specify the parameters yourself as described in the
+<a href="#network">网络选项</a>.
+</p>
diff --git a/themes/openSUSE/help-install/zh_CN/main::opt::o_splash.html b/themes/openSUSE/help-install/zh_CN/main::opt::o_splash.html
new file mode 100644
index 0000000..fd5cf28
--- /dev/null
+++ b/themes/openSUSE/help-install/zh_CN/main::opt::o_splash.html
@@ -0,0 +1,12 @@
+<h3>
+<a name="o_splash">内核选项:splash</a>
+</h3>
+
+<p>
+The splash screen is the picture shown during system start-up.
+<ul>
+ <li><em>splash=0</em> -- The splash screen is switched off. This may be useful with very old monitors or if some error occurs.</li>
+ <li><em>splash=verbose</em> -- Activates splash, kernel and boot messages are still shown.</li>
+ <li><em>splash=silent</em> -- Activates splash, but no messages. Instead a progress bar is drawn.</li>
+</ul>
+</p>
diff --git a/themes/openSUSE/help-install/zh_CN/main::opt::o_vnc.html b/themes/openSUSE/help-install/zh_CN/main::opt::o_vnc.html
new file mode 100644
index 0000000..20ba18b
--- /dev/null
+++ b/themes/openSUSE/help-install/zh_CN/main::opt::o_vnc.html
@@ -0,0 +1,18 @@
+<a name="o_vncpassword"/>
+
+<h3>
+<a name="o_vnc">安装程序选项:vnc</a>
+</h3>
+
+<p>
+To enable the VNC installation, specify the
+parameters vnc and vncpassword:
+<ul>
+ <li><em>vnc=1 vncpassword=example</em></li>
+</ul>
+</p>
+
+<p>
+The VNC server will be started and you may control YaST2 over any VNC
+client from a remote system.
+</p>
diff --git a/themes/openSUSE/help-install/zh_CN/main::rescue.html b/themes/openSUSE/help-install/zh_CN/main::rescue.html
new file mode 100644
index 0000000..898799d
--- /dev/null
+++ b/themes/openSUSE/help-install/zh_CN/main::rescue.html
@@ -0,0 +1,10 @@
+<h3>
+<a name="rescue">救援系统</a>
+</h3>
+
+<p>
+The <em>救援系统</em> is a small RAM disk base system. From there,
+it is possible to make all kinds of changes to an installed system. Because
+only low-level tools are available in this system, it is intended for
+experts.
+</p>
diff --git a/themes/openSUSE/help-install/zh_CN/main::videomode.html b/themes/openSUSE/help-install/zh_CN/main::videomode.html
new file mode 100644
index 0000000..61c2a2d
--- /dev/null
+++ b/themes/openSUSE/help-install/zh_CN/main::videomode.html
@@ -0,0 +1,18 @@
+<h3>
+<a name="videomode">视频模式选择</a>
+</h3>
+
+<p>
+Press <em>@@@fkey_video@@@</em> to get the list of video modes your graphics card
+supports. The highest mode your monitor can display is preselected.
+</p>
+
+<p>
+It is possible that your monitor cannot be detected automatically. In that
+case, select your preferred mode manually.
+</p>
+
+<p>
+If your system has problems with the graphics card during the
+installation, the <em>文本方式</em> may be a usable work-around.
+</p>
diff --git a/themes/openSUSE/help-install/zh_CN/navi.html b/themes/openSUSE/help-install/zh_CN/navi.html
new file mode 100644
index 0000000..99e1122
--- /dev/null
+++ b/themes/openSUSE/help-install/zh_CN/navi.html
@@ -0,0 +1 @@
+<p>返回 <a href="#foobar">FOOBAR</a></p>
diff --git a/themes/openSUSE/help-install/zh_TW/main.html b/themes/openSUSE/help-install/zh_TW/main.html
new file mode 100644
index 0000000..aa9f1f9
--- /dev/null
+++ b/themes/openSUSE/help-install/zh_TW/main.html
@@ -0,0 +1,35 @@
+<h3>
+<a name="main">開機載入器說明</a>
+</h3>
+
+<p>歡迎光臨 <em>@@@產品@@@</em></p>
+
+<p>使用此功能表來選取想要的功能。如果您在巡覽此系統時有問題,請按 <em>@@@fkey_help@@@</em> 以進入說明系統的 <a href="#help">描述</a>。此功能表的主要功能是:</p>
+
+<p><a href="#harddisk">從硬碟開機</a>:此選項不會對系統進行任何動作,它只會啟動之前已安裝的作業系統。</p>
+
+<p><a href="#linux">安裝</a>:此安裝模式適用於大部分的電腦上。如果系統在開機時凍結,或是在偵測硬體元件 (如磁碟控制卡或軟體卡) 上有問題,請嘗試以下其中一個安裝選項。</p>
+
+<p><a href="#noacpi">安裝 -- 停用 ACPI</a>: 市面上許多電腦的 ACPI 執行方式不完整或錯誤。此選項可停用核心中的 ACPI 支援,但仍會啟用許多增強效能的功能,像 IDE 硬碟的 DMA。</p>
+
+<p><a href="#nolapic">安裝 -- 關閉 Local APIC</a>: 如果正常安裝失敗,可能是因為系統硬體不支援本地 APIC。 如果是這個原因,請使用本選項即可無須本地 APIC 支援即安裝。</p>
+
+<p><a href="#failsafe">安裝 -- 安全設定</a>:如果您無法成功使用 <em>安裝</em>,此選項可能可以解決此問題。</p>
+
+<p><a href="#rescue">救援系統</a>:此開機映像檔會啟動 RAM 中的迷你 Linux 系統。如果系統未能正確啟動,此功能非常的有用。此系統開機之後,請以 root 身份登入。</p>
+
+<p><a href="#firmware">韌體測試</a>:執行 BIOS 測試工具確認您的 BIOS 的 ACPI 和其他部份。</p>
+
+<p><a href="#memtest">記憶體測試</a>: 記憶體測試不僅只是檢查新記憶體模組的安裝,它可對您電腦系統的絕大部分進行壓力測試,並可能指出硬體的問題。</p>
+
+<p><a href="#opt">開機選項</a>: 開機選項會完全變更您系統的行為,這些選項是核心的設定。</p>
+
+<p><a href="#help">@@@fkey_help@@@ 說明</a>: 為智慧型關聯式,它會根據開機畫面中的作用中元素而顯示不同的畫面。在此也有此說明系統的可用說明。</p>
+
+<p><a href="#keytable">@@@fkey_lang@@@</a>: 設定開機載入器使用的語言和鍵盤對應。</p>
+
+<p><a href="#videomode">@@@fkey_video@@@ 視訊模式</a>:安裝時在此選擇其他螢幕解析度。如果您碰到圖形安裝的問題,<em>文字模式</em> 會是因應措施。</p>
+
+<p><a href="#install_src">@@@fkey_inst@@@ 安裝來源</a>: 選擇安裝來源。</p>
+
+<p><a href="#driverupdate">@@@fkey_dud@@@ 驅動程式更新</a>:對於非常新的電腦,安裝系統時可能需要驅動程式更新。</p>
diff --git a/themes/openSUSE/help-install/zh_TW/main::bits.html b/themes/openSUSE/help-install/zh_TW/main::bits.html
new file mode 100644
index 0000000..d58b5cd
--- /dev/null
+++ b/themes/openSUSE/help-install/zh_TW/main::bits.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="bits">軟體類型選項</a>
+</h3>
+
+<p>您可以選擇安裝 32 位元或 64 位元版本的 @@@product@@@。</p>
diff --git a/themes/openSUSE/help-install/zh_TW/main::driverupdate.html b/themes/openSUSE/help-install/zh_TW/main::driverupdate.html
new file mode 100644
index 0000000..c47ec74
--- /dev/null
+++ b/themes/openSUSE/help-install/zh_TW/main::driverupdate.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="driverupdate">驅動程式更新</a>
+</h3>
+
+<p>如果您需要驅動程式更新磁片或 CD-ROM,請按 <em>@@@fkey_dud@@@</em>。 在載入 Linux 核心後,開機載入器會要求您插入驅動程式更新媒體。</p>
+
+<p>驅動程式更新通常是一張提供新版硬碟驅動程式或安裝期間所需錯誤修復的磁碟片。</p>
diff --git a/themes/openSUSE/help-install/zh_TW/main::failsafe.html b/themes/openSUSE/help-install/zh_TW/main::failsafe.html
new file mode 100644
index 0000000..b2f61e8
--- /dev/null
+++ b/themes/openSUSE/help-install/zh_TW/main::failsafe.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="failsafe">安裝 -- 安全設定</a>
+</h3>
+
+<p>如果您發生無法再現的錯誤或在安裝時碰到問題,請選取 <em>安裝 -- 安全設定</em>,此選項會停用 IDE 磁碟機的 DMA 和所有電源管理功能。另請參閱 <a href="#o_apm">APM</a>、<a href="#o_acpi">acpi</a> 和 <a href="#o_ide">IDE</a>的核心選項。</p>
diff --git a/themes/openSUSE/help-install/zh_TW/main::firmware.html b/themes/openSUSE/help-install/zh_TW/main::firmware.html
new file mode 100644
index 0000000..6983b11
--- /dev/null
+++ b/themes/openSUSE/help-install/zh_TW/main::firmware.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="firmware">韌體測試</a>
+</h3>
+
+<p>啟動 BIOS 檢查程式以驗證 ACPI 表和 BIOS 的其他許多部分。 測試結果可儲存在 USB 碟上或透過網路儲存。</p>
diff --git a/themes/openSUSE/help-install/zh_TW/main::harddisk.html b/themes/openSUSE/help-install/zh_TW/main::harddisk.html
new file mode 100644
index 0000000..ea678b9
--- /dev/null
+++ b/themes/openSUSE/help-install/zh_TW/main::harddisk.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="harddisk">從硬碟開機</a>
+</h3>
+
+<p>選取 <em>用安裝的作業系統開機</em> 以啟動安裝在您本機硬碟上的系統。此系統必須正確地安裝,因為只有第一個硬碟上的 MBR (Master Boot Record,主開機記錄) 會被啟動。第一個硬碟上的裝置 ID 是由電腦的 BIOS 所提供。</p>
+
+<p>如果您忘記將 CD 或 DVD 從您的磁碟機中取出,但要從硬碟啟動電腦,請使用此選項。</p>
diff --git a/themes/openSUSE/help-install/zh_TW/main::help.html b/themes/openSUSE/help-install/zh_TW/main::help.html
new file mode 100644
index 0000000..8508675
--- /dev/null
+++ b/themes/openSUSE/help-install/zh_TW/main::help.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="help">使用說明系統</a>
+</h3>
+
+<p>開機載入器線上說明為智慧型關聯式,它會根據選取的功能表項目來提供資訊,或者,如果您正在編輯開機選項,則它會嘗試查詢游標所在處選項的資訊。</p>
+
+<p>瀏覽鍵 <ul><li><em>向上箭號</em>: 反白上一個連結</li><li><em>向下箭號</em>: 反白下一個連結</li><li><em>向左箭號</em>, <em>退格鍵</em>: 返回上一個主題</li><li><em>向右箭號</em>, <em>Enter</em>, <em>空格</em>: 跟隨連結</li><li><em>Page Up</em>: 向上捲動一頁</li><li><em>Page Down</em>: 向下捲動一頁</li><li><em>Home</em>: 移至頁首</li><li><em>End</em>:移至頁底</li><li><em>Esc</em>: 離開說明</li></ul></p>
diff --git a/themes/openSUSE/help-install/zh_TW/main::install_src.html b/themes/openSUSE/help-install/zh_TW/main::install_src.html
new file mode 100644
index 0000000..a0bdf0d
--- /dev/null
+++ b/themes/openSUSE/help-install/zh_TW/main::install_src.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="install_src">安裝來源</a>
+</h3>
+
+<p>按 <em>@@@fkey_inst@@@</em> 以選取安裝來源</p>
+
+<p>這與使用 <a href="#o_install">安裝</a> 開機選項相同。</p>
diff --git a/themes/openSUSE/help-install/zh_TW/main::keytable.html b/themes/openSUSE/help-install/zh_TW/main::keytable.html
new file mode 100644
index 0000000..ebe7495
--- /dev/null
+++ b/themes/openSUSE/help-install/zh_TW/main::keytable.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="keytable">語言和鍵盤配置選項</a>
+</h3>
+
+<p>按下 <em>@@@fkey_lang@@@</em> 以變更開機載入器使用的語言和鍵盤配置。</p>
diff --git a/themes/openSUSE/help-install/zh_TW/main::linux.html b/themes/openSUSE/help-install/zh_TW/main::linux.html
new file mode 100644
index 0000000..1fdaf40
--- /dev/null
+++ b/themes/openSUSE/help-install/zh_TW/main::linux.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="linux">安裝</a>
+</h3>
+
+<p>選取 <em>安裝</em> 以啟動預設安裝。輸入的 <a href="#opt">開機選項</a> 是在啟動中使用。此項目會啟動一般可用硬體上的許多功能。</p>
diff --git a/themes/openSUSE/help-install/zh_TW/main::memtest.html b/themes/openSUSE/help-install/zh_TW/main::memtest.html
new file mode 100644
index 0000000..1e44868
--- /dev/null
+++ b/themes/openSUSE/help-install/zh_TW/main::memtest.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="memtest">記憶體測試</a>
+</h3>
+
+<p>所包含的 <em>記憶體測試</em> 很有可能對系統的硬體進行壓力測試。它的主要目的是偵測損壞的 RAM,但也會對系統的許多其他部分產生壓力。</p>
+
+<p>即使沒有找到任何錯誤,仍不保證記憶體是好的。然而大部分的記憶體瑕疵都會被發現。</p>
diff --git a/themes/openSUSE/help-install/zh_TW/main::noacpi.html b/themes/openSUSE/help-install/zh_TW/main::noacpi.html
new file mode 100644
index 0000000..e71e2f2
--- /dev/null
+++ b/themes/openSUSE/help-install/zh_TW/main::noacpi.html
@@ -0,0 +1,9 @@
+<h3>
+<a name="noacpi">安裝 -- 停用 ACPI</a>
+</h3>
+
+<p>現在的硬體經常需要 ACPI (進階設定與電源介面)來控制中斷處理。ACPI 完全取代舊的 APM 系統。</p>
+
+<p>如果您在核心開機時碰到問題,請選取 <em>安裝 -- 停用 ACPI</em>。在 ACP 有問題的電腦上的已知問題為: <ul><li>開機時核心凍結</li><li>未正確偵測或初始化 PCI 卡</li></ul></p>
+
+<p>您也可以嘗試 <a href="#firmware">韌體測試</a> 的開機選項並查看 ACPI 確認項的測試結果。</p>
diff --git a/themes/openSUSE/help-install/zh_TW/main::nolapic.html b/themes/openSUSE/help-install/zh_TW/main::nolapic.html
new file mode 100644
index 0000000..7840353
--- /dev/null
+++ b/themes/openSUSE/help-install/zh_TW/main::nolapic.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="nolapic">安裝 -- 關閉 Local APIC</a>
+</h3>
+
+<p>通常 APIC (進階可程式化中斷控制器) 都沒有問題。 可是如果您有問題,請嘗試本選項,可以無須本地 APIC 支援即開機。 </p>
+
+<p>請不要和<a href="#noacpi">ACPI</a> (進階組態和電源界面)搞混了。</p>
diff --git a/themes/openSUSE/help-install/zh_TW/main::opt.html b/themes/openSUSE/help-install/zh_TW/main::opt.html
new file mode 100644
index 0000000..37cd432
--- /dev/null
+++ b/themes/openSUSE/help-install/zh_TW/main::opt.html
@@ -0,0 +1,9 @@
+<h3>
+<a name="opt">開機選項</a>
+</h3>
+
+<p>有兩種可用的開機選項。第一種選項會影響安裝程式,第二種選項為核心選項。其中一些較常用的選項為:</p>
+
+<p>a) 安裝程式選項 <ul><li><a href="#o_install">安裝</a> -- 選取安裝來源</li><li><a href="#network">網路選項</a> -- 網路選項</li><li><a href="#o_vnc">VNC 選項</a> -- 透過 VNC 安裝的選項 </li></ul></p>
+
+<p>b) 核心選項 <ul><li><a href="#o_splash">開機顯示畫面</a> -- 影響開機顯示畫面的行為</li><li><a href="#o_apm">APM</a> -- 切換電源管理</li><li><a href="#o_acpi">acpi</a> -- 進階組態和電源界面</li><li><a href="#o_ide">IDE</a> -- 控制 IDE 子系統</li></ul></p>
diff --git a/themes/openSUSE/help-install/zh_TW/main::opt::network.html b/themes/openSUSE/help-install/zh_TW/main::opt::network.html
new file mode 100644
index 0000000..f520b91
--- /dev/null
+++ b/themes/openSUSE/help-install/zh_TW/main::opt::network.html
@@ -0,0 +1,13 @@
+<a name="o_hostip"/>
+<a name="o_netmask"/>
+<a name="o_gateway"/>
+
+<h3>
+<a name="network">安裝程式選項:網路選項</a>
+</h3>
+
+<p>現在可以立即設定網路界面。稍後 YaST2 會偵測硬體。用來設定您網路卡的最少的參數包括主機 IP 和網路遮罩。例如: <ul><li>hostip=192.168.0.10 netmask=255.255.255.0</li></ul></p>
+
+<p>或使用簡短格式: <ul><li>hostip=192.168.0.10/24</li></ul></p>
+
+<p>如果您已指定 <a href="#o_install">網路式安裝</a>,但未同時指定這兩個選項,安裝程式會嘗試使用 <em>DHCP</em> 來設定網路界面。如果您需要使用預設閘道,請使用選項 <em>閘道</em> 來指定此閘道。例如: <ul><li>gateway=192.168.0.8</li></ul></p>
diff --git a/themes/openSUSE/help-install/zh_TW/main::opt::o_acpi.html b/themes/openSUSE/help-install/zh_TW/main::opt::o_acpi.html
new file mode 100644
index 0000000..6ab2ca1
--- /dev/null
+++ b/themes/openSUSE/help-install/zh_TW/main::opt::o_acpi.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="o_acpi">核心選項:acpi</a>
+</h3>
+
+<p>ACPI (進階管理與電源介面) 是一種標準,用來定義作業系統和 BIOS 之間的電源和組態管理界面。依預設值,當偵測到 BIOS 比 2000 年新時,便會開啟 <em>acpi</em>。有數個常用的參數可控制 ACPI 的行為: <ul><li><em>pci=noacpi</em> -- 不要使用 ACPI 來管理 PCI 中斷</li><li><em>acpi=oldboot</em> -- 只有部分與開機有關的 ACPI 會維持已啟動</li><li><em>acpi=off</em> -- 完全關閉 ACPI</li><li><em>acpi=force</em> -- 開啟 ACPI,即使您的 BIOS 日期早於 2000 年。</li></ul></p>
+
+<p>尤其是在新的電腦上,它會取代舊的 <a href="#o_apm">APM</a> 系統。</p>
diff --git a/themes/openSUSE/help-install/zh_TW/main::opt::o_apm.html b/themes/openSUSE/help-install/zh_TW/main::opt::o_apm.html
new file mode 100644
index 0000000..aa846a3
--- /dev/null
+++ b/themes/openSUSE/help-install/zh_TW/main::opt::o_apm.html
@@ -0,0 +1,7 @@
+<h3>
+<a name="o_apm">核心選項:APM</a>
+</h3>
+
+<p>在目前電腦上使用的電源管理策略有兩種,APM 是其中一種。它主要是用於筆記型電腦,以提供如休眠到磁碟等功能,但它也會在電源中斷後負責關閉電腦。APM 依賴正確運作的 BIOS。如果 BIOS 壞了,APM 只會限制使用電腦作業,甚或是阻止作業。因此,可使用參數 <ul><li><em>apm=off</em> -- 完全關閉 APM</li></ul> 關閉 APM。</p>
+
+<p>有些非常新的電腦更從新的得到更好處 <a href="#o_acpi">ACPI</a>。</p>
diff --git a/themes/openSUSE/help-install/zh_TW/main::opt::o_ide.html b/themes/openSUSE/help-install/zh_TW/main::opt::o_ide.html
new file mode 100644
index 0000000..1fdaf4f
--- /dev/null
+++ b/themes/openSUSE/help-install/zh_TW/main::opt::o_ide.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="o_ide">核心選項:IDE</a>
+</h3>
+
+<p>IDE 和 SCSI 不同,一般用於大部分的桌上型工作站上。若要避開一些 IDE 系統所發生的硬體問題,請使用核心參數: <ul><li><em>ide=nodma</em> -- 關閉 IDE 磁碟機的 DMA</li></ul></p>
diff --git a/themes/openSUSE/help-install/zh_TW/main::opt::o_install.html b/themes/openSUSE/help-install/zh_TW/main::opt::o_install.html
new file mode 100644
index 0000000..856c0ee
--- /dev/null
+++ b/themes/openSUSE/help-install/zh_TW/main::opt::o_install.html
@@ -0,0 +1,9 @@
+<h3>
+<a name="o_install">安裝程式選項:安裝</a>
+</h3>
+
+<p>依預設值,會在本機 CD-ROM 中搜尋安裝來源。針對網路安裝,選取 <em>安裝</em> 選項。可用的安裝通訊協定為 <ul><li>FTP</li><li>NFS</li><li>HTTP</li></ul></p>
+
+<p>使用的語法就如同標準的 URL。例如,如果您的伺服器位於 192.168.0.1,且您要執行基於 NFS 從目錄安裝/安裝在此伺服器上,請按照下列方式指定來源: <ul><li>install=nfs://192.168.0.1/install</li></ul></p>
+
+<p>網路卡必須以 <em>DHCP</em> 設定,或您必須自行指定參數如 <a href="#network">網路選項</a>。</p>
diff --git a/themes/openSUSE/help-install/zh_TW/main::opt::o_splash.html b/themes/openSUSE/help-install/zh_TW/main::opt::o_splash.html
new file mode 100644
index 0000000..ef12aae
--- /dev/null
+++ b/themes/openSUSE/help-install/zh_TW/main::opt::o_splash.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="o_splash">核心選項:開機顯示畫面</a>
+</h3>
+
+<p>開機顯示畫面是在系統啟動期間顯示的圖片。 <ul><li><em>splash=0</em> -- 關閉開機顯示畫面。這對於非常舊的監視器或是當發生一些錯誤時,非常有用。</li><li><em>splash=verbose</em> -- 啟動開機顯示畫面,且仍會顯示核心和開機訊息。</li><li><em>splash=silent</em> -- 啟動開機顯示畫面,但未顯示訊息,而是顯示進度條。</li></ul></p>
diff --git a/themes/openSUSE/help-install/zh_TW/main::opt::o_vnc.html b/themes/openSUSE/help-install/zh_TW/main::opt::o_vnc.html
new file mode 100644
index 0000000..dd4da06
--- /dev/null
+++ b/themes/openSUSE/help-install/zh_TW/main::opt::o_vnc.html
@@ -0,0 +1,9 @@
+<a name="o_vncpassword"/>
+
+<h3>
+<a name="o_vnc">安裝程式選項:VNC</a>
+</h3>
+
+<p>若要啟用 VNC 安裝,請指定 vnc 和 vncpassword 這兩個參數: <ul><li><em>vnc=1 vncpassword=example</em></li></ul></p>
+
+<p>VNC 伺服器將會啟動,您可以從遠端系統的任何 VNC 用戶端上控制 YaST2。</p>
diff --git a/themes/openSUSE/help-install/zh_TW/main::rescue.html b/themes/openSUSE/help-install/zh_TW/main::rescue.html
new file mode 100644
index 0000000..b409009
--- /dev/null
+++ b/themes/openSUSE/help-install/zh_TW/main::rescue.html
@@ -0,0 +1,5 @@
+<h3>
+<a name="rescue">救援系統</a>
+</h3>
+
+<p><em>救援系統</em> 是一種小的基於 RAM 磁碟的系統。由此可以對已安裝的系統進行所有類型的變更。因為此系統僅提供低階的工具,建議由專家使用。</p>
diff --git a/themes/openSUSE/help-install/zh_TW/main::videomode.html b/themes/openSUSE/help-install/zh_TW/main::videomode.html
new file mode 100644
index 0000000..2f5b6c1
--- /dev/null
+++ b/themes/openSUSE/help-install/zh_TW/main::videomode.html
@@ -0,0 +1,9 @@
+<h3>
+<a name="videomode">視訊模式選項</a>
+</h3>
+
+<p>按下 <em>@@@fkey_video@@@</em> 可取得您圖形卡支援的視訊模式清單。已預先選取您監視器可顯示的最高模式。</p>
+
+<p>有可能無法自動偵測您的監視器。在此情況下,請手動選取您偏好的模式。</p>
+
+<p>如果您在安裝系統時,系統碰到圖形卡上的問題,<em>文字模式</em> 會是可用的因應措施。</p>
diff --git a/themes/openSUSE/help-install/zh_TW/navi.html b/themes/openSUSE/help-install/zh_TW/navi.html
new file mode 100644
index 0000000..99e1122
--- /dev/null
+++ b/themes/openSUSE/help-install/zh_TW/navi.html
@@ -0,0 +1 @@
+<p>返回 <a href="#foobar">FOOBAR</a></p>
diff --git a/themes/openSUSE/keymaps/keymap.Pl02.inc b/themes/openSUSE/keymaps/keymap.Pl02.inc
new file mode 100644
index 0000000..5ec0860
--- /dev/null
+++ b/themes/openSUSE/keymaps/keymap.Pl02.inc
@@ -0,0 +1,16 @@
+/keymap.Pl02 [
+ [ 0x05 0x34 0x24 0xa7 ]
+ [ 0x06 0x35 0x25 0x00 ]
+ [ 0x0f 0x09 0x09 0x00 ]
+ [ 0x12 0x65 0x45 0x119 ]
+ [ 0x18 0x6f 0x4f 0xf3 ]
+ [ 0x1e 0x61 0x41 0x105 ]
+ [ 0x1f 0x73 0x53 0x15b ]
+ [ 0x26 0x6c 0x4c 0x142 ]
+ [ 0x2c 0x7a 0x5a 0x17c ]
+ [ 0x2d 0x78 0x58 0x17a ]
+ [ 0x2e 0x63 0x43 0x107 ]
+ [ 0x31 0x6e 0x4e 0x144 ]
+ [ 0x56 0x3c 0x3e 0x7c ]
+ [ 0x63 0x1c 0x1c 0x00 ]
+] def
diff --git a/themes/openSUSE/keymaps/keymap.be-latin1.inc b/themes/openSUSE/keymaps/keymap.be-latin1.inc
new file mode 100644
index 0000000..e854c0d
--- /dev/null
+++ b/themes/openSUSE/keymaps/keymap.be-latin1.inc
@@ -0,0 +1,30 @@
+/keymap.be-latin1 [
+ [ 0x02 0x26 0x31 0x7c ]
+ [ 0x03 0xe9 0x32 0x40 ]
+ [ 0x04 0x22 0x33 0x23 ]
+ [ 0x05 0x27 0x34 0x00 ]
+ [ 0x06 0x28 0x35 0x00 ]
+ [ 0x07 0xb6 0x36 0x5e ]
+ [ 0x08 0xe8 0x37 0x00 ]
+ [ 0x09 0x21 0x38 0x00 ]
+ [ 0x0a 0xe7 0x39 0x7b ]
+ [ 0x0b 0xe0 0x30 0x7d ]
+ [ 0x0c 0x29 0xb0 0x00 ]
+ [ 0x0d 0x2d 0x5f 0x00 ]
+ [ 0x10 0x61 0x41 0x00 ]
+ [ 0x11 0x7a 0x5a 0x00 ]
+ [ 0x1a 0x00 0x00 0x5b ]
+ [ 0x1b 0x24 0x2a 0x5d ]
+ [ 0x1e 0x71 0x51 0x00 ]
+ [ 0x27 0x6d 0x4d 0x00 ]
+ [ 0x28 0xf9 0x25 0x00 ]
+ [ 0x29 0xb2 0xb3 0x00 ]
+ [ 0x2b 0xb5 0xa3 0x00 ]
+ [ 0x2c 0x77 0x57 0x00 ]
+ [ 0x2e 0x63 0x43 0x00 ]
+ [ 0x32 0x2c 0x3f 0x00 ]
+ [ 0x33 0x3b 0x2e 0x00 ]
+ [ 0x34 0x3a 0x2f 0x00 ]
+ [ 0x35 0x3d 0x2b 0x00 ]
+ [ 0x56 0x3c 0x3e 0x5c ]
+] def
diff --git a/themes/openSUSE/keymaps/keymap.br-abnt2.inc b/themes/openSUSE/keymaps/keymap.br-abnt2.inc
new file mode 100644
index 0000000..72e18b8
--- /dev/null
+++ b/themes/openSUSE/keymaps/keymap.br-abnt2.inc
@@ -0,0 +1,22 @@
+/keymap.br-abnt2 [
+ [ 0x02 0x31 0x21 0xb9 ]
+ [ 0x03 0x32 0x40 0xb2 ]
+ [ 0x04 0x33 0x23 0xb3 ]
+ [ 0x05 0x34 0x24 0xa3 ]
+ [ 0x06 0x35 0x25 0xa2 ]
+ [ 0x07 0x36 0x00 0xac ]
+ [ 0x0c 0x2d 0x5f 0x00 ]
+ [ 0x0d 0x3d 0x2b 0xa7 ]
+ [ 0x13 0x72 0x52 0xae ]
+ [ 0x1b 0x5b 0x7b 0xaa ]
+ [ 0x27 0xe7 0xc7 0x00 ]
+ [ 0x29 0x27 0x22 0x00 ]
+ [ 0x2b 0x5d 0x7d 0xba ]
+ [ 0x2e 0x63 0x43 0x00 ]
+ [ 0x32 0x6d 0x4d 0xb5 ]
+ [ 0x35 0x3b 0x3a 0x00 ]
+ [ 0x53 0x00 0x2c 0x00 ]
+ [ 0x56 0x5c 0x7c 0x00 ]
+ [ 0x59 0x2f 0x3f 0xb0 ]
+ [ 0x79 0x00 0x2e 0x00 ]
+] def
diff --git a/themes/openSUSE/keymaps/keymap.cf.inc b/themes/openSUSE/keymaps/keymap.cf.inc
new file mode 100644
index 0000000..d76fcff
--- /dev/null
+++ b/themes/openSUSE/keymaps/keymap.cf.inc
@@ -0,0 +1,28 @@
+/keymap.cf [
+ [ 0x02 0x31 0x21 0xb1 ]
+ [ 0x03 0x32 0x22 0x40 ]
+ [ 0x04 0x33 0x2f 0xa3 ]
+ [ 0x05 0x34 0x24 0xa2 ]
+ [ 0x06 0x35 0x25 0xa4 ]
+ [ 0x07 0x36 0x3f 0xac ]
+ [ 0x08 0x37 0x26 0xa6 ]
+ [ 0x09 0x38 0x2a 0xb2 ]
+ [ 0x0a 0x39 0x28 0xb3 ]
+ [ 0x0b 0x30 0x29 0xbc ]
+ [ 0x0c 0x2d 0x5f 0xbd ]
+ [ 0x0d 0x3d 0x2b 0xbe ]
+ [ 0x18 0x6f 0x4f 0xa7 ]
+ [ 0x19 0x70 0x50 0xb6 ]
+ [ 0x1a 0x00 0x00 0x5b ]
+ [ 0x1b 0x00 0x00 0x5d ]
+ [ 0x27 0x3b 0x3a 0x7e ]
+ [ 0x28 0x00 0x00 0x7b ]
+ [ 0x29 0x23 0x7c 0x5c ]
+ [ 0x2b 0x3c 0x3e 0x7d ]
+ [ 0x2e 0x63 0x43 0x00 ]
+ [ 0x32 0x6d 0x4d 0xb5 ]
+ [ 0x33 0x2c 0x27 0x5f ]
+ [ 0x34 0x2e 0x2e 0x00 ]
+ [ 0x35 0xe9 0xc9 0x00 ]
+ [ 0x56 0xab 0xbb 0xb0 ]
+] def
diff --git a/themes/openSUSE/keymaps/keymap.cn-latin1.inc b/themes/openSUSE/keymaps/keymap.cn-latin1.inc
new file mode 100644
index 0000000..0655669
--- /dev/null
+++ b/themes/openSUSE/keymaps/keymap.cn-latin1.inc
@@ -0,0 +1,41 @@
+/keymap.cn-latin1 [
+ [ 0x06 0x35 0x25 0x00 ]
+ [ 0x07 0x36 0x3f 0x00 ]
+ [ 0x09 0x38 0x2a 0x7d ]
+ [ 0x0a 0x39 0x28 0x5b ]
+ [ 0x0b 0x30 0x29 0x5d ]
+ [ 0x0c 0x2d 0x5f 0x00 ]
+ [ 0x0d 0x3d 0x2b 0xac ]
+ [ 0x0e 0x7f 0x08 0x00 ]
+ [ 0x0f 0x09 0x09 0x00 ]
+ [ 0x1b 0xe7 0xc7 0x7e ]
+ [ 0x1c 0x00 0x00 0x0a ]
+ [ 0x27 0x3b 0x3a 0xb0 ]
+ [ 0x28 0xe8 0xc8 0x00 ]
+ [ 0x29 0x2f 0x5c 0x7c ]
+ [ 0x2b 0xe0 0xc0 0x00 ]
+ [ 0x2c 0x7a 0x5a 0xab ]
+ [ 0x2d 0x78 0x58 0xbb ]
+ [ 0x2e 0x63 0x43 0x00 ]
+ [ 0x33 0x2c 0x27 0x3c ]
+ [ 0x34 0x2e 0x22 0x3e ]
+ [ 0x35 0xe9 0xc9 0x2f ]
+ [ 0x37 0x2a 0x00 0x00 ]
+ [ 0x47 0x37 0x00 0x00 ]
+ [ 0x48 0x38 0x00 0x00 ]
+ [ 0x49 0x39 0x00 0x00 ]
+ [ 0x4a 0x2d 0x00 0x00 ]
+ [ 0x4b 0x34 0x00 0x00 ]
+ [ 0x4c 0x35 0x00 0x00 ]
+ [ 0x4d 0x36 0x00 0x00 ]
+ [ 0x4e 0x2b 0x00 0x00 ]
+ [ 0x4f 0x31 0x00 0x00 ]
+ [ 0x50 0x32 0x00 0x00 ]
+ [ 0x51 0x33 0x00 0x00 ]
+ [ 0x52 0x30 0x00 0x00 ]
+ [ 0x53 0x2e 0x2c 0x00 ]
+ [ 0x56 0xf9 0xd9 0x00 ]
+ [ 0x62 0x2f 0x2f 0x00 ]
+ [ 0x6f 0x00 0x08 0x00 ]
+ [ 0x76 0xb1 0xb1 0x00 ]
+] def
diff --git a/themes/openSUSE/keymaps/keymap.croat.inc b/themes/openSUSE/keymaps/keymap.croat.inc
new file mode 100644
index 0000000..e6fd5a2
--- /dev/null
+++ b/themes/openSUSE/keymaps/keymap.croat.inc
@@ -0,0 +1,38 @@
+/keymap.croat [
+ [ 0x02 0x31 0x21 0x7e ]
+ [ 0x03 0x32 0x22 0x2c7 ]
+ [ 0x04 0x33 0x23 0x5e ]
+ [ 0x05 0x34 0x24 0x2d8 ]
+ [ 0x06 0x35 0x25 0xb0 ]
+ [ 0x07 0x36 0x26 0x2db ]
+ [ 0x08 0x37 0x2f 0x60 ]
+ [ 0x09 0x38 0x28 0x2d9 ]
+ [ 0x0a 0x39 0x29 0xb4 ]
+ [ 0x0b 0x30 0x3d 0x2dd ]
+ [ 0x0c 0x27 0x3f 0xa8 ]
+ [ 0x0d 0x2b 0x2a 0xb8 ]
+ [ 0x0f 0x09 0x09 0x00 ]
+ [ 0x10 0x71 0x51 0x5c ]
+ [ 0x11 0x77 0x57 0x7c ]
+ [ 0x15 0x7a 0x5a 0x00 ]
+ [ 0x1a 0x161 0x160 0xf7 ]
+ [ 0x1b 0x111 0x110 0xd7 ]
+ [ 0x21 0x66 0x46 0x5b ]
+ [ 0x22 0x67 0x47 0x5d ]
+ [ 0x25 0x6b 0x4b 0x142 ]
+ [ 0x26 0x6c 0x4c 0x141 ]
+ [ 0x27 0x10d 0x10c 0x5c ]
+ [ 0x28 0x107 0x106 0xdf ]
+ [ 0x29 0xb8 0xa8 0x00 ]
+ [ 0x2b 0x17e 0x17d 0xa4 ]
+ [ 0x2c 0x79 0x59 0x00 ]
+ [ 0x2e 0x63 0x43 0x00 ]
+ [ 0x2f 0x76 0x56 0x40 ]
+ [ 0x30 0x62 0x42 0x7b ]
+ [ 0x31 0x6e 0x4e 0x7d ]
+ [ 0x32 0x6d 0x4d 0xa7 ]
+ [ 0x33 0x2c 0x3b 0x00 ]
+ [ 0x34 0x2e 0x3a 0x7c ]
+ [ 0x35 0x2d 0x5f 0x2f ]
+ [ 0x56 0x3c 0x3e 0x00 ]
+] def
diff --git a/themes/openSUSE/keymaps/keymap.cz-lat2-us.inc b/themes/openSUSE/keymaps/keymap.cz-lat2-us.inc
new file mode 100644
index 0000000..0d6239a
--- /dev/null
+++ b/themes/openSUSE/keymaps/keymap.cz-lat2-us.inc
@@ -0,0 +1,25 @@
+/keymap.cz-lat2-us [
+ [ 0x02 0x2b 0x31 0x00 ]
+ [ 0x03 0x11b 0x32 0x00 ]
+ [ 0x04 0x161 0x33 0x00 ]
+ [ 0x05 0x10d 0x34 0x00 ]
+ [ 0x06 0x159 0x35 0x00 ]
+ [ 0x07 0x17e 0x36 0x00 ]
+ [ 0x08 0xfd 0x37 0x00 ]
+ [ 0x09 0xe1 0x38 0x00 ]
+ [ 0x0a 0xed 0x39 0x00 ]
+ [ 0x0b 0xe9 0x30 0x00 ]
+ [ 0x0c 0x3d 0x25 0x2d ]
+ [ 0x0d 0x00 0x00 0x3d ]
+ [ 0x0f 0x09 0x09 0x00 ]
+ [ 0x1a 0xfa 0x2f 0x5b ]
+ [ 0x1b 0x29 0x28 0x5d ]
+ [ 0x27 0x16f 0x22 0x3b ]
+ [ 0x28 0xa7 0x21 0x27 ]
+ [ 0x29 0x60 0x3b 0x00 ]
+ [ 0x2e 0x63 0x43 0x00 ]
+ [ 0x33 0x2c 0x3f 0x00 ]
+ [ 0x34 0x2e 0x3a 0x00 ]
+ [ 0x35 0x2d 0x5f 0x2f ]
+ [ 0x56 0x7c 0x00 0x3c ]
+] def
diff --git a/themes/openSUSE/keymaps/keymap.cz-us-qwertz.inc b/themes/openSUSE/keymaps/keymap.cz-us-qwertz.inc
new file mode 100644
index 0000000..1cee775
--- /dev/null
+++ b/themes/openSUSE/keymaps/keymap.cz-us-qwertz.inc
@@ -0,0 +1,26 @@
+/keymap.cz-us-qwertz [
+ [ 0x02 0x2b 0x31 0x00 ]
+ [ 0x03 0x11b 0x32 0x00 ]
+ [ 0x04 0x161 0x33 0x00 ]
+ [ 0x05 0x10d 0x34 0x00 ]
+ [ 0x06 0x159 0x35 0x00 ]
+ [ 0x07 0x17e 0x36 0x00 ]
+ [ 0x08 0xfd 0x37 0x00 ]
+ [ 0x09 0xe1 0x38 0x00 ]
+ [ 0x0a 0xed 0x39 0x00 ]
+ [ 0x0b 0xe9 0x30 0x00 ]
+ [ 0x0c 0x3d 0x25 0x2d ]
+ [ 0x0d 0x00 0x00 0x3d ]
+ [ 0x15 0x7a 0x5a 0x79 ]
+ [ 0x1a 0xfa 0x2f 0x5b ]
+ [ 0x1b 0x29 0x28 0x5d ]
+ [ 0x27 0x16f 0x22 0x3b ]
+ [ 0x28 0xa7 0x21 0x27 ]
+ [ 0x29 0x60 0x3b 0x00 ]
+ [ 0x2c 0x79 0x59 0x7a ]
+ [ 0x2e 0x63 0x43 0x00 ]
+ [ 0x33 0x2c 0x3f 0x00 ]
+ [ 0x34 0x2e 0x3a 0x00 ]
+ [ 0x35 0x2d 0x5f 0x2f ]
+ [ 0x56 0x7c 0x00 0x3c ]
+] def
diff --git a/themes/openSUSE/keymaps/keymap.de-latin1-nodeadkeys.inc b/themes/openSUSE/keymaps/keymap.de-latin1-nodeadkeys.inc
new file mode 100644
index 0000000..2e05a36
--- /dev/null
+++ b/themes/openSUSE/keymaps/keymap.de-latin1-nodeadkeys.inc
@@ -0,0 +1,27 @@
+/keymap.de-latin1-nodeadkeys [
+ [ 0x03 0x32 0x22 0xb2 ]
+ [ 0x04 0x33 0xa7 0xb3 ]
+ [ 0x06 0x35 0x25 0x00 ]
+ [ 0x07 0x36 0x26 0x00 ]
+ [ 0x08 0x37 0x2f 0x7b ]
+ [ 0x09 0x38 0x28 0x5b ]
+ [ 0x0a 0x39 0x29 0x5d ]
+ [ 0x0b 0x30 0x3d 0x7d ]
+ [ 0x0c 0xdf 0x3f 0x5c ]
+ [ 0x0d 0x27 0x60 0x00 ]
+ [ 0x10 0x71 0x51 0x40 ]
+ [ 0x12 0x65 0x45 0x20ac ]
+ [ 0x15 0x7a 0x5a 0x00 ]
+ [ 0x1a 0xfc 0xdc 0x00 ]
+ [ 0x1b 0x2b 0x2a 0x7e ]
+ [ 0x27 0xf6 0xd6 0x00 ]
+ [ 0x28 0xe4 0xc4 0x00 ]
+ [ 0x29 0x5e 0xb0 0x00 ]
+ [ 0x2b 0x23 0x27 0x00 ]
+ [ 0x2c 0x79 0x59 0x00 ]
+ [ 0x32 0x6d 0x4d 0xb5 ]
+ [ 0x33 0x2c 0x3b 0x00 ]
+ [ 0x34 0x2e 0x3a 0x00 ]
+ [ 0x35 0x2d 0x5f 0x00 ]
+ [ 0x56 0x3c 0x3e 0x7c ]
+] def
diff --git a/themes/openSUSE/keymaps/keymap.dk.inc b/themes/openSUSE/keymaps/keymap.dk.inc
new file mode 100644
index 0000000..d241895
--- /dev/null
+++ b/themes/openSUSE/keymaps/keymap.dk.inc
@@ -0,0 +1,24 @@
+/keymap.dk [
+ [ 0x03 0x32 0x22 0x40 ]
+ [ 0x04 0x33 0x23 0xa3 ]
+ [ 0x05 0x34 0xa4 0x24 ]
+ [ 0x06 0x35 0x25 0x00 ]
+ [ 0x07 0x36 0x26 0x00 ]
+ [ 0x08 0x37 0x2f 0x7b ]
+ [ 0x09 0x38 0x28 0x5b ]
+ [ 0x0a 0x39 0x29 0x5d ]
+ [ 0x0b 0x30 0x3d 0x7d ]
+ [ 0x0c 0x2b 0x3f 0x00 ]
+ [ 0x0d 0xb4 0x60 0x7c ]
+ [ 0x1a 0xe5 0xc5 0x00 ]
+ [ 0x1b 0xa8 0x5e 0x7e ]
+ [ 0x27 0xe6 0xc6 0x00 ]
+ [ 0x28 0xf8 0xd8 0x00 ]
+ [ 0x29 0xbd 0xa7 0x00 ]
+ [ 0x2b 0x27 0x2a 0x00 ]
+ [ 0x2e 0x63 0x43 0x00 ]
+ [ 0x33 0x2c 0x3b 0x00 ]
+ [ 0x34 0x2e 0x3a 0x00 ]
+ [ 0x35 0x2d 0x5f 0x00 ]
+ [ 0x56 0x3c 0x3e 0x5c ]
+] def
diff --git a/themes/openSUSE/keymaps/keymap.dvorak.inc b/themes/openSUSE/keymaps/keymap.dvorak.inc
new file mode 100644
index 0000000..05fdef3
--- /dev/null
+++ b/themes/openSUSE/keymaps/keymap.dvorak.inc
@@ -0,0 +1,37 @@
+/keymap.dvorak [
+ [ 0x06 0x35 0x25 0x00 ]
+ [ 0x0c 0x5b 0x7b 0x00 ]
+ [ 0x0d 0x5d 0x7d 0x7e ]
+ [ 0x10 0x27 0x22 0x00 ]
+ [ 0x11 0x2c 0x3c 0x00 ]
+ [ 0x12 0x2e 0x3e 0x00 ]
+ [ 0x13 0x70 0x50 0x00 ]
+ [ 0x14 0x79 0x59 0x00 ]
+ [ 0x15 0x66 0x46 0x00 ]
+ [ 0x16 0x67 0x47 0x00 ]
+ [ 0x17 0x63 0x43 0x00 ]
+ [ 0x18 0x72 0x52 0x00 ]
+ [ 0x19 0x6c 0x4c 0x00 ]
+ [ 0x1a 0x2f 0x3f 0x00 ]
+ [ 0x1b 0x3d 0x2b 0x00 ]
+ [ 0x1f 0x6f 0x4f 0x00 ]
+ [ 0x20 0x65 0x45 0x00 ]
+ [ 0x21 0x75 0x55 0x00 ]
+ [ 0x22 0x69 0x49 0x00 ]
+ [ 0x23 0x64 0x44 0x00 ]
+ [ 0x24 0x68 0x48 0x00 ]
+ [ 0x25 0x74 0x54 0x00 ]
+ [ 0x26 0x6e 0x4e 0x00 ]
+ [ 0x27 0x73 0x53 0x00 ]
+ [ 0x28 0x2d 0x5f 0x5c ]
+ [ 0x2c 0x3b 0x3a 0x00 ]
+ [ 0x2d 0x71 0x51 0x00 ]
+ [ 0x2e 0x6a 0x4a 0x00 ]
+ [ 0x2f 0x6b 0x4b 0x00 ]
+ [ 0x30 0x78 0x58 0x00 ]
+ [ 0x31 0x62 0x42 0x00 ]
+ [ 0x33 0x77 0x57 0x00 ]
+ [ 0x34 0x76 0x56 0x00 ]
+ [ 0x35 0x7a 0x5a 0x00 ]
+ [ 0x56 0x3c 0x3e 0x7c ]
+] def
diff --git a/themes/openSUSE/keymaps/keymap.es.inc b/themes/openSUSE/keymaps/keymap.es.inc
new file mode 100644
index 0000000..dd7ad4f
--- /dev/null
+++ b/themes/openSUSE/keymaps/keymap.es.inc
@@ -0,0 +1,25 @@
+/keymap.es [
+ [ 0x02 0x31 0x21 0x7c ]
+ [ 0x03 0x32 0x22 0x40 ]
+ [ 0x04 0x33 0xb7 0x23 ]
+ [ 0x05 0x34 0x24 0x7e ]
+ [ 0x06 0x35 0x25 0x00 ]
+ [ 0x07 0x36 0x26 0xac ]
+ [ 0x08 0x37 0x2f 0x7b ]
+ [ 0x09 0x38 0x28 0x5b ]
+ [ 0x0a 0x39 0x29 0x5d ]
+ [ 0x0b 0x30 0x3d 0x7d ]
+ [ 0x0c 0x27 0x3f 0x5c ]
+ [ 0x0d 0xa1 0xbf 0x7e ]
+ [ 0x1a 0x00 0x00 0x5b ]
+ [ 0x1b 0x2b 0x2a 0x5d ]
+ [ 0x27 0xf1 0xd1 0x00 ]
+ [ 0x28 0x00 0x00 0x7b ]
+ [ 0x29 0xba 0xaa 0x5c ]
+ [ 0x2b 0xe7 0xc7 0x7d ]
+ [ 0x2e 0x63 0x43 0x00 ]
+ [ 0x33 0x2c 0x3b 0x00 ]
+ [ 0x34 0x2e 0x3a 0x00 ]
+ [ 0x35 0x2d 0x5f 0x00 ]
+ [ 0x56 0x3c 0x3e 0x00 ]
+] def
diff --git a/themes/openSUSE/keymaps/keymap.et.inc b/themes/openSUSE/keymaps/keymap.et.inc
new file mode 100644
index 0000000..b991cd2
--- /dev/null
+++ b/themes/openSUSE/keymaps/keymap.et.inc
@@ -0,0 +1,25 @@
+/keymap.et [
+ [ 0x03 0x32 0x22 0x40 ]
+ [ 0x04 0x33 0x23 0xa3 ]
+ [ 0x05 0x34 0xa4 0x24 ]
+ [ 0x06 0x35 0x25 0x00 ]
+ [ 0x07 0x36 0x26 0x00 ]
+ [ 0x08 0x37 0x2f 0x7b ]
+ [ 0x09 0x38 0x28 0x5b ]
+ [ 0x0a 0x39 0x29 0x5d ]
+ [ 0x0b 0x30 0x3d 0x7d ]
+ [ 0x0c 0x2b 0x3f 0x5c ]
+ [ 0x12 0x65 0x45 0x20ac ]
+ [ 0x1a 0xfc 0xdc 0x00 ]
+ [ 0x1b 0xf5 0xd5 0xa7 ]
+ [ 0x1f 0x73 0x53 0x161 ]
+ [ 0x27 0xf6 0xd6 0x00 ]
+ [ 0x28 0xe4 0xc4 0x5e ]
+ [ 0x2b 0x27 0x2a 0xbd ]
+ [ 0x2c 0x7a 0x5a 0x17e ]
+ [ 0x2e 0x63 0x43 0x00 ]
+ [ 0x33 0x2c 0x3b 0x00 ]
+ [ 0x34 0x2e 0x3a 0x00 ]
+ [ 0x35 0x2d 0x5f 0x00 ]
+ [ 0x56 0x3c 0x3e 0x7c ]
+] def
diff --git a/themes/openSUSE/keymaps/keymap.fi-latin1.inc b/themes/openSUSE/keymaps/keymap.fi-latin1.inc
new file mode 100644
index 0000000..9db0d99
--- /dev/null
+++ b/themes/openSUSE/keymaps/keymap.fi-latin1.inc
@@ -0,0 +1,31 @@
+/keymap.fi-latin1 [
+ [ 0x02 0x31 0x21 0xa1 ]
+ [ 0x03 0x32 0x22 0x40 ]
+ [ 0x04 0x33 0x23 0xa3 ]
+ [ 0x05 0x34 0xa4 0x24 ]
+ [ 0x06 0x35 0x25 0xa4 ]
+ [ 0x07 0x36 0x26 0xa5 ]
+ [ 0x08 0x37 0x2f 0x7b ]
+ [ 0x09 0x38 0x28 0x5b ]
+ [ 0x0a 0x39 0x29 0x5d ]
+ [ 0x0b 0x30 0x3d 0x7d ]
+ [ 0x0c 0x2b 0x3f 0x5c ]
+ [ 0x12 0x65 0x45 0xa4 ]
+ [ 0x13 0x72 0x52 0xae ]
+ [ 0x14 0x74 0x54 0xfe ]
+ [ 0x19 0x70 0x50 0xb6 ]
+ [ 0x1a 0xe5 0xc5 0x00 ]
+ [ 0x20 0x64 0x44 0xf0 ]
+ [ 0x27 0xf6 0xd6 0xf8 ]
+ [ 0x28 0xe4 0xc4 0xe6 ]
+ [ 0x29 0xa7 0xbd 0xbc ]
+ [ 0x2b 0x27 0x2a 0x00 ]
+ [ 0x2d 0x78 0x58 0xd7 ]
+ [ 0x2e 0x63 0x43 0xa9 ]
+ [ 0x31 0x6e 0x4e 0xf1 ]
+ [ 0x32 0x6d 0x4d 0xb5 ]
+ [ 0x33 0x2c 0x3b 0x00 ]
+ [ 0x34 0x2e 0x3a 0xb7 ]
+ [ 0x35 0x2d 0x5f 0xad ]
+ [ 0x56 0x3c 0x3e 0x7c ]
+] def
diff --git a/themes/openSUSE/keymaps/keymap.fr-latin1.inc b/themes/openSUSE/keymaps/keymap.fr-latin1.inc
new file mode 100644
index 0000000..a76dd5d
--- /dev/null
+++ b/themes/openSUSE/keymaps/keymap.fr-latin1.inc
@@ -0,0 +1,29 @@
+/keymap.fr-latin1 [
+ [ 0x02 0x26 0x31 0x00 ]
+ [ 0x03 0xe9 0x32 0x00 ]
+ [ 0x04 0x22 0x33 0x23 ]
+ [ 0x05 0x27 0x34 0x7b ]
+ [ 0x06 0x28 0x35 0x5b ]
+ [ 0x07 0x2d 0x36 0x7c ]
+ [ 0x08 0xe8 0x37 0x00 ]
+ [ 0x09 0x5f 0x38 0x5c ]
+ [ 0x0a 0xe7 0x39 0x00 ]
+ [ 0x0b 0xe0 0x30 0x40 ]
+ [ 0x0c 0x29 0xb0 0x5d ]
+ [ 0x0d 0x3d 0x2b 0x7d ]
+ [ 0x10 0x61 0x41 0x00 ]
+ [ 0x11 0x7a 0x5a 0x00 ]
+ [ 0x1b 0x24 0xa3 0xa4 ]
+ [ 0x1e 0x71 0x51 0x00 ]
+ [ 0x27 0x6d 0x4d 0x00 ]
+ [ 0x28 0xf9 0x25 0x00 ]
+ [ 0x29 0xb2 0xb2 0x00 ]
+ [ 0x2b 0x2a 0xb5 0x00 ]
+ [ 0x2c 0x77 0x57 0x00 ]
+ [ 0x2e 0x63 0x43 0x00 ]
+ [ 0x32 0x2c 0x3f 0x00 ]
+ [ 0x33 0x3b 0x2e 0x00 ]
+ [ 0x34 0x3a 0x2f 0x00 ]
+ [ 0x35 0x21 0xa7 0x00 ]
+ [ 0x56 0x3c 0x3e 0x7c ]
+] def
diff --git a/themes/openSUSE/keymaps/keymap.fr_CH-latin1.inc b/themes/openSUSE/keymaps/keymap.fr_CH-latin1.inc
new file mode 100644
index 0000000..f36b0dd
--- /dev/null
+++ b/themes/openSUSE/keymaps/keymap.fr_CH-latin1.inc
@@ -0,0 +1,27 @@
+/keymap.fr_CH-latin1 [
+ [ 0x02 0x31 0x2b 0x7c ]
+ [ 0x03 0x32 0x22 0x40 ]
+ [ 0x04 0x33 0x2a 0x23 ]
+ [ 0x05 0x34 0xe7 0xb0 ]
+ [ 0x06 0x35 0x25 0xa7 ]
+ [ 0x07 0x36 0x26 0xac ]
+ [ 0x08 0x37 0x2f 0x7c ]
+ [ 0x09 0x38 0x28 0xa2 ]
+ [ 0x0a 0x39 0x29 0x00 ]
+ [ 0x0b 0x30 0x3d 0x00 ]
+ [ 0x0c 0x27 0x3f 0x00 ]
+ [ 0x12 0x65 0x45 0xa4 ]
+ [ 0x15 0x7a 0x5a 0x00 ]
+ [ 0x1a 0xe8 0xfc 0x5b ]
+ [ 0x1b 0x00 0x21 0x5d ]
+ [ 0x27 0xe9 0xf6 0x00 ]
+ [ 0x28 0xe0 0xe4 0x7b ]
+ [ 0x29 0xa7 0xb0 0x00 ]
+ [ 0x2b 0x24 0xa3 0x7d ]
+ [ 0x2c 0x79 0x59 0x00 ]
+ [ 0x2e 0x63 0x43 0x00 ]
+ [ 0x33 0x2c 0x3b 0x00 ]
+ [ 0x34 0x2e 0x3a 0x00 ]
+ [ 0x35 0x2d 0x5f 0x00 ]
+ [ 0x56 0x3c 0x3e 0x5c ]
+] def
diff --git a/themes/openSUSE/keymaps/keymap.gr.inc b/themes/openSUSE/keymaps/keymap.gr.inc
new file mode 100644
index 0000000..38c3dcc
--- /dev/null
+++ b/themes/openSUSE/keymaps/keymap.gr.inc
@@ -0,0 +1,5 @@
+/keymap.gr [
+ [ 0x06 0x35 0x25 0x00 ]
+ [ 0x2e 0x63 0x43 0x00 ]
+ [ 0x56 0x3c 0x3e 0x7c ]
+] def
diff --git a/themes/openSUSE/keymaps/keymap.hu.inc b/themes/openSUSE/keymaps/keymap.hu.inc
new file mode 100644
index 0000000..0182d5e
--- /dev/null
+++ b/themes/openSUSE/keymaps/keymap.hu.inc
@@ -0,0 +1,42 @@
+/keymap.hu [
+ [ 0x02 0x31 0x27 0x7e ]
+ [ 0x03 0x32 0x22 0x2c7 ]
+ [ 0x04 0x33 0x2b 0x5e ]
+ [ 0x05 0x34 0x21 0x2d8 ]
+ [ 0x06 0x35 0x25 0xb0 ]
+ [ 0x07 0x36 0x2f 0x2db ]
+ [ 0x08 0x37 0x3d 0x60 ]
+ [ 0x09 0x38 0x28 0x2d9 ]
+ [ 0x0a 0x39 0x29 0xb4 ]
+ [ 0x0b 0xf6 0xd6 0x2dd ]
+ [ 0x0c 0xfc 0xdc 0xa8 ]
+ [ 0x0d 0xf3 0xd3 0xb8 ]
+ [ 0x0f 0x09 0x09 0x00 ]
+ [ 0x10 0x71 0x51 0x5c ]
+ [ 0x11 0x77 0x57 0x7c ]
+ [ 0x15 0x7a 0x5a 0x00 ]
+ [ 0x17 0x69 0x49 0xcd ]
+ [ 0x1a 0x151 0x150 0xf7 ]
+ [ 0x1b 0xfa 0xda 0xd7 ]
+ [ 0x1f 0x73 0x53 0x111 ]
+ [ 0x20 0x64 0x44 0x110 ]
+ [ 0x21 0x66 0x46 0x5b ]
+ [ 0x22 0x67 0x47 0x5d ]
+ [ 0x24 0x6a 0x4a 0xed ]
+ [ 0x25 0x6b 0x4b 0x142 ]
+ [ 0x26 0x6c 0x4c 0x141 ]
+ [ 0x27 0xe9 0xc9 0x24 ]
+ [ 0x28 0xe1 0xc1 0xdf ]
+ [ 0x29 0x30 0xa7 0x00 ]
+ [ 0x2b 0x171 0x170 0xa4 ]
+ [ 0x2c 0x79 0x59 0x3e ]
+ [ 0x2d 0x78 0x58 0x23 ]
+ [ 0x2e 0x63 0x43 0x26 ]
+ [ 0x2f 0x76 0x56 0x40 ]
+ [ 0x30 0x62 0x42 0x7b ]
+ [ 0x31 0x6e 0x4e 0x7d ]
+ [ 0x33 0x2c 0x3f 0x3b ]
+ [ 0x34 0x2e 0x3a 0x00 ]
+ [ 0x35 0x2d 0x5f 0x2a ]
+ [ 0x56 0xed 0xcd 0x3c ]
+] def
diff --git a/themes/openSUSE/keymaps/keymap.is-latin1.inc b/themes/openSUSE/keymaps/keymap.is-latin1.inc
new file mode 100644
index 0000000..90d8c32
--- /dev/null
+++ b/themes/openSUSE/keymaps/keymap.is-latin1.inc
@@ -0,0 +1,26 @@
+/keymap.is-latin1 [
+ [ 0x02 0x31 0x21 0xb9 ]
+ [ 0x03 0x32 0x22 0xb2 ]
+ [ 0x04 0x33 0x23 0xb3 ]
+ [ 0x05 0x34 0x24 0xbc ]
+ [ 0x06 0x35 0x25 0xbd ]
+ [ 0x07 0x36 0x26 0xbe ]
+ [ 0x08 0x37 0x2f 0x7b ]
+ [ 0x09 0x38 0x28 0x5b ]
+ [ 0x0a 0x39 0x29 0x5d ]
+ [ 0x0b 0x30 0x3d 0x7d ]
+ [ 0x0c 0xf6 0xd6 0x5c ]
+ [ 0x0d 0x2d 0x5f 0xad ]
+ [ 0x10 0x71 0x51 0x40 ]
+ [ 0x1a 0xf0 0xd0 0x00 ]
+ [ 0x1b 0x27 0x3f 0x7e ]
+ [ 0x27 0xe6 0xc6 0x00 ]
+ [ 0x28 0x00 0x5e 0x00 ]
+ [ 0x29 0xb0 0x00 0x7c ]
+ [ 0x2b 0x2b 0x2a 0x60 ]
+ [ 0x2e 0x63 0x43 0x00 ]
+ [ 0x33 0x2c 0x3b 0xab ]
+ [ 0x34 0x2e 0x3a 0xbb ]
+ [ 0x35 0xfe 0xde 0x00 ]
+ [ 0x56 0x3c 0x3e 0x7c ]
+] def
diff --git a/themes/openSUSE/keymaps/keymap.it.inc b/themes/openSUSE/keymaps/keymap.it.inc
new file mode 100644
index 0000000..b84ff35
--- /dev/null
+++ b/themes/openSUSE/keymaps/keymap.it.inc
@@ -0,0 +1,23 @@
+/keymap.it [
+ [ 0x03 0x32 0x22 0x00 ]
+ [ 0x04 0x33 0xa3 0x00 ]
+ [ 0x06 0x35 0x25 0x00 ]
+ [ 0x07 0x36 0x26 0x00 ]
+ [ 0x08 0x37 0x2f 0x00 ]
+ [ 0x09 0x38 0x28 0x7b ]
+ [ 0x0a 0x39 0x29 0x7d ]
+ [ 0x0b 0x30 0x3d 0x7e ]
+ [ 0x0c 0x27 0x3f 0x60 ]
+ [ 0x0d 0xec 0x5e 0xed ]
+ [ 0x1a 0xe8 0xe9 0x5b ]
+ [ 0x1b 0x2b 0x2a 0x5d ]
+ [ 0x27 0xf2 0xe7 0x40 ]
+ [ 0x28 0xe0 0xb0 0x23 ]
+ [ 0x29 0x5c 0x7c 0x00 ]
+ [ 0x2b 0xf9 0xa7 0xfa ]
+ [ 0x2e 0x63 0x43 0x00 ]
+ [ 0x33 0x2c 0x3b 0x00 ]
+ [ 0x34 0x2e 0x3a 0x00 ]
+ [ 0x35 0x2d 0x5f 0x00 ]
+ [ 0x56 0x3c 0x3e 0x00 ]
+] def
diff --git a/themes/openSUSE/keymaps/keymap.jp106.inc b/themes/openSUSE/keymaps/keymap.jp106.inc
new file mode 100644
index 0000000..0975f3d
--- /dev/null
+++ b/themes/openSUSE/keymaps/keymap.jp106.inc
@@ -0,0 +1,23 @@
+/keymap.jp106 [
+ [ 0x03 0x32 0x22 0x00 ]
+ [ 0x06 0x35 0x25 0x00 ]
+ [ 0x07 0x36 0x26 0x00 ]
+ [ 0x08 0x37 0x27 0x00 ]
+ [ 0x09 0x38 0x28 0x00 ]
+ [ 0x0a 0x39 0x29 0x00 ]
+ [ 0x0b 0x30 0x7e 0x00 ]
+ [ 0x0c 0x2d 0x3d 0x00 ]
+ [ 0x0d 0x5e 0x7e 0x00 ]
+ [ 0x1a 0x40 0x60 0x00 ]
+ [ 0x1b 0x5b 0x7b 0x00 ]
+ [ 0x27 0x3b 0x2b 0x00 ]
+ [ 0x28 0x3a 0x2a 0x00 ]
+ [ 0x29 0x1b 0x1b 0x00 ]
+ [ 0x2b 0x5d 0x7d 0x00 ]
+ [ 0x2e 0x63 0x43 0x00 ]
+ [ 0x56 0x3c 0x3e 0x00 ]
+ [ 0x59 0x5c 0x5f 0x00 ]
+ [ 0x5c 0x20 0x20 0x00 ]
+ [ 0x5e 0x20 0x20 0x00 ]
+ [ 0x7c 0x5c 0x7c 0x00 ]
+] def
diff --git a/themes/openSUSE/keymaps/keymap.la-latin1.inc b/themes/openSUSE/keymaps/keymap.la-latin1.inc
new file mode 100644
index 0000000..ea05eec
--- /dev/null
+++ b/themes/openSUSE/keymaps/keymap.la-latin1.inc
@@ -0,0 +1,22 @@
+/keymap.la-latin1 [
+ [ 0x03 0x32 0x22 0x00 ]
+ [ 0x06 0x35 0x25 0x00 ]
+ [ 0x07 0x36 0x26 0x00 ]
+ [ 0x08 0x37 0x2f 0x00 ]
+ [ 0x09 0x38 0x28 0x00 ]
+ [ 0x0a 0x39 0x29 0x00 ]
+ [ 0x0b 0x30 0x3d 0x00 ]
+ [ 0x0c 0x27 0x3f 0x5c ]
+ [ 0x0d 0xbf 0xa1 0x00 ]
+ [ 0x10 0x71 0x51 0x40 ]
+ [ 0x1b 0x2b 0x2a 0x7e ]
+ [ 0x27 0xf1 0xd1 0x00 ]
+ [ 0x28 0x7b 0x5b 0x5e ]
+ [ 0x29 0x7c 0xba 0xac ]
+ [ 0x2b 0x7d 0x5d 0x60 ]
+ [ 0x2e 0x63 0x43 0x00 ]
+ [ 0x33 0x2c 0x3b 0x00 ]
+ [ 0x34 0x2e 0x3a 0x00 ]
+ [ 0x35 0x2d 0x5f 0x00 ]
+ [ 0x56 0x3c 0x3e 0x00 ]
+] def
diff --git a/themes/openSUSE/keymaps/keymap.lt.baltic.inc b/themes/openSUSE/keymaps/keymap.lt.baltic.inc
new file mode 100644
index 0000000..a867ac3
--- /dev/null
+++ b/themes/openSUSE/keymaps/keymap.lt.baltic.inc
@@ -0,0 +1,16 @@
+/keymap.lt.baltic [
+ [ 0x02 0xe0 0xc0 0x21 ]
+ [ 0x03 0xe8 0xc8 0x40 ]
+ [ 0x04 0xe6 0xc6 0x23 ]
+ [ 0x05 0xeb 0xcb 0x24 ]
+ [ 0x06 0xe1 0xc1 0x25 ]
+ [ 0x07 0xf0 0xd0 0x5e ]
+ [ 0x08 0xf8 0xd8 0x26 ]
+ [ 0x09 0xfb 0xdb 0x2a ]
+ [ 0x0a 0x39 0x28 0x00 ]
+ [ 0x0b 0x30 0x29 0x00 ]
+ [ 0x0c 0x2d 0x5f 0x00 ]
+ [ 0x0d 0xfe 0xde 0x2b ]
+ [ 0x2e 0x63 0x43 0x00 ]
+ [ 0x56 0x3c 0x3e 0x7c ]
+] def
diff --git a/themes/openSUSE/keymaps/keymap.nl.inc b/themes/openSUSE/keymaps/keymap.nl.inc
new file mode 100644
index 0000000..bfb2e6e
--- /dev/null
+++ b/themes/openSUSE/keymaps/keymap.nl.inc
@@ -0,0 +1,29 @@
+/keymap.nl [
+ [ 0x02 0x31 0x21 0xb9 ]
+ [ 0x03 0x32 0x22 0xb2 ]
+ [ 0x04 0x33 0x23 0xb3 ]
+ [ 0x05 0x34 0x24 0xbc ]
+ [ 0x06 0x35 0x25 0xbd ]
+ [ 0x07 0x36 0x26 0xbe ]
+ [ 0x08 0x37 0x5f 0xa3 ]
+ [ 0x09 0x38 0x28 0x7b ]
+ [ 0x0a 0x39 0x29 0x7d ]
+ [ 0x0b 0x30 0x27 0x00 ]
+ [ 0x0c 0x2f 0x3f 0x5c ]
+ [ 0x0d 0xb0 0x7e 0x00 ]
+ [ 0x13 0x72 0x52 0xb6 ]
+ [ 0x18 0x6f 0x4f 0xf8 ]
+ [ 0x1a 0x00 0x00 0x5e ]
+ [ 0x1b 0x2a 0x7c 0x00 ]
+ [ 0x1f 0x73 0x53 0xdf ]
+ [ 0x27 0x2b 0xb1 0x00 ]
+ [ 0x29 0x40 0xa7 0xac ]
+ [ 0x2b 0x3c 0x3e 0x00 ]
+ [ 0x2c 0x7a 0x5a 0xab ]
+ [ 0x2d 0x78 0x58 0xbb ]
+ [ 0x32 0x6d 0x4d 0xb5 ]
+ [ 0x33 0x2c 0x3b 0x00 ]
+ [ 0x34 0x2e 0x3a 0xb7 ]
+ [ 0x35 0x2d 0x3d 0x00 ]
+ [ 0x56 0x5d 0x5b 0xa6 ]
+] def
diff --git a/themes/openSUSE/keymaps/keymap.no-latin1.inc b/themes/openSUSE/keymaps/keymap.no-latin1.inc
new file mode 100644
index 0000000..16fdd88
--- /dev/null
+++ b/themes/openSUSE/keymaps/keymap.no-latin1.inc
@@ -0,0 +1,43 @@
+/keymap.no-latin1 [
+ [ 0x02 0x31 0x21 0xa1 ]
+ [ 0x03 0x32 0x22 0x40 ]
+ [ 0x04 0x33 0x23 0xa3 ]
+ [ 0x05 0x34 0x24 0xa4 ]
+ [ 0x06 0x35 0x25 0xbd ]
+ [ 0x07 0x36 0x26 0xbe ]
+ [ 0x08 0x37 0x2f 0x7b ]
+ [ 0x09 0x38 0x28 0x5b ]
+ [ 0x0a 0x39 0x29 0x5d ]
+ [ 0x0b 0x30 0x3d 0x7d ]
+ [ 0x0c 0x2b 0x3f 0xb1 ]
+ [ 0x0d 0x5c 0x60 0x00 ]
+ [ 0x0f 0x09 0x09 0x00 ]
+ [ 0x12 0x65 0x45 0xe9 ]
+ [ 0x13 0x72 0x52 0xae ]
+ [ 0x14 0x74 0x54 0xfe ]
+ [ 0x15 0x79 0x59 0xff ]
+ [ 0x16 0x75 0x55 0xfc ]
+ [ 0x17 0x69 0x49 0xef ]
+ [ 0x18 0x6f 0x4f 0xf2 ]
+ [ 0x19 0x70 0x50 0xb6 ]
+ [ 0x1a 0xe5 0xc5 0x7d ]
+ [ 0x1b 0x7e 0x5e 0x00 ]
+ [ 0x1e 0x61 0x41 0xe1 ]
+ [ 0x1f 0x73 0x53 0xdf ]
+ [ 0x20 0x64 0x44 0xf0 ]
+ [ 0x21 0x66 0x46 0xaa ]
+ [ 0x27 0xf8 0xd8 0x7c ]
+ [ 0x28 0xe6 0xc6 0x7b ]
+ [ 0x29 0x7c 0xa7 0xa6 ]
+ [ 0x2b 0x27 0x2a 0x00 ]
+ [ 0x2d 0x78 0x58 0xd7 ]
+ [ 0x2e 0x63 0x43 0xe7 ]
+ [ 0x31 0x6e 0x4e 0xf1 ]
+ [ 0x32 0x6d 0x4d 0xb5 ]
+ [ 0x33 0x2c 0x3b 0xb8 ]
+ [ 0x34 0x2e 0x3a 0xb7 ]
+ [ 0x35 0x2d 0x5f 0xad ]
+ [ 0x39 0x20 0x20 0xa0 ]
+ [ 0x56 0x3c 0x3e 0xab ]
+ [ 0x6f 0x7f 0x7f 0x00 ]
+] def
diff --git a/themes/openSUSE/keymaps/keymap.pt-latin1.inc b/themes/openSUSE/keymaps/keymap.pt-latin1.inc
new file mode 100644
index 0000000..adea4f5
--- /dev/null
+++ b/themes/openSUSE/keymaps/keymap.pt-latin1.inc
@@ -0,0 +1,24 @@
+/keymap.pt-latin1 [
+ [ 0x03 0x32 0x22 0x40 ]
+ [ 0x04 0x33 0x23 0xa3 ]
+ [ 0x05 0x34 0x24 0xa7 ]
+ [ 0x06 0x35 0x25 0x00 ]
+ [ 0x07 0x36 0x26 0x00 ]
+ [ 0x08 0x37 0x2f 0x7b ]
+ [ 0x09 0x38 0x28 0x5b ]
+ [ 0x0a 0x39 0x29 0x5d ]
+ [ 0x0b 0x30 0x3d 0x7d ]
+ [ 0x0c 0x27 0x3f 0x5c ]
+ [ 0x0d 0xab 0xbb 0x00 ]
+ [ 0x1a 0x2b 0x2a 0x00 ]
+ [ 0x1b 0x00 0x00 0x27 ]
+ [ 0x27 0xe7 0xc7 0x00 ]
+ [ 0x28 0xba 0xaa 0x00 ]
+ [ 0x29 0x5c 0x7c 0x00 ]
+ [ 0x2b 0x00 0x00 0x7e ]
+ [ 0x2e 0x63 0x43 0x00 ]
+ [ 0x33 0x2c 0x3b 0x00 ]
+ [ 0x34 0x2e 0x3a 0x00 ]
+ [ 0x35 0x2d 0x5f 0x00 ]
+ [ 0x56 0x3c 0x3e 0x7c ]
+] def
diff --git a/themes/openSUSE/keymaps/keymap.ruwin_alt-UTF-8.inc b/themes/openSUSE/keymaps/keymap.ruwin_alt-UTF-8.inc
new file mode 100644
index 0000000..4927e94
--- /dev/null
+++ b/themes/openSUSE/keymaps/keymap.ruwin_alt-UTF-8.inc
@@ -0,0 +1,46 @@
+/keymap.ruwin_alt-UTF-8 [
+ [ 0x06 0x35 0x25 0x00 ]
+ [ 0x08 0x37 0x26 0x00 ]
+ [ 0x09 0x38 0x2a 0x00 ]
+ [ 0x0a 0x39 0x28 0x00 ]
+ [ 0x0b 0x30 0x29 0x00 ]
+ [ 0x0c 0x2d 0x5f 0x00 ]
+ [ 0x0f 0x09 0x09 0x00 ]
+ [ 0x10 0x71 0x51 0x439 ]
+ [ 0x11 0x77 0x57 0x446 ]
+ [ 0x12 0x65 0x45 0x443 ]
+ [ 0x13 0x72 0x52 0x43a ]
+ [ 0x14 0x74 0x54 0x435 ]
+ [ 0x15 0x79 0x59 0x43d ]
+ [ 0x16 0x75 0x55 0x433 ]
+ [ 0x17 0x69 0x49 0x448 ]
+ [ 0x18 0x6f 0x4f 0x449 ]
+ [ 0x19 0x70 0x50 0x437 ]
+ [ 0x1a 0x5b 0x7b 0x445 ]
+ [ 0x1b 0x5d 0x7d 0x44a ]
+ [ 0x1e 0x61 0x41 0x444 ]
+ [ 0x1f 0x73 0x53 0x44b ]
+ [ 0x20 0x64 0x44 0x432 ]
+ [ 0x21 0x66 0x46 0x430 ]
+ [ 0x22 0x67 0x47 0x43f ]
+ [ 0x23 0x68 0x48 0x440 ]
+ [ 0x24 0x6a 0x4a 0x43e ]
+ [ 0x25 0x6b 0x4b 0x43b ]
+ [ 0x26 0x6c 0x4c 0x434 ]
+ [ 0x27 0x3b 0x3a 0x436 ]
+ [ 0x28 0x27 0x22 0x44d ]
+ [ 0x29 0x60 0x7e 0x451 ]
+ [ 0x2b 0x5c 0x7c 0x2f ]
+ [ 0x2c 0x7a 0x5a 0x44f ]
+ [ 0x2d 0x78 0x58 0x447 ]
+ [ 0x2e 0x63 0x43 0x441 ]
+ [ 0x2f 0x76 0x56 0x43c ]
+ [ 0x30 0x62 0x42 0x438 ]
+ [ 0x31 0x6e 0x4e 0x442 ]
+ [ 0x32 0x6d 0x4d 0x44c ]
+ [ 0x33 0x2c 0x3c 0x431 ]
+ [ 0x34 0x2e 0x3e 0x44e ]
+ [ 0x35 0x2f 0x3f 0x2e ]
+ [ 0x56 0x3c 0x3e 0x7c ]
+ [ 0x63 0x1c 0x1c 0x00 ]
+] def
diff --git a/themes/openSUSE/keymaps/keymap.sg-latin1.inc b/themes/openSUSE/keymaps/keymap.sg-latin1.inc
new file mode 100644
index 0000000..768ae6c
--- /dev/null
+++ b/themes/openSUSE/keymaps/keymap.sg-latin1.inc
@@ -0,0 +1,27 @@
+/keymap.sg-latin1 [
+ [ 0x02 0x31 0x2b 0x7c ]
+ [ 0x03 0x32 0x22 0x40 ]
+ [ 0x04 0x33 0x2a 0x23 ]
+ [ 0x05 0x34 0xe7 0xb0 ]
+ [ 0x06 0x35 0x25 0xa7 ]
+ [ 0x07 0x36 0x26 0xac ]
+ [ 0x08 0x37 0x2f 0x7c ]
+ [ 0x09 0x38 0x28 0xa2 ]
+ [ 0x0a 0x39 0x29 0x00 ]
+ [ 0x0b 0x30 0x3d 0x00 ]
+ [ 0x0c 0x27 0x3f 0x00 ]
+ [ 0x12 0x65 0x45 0xa4 ]
+ [ 0x15 0x7a 0x5a 0x00 ]
+ [ 0x1a 0xfc 0xe8 0x5b ]
+ [ 0x1b 0x00 0x21 0x5d ]
+ [ 0x27 0xf6 0xe9 0x00 ]
+ [ 0x28 0xe4 0xe0 0x7b ]
+ [ 0x29 0xa7 0xb0 0x00 ]
+ [ 0x2b 0x24 0xa3 0x7d ]
+ [ 0x2c 0x79 0x59 0x00 ]
+ [ 0x2e 0x63 0x43 0x00 ]
+ [ 0x33 0x2c 0x3b 0x00 ]
+ [ 0x34 0x2e 0x3a 0x00 ]
+ [ 0x35 0x2d 0x5f 0x00 ]
+ [ 0x56 0x3c 0x3e 0x5c ]
+] def
diff --git a/themes/openSUSE/keymaps/keymap.sk-qwerty.inc b/themes/openSUSE/keymaps/keymap.sk-qwerty.inc
new file mode 100644
index 0000000..191ffe9
--- /dev/null
+++ b/themes/openSUSE/keymaps/keymap.sk-qwerty.inc
@@ -0,0 +1,25 @@
+/keymap.sk-qwerty [
+ [ 0x02 0x2b 0x31 0x00 ]
+ [ 0x03 0x13e 0x32 0x00 ]
+ [ 0x04 0x161 0x33 0x00 ]
+ [ 0x05 0x10d 0x34 0x00 ]
+ [ 0x06 0x165 0x35 0x00 ]
+ [ 0x07 0x17e 0x36 0x00 ]
+ [ 0x08 0xfd 0x37 0x00 ]
+ [ 0x09 0xe1 0x38 0x00 ]
+ [ 0x0a 0xed 0x39 0x00 ]
+ [ 0x0b 0xe9 0x30 0x00 ]
+ [ 0x0c 0x3d 0x25 0x2d ]
+ [ 0x0d 0x00 0x00 0x3d ]
+ [ 0x1a 0xfa 0x2f 0x5b ]
+ [ 0x1b 0xe4 0x28 0x5d ]
+ [ 0x27 0xf4 0x22 0x3b ]
+ [ 0x28 0xa7 0x21 0x27 ]
+ [ 0x29 0x00 0x00 0x60 ]
+ [ 0x2b 0x148 0x29 0x5c ]
+ [ 0x2e 0x63 0x43 0x00 ]
+ [ 0x33 0x2c 0x3f 0x00 ]
+ [ 0x34 0x2e 0x3a 0x00 ]
+ [ 0x35 0x2d 0x5f 0x2f ]
+ [ 0x56 0x7c 0x5c 0x3c ]
+] def
diff --git a/themes/openSUSE/keymaps/keymap.sk-qwertz.inc b/themes/openSUSE/keymaps/keymap.sk-qwertz.inc
new file mode 100644
index 0000000..281aea0
--- /dev/null
+++ b/themes/openSUSE/keymaps/keymap.sk-qwertz.inc
@@ -0,0 +1,27 @@
+/keymap.sk-qwertz [
+ [ 0x02 0x2b 0x31 0x00 ]
+ [ 0x03 0x13e 0x32 0x00 ]
+ [ 0x04 0x161 0x33 0x00 ]
+ [ 0x05 0x10d 0x34 0x00 ]
+ [ 0x06 0x165 0x35 0x00 ]
+ [ 0x07 0x17e 0x36 0x00 ]
+ [ 0x08 0xfd 0x37 0x00 ]
+ [ 0x09 0xe1 0x38 0x00 ]
+ [ 0x0a 0xed 0x39 0x00 ]
+ [ 0x0b 0xe9 0x30 0x00 ]
+ [ 0x0c 0x3d 0x25 0x2d ]
+ [ 0x0d 0x00 0x00 0x3d ]
+ [ 0x15 0x7a 0x5a 0x00 ]
+ [ 0x1a 0xfa 0x2f 0x5b ]
+ [ 0x1b 0xe4 0x28 0x5d ]
+ [ 0x27 0xf4 0x22 0x3b ]
+ [ 0x28 0xa7 0x21 0x27 ]
+ [ 0x29 0x00 0x00 0x60 ]
+ [ 0x2b 0x148 0x29 0x5c ]
+ [ 0x2c 0x79 0x59 0x00 ]
+ [ 0x2e 0x63 0x43 0x00 ]
+ [ 0x33 0x2c 0x3f 0x00 ]
+ [ 0x34 0x2e 0x3a 0x00 ]
+ [ 0x35 0x2d 0x5f 0x2f ]
+ [ 0x56 0x5c 0x7c 0x3c ]
+] def
diff --git a/themes/openSUSE/keymaps/keymap.slovene.inc b/themes/openSUSE/keymaps/keymap.slovene.inc
new file mode 100644
index 0000000..305f686
--- /dev/null
+++ b/themes/openSUSE/keymaps/keymap.slovene.inc
@@ -0,0 +1,38 @@
+/keymap.slovene [
+ [ 0x02 0x31 0x21 0x7e ]
+ [ 0x03 0x32 0x22 0x2c7 ]
+ [ 0x04 0x33 0x23 0x5e ]
+ [ 0x05 0x34 0x24 0x2d8 ]
+ [ 0x06 0x35 0x25 0xb0 ]
+ [ 0x07 0x36 0x26 0x2db ]
+ [ 0x08 0x37 0x2f 0x60 ]
+ [ 0x09 0x38 0x28 0x2d9 ]
+ [ 0x0a 0x39 0x29 0xb4 ]
+ [ 0x0b 0x30 0x3d 0x2dd ]
+ [ 0x0c 0x27 0x3f 0xa8 ]
+ [ 0x0d 0x2b 0x2a 0xb8 ]
+ [ 0x0f 0x09 0x09 0x00 ]
+ [ 0x10 0x71 0x51 0x5c ]
+ [ 0x11 0x77 0x57 0x7c ]
+ [ 0x15 0x7a 0x5a 0x00 ]
+ [ 0x1a 0x161 0x160 0xf7 ]
+ [ 0x1b 0x111 0x110 0xd7 ]
+ [ 0x21 0x66 0x46 0x5b ]
+ [ 0x22 0x67 0x47 0x5d ]
+ [ 0x25 0x6b 0x4b 0x142 ]
+ [ 0x26 0x6c 0x4c 0x141 ]
+ [ 0x27 0x10d 0x10c 0x00 ]
+ [ 0x28 0x107 0x106 0xdf ]
+ [ 0x29 0xb8 0xa8 0x00 ]
+ [ 0x2b 0x17e 0x17d 0xa4 ]
+ [ 0x2c 0x79 0x59 0x00 ]
+ [ 0x2e 0x63 0x43 0x00 ]
+ [ 0x2f 0x76 0x56 0x40 ]
+ [ 0x30 0x62 0x42 0x7b ]
+ [ 0x31 0x6e 0x4e 0x7d ]
+ [ 0x32 0x6d 0x4d 0xa7 ]
+ [ 0x33 0x2c 0x3b 0x00 ]
+ [ 0x34 0x2e 0x3a 0x00 ]
+ [ 0x35 0x2d 0x5f 0x00 ]
+ [ 0x56 0x3c 0x3e 0x00 ]
+] def
diff --git a/themes/openSUSE/keymaps/keymap.sr-cy.inc b/themes/openSUSE/keymaps/keymap.sr-cy.inc
new file mode 100644
index 0000000..23ad85f
--- /dev/null
+++ b/themes/openSUSE/keymaps/keymap.sr-cy.inc
@@ -0,0 +1,43 @@
+/keymap.sr-cy [
+ [ 0x06 0x35 0x25 0x00 ]
+ [ 0x08 0x37 0x26 0x00 ]
+ [ 0x09 0x38 0x2a 0x00 ]
+ [ 0x0a 0x39 0x28 0x00 ]
+ [ 0x0b 0x30 0x29 0x00 ]
+ [ 0x0c 0x2d 0x5f 0x27 ]
+ [ 0x0e 0x08 0x08 0x00 ]
+ [ 0x0f 0x09 0x09 0x00 ]
+ [ 0x10 0x71 0x51 0xf9 ]
+ [ 0x11 0x77 0x57 0xfa ]
+ [ 0x12 0x65 0x45 0xd5 ]
+ [ 0x13 0x72 0x52 0xe0 ]
+ [ 0x14 0x74 0x54 0xe2 ]
+ [ 0x15 0x79 0x59 0xd7 ]
+ [ 0x16 0x75 0x55 0xe3 ]
+ [ 0x17 0x69 0x49 0xd8 ]
+ [ 0x18 0x6f 0x4f 0xde ]
+ [ 0x19 0x70 0x50 0xdf ]
+ [ 0x1a 0x5b 0x7b 0xe8 ]
+ [ 0x1b 0x5d 0x7d 0x5b ]
+ [ 0x1e 0x61 0x41 0xd0 ]
+ [ 0x1f 0x73 0x53 0xe1 ]
+ [ 0x20 0x64 0x44 0xd4 ]
+ [ 0x21 0x66 0x46 0xe4 ]
+ [ 0x22 0x67 0x47 0xd3 ]
+ [ 0x23 0x68 0x48 0xe5 ]
+ [ 0x24 0x6a 0x4a 0xf8 ]
+ [ 0x25 0x6b 0x4b 0xda ]
+ [ 0x26 0x6c 0x4c 0xdb ]
+ [ 0x27 0x3b 0x3a 0xe7 ]
+ [ 0x28 0x27 0x22 0xfb ]
+ [ 0x2b 0x5c 0x7c 0x2d ]
+ [ 0x2c 0x7a 0x5a 0xf2 ]
+ [ 0x2d 0x78 0x58 0xff ]
+ [ 0x2e 0x63 0x43 0xe6 ]
+ [ 0x2f 0x76 0x56 0xd2 ]
+ [ 0x30 0x62 0x42 0xd1 ]
+ [ 0x31 0x6e 0x4e 0xdd ]
+ [ 0x32 0x6d 0x4d 0xdc ]
+ [ 0x35 0x2f 0x3f 0xd6 ]
+ [ 0x56 0x3c 0x3e 0x7c ]
+] def
diff --git a/themes/openSUSE/keymaps/keymap.sv-latin1.inc b/themes/openSUSE/keymaps/keymap.sv-latin1.inc
new file mode 100644
index 0000000..196acf8
--- /dev/null
+++ b/themes/openSUSE/keymaps/keymap.sv-latin1.inc
@@ -0,0 +1,23 @@
+/keymap.sv-latin1 [
+ [ 0x03 0x32 0x22 0x40 ]
+ [ 0x04 0x33 0x23 0xa3 ]
+ [ 0x05 0x34 0xe7 0x24 ]
+ [ 0x06 0x35 0x25 0x00 ]
+ [ 0x07 0x36 0x26 0xac ]
+ [ 0x08 0x37 0x2f 0x7b ]
+ [ 0x09 0x38 0x28 0x5b ]
+ [ 0x0a 0x39 0x29 0x5d ]
+ [ 0x0b 0x30 0x3d 0x7d ]
+ [ 0x0c 0x2b 0x3f 0x5c ]
+ [ 0x1a 0xe5 0xc5 0x00 ]
+ [ 0x1b 0x00 0x5e 0x7e ]
+ [ 0x27 0xf6 0xd6 0x00 ]
+ [ 0x28 0xe4 0xc4 0x00 ]
+ [ 0x29 0xa7 0xb0 0xbd ]
+ [ 0x2b 0x27 0x2a 0x00 ]
+ [ 0x2e 0x63 0x43 0x00 ]
+ [ 0x33 0x2c 0x3b 0x00 ]
+ [ 0x34 0x2e 0x3a 0x00 ]
+ [ 0x35 0x2d 0x5f 0x00 ]
+ [ 0x56 0x3c 0x3e 0x7c ]
+] def
diff --git a/themes/openSUSE/keymaps/keymap.tj.inc b/themes/openSUSE/keymaps/keymap.tj.inc
new file mode 100644
index 0000000..2c9c3b0
--- /dev/null
+++ b/themes/openSUSE/keymaps/keymap.tj.inc
@@ -0,0 +1,46 @@
+/keymap.tj [
+ [ 0x06 0x35 0x25 0x00 ]
+ [ 0x08 0x37 0x26 0x00 ]
+ [ 0x09 0x38 0x2a 0x00 ]
+ [ 0x0a 0x39 0x28 0x00 ]
+ [ 0x0b 0x30 0x29 0x00 ]
+ [ 0x0c 0x2d 0x5f 0x00 ]
+ [ 0x0f 0x09 0x09 0x00 ]
+ [ 0x10 0x71 0x51 0x439 ]
+ [ 0x11 0x77 0x57 0x446 ]
+ [ 0x12 0x65 0x45 0x443 ]
+ [ 0x13 0x72 0x52 0x43a ]
+ [ 0x14 0x74 0x54 0x435 ]
+ [ 0x15 0x79 0x59 0x43d ]
+ [ 0x16 0x75 0x55 0x433 ]
+ [ 0x17 0x69 0x49 0x448 ]
+ [ 0x18 0x6f 0x4f 0x449 ]
+ [ 0x19 0x70 0x50 0x437 ]
+ [ 0x1a 0x5b 0x7b 0x445 ]
+ [ 0x1b 0x5d 0x7d 0x44a ]
+ [ 0x1e 0x61 0x41 0x444 ]
+ [ 0x1f 0x73 0x53 0x44b ]
+ [ 0x20 0x64 0x44 0x432 ]
+ [ 0x21 0x66 0x46 0x430 ]
+ [ 0x22 0x67 0x47 0x43f ]
+ [ 0x23 0x68 0x48 0x440 ]
+ [ 0x24 0x6a 0x4a 0x43e ]
+ [ 0x25 0x6b 0x4b 0x43b ]
+ [ 0x26 0x6c 0x4c 0x434 ]
+ [ 0x27 0x3b 0x3a 0x436 ]
+ [ 0x28 0x27 0x22 0x44d ]
+ [ 0x29 0x60 0x7e 0x451 ]
+ [ 0x2b 0x5c 0x7c 0x2f ]
+ [ 0x2c 0x7a 0x5a 0x44f ]
+ [ 0x2d 0x78 0x58 0x447 ]
+ [ 0x2e 0x63 0x43 0x441 ]
+ [ 0x2f 0x76 0x56 0x43c ]
+ [ 0x30 0x62 0x42 0x438 ]
+ [ 0x31 0x6e 0x4e 0x442 ]
+ [ 0x32 0x6d 0x4d 0x44c ]
+ [ 0x33 0x2c 0x3c 0x431 ]
+ [ 0x34 0x2e 0x3e 0x44e ]
+ [ 0x35 0x2f 0x3f 0x2e ]
+ [ 0x56 0x3c 0x3e 0x7c ]
+ [ 0x63 0x1c 0x1c 0x00 ]
+] def
diff --git a/themes/openSUSE/keymaps/keymap.trq.inc b/themes/openSUSE/keymaps/keymap.trq.inc
new file mode 100644
index 0000000..fc9af9e
--- /dev/null
+++ b/themes/openSUSE/keymaps/keymap.trq.inc
@@ -0,0 +1,30 @@
+/keymap.trq [
+ [ 0x03 0x32 0x27 0xa3 ]
+ [ 0x04 0x33 0x5e 0x23 ]
+ [ 0x05 0x34 0x2b 0x24 ]
+ [ 0x06 0x35 0x25 0xbd ]
+ [ 0x07 0x36 0x26 0x00 ]
+ [ 0x08 0x37 0x2f 0x7b ]
+ [ 0x09 0x38 0x28 0x5b ]
+ [ 0x0a 0x39 0x29 0x5d ]
+ [ 0x0b 0x30 0x3d 0x7d ]
+ [ 0x0c 0x2a 0x3f 0x5c ]
+ [ 0x0d 0x2d 0x5f 0x00 ]
+ [ 0x10 0x71 0x51 0x40 ]
+ [ 0x12 0x65 0x45 0x20ac ]
+ [ 0x16 0x75 0x55 0xfb ]
+ [ 0x17 0x131 0x49 0xee ]
+ [ 0x18 0x6f 0x4f 0xf4 ]
+ [ 0x1a 0x11f 0x11e 0xa8 ]
+ [ 0x1b 0xfc 0xdc 0x7e ]
+ [ 0x1e 0x61 0x41 0xe2 ]
+ [ 0x27 0x15f 0x15e 0xb4 ]
+ [ 0x28 0x69 0x130 0x00 ]
+ [ 0x29 0x22 0xe9 0x00 ]
+ [ 0x2b 0x2c 0x3b 0x60 ]
+ [ 0x2e 0x63 0x43 0x00 ]
+ [ 0x33 0xf6 0xd6 0x00 ]
+ [ 0x34 0xe7 0xc7 0x00 ]
+ [ 0x35 0x2e 0x3a 0x00 ]
+ [ 0x56 0x3c 0x3e 0x7c ]
+] def
diff --git a/themes/openSUSE/keymaps/keymap.ua.inc b/themes/openSUSE/keymaps/keymap.ua.inc
new file mode 100644
index 0000000..04edc00
--- /dev/null
+++ b/themes/openSUSE/keymaps/keymap.ua.inc
@@ -0,0 +1,6 @@
+/keymap.ua [
+ [ 0x06 0x35 0x25 0x00 ]
+ [ 0x0e 0x08 0x7f 0x00 ]
+ [ 0x2e 0x63 0x43 0x00 ]
+ [ 0x56 0x3c 0x3e 0x7c ]
+] def
diff --git a/themes/openSUSE/keymaps/keymap.uk.inc b/themes/openSUSE/keymaps/keymap.uk.inc
new file mode 100644
index 0000000..da286c5
--- /dev/null
+++ b/themes/openSUSE/keymaps/keymap.uk.inc
@@ -0,0 +1,10 @@
+/keymap.uk [
+ [ 0x03 0x32 0x22 0x40 ]
+ [ 0x04 0x33 0xa3 0x00 ]
+ [ 0x06 0x35 0x25 0x00 ]
+ [ 0x28 0x27 0x40 0x00 ]
+ [ 0x29 0x60 0xac 0x7c ]
+ [ 0x2b 0x23 0x7e 0x00 ]
+ [ 0x2e 0x63 0x43 0x00 ]
+ [ 0x56 0x5c 0x7c 0x00 ]
+] def
diff --git a/themes/openSUSE/penguin_src/Makefile b/themes/openSUSE/penguin_src/Makefile
new file mode 100644
index 0000000..226133c
--- /dev/null
+++ b/themes/openSUSE/penguin_src/Makefile
@@ -0,0 +1,12 @@
+all: high
+
+high:
+ pngtopnm -background black pback.png | cjpeg -optimize -quality 95 >pback.jpg
+ pngtopnm -background black panim.png | cjpeg -optimize -quality 95 >panim.jpg
+ pngtopnm -alpha panim.png | pgmtoppm white | cjpeg -optimize -quality 95 >panim_a.jpg
+
+low:
+ pngtopnm -background black pback.png | cjpeg -optimize -quality 85 >pback.jpg
+ pngtopnm -background black panim.png | cjpeg -optimize -quality 85 >panim.jpg
+ pngtopnm -alpha panim.png | pgmtoppm white | cjpeg -optimize -quality 85 >panim_a.jpg
+
diff --git a/themes/openSUSE/penguin_src/panim.png b/themes/openSUSE/penguin_src/panim.png
new file mode 100644
index 0000000..106a7a7
--- /dev/null
+++ b/themes/openSUSE/penguin_src/panim.png
Binary files differ
diff --git a/themes/openSUSE/penguin_src/pback.png b/themes/openSUSE/penguin_src/pback.png
new file mode 100644
index 0000000..fe45c08
--- /dev/null
+++ b/themes/openSUSE/penguin_src/pback.png
Binary files differ
diff --git a/themes/openSUSE/penguin_src/penguins.xcf b/themes/openSUSE/penguin_src/penguins.xcf
new file mode 100755
index 0000000..32ad79b
--- /dev/null
+++ b/themes/openSUSE/penguin_src/penguins.xcf
Binary files differ
diff --git a/themes/openSUSE/po/Makefile b/themes/openSUSE/po/Makefile
new file mode 100644
index 0000000..b120b47
--- /dev/null
+++ b/themes/openSUSE/po/Makefile
@@ -0,0 +1,19 @@
+POFILES = $(wildcard *.po)
+TEXTS = $(addsuffix .tr,$(basename $(wildcard *.po)))
+
+PRODUCT = $(shell perl -ne 'print if s/^product=//' ../config)
+
+all: .ready
+
+.ready: text.inc $(TEXTS)
+ @touch .ready
+
+%.tr: %.po text.inc
+ bin/po2txt --product='$(PRODUCT)' $< >$@
+
+# en.tr uses msgids from bootloader.pot
+en.tr text.inc: bootloader.pot
+ bin/po2txt --product='$(PRODUCT)' $< >en.tr
+
+clean:
+ rm -f .ready text.inc *.tr *~ talk/*~
diff --git a/themes/openSUSE/po/README b/themes/openSUSE/po/README
new file mode 100644
index 0000000..a27800a
--- /dev/null
+++ b/themes/openSUSE/po/README
@@ -0,0 +1,24 @@
+boot loader translations
+------------------------
+
+o How do I add a new text?
+
+ - Use the gfxboot/po/bin/add_text script; example:
+
+ add_text help 'Help'
+
+ This will define txt_help; the 'txt_' prefix is optional.
+
+o How do I remove a text that's no longer needed?
+
+ - Use the gfxboot/po/bin/rm_text script; example:
+
+ rm_text help
+
+ This will remove txt_help; the removed lines are stored in the 'old'
+ directory.
+
+o How do I add a new language?
+
+ - Copy bootloader.pot to <lang>.po. Remember to get <lang>.po translated.
+
diff --git a/themes/openSUSE/po/af.po b/themes/openSUSE/po/af.po
new file mode 100644
index 0000000..cad7f8d
--- /dev/null
+++ b/themes/openSUSE/po/af.po
@@ -0,0 +1,440 @@
+# LANGUAGE translations for boot loader
+# Copyright (C) 2005 SUSE Linux GmbH
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: bootloader\n"
+"POT-Creation-Date: 2006-10-26 15:50+0200\n"
+"PO-Revision-Date: 2006-11-03 14:26\n"
+"Last-Translator: Novell Language <language@novell.com>\n"
+"Language-Team: Novell Language <language@novell.com>\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"
+
+#. ok button label
+#. txt_ok
+msgid "OK"
+msgstr "Goed"
+
+#. cancel button label
+#. txt_cancel
+msgid "Cancel"
+msgstr "Kanselleer"
+
+#. reboot button label
+#. txt_reboot
+msgid "Reboot"
+msgstr "Herselflaai"
+
+#. continue button label
+#. txt_continue
+msgid "Continue"
+msgstr "Gaan voort"
+
+#. txt_install
+msgid "Installation"
+msgstr "Installasie"
+
+#. txt_safe_linux
+msgid "Linux--Safe Settings"
+msgstr "Linux--veilige instellings"
+
+#. txt_boot_harddisk
+msgid "Boot from Hard Disk"
+msgstr "Selflaai vanaf harde skyf"
+
+#. txt_rescue
+msgid "Rescue System"
+msgstr "Reddingstelsel"
+
+#. txt_memtest
+msgid "Memory Test"
+msgstr "Geheuetoets"
+
+#. txt_bootoptions
+msgid "Boot Options"
+msgstr "Selflaai-opsies"
+
+#. window title for exit dialog
+#. txt_exit_title (see txt_exit_dialog)
+msgid "Exiting..."
+msgstr "Hersien van ..."
+
+#. txt_exit_dialog
+msgid ""
+"You are leaving the graphical boot menu and\n"
+"starting the text mode interface."
+msgstr ""
+"U verlaat nou die grafiese selflaaikieslys en\n"
+" begin die teksmoduskoppelvlak."
+
+#. txt_help
+msgid "Help"
+msgstr "Help"
+
+#. window title for kernel loading (see txt_load_kernel)
+#. txt_load_kernel_title
+msgid "Starting..."
+msgstr "Begin met ..."
+
+#. Keep the three newlines!
+#. txt_load_kernel
+msgid ""
+"Loading Linux Kernel\n"
+"\n"
+"\n"
+msgstr ""
+"Laai van Linux Kernel\n"
+"\n"
+" \n"
+
+#. Keep the three newlines!
+#. txt_load_memtest
+msgid ""
+"Loading memtest86\n"
+"\n"
+"\n"
+msgstr ""
+"Laai van memtest86\n"
+"\n"
+" \n"
+
+#. info box title
+#. txt_info_title
+msgid "Boot Loader"
+msgstr "Selflaaiprogram"
+
+#. error box title
+#. txt_error_title
+msgid "I/O Error"
+msgstr "I/O-fout"
+
+#. boot disk change dialog title
+#. txt_change_disk_title
+msgid "Change Boot Disk"
+msgstr "Wysig selflaaiskyf"
+
+#. txt_insert_disk
+#, c-format
+msgid "Insert boot disk %u."
+msgstr "Sit selflaaiskyf %u in."
+
+#. txt_insert_disk2
+#, c-format
+msgid ""
+"This is boot disk %u.\n"
+"Insert boot disk %u."
+msgstr ""
+"Dit is selflaaiskyf %u.\n"
+"Sit selflaaiskyf %u in."
+
+#. <product> is e.g. SuSE Linux X.Y or Enterprise Server Z
+#. txt_insert_disk3
+#, c-format
+msgid ""
+"This is not a <product> boot disk.\n"
+"Insert boot disk %u."
+msgstr ""
+"Dit is nie 'n <product> selflaaiskyf nie.\n"
+"Sit selflaaiskyf %u in."
+
+#. password dialog title
+#. txt_password_title
+msgid "Password"
+msgstr "Wagwoord"
+
+#. txt_dud_ready
+msgid "Get your driver update floppy ready."
+msgstr "Kry u aandrywerbywerkingskyf gereed."
+
+#. power off dialog title
+#. txt_power_off_title
+msgid "Power Off"
+msgstr "Krag af"
+
+#. txt_power_off
+msgid "Halt the system now?"
+msgstr "Halt die stelsel nou?"
+
+#. menu entry for hard disk installation
+#. txt_harddisk
+msgid "Hard Disk"
+msgstr "Harde skyf"
+
+#. dialog title for hard disk installation
+#. txt_harddisk_title
+msgid "Hard Disk Installation"
+msgstr "Hardeskyfinstallasie"
+
+#. txt_hd_diskdevice
+msgid "Disk Device (Scans All Disks If Empty)\n"
+msgstr "Skyftoestel (skandeer alle skywe indien leeg)\n"
+
+#. txt_directory
+msgid "Directory\n"
+msgstr "Gids\n"
+
+#. dialog title for ftp installation
+#. txt_ftp_title
+msgid "FTP Installation"
+msgstr "FTP-installasie"
+
+#. txt_server
+msgid "Server\n"
+msgstr "Bediener\n"
+
+#. txt_password
+msgid "Password\n"
+msgstr "Wagwoord\n"
+
+#. label for ftp user input
+#. txt_user1
+msgid "User (Anonymous Login If Empty)\n"
+msgstr "Gebruiker (naamlose aantekening indien leeg)\n"
+
+#. dialog title for nfs installation
+#. txt_nfs_title
+msgid "NFS Installation"
+msgstr "NFS-installasie"
+
+#. label for smb user input
+#. txt_user2
+msgid "User (Uses \"guest\" If Empty)\n"
+msgstr "Gebruiker (gebruik \"gas\" indien leeg)\n"
+
+#. dialog title for smb installation
+#. txt_smb_title
+msgid "SMB (Windows Share) Installation"
+msgstr "SMB (Windows-gedeelde) -installasie"
+
+#. dialog title for http installation
+#. txt_http_title
+msgid "HTTP Installation"
+msgstr "HTTP-installasie"
+
+#. 'driver' as in '(hardware) driver update'
+#. txt_driver_update
+msgid "Driver"
+msgstr "Aandrywer"
+
+#. as in Windows Authentication Domain
+#. txt_domain
+msgid "Domain\n"
+msgstr "Domein\n"
+
+#. button label for other/more options
+#. txt_other_options
+msgid "Other Options"
+msgstr "Ander opsies"
+
+#. label for language selection
+#. txt_language
+msgid "Language"
+msgstr "Taal"
+
+#. txt_yes
+msgid "Yes"
+msgstr "Ja"
+
+#. txt_no
+msgid "No"
+msgstr "Nee"
+
+#. menu item for selecting a file
+#. txt_file
+msgid "File"
+msgstr "Lêer"
+
+#. input label: share as in "Windows share" (SMB)
+#. txt_share
+msgid "Share\n"
+msgstr "Deel \n"
+
+#. txt_zenAuto
+msgid "Automatic Mode"
+msgstr "Outomatiese modus"
+
+#. txt_zenManual
+msgid "Manual Mode"
+msgstr "Met-die-hand modus"
+
+#. txt_zenConfig
+msgid "Configure Parameters on ZEN Partition"
+msgstr "Konfigureer parameters op ZEN-partisie"
+
+#. txt_zenInstall
+msgid "Install or Update ZEN Partition"
+msgstr "Installeer of werk ZEN-partisie by"
+
+#. txt_zenLilo
+msgid "Reinstall ZEN Partition Boot Loader"
+msgstr "Herinstalleer ZEN-partisieselflaaiprogram"
+
+#. txt_zenDisable
+msgid "Disable ZEN Partition"
+msgstr "Versper ZEN-partisie"
+
+#. txt_zenEnable
+msgid "Enable ZEN Partition"
+msgstr "Ontsper ZEN-partisie"
+
+#. video mode menu item
+#. txt_text_mode
+msgid "Text Mode"
+msgstr "Teksmodus"
+
+#. menu item, like 'memory test'
+#. txt_firmware
+msgid "Firmware Test"
+msgstr "Firmatuurtoets"
+
+#. txt_dud_file_msg
+msgid ""
+"To load driver updates directly from CD-ROM,\n"
+"enter the driver update file names (separated\n"
+"by commas ',') here:\n"
+msgstr ""
+"Om aandrywerbywerkings direk vanaf CD-ROM te laai,\n"
+"voer die aandrywerbywerklêername(geskei \n"
+" deur kommas ',') hier in:\n"
+
+#. install source menu title
+#. ** please keep it really short (comparable to the english text) **
+#. txt_install_source
+msgid "Source"
+msgstr "Bron"
+
+#. video mode/display size menu title
+#. ** please keep it really short (comparable to the english text) **
+#. txt_video_mode
+msgid "Video Mode"
+msgstr ""
+
+#. driver update dialog title
+#. -> txt_dud_file_msg
+#. txt_driver_update2
+msgid "Driver Update"
+msgstr ""
+
+#. menu label for selecting (cpu) architecture
+#. like i386, x86-64, ppc
+#. ** please keep it really short (comparable to the english text) **
+#. txt_arch
+msgid "Arch"
+msgstr "Arg."
+
+#. menu label for selecting some (linux) kernel variant
+#. ** please keep it really short (comparable to the english text) **
+#. txt_kernel
+msgid "Kernel"
+msgstr ""
+
+#. menu item for kernel variant (cf. txt_kernel)
+#. txt_kernel_default
+msgid "Default"
+msgstr ""
+
+#. menu item for kernel variant (cf. txt_kernel)
+#. -> like in txt_safe_linux
+#. txt_kernel_safe
+msgid "Safe Settings"
+msgstr ""
+
+#. menu item for kernel variant (cf. txt_kernel)
+#. -> similar to txt_noacpi_install
+#. txt_kernel_noacpi
+msgid "No ACPI"
+msgstr ""
+
+#. menu item for kernel variant (cf. txt_kernel)
+#. -> similar to txt_nolapic_install
+#. txt_kernel_nolapic
+msgid "No Local APIC"
+msgstr ""
+
+#. main menu: start in system repair mode
+#. txt_repain_system
+msgid "Repair Installed System"
+msgstr ""
+
+#. menu item
+#. txt_mediacheck
+msgid "Check Installation Media"
+msgstr ""
+
+#. menu item for keyboard layout (please keep it short)
+#. txt_keyboard
+msgid "Keyboard"
+msgstr "Sleutelbord"
+
+#. menu title
+#. txt_dud_download
+msgid "Download Driver Update"
+msgstr ""
+
+#. input label
+#. txt_dud_enter_url
+msgid "Enter Driver Update URL\n"
+msgstr ""
+
+#. menu item
+#. txt_http_proxy
+msgid "HTTP Proxy"
+msgstr ""
+
+#. menu item
+#. txt_network_config
+msgid "Network Config"
+msgstr ""
+
+#. menu item
+#. txt_no_network
+msgid "No Network"
+msgstr ""
+
+#. short menu item for manual network config (NOT some kind of manual)
+#. txt_manual_network
+msgid "Manual"
+msgstr ""
+
+#. dialog title for manual network config
+#. txt_manual_network_title
+msgid "Manual Network Config"
+msgstr ""
+
+#. label for ip address
+#. txt_host_ip
+msgid "Host IP\n"
+msgstr ""
+
+#. label for gateway ip
+#. txt_gateway_ip
+msgid "Gateway\n"
+msgstr ""
+
+#. label for dns domain name (like 'opensuse.org')
+#. txt_domain_name
+msgid "Domain Name\n"
+msgstr ""
+
+#. label for nameserver list
+#. txt_nameservers
+msgid "Nameservers (separated by ',')\n"
+msgstr ""
+
+#. label for netmask; 'Host IP' refers to label txt_host_ip above
+#. txt_netmask
+msgid "Netmask\n(or use '/N' notation with Host IP)\n"
+msgstr ""
+
+#. label for Live CD installation
+#. txt_live_kde
+msgid "openSUSE Live (KDE)"
+msgstr ""
+
+#. label for Live CD installation
+#. txt_live_gnome
+msgid "openSUSE Live (GNOME)"
+msgstr ""
diff --git a/themes/openSUSE/po/ar.po b/themes/openSUSE/po/ar.po
new file mode 100644
index 0000000..663de3d
--- /dev/null
+++ b/themes/openSUSE/po/ar.po
@@ -0,0 +1,440 @@
+# LANGUAGE translations for boot loader
+# Copyright (C) 2005 SUSE Linux GmbH
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: bootloader\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2006-05-18 10:26+0200\n"
+"PO-Revision-Date: 2006-10-26 14:38:25+CEST\n"
+"Last-Translator: Novell Language <language@novell.com>\n"
+"Language-Team: Novell Language <language@novell.com>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. ok button label
+#. txt_ok
+msgid "OK"
+msgstr "موافق"
+
+#. cancel button label
+#. txt_cancel
+msgid "Cancel"
+msgstr "إلغاء"
+
+#. reboot button label
+#. txt_reboot
+msgid "Reboot"
+msgstr "إعادة تشغيل"
+
+#. continue button label
+#. txt_continue
+msgid "Continue"
+msgstr "متابعة"
+
+#. txt_install
+msgid "Installation"
+msgstr "التثبيت"
+
+#. txt_safe_linux
+msgid "Linux--Safe Settings"
+msgstr "Linux--إعدادات آمنة"
+
+#. txt_boot_harddisk
+msgid "Boot from Hard Disk"
+msgstr "تشغيل من القرص الصلب"
+
+#. txt_rescue
+msgid "Rescue System"
+msgstr "نظام الإنقاذ"
+
+#. txt_memtest
+msgid "Memory Test"
+msgstr "اختبار الذاكرة"
+
+#. txt_bootoptions
+msgid "Boot Options"
+msgstr "خيارات التشغيل"
+
+#. window title for exit dialog
+#. txt_exit_title (see txt_exit_dialog)
+msgid "Exiting..."
+msgstr "خروج..."
+
+#. txt_exit_dialog
+msgid ""
+"You are leaving the graphical boot menu and\n"
+"starting the text mode interface."
+msgstr ""
+"تتم الآن مغادرة قائمة التشغيل الرسومية و\n"
+"بدء تشغيل واجهة وضع النص."
+
+#. txt_help
+msgid "Help"
+msgstr "تعليمات"
+
+#. window title for kernel loading (see txt_load_kernel)
+#. txt_load_kernel_title
+msgid "Starting..."
+msgstr "بدء..."
+
+#. Keep the three newlines!
+#. txt_load_kernel
+msgid ""
+"Loading Linux Kernel\n"
+"\n"
+"\n"
+msgstr ""
+"تحميل Linux Kernel\n"
+"\n"
+" \n"
+
+#. Keep the three newlines!
+#. txt_load_memtest
+msgid ""
+"Loading memtest86\n"
+"\n"
+"\n"
+msgstr ""
+"تحميل memtest86\n"
+"\n"
+" \n"
+
+#. info box title
+#. txt_info_title
+msgid "Boot Loader"
+msgstr "أداة تحميل التشغيل"
+
+#. error box title
+#. txt_error_title
+msgid "I/O Error"
+msgstr "خطأ في المدخلات/المخرجات"
+
+#. boot disk change dialog title
+#. txt_change_disk_title
+msgid "Change Boot Disk"
+msgstr "تغيير قرص التشغيل"
+
+#. txt_insert_disk
+#, c-format
+msgid "Insert boot disk %u."
+msgstr "أدخل قرص التشغيل %u."
+
+#. txt_insert_disk2
+#, c-format
+msgid ""
+"This is boot disk %u.\n"
+"Insert boot disk %u."
+msgstr ""
+"هذا هو قرص التشغيل %u.\n"
+"أدخل قرص التشغيل %u."
+
+#. <product> is e.g. SuSE Linux X.Y or Enterprise Server Z
+#. txt_insert_disk3
+#, c-format
+msgid ""
+"This is not a <product> boot disk.\n"
+"Insert boot disk %u."
+msgstr ""
+"هذا ليس <product>قرص تشغيل.\n"
+"أدخل قرص التشغيل %u."
+
+#. password dialog title
+#. txt_password_title
+msgid "Password"
+msgstr "كلمة السر"
+
+#. txt_dud_ready
+msgid "Get your driver update floppy ready."
+msgstr "قم بتحضير القرص المرن لتحديث برنامج التشغيل بحيث يكون جاهزًا للاستخدام."
+
+#. power off dialog title
+#. txt_power_off_title
+msgid "Power Off"
+msgstr "إيقاف التشغيل"
+
+#. txt_power_off
+msgid "Halt the system now?"
+msgstr "هل تريد إيقاف النظام الآن؟"
+
+#. menu entry for hard disk installation
+#. txt_harddisk
+msgid "Hard Disk"
+msgstr "القرص الصلب"
+
+#. dialog title for hard disk installation
+#. txt_harddisk_title
+msgid "Hard Disk Installation"
+msgstr "تثبيت القرص الصلب"
+
+#. txt_hd_diskdevice
+msgid "Disk Device (Scans All Disks If Empty)\n"
+msgstr "جهاز القرص (مسح كافة الأقراص إذا كان فارغًا)\n"
+
+#. txt_directory
+msgid "Directory\n"
+msgstr "الدليل\n"
+
+#. dialog title for ftp installation
+#. txt_ftp_title
+msgid "FTP Installation"
+msgstr "تثبيت FTP"
+
+#. txt_server
+msgid "Server\n"
+msgstr "الخادم\n"
+
+#. txt_password
+msgid "Password\n"
+msgstr "كلمة السر\n"
+
+#. label for ftp user input
+#. txt_user1
+msgid "User (Anonymous Login If Empty)\n"
+msgstr "المستخدم (تسجيل دخول مجهول إذا كان الحقل فارغًا)\n"
+
+#. dialog title for nfs installation
+#. txt_nfs_title
+msgid "NFS Installation"
+msgstr "تثبيت NFS"
+
+#. label for smb user input
+#. txt_user2
+msgid "User (Uses \"guest\" If Empty)\n"
+msgstr "المستخدم (يتم استخدام \"ضيف\" إذا كان الحقل فارغًا)\n"
+
+#. dialog title for smb installation
+#. txt_smb_title
+msgid "SMB (Windows Share) Installation"
+msgstr "تثبيت SMB‏ (مشاركة Windows)"
+
+#. dialog title for http installation
+#. txt_http_title
+msgid "HTTP Installation"
+msgstr "تثبيت HTTP"
+
+#. 'driver' as in '(hardware) driver update'
+#. txt_driver_update
+msgid "Driver"
+msgstr "برنامج التشغيل"
+
+#. as in Windows Authentication Domain
+#. txt_domain
+msgid "Domain\n"
+msgstr "المجال\n"
+
+#. button label for other/more options
+#. txt_other_options
+msgid "Other Options"
+msgstr "خيارات أخرى"
+
+#. label for language selection
+#. txt_language
+msgid "Language"
+msgstr "اللغة"
+
+#. txt_yes
+msgid "Yes"
+msgstr "نعم"
+
+#. txt_no
+msgid "No"
+msgstr "لا"
+
+#. menu item for selecting a file
+#. txt_file
+msgid "File"
+msgstr "ملف"
+
+#. input label: share as in "Windows share" (SMB)
+#. txt_share
+msgid "Share\n"
+msgstr "مشاركة\n"
+
+#. txt_zenAuto
+msgid "Automatic Mode"
+msgstr "وضع تلقائي"
+
+#. txt_zenManual
+msgid "Manual Mode"
+msgstr "وضع يدوي"
+
+#. txt_zenConfig
+msgid "Configure Parameters on ZEN Partition"
+msgstr "تكوين معلمات في قسم ZEN"
+
+#. txt_zenInstall
+msgid "Install or Update ZEN Partition"
+msgstr "تثبيت قسم ZEN أو تحديثه"
+
+#. txt_zenLilo
+msgid "Reinstall ZEN Partition Boot Loader"
+msgstr "إعادة تثبيت أداة تحميل تشغيل قسم ZEN"
+
+#. txt_zenDisable
+msgid "Disable ZEN Partition"
+msgstr "تعطيل قسم ZEN"
+
+#. txt_zenEnable
+msgid "Enable ZEN Partition"
+msgstr "تمكين قسم ZEN"
+
+#. video mode menu item
+#. txt_text_mode
+msgid "Text Mode"
+msgstr "وضع النص"
+
+#. menu item, like 'memory test'
+#. txt_firmware
+msgid "Firmware Test"
+msgstr "اختبار البرنامج الثابت"
+
+#. txt_dud_file_msg
+msgid ""
+"To load driver updates directly from CD-ROM,\n"
+"enter the driver update file names (separated\n"
+"by commas ',') here:\n"
+msgstr ""
+"لتحميل تحديثات برنامج التشغيل مباشرةً من القرص المضغوط،\n"
+"أدخل أسماء ملفات تحديثات برنامج التشغيل (مفصولة\n"
+" بفواصل ',') هنا:\n"
+
+#. install source menu title
+#. ** please keep it really short (comparable to the english text) **
+#. txt_install_source
+msgid "Source"
+msgstr ""
+
+#. video mode/display size menu title
+#. ** please keep it really short (comparable to the english text) **
+#. txt_video_mode
+msgid "Video Mode"
+msgstr ""
+
+#. driver update dialog title
+#. -> txt_dud_file_msg
+#. txt_driver_update2
+msgid "Driver Update"
+msgstr "تحديث برنامج التشغيل"
+
+#. menu label for selecting (cpu) architecture
+#. like i386, x86-64, ppc
+#. ** please keep it really short (comparable to the english text) **
+#. txt_arch
+msgid "Arch"
+msgstr "الهيكل"
+
+#. menu label for selecting some (linux) kernel variant
+#. ** please keep it really short (comparable to the english text) **
+#. txt_kernel
+msgid "Kernel"
+msgstr ""
+
+#. menu item for kernel variant (cf. txt_kernel)
+#. txt_kernel_default
+msgid "Default"
+msgstr ""
+
+#. menu item for kernel variant (cf. txt_kernel)
+#. -> like in txt_safe_linux
+#. txt_kernel_safe
+msgid "Safe Settings"
+msgstr ""
+
+#. menu item for kernel variant (cf. txt_kernel)
+#. -> similar to txt_noacpi_install
+#. txt_kernel_noacpi
+msgid "No ACPI"
+msgstr ""
+
+#. menu item for kernel variant (cf. txt_kernel)
+#. -> similar to txt_nolapic_install
+#. txt_kernel_nolapic
+msgid "No Local APIC"
+msgstr ""
+
+#. main menu: start in system repair mode
+#. txt_repain_system
+msgid "Repair Installed System"
+msgstr ""
+
+#. menu item
+#. txt_mediacheck
+msgid "Check Installation Media"
+msgstr ""
+
+#. menu item for keyboard layout (please keep it short)
+#. txt_keyboard
+msgid "Keyboard"
+msgstr "لوحة المفاتيح"
+
+#. menu title
+#. txt_dud_download
+msgid "Download Driver Update"
+msgstr ""
+
+#. input label
+#. txt_dud_enter_url
+msgid "Enter Driver Update URL\n"
+msgstr ""
+
+#. menu item
+#. txt_http_proxy
+msgid "HTTP Proxy"
+msgstr ""
+
+#. menu item
+#. txt_network_config
+msgid "Network Config"
+msgstr ""
+
+#. menu item
+#. txt_no_network
+msgid "No Network"
+msgstr ""
+
+#. short menu item for manual network config (NOT some kind of manual)
+#. txt_manual_network
+msgid "Manual"
+msgstr ""
+
+#. dialog title for manual network config
+#. txt_manual_network_title
+msgid "Manual Network Config"
+msgstr ""
+
+#. label for ip address
+#. txt_host_ip
+msgid "Host IP\n"
+msgstr ""
+
+#. label for gateway ip
+#. txt_gateway_ip
+msgid "Gateway\n"
+msgstr ""
+
+#. label for dns domain name (like 'opensuse.org')
+#. txt_domain_name
+msgid "Domain Name\n"
+msgstr ""
+
+#. label for nameserver list
+#. txt_nameservers
+msgid "Nameservers (separated by ',')\n"
+msgstr ""
+
+#. label for netmask; 'Host IP' refers to label txt_host_ip above
+#. txt_netmask
+msgid "Netmask\n(or use '/N' notation with Host IP)\n"
+msgstr ""
+
+#. label for Live CD installation
+#. txt_live_kde
+msgid "openSUSE Live (KDE)"
+msgstr ""
+
+#. label for Live CD installation
+#. txt_live_gnome
+msgid "openSUSE Live (GNOME)"
+msgstr ""
diff --git a/themes/openSUSE/po/bg.po b/themes/openSUSE/po/bg.po
new file mode 100644
index 0000000..4c29244
--- /dev/null
+++ b/themes/openSUSE/po/bg.po
@@ -0,0 +1,447 @@
+# translation of bg.po to
+# translation of bg.po to Bulgarian
+# translation of bootloader.po to Bulgarian
+# LANGUAGE translations for boot loader
+# Copyright (C) 2004 SUSE LINUX AG
+# Copyright (C) 2004 Vdel CREC
+# Borislav Mitev <morbid_viper@tkzs.org>, 2004, 2005, 2006.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: bootloader\n"
+"POT-Creation-Date: \n"
+"PO-Revision-Date: 2009-10-05 21:44+0300\n"
+"Last-Translator: Borislav Mitev <morbid_viper@tkzs.org>\n"
+"Language-Team: Bulgarian <bg@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.11.4\n"
+
+#. ok button label
+#. txt_ok
+msgid "OK"
+msgstr "Добре"
+
+#. cancel button label
+#. txt_cancel
+msgid "Cancel"
+msgstr "Прекъсване"
+
+#. reboot button label
+#. txt_reboot
+msgid "Reboot"
+msgstr "Рестартиране"
+
+#. continue button label
+#. txt_continue
+msgid "Continue"
+msgstr "Продължаване"
+
+#. txt_install
+msgid "Installation"
+msgstr "Инсталиране"
+
+#. txt_safe_linux
+msgid "Linux--Safe Settings"
+msgstr "Linux – безопасни настройки"
+
+#. txt_boot_harddisk
+msgid "Boot from Hard Disk"
+msgstr "Зареждане от твърдия диск"
+
+#. txt_rescue
+msgid "Rescue System"
+msgstr "Спасяване на системата"
+
+#. txt_memtest
+msgid "Memory Test"
+msgstr "Проверка на паметта"
+
+#. txt_bootoptions
+msgid "Boot Options"
+msgstr "Параметри на зареждането"
+
+#. window title for exit dialog
+#. txt_exit_title (see txt_exit_dialog)
+msgid "Exiting..."
+msgstr "Излизане..."
+
+#. txt_exit_dialog
+msgid ""
+"You are leaving the graphical boot menu and\n"
+"starting the text mode interface."
+msgstr ""
+"Вие напускате графичното меню и влизате\n"
+"в текстовия режим на зареждането."
+
+#. txt_help
+msgid "Help"
+msgstr "Помощ"
+
+#. window title for kernel loading (see txt_load_kernel)
+#. txt_load_kernel_title
+msgid "Starting..."
+msgstr "Стартиране..."
+
+#. Keep the three newlines!
+#. txt_load_kernel
+msgid ""
+"Loading Linux Kernel\n"
+"\n"
+"\n"
+msgstr ""
+"Зареждане на Linux ядрото\n"
+"\n"
+"\n"
+
+#. Keep the three newlines!
+#. txt_load_memtest
+msgid ""
+"Loading memtest86\n"
+"\n"
+"\n"
+msgstr ""
+"Зареждане на memtest86\n"
+"\n"
+"\n"
+
+#. info box title
+#. txt_info_title
+msgid "Boot Loader"
+msgstr "Зареждане на ОС"
+
+#. error box title
+#. txt_error_title
+msgid "I/O Error"
+msgstr "Входно/Изходна грешка"
+
+#. boot disk change dialog title
+#. txt_change_disk_title
+msgid "Change Boot Disk"
+msgstr "Промяна на диска за зареждане"
+
+#. txt_insert_disk
+#, c-format
+msgid "Insert boot disk %u."
+msgstr "Моля, поставете зареждащ диск %u."
+
+#. txt_insert_disk2
+#, c-format
+msgid ""
+"This is boot disk %u.\n"
+"Insert boot disk %u."
+msgstr ""
+"Това е зареждащ диск %u.\n"
+"Моля, поставете %u."
+
+#. <product> is e.g. SuSE Linux X.Y or Enterprise Server Z
+#. txt_insert_disk3
+#, c-format
+msgid ""
+"This is not a <product> boot disk.\n"
+"Insert boot disk %u."
+msgstr ""
+"Това не е зареждащ диск на <product>.\n"
+"Моля, поставете %u."
+
+#. password dialog title
+#. txt_password_title
+msgid "Password"
+msgstr "Парола"
+
+#. txt_dud_ready
+msgid "Get your driver update floppy ready."
+msgstr "Пригответе дискетата с драйверите за подновяване."
+
+#. power off dialog title
+#. txt_power_off_title
+msgid "Power Off"
+msgstr "Изключване на захранването"
+
+#. txt_power_off
+msgid "Halt the system now?"
+msgstr "Желаете ли да спрете сега системата?"
+
+#. menu entry for hard disk installation
+#. txt_harddisk
+msgid "Hard Disk"
+msgstr "Твърд диск"
+
+#. dialog title for hard disk installation
+#. txt_harddisk_title
+msgid "Hard Disk Installation"
+msgstr "Инсталиране от твърд диск"
+
+#. txt_hd_diskdevice
+msgid "Disk Device (Scans All Disks If Empty)\n"
+msgstr "Дисково устройство (ще сканира всички дискове, ако е празно)\n"
+
+#. txt_directory
+msgid "Directory\n"
+msgstr "Директория\n"
+
+#. dialog title for ftp installation
+#. txt_ftp_title
+msgid "FTP Installation"
+msgstr "Инсталиране от FTP"
+
+#. txt_server
+msgid "Server\n"
+msgstr "Сървър\n"
+
+#. txt_password
+msgid "Password\n"
+msgstr "Парола\n"
+
+#. label for ftp user input
+#. txt_user1
+msgid "User (Anonymous Login If Empty)\n"
+msgstr "Потребител (анонимен вход, ако е празно)\n"
+
+#. dialog title for nfs installation
+#. txt_nfs_title
+msgid "NFS Installation"
+msgstr "Инсталация от NFS"
+
+#. label for smb user input
+#. txt_user2
+msgid "User (Uses \"guest\" If Empty)\n"
+msgstr "Потребител (ще използва „guest“, ако е празно)\n"
+
+#. dialog title for smb installation
+#. txt_smb_title
+msgid "SMB (Windows Share) Installation"
+msgstr "Инсталиране от SMB (споделен от Windows ресурс)"
+
+#. dialog title for http installation
+#. txt_http_title
+msgid "HTTP Installation"
+msgstr "Инсталиране от HTTP"
+
+#. 'driver' as in '(hardware) driver update'
+#. txt_driver_update
+msgid "Driver"
+msgstr "Драйвер"
+
+#. as in Windows Authentication Domain
+#. txt_domain
+msgid "Domain\n"
+msgstr "Домейн\n"
+
+#. button label for other/more options
+#. txt_other_options
+msgid "Other Options"
+msgstr "Други параметри"
+
+#. label for language selection
+#. txt_language
+msgid "Language"
+msgstr "Език"
+
+#. txt_yes
+msgid "Yes"
+msgstr "Да"
+
+#. txt_no
+msgid "No"
+msgstr "Не"
+
+#. menu item for selecting a file
+#. txt_file
+msgid "File"
+msgstr "Файл"
+
+#. input label: share as in "Windows share" (SMB)
+#. txt_share
+msgid "Share\n"
+msgstr "Споделен ресурс\n"
+
+#. txt_zenAuto
+msgid "Automatic Mode"
+msgstr "Автоматичен режим"
+
+#. txt_zenManual
+msgid "Manual Mode"
+msgstr "Ръчен режим"
+
+#. txt_zenConfig
+msgid "Configure Parameters on ZEN Partition"
+msgstr "Настройка на параметри на дял ZEN"
+
+#. txt_zenInstall
+msgid "Install or Update ZEN Partition"
+msgstr "Инсталиране или подновяване на ZEN дял"
+
+#. txt_zenLilo
+msgid "Reinstall ZEN Partition Boot Loader"
+msgstr "Преинсталиране ОС зареждане на ZEN дял"
+
+#. txt_zenDisable
+msgid "Disable ZEN Partition"
+msgstr "Забраняване на ZEN дял"
+
+#. txt_zenEnable
+msgid "Enable ZEN Partition"
+msgstr "Разрешаване на ZEN дял"
+
+#. video mode menu item
+#. txt_text_mode
+msgid "Text Mode"
+msgstr "Текстов режим"
+
+#. menu item, like 'memory test'
+#. txt_firmware
+msgid "Firmware Test"
+msgstr "Проба на фърмуер"
+
+#. txt_dud_file_msg
+msgid ""
+"To load driver updates directly from CD-ROM,\n"
+"enter the driver update file names (separated\n"
+"by commas ',') here:\n"
+msgstr ""
+"За да заредите драйвери директно от CD-ROM,\n"
+"въведете тук файловите имена на драйверите\n"
+"за обновяване, разделени със запетаи:\n"
+
+#. install source menu title
+#. ** please keep it really short (comparable to the english text) **
+#. txt_install_source
+msgid "Source"
+msgstr "Източник"
+
+#. video mode/display size menu title
+#. ** please keep it really short (comparable to the english text) **
+#. txt_video_mode
+msgid "Video Mode"
+msgstr "Видео режим"
+
+#. driver update dialog title
+#. -> txt_dud_file_msg
+#. txt_driver_update2
+msgid "Driver Update"
+msgstr "Обновяване на драйвери"
+
+#. menu label for selecting (cpu) architecture
+#. like i386, x86-64, ppc
+#. ** please keep it really short (comparable to the english text) **
+#. txt_arch
+msgid "Arch"
+msgstr "Архитектура"
+
+#. menu label for selecting some (linux) kernel variant
+#. ** please keep it really short (comparable to the english text) **
+#. txt_kernel
+msgid "Kernel"
+msgstr "Ядро"
+
+#. menu item for kernel variant (cf. txt_kernel)
+#. txt_kernel_default
+msgid "Default"
+msgstr "По подразбиране"
+
+#. menu item for kernel variant (cf. txt_kernel)
+#. -> like in txt_safe_linux
+#. txt_kernel_safe
+msgid "Safe Settings"
+msgstr "Безопасни настройки"
+
+#. menu item for kernel variant (cf. txt_kernel)
+#. -> similar to txt_noacpi_install
+#. txt_kernel_noacpi
+msgid "No ACPI"
+msgstr "Без ACPI"
+
+#. menu item for kernel variant (cf. txt_kernel)
+#. -> similar to txt_nolapic_install
+#. txt_kernel_nolapic
+msgid "No Local APIC"
+msgstr "Без локален APIC"
+
+#. main menu: start in system repair mode
+#. txt_repain_system
+msgid "Repair Installed System"
+msgstr "Поправка на инсталирана система"
+
+#. menu item
+#. txt_mediacheck
+msgid "Check Installation Media"
+msgstr "Проверка на инсталационен носител"
+
+#. menu item for keyboard layout (please keep it short)
+#. txt_keyboard
+msgid "Keyboard"
+msgstr "Клавиатура"
+
+#. menu title
+#. txt_dud_download
+msgid "Download Driver Update"
+msgstr "Сваляне на обновления за драйвери"
+
+#. input label
+#. txt_dud_enter_url
+msgid "Enter Driver Update URL\n"
+msgstr "Въведете URL за обновяване на драйвери\n"
+
+#. menu item
+#. txt_http_proxy
+msgid "HTTP Proxy"
+msgstr "HTTP прокси"
+
+#. menu item
+#. txt_network_config
+msgid "Network Config"
+msgstr "Мрежови настройки"
+
+#. menu item
+#. txt_no_network
+msgid "No Network"
+msgstr "Без мрежа"
+
+#. short menu item for manual network config (NOT some kind of manual)
+#. txt_manual_network
+msgid "Manual"
+msgstr "Ръчно"
+
+#. dialog title for manual network config
+#. txt_manual_network_title
+msgid "Manual Network Config"
+msgstr "Ръчна мрежова настройка"
+
+#. label for ip address
+#. txt_host_ip
+msgid "Host IP\n"
+msgstr "IP на машината\n"
+
+#. label for gateway ip
+#. txt_gateway_ip
+msgid "Gateway\n"
+msgstr "Шлюз\n"
+
+#. label for dns domain name (like 'opensuse.org')
+#. txt_domain_name
+msgid "Domain Name\n"
+msgstr "Домейн\n"
+
+#. label for nameserver list
+#. txt_nameservers
+msgid "Nameservers (separated by ',')\n"
+msgstr "DNS (разделени със „,“)\n"
+
+#. label for netmask; 'Host IP' refers to label txt_host_ip above
+#. txt_netmask
+msgid "Netmask\n(or use '/N' notation with Host IP)\n"
+msgstr ""
+"Мрежова маска\n"
+"(или използвайте нотацията „/N“ с IP-то)\n"
+
+#. label for Live CD installation
+#. txt_live_kde
+msgid "openSUSE Live (KDE)"
+msgstr "Живо openSUSE (KDE)"
+
+#. label for Live CD installation
+#. txt_live_gnome
+msgid "openSUSE Live (GNOME)"
+msgstr "Живо openSUSE (GNOME)"
diff --git a/themes/openSUSE/po/bin/add_text b/themes/openSUSE/po/bin/add_text
new file mode 100755
index 0000000..83bef29
--- /dev/null
+++ b/themes/openSUSE/po/bin/add_text
@@ -0,0 +1,56 @@
+#! /usr/bin/perl
+
+# add a new text to *.po files
+
+die "usage: add_text [-c comment] id text_line1 text_line2 ... \nexample:\n add_text MENU_LANG Language\n" if @ARGV < 2;
+
+while($ARGV[0] eq '-c') {
+ shift;
+ push @l, "#. $ARGV[0]\n";
+ shift;
+}
+
+$id = shift;
+@texts = @ARGV;
+
+$id =~ s/^txt_//;
+
+$_ = join '', @texts;
+
+push @l, "#. txt_$id\n";
+push @l, "#, c-format\n" if /%/;
+
+if(@texts == 1) {
+ push @l, "msgid \"$texts[0]\"\n"
+}
+else {
+ push @l, "msgid \"\"\n";
+ for (@texts) { push @l, "\"$_\"\n" }
+}
+
+push @l, "msgstr \"\"\n";
+push @l, "\n";
+
+print @l;
+
+print STDERR "Should this entry be added to all *.po files? [Y/n]\n";
+
+$_ = <STDIN>;
+
+chomp;
+
+$_ = "\L$_";
+
+exit unless $_ eq '' || $_ eq 'y';
+
+print "ok\n";
+
+for $f ("bootloader.pot", <*.po>) {
+ if(open F, "+<$f") {
+ @f = <F>;
+ print F "\n" if $f[-1] !~ /^\s*$/;
+ print F @l;
+ close F;
+ }
+}
+
diff --git a/themes/openSUSE/po/bin/arabic.txt b/themes/openSUSE/po/bin/arabic.txt
new file mode 100644
index 0000000..9d20a7d
--- /dev/null
+++ b/themes/openSUSE/po/bin/arabic.txt
@@ -0,0 +1,1040 @@
+0600;ARABIC NUMBER SIGN;Cf;0;AL;;;;;N;;;;;
+0601;ARABIC SIGN SANAH;Cf;0;AL;;;;;N;;;;;
+0602;ARABIC FOOTNOTE MARKER;Cf;0;AL;;;;;N;;;;;
+0603;ARABIC SIGN SAFHA;Cf;0;AL;;;;;N;;;;;
+060C;ARABIC COMMA;Po;0;CS;;;;;N;;;;;
+060D;ARABIC DATE SEPARATOR;Po;0;AL;;;;;N;;;;;
+060E;ARABIC POETIC VERSE SIGN;So;0;ON;;;;;N;;;;;
+060F;ARABIC SIGN MISRA;So;0;ON;;;;;N;;;;;
+0610;ARABIC SIGN SALLALLAHOU ALAYHE WASSALLAM;Mn;230;NSM;;;;;N;;;;;
+0611;ARABIC SIGN ALAYHE ASSALLAM;Mn;230;NSM;;;;;N;;;;;
+0612;ARABIC SIGN RAHMATULLAH ALAYHE;Mn;230;NSM;;;;;N;;;;;
+0613;ARABIC SIGN RADI ALLAHOU ANHU;Mn;230;NSM;;;;;N;;;;;
+0614;ARABIC SIGN TAKHALLUS;Mn;230;NSM;;;;;N;;;;;
+0615;ARABIC SMALL HIGH TAH;Mn;230;NSM;;;;;N;;;;;
+061B;ARABIC SEMICOLON;Po;0;AL;;;;;N;;;;;
+061F;ARABIC QUESTION MARK;Po;0;AL;;;;;N;;;;;
+0621;ARABIC LETTER HAMZA;Lo;0;AL;;;;;N;ARABIC LETTER HAMZAH;;;;
+0622;ARABIC LETTER ALEF WITH MADDA ABOVE;Lo;0;AL;0627 0653;;;;N;ARABIC LETTER MADDAH ON ALEF;;;;
+0623;ARABIC LETTER ALEF WITH HAMZA ABOVE;Lo;0;AL;0627 0654;;;;N;ARABIC LETTER HAMZAH ON ALEF;;;;
+0624;ARABIC LETTER WAW WITH HAMZA ABOVE;Lo;0;AL;0648 0654;;;;N;ARABIC LETTER HAMZAH ON WAW;;;;
+0625;ARABIC LETTER ALEF WITH HAMZA BELOW;Lo;0;AL;0627 0655;;;;N;ARABIC LETTER HAMZAH UNDER ALEF;;;;
+0626;ARABIC LETTER YEH WITH HAMZA ABOVE;Lo;0;AL;064A 0654;;;;N;ARABIC LETTER HAMZAH ON YA;;;;
+0627;ARABIC LETTER ALEF;Lo;0;AL;;;;;N;;;;;
+0628;ARABIC LETTER BEH;Lo;0;AL;;;;;N;ARABIC LETTER BAA;;;;
+0629;ARABIC LETTER TEH MARBUTA;Lo;0;AL;;;;;N;ARABIC LETTER TAA MARBUTAH;;;;
+062A;ARABIC LETTER TEH;Lo;0;AL;;;;;N;ARABIC LETTER TAA;;;;
+062B;ARABIC LETTER THEH;Lo;0;AL;;;;;N;ARABIC LETTER THAA;;;;
+062C;ARABIC LETTER JEEM;Lo;0;AL;;;;;N;;;;;
+062D;ARABIC LETTER HAH;Lo;0;AL;;;;;N;ARABIC LETTER HAA;;;;
+062E;ARABIC LETTER KHAH;Lo;0;AL;;;;;N;ARABIC LETTER KHAA;;;;
+062F;ARABIC LETTER DAL;Lo;0;AL;;;;;N;;;;;
+0630;ARABIC LETTER THAL;Lo;0;AL;;;;;N;;;;;
+0631;ARABIC LETTER REH;Lo;0;AL;;;;;N;ARABIC LETTER RA;;;;
+0632;ARABIC LETTER ZAIN;Lo;0;AL;;;;;N;;;;;
+0633;ARABIC LETTER SEEN;Lo;0;AL;;;;;N;;;;;
+0634;ARABIC LETTER SHEEN;Lo;0;AL;;;;;N;;;;;
+0635;ARABIC LETTER SAD;Lo;0;AL;;;;;N;;;;;
+0636;ARABIC LETTER DAD;Lo;0;AL;;;;;N;;;;;
+0637;ARABIC LETTER TAH;Lo;0;AL;;;;;N;;;;;
+0638;ARABIC LETTER ZAH;Lo;0;AL;;;;;N;ARABIC LETTER DHAH;;;;
+0639;ARABIC LETTER AIN;Lo;0;AL;;;;;N;;;;;
+063A;ARABIC LETTER GHAIN;Lo;0;AL;;;;;N;;;;;
+0640;ARABIC TATWEEL;Lm;0;AL;;;;;N;;;;;
+0641;ARABIC LETTER FEH;Lo;0;AL;;;;;N;ARABIC LETTER FA;;;;
+0642;ARABIC LETTER QAF;Lo;0;AL;;;;;N;;;;;
+0643;ARABIC LETTER KAF;Lo;0;AL;;;;;N;ARABIC LETTER CAF;;;;
+0644;ARABIC LETTER LAM;Lo;0;AL;;;;;N;;;;;
+0645;ARABIC LETTER MEEM;Lo;0;AL;;;;;N;;;;;
+0646;ARABIC LETTER NOON;Lo;0;AL;;;;;N;;;;;
+0647;ARABIC LETTER HEH;Lo;0;AL;;;;;N;ARABIC LETTER HA;;;;
+0648;ARABIC LETTER WAW;Lo;0;AL;;;;;N;;;;;
+0649;ARABIC LETTER ALEF MAKSURA;Lo;0;AL;;;;;N;ARABIC LETTER ALEF MAQSURAH;;;;
+064A;ARABIC LETTER YEH;Lo;0;AL;;;;;N;ARABIC LETTER YA;;;;
+064B;ARABIC FATHATAN;Mn;27;NSM;;;;;N;;;;;
+064C;ARABIC DAMMATAN;Mn;28;NSM;;;;;N;;;;;
+064D;ARABIC KASRATAN;Mn;29;NSM;;;;;N;;;;;
+064E;ARABIC FATHA;Mn;30;NSM;;;;;N;ARABIC FATHAH;;;;
+064F;ARABIC DAMMA;Mn;31;NSM;;;;;N;ARABIC DAMMAH;;;;
+0650;ARABIC KASRA;Mn;32;NSM;;;;;N;ARABIC KASRAH;;;;
+0651;ARABIC SHADDA;Mn;33;NSM;;;;;N;ARABIC SHADDAH;;;;
+0652;ARABIC SUKUN;Mn;34;NSM;;;;;N;;;;;
+0653;ARABIC MADDAH ABOVE;Mn;230;NSM;;;;;N;;;;;
+0654;ARABIC HAMZA ABOVE;Mn;230;NSM;;;;;N;;;;;
+0655;ARABIC HAMZA BELOW;Mn;220;NSM;;;;;N;;;;;
+0656;ARABIC SUBSCRIPT ALEF;Mn;220;NSM;;;;;N;;;;;
+0657;ARABIC INVERTED DAMMA;Mn;230;NSM;;;;;N;;;;;
+0658;ARABIC MARK NOON GHUNNA;Mn;230;NSM;;;;;N;;;;;
+0660;ARABIC-INDIC DIGIT ZERO;Nd;0;AN;;0;0;0;N;;;;;
+0661;ARABIC-INDIC DIGIT ONE;Nd;0;AN;;1;1;1;N;;;;;
+0662;ARABIC-INDIC DIGIT TWO;Nd;0;AN;;2;2;2;N;;;;;
+0663;ARABIC-INDIC DIGIT THREE;Nd;0;AN;;3;3;3;N;;;;;
+0664;ARABIC-INDIC DIGIT FOUR;Nd;0;AN;;4;4;4;N;;;;;
+0665;ARABIC-INDIC DIGIT FIVE;Nd;0;AN;;5;5;5;N;;;;;
+0666;ARABIC-INDIC DIGIT SIX;Nd;0;AN;;6;6;6;N;;;;;
+0667;ARABIC-INDIC DIGIT SEVEN;Nd;0;AN;;7;7;7;N;;;;;
+0668;ARABIC-INDIC DIGIT EIGHT;Nd;0;AN;;8;8;8;N;;;;;
+0669;ARABIC-INDIC DIGIT NINE;Nd;0;AN;;9;9;9;N;;;;;
+066A;ARABIC PERCENT SIGN;Po;0;ET;;;;;N;;;;;
+066B;ARABIC DECIMAL SEPARATOR;Po;0;AN;;;;;N;;;;;
+066C;ARABIC THOUSANDS SEPARATOR;Po;0;AN;;;;;N;;;;;
+066D;ARABIC FIVE POINTED STAR;Po;0;AL;;;;;N;;;;;
+066E;ARABIC LETTER DOTLESS BEH;Lo;0;AL;;;;;N;;;;;
+066F;ARABIC LETTER DOTLESS QAF;Lo;0;AL;;;;;N;;;;;
+0670;ARABIC LETTER SUPERSCRIPT ALEF;Mn;35;NSM;;;;;N;ARABIC ALEF ABOVE;;;;
+0671;ARABIC LETTER ALEF WASLA;Lo;0;AL;;;;;N;ARABIC LETTER HAMZAT WASL ON ALEF;;;;
+0672;ARABIC LETTER ALEF WITH WAVY HAMZA ABOVE;Lo;0;AL;;;;;N;ARABIC LETTER WAVY HAMZAH ON ALEF;;;;
+0673;ARABIC LETTER ALEF WITH WAVY HAMZA BELOW;Lo;0;AL;;;;;N;ARABIC LETTER WAVY HAMZAH UNDER ALEF;;;;
+0674;ARABIC LETTER HIGH HAMZA;Lo;0;AL;;;;;N;ARABIC LETTER HIGH HAMZAH;;;;
+0675;ARABIC LETTER HIGH HAMZA ALEF;Lo;0;AL;<compat> 0627 0674;;;;N;ARABIC LETTER HIGH HAMZAH ALEF;;;;
+0676;ARABIC LETTER HIGH HAMZA WAW;Lo;0;AL;<compat> 0648 0674;;;;N;ARABIC LETTER HIGH HAMZAH WAW;;;;
+0677;ARABIC LETTER U WITH HAMZA ABOVE;Lo;0;AL;<compat> 06C7 0674;;;;N;ARABIC LETTER HIGH HAMZAH WAW WITH DAMMAH;;;;
+0678;ARABIC LETTER HIGH HAMZA YEH;Lo;0;AL;<compat> 064A 0674;;;;N;ARABIC LETTER HIGH HAMZAH YA;;;;
+0679;ARABIC LETTER TTEH;Lo;0;AL;;;;;N;ARABIC LETTER TAA WITH SMALL TAH;;;;
+067A;ARABIC LETTER TTEHEH;Lo;0;AL;;;;;N;ARABIC LETTER TAA WITH TWO DOTS VERTICAL ABOVE;;;;
+067B;ARABIC LETTER BEEH;Lo;0;AL;;;;;N;ARABIC LETTER BAA WITH TWO DOTS VERTICAL BELOW;;;;
+067C;ARABIC LETTER TEH WITH RING;Lo;0;AL;;;;;N;ARABIC LETTER TAA WITH RING;;;;
+067D;ARABIC LETTER TEH WITH THREE DOTS ABOVE DOWNWARDS;Lo;0;AL;;;;;N;ARABIC LETTER TAA WITH THREE DOTS ABOVE DOWNWARD;;;;
+067E;ARABIC LETTER PEH;Lo;0;AL;;;;;N;ARABIC LETTER TAA WITH THREE DOTS BELOW;;;;
+067F;ARABIC LETTER TEHEH;Lo;0;AL;;;;;N;ARABIC LETTER TAA WITH FOUR DOTS ABOVE;;;;
+0680;ARABIC LETTER BEHEH;Lo;0;AL;;;;;N;ARABIC LETTER BAA WITH FOUR DOTS BELOW;;;;
+0681;ARABIC LETTER HAH WITH HAMZA ABOVE;Lo;0;AL;;;;;N;ARABIC LETTER HAMZAH ON HAA;;;;
+0682;ARABIC LETTER HAH WITH TWO DOTS VERTICAL ABOVE;Lo;0;AL;;;;;N;ARABIC LETTER HAA WITH TWO DOTS VERTICAL ABOVE;;;;
+0683;ARABIC LETTER NYEH;Lo;0;AL;;;;;N;ARABIC LETTER HAA WITH MIDDLE TWO DOTS;;;;
+0684;ARABIC LETTER DYEH;Lo;0;AL;;;;;N;ARABIC LETTER HAA WITH MIDDLE TWO DOTS VERTICAL;;;;
+0685;ARABIC LETTER HAH WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;ARABIC LETTER HAA WITH THREE DOTS ABOVE;;;;
+0686;ARABIC LETTER TCHEH;Lo;0;AL;;;;;N;ARABIC LETTER HAA WITH MIDDLE THREE DOTS DOWNWARD;;;;
+0687;ARABIC LETTER TCHEHEH;Lo;0;AL;;;;;N;ARABIC LETTER HAA WITH MIDDLE FOUR DOTS;;;;
+0688;ARABIC LETTER DDAL;Lo;0;AL;;;;;N;ARABIC LETTER DAL WITH SMALL TAH;;;;
+0689;ARABIC LETTER DAL WITH RING;Lo;0;AL;;;;;N;;;;;
+068A;ARABIC LETTER DAL WITH DOT BELOW;Lo;0;AL;;;;;N;;;;;
+068B;ARABIC LETTER DAL WITH DOT BELOW AND SMALL TAH;Lo;0;AL;;;;;N;;;;;
+068C;ARABIC LETTER DAHAL;Lo;0;AL;;;;;N;ARABIC LETTER DAL WITH TWO DOTS ABOVE;;;;
+068D;ARABIC LETTER DDAHAL;Lo;0;AL;;;;;N;ARABIC LETTER DAL WITH TWO DOTS BELOW;;;;
+068E;ARABIC LETTER DUL;Lo;0;AL;;;;;N;ARABIC LETTER DAL WITH THREE DOTS ABOVE;;;;
+068F;ARABIC LETTER DAL WITH THREE DOTS ABOVE DOWNWARDS;Lo;0;AL;;;;;N;ARABIC LETTER DAL WITH THREE DOTS ABOVE DOWNWARD;;;;
+0690;ARABIC LETTER DAL WITH FOUR DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
+0691;ARABIC LETTER RREH;Lo;0;AL;;;;;N;ARABIC LETTER RA WITH SMALL TAH;;;;
+0692;ARABIC LETTER REH WITH SMALL V;Lo;0;AL;;;;;N;ARABIC LETTER RA WITH SMALL V;;;;
+0693;ARABIC LETTER REH WITH RING;Lo;0;AL;;;;;N;ARABIC LETTER RA WITH RING;;;;
+0694;ARABIC LETTER REH WITH DOT BELOW;Lo;0;AL;;;;;N;ARABIC LETTER RA WITH DOT BELOW;;;;
+0695;ARABIC LETTER REH WITH SMALL V BELOW;Lo;0;AL;;;;;N;ARABIC LETTER RA WITH SMALL V BELOW;;;;
+0696;ARABIC LETTER REH WITH DOT BELOW AND DOT ABOVE;Lo;0;AL;;;;;N;ARABIC LETTER RA WITH DOT BELOW AND DOT ABOVE;;;;
+0697;ARABIC LETTER REH WITH TWO DOTS ABOVE;Lo;0;AL;;;;;N;ARABIC LETTER RA WITH TWO DOTS ABOVE;;;;
+0698;ARABIC LETTER JEH;Lo;0;AL;;;;;N;ARABIC LETTER RA WITH THREE DOTS ABOVE;;;;
+0699;ARABIC LETTER REH WITH FOUR DOTS ABOVE;Lo;0;AL;;;;;N;ARABIC LETTER RA WITH FOUR DOTS ABOVE;;;;
+069A;ARABIC LETTER SEEN WITH DOT BELOW AND DOT ABOVE;Lo;0;AL;;;;;N;;;;;
+069B;ARABIC LETTER SEEN WITH THREE DOTS BELOW;Lo;0;AL;;;;;N;;;;;
+069C;ARABIC LETTER SEEN WITH THREE DOTS BELOW AND THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
+069D;ARABIC LETTER SAD WITH TWO DOTS BELOW;Lo;0;AL;;;;;N;;;;;
+069E;ARABIC LETTER SAD WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
+069F;ARABIC LETTER TAH WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
+06A0;ARABIC LETTER AIN WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
+06A1;ARABIC LETTER DOTLESS FEH;Lo;0;AL;;;;;N;ARABIC LETTER DOTLESS FA;;;;
+06A2;ARABIC LETTER FEH WITH DOT MOVED BELOW;Lo;0;AL;;;;;N;ARABIC LETTER FA WITH DOT MOVED BELOW;;;;
+06A3;ARABIC LETTER FEH WITH DOT BELOW;Lo;0;AL;;;;;N;ARABIC LETTER FA WITH DOT BELOW;;;;
+06A4;ARABIC LETTER VEH;Lo;0;AL;;;;;N;ARABIC LETTER FA WITH THREE DOTS ABOVE;;;;
+06A5;ARABIC LETTER FEH WITH THREE DOTS BELOW;Lo;0;AL;;;;;N;ARABIC LETTER FA WITH THREE DOTS BELOW;;;;
+06A6;ARABIC LETTER PEHEH;Lo;0;AL;;;;;N;ARABIC LETTER FA WITH FOUR DOTS ABOVE;;;;
+06A7;ARABIC LETTER QAF WITH DOT ABOVE;Lo;0;AL;;;;;N;;;;;
+06A8;ARABIC LETTER QAF WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
+06A9;ARABIC LETTER KEHEH;Lo;0;AL;;;;;N;ARABIC LETTER OPEN CAF;;;;
+06AA;ARABIC LETTER SWASH KAF;Lo;0;AL;;;;;N;ARABIC LETTER SWASH CAF;;;;
+06AB;ARABIC LETTER KAF WITH RING;Lo;0;AL;;;;;N;ARABIC LETTER CAF WITH RING;;;;
+06AC;ARABIC LETTER KAF WITH DOT ABOVE;Lo;0;AL;;;;;N;ARABIC LETTER CAF WITH DOT ABOVE;;;;
+06AD;ARABIC LETTER NG;Lo;0;AL;;;;;N;ARABIC LETTER CAF WITH THREE DOTS ABOVE;;;;
+06AE;ARABIC LETTER KAF WITH THREE DOTS BELOW;Lo;0;AL;;;;;N;ARABIC LETTER CAF WITH THREE DOTS BELOW;;;;
+06AF;ARABIC LETTER GAF;Lo;0;AL;;;;;N;;*;;;
+06B0;ARABIC LETTER GAF WITH RING;Lo;0;AL;;;;;N;;;;;
+06B1;ARABIC LETTER NGOEH;Lo;0;AL;;;;;N;ARABIC LETTER GAF WITH TWO DOTS ABOVE;;;;
+06B2;ARABIC LETTER GAF WITH TWO DOTS BELOW;Lo;0;AL;;;;;N;;;;;
+06B3;ARABIC LETTER GUEH;Lo;0;AL;;;;;N;ARABIC LETTER GAF WITH TWO DOTS VERTICAL BELOW;;;;
+06B4;ARABIC LETTER GAF WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
+06B5;ARABIC LETTER LAM WITH SMALL V;Lo;0;AL;;;;;N;;;;;
+06B6;ARABIC LETTER LAM WITH DOT ABOVE;Lo;0;AL;;;;;N;;;;;
+06B7;ARABIC LETTER LAM WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
+06B8;ARABIC LETTER LAM WITH THREE DOTS BELOW;Lo;0;AL;;;;;N;;;;;
+06B9;ARABIC LETTER NOON WITH DOT BELOW;Lo;0;AL;;;;;N;;;;;
+06BA;ARABIC LETTER NOON GHUNNA;Lo;0;AL;;;;;N;ARABIC LETTER DOTLESS NOON;;;;
+06BB;ARABIC LETTER RNOON;Lo;0;AL;;;;;N;ARABIC LETTER DOTLESS NOON WITH SMALL TAH;;;;
+06BC;ARABIC LETTER NOON WITH RING;Lo;0;AL;;;;;N;;;;;
+06BD;ARABIC LETTER NOON WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
+06BE;ARABIC LETTER HEH DOACHASHMEE;Lo;0;AL;;;;;N;ARABIC LETTER KNOTTED HA;;;;
+06BF;ARABIC LETTER TCHEH WITH DOT ABOVE;Lo;0;AL;;;;;N;;;;;
+06C0;ARABIC LETTER HEH WITH YEH ABOVE;Lo;0;AL;06D5 0654;;;;N;ARABIC LETTER HAMZAH ON HA;;;;
+06C1;ARABIC LETTER HEH GOAL;Lo;0;AL;;;;;N;ARABIC LETTER HA GOAL;;;;
+06C2;ARABIC LETTER HEH GOAL WITH HAMZA ABOVE;Lo;0;AL;06C1 0654;;;;N;ARABIC LETTER HAMZAH ON HA GOAL;;;;
+06C3;ARABIC LETTER TEH MARBUTA GOAL;Lo;0;AL;;;;;N;ARABIC LETTER TAA MARBUTAH GOAL;;;;
+06C4;ARABIC LETTER WAW WITH RING;Lo;0;AL;;;;;N;;;;;
+06C5;ARABIC LETTER KIRGHIZ OE;Lo;0;AL;;;;;N;ARABIC LETTER WAW WITH BAR;;;;
+06C6;ARABIC LETTER OE;Lo;0;AL;;;;;N;ARABIC LETTER WAW WITH SMALL V;;;;
+06C7;ARABIC LETTER U;Lo;0;AL;;;;;N;ARABIC LETTER WAW WITH DAMMAH;;;;
+06C8;ARABIC LETTER YU;Lo;0;AL;;;;;N;ARABIC LETTER WAW WITH ALEF ABOVE;;;;
+06C9;ARABIC LETTER KIRGHIZ YU;Lo;0;AL;;;;;N;ARABIC LETTER WAW WITH INVERTED SMALL V;;;;
+06CA;ARABIC LETTER WAW WITH TWO DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
+06CB;ARABIC LETTER VE;Lo;0;AL;;;;;N;ARABIC LETTER WAW WITH THREE DOTS ABOVE;;;;
+06CC;ARABIC LETTER FARSI YEH;Lo;0;AL;;;;;N;ARABIC LETTER DOTLESS YA;;;;
+06CD;ARABIC LETTER YEH WITH TAIL;Lo;0;AL;;;;;N;ARABIC LETTER YA WITH TAIL;;;;
+06CE;ARABIC LETTER YEH WITH SMALL V;Lo;0;AL;;;;;N;ARABIC LETTER YA WITH SMALL V;;;;
+06CF;ARABIC LETTER WAW WITH DOT ABOVE;Lo;0;AL;;;;;N;;;;;
+06D0;ARABIC LETTER E;Lo;0;AL;;;;;N;ARABIC LETTER YA WITH TWO DOTS VERTICAL BELOW;*;;;
+06D1;ARABIC LETTER YEH WITH THREE DOTS BELOW;Lo;0;AL;;;;;N;ARABIC LETTER YA WITH THREE DOTS BELOW;;;;
+06D2;ARABIC LETTER YEH BARREE;Lo;0;AL;;;;;N;ARABIC LETTER YA BARREE;;;;
+06D3;ARABIC LETTER YEH BARREE WITH HAMZA ABOVE;Lo;0;AL;06D2 0654;;;;N;ARABIC LETTER HAMZAH ON YA BARREE;;;;
+06D4;ARABIC FULL STOP;Po;0;AL;;;;;N;ARABIC PERIOD;;;;
+06D5;ARABIC LETTER AE;Lo;0;AL;;;;;N;;;;;
+06D6;ARABIC SMALL HIGH LIGATURE SAD WITH LAM WITH ALEF MAKSURA;Mn;230;NSM;;;;;N;;;;;
+06D7;ARABIC SMALL HIGH LIGATURE QAF WITH LAM WITH ALEF MAKSURA;Mn;230;NSM;;;;;N;;;;;
+06D8;ARABIC SMALL HIGH MEEM INITIAL FORM;Mn;230;NSM;;;;;N;;;;;
+06D9;ARABIC SMALL HIGH LAM ALEF;Mn;230;NSM;;;;;N;;;;;
+06DA;ARABIC SMALL HIGH JEEM;Mn;230;NSM;;;;;N;;;;;
+06DB;ARABIC SMALL HIGH THREE DOTS;Mn;230;NSM;;;;;N;;;;;
+06DC;ARABIC SMALL HIGH SEEN;Mn;230;NSM;;;;;N;;;;;
+06DD;ARABIC END OF AYAH;Cf;0;AL;;;;;N;;;;;
+06DE;ARABIC START OF RUB EL HIZB;Me;0;NSM;;;;;N;;;;;
+06DF;ARABIC SMALL HIGH ROUNDED ZERO;Mn;230;NSM;;;;;N;;;;;
+06E0;ARABIC SMALL HIGH UPRIGHT RECTANGULAR ZERO;Mn;230;NSM;;;;;N;;;;;
+06E1;ARABIC SMALL HIGH DOTLESS HEAD OF KHAH;Mn;230;NSM;;;;;N;;;;;
+06E2;ARABIC SMALL HIGH MEEM ISOLATED FORM;Mn;230;NSM;;;;;N;;;;;
+06E3;ARABIC SMALL LOW SEEN;Mn;220;NSM;;;;;N;;;;;
+06E4;ARABIC SMALL HIGH MADDA;Mn;230;NSM;;;;;N;;;;;
+06E5;ARABIC SMALL WAW;Lm;0;AL;;;;;N;;;;;
+06E6;ARABIC SMALL YEH;Lm;0;AL;;;;;N;;;;;
+06E7;ARABIC SMALL HIGH YEH;Mn;230;NSM;;;;;N;;;;;
+06E8;ARABIC SMALL HIGH NOON;Mn;230;NSM;;;;;N;;;;;
+06E9;ARABIC PLACE OF SAJDAH;So;0;ON;;;;;N;;;;;
+06EA;ARABIC EMPTY CENTRE LOW STOP;Mn;220;NSM;;;;;N;;;;;
+06EB;ARABIC EMPTY CENTRE HIGH STOP;Mn;230;NSM;;;;;N;;;;;
+06EC;ARABIC ROUNDED HIGH STOP WITH FILLED CENTRE;Mn;230;NSM;;;;;N;;;;;
+06ED;ARABIC SMALL LOW MEEM;Mn;220;NSM;;;;;N;;;;;
+06EE;ARABIC LETTER DAL WITH INVERTED V;Lo;0;AL;;;;;N;;;;;
+06EF;ARABIC LETTER REH WITH INVERTED V;Lo;0;AL;;;;;N;;;;;
+06F0;EXTENDED ARABIC-INDIC DIGIT ZERO;Nd;0;EN;;0;0;0;N;EASTERN ARABIC-INDIC DIGIT ZERO;;;;
+06F1;EXTENDED ARABIC-INDIC DIGIT ONE;Nd;0;EN;;1;1;1;N;EASTERN ARABIC-INDIC DIGIT ONE;;;;
+06F2;EXTENDED ARABIC-INDIC DIGIT TWO;Nd;0;EN;;2;2;2;N;EASTERN ARABIC-INDIC DIGIT TWO;;;;
+06F3;EXTENDED ARABIC-INDIC DIGIT THREE;Nd;0;EN;;3;3;3;N;EASTERN ARABIC-INDIC DIGIT THREE;;;;
+06F4;EXTENDED ARABIC-INDIC DIGIT FOUR;Nd;0;EN;;4;4;4;N;EASTERN ARABIC-INDIC DIGIT FOUR;;;;
+06F5;EXTENDED ARABIC-INDIC DIGIT FIVE;Nd;0;EN;;5;5;5;N;EASTERN ARABIC-INDIC DIGIT FIVE;;;;
+06F6;EXTENDED ARABIC-INDIC DIGIT SIX;Nd;0;EN;;6;6;6;N;EASTERN ARABIC-INDIC DIGIT SIX;;;;
+06F7;EXTENDED ARABIC-INDIC DIGIT SEVEN;Nd;0;EN;;7;7;7;N;EASTERN ARABIC-INDIC DIGIT SEVEN;;;;
+06F8;EXTENDED ARABIC-INDIC DIGIT EIGHT;Nd;0;EN;;8;8;8;N;EASTERN ARABIC-INDIC DIGIT EIGHT;;;;
+06F9;EXTENDED ARABIC-INDIC DIGIT NINE;Nd;0;EN;;9;9;9;N;EASTERN ARABIC-INDIC DIGIT NINE;;;;
+06FA;ARABIC LETTER SHEEN WITH DOT BELOW;Lo;0;AL;;;;;N;;;;;
+06FB;ARABIC LETTER DAD WITH DOT BELOW;Lo;0;AL;;;;;N;;;;;
+06FC;ARABIC LETTER GHAIN WITH DOT BELOW;Lo;0;AL;;;;;N;;;;;
+06FD;ARABIC SIGN SINDHI AMPERSAND;So;0;AL;;;;;N;;;;;
+06FE;ARABIC SIGN SINDHI POSTPOSITION MEN;So;0;AL;;;;;N;;;;;
+06FF;ARABIC LETTER HEH WITH INVERTED V;Lo;0;AL;;;;;N;;;;;
+FB50;ARABIC LETTER ALEF WASLA ISOLATED FORM;Lo;0;AL;<isolated> 0671;;;;N;;;;;
+FB51;ARABIC LETTER ALEF WASLA FINAL FORM;Lo;0;AL;<final> 0671;;;;N;;;;;
+FB52;ARABIC LETTER BEEH ISOLATED FORM;Lo;0;AL;<isolated> 067B;;;;N;;;;;
+FB53;ARABIC LETTER BEEH FINAL FORM;Lo;0;AL;<final> 067B;;;;N;;;;;
+FB54;ARABIC LETTER BEEH INITIAL FORM;Lo;0;AL;<initial> 067B;;;;N;;;;;
+FB55;ARABIC LETTER BEEH MEDIAL FORM;Lo;0;AL;<medial> 067B;;;;N;;;;;
+FB56;ARABIC LETTER PEH ISOLATED FORM;Lo;0;AL;<isolated> 067E;;;;N;;;;;
+FB57;ARABIC LETTER PEH FINAL FORM;Lo;0;AL;<final> 067E;;;;N;;;;;
+FB58;ARABIC LETTER PEH INITIAL FORM;Lo;0;AL;<initial> 067E;;;;N;;;;;
+FB59;ARABIC LETTER PEH MEDIAL FORM;Lo;0;AL;<medial> 067E;;;;N;;;;;
+FB5A;ARABIC LETTER BEHEH ISOLATED FORM;Lo;0;AL;<isolated> 0680;;;;N;;;;;
+FB5B;ARABIC LETTER BEHEH FINAL FORM;Lo;0;AL;<final> 0680;;;;N;;;;;
+FB5C;ARABIC LETTER BEHEH INITIAL FORM;Lo;0;AL;<initial> 0680;;;;N;;;;;
+FB5D;ARABIC LETTER BEHEH MEDIAL FORM;Lo;0;AL;<medial> 0680;;;;N;;;;;
+FB5E;ARABIC LETTER TTEHEH ISOLATED FORM;Lo;0;AL;<isolated> 067A;;;;N;;;;;
+FB5F;ARABIC LETTER TTEHEH FINAL FORM;Lo;0;AL;<final> 067A;;;;N;;;;;
+FB60;ARABIC LETTER TTEHEH INITIAL FORM;Lo;0;AL;<initial> 067A;;;;N;;;;;
+FB61;ARABIC LETTER TTEHEH MEDIAL FORM;Lo;0;AL;<medial> 067A;;;;N;;;;;
+FB62;ARABIC LETTER TEHEH ISOLATED FORM;Lo;0;AL;<isolated> 067F;;;;N;;;;;
+FB63;ARABIC LETTER TEHEH FINAL FORM;Lo;0;AL;<final> 067F;;;;N;;;;;
+FB64;ARABIC LETTER TEHEH INITIAL FORM;Lo;0;AL;<initial> 067F;;;;N;;;;;
+FB65;ARABIC LETTER TEHEH MEDIAL FORM;Lo;0;AL;<medial> 067F;;;;N;;;;;
+FB66;ARABIC LETTER TTEH ISOLATED FORM;Lo;0;AL;<isolated> 0679;;;;N;;;;;
+FB67;ARABIC LETTER TTEH FINAL FORM;Lo;0;AL;<final> 0679;;;;N;;;;;
+FB68;ARABIC LETTER TTEH INITIAL FORM;Lo;0;AL;<initial> 0679;;;;N;;;;;
+FB69;ARABIC LETTER TTEH MEDIAL FORM;Lo;0;AL;<medial> 0679;;;;N;;;;;
+FB6A;ARABIC LETTER VEH ISOLATED FORM;Lo;0;AL;<isolated> 06A4;;;;N;;;;;
+FB6B;ARABIC LETTER VEH FINAL FORM;Lo;0;AL;<final> 06A4;;;;N;;;;;
+FB6C;ARABIC LETTER VEH INITIAL FORM;Lo;0;AL;<initial> 06A4;;;;N;;;;;
+FB6D;ARABIC LETTER VEH MEDIAL FORM;Lo;0;AL;<medial> 06A4;;;;N;;;;;
+FB6E;ARABIC LETTER PEHEH ISOLATED FORM;Lo;0;AL;<isolated> 06A6;;;;N;;;;;
+FB6F;ARABIC LETTER PEHEH FINAL FORM;Lo;0;AL;<final> 06A6;;;;N;;;;;
+FB70;ARABIC LETTER PEHEH INITIAL FORM;Lo;0;AL;<initial> 06A6;;;;N;;;;;
+FB71;ARABIC LETTER PEHEH MEDIAL FORM;Lo;0;AL;<medial> 06A6;;;;N;;;;;
+FB72;ARABIC LETTER DYEH ISOLATED FORM;Lo;0;AL;<isolated> 0684;;;;N;;;;;
+FB73;ARABIC LETTER DYEH FINAL FORM;Lo;0;AL;<final> 0684;;;;N;;;;;
+FB74;ARABIC LETTER DYEH INITIAL FORM;Lo;0;AL;<initial> 0684;;;;N;;;;;
+FB75;ARABIC LETTER DYEH MEDIAL FORM;Lo;0;AL;<medial> 0684;;;;N;;;;;
+FB76;ARABIC LETTER NYEH ISOLATED FORM;Lo;0;AL;<isolated> 0683;;;;N;;;;;
+FB77;ARABIC LETTER NYEH FINAL FORM;Lo;0;AL;<final> 0683;;;;N;;;;;
+FB78;ARABIC LETTER NYEH INITIAL FORM;Lo;0;AL;<initial> 0683;;;;N;;;;;
+FB79;ARABIC LETTER NYEH MEDIAL FORM;Lo;0;AL;<medial> 0683;;;;N;;;;;
+FB7A;ARABIC LETTER TCHEH ISOLATED FORM;Lo;0;AL;<isolated> 0686;;;;N;;;;;
+FB7B;ARABIC LETTER TCHEH FINAL FORM;Lo;0;AL;<final> 0686;;;;N;;;;;
+FB7C;ARABIC LETTER TCHEH INITIAL FORM;Lo;0;AL;<initial> 0686;;;;N;;;;;
+FB7D;ARABIC LETTER TCHEH MEDIAL FORM;Lo;0;AL;<medial> 0686;;;;N;;;;;
+FB7E;ARABIC LETTER TCHEHEH ISOLATED FORM;Lo;0;AL;<isolated> 0687;;;;N;;;;;
+FB7F;ARABIC LETTER TCHEHEH FINAL FORM;Lo;0;AL;<final> 0687;;;;N;;;;;
+FB80;ARABIC LETTER TCHEHEH INITIAL FORM;Lo;0;AL;<initial> 0687;;;;N;;;;;
+FB81;ARABIC LETTER TCHEHEH MEDIAL FORM;Lo;0;AL;<medial> 0687;;;;N;;;;;
+FB82;ARABIC LETTER DDAHAL ISOLATED FORM;Lo;0;AL;<isolated> 068D;;;;N;;;;;
+FB83;ARABIC LETTER DDAHAL FINAL FORM;Lo;0;AL;<final> 068D;;;;N;;;;;
+FB84;ARABIC LETTER DAHAL ISOLATED FORM;Lo;0;AL;<isolated> 068C;;;;N;;;;;
+FB85;ARABIC LETTER DAHAL FINAL FORM;Lo;0;AL;<final> 068C;;;;N;;;;;
+FB86;ARABIC LETTER DUL ISOLATED FORM;Lo;0;AL;<isolated> 068E;;;;N;;;;;
+FB87;ARABIC LETTER DUL FINAL FORM;Lo;0;AL;<final> 068E;;;;N;;;;;
+FB88;ARABIC LETTER DDAL ISOLATED FORM;Lo;0;AL;<isolated> 0688;;;;N;;;;;
+FB89;ARABIC LETTER DDAL FINAL FORM;Lo;0;AL;<final> 0688;;;;N;;;;;
+FB8A;ARABIC LETTER JEH ISOLATED FORM;Lo;0;AL;<isolated> 0698;;;;N;;;;;
+FB8B;ARABIC LETTER JEH FINAL FORM;Lo;0;AL;<final> 0698;;;;N;;;;;
+FB8C;ARABIC LETTER RREH ISOLATED FORM;Lo;0;AL;<isolated> 0691;;;;N;;;;;
+FB8D;ARABIC LETTER RREH FINAL FORM;Lo;0;AL;<final> 0691;;;;N;;;;;
+FB8E;ARABIC LETTER KEHEH ISOLATED FORM;Lo;0;AL;<isolated> 06A9;;;;N;;;;;
+FB8F;ARABIC LETTER KEHEH FINAL FORM;Lo;0;AL;<final> 06A9;;;;N;;;;;
+FB90;ARABIC LETTER KEHEH INITIAL FORM;Lo;0;AL;<initial> 06A9;;;;N;;;;;
+FB91;ARABIC LETTER KEHEH MEDIAL FORM;Lo;0;AL;<medial> 06A9;;;;N;;;;;
+FB92;ARABIC LETTER GAF ISOLATED FORM;Lo;0;AL;<isolated> 06AF;;;;N;;;;;
+FB93;ARABIC LETTER GAF FINAL FORM;Lo;0;AL;<final> 06AF;;;;N;;;;;
+FB94;ARABIC LETTER GAF INITIAL FORM;Lo;0;AL;<initial> 06AF;;;;N;;;;;
+FB95;ARABIC LETTER GAF MEDIAL FORM;Lo;0;AL;<medial> 06AF;;;;N;;;;;
+FB96;ARABIC LETTER GUEH ISOLATED FORM;Lo;0;AL;<isolated> 06B3;;;;N;;;;;
+FB97;ARABIC LETTER GUEH FINAL FORM;Lo;0;AL;<final> 06B3;;;;N;;;;;
+FB98;ARABIC LETTER GUEH INITIAL FORM;Lo;0;AL;<initial> 06B3;;;;N;;;;;
+FB99;ARABIC LETTER GUEH MEDIAL FORM;Lo;0;AL;<medial> 06B3;;;;N;;;;;
+FB9A;ARABIC LETTER NGOEH ISOLATED FORM;Lo;0;AL;<isolated> 06B1;;;;N;;;;;
+FB9B;ARABIC LETTER NGOEH FINAL FORM;Lo;0;AL;<final> 06B1;;;;N;;;;;
+FB9C;ARABIC LETTER NGOEH INITIAL FORM;Lo;0;AL;<initial> 06B1;;;;N;;;;;
+FB9D;ARABIC LETTER NGOEH MEDIAL FORM;Lo;0;AL;<medial> 06B1;;;;N;;;;;
+FB9E;ARABIC LETTER NOON GHUNNA ISOLATED FORM;Lo;0;AL;<isolated> 06BA;;;;N;;;;;
+FB9F;ARABIC LETTER NOON GHUNNA FINAL FORM;Lo;0;AL;<final> 06BA;;;;N;;;;;
+FBA0;ARABIC LETTER RNOON ISOLATED FORM;Lo;0;AL;<isolated> 06BB;;;;N;;;;;
+FBA1;ARABIC LETTER RNOON FINAL FORM;Lo;0;AL;<final> 06BB;;;;N;;;;;
+FBA2;ARABIC LETTER RNOON INITIAL FORM;Lo;0;AL;<initial> 06BB;;;;N;;;;;
+FBA3;ARABIC LETTER RNOON MEDIAL FORM;Lo;0;AL;<medial> 06BB;;;;N;;;;;
+FBA4;ARABIC LETTER HEH WITH YEH ABOVE ISOLATED FORM;Lo;0;AL;<isolated> 06C0;;;;N;;;;;
+FBA5;ARABIC LETTER HEH WITH YEH ABOVE FINAL FORM;Lo;0;AL;<final> 06C0;;;;N;;;;;
+FBA6;ARABIC LETTER HEH GOAL ISOLATED FORM;Lo;0;AL;<isolated> 06C1;;;;N;;;;;
+FBA7;ARABIC LETTER HEH GOAL FINAL FORM;Lo;0;AL;<final> 06C1;;;;N;;;;;
+FBA8;ARABIC LETTER HEH GOAL INITIAL FORM;Lo;0;AL;<initial> 06C1;;;;N;;;;;
+FBA9;ARABIC LETTER HEH GOAL MEDIAL FORM;Lo;0;AL;<medial> 06C1;;;;N;;;;;
+FBAA;ARABIC LETTER HEH DOACHASHMEE ISOLATED FORM;Lo;0;AL;<isolated> 06BE;;;;N;;;;;
+FBAB;ARABIC LETTER HEH DOACHASHMEE FINAL FORM;Lo;0;AL;<final> 06BE;;;;N;;;;;
+FBAC;ARABIC LETTER HEH DOACHASHMEE INITIAL FORM;Lo;0;AL;<initial> 06BE;;;;N;;;;;
+FBAD;ARABIC LETTER HEH DOACHASHMEE MEDIAL FORM;Lo;0;AL;<medial> 06BE;;;;N;;;;;
+FBAE;ARABIC LETTER YEH BARREE ISOLATED FORM;Lo;0;AL;<isolated> 06D2;;;;N;;;;;
+FBAF;ARABIC LETTER YEH BARREE FINAL FORM;Lo;0;AL;<final> 06D2;;;;N;;;;;
+FBB0;ARABIC LETTER YEH BARREE WITH HAMZA ABOVE ISOLATED FORM;Lo;0;AL;<isolated> 06D3;;;;N;;;;;
+FBB1;ARABIC LETTER YEH BARREE WITH HAMZA ABOVE FINAL FORM;Lo;0;AL;<final> 06D3;;;;N;;;;;
+FBD3;ARABIC LETTER NG ISOLATED FORM;Lo;0;AL;<isolated> 06AD;;;;N;;;;;
+FBD4;ARABIC LETTER NG FINAL FORM;Lo;0;AL;<final> 06AD;;;;N;;;;;
+FBD5;ARABIC LETTER NG INITIAL FORM;Lo;0;AL;<initial> 06AD;;;;N;;;;;
+FBD6;ARABIC LETTER NG MEDIAL FORM;Lo;0;AL;<medial> 06AD;;;;N;;;;;
+FBD7;ARABIC LETTER U ISOLATED FORM;Lo;0;AL;<isolated> 06C7;;;;N;;;;;
+FBD8;ARABIC LETTER U FINAL FORM;Lo;0;AL;<final> 06C7;;;;N;;;;;
+FBD9;ARABIC LETTER OE ISOLATED FORM;Lo;0;AL;<isolated> 06C6;;;;N;;;;;
+FBDA;ARABIC LETTER OE FINAL FORM;Lo;0;AL;<final> 06C6;;;;N;;;;;
+FBDB;ARABIC LETTER YU ISOLATED FORM;Lo;0;AL;<isolated> 06C8;;;;N;;;;;
+FBDC;ARABIC LETTER YU FINAL FORM;Lo;0;AL;<final> 06C8;;;;N;;;;;
+FBDD;ARABIC LETTER U WITH HAMZA ABOVE ISOLATED FORM;Lo;0;AL;<isolated> 0677;;;;N;;;;;
+FBDE;ARABIC LETTER VE ISOLATED FORM;Lo;0;AL;<isolated> 06CB;;;;N;;;;;
+FBDF;ARABIC LETTER VE FINAL FORM;Lo;0;AL;<final> 06CB;;;;N;;;;;
+FBE0;ARABIC LETTER KIRGHIZ OE ISOLATED FORM;Lo;0;AL;<isolated> 06C5;;;;N;;;;;
+FBE1;ARABIC LETTER KIRGHIZ OE FINAL FORM;Lo;0;AL;<final> 06C5;;;;N;;;;;
+FBE2;ARABIC LETTER KIRGHIZ YU ISOLATED FORM;Lo;0;AL;<isolated> 06C9;;;;N;;;;;
+FBE3;ARABIC LETTER KIRGHIZ YU FINAL FORM;Lo;0;AL;<final> 06C9;;;;N;;;;;
+FBE4;ARABIC LETTER E ISOLATED FORM;Lo;0;AL;<isolated> 06D0;;;;N;;;;;
+FBE5;ARABIC LETTER E FINAL FORM;Lo;0;AL;<final> 06D0;;;;N;;;;;
+FBE6;ARABIC LETTER E INITIAL FORM;Lo;0;AL;<initial> 06D0;;;;N;;;;;
+FBE7;ARABIC LETTER E MEDIAL FORM;Lo;0;AL;<medial> 06D0;;;;N;;;;;
+FBE8;ARABIC LETTER UIGHUR KAZAKH KIRGHIZ ALEF MAKSURA INITIAL FORM;Lo;0;AL;<initial> 0649;;;;N;;;;;
+FBE9;ARABIC LETTER UIGHUR KAZAKH KIRGHIZ ALEF MAKSURA MEDIAL FORM;Lo;0;AL;<medial> 0649;;;;N;;;;;
+FBEA;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF ISOLATED FORM;Lo;0;AL;<isolated> 0626 0627;;;;N;;;;;
+FBEB;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF FINAL FORM;Lo;0;AL;<final> 0626 0627;;;;N;;;;;
+FBEC;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH AE ISOLATED FORM;Lo;0;AL;<isolated> 0626 06D5;;;;N;;;;;
+FBED;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH AE FINAL FORM;Lo;0;AL;<final> 0626 06D5;;;;N;;;;;
+FBEE;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH WAW ISOLATED FORM;Lo;0;AL;<isolated> 0626 0648;;;;N;;;;;
+FBEF;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH WAW FINAL FORM;Lo;0;AL;<final> 0626 0648;;;;N;;;;;
+FBF0;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH U ISOLATED FORM;Lo;0;AL;<isolated> 0626 06C7;;;;N;;;;;
+FBF1;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH U FINAL FORM;Lo;0;AL;<final> 0626 06C7;;;;N;;;;;
+FBF2;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH OE ISOLATED FORM;Lo;0;AL;<isolated> 0626 06C6;;;;N;;;;;
+FBF3;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH OE FINAL FORM;Lo;0;AL;<final> 0626 06C6;;;;N;;;;;
+FBF4;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YU ISOLATED FORM;Lo;0;AL;<isolated> 0626 06C8;;;;N;;;;;
+FBF5;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YU FINAL FORM;Lo;0;AL;<final> 0626 06C8;;;;N;;;;;
+FBF6;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH E ISOLATED FORM;Lo;0;AL;<isolated> 0626 06D0;;;;N;;;;;
+FBF7;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH E FINAL FORM;Lo;0;AL;<final> 0626 06D0;;;;N;;;;;
+FBF8;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH E INITIAL FORM;Lo;0;AL;<initial> 0626 06D0;;;;N;;;;;
+FBF9;ARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0626 0649;;;;N;;;;;
+FBFA;ARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0626 0649;;;;N;;;;;
+FBFB;ARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA INITIAL FORM;Lo;0;AL;<initial> 0626 0649;;;;N;;;;;
+FBFC;ARABIC LETTER FARSI YEH ISOLATED FORM;Lo;0;AL;<isolated> 06CC;;;;N;;;;;
+FBFD;ARABIC LETTER FARSI YEH FINAL FORM;Lo;0;AL;<final> 06CC;;;;N;;;;;
+FBFE;ARABIC LETTER FARSI YEH INITIAL FORM;Lo;0;AL;<initial> 06CC;;;;N;;;;;
+FBFF;ARABIC LETTER FARSI YEH MEDIAL FORM;Lo;0;AL;<medial> 06CC;;;;N;;;;;
+FC00;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 0626 062C;;;;N;;;;;
+FC01;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0626 062D;;;;N;;;;;
+FC02;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0626 0645;;;;N;;;;;
+FC03;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0626 0649;;;;N;;;;;
+FC04;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0626 064A;;;;N;;;;;
+FC05;ARABIC LIGATURE BEH WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 0628 062C;;;;N;;;;;
+FC06;ARABIC LIGATURE BEH WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0628 062D;;;;N;;;;;
+FC07;ARABIC LIGATURE BEH WITH KHAH ISOLATED FORM;Lo;0;AL;<isolated> 0628 062E;;;;N;;;;;
+FC08;ARABIC LIGATURE BEH WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0628 0645;;;;N;;;;;
+FC09;ARABIC LIGATURE BEH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0628 0649;;;;N;;;;;
+FC0A;ARABIC LIGATURE BEH WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0628 064A;;;;N;;;;;
+FC0B;ARABIC LIGATURE TEH WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 062A 062C;;;;N;;;;;
+FC0C;ARABIC LIGATURE TEH WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 062A 062D;;;;N;;;;;
+FC0D;ARABIC LIGATURE TEH WITH KHAH ISOLATED FORM;Lo;0;AL;<isolated> 062A 062E;;;;N;;;;;
+FC0E;ARABIC LIGATURE TEH WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 062A 0645;;;;N;;;;;
+FC0F;ARABIC LIGATURE TEH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 062A 0649;;;;N;;;;;
+FC10;ARABIC LIGATURE TEH WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 062A 064A;;;;N;;;;;
+FC11;ARABIC LIGATURE THEH WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 062B 062C;;;;N;;;;;
+FC12;ARABIC LIGATURE THEH WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 062B 0645;;;;N;;;;;
+FC13;ARABIC LIGATURE THEH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 062B 0649;;;;N;;;;;
+FC14;ARABIC LIGATURE THEH WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 062B 064A;;;;N;;;;;
+FC15;ARABIC LIGATURE JEEM WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 062C 062D;;;;N;;;;;
+FC16;ARABIC LIGATURE JEEM WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 062C 0645;;;;N;;;;;
+FC17;ARABIC LIGATURE HAH WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 062D 062C;;;;N;;;;;
+FC18;ARABIC LIGATURE HAH WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 062D 0645;;;;N;;;;;
+FC19;ARABIC LIGATURE KHAH WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 062E 062C;;;;N;;;;;
+FC1A;ARABIC LIGATURE KHAH WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 062E 062D;;;;N;;;;;
+FC1B;ARABIC LIGATURE KHAH WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 062E 0645;;;;N;;;;;
+FC1C;ARABIC LIGATURE SEEN WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 0633 062C;;;;N;;;;;
+FC1D;ARABIC LIGATURE SEEN WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0633 062D;;;;N;;;;;
+FC1E;ARABIC LIGATURE SEEN WITH KHAH ISOLATED FORM;Lo;0;AL;<isolated> 0633 062E;;;;N;;;;;
+FC1F;ARABIC LIGATURE SEEN WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0633 0645;;;;N;;;;;
+FC20;ARABIC LIGATURE SAD WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0635 062D;;;;N;;;;;
+FC21;ARABIC LIGATURE SAD WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0635 0645;;;;N;;;;;
+FC22;ARABIC LIGATURE DAD WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 0636 062C;;;;N;;;;;
+FC23;ARABIC LIGATURE DAD WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0636 062D;;;;N;;;;;
+FC24;ARABIC LIGATURE DAD WITH KHAH ISOLATED FORM;Lo;0;AL;<isolated> 0636 062E;;;;N;;;;;
+FC25;ARABIC LIGATURE DAD WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0636 0645;;;;N;;;;;
+FC26;ARABIC LIGATURE TAH WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0637 062D;;;;N;;;;;
+FC27;ARABIC LIGATURE TAH WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0637 0645;;;;N;;;;;
+FC28;ARABIC LIGATURE ZAH WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0638 0645;;;;N;;;;;
+FC29;ARABIC LIGATURE AIN WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 0639 062C;;;;N;;;;;
+FC2A;ARABIC LIGATURE AIN WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0639 0645;;;;N;;;;;
+FC2B;ARABIC LIGATURE GHAIN WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 063A 062C;;;;N;;;;;
+FC2C;ARABIC LIGATURE GHAIN WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 063A 0645;;;;N;;;;;
+FC2D;ARABIC LIGATURE FEH WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 0641 062C;;;;N;;;;;
+FC2E;ARABIC LIGATURE FEH WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0641 062D;;;;N;;;;;
+FC2F;ARABIC LIGATURE FEH WITH KHAH ISOLATED FORM;Lo;0;AL;<isolated> 0641 062E;;;;N;;;;;
+FC30;ARABIC LIGATURE FEH WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0641 0645;;;;N;;;;;
+FC31;ARABIC LIGATURE FEH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0641 0649;;;;N;;;;;
+FC32;ARABIC LIGATURE FEH WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0641 064A;;;;N;;;;;
+FC33;ARABIC LIGATURE QAF WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0642 062D;;;;N;;;;;
+FC34;ARABIC LIGATURE QAF WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0642 0645;;;;N;;;;;
+FC35;ARABIC LIGATURE QAF WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0642 0649;;;;N;;;;;
+FC36;ARABIC LIGATURE QAF WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0642 064A;;;;N;;;;;
+FC37;ARABIC LIGATURE KAF WITH ALEF ISOLATED FORM;Lo;0;AL;<isolated> 0643 0627;;;;N;;;;;
+FC38;ARABIC LIGATURE KAF WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 0643 062C;;;;N;;;;;
+FC39;ARABIC LIGATURE KAF WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0643 062D;;;;N;;;;;
+FC3A;ARABIC LIGATURE KAF WITH KHAH ISOLATED FORM;Lo;0;AL;<isolated> 0643 062E;;;;N;;;;;
+FC3B;ARABIC LIGATURE KAF WITH LAM ISOLATED FORM;Lo;0;AL;<isolated> 0643 0644;;;;N;;;;;
+FC3C;ARABIC LIGATURE KAF WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0643 0645;;;;N;;;;;
+FC3D;ARABIC LIGATURE KAF WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0643 0649;;;;N;;;;;
+FC3E;ARABIC LIGATURE KAF WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0643 064A;;;;N;;;;;
+FC3F;ARABIC LIGATURE LAM WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 0644 062C;;;;N;;;;;
+FC40;ARABIC LIGATURE LAM WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0644 062D;;;;N;;;;;
+FC41;ARABIC LIGATURE LAM WITH KHAH ISOLATED FORM;Lo;0;AL;<isolated> 0644 062E;;;;N;;;;;
+FC42;ARABIC LIGATURE LAM WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0644 0645;;;;N;;;;;
+FC43;ARABIC LIGATURE LAM WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0644 0649;;;;N;;;;;
+FC44;ARABIC LIGATURE LAM WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0644 064A;;;;N;;;;;
+FC45;ARABIC LIGATURE MEEM WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 0645 062C;;;;N;;;;;
+FC46;ARABIC LIGATURE MEEM WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0645 062D;;;;N;;;;;
+FC47;ARABIC LIGATURE MEEM WITH KHAH ISOLATED FORM;Lo;0;AL;<isolated> 0645 062E;;;;N;;;;;
+FC48;ARABIC LIGATURE MEEM WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0645 0645;;;;N;;;;;
+FC49;ARABIC LIGATURE MEEM WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0645 0649;;;;N;;;;;
+FC4A;ARABIC LIGATURE MEEM WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0645 064A;;;;N;;;;;
+FC4B;ARABIC LIGATURE NOON WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 0646 062C;;;;N;;;;;
+FC4C;ARABIC LIGATURE NOON WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0646 062D;;;;N;;;;;
+FC4D;ARABIC LIGATURE NOON WITH KHAH ISOLATED FORM;Lo;0;AL;<isolated> 0646 062E;;;;N;;;;;
+FC4E;ARABIC LIGATURE NOON WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0646 0645;;;;N;;;;;
+FC4F;ARABIC LIGATURE NOON WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0646 0649;;;;N;;;;;
+FC50;ARABIC LIGATURE NOON WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0646 064A;;;;N;;;;;
+FC51;ARABIC LIGATURE HEH WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 0647 062C;;;;N;;;;;
+FC52;ARABIC LIGATURE HEH WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0647 0645;;;;N;;;;;
+FC53;ARABIC LIGATURE HEH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0647 0649;;;;N;;;;;
+FC54;ARABIC LIGATURE HEH WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0647 064A;;;;N;;;;;
+FC55;ARABIC LIGATURE YEH WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 064A 062C;;;;N;;;;;
+FC56;ARABIC LIGATURE YEH WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 064A 062D;;;;N;;;;;
+FC57;ARABIC LIGATURE YEH WITH KHAH ISOLATED FORM;Lo;0;AL;<isolated> 064A 062E;;;;N;;;;;
+FC58;ARABIC LIGATURE YEH WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 064A 0645;;;;N;;;;;
+FC59;ARABIC LIGATURE YEH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 064A 0649;;;;N;;;;;
+FC5A;ARABIC LIGATURE YEH WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 064A 064A;;;;N;;;;;
+FC5B;ARABIC LIGATURE THAL WITH SUPERSCRIPT ALEF ISOLATED FORM;Lo;0;AL;<isolated> 0630 0670;;;;N;;;;;
+FC5C;ARABIC LIGATURE REH WITH SUPERSCRIPT ALEF ISOLATED FORM;Lo;0;AL;<isolated> 0631 0670;;;;N;;;;;
+FC5D;ARABIC LIGATURE ALEF MAKSURA WITH SUPERSCRIPT ALEF ISOLATED FORM;Lo;0;AL;<isolated> 0649 0670;;;;N;;;;;
+FC5E;ARABIC LIGATURE SHADDA WITH DAMMATAN ISOLATED FORM;Lo;0;AL;<isolated> 0020 064C 0651;;;;N;;;;;
+FC5F;ARABIC LIGATURE SHADDA WITH KASRATAN ISOLATED FORM;Lo;0;AL;<isolated> 0020 064D 0651;;;;N;;;;;
+FC60;ARABIC LIGATURE SHADDA WITH FATHA ISOLATED FORM;Lo;0;AL;<isolated> 0020 064E 0651;;;;N;;;;;
+FC61;ARABIC LIGATURE SHADDA WITH DAMMA ISOLATED FORM;Lo;0;AL;<isolated> 0020 064F 0651;;;;N;;;;;
+FC62;ARABIC LIGATURE SHADDA WITH KASRA ISOLATED FORM;Lo;0;AL;<isolated> 0020 0650 0651;;;;N;;;;;
+FC63;ARABIC LIGATURE SHADDA WITH SUPERSCRIPT ALEF ISOLATED FORM;Lo;0;AL;<isolated> 0020 0651 0670;;;;N;;;;;
+FC64;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH REH FINAL FORM;Lo;0;AL;<final> 0626 0631;;;;N;;;;;
+FC65;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ZAIN FINAL FORM;Lo;0;AL;<final> 0626 0632;;;;N;;;;;
+FC66;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM FINAL FORM;Lo;0;AL;<final> 0626 0645;;;;N;;;;;
+FC67;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH NOON FINAL FORM;Lo;0;AL;<final> 0626 0646;;;;N;;;;;
+FC68;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0626 0649;;;;N;;;;;
+FC69;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YEH FINAL FORM;Lo;0;AL;<final> 0626 064A;;;;N;;;;;
+FC6A;ARABIC LIGATURE BEH WITH REH FINAL FORM;Lo;0;AL;<final> 0628 0631;;;;N;;;;;
+FC6B;ARABIC LIGATURE BEH WITH ZAIN FINAL FORM;Lo;0;AL;<final> 0628 0632;;;;N;;;;;
+FC6C;ARABIC LIGATURE BEH WITH MEEM FINAL FORM;Lo;0;AL;<final> 0628 0645;;;;N;;;;;
+FC6D;ARABIC LIGATURE BEH WITH NOON FINAL FORM;Lo;0;AL;<final> 0628 0646;;;;N;;;;;
+FC6E;ARABIC LIGATURE BEH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0628 0649;;;;N;;;;;
+FC6F;ARABIC LIGATURE BEH WITH YEH FINAL FORM;Lo;0;AL;<final> 0628 064A;;;;N;;;;;
+FC70;ARABIC LIGATURE TEH WITH REH FINAL FORM;Lo;0;AL;<final> 062A 0631;;;;N;;;;;
+FC71;ARABIC LIGATURE TEH WITH ZAIN FINAL FORM;Lo;0;AL;<final> 062A 0632;;;;N;;;;;
+FC72;ARABIC LIGATURE TEH WITH MEEM FINAL FORM;Lo;0;AL;<final> 062A 0645;;;;N;;;;;
+FC73;ARABIC LIGATURE TEH WITH NOON FINAL FORM;Lo;0;AL;<final> 062A 0646;;;;N;;;;;
+FC74;ARABIC LIGATURE TEH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 062A 0649;;;;N;;;;;
+FC75;ARABIC LIGATURE TEH WITH YEH FINAL FORM;Lo;0;AL;<final> 062A 064A;;;;N;;;;;
+FC76;ARABIC LIGATURE THEH WITH REH FINAL FORM;Lo;0;AL;<final> 062B 0631;;;;N;;;;;
+FC77;ARABIC LIGATURE THEH WITH ZAIN FINAL FORM;Lo;0;AL;<final> 062B 0632;;;;N;;;;;
+FC78;ARABIC LIGATURE THEH WITH MEEM FINAL FORM;Lo;0;AL;<final> 062B 0645;;;;N;;;;;
+FC79;ARABIC LIGATURE THEH WITH NOON FINAL FORM;Lo;0;AL;<final> 062B 0646;;;;N;;;;;
+FC7A;ARABIC LIGATURE THEH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 062B 0649;;;;N;;;;;
+FC7B;ARABIC LIGATURE THEH WITH YEH FINAL FORM;Lo;0;AL;<final> 062B 064A;;;;N;;;;;
+FC7C;ARABIC LIGATURE FEH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0641 0649;;;;N;;;;;
+FC7D;ARABIC LIGATURE FEH WITH YEH FINAL FORM;Lo;0;AL;<final> 0641 064A;;;;N;;;;;
+FC7E;ARABIC LIGATURE QAF WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0642 0649;;;;N;;;;;
+FC7F;ARABIC LIGATURE QAF WITH YEH FINAL FORM;Lo;0;AL;<final> 0642 064A;;;;N;;;;;
+FC80;ARABIC LIGATURE KAF WITH ALEF FINAL FORM;Lo;0;AL;<final> 0643 0627;;;;N;;;;;
+FC81;ARABIC LIGATURE KAF WITH LAM FINAL FORM;Lo;0;AL;<final> 0643 0644;;;;N;;;;;
+FC82;ARABIC LIGATURE KAF WITH MEEM FINAL FORM;Lo;0;AL;<final> 0643 0645;;;;N;;;;;
+FC83;ARABIC LIGATURE KAF WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0643 0649;;;;N;;;;;
+FC84;ARABIC LIGATURE KAF WITH YEH FINAL FORM;Lo;0;AL;<final> 0643 064A;;;;N;;;;;
+FC85;ARABIC LIGATURE LAM WITH MEEM FINAL FORM;Lo;0;AL;<final> 0644 0645;;;;N;;;;;
+FC86;ARABIC LIGATURE LAM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0644 0649;;;;N;;;;;
+FC87;ARABIC LIGATURE LAM WITH YEH FINAL FORM;Lo;0;AL;<final> 0644 064A;;;;N;;;;;
+FC88;ARABIC LIGATURE MEEM WITH ALEF FINAL FORM;Lo;0;AL;<final> 0645 0627;;;;N;;;;;
+FC89;ARABIC LIGATURE MEEM WITH MEEM FINAL FORM;Lo;0;AL;<final> 0645 0645;;;;N;;;;;
+FC8A;ARABIC LIGATURE NOON WITH REH FINAL FORM;Lo;0;AL;<final> 0646 0631;;;;N;;;;;
+FC8B;ARABIC LIGATURE NOON WITH ZAIN FINAL FORM;Lo;0;AL;<final> 0646 0632;;;;N;;;;;
+FC8C;ARABIC LIGATURE NOON WITH MEEM FINAL FORM;Lo;0;AL;<final> 0646 0645;;;;N;;;;;
+FC8D;ARABIC LIGATURE NOON WITH NOON FINAL FORM;Lo;0;AL;<final> 0646 0646;;;;N;;;;;
+FC8E;ARABIC LIGATURE NOON WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0646 0649;;;;N;;;;;
+FC8F;ARABIC LIGATURE NOON WITH YEH FINAL FORM;Lo;0;AL;<final> 0646 064A;;;;N;;;;;
+FC90;ARABIC LIGATURE ALEF MAKSURA WITH SUPERSCRIPT ALEF FINAL FORM;Lo;0;AL;<final> 0649 0670;;;;N;;;;;
+FC91;ARABIC LIGATURE YEH WITH REH FINAL FORM;Lo;0;AL;<final> 064A 0631;;;;N;;;;;
+FC92;ARABIC LIGATURE YEH WITH ZAIN FINAL FORM;Lo;0;AL;<final> 064A 0632;;;;N;;;;;
+FC93;ARABIC LIGATURE YEH WITH MEEM FINAL FORM;Lo;0;AL;<final> 064A 0645;;;;N;;;;;
+FC94;ARABIC LIGATURE YEH WITH NOON FINAL FORM;Lo;0;AL;<final> 064A 0646;;;;N;;;;;
+FC95;ARABIC LIGATURE YEH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 064A 0649;;;;N;;;;;
+FC96;ARABIC LIGATURE YEH WITH YEH FINAL FORM;Lo;0;AL;<final> 064A 064A;;;;N;;;;;
+FC97;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0626 062C;;;;N;;;;;
+FC98;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0626 062D;;;;N;;;;;
+FC99;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0626 062E;;;;N;;;;;
+FC9A;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0626 0645;;;;N;;;;;
+FC9B;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HEH INITIAL FORM;Lo;0;AL;<initial> 0626 0647;;;;N;;;;;
+FC9C;ARABIC LIGATURE BEH WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0628 062C;;;;N;;;;;
+FC9D;ARABIC LIGATURE BEH WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0628 062D;;;;N;;;;;
+FC9E;ARABIC LIGATURE BEH WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0628 062E;;;;N;;;;;
+FC9F;ARABIC LIGATURE BEH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0628 0645;;;;N;;;;;
+FCA0;ARABIC LIGATURE BEH WITH HEH INITIAL FORM;Lo;0;AL;<initial> 0628 0647;;;;N;;;;;
+FCA1;ARABIC LIGATURE TEH WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 062A 062C;;;;N;;;;;
+FCA2;ARABIC LIGATURE TEH WITH HAH INITIAL FORM;Lo;0;AL;<initial> 062A 062D;;;;N;;;;;
+FCA3;ARABIC LIGATURE TEH WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 062A 062E;;;;N;;;;;
+FCA4;ARABIC LIGATURE TEH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 062A 0645;;;;N;;;;;
+FCA5;ARABIC LIGATURE TEH WITH HEH INITIAL FORM;Lo;0;AL;<initial> 062A 0647;;;;N;;;;;
+FCA6;ARABIC LIGATURE THEH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 062B 0645;;;;N;;;;;
+FCA7;ARABIC LIGATURE JEEM WITH HAH INITIAL FORM;Lo;0;AL;<initial> 062C 062D;;;;N;;;;;
+FCA8;ARABIC LIGATURE JEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 062C 0645;;;;N;;;;;
+FCA9;ARABIC LIGATURE HAH WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 062D 062C;;;;N;;;;;
+FCAA;ARABIC LIGATURE HAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 062D 0645;;;;N;;;;;
+FCAB;ARABIC LIGATURE KHAH WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 062E 062C;;;;N;;;;;
+FCAC;ARABIC LIGATURE KHAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 062E 0645;;;;N;;;;;
+FCAD;ARABIC LIGATURE SEEN WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0633 062C;;;;N;;;;;
+FCAE;ARABIC LIGATURE SEEN WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0633 062D;;;;N;;;;;
+FCAF;ARABIC LIGATURE SEEN WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0633 062E;;;;N;;;;;
+FCB0;ARABIC LIGATURE SEEN WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0633 0645;;;;N;;;;;
+FCB1;ARABIC LIGATURE SAD WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0635 062D;;;;N;;;;;
+FCB2;ARABIC LIGATURE SAD WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0635 062E;;;;N;;;;;
+FCB3;ARABIC LIGATURE SAD WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0635 0645;;;;N;;;;;
+FCB4;ARABIC LIGATURE DAD WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0636 062C;;;;N;;;;;
+FCB5;ARABIC LIGATURE DAD WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0636 062D;;;;N;;;;;
+FCB6;ARABIC LIGATURE DAD WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0636 062E;;;;N;;;;;
+FCB7;ARABIC LIGATURE DAD WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0636 0645;;;;N;;;;;
+FCB8;ARABIC LIGATURE TAH WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0637 062D;;;;N;;;;;
+FCB9;ARABIC LIGATURE ZAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0638 0645;;;;N;;;;;
+FCBA;ARABIC LIGATURE AIN WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0639 062C;;;;N;;;;;
+FCBB;ARABIC LIGATURE AIN WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0639 0645;;;;N;;;;;
+FCBC;ARABIC LIGATURE GHAIN WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 063A 062C;;;;N;;;;;
+FCBD;ARABIC LIGATURE GHAIN WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 063A 0645;;;;N;;;;;
+FCBE;ARABIC LIGATURE FEH WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0641 062C;;;;N;;;;;
+FCBF;ARABIC LIGATURE FEH WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0641 062D;;;;N;;;;;
+FCC0;ARABIC LIGATURE FEH WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0641 062E;;;;N;;;;;
+FCC1;ARABIC LIGATURE FEH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0641 0645;;;;N;;;;;
+FCC2;ARABIC LIGATURE QAF WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0642 062D;;;;N;;;;;
+FCC3;ARABIC LIGATURE QAF WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0642 0645;;;;N;;;;;
+FCC4;ARABIC LIGATURE KAF WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0643 062C;;;;N;;;;;
+FCC5;ARABIC LIGATURE KAF WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0643 062D;;;;N;;;;;
+FCC6;ARABIC LIGATURE KAF WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0643 062E;;;;N;;;;;
+FCC7;ARABIC LIGATURE KAF WITH LAM INITIAL FORM;Lo;0;AL;<initial> 0643 0644;;;;N;;;;;
+FCC8;ARABIC LIGATURE KAF WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0643 0645;;;;N;;;;;
+FCC9;ARABIC LIGATURE LAM WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0644 062C;;;;N;;;;;
+FCCA;ARABIC LIGATURE LAM WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0644 062D;;;;N;;;;;
+FCCB;ARABIC LIGATURE LAM WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0644 062E;;;;N;;;;;
+FCCC;ARABIC LIGATURE LAM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0644 0645;;;;N;;;;;
+FCCD;ARABIC LIGATURE LAM WITH HEH INITIAL FORM;Lo;0;AL;<initial> 0644 0647;;;;N;;;;;
+FCCE;ARABIC LIGATURE MEEM WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0645 062C;;;;N;;;;;
+FCCF;ARABIC LIGATURE MEEM WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0645 062D;;;;N;;;;;
+FCD0;ARABIC LIGATURE MEEM WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0645 062E;;;;N;;;;;
+FCD1;ARABIC LIGATURE MEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0645 0645;;;;N;;;;;
+FCD2;ARABIC LIGATURE NOON WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0646 062C;;;;N;;;;;
+FCD3;ARABIC LIGATURE NOON WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0646 062D;;;;N;;;;;
+FCD4;ARABIC LIGATURE NOON WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0646 062E;;;;N;;;;;
+FCD5;ARABIC LIGATURE NOON WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0646 0645;;;;N;;;;;
+FCD6;ARABIC LIGATURE NOON WITH HEH INITIAL FORM;Lo;0;AL;<initial> 0646 0647;;;;N;;;;;
+FCD7;ARABIC LIGATURE HEH WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0647 062C;;;;N;;;;;
+FCD8;ARABIC LIGATURE HEH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0647 0645;;;;N;;;;;
+FCD9;ARABIC LIGATURE HEH WITH SUPERSCRIPT ALEF INITIAL FORM;Lo;0;AL;<initial> 0647 0670;;;;N;;;;;
+FCDA;ARABIC LIGATURE YEH WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 064A 062C;;;;N;;;;;
+FCDB;ARABIC LIGATURE YEH WITH HAH INITIAL FORM;Lo;0;AL;<initial> 064A 062D;;;;N;;;;;
+FCDC;ARABIC LIGATURE YEH WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 064A 062E;;;;N;;;;;
+FCDD;ARABIC LIGATURE YEH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 064A 0645;;;;N;;;;;
+FCDE;ARABIC LIGATURE YEH WITH HEH INITIAL FORM;Lo;0;AL;<initial> 064A 0647;;;;N;;;;;
+FCDF;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM MEDIAL FORM;Lo;0;AL;<medial> 0626 0645;;;;N;;;;;
+FCE0;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HEH MEDIAL FORM;Lo;0;AL;<medial> 0626 0647;;;;N;;;;;
+FCE1;ARABIC LIGATURE BEH WITH MEEM MEDIAL FORM;Lo;0;AL;<medial> 0628 0645;;;;N;;;;;
+FCE2;ARABIC LIGATURE BEH WITH HEH MEDIAL FORM;Lo;0;AL;<medial> 0628 0647;;;;N;;;;;
+FCE3;ARABIC LIGATURE TEH WITH MEEM MEDIAL FORM;Lo;0;AL;<medial> 062A 0645;;;;N;;;;;
+FCE4;ARABIC LIGATURE TEH WITH HEH MEDIAL FORM;Lo;0;AL;<medial> 062A 0647;;;;N;;;;;
+FCE5;ARABIC LIGATURE THEH WITH MEEM MEDIAL FORM;Lo;0;AL;<medial> 062B 0645;;;;N;;;;;
+FCE6;ARABIC LIGATURE THEH WITH HEH MEDIAL FORM;Lo;0;AL;<medial> 062B 0647;;;;N;;;;;
+FCE7;ARABIC LIGATURE SEEN WITH MEEM MEDIAL FORM;Lo;0;AL;<medial> 0633 0645;;;;N;;;;;
+FCE8;ARABIC LIGATURE SEEN WITH HEH MEDIAL FORM;Lo;0;AL;<medial> 0633 0647;;;;N;;;;;
+FCE9;ARABIC LIGATURE SHEEN WITH MEEM MEDIAL FORM;Lo;0;AL;<medial> 0634 0645;;;;N;;;;;
+FCEA;ARABIC LIGATURE SHEEN WITH HEH MEDIAL FORM;Lo;0;AL;<medial> 0634 0647;;;;N;;;;;
+FCEB;ARABIC LIGATURE KAF WITH LAM MEDIAL FORM;Lo;0;AL;<medial> 0643 0644;;;;N;;;;;
+FCEC;ARABIC LIGATURE KAF WITH MEEM MEDIAL FORM;Lo;0;AL;<medial> 0643 0645;;;;N;;;;;
+FCED;ARABIC LIGATURE LAM WITH MEEM MEDIAL FORM;Lo;0;AL;<medial> 0644 0645;;;;N;;;;;
+FCEE;ARABIC LIGATURE NOON WITH MEEM MEDIAL FORM;Lo;0;AL;<medial> 0646 0645;;;;N;;;;;
+FCEF;ARABIC LIGATURE NOON WITH HEH MEDIAL FORM;Lo;0;AL;<medial> 0646 0647;;;;N;;;;;
+FCF0;ARABIC LIGATURE YEH WITH MEEM MEDIAL FORM;Lo;0;AL;<medial> 064A 0645;;;;N;;;;;
+FCF1;ARABIC LIGATURE YEH WITH HEH MEDIAL FORM;Lo;0;AL;<medial> 064A 0647;;;;N;;;;;
+FCF2;ARABIC LIGATURE SHADDA WITH FATHA MEDIAL FORM;Lo;0;AL;<medial> 0640 064E 0651;;;;N;;;;;
+FCF3;ARABIC LIGATURE SHADDA WITH DAMMA MEDIAL FORM;Lo;0;AL;<medial> 0640 064F 0651;;;;N;;;;;
+FCF4;ARABIC LIGATURE SHADDA WITH KASRA MEDIAL FORM;Lo;0;AL;<medial> 0640 0650 0651;;;;N;;;;;
+FCF5;ARABIC LIGATURE TAH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0637 0649;;;;N;;;;;
+FCF6;ARABIC LIGATURE TAH WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0637 064A;;;;N;;;;;
+FCF7;ARABIC LIGATURE AIN WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0639 0649;;;;N;;;;;
+FCF8;ARABIC LIGATURE AIN WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0639 064A;;;;N;;;;;
+FCF9;ARABIC LIGATURE GHAIN WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 063A 0649;;;;N;;;;;
+FCFA;ARABIC LIGATURE GHAIN WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 063A 064A;;;;N;;;;;
+FCFB;ARABIC LIGATURE SEEN WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0633 0649;;;;N;;;;;
+FCFC;ARABIC LIGATURE SEEN WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0633 064A;;;;N;;;;;
+FCFD;ARABIC LIGATURE SHEEN WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0634 0649;;;;N;;;;;
+FCFE;ARABIC LIGATURE SHEEN WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0634 064A;;;;N;;;;;
+FCFF;ARABIC LIGATURE HAH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 062D 0649;;;;N;;;;;
+FD00;ARABIC LIGATURE HAH WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 062D 064A;;;;N;;;;;
+FD01;ARABIC LIGATURE JEEM WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 062C 0649;;;;N;;;;;
+FD02;ARABIC LIGATURE JEEM WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 062C 064A;;;;N;;;;;
+FD03;ARABIC LIGATURE KHAH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 062E 0649;;;;N;;;;;
+FD04;ARABIC LIGATURE KHAH WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 062E 064A;;;;N;;;;;
+FD05;ARABIC LIGATURE SAD WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0635 0649;;;;N;;;;;
+FD06;ARABIC LIGATURE SAD WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0635 064A;;;;N;;;;;
+FD07;ARABIC LIGATURE DAD WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0636 0649;;;;N;;;;;
+FD08;ARABIC LIGATURE DAD WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0636 064A;;;;N;;;;;
+FD09;ARABIC LIGATURE SHEEN WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 0634 062C;;;;N;;;;;
+FD0A;ARABIC LIGATURE SHEEN WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0634 062D;;;;N;;;;;
+FD0B;ARABIC LIGATURE SHEEN WITH KHAH ISOLATED FORM;Lo;0;AL;<isolated> 0634 062E;;;;N;;;;;
+FD0C;ARABIC LIGATURE SHEEN WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0634 0645;;;;N;;;;;
+FD0D;ARABIC LIGATURE SHEEN WITH REH ISOLATED FORM;Lo;0;AL;<isolated> 0634 0631;;;;N;;;;;
+FD0E;ARABIC LIGATURE SEEN WITH REH ISOLATED FORM;Lo;0;AL;<isolated> 0633 0631;;;;N;;;;;
+FD0F;ARABIC LIGATURE SAD WITH REH ISOLATED FORM;Lo;0;AL;<isolated> 0635 0631;;;;N;;;;;
+FD10;ARABIC LIGATURE DAD WITH REH ISOLATED FORM;Lo;0;AL;<isolated> 0636 0631;;;;N;;;;;
+FD11;ARABIC LIGATURE TAH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0637 0649;;;;N;;;;;
+FD12;ARABIC LIGATURE TAH WITH YEH FINAL FORM;Lo;0;AL;<final> 0637 064A;;;;N;;;;;
+FD13;ARABIC LIGATURE AIN WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0639 0649;;;;N;;;;;
+FD14;ARABIC LIGATURE AIN WITH YEH FINAL FORM;Lo;0;AL;<final> 0639 064A;;;;N;;;;;
+FD15;ARABIC LIGATURE GHAIN WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 063A 0649;;;;N;;;;;
+FD16;ARABIC LIGATURE GHAIN WITH YEH FINAL FORM;Lo;0;AL;<final> 063A 064A;;;;N;;;;;
+FD17;ARABIC LIGATURE SEEN WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0633 0649;;;;N;;;;;
+FD18;ARABIC LIGATURE SEEN WITH YEH FINAL FORM;Lo;0;AL;<final> 0633 064A;;;;N;;;;;
+FD19;ARABIC LIGATURE SHEEN WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0634 0649;;;;N;;;;;
+FD1A;ARABIC LIGATURE SHEEN WITH YEH FINAL FORM;Lo;0;AL;<final> 0634 064A;;;;N;;;;;
+FD1B;ARABIC LIGATURE HAH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 062D 0649;;;;N;;;;;
+FD1C;ARABIC LIGATURE HAH WITH YEH FINAL FORM;Lo;0;AL;<final> 062D 064A;;;;N;;;;;
+FD1D;ARABIC LIGATURE JEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 062C 0649;;;;N;;;;;
+FD1E;ARABIC LIGATURE JEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 062C 064A;;;;N;;;;;
+FD1F;ARABIC LIGATURE KHAH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 062E 0649;;;;N;;;;;
+FD20;ARABIC LIGATURE KHAH WITH YEH FINAL FORM;Lo;0;AL;<final> 062E 064A;;;;N;;;;;
+FD21;ARABIC LIGATURE SAD WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0635 0649;;;;N;;;;;
+FD22;ARABIC LIGATURE SAD WITH YEH FINAL FORM;Lo;0;AL;<final> 0635 064A;;;;N;;;;;
+FD23;ARABIC LIGATURE DAD WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0636 0649;;;;N;;;;;
+FD24;ARABIC LIGATURE DAD WITH YEH FINAL FORM;Lo;0;AL;<final> 0636 064A;;;;N;;;;;
+FD25;ARABIC LIGATURE SHEEN WITH JEEM FINAL FORM;Lo;0;AL;<final> 0634 062C;;;;N;;;;;
+FD26;ARABIC LIGATURE SHEEN WITH HAH FINAL FORM;Lo;0;AL;<final> 0634 062D;;;;N;;;;;
+FD27;ARABIC LIGATURE SHEEN WITH KHAH FINAL FORM;Lo;0;AL;<final> 0634 062E;;;;N;;;;;
+FD28;ARABIC LIGATURE SHEEN WITH MEEM FINAL FORM;Lo;0;AL;<final> 0634 0645;;;;N;;;;;
+FD29;ARABIC LIGATURE SHEEN WITH REH FINAL FORM;Lo;0;AL;<final> 0634 0631;;;;N;;;;;
+FD2A;ARABIC LIGATURE SEEN WITH REH FINAL FORM;Lo;0;AL;<final> 0633 0631;;;;N;;;;;
+FD2B;ARABIC LIGATURE SAD WITH REH FINAL FORM;Lo;0;AL;<final> 0635 0631;;;;N;;;;;
+FD2C;ARABIC LIGATURE DAD WITH REH FINAL FORM;Lo;0;AL;<final> 0636 0631;;;;N;;;;;
+FD2D;ARABIC LIGATURE SHEEN WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0634 062C;;;;N;;;;;
+FD2E;ARABIC LIGATURE SHEEN WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0634 062D;;;;N;;;;;
+FD2F;ARABIC LIGATURE SHEEN WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0634 062E;;;;N;;;;;
+FD30;ARABIC LIGATURE SHEEN WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0634 0645;;;;N;;;;;
+FD31;ARABIC LIGATURE SEEN WITH HEH INITIAL FORM;Lo;0;AL;<initial> 0633 0647;;;;N;;;;;
+FD32;ARABIC LIGATURE SHEEN WITH HEH INITIAL FORM;Lo;0;AL;<initial> 0634 0647;;;;N;;;;;
+FD33;ARABIC LIGATURE TAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0637 0645;;;;N;;;;;
+FD34;ARABIC LIGATURE SEEN WITH JEEM MEDIAL FORM;Lo;0;AL;<medial> 0633 062C;;;;N;;;;;
+FD35;ARABIC LIGATURE SEEN WITH HAH MEDIAL FORM;Lo;0;AL;<medial> 0633 062D;;;;N;;;;;
+FD36;ARABIC LIGATURE SEEN WITH KHAH MEDIAL FORM;Lo;0;AL;<medial> 0633 062E;;;;N;;;;;
+FD37;ARABIC LIGATURE SHEEN WITH JEEM MEDIAL FORM;Lo;0;AL;<medial> 0634 062C;;;;N;;;;;
+FD38;ARABIC LIGATURE SHEEN WITH HAH MEDIAL FORM;Lo;0;AL;<medial> 0634 062D;;;;N;;;;;
+FD39;ARABIC LIGATURE SHEEN WITH KHAH MEDIAL FORM;Lo;0;AL;<medial> 0634 062E;;;;N;;;;;
+FD3A;ARABIC LIGATURE TAH WITH MEEM MEDIAL FORM;Lo;0;AL;<medial> 0637 0645;;;;N;;;;;
+FD3B;ARABIC LIGATURE ZAH WITH MEEM MEDIAL FORM;Lo;0;AL;<medial> 0638 0645;;;;N;;;;;
+FD3C;ARABIC LIGATURE ALEF WITH FATHATAN FINAL FORM;Lo;0;AL;<final> 0627 064B;;;;N;;;;;
+FD3D;ARABIC LIGATURE ALEF WITH FATHATAN ISOLATED FORM;Lo;0;AL;<isolated> 0627 064B;;;;N;;;;;
+FD3E;ORNATE LEFT PARENTHESIS;Ps;0;ON;;;;;N;;;;;
+FD3F;ORNATE RIGHT PARENTHESIS;Pe;0;ON;;;;;N;;;;;
+FD50;ARABIC LIGATURE TEH WITH JEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 062A 062C 0645;;;;N;;;;;
+FD51;ARABIC LIGATURE TEH WITH HAH WITH JEEM FINAL FORM;Lo;0;AL;<final> 062A 062D 062C;;;;N;;;;;
+FD52;ARABIC LIGATURE TEH WITH HAH WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 062A 062D 062C;;;;N;;;;;
+FD53;ARABIC LIGATURE TEH WITH HAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 062A 062D 0645;;;;N;;;;;
+FD54;ARABIC LIGATURE TEH WITH KHAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 062A 062E 0645;;;;N;;;;;
+FD55;ARABIC LIGATURE TEH WITH MEEM WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 062A 0645 062C;;;;N;;;;;
+FD56;ARABIC LIGATURE TEH WITH MEEM WITH HAH INITIAL FORM;Lo;0;AL;<initial> 062A 0645 062D;;;;N;;;;;
+FD57;ARABIC LIGATURE TEH WITH MEEM WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 062A 0645 062E;;;;N;;;;;
+FD58;ARABIC LIGATURE JEEM WITH MEEM WITH HAH FINAL FORM;Lo;0;AL;<final> 062C 0645 062D;;;;N;;;;;
+FD59;ARABIC LIGATURE JEEM WITH MEEM WITH HAH INITIAL FORM;Lo;0;AL;<initial> 062C 0645 062D;;;;N;;;;;
+FD5A;ARABIC LIGATURE HAH WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 062D 0645 064A;;;;N;;;;;
+FD5B;ARABIC LIGATURE HAH WITH MEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 062D 0645 0649;;;;N;;;;;
+FD5C;ARABIC LIGATURE SEEN WITH HAH WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0633 062D 062C;;;;N;;;;;
+FD5D;ARABIC LIGATURE SEEN WITH JEEM WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0633 062C 062D;;;;N;;;;;
+FD5E;ARABIC LIGATURE SEEN WITH JEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0633 062C 0649;;;;N;;;;;
+FD5F;ARABIC LIGATURE SEEN WITH MEEM WITH HAH FINAL FORM;Lo;0;AL;<final> 0633 0645 062D;;;;N;;;;;
+FD60;ARABIC LIGATURE SEEN WITH MEEM WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0633 0645 062D;;;;N;;;;;
+FD61;ARABIC LIGATURE SEEN WITH MEEM WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0633 0645 062C;;;;N;;;;;
+FD62;ARABIC LIGATURE SEEN WITH MEEM WITH MEEM FINAL FORM;Lo;0;AL;<final> 0633 0645 0645;;;;N;;;;;
+FD63;ARABIC LIGATURE SEEN WITH MEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0633 0645 0645;;;;N;;;;;
+FD64;ARABIC LIGATURE SAD WITH HAH WITH HAH FINAL FORM;Lo;0;AL;<final> 0635 062D 062D;;;;N;;;;;
+FD65;ARABIC LIGATURE SAD WITH HAH WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0635 062D 062D;;;;N;;;;;
+FD66;ARABIC LIGATURE SAD WITH MEEM WITH MEEM FINAL FORM;Lo;0;AL;<final> 0635 0645 0645;;;;N;;;;;
+FD67;ARABIC LIGATURE SHEEN WITH HAH WITH MEEM FINAL FORM;Lo;0;AL;<final> 0634 062D 0645;;;;N;;;;;
+FD68;ARABIC LIGATURE SHEEN WITH HAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0634 062D 0645;;;;N;;;;;
+FD69;ARABIC LIGATURE SHEEN WITH JEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 0634 062C 064A;;;;N;;;;;
+FD6A;ARABIC LIGATURE SHEEN WITH MEEM WITH KHAH FINAL FORM;Lo;0;AL;<final> 0634 0645 062E;;;;N;;;;;
+FD6B;ARABIC LIGATURE SHEEN WITH MEEM WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0634 0645 062E;;;;N;;;;;
+FD6C;ARABIC LIGATURE SHEEN WITH MEEM WITH MEEM FINAL FORM;Lo;0;AL;<final> 0634 0645 0645;;;;N;;;;;
+FD6D;ARABIC LIGATURE SHEEN WITH MEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0634 0645 0645;;;;N;;;;;
+FD6E;ARABIC LIGATURE DAD WITH HAH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0636 062D 0649;;;;N;;;;;
+FD6F;ARABIC LIGATURE DAD WITH KHAH WITH MEEM FINAL FORM;Lo;0;AL;<final> 0636 062E 0645;;;;N;;;;;
+FD70;ARABIC LIGATURE DAD WITH KHAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0636 062E 0645;;;;N;;;;;
+FD71;ARABIC LIGATURE TAH WITH MEEM WITH HAH FINAL FORM;Lo;0;AL;<final> 0637 0645 062D;;;;N;;;;;
+FD72;ARABIC LIGATURE TAH WITH MEEM WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0637 0645 062D;;;;N;;;;;
+FD73;ARABIC LIGATURE TAH WITH MEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0637 0645 0645;;;;N;;;;;
+FD74;ARABIC LIGATURE TAH WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 0637 0645 064A;;;;N;;;;;
+FD75;ARABIC LIGATURE AIN WITH JEEM WITH MEEM FINAL FORM;Lo;0;AL;<final> 0639 062C 0645;;;;N;;;;;
+FD76;ARABIC LIGATURE AIN WITH MEEM WITH MEEM FINAL FORM;Lo;0;AL;<final> 0639 0645 0645;;;;N;;;;;
+FD77;ARABIC LIGATURE AIN WITH MEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0639 0645 0645;;;;N;;;;;
+FD78;ARABIC LIGATURE AIN WITH MEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0639 0645 0649;;;;N;;;;;
+FD79;ARABIC LIGATURE GHAIN WITH MEEM WITH MEEM FINAL FORM;Lo;0;AL;<final> 063A 0645 0645;;;;N;;;;;
+FD7A;ARABIC LIGATURE GHAIN WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 063A 0645 064A;;;;N;;;;;
+FD7B;ARABIC LIGATURE GHAIN WITH MEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 063A 0645 0649;;;;N;;;;;
+FD7C;ARABIC LIGATURE FEH WITH KHAH WITH MEEM FINAL FORM;Lo;0;AL;<final> 0641 062E 0645;;;;N;;;;;
+FD7D;ARABIC LIGATURE FEH WITH KHAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0641 062E 0645;;;;N;;;;;
+FD7E;ARABIC LIGATURE QAF WITH MEEM WITH HAH FINAL FORM;Lo;0;AL;<final> 0642 0645 062D;;;;N;;;;;
+FD7F;ARABIC LIGATURE QAF WITH MEEM WITH MEEM FINAL FORM;Lo;0;AL;<final> 0642 0645 0645;;;;N;;;;;
+FD80;ARABIC LIGATURE LAM WITH HAH WITH MEEM FINAL FORM;Lo;0;AL;<final> 0644 062D 0645;;;;N;;;;;
+FD81;ARABIC LIGATURE LAM WITH HAH WITH YEH FINAL FORM;Lo;0;AL;<final> 0644 062D 064A;;;;N;;;;;
+FD82;ARABIC LIGATURE LAM WITH HAH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0644 062D 0649;;;;N;;;;;
+FD83;ARABIC LIGATURE LAM WITH JEEM WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0644 062C 062C;;;;N;;;;;
+FD84;ARABIC LIGATURE LAM WITH JEEM WITH JEEM FINAL FORM;Lo;0;AL;<final> 0644 062C 062C;;;;N;;;;;
+FD85;ARABIC LIGATURE LAM WITH KHAH WITH MEEM FINAL FORM;Lo;0;AL;<final> 0644 062E 0645;;;;N;;;;;
+FD86;ARABIC LIGATURE LAM WITH KHAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0644 062E 0645;;;;N;;;;;
+FD87;ARABIC LIGATURE LAM WITH MEEM WITH HAH FINAL FORM;Lo;0;AL;<final> 0644 0645 062D;;;;N;;;;;
+FD88;ARABIC LIGATURE LAM WITH MEEM WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0644 0645 062D;;;;N;;;;;
+FD89;ARABIC LIGATURE MEEM WITH HAH WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0645 062D 062C;;;;N;;;;;
+FD8A;ARABIC LIGATURE MEEM WITH HAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0645 062D 0645;;;;N;;;;;
+FD8B;ARABIC LIGATURE MEEM WITH HAH WITH YEH FINAL FORM;Lo;0;AL;<final> 0645 062D 064A;;;;N;;;;;
+FD8C;ARABIC LIGATURE MEEM WITH JEEM WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0645 062C 062D;;;;N;;;;;
+FD8D;ARABIC LIGATURE MEEM WITH JEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0645 062C 0645;;;;N;;;;;
+FD8E;ARABIC LIGATURE MEEM WITH KHAH WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0645 062E 062C;;;;N;;;;;
+FD8F;ARABIC LIGATURE MEEM WITH KHAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0645 062E 0645;;;;N;;;;;
+FD92;ARABIC LIGATURE MEEM WITH JEEM WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0645 062C 062E;;;;N;;;;;
+FD93;ARABIC LIGATURE HEH WITH MEEM WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0647 0645 062C;;;;N;;;;;
+FD94;ARABIC LIGATURE HEH WITH MEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0647 0645 0645;;;;N;;;;;
+FD95;ARABIC LIGATURE NOON WITH HAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0646 062D 0645;;;;N;;;;;
+FD96;ARABIC LIGATURE NOON WITH HAH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0646 062D 0649;;;;N;;;;;
+FD97;ARABIC LIGATURE NOON WITH JEEM WITH MEEM FINAL FORM;Lo;0;AL;<final> 0646 062C 0645;;;;N;;;;;
+FD98;ARABIC LIGATURE NOON WITH JEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0646 062C 0645;;;;N;;;;;
+FD99;ARABIC LIGATURE NOON WITH JEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0646 062C 0649;;;;N;;;;;
+FD9A;ARABIC LIGATURE NOON WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 0646 0645 064A;;;;N;;;;;
+FD9B;ARABIC LIGATURE NOON WITH MEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0646 0645 0649;;;;N;;;;;
+FD9C;ARABIC LIGATURE YEH WITH MEEM WITH MEEM FINAL FORM;Lo;0;AL;<final> 064A 0645 0645;;;;N;;;;;
+FD9D;ARABIC LIGATURE YEH WITH MEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 064A 0645 0645;;;;N;;;;;
+FD9E;ARABIC LIGATURE BEH WITH KHAH WITH YEH FINAL FORM;Lo;0;AL;<final> 0628 062E 064A;;;;N;;;;;
+FD9F;ARABIC LIGATURE TEH WITH JEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 062A 062C 064A;;;;N;;;;;
+FDA0;ARABIC LIGATURE TEH WITH JEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 062A 062C 0649;;;;N;;;;;
+FDA1;ARABIC LIGATURE TEH WITH KHAH WITH YEH FINAL FORM;Lo;0;AL;<final> 062A 062E 064A;;;;N;;;;;
+FDA2;ARABIC LIGATURE TEH WITH KHAH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 062A 062E 0649;;;;N;;;;;
+FDA3;ARABIC LIGATURE TEH WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 062A 0645 064A;;;;N;;;;;
+FDA4;ARABIC LIGATURE TEH WITH MEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 062A 0645 0649;;;;N;;;;;
+FDA5;ARABIC LIGATURE JEEM WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 062C 0645 064A;;;;N;;;;;
+FDA6;ARABIC LIGATURE JEEM WITH HAH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 062C 062D 0649;;;;N;;;;;
+FDA7;ARABIC LIGATURE JEEM WITH MEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 062C 0645 0649;;;;N;;;;;
+FDA8;ARABIC LIGATURE SEEN WITH KHAH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0633 062E 0649;;;;N;;;;;
+FDA9;ARABIC LIGATURE SAD WITH HAH WITH YEH FINAL FORM;Lo;0;AL;<final> 0635 062D 064A;;;;N;;;;;
+FDAA;ARABIC LIGATURE SHEEN WITH HAH WITH YEH FINAL FORM;Lo;0;AL;<final> 0634 062D 064A;;;;N;;;;;
+FDAB;ARABIC LIGATURE DAD WITH HAH WITH YEH FINAL FORM;Lo;0;AL;<final> 0636 062D 064A;;;;N;;;;;
+FDAC;ARABIC LIGATURE LAM WITH JEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 0644 062C 064A;;;;N;;;;;
+FDAD;ARABIC LIGATURE LAM WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 0644 0645 064A;;;;N;;;;;
+FDAE;ARABIC LIGATURE YEH WITH HAH WITH YEH FINAL FORM;Lo;0;AL;<final> 064A 062D 064A;;;;N;;;;;
+FDAF;ARABIC LIGATURE YEH WITH JEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 064A 062C 064A;;;;N;;;;;
+FDB0;ARABIC LIGATURE YEH WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 064A 0645 064A;;;;N;;;;;
+FDB1;ARABIC LIGATURE MEEM WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 0645 0645 064A;;;;N;;;;;
+FDB2;ARABIC LIGATURE QAF WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 0642 0645 064A;;;;N;;;;;
+FDB3;ARABIC LIGATURE NOON WITH HAH WITH YEH FINAL FORM;Lo;0;AL;<final> 0646 062D 064A;;;;N;;;;;
+FDB4;ARABIC LIGATURE QAF WITH MEEM WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0642 0645 062D;;;;N;;;;;
+FDB5;ARABIC LIGATURE LAM WITH HAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0644 062D 0645;;;;N;;;;;
+FDB6;ARABIC LIGATURE AIN WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 0639 0645 064A;;;;N;;;;;
+FDB7;ARABIC LIGATURE KAF WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 0643 0645 064A;;;;N;;;;;
+FDB8;ARABIC LIGATURE NOON WITH JEEM WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0646 062C 062D;;;;N;;;;;
+FDB9;ARABIC LIGATURE MEEM WITH KHAH WITH YEH FINAL FORM;Lo;0;AL;<final> 0645 062E 064A;;;;N;;;;;
+FDBA;ARABIC LIGATURE LAM WITH JEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0644 062C 0645;;;;N;;;;;
+FDBB;ARABIC LIGATURE KAF WITH MEEM WITH MEEM FINAL FORM;Lo;0;AL;<final> 0643 0645 0645;;;;N;;;;;
+FDBC;ARABIC LIGATURE LAM WITH JEEM WITH MEEM FINAL FORM;Lo;0;AL;<final> 0644 062C 0645;;;;N;;;;;
+FDBD;ARABIC LIGATURE NOON WITH JEEM WITH HAH FINAL FORM;Lo;0;AL;<final> 0646 062C 062D;;;;N;;;;;
+FDBE;ARABIC LIGATURE JEEM WITH HAH WITH YEH FINAL FORM;Lo;0;AL;<final> 062C 062D 064A;;;;N;;;;;
+FDBF;ARABIC LIGATURE HAH WITH JEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 062D 062C 064A;;;;N;;;;;
+FDC0;ARABIC LIGATURE MEEM WITH JEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 0645 062C 064A;;;;N;;;;;
+FDC1;ARABIC LIGATURE FEH WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 0641 0645 064A;;;;N;;;;;
+FDC2;ARABIC LIGATURE BEH WITH HAH WITH YEH FINAL FORM;Lo;0;AL;<final> 0628 062D 064A;;;;N;;;;;
+FDC3;ARABIC LIGATURE KAF WITH MEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0643 0645 0645;;;;N;;;;;
+FDC4;ARABIC LIGATURE AIN WITH JEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0639 062C 0645;;;;N;;;;;
+FDC5;ARABIC LIGATURE SAD WITH MEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0635 0645 0645;;;;N;;;;;
+FDC6;ARABIC LIGATURE SEEN WITH KHAH WITH YEH FINAL FORM;Lo;0;AL;<final> 0633 062E 064A;;;;N;;;;;
+FDC7;ARABIC LIGATURE NOON WITH JEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 0646 062C 064A;;;;N;;;;;
+FDF0;ARABIC LIGATURE SALLA USED AS KORANIC STOP SIGN ISOLATED FORM;Lo;0;AL;<isolated> 0635 0644 06D2;;;;N;;;;;
+FDF1;ARABIC LIGATURE QALA USED AS KORANIC STOP SIGN ISOLATED FORM;Lo;0;AL;<isolated> 0642 0644 06D2;;;;N;;;;;
+FDF2;ARABIC LIGATURE ALLAH ISOLATED FORM;Lo;0;AL;<isolated> 0627 0644 0644 0647;;;;N;;;;;
+FDF3;ARABIC LIGATURE AKBAR ISOLATED FORM;Lo;0;AL;<isolated> 0627 0643 0628 0631;;;;N;;;;;
+FDF4;ARABIC LIGATURE MOHAMMAD ISOLATED FORM;Lo;0;AL;<isolated> 0645 062D 0645 062F;;;;N;;;;;
+FDF5;ARABIC LIGATURE SALAM ISOLATED FORM;Lo;0;AL;<isolated> 0635 0644 0639 0645;;;;N;;;;;
+FDF6;ARABIC LIGATURE RASOUL ISOLATED FORM;Lo;0;AL;<isolated> 0631 0633 0648 0644;;;;N;;;;;
+FDF7;ARABIC LIGATURE ALAYHE ISOLATED FORM;Lo;0;AL;<isolated> 0639 0644 064A 0647;;;;N;;;;;
+FDF8;ARABIC LIGATURE WASALLAM ISOLATED FORM;Lo;0;AL;<isolated> 0648 0633 0644 0645;;;;N;;;;;
+FDF9;ARABIC LIGATURE SALLA ISOLATED FORM;Lo;0;AL;<isolated> 0635 0644 0649;;;;N;;;;;
+FDFA;ARABIC LIGATURE SALLALLAHOU ALAYHE WASALLAM;Lo;0;AL;<isolated> 0635 0644 0649 0020 0627 0644 0644 0647 0020 0639 0644 064A 0647 0020 0648 0633 0644 0645;;;;N;ARABIC LETTER SALLALLAHOU ALAYHE WASALLAM;;;;
+FDFB;ARABIC LIGATURE JALLAJALALOUHOU;Lo;0;AL;<isolated> 062C 0644 0020 062C 0644 0627 0644 0647;;;;N;ARABIC LETTER JALLAJALALOUHOU;;;;
+FDFC;RIAL SIGN;Sc;0;AL;<isolated> 0631 06CC 0627 0644;;;;N;;;;;
+FDFD;ARABIC LIGATURE BISMILLAH AR-RAHMAN AR-RAHEEM;So;0;ON;;;;;N;;;;;
+FE00;VARIATION SELECTOR-1;Mn;0;NSM;;;;;N;;;;;
+FE01;VARIATION SELECTOR-2;Mn;0;NSM;;;;;N;;;;;
+FE02;VARIATION SELECTOR-3;Mn;0;NSM;;;;;N;;;;;
+FE03;VARIATION SELECTOR-4;Mn;0;NSM;;;;;N;;;;;
+FE04;VARIATION SELECTOR-5;Mn;0;NSM;;;;;N;;;;;
+FE05;VARIATION SELECTOR-6;Mn;0;NSM;;;;;N;;;;;
+FE06;VARIATION SELECTOR-7;Mn;0;NSM;;;;;N;;;;;
+FE07;VARIATION SELECTOR-8;Mn;0;NSM;;;;;N;;;;;
+FE08;VARIATION SELECTOR-9;Mn;0;NSM;;;;;N;;;;;
+FE09;VARIATION SELECTOR-10;Mn;0;NSM;;;;;N;;;;;
+FE0A;VARIATION SELECTOR-11;Mn;0;NSM;;;;;N;;;;;
+FE0B;VARIATION SELECTOR-12;Mn;0;NSM;;;;;N;;;;;
+FE0C;VARIATION SELECTOR-13;Mn;0;NSM;;;;;N;;;;;
+FE0D;VARIATION SELECTOR-14;Mn;0;NSM;;;;;N;;;;;
+FE0E;VARIATION SELECTOR-15;Mn;0;NSM;;;;;N;;;;;
+FE0F;VARIATION SELECTOR-16;Mn;0;NSM;;;;;N;;;;;
+FE20;COMBINING LIGATURE LEFT HALF;Mn;230;NSM;;;;;N;;;;;
+FE21;COMBINING LIGATURE RIGHT HALF;Mn;230;NSM;;;;;N;;;;;
+FE22;COMBINING DOUBLE TILDE LEFT HALF;Mn;230;NSM;;;;;N;;;;;
+FE23;COMBINING DOUBLE TILDE RIGHT HALF;Mn;230;NSM;;;;;N;;;;;
+FE30;PRESENTATION FORM FOR VERTICAL TWO DOT LEADER;Po;0;ON;<vertical> 2025;;;;N;GLYPH FOR VERTICAL TWO DOT LEADER;;;;
+FE31;PRESENTATION FORM FOR VERTICAL EM DASH;Pd;0;ON;<vertical> 2014;;;;N;GLYPH FOR VERTICAL EM DASH;;;;
+FE32;PRESENTATION FORM FOR VERTICAL EN DASH;Pd;0;ON;<vertical> 2013;;;;N;GLYPH FOR VERTICAL EN DASH;;;;
+FE33;PRESENTATION FORM FOR VERTICAL LOW LINE;Pc;0;ON;<vertical> 005F;;;;N;GLYPH FOR VERTICAL SPACING UNDERSCORE;;;;
+FE34;PRESENTATION FORM FOR VERTICAL WAVY LOW LINE;Pc;0;ON;<vertical> 005F;;;;N;GLYPH FOR VERTICAL SPACING WAVY UNDERSCORE;;;;
+FE35;PRESENTATION FORM FOR VERTICAL LEFT PARENTHESIS;Ps;0;ON;<vertical> 0028;;;;N;GLYPH FOR VERTICAL OPENING PARENTHESIS;;;;
+FE36;PRESENTATION FORM FOR VERTICAL RIGHT PARENTHESIS;Pe;0;ON;<vertical> 0029;;;;N;GLYPH FOR VERTICAL CLOSING PARENTHESIS;;;;
+FE37;PRESENTATION FORM FOR VERTICAL LEFT CURLY BRACKET;Ps;0;ON;<vertical> 007B;;;;N;GLYPH FOR VERTICAL OPENING CURLY BRACKET;;;;
+FE38;PRESENTATION FORM FOR VERTICAL RIGHT CURLY BRACKET;Pe;0;ON;<vertical> 007D;;;;N;GLYPH FOR VERTICAL CLOSING CURLY BRACKET;;;;
+FE39;PRESENTATION FORM FOR VERTICAL LEFT TORTOISE SHELL BRACKET;Ps;0;ON;<vertical> 3014;;;;N;GLYPH FOR VERTICAL OPENING TORTOISE SHELL BRACKET;;;;
+FE3A;PRESENTATION FORM FOR VERTICAL RIGHT TORTOISE SHELL BRACKET;Pe;0;ON;<vertical> 3015;;;;N;GLYPH FOR VERTICAL CLOSING TORTOISE SHELL BRACKET;;;;
+FE3B;PRESENTATION FORM FOR VERTICAL LEFT BLACK LENTICULAR BRACKET;Ps;0;ON;<vertical> 3010;;;;N;GLYPH FOR VERTICAL OPENING BLACK LENTICULAR BRACKET;;;;
+FE3C;PRESENTATION FORM FOR VERTICAL RIGHT BLACK LENTICULAR BRACKET;Pe;0;ON;<vertical> 3011;;;;N;GLYPH FOR VERTICAL CLOSING BLACK LENTICULAR BRACKET;;;;
+FE3D;PRESENTATION FORM FOR VERTICAL LEFT DOUBLE ANGLE BRACKET;Ps;0;ON;<vertical> 300A;;;;N;GLYPH FOR VERTICAL OPENING DOUBLE ANGLE BRACKET;;;;
+FE3E;PRESENTATION FORM FOR VERTICAL RIGHT DOUBLE ANGLE BRACKET;Pe;0;ON;<vertical> 300B;;;;N;GLYPH FOR VERTICAL CLOSING DOUBLE ANGLE BRACKET;;;;
+FE3F;PRESENTATION FORM FOR VERTICAL LEFT ANGLE BRACKET;Ps;0;ON;<vertical> 3008;;;;N;GLYPH FOR VERTICAL OPENING ANGLE BRACKET;;;;
+FE40;PRESENTATION FORM FOR VERTICAL RIGHT ANGLE BRACKET;Pe;0;ON;<vertical> 3009;;;;N;GLYPH FOR VERTICAL CLOSING ANGLE BRACKET;;;;
+FE41;PRESENTATION FORM FOR VERTICAL LEFT CORNER BRACKET;Ps;0;ON;<vertical> 300C;;;;N;GLYPH FOR VERTICAL OPENING CORNER BRACKET;;;;
+FE42;PRESENTATION FORM FOR VERTICAL RIGHT CORNER BRACKET;Pe;0;ON;<vertical> 300D;;;;N;GLYPH FOR VERTICAL CLOSING CORNER BRACKET;;;;
+FE43;PRESENTATION FORM FOR VERTICAL LEFT WHITE CORNER BRACKET;Ps;0;ON;<vertical> 300E;;;;N;GLYPH FOR VERTICAL OPENING WHITE CORNER BRACKET;;;;
+FE44;PRESENTATION FORM FOR VERTICAL RIGHT WHITE CORNER BRACKET;Pe;0;ON;<vertical> 300F;;;;N;GLYPH FOR VERTICAL CLOSING WHITE CORNER BRACKET;;;;
+FE45;SESAME DOT;Po;0;ON;;;;;N;;;;;
+FE46;WHITE SESAME DOT;Po;0;ON;;;;;N;;;;;
+FE47;PRESENTATION FORM FOR VERTICAL LEFT SQUARE BRACKET;Ps;0;ON;<vertical> 005B;;;;N;;;;;
+FE48;PRESENTATION FORM FOR VERTICAL RIGHT SQUARE BRACKET;Pe;0;ON;<vertical> 005D;;;;N;;;;;
+FE49;DASHED OVERLINE;Po;0;ON;<compat> 203E;;;;N;SPACING DASHED OVERSCORE;;;;
+FE4A;CENTRELINE OVERLINE;Po;0;ON;<compat> 203E;;;;N;SPACING CENTERLINE OVERSCORE;;;;
+FE4B;WAVY OVERLINE;Po;0;ON;<compat> 203E;;;;N;SPACING WAVY OVERSCORE;;;;
+FE4C;DOUBLE WAVY OVERLINE;Po;0;ON;<compat> 203E;;;;N;SPACING DOUBLE WAVY OVERSCORE;;;;
+FE4D;DASHED LOW LINE;Pc;0;ON;<compat> 005F;;;;N;SPACING DASHED UNDERSCORE;;;;
+FE4E;CENTRELINE LOW LINE;Pc;0;ON;<compat> 005F;;;;N;SPACING CENTERLINE UNDERSCORE;;;;
+FE4F;WAVY LOW LINE;Pc;0;ON;<compat> 005F;;;;N;SPACING WAVY UNDERSCORE;;;;
+FE50;SMALL COMMA;Po;0;CS;<small> 002C;;;;N;;;;;
+FE51;SMALL IDEOGRAPHIC COMMA;Po;0;ON;<small> 3001;;;;N;;;;;
+FE52;SMALL FULL STOP;Po;0;CS;<small> 002E;;;;N;SMALL PERIOD;;;;
+FE54;SMALL SEMICOLON;Po;0;ON;<small> 003B;;;;N;;;;;
+FE55;SMALL COLON;Po;0;CS;<small> 003A;;;;N;;;;;
+FE56;SMALL QUESTION MARK;Po;0;ON;<small> 003F;;;;N;;;;;
+FE57;SMALL EXCLAMATION MARK;Po;0;ON;<small> 0021;;;;N;;;;;
+FE58;SMALL EM DASH;Pd;0;ON;<small> 2014;;;;N;;;;;
+FE59;SMALL LEFT PARENTHESIS;Ps;0;ON;<small> 0028;;;;N;SMALL OPENING PARENTHESIS;;;;
+FE5A;SMALL RIGHT PARENTHESIS;Pe;0;ON;<small> 0029;;;;N;SMALL CLOSING PARENTHESIS;;;;
+FE5B;SMALL LEFT CURLY BRACKET;Ps;0;ON;<small> 007B;;;;N;SMALL OPENING CURLY BRACKET;;;;
+FE5C;SMALL RIGHT CURLY BRACKET;Pe;0;ON;<small> 007D;;;;N;SMALL CLOSING CURLY BRACKET;;;;
+FE5D;SMALL LEFT TORTOISE SHELL BRACKET;Ps;0;ON;<small> 3014;;;;N;SMALL OPENING TORTOISE SHELL BRACKET;;;;
+FE5E;SMALL RIGHT TORTOISE SHELL BRACKET;Pe;0;ON;<small> 3015;;;;N;SMALL CLOSING TORTOISE SHELL BRACKET;;;;
+FE5F;SMALL NUMBER SIGN;Po;0;ET;<small> 0023;;;;N;;;;;
+FE60;SMALL AMPERSAND;Po;0;ON;<small> 0026;;;;N;;;;;
+FE61;SMALL ASTERISK;Po;0;ON;<small> 002A;;;;N;;;;;
+FE62;SMALL PLUS SIGN;Sm;0;ET;<small> 002B;;;;N;;;;;
+FE63;SMALL HYPHEN-MINUS;Pd;0;ET;<small> 002D;;;;N;;;;;
+FE64;SMALL LESS-THAN SIGN;Sm;0;ON;<small> 003C;;;;N;;;;;
+FE65;SMALL GREATER-THAN SIGN;Sm;0;ON;<small> 003E;;;;N;;;;;
+FE66;SMALL EQUALS SIGN;Sm;0;ON;<small> 003D;;;;N;;;;;
+FE68;SMALL REVERSE SOLIDUS;Po;0;ON;<small> 005C;;;;N;SMALL BACKSLASH;;;;
+FE69;SMALL DOLLAR SIGN;Sc;0;ET;<small> 0024;;;;N;;;;;
+FE6A;SMALL PERCENT SIGN;Po;0;ET;<small> 0025;;;;N;;;;;
+FE6B;SMALL COMMERCIAL AT;Po;0;ON;<small> 0040;;;;N;;;;;
+FE70;ARABIC FATHATAN ISOLATED FORM;Lo;0;AL;<isolated> 0020 064B;;;;N;ARABIC SPACING FATHATAN;;;;
+FE71;ARABIC TATWEEL WITH FATHATAN ABOVE;Lo;0;AL;<medial> 0640 064B;;;;N;ARABIC FATHATAN ON TATWEEL;;;;
+FE72;ARABIC DAMMATAN ISOLATED FORM;Lo;0;AL;<isolated> 0020 064C;;;;N;ARABIC SPACING DAMMATAN;;;;
+FE73;ARABIC TAIL FRAGMENT;Lo;0;AL;;;;;N;;;;;
+FE74;ARABIC KASRATAN ISOLATED FORM;Lo;0;AL;<isolated> 0020 064D;;;;N;ARABIC SPACING KASRATAN;;;;
+FE76;ARABIC FATHA ISOLATED FORM;Lo;0;AL;<isolated> 0020 064E;;;;N;ARABIC SPACING FATHAH;;;;
+FE77;ARABIC FATHA MEDIAL FORM;Lo;0;AL;<medial> 0640 064E;;;;N;ARABIC FATHAH ON TATWEEL;;;;
+FE78;ARABIC DAMMA ISOLATED FORM;Lo;0;AL;<isolated> 0020 064F;;;;N;ARABIC SPACING DAMMAH;;;;
+FE79;ARABIC DAMMA MEDIAL FORM;Lo;0;AL;<medial> 0640 064F;;;;N;ARABIC DAMMAH ON TATWEEL;;;;
+FE7A;ARABIC KASRA ISOLATED FORM;Lo;0;AL;<isolated> 0020 0650;;;;N;ARABIC SPACING KASRAH;;;;
+FE7B;ARABIC KASRA MEDIAL FORM;Lo;0;AL;<medial> 0640 0650;;;;N;ARABIC KASRAH ON TATWEEL;;;;
+FE7C;ARABIC SHADDA ISOLATED FORM;Lo;0;AL;<isolated> 0020 0651;;;;N;ARABIC SPACING SHADDAH;;;;
+FE7D;ARABIC SHADDA MEDIAL FORM;Lo;0;AL;<medial> 0640 0651;;;;N;ARABIC SHADDAH ON TATWEEL;;;;
+FE7E;ARABIC SUKUN ISOLATED FORM;Lo;0;AL;<isolated> 0020 0652;;;;N;ARABIC SPACING SUKUN;;;;
+FE7F;ARABIC SUKUN MEDIAL FORM;Lo;0;AL;<medial> 0640 0652;;;;N;ARABIC SUKUN ON TATWEEL;;;;
+FE80;ARABIC LETTER HAMZA ISOLATED FORM;Lo;0;AL;<isolated> 0621;;;;N;GLYPH FOR ISOLATE ARABIC HAMZAH;;;;
+FE81;ARABIC LETTER ALEF WITH MADDA ABOVE ISOLATED FORM;Lo;0;AL;<isolated> 0622;;;;N;GLYPH FOR ISOLATE ARABIC MADDAH ON ALEF;;;;
+FE82;ARABIC LETTER ALEF WITH MADDA ABOVE FINAL FORM;Lo;0;AL;<final> 0622;;;;N;GLYPH FOR FINAL ARABIC MADDAH ON ALEF;;;;
+FE83;ARABIC LETTER ALEF WITH HAMZA ABOVE ISOLATED FORM;Lo;0;AL;<isolated> 0623;;;;N;GLYPH FOR ISOLATE ARABIC HAMZAH ON ALEF;;;;
+FE84;ARABIC LETTER ALEF WITH HAMZA ABOVE FINAL FORM;Lo;0;AL;<final> 0623;;;;N;GLYPH FOR FINAL ARABIC HAMZAH ON ALEF;;;;
+FE85;ARABIC LETTER WAW WITH HAMZA ABOVE ISOLATED FORM;Lo;0;AL;<isolated> 0624;;;;N;GLYPH FOR ISOLATE ARABIC HAMZAH ON WAW;;;;
+FE86;ARABIC LETTER WAW WITH HAMZA ABOVE FINAL FORM;Lo;0;AL;<final> 0624;;;;N;GLYPH FOR FINAL ARABIC HAMZAH ON WAW;;;;
+FE87;ARABIC LETTER ALEF WITH HAMZA BELOW ISOLATED FORM;Lo;0;AL;<isolated> 0625;;;;N;GLYPH FOR ISOLATE ARABIC HAMZAH UNDER ALEF;;;;
+FE88;ARABIC LETTER ALEF WITH HAMZA BELOW FINAL FORM;Lo;0;AL;<final> 0625;;;;N;GLYPH FOR FINAL ARABIC HAMZAH UNDER ALEF;;;;
+FE89;ARABIC LETTER YEH WITH HAMZA ABOVE ISOLATED FORM;Lo;0;AL;<isolated> 0626;;;;N;GLYPH FOR ISOLATE ARABIC HAMZAH ON YA;;;;
+FE8A;ARABIC LETTER YEH WITH HAMZA ABOVE FINAL FORM;Lo;0;AL;<final> 0626;;;;N;GLYPH FOR FINAL ARABIC HAMZAH ON YA;;;;
+FE8B;ARABIC LETTER YEH WITH HAMZA ABOVE INITIAL FORM;Lo;0;AL;<initial> 0626;;;;N;GLYPH FOR INITIAL ARABIC HAMZAH ON YA;;;;
+FE8C;ARABIC LETTER YEH WITH HAMZA ABOVE MEDIAL FORM;Lo;0;AL;<medial> 0626;;;;N;GLYPH FOR MEDIAL ARABIC HAMZAH ON YA;;;;
+FE8D;ARABIC LETTER ALEF ISOLATED FORM;Lo;0;AL;<isolated> 0627;;;;N;GLYPH FOR ISOLATE ARABIC ALEF;;;;
+FE8E;ARABIC LETTER ALEF FINAL FORM;Lo;0;AL;<final> 0627;;;;N;GLYPH FOR FINAL ARABIC ALEF;;;;
+FE8F;ARABIC LETTER BEH ISOLATED FORM;Lo;0;AL;<isolated> 0628;;;;N;GLYPH FOR ISOLATE ARABIC BAA;;;;
+FE90;ARABIC LETTER BEH FINAL FORM;Lo;0;AL;<final> 0628;;;;N;GLYPH FOR FINAL ARABIC BAA;;;;
+FE91;ARABIC LETTER BEH INITIAL FORM;Lo;0;AL;<initial> 0628;;;;N;GLYPH FOR INITIAL ARABIC BAA;;;;
+FE92;ARABIC LETTER BEH MEDIAL FORM;Lo;0;AL;<medial> 0628;;;;N;GLYPH FOR MEDIAL ARABIC BAA;;;;
+FE93;ARABIC LETTER TEH MARBUTA ISOLATED FORM;Lo;0;AL;<isolated> 0629;;;;N;GLYPH FOR ISOLATE ARABIC TAA MARBUTAH;;;;
+FE94;ARABIC LETTER TEH MARBUTA FINAL FORM;Lo;0;AL;<final> 0629;;;;N;GLYPH FOR FINAL ARABIC TAA MARBUTAH;;;;
+FE95;ARABIC LETTER TEH ISOLATED FORM;Lo;0;AL;<isolated> 062A;;;;N;GLYPH FOR ISOLATE ARABIC TAA;;;;
+FE96;ARABIC LETTER TEH FINAL FORM;Lo;0;AL;<final> 062A;;;;N;GLYPH FOR FINAL ARABIC TAA;;;;
+FE97;ARABIC LETTER TEH INITIAL FORM;Lo;0;AL;<initial> 062A;;;;N;GLYPH FOR INITIAL ARABIC TAA;;;;
+FE98;ARABIC LETTER TEH MEDIAL FORM;Lo;0;AL;<medial> 062A;;;;N;GLYPH FOR MEDIAL ARABIC TAA;;;;
+FE99;ARABIC LETTER THEH ISOLATED FORM;Lo;0;AL;<isolated> 062B;;;;N;GLYPH FOR ISOLATE ARABIC THAA;;;;
+FE9A;ARABIC LETTER THEH FINAL FORM;Lo;0;AL;<final> 062B;;;;N;GLYPH FOR FINAL ARABIC THAA;;;;
+FE9B;ARABIC LETTER THEH INITIAL FORM;Lo;0;AL;<initial> 062B;;;;N;GLYPH FOR INITIAL ARABIC THAA;;;;
+FE9C;ARABIC LETTER THEH MEDIAL FORM;Lo;0;AL;<medial> 062B;;;;N;GLYPH FOR MEDIAL ARABIC THAA;;;;
+FE9D;ARABIC LETTER JEEM ISOLATED FORM;Lo;0;AL;<isolated> 062C;;;;N;GLYPH FOR ISOLATE ARABIC JEEM;;;;
+FE9E;ARABIC LETTER JEEM FINAL FORM;Lo;0;AL;<final> 062C;;;;N;GLYPH FOR FINAL ARABIC JEEM;;;;
+FE9F;ARABIC LETTER JEEM INITIAL FORM;Lo;0;AL;<initial> 062C;;;;N;GLYPH FOR INITIAL ARABIC JEEM;;;;
+FEA0;ARABIC LETTER JEEM MEDIAL FORM;Lo;0;AL;<medial> 062C;;;;N;GLYPH FOR MEDIAL ARABIC JEEM;;;;
+FEA1;ARABIC LETTER HAH ISOLATED FORM;Lo;0;AL;<isolated> 062D;;;;N;GLYPH FOR ISOLATE ARABIC HAA;;;;
+FEA2;ARABIC LETTER HAH FINAL FORM;Lo;0;AL;<final> 062D;;;;N;GLYPH FOR FINAL ARABIC HAA;;;;
+FEA3;ARABIC LETTER HAH INITIAL FORM;Lo;0;AL;<initial> 062D;;;;N;GLYPH FOR INITIAL ARABIC HAA;;;;
+FEA4;ARABIC LETTER HAH MEDIAL FORM;Lo;0;AL;<medial> 062D;;;;N;GLYPH FOR MEDIAL ARABIC HAA;;;;
+FEA5;ARABIC LETTER KHAH ISOLATED FORM;Lo;0;AL;<isolated> 062E;;;;N;GLYPH FOR ISOLATE ARABIC KHAA;;;;
+FEA6;ARABIC LETTER KHAH FINAL FORM;Lo;0;AL;<final> 062E;;;;N;GLYPH FOR FINAL ARABIC KHAA;;;;
+FEA7;ARABIC LETTER KHAH INITIAL FORM;Lo;0;AL;<initial> 062E;;;;N;GLYPH FOR INITIAL ARABIC KHAA;;;;
+FEA8;ARABIC LETTER KHAH MEDIAL FORM;Lo;0;AL;<medial> 062E;;;;N;GLYPH FOR MEDIAL ARABIC KHAA;;;;
+FEA9;ARABIC LETTER DAL ISOLATED FORM;Lo;0;AL;<isolated> 062F;;;;N;GLYPH FOR ISOLATE ARABIC DAL;;;;
+FEAA;ARABIC LETTER DAL FINAL FORM;Lo;0;AL;<final> 062F;;;;N;GLYPH FOR FINAL ARABIC DAL;;;;
+FEAB;ARABIC LETTER THAL ISOLATED FORM;Lo;0;AL;<isolated> 0630;;;;N;GLYPH FOR ISOLATE ARABIC THAL;;;;
+FEAC;ARABIC LETTER THAL FINAL FORM;Lo;0;AL;<final> 0630;;;;N;GLYPH FOR FINAL ARABIC THAL;;;;
+FEAD;ARABIC LETTER REH ISOLATED FORM;Lo;0;AL;<isolated> 0631;;;;N;GLYPH FOR ISOLATE ARABIC RA;;;;
+FEAE;ARABIC LETTER REH FINAL FORM;Lo;0;AL;<final> 0631;;;;N;GLYPH FOR FINAL ARABIC RA;;;;
+FEAF;ARABIC LETTER ZAIN ISOLATED FORM;Lo;0;AL;<isolated> 0632;;;;N;GLYPH FOR ISOLATE ARABIC ZAIN;;;;
+FEB0;ARABIC LETTER ZAIN FINAL FORM;Lo;0;AL;<final> 0632;;;;N;GLYPH FOR FINAL ARABIC ZAIN;;;;
+FEB1;ARABIC LETTER SEEN ISOLATED FORM;Lo;0;AL;<isolated> 0633;;;;N;GLYPH FOR ISOLATE ARABIC SEEN;;;;
+FEB2;ARABIC LETTER SEEN FINAL FORM;Lo;0;AL;<final> 0633;;;;N;GLYPH FOR FINAL ARABIC SEEN;;;;
+FEB3;ARABIC LETTER SEEN INITIAL FORM;Lo;0;AL;<initial> 0633;;;;N;GLYPH FOR INITIAL ARABIC SEEN;;;;
+FEB4;ARABIC LETTER SEEN MEDIAL FORM;Lo;0;AL;<medial> 0633;;;;N;GLYPH FOR MEDIAL ARABIC SEEN;;;;
+FEB5;ARABIC LETTER SHEEN ISOLATED FORM;Lo;0;AL;<isolated> 0634;;;;N;GLYPH FOR ISOLATE ARABIC SHEEN;;;;
+FEB6;ARABIC LETTER SHEEN FINAL FORM;Lo;0;AL;<final> 0634;;;;N;GLYPH FOR FINAL ARABIC SHEEN;;;;
+FEB7;ARABIC LETTER SHEEN INITIAL FORM;Lo;0;AL;<initial> 0634;;;;N;GLYPH FOR INITIAL ARABIC SHEEN;;;;
+FEB8;ARABIC LETTER SHEEN MEDIAL FORM;Lo;0;AL;<medial> 0634;;;;N;GLYPH FOR MEDIAL ARABIC SHEEN;;;;
+FEB9;ARABIC LETTER SAD ISOLATED FORM;Lo;0;AL;<isolated> 0635;;;;N;GLYPH FOR ISOLATE ARABIC SAD;;;;
+FEBA;ARABIC LETTER SAD FINAL FORM;Lo;0;AL;<final> 0635;;;;N;GLYPH FOR FINAL ARABIC SAD;;;;
+FEBB;ARABIC LETTER SAD INITIAL FORM;Lo;0;AL;<initial> 0635;;;;N;GLYPH FOR INITIAL ARABIC SAD;;;;
+FEBC;ARABIC LETTER SAD MEDIAL FORM;Lo;0;AL;<medial> 0635;;;;N;GLYPH FOR MEDIAL ARABIC SAD;;;;
+FEBD;ARABIC LETTER DAD ISOLATED FORM;Lo;0;AL;<isolated> 0636;;;;N;GLYPH FOR ISOLATE ARABIC DAD;;;;
+FEBE;ARABIC LETTER DAD FINAL FORM;Lo;0;AL;<final> 0636;;;;N;GLYPH FOR FINAL ARABIC DAD;;;;
+FEBF;ARABIC LETTER DAD INITIAL FORM;Lo;0;AL;<initial> 0636;;;;N;GLYPH FOR INITIAL ARABIC DAD;;;;
+FEC0;ARABIC LETTER DAD MEDIAL FORM;Lo;0;AL;<medial> 0636;;;;N;GLYPH FOR MEDIAL ARABIC DAD;;;;
+FEC1;ARABIC LETTER TAH ISOLATED FORM;Lo;0;AL;<isolated> 0637;;;;N;GLYPH FOR ISOLATE ARABIC TAH;;;;
+FEC2;ARABIC LETTER TAH FINAL FORM;Lo;0;AL;<final> 0637;;;;N;GLYPH FOR FINAL ARABIC TAH;;;;
+FEC3;ARABIC LETTER TAH INITIAL FORM;Lo;0;AL;<initial> 0637;;;;N;GLYPH FOR INITIAL ARABIC TAH;;;;
+FEC4;ARABIC LETTER TAH MEDIAL FORM;Lo;0;AL;<medial> 0637;;;;N;GLYPH FOR MEDIAL ARABIC TAH;;;;
+FEC5;ARABIC LETTER ZAH ISOLATED FORM;Lo;0;AL;<isolated> 0638;;;;N;GLYPH FOR ISOLATE ARABIC DHAH;;;;
+FEC6;ARABIC LETTER ZAH FINAL FORM;Lo;0;AL;<final> 0638;;;;N;GLYPH FOR FINAL ARABIC DHAH;;;;
+FEC7;ARABIC LETTER ZAH INITIAL FORM;Lo;0;AL;<initial> 0638;;;;N;GLYPH FOR INITIAL ARABIC DHAH;;;;
+FEC8;ARABIC LETTER ZAH MEDIAL FORM;Lo;0;AL;<medial> 0638;;;;N;GLYPH FOR MEDIAL ARABIC DHAH;;;;
+FEC9;ARABIC LETTER AIN ISOLATED FORM;Lo;0;AL;<isolated> 0639;;;;N;GLYPH FOR ISOLATE ARABIC AIN;;;;
+FECA;ARABIC LETTER AIN FINAL FORM;Lo;0;AL;<final> 0639;;;;N;GLYPH FOR FINAL ARABIC AIN;;;;
+FECB;ARABIC LETTER AIN INITIAL FORM;Lo;0;AL;<initial> 0639;;;;N;GLYPH FOR INITIAL ARABIC AIN;;;;
+FECC;ARABIC LETTER AIN MEDIAL FORM;Lo;0;AL;<medial> 0639;;;;N;GLYPH FOR MEDIAL ARABIC AIN;;;;
+FECD;ARABIC LETTER GHAIN ISOLATED FORM;Lo;0;AL;<isolated> 063A;;;;N;GLYPH FOR ISOLATE ARABIC GHAIN;;;;
+FECE;ARABIC LETTER GHAIN FINAL FORM;Lo;0;AL;<final> 063A;;;;N;GLYPH FOR FINAL ARABIC GHAIN;;;;
+FECF;ARABIC LETTER GHAIN INITIAL FORM;Lo;0;AL;<initial> 063A;;;;N;GLYPH FOR INITIAL ARABIC GHAIN;;;;
+FED0;ARABIC LETTER GHAIN MEDIAL FORM;Lo;0;AL;<medial> 063A;;;;N;GLYPH FOR MEDIAL ARABIC GHAIN;;;;
+FED1;ARABIC LETTER FEH ISOLATED FORM;Lo;0;AL;<isolated> 0641;;;;N;GLYPH FOR ISOLATE ARABIC FA;;;;
+FED2;ARABIC LETTER FEH FINAL FORM;Lo;0;AL;<final> 0641;;;;N;GLYPH FOR FINAL ARABIC FA;;;;
+FED3;ARABIC LETTER FEH INITIAL FORM;Lo;0;AL;<initial> 0641;;;;N;GLYPH FOR INITIAL ARABIC FA;;;;
+FED4;ARABIC LETTER FEH MEDIAL FORM;Lo;0;AL;<medial> 0641;;;;N;GLYPH FOR MEDIAL ARABIC FA;;;;
+FED5;ARABIC LETTER QAF ISOLATED FORM;Lo;0;AL;<isolated> 0642;;;;N;GLYPH FOR ISOLATE ARABIC QAF;;;;
+FED6;ARABIC LETTER QAF FINAL FORM;Lo;0;AL;<final> 0642;;;;N;GLYPH FOR FINAL ARABIC QAF;;;;
+FED7;ARABIC LETTER QAF INITIAL FORM;Lo;0;AL;<initial> 0642;;;;N;GLYPH FOR INITIAL ARABIC QAF;;;;
+FED8;ARABIC LETTER QAF MEDIAL FORM;Lo;0;AL;<medial> 0642;;;;N;GLYPH FOR MEDIAL ARABIC QAF;;;;
+FED9;ARABIC LETTER KAF ISOLATED FORM;Lo;0;AL;<isolated> 0643;;;;N;GLYPH FOR ISOLATE ARABIC CAF;;;;
+FEDA;ARABIC LETTER KAF FINAL FORM;Lo;0;AL;<final> 0643;;;;N;GLYPH FOR FINAL ARABIC CAF;;;;
+FEDB;ARABIC LETTER KAF INITIAL FORM;Lo;0;AL;<initial> 0643;;;;N;GLYPH FOR INITIAL ARABIC CAF;;;;
+FEDC;ARABIC LETTER KAF MEDIAL FORM;Lo;0;AL;<medial> 0643;;;;N;GLYPH FOR MEDIAL ARABIC CAF;;;;
+FEDD;ARABIC LETTER LAM ISOLATED FORM;Lo;0;AL;<isolated> 0644;;;;N;GLYPH FOR ISOLATE ARABIC LAM;;;;
+FEDE;ARABIC LETTER LAM FINAL FORM;Lo;0;AL;<final> 0644;;;;N;GLYPH FOR FINAL ARABIC LAM;;;;
+FEDF;ARABIC LETTER LAM INITIAL FORM;Lo;0;AL;<initial> 0644;;;;N;GLYPH FOR INITIAL ARABIC LAM;;;;
+FEE0;ARABIC LETTER LAM MEDIAL FORM;Lo;0;AL;<medial> 0644;;;;N;GLYPH FOR MEDIAL ARABIC LAM;;;;
+FEE1;ARABIC LETTER MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0645;;;;N;GLYPH FOR ISOLATE ARABIC MEEM;;;;
+FEE2;ARABIC LETTER MEEM FINAL FORM;Lo;0;AL;<final> 0645;;;;N;GLYPH FOR FINAL ARABIC MEEM;;;;
+FEE3;ARABIC LETTER MEEM INITIAL FORM;Lo;0;AL;<initial> 0645;;;;N;GLYPH FOR INITIAL ARABIC MEEM;;;;
+FEE4;ARABIC LETTER MEEM MEDIAL FORM;Lo;0;AL;<medial> 0645;;;;N;GLYPH FOR MEDIAL ARABIC MEEM;;;;
+FEE5;ARABIC LETTER NOON ISOLATED FORM;Lo;0;AL;<isolated> 0646;;;;N;GLYPH FOR ISOLATE ARABIC NOON;;;;
+FEE6;ARABIC LETTER NOON FINAL FORM;Lo;0;AL;<final> 0646;;;;N;GLYPH FOR FINAL ARABIC NOON;;;;
+FEE7;ARABIC LETTER NOON INITIAL FORM;Lo;0;AL;<initial> 0646;;;;N;GLYPH FOR INITIAL ARABIC NOON;;;;
+FEE8;ARABIC LETTER NOON MEDIAL FORM;Lo;0;AL;<medial> 0646;;;;N;GLYPH FOR MEDIAL ARABIC NOON;;;;
+FEE9;ARABIC LETTER HEH ISOLATED FORM;Lo;0;AL;<isolated> 0647;;;;N;GLYPH FOR ISOLATE ARABIC HA;;;;
+FEEA;ARABIC LETTER HEH FINAL FORM;Lo;0;AL;<final> 0647;;;;N;GLYPH FOR FINAL ARABIC HA;;;;
+FEEB;ARABIC LETTER HEH INITIAL FORM;Lo;0;AL;<initial> 0647;;;;N;GLYPH FOR INITIAL ARABIC HA;;;;
+FEEC;ARABIC LETTER HEH MEDIAL FORM;Lo;0;AL;<medial> 0647;;;;N;GLYPH FOR MEDIAL ARABIC HA;;;;
+FEED;ARABIC LETTER WAW ISOLATED FORM;Lo;0;AL;<isolated> 0648;;;;N;GLYPH FOR ISOLATE ARABIC WAW;;;;
+FEEE;ARABIC LETTER WAW FINAL FORM;Lo;0;AL;<final> 0648;;;;N;GLYPH FOR FINAL ARABIC WAW;;;;
+FEEF;ARABIC LETTER ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0649;;;;N;GLYPH FOR ISOLATE ARABIC ALEF MAQSURAH;;;;
+FEF0;ARABIC LETTER ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0649;;;;N;GLYPH FOR FINAL ARABIC ALEF MAQSURAH;;;;
+FEF1;ARABIC LETTER YEH ISOLATED FORM;Lo;0;AL;<isolated> 064A;;;;N;GLYPH FOR ISOLATE ARABIC YA;;;;
+FEF2;ARABIC LETTER YEH FINAL FORM;Lo;0;AL;<final> 064A;;;;N;GLYPH FOR FINAL ARABIC YA;;;;
+FEF3;ARABIC LETTER YEH INITIAL FORM;Lo;0;AL;<initial> 064A;;;;N;GLYPH FOR INITIAL ARABIC YA;;;;
+FEF4;ARABIC LETTER YEH MEDIAL FORM;Lo;0;AL;<medial> 064A;;;;N;GLYPH FOR MEDIAL ARABIC YA;;;;
+FEF5;ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE ISOLATED FORM;Lo;0;AL;<isolated> 0644 0622;;;;N;GLYPH FOR ISOLATE ARABIC MADDAH ON LIGATURE LAM ALEF;;;;
+FEF6;ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE FINAL FORM;Lo;0;AL;<final> 0644 0622;;;;N;GLYPH FOR FINAL ARABIC MADDAH ON LIGATURE LAM ALEF;;;;
+FEF7;ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE ISOLATED FORM;Lo;0;AL;<isolated> 0644 0623;;;;N;GLYPH FOR ISOLATE ARABIC HAMZAH ON LIGATURE LAM ALEF;;;;
+FEF8;ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE FINAL FORM;Lo;0;AL;<final> 0644 0623;;;;N;GLYPH FOR FINAL ARABIC HAMZAH ON LIGATURE LAM ALEF;;;;
+FEF9;ARABIC LIGATURE LAM WITH ALEF WITH HAMZA BELOW ISOLATED FORM;Lo;0;AL;<isolated> 0644 0625;;;;N;GLYPH FOR ISOLATE ARABIC HAMZAH UNDER LIGATURE LAM ALEF;;;;
+FEFA;ARABIC LIGATURE LAM WITH ALEF WITH HAMZA BELOW FINAL FORM;Lo;0;AL;<final> 0644 0625;;;;N;GLYPH FOR FINAL ARABIC HAMZAH UNDER LIGATURE LAM ALEF;;;;
+FEFB;ARABIC LIGATURE LAM WITH ALEF ISOLATED FORM;Lo;0;AL;<isolated> 0644 0627;;;;N;GLYPH FOR ISOLATE ARABIC LIGATURE LAM ALEF;;;;
+FEFC;ARABIC LIGATURE LAM WITH ALEF FINAL FORM;Lo;0;AL;<final> 0644 0627;;;;N;GLYPH FOR FINAL ARABIC LIGATURE LAM ALEF;;;;
diff --git a/themes/openSUSE/po/bin/fixpot b/themes/openSUSE/po/bin/fixpot
new file mode 100755
index 0000000..1ed9665
--- /dev/null
+++ b/themes/openSUSE/po/bin/fixpot
@@ -0,0 +1,27 @@
+#! /usr/bin/perl
+
+while(<>) {
+ if(/^\s*#|^\s*$/) { $msg[$cnt]{comment} .= $_; next }
+ if(s/^\s*msgid\b\s*//) { $cnt++; $id = 1 }
+ if(s/^\s*msgstr\b\s*//) { $id = 2 }
+ if($id == 1) { $msg[$cnt - 1]{id} .= $_; next }
+ if($id == 2) { $msg[$cnt - 1]{str} .= $_; next }
+
+ die "oops at line $.\n";
+}
+
+for (@msg) {
+ print $_->{comment};
+
+ next unless defined($_->{id}) && defined($_->{str});
+
+ if($_->{id} =~ /^\s*""\s*$/ || $_->{str} =~ /^\s*""\s*$/) {
+ print "msgid ", $_->{id};
+ print "msgstr ", $_->{str};
+ }
+ else {
+ print "msgid ", $_->{str};
+ print "msgstr \"\"\n";
+ }
+}
+
diff --git a/themes/openSUSE/po/bin/po2txt b/themes/openSUSE/po/bin/po2txt
new file mode 100755
index 0000000..d4e2ab5
--- /dev/null
+++ b/themes/openSUSE/po/bin/po2txt
@@ -0,0 +1,281 @@
+#! /usr/bin/perl
+
+# convert *.po files to texts.* files suitable for gfxboot
+# usage: po2txt lang.po >texts.lang
+# Note: en.po ist treated specially!
+
+use Getopt::Long;
+use Encode;
+
+sub arabic_is_letter;
+sub arabic_read_map;
+sub arabic_conv;
+
+sub read_texts;
+sub join_msg;
+sub fribidi;
+
+$opt_product = "openSUSE";
+
+GetOptions(
+ 'product=s' => \$opt_product,
+ 'verbose|v' => \$opt_arabic_verbose,
+);
+
+
+chomp ($tmp_file = `mktemp /tmp/po2txt.XXXXXXXXXX`);
+
+arabic_read_map;
+
+for $lang (@ARGV) {
+ $lang = 'en' if $lang eq 'bootloader.pot';
+ $lang =~ s/\.po$//;
+ read_texts $lang;
+}
+
+unlink $tmp_file;
+
+
+sub read_texts
+{
+ local $_;
+
+ my ($lang, @f, $txt, $context, $t, $p, $ids, $file);
+
+ $lang = shift;
+
+ $file = "$lang.po";
+ $file = 'bootloader.pot' if $lang eq 'en';
+
+ if($lang eq 'en') {
+ $ids = 1;
+ }
+
+ open F, $file;
+ @f = (<F>);
+ close F;
+
+ map { s/<product>/$opt_product/g; } @f;
+
+ $_ = $lang;
+ s/.*\///;
+
+ for (@f) {
+ if(/^\s*#\.\s*(txt_\S+)/) {
+ if($txt) {
+ @msgstr = @msgid if $ids || join_msg(\@msgstr) eq "";
+ $txts{$txt} = join_msg(\@msgstr);
+ }
+
+ $txt = $1;
+
+ undef @msgid;
+ undef @msgstr;
+ undef $context;
+ next;
+ }
+
+ next if /^\s*#.*|^\s*$/;
+
+ if(/^\s*msgid\s*(\".*\")\s*$/) {
+ push @msgid, $1 unless $1 eq '""';
+ $context = 1;
+ next;
+ }
+
+ if(/^\s*msgstr\s*(\".*\")\s*$/) {
+ push @msgstr, $1 unless $1 eq '""';
+ $context = 2;
+ next;
+ }
+
+ if(/^\s*(\".*\")\s*$/) {
+ if($context == 1) {
+ push @msgid, $1;
+ }
+ elsif($context == 2) {
+ push @msgstr, $1;
+ }
+ else {
+ die "format oops in ${lang}.po: $_"
+ }
+ }
+ }
+
+ if($txt) {
+ @msgstr = @msgid if $ids || join_msg(\@msgstr) eq "";
+ $txts{$txt} = join_msg(\@msgstr);
+ }
+
+ @txts = sort keys %txts;
+
+ for (@txts) {
+ $txt = $txts{$_};
+ $txt =~ s/\\"/"/g;
+ $txt =~ s/\\\\/\\/g;
+ $txt =~ s/\\n/\n/g;
+ $txt = fribidi $txt if $lang =~ /^(ar|he)/;
+ print "$txt\x00"
+ }
+
+ if($ids) {
+ open W, ">text.inc";
+ print W "%\n% This file is generated automatically. Editing it is pointless.\n%\n\n";
+ print W "/texts [\n";
+ $p = pop @txts;
+ for (@txts) { print W " /$_\n" }
+ print W " /$p\n] def\n";
+ close W;
+ }
+ else {
+ open F, "text.inc";
+ for (<F>) {
+ if(/\s+\/(txt_\S+)/) {
+ $txt_ref{$1} = undef;
+ }
+ }
+ close F;
+ for (@txts) {
+ $txt_list{$_}++;
+ $txt_multi{$_} = 1 if $txt_list{$_} > 1;
+ }
+ for (@txts) {
+ $txt_unknown{$_} = 1 unless exists $txt_ref{$_};
+ }
+ for (keys %txt_ref) {
+ $txt_miss{$_} = 1 unless exists $txt_list{$_};
+ }
+
+ if(%txt_miss || %txt_unknown || %txt_multi) {
+ print STDERR "$lang:\n";
+ for (sort keys %txt_miss) {
+ print STDERR " missing: $_\n"
+ }
+ for (sort keys %txt_unknown) {
+ print STDERR " unknown: $_\n"
+ }
+ for (sort keys %txt_multi) {
+ print STDERR " multi: $_\n"
+ }
+ }
+ }
+
+}
+
+
+sub join_msg
+{
+ local $_;
+ my ($s, $msg, $m);
+
+ $msg = shift;
+
+ for $s (@{$msg}) {
+ $_ = $s;
+ s/^\"(.*)\"$/$1/;
+ $m .= $_;
+ }
+
+ return $m;
+}
+
+
+sub fribidi
+{
+ local $_;
+ my $m;
+
+ $m = shift;
+
+ open F, ">$tmp_file";
+ print F arabic_conv($m);
+ close F;
+
+ open F, "cat $tmp_file | fribidi --nopad --nobreak |";
+ $m = undef;
+ while(read F, $_, 0x10000) {
+ $m .= $_;
+ }
+ close F;
+
+ return $m;
+}
+
+
+sub arabic_conv {
+ local $_;
+ my (@c, @m, $i, @attr, @attr_name);
+
+ push @c, 0;
+ push @c, unpack("V*", encode("utf32le", decode("utf8", $_[0])));
+ push @c, 0;
+
+ # isolated: 0, initial: 1, final: 2, medial: 3
+ for ($i = 1; $i < @c - 1; $i++) {
+ next if !arabic_is_letter $c[$i];
+ $attr[$i-1] += 2 if arabic_is_letter $c[$i-1];
+ $attr[$i-1] += 1 if arabic_is_letter $c[$i+1];
+ }
+
+ shift @c;
+ pop @c;
+
+ @attr_name = ( "isolated", "initial", "final", "medial" );
+
+ for ($i = 0; $i < @c; $i++) {
+ $m = $c[$i];
+ if(arabic_is_letter $c[$i]) {
+ $m = $arabic_map->{$c[$i]}{$attr_name[$attr[$i]]};
+ if(!$m && $attr[$i] == 3) { # medial -> final
+ $attr[$i] = 2;
+ $m = $arabic_map->{$c[$i]}{$attr_name[$attr[$i]]};
+ if($m && $i < @c - 1) {
+ if($attr[$i+1] == 3) { # next char: medial -> initial
+ $attr[$i+1] = 1;
+ }
+ elsif($attr[$i+1] == 1) { # next char: initial ->isolated
+ $attr[$i+1] = 0;
+ }
+ }
+ }
+ $m = $c[$i] unless $m;
+ }
+ push @m, $m;
+
+ printf STDERR "%04x -> %04x (%s)\n", $c[$i], $m, $attr_name[$attr[$i]] if $opt_arabic_verbose;
+ }
+
+ return encode("utf8", decode("utf32le", pack("V*", @m)));
+}
+
+
+sub arabic_is_letter
+{
+ return $_[0] >= 0x600 && $_[0] <= 0x6ff ? 1 : 0
+}
+
+
+sub arabic_read_map
+{
+ local $_;
+ my (@i, $u, $m);
+
+ open F, "bin/arabic.txt";
+ while(<F>) {
+ @i = split /;/;
+ $u = hex $i[0];
+ if($i[5] =~ /^<(isolated|initial|final|medial)> (\S{4})$/) {
+ $m = hex $2;
+ if($arabic_map->{$m}{$1}) {
+ printf STDERR "%04x already has a '$1' form: %04x\n", $arabic_map->{$m}{$1}
+ }
+ $arabic_map->{$m}{$1} = $u;
+ # printf STDERR "%04x %s %04x\n", $u, $1, $m;
+ }
+ }
+ close F;
+
+ print STDERR "warning: no arabic support\n" unless $arabic_map
+}
+
+
diff --git a/themes/openSUSE/po/bin/rm_text b/themes/openSUSE/po/bin/rm_text
new file mode 100755
index 0000000..9b96555
--- /dev/null
+++ b/themes/openSUSE/po/bin/rm_text
@@ -0,0 +1,63 @@
+#! /usr/bin/perl
+
+# remove a text from *.po files
+
+sub drop;
+
+die "usage: rm_text id\n" if @ARGV != 1;
+
+$id = shift;
+$id = "txt_$id" unless $id =~ /^txt_/;
+
+mkdir old, 0755;
+
+for $f ("bootloader.pot", <*.po>) {
+ if(open F, $f) {
+ @f = <F>;
+ close F;
+
+ ( $new, $old ) = drop @f;
+ if(open F, ">>old/$f") {
+ print F @$old;
+ close F;
+
+ open F, ">$f";
+ print F @$new;
+ close F;
+ }
+ }
+}
+
+
+sub drop
+{
+ local $_;
+ my (@f, @g, $drop_it, @d);
+
+ for (@_) {
+ push @g, $_;
+ $drop_it = 1 if /^#\.\s*${id}\s*$/;
+ if(/^\s*$/) {
+ if($drop_it) {
+ push @d, @g;
+ }
+ else {
+ push @f, @g;
+ }
+ undef $drop_it;
+ undef @g;
+ }
+ }
+
+ if(@g) {
+ if($drop_it) {
+ push @d, @g;
+ }
+ else {
+ push @f, @g;
+ }
+ }
+
+ return ( \@f, \@d );
+}
+
diff --git a/themes/openSUSE/po/bn.po_disabled b/themes/openSUSE/po/bn.po_disabled
new file mode 100644
index 0000000..d7791de
--- /dev/null
+++ b/themes/openSUSE/po/bn.po_disabled
@@ -0,0 +1,422 @@
+# LANGUAGE translations for boot loader
+# Copyright (C) 2005 SUSE Linux GmbH
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: @PACKAGE@\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2007-03-07 18:59+0100\n"
+"PO-Revision-Date: 2005-07-29 15:37+0530\n"
+"Last-Translator: Priyavert Sharma<priyavert.sharma@agreeya.com>\n"
+"Language-Team: AgreeYa Solutions <linux_team@agreeya.com>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"#-#-#-#-# bootloader.bn.po (@PACKAGE@) #-#-#-#-#\n"
+"Plural-Forms: nplurals=2; plural=(n!=1);\n"
+"\n"
+
+#. ok button label
+#. txt_ok
+msgid "OK"
+msgstr "OK"
+
+#. cancel button label
+#. txt_cancel
+msgid "Cancel"
+msgstr "বাতিল"
+
+#. reboot button label
+#. txt_reboot
+msgid "Reboot"
+msgstr "রিবুট"
+
+#. continue button label
+#. txt_continue
+msgid "Continue"
+msgstr "ক্রমাগত"
+
+#. txt_install
+msgid "Installation"
+msgstr "স্থাপন"
+
+#. txt_manual_install
+msgid "Manual Installation"
+msgstr "নিজের হাতে স্থাপন"
+
+#. txt_noacpi_install
+msgid "Installation--ACPI Disabled"
+msgstr "স্থাপন--ACPI অসমর্থ"
+
+#. txt_safe_install
+msgid "Installation--Safe Settings"
+msgstr "স্থাপন--সেটিংগুলি সুরক্ষিত করুন"
+
+#. txt_safe_linux
+msgid "Linux--Safe Settings"
+msgstr "লিনাক্স--সেটিংসমূহ সুরক্ষিত করুন"
+
+#. txt_boot_harddisk
+msgid "Boot from Hard Disk"
+msgstr "হার্ড ডিস্ক থেকে বুট করুন"
+
+#. txt_rescue
+msgid "Rescue System"
+msgstr "সিস্টেম উদ্ধার করুন"
+
+#. txt_memtest
+msgid "Memory Test"
+msgstr "মেমরি টেস্ট"
+
+#. txt_bootoptions
+msgid "Boot Options"
+msgstr "বুট বিকল্পসমূহ"
+
+#. window title for exit dialog
+#. txt_exit_title (see txt_exit_dialog)
+msgid "Exiting..."
+msgstr "মজুদ করছি..."
+
+#. txt_exit_dialog
+msgid ""
+"You are leaving the graphical boot menu and\n"
+"starting the text mode interface."
+msgstr ""
+"আপনি গ্রাফিকাল বুট মেনু ছেড়ে যাচ্ছেন এবং রচনাশর্ত\n"
+" ইন্টারফেস শুরু করছে."
+
+#. txt_help
+msgid "Help"
+msgstr "হেল্প"
+
+#. window title for kernel loading (see txt_load_kernel)
+#. txt_load_kernel_title
+msgid "Starting..."
+msgstr "স্টর্টিং..."
+
+#. Keep the three newlines!
+#. txt_load_kernel
+msgid ""
+"Loading Linux Kernel\n"
+"\n"
+"\n"
+msgstr ""
+"লিনাক্স কার্নেল লোড করছি\n"
+"\n"
+"\n"
+
+#. Keep the three newlines!
+#. txt_load_memtest
+msgid ""
+"Loading memtest86\n"
+"\n"
+"\n"
+msgstr ""
+" memtest86 লোড করছি\n"
+"\n"
+"\n"
+
+#. info box title
+#. txt_info_title
+msgid "Boot Loader"
+msgstr "বুট লোডার"
+
+#. error box title
+#. txt_error_title
+msgid "I/O Error"
+msgstr "I/O ত্রুটি"
+
+#. boot disk change dialog title
+#. txt_change_disk_title
+msgid "Change Boot Disk"
+msgstr "বুট ডিস্ক পরিবর্তন করুন"
+
+#. txt_insert_disk
+#, c-format
+msgid "Insert boot disk %u."
+msgstr "%u বুড ডিস্ক প্রবিষ্ট করুন."
+
+#. txt_insert_disk2
+#, c-format
+msgid ""
+"This is boot disk %u.\n"
+"Insert boot disk %u."
+msgstr ""
+"এটা বুড ডিস্ক %u.\n"
+"বুট ডিস্ক %u প্রবিষ্ট করুন."
+
+#. <product> is e.g. SuSE Linux X.Y or Enterprise Server Z
+#. txt_insert_disk3
+#, c-format
+msgid ""
+"This is not a <product> boot disk.\n"
+"Insert boot disk %u."
+msgstr ""
+"এটা <প্রোডাক্ট> বুট ডিস্ক নয়.\n"
+"বুট ডিস্ক %u প্রবিষ্ট করুন."
+
+#. password dialog title
+#. txt_password_title
+msgid "Password"
+msgstr "পাসওয়ার্ড"
+
+#. txt_dud_ready
+msgid "Get your driver update floppy ready."
+msgstr "আপনার ড্রাইভার আপডেট ফ্লপি রেডি নিন."
+
+#. dvd warning title
+#. txt_dvd_warning_title
+msgid "DVD Error"
+msgstr "DVD ত্রুটি"
+
+#. txt_dvd_warning2
+msgid ""
+"This is a two-sided DVD. You have booted from the second side.\n"
+"\n"
+"Turn the DVD over then continue."
+msgstr ""
+"একটা একটা দুদিকের DVD. আপনি দ্বিতীয় দিক থকে বুট করেছেন.\n"
+"\n"
+"DVD র দিকে পাল্টে তারপর চালাতে থাকুন."
+
+#. power off dialog title
+#. txt_power_off_title
+msgid "Power Off"
+msgstr "পাওয়ার অফ"
+
+#. txt_power_off
+msgid "Halt the system now?"
+msgstr "সিস্টেম কি বন্ধ করব?"
+
+#. menu entry for hard disk installation
+#. txt_harddisk
+msgid "Hard Disk"
+msgstr "হার্ড ডিস্ক"
+
+#. dialog title for hard disk installation
+#. txt_harddisk_title
+msgid "Hard Disk Installation"
+msgstr "হার্ড ডিস্ক স্থাপন"
+
+#. txt_hd_diskdevice
+msgid "Disk Device (Scans All Disks If Empty)\n"
+msgstr "ডিস্ক সরঞ্জাম (যদি খালি থাকে সমস্ত ডিস্কগুলি স্ক্যান করুন)\n"
+
+#. txt_directory
+msgid "Directory\n"
+msgstr "ডাইরেক্টরি\n"
+
+#. dialog title for ftp installation
+#. txt_ftp_title
+msgid "FTP Installation"
+msgstr "FTP স্থাপন"
+
+#. txt_server
+msgid "Server\n"
+msgstr "সার্ভার\n"
+
+#. txt_password
+msgid "Password\n"
+msgstr "পাসওয়ার্ড\n"
+
+#. label for ftp user input
+#. txt_user1
+msgid "User (Anonymous Login If Empty)\n"
+msgstr "ব্যবহারকারী(যদি খালি এনোমাস লগইন করুন)\n"
+
+#. dialog title for nfs installation
+#. txt_nfs_title
+msgid "NFS Installation"
+msgstr "NFS স্থাপন"
+
+#. label for smb user input
+#. txt_user2
+msgid "User (Uses \"guest\" If Empty)\n"
+msgstr "ব্যবহারকারী(ব্যবহার করছি \"guest\" যদি খালি থাকে)\n"
+
+#. dialog title for smb installation
+#. txt_smb_title
+msgid "SMB (Windows Share) Installation"
+msgstr "SMB (উইণ্ডোস শেয়ার) স্থাপন"
+
+#. dialog title for http installation
+#. txt_http_title
+msgid "HTTP Installation"
+msgstr "HTTP স্থাপন"
+
+#. 'driver' as in '(hardware) driver update'
+#. txt_driver_update
+msgid "Driver"
+msgstr "ড্রাইভার"
+
+#. as in Windows Authentication Domain
+#. txt_domain
+msgid "Domain\n"
+msgstr "ডোমেন\n"
+
+#. button label for other/more options
+#. txt_other_options
+msgid "Other Options"
+msgstr "অন্য বিকল্পসমূহ"
+
+#. label for language selection
+#. txt_language
+msgid "Language"
+msgstr "ভাষা"
+
+#. txt_apic
+msgid "Installation--IOAPIC Enabled"
+msgstr "স্থাপন--IOAPIC সমর্থিত"
+
+#. txt_noapic_install
+msgid "Installation--IOAPIC Disabled"
+msgstr "স্থাপন--IOAPIC অসমর্থিত"
+
+#. txt_nolapic_install
+msgid "Installation--Local APIC Disabled"
+msgstr "স্থাপন--লোকাল APIC অসমর্থিত"
+
+#. txt_yes
+msgid "Yes"
+msgstr "হ্যাঁ"
+
+#. txt_no
+msgid "No"
+msgstr "না"
+
+#. menu item for selecting a file
+#. txt_file
+msgid "File"
+msgstr "ফাইল"
+
+#. input label: share as in "Windows share" (SMB)
+#. txt_share
+msgid "Share\n"
+msgstr "শেয়ার\n"
+
+#. txt_zenAuto
+msgid "Automatic Mode"
+msgstr "স্বয়ংক্রিয় শর্ত"
+
+#. txt_zenManual
+msgid "Manual Mode"
+msgstr "ম্যানুয়াল শর্ত"
+
+#. txt_zenConfig
+msgid "Configure Parameters on ZEN Partition"
+msgstr "ZEN পার্টিশনে প্যারমিটার গঠন করুন"
+
+#. txt_zenInstall
+msgid "Install or Update ZEN Partition"
+msgstr "ZEN পার্টিশন ইনস্টল/আপডেট করুন"
+
+#. txt_zenLilo
+msgid "Reinstall ZEN Partition Boot Loader"
+msgstr "ZEN পার্টিশন বুট লোডার পুনরায় ইনস্টল করুন"
+
+#. txt_zenDisable
+msgid "Disable ZEN Partition"
+msgstr "ZEN পার্টিশন অসমর্থ করুন"
+
+#. txt_zenEnable
+msgid "Enable ZEN Partition"
+msgstr "ZEN পার্টিশন সমর্থ করুন"
+
+#. video mode menu item
+#. txt_text_mode
+msgid "Text Mode"
+msgstr "পাঠ্যাংশ মোড"
+
+#. menu item, like 'memory test'
+#. txt_firmware
+msgid "Firmware Test"
+msgstr "ফার্মওয়্যার পরীক্ষণ"
+
+#. txt_dud_file_msg
+msgid ""
+"To load driver updates directly from CD-ROM,\n"
+"enter the driver update file names (separated\n"
+"by commas ',') here:\n"
+msgstr ""
+"সরাসরি CD-ROM থেকে ড্রাইভারের আপডেট ভরার জন্যে\n"
+"ড্রাইভার আপডেটের ফাইলের নামগুলি প্রবিষ্ট করুন (কমা দ্বারা\n"
+"পৃথকীকৃত ',') এখানে:\n"
+
+#. install source menu title
+#. ** please keep it really short (comparable to the english text) **
+#. txt_install_source
+msgid "Source"
+msgstr "উত্‍স"
+
+#. video mode/display size menu title
+#. ** please keep it really short (comparable to the english text) **
+#. txt_video_mode
+msgid "Video Mode"
+msgstr ""
+
+#. driver update dialog title
+#. -> txt_dud_file_msg
+#. txt_driver_update2
+msgid "Driver Update"
+msgstr ""
+
+#. menu label for selecting (cpu) architecture
+#. like i386, x86-64, ppc
+#. ** please keep it really short (comparable to the english text) **
+#. txt_arch
+msgid "Arch"
+msgstr "আর্ক"
+
+#. menu label for selecting some (linux) kernel variant
+#. ** please keep it really short (comparable to the english text) **
+#. txt_kernel
+msgid "Kernel"
+msgstr ""
+
+#. menu item for kernel variant (cf. txt_kernel)
+#. txt_kernel_default
+msgid "Default"
+msgstr ""
+
+#. menu item for kernel variant (cf. txt_kernel)
+#. -> like in txt_safe_linux
+#. txt_kernel_safe
+msgid "Safe Settings"
+msgstr ""
+
+#. menu item for kernel variant (cf. txt_kernel)
+#. -> similar to txt_noacpi_install
+#. txt_kernel_noacpi
+msgid "No ACPI"
+msgstr ""
+
+#. menu item for kernel variant (cf. txt_kernel)
+#. -> similar to txt_nolapic_install
+#. txt_kernel_nolapic
+msgid "No Local APIC"
+msgstr ""
+
+#. main menu: start in system repair mode
+#. txt_repain_system
+msgid "Repair Installed System"
+msgstr ""
+
+#. menu item
+#. txt_mediacheck
+msgid "Check Installation Media"
+msgstr ""
+
+#. menu item for keyboard layout (please keep it short)
+#. txt_keyboard
+msgid "Keyboard"
+msgstr "কিবোর্ড"
+
+#. menu title
+#. txt_dud_download
+msgid "Download Driver Update"
+msgstr ""
+
+#. input label
+#. txt_dud_enter_url
+msgid "Enter Driver Update URL\n"
+msgstr ""
diff --git a/themes/openSUSE/po/bootloader.pot b/themes/openSUSE/po/bootloader.pot
new file mode 100644
index 0000000..96bd942
--- /dev/null
+++ b/themes/openSUSE/po/bootloader.pot
@@ -0,0 +1,425 @@
+# LANGUAGE translations for boot loader
+# Copyright (C) 2005 SUSE Linux GmbH
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: bootloader\n"
+"PO-Revision-Date: 2005-07-27 11:49+0200\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <i18n@suse.de>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. ok button label
+#. txt_ok
+msgid "OK"
+msgstr ""
+
+#. cancel button label
+#. txt_cancel
+msgid "Cancel"
+msgstr ""
+
+#. reboot button label
+#. txt_reboot
+msgid "Reboot"
+msgstr ""
+
+#. continue button label
+#. txt_continue
+msgid "Continue"
+msgstr ""
+
+#. txt_install
+msgid "Installation"
+msgstr ""
+
+#. txt_safe_linux
+msgid "Linux--Safe Settings"
+msgstr ""
+
+#. txt_boot_harddisk
+msgid "Boot from Hard Disk"
+msgstr ""
+
+#. txt_rescue
+msgid "Rescue System"
+msgstr ""
+
+#. txt_memtest
+msgid "Memory Test"
+msgstr ""
+
+#. txt_bootoptions
+msgid "Boot Options"
+msgstr ""
+
+#. window title for exit dialog
+#. txt_exit_title (see txt_exit_dialog)
+msgid "Exiting..."
+msgstr ""
+
+#. txt_exit_dialog
+msgid ""
+"You are leaving the graphical boot menu and\n"
+"starting the text mode interface."
+msgstr ""
+
+#. txt_help
+msgid "Help"
+msgstr ""
+
+#. window title for kernel loading (see txt_load_kernel)
+#. txt_load_kernel_title
+msgid "Starting..."
+msgstr ""
+
+#. Keep the three newlines!
+#. txt_load_kernel
+msgid ""
+"Loading Linux Kernel\n"
+"\n"
+"\n"
+msgstr ""
+
+#. Keep the three newlines!
+#. txt_load_memtest
+msgid ""
+"Loading memtest86\n"
+"\n"
+"\n"
+msgstr ""
+
+#. info box title
+#. txt_info_title
+msgid "Boot Loader"
+msgstr ""
+
+#. error box title
+#. txt_error_title
+msgid "I/O Error"
+msgstr ""
+
+#. boot disk change dialog title
+#. txt_change_disk_title
+msgid "Change Boot Disk"
+msgstr ""
+
+#. txt_insert_disk
+#, c-format
+msgid "Insert boot disk %u."
+msgstr ""
+
+#. txt_insert_disk2
+#, c-format
+msgid ""
+"This is boot disk %u.\n"
+"Insert boot disk %u."
+msgstr ""
+
+#. <product> is e.g. SuSE Linux X.Y or Enterprise Server Z
+#. txt_insert_disk3
+#, c-format
+msgid ""
+"This is not a <product> boot disk.\n"
+"Insert boot disk %u."
+msgstr ""
+
+#. password dialog title
+#. txt_password_title
+msgid "Password"
+msgstr ""
+
+#. txt_dud_ready
+msgid "Get your driver update floppy ready."
+msgstr ""
+
+#. power off dialog title
+#. txt_power_off_title
+msgid "Power Off"
+msgstr ""
+
+#. txt_power_off
+msgid "Halt the system now?"
+msgstr ""
+
+#. menu entry for hard disk installation
+#. txt_harddisk
+msgid "Hard Disk"
+msgstr ""
+
+#. dialog title for hard disk installation
+#. txt_harddisk_title
+msgid "Hard Disk Installation"
+msgstr ""
+
+#. txt_hd_diskdevice
+msgid "Disk Device (Scans All Disks If Empty)\n"
+msgstr ""
+
+#. txt_directory
+msgid "Directory\n"
+msgstr ""
+
+#. dialog title for ftp installation
+#. txt_ftp_title
+msgid "FTP Installation"
+msgstr ""
+
+#. txt_server
+msgid "Server\n"
+msgstr ""
+
+#. txt_password
+msgid "Password\n"
+msgstr ""
+
+#. label for ftp user input
+#. txt_user1
+msgid "User (Anonymous Login If Empty)\n"
+msgstr ""
+
+#. dialog title for nfs installation
+#. txt_nfs_title
+msgid "NFS Installation"
+msgstr ""
+
+#. label for smb user input
+#. txt_user2
+msgid "User (Uses \"guest\" If Empty)\n"
+msgstr ""
+
+#. dialog title for smb installation
+#. txt_smb_title
+msgid "SMB (Windows Share) Installation"
+msgstr ""
+
+#. dialog title for http installation
+#. txt_http_title
+msgid "HTTP Installation"
+msgstr ""
+
+#. 'driver' as in '(hardware) driver update'
+#. txt_driver_update
+msgid "Driver"
+msgstr ""
+
+#. as in Windows Authentication Domain
+#. txt_domain
+msgid "Domain\n"
+msgstr ""
+
+#. button label for other/more options
+#. txt_other_options
+msgid "Other Options"
+msgstr ""
+
+#. label for language selection
+#. txt_language
+msgid "Language"
+msgstr ""
+
+#. txt_yes
+msgid "Yes"
+msgstr ""
+
+#. txt_no
+msgid "No"
+msgstr ""
+
+#. menu item for selecting a file
+#. txt_file
+msgid "File"
+msgstr ""
+
+#. input label: share as in "Windows share" (SMB)
+#. txt_share
+msgid "Share\n"
+msgstr ""
+
+#. txt_zenAuto
+msgid "Automatic Mode"
+msgstr ""
+
+#. txt_zenManual
+msgid "Manual Mode"
+msgstr ""
+
+#. txt_zenConfig
+msgid "Configure Parameters on ZEN Partition"
+msgstr ""
+
+#. txt_zenInstall
+msgid "Install or Update ZEN Partition"
+msgstr ""
+
+#. txt_zenLilo
+msgid "Reinstall ZEN Partition Boot Loader"
+msgstr ""
+
+#. txt_zenDisable
+msgid "Disable ZEN Partition"
+msgstr ""
+
+#. txt_zenEnable
+msgid "Enable ZEN Partition"
+msgstr ""
+
+#. video mode menu item
+#. txt_text_mode
+msgid "Text Mode"
+msgstr ""
+
+#. menu item, like 'memory test'
+#. txt_firmware
+msgid "Firmware Test"
+msgstr ""
+
+#. txt_dud_file_msg
+#, wrap
+msgid ""
+"To load driver updates directly from CD-ROM,\n"
+"enter the driver update file names (separated\n"
+"by commas ',') here:\n"
+msgstr ""
+
+#. install source menu title
+#. ** please keep it really short (comparable to the english text) **
+#. txt_install_source
+msgid "Source"
+msgstr ""
+
+#. video mode/display size menu title
+#. ** please keep it really short (comparable to the english text) **
+#. txt_video_mode
+msgid "Video Mode"
+msgstr ""
+
+#. driver update dialog title
+#. -> txt_dud_file_msg
+#. txt_driver_update2
+msgid "Driver Update"
+msgstr ""
+
+#. menu label for selecting (cpu) architecture
+#. like i386, x86-64, ppc
+#. ** please keep it really short (comparable to the english text) **
+#. txt_arch
+msgid "Arch"
+msgstr ""
+
+#. menu label for selecting some (linux) kernel variant
+#. ** please keep it really short (comparable to the english text) **
+#. txt_kernel
+msgid "Kernel"
+msgstr ""
+
+#. menu item for kernel variant (cf. txt_kernel)
+#. txt_kernel_default
+msgid "Default"
+msgstr ""
+
+#. menu item for kernel variant (cf. txt_kernel)
+#. -> like in txt_safe_linux
+#. txt_kernel_safe
+msgid "Safe Settings"
+msgstr ""
+
+#. menu item for kernel variant (cf. txt_kernel)
+#. -> similar to txt_noacpi_install
+#. txt_kernel_noacpi
+msgid "No ACPI"
+msgstr ""
+
+#. menu item for kernel variant (cf. txt_kernel)
+#. -> similar to txt_nolapic_install
+#. txt_kernel_nolapic
+msgid "No Local APIC"
+msgstr ""
+
+#. main menu: start in system repair mode
+#. txt_repain_system
+msgid "Repair Installed System"
+msgstr ""
+
+#. menu item
+#. txt_mediacheck
+msgid "Check Installation Media"
+msgstr ""
+
+#. menu item for keyboard layout (please keep it short)
+#. txt_keyboard
+msgid "Keyboard"
+msgstr ""
+
+#. menu title
+#. txt_dud_download
+msgid "Download Driver Update"
+msgstr ""
+
+#. input label
+#. txt_dud_enter_url
+msgid "Enter Driver Update URL\n"
+msgstr ""
+
+#. menu item
+#. txt_http_proxy
+msgid "HTTP Proxy"
+msgstr ""
+
+#. menu item
+#. txt_network_config
+msgid "Network Config"
+msgstr ""
+
+#. menu item
+#. txt_no_network
+msgid "No Network"
+msgstr ""
+
+#. short menu item for manual network config (NOT some kind of manual)
+#. txt_manual_network
+msgid "Manual"
+msgstr ""
+
+#. dialog title for manual network config
+#. txt_manual_network_title
+msgid "Manual Network Config"
+msgstr ""
+
+#. label for ip address
+#. txt_host_ip
+msgid "Host IP\n"
+msgstr ""
+
+#. label for gateway ip
+#. txt_gateway_ip
+msgid "Gateway\n"
+msgstr ""
+
+#. label for dns domain name (like 'opensuse.org')
+#. txt_domain_name
+msgid "Domain Name\n"
+msgstr ""
+
+#. label for nameserver list
+#. txt_nameservers
+msgid "Nameservers (separated by ',')\n"
+msgstr ""
+
+#. label for netmask; 'Host IP' refers to label txt_host_ip above
+#. txt_netmask
+msgid "Netmask\n(or use '/N' notation with Host IP)\n"
+msgstr ""
+
+#. label for Live CD installation
+#. txt_live_kde
+msgid "openSUSE Live (KDE)"
+msgstr ""
+
+#. label for Live CD installation
+#. txt_live_gnome
+msgid "openSUSE Live (GNOME)"
+msgstr ""
+
diff --git a/themes/openSUSE/po/ca.po b/themes/openSUSE/po/ca.po
new file mode 100644
index 0000000..dbe24da
--- /dev/null
+++ b/themes/openSUSE/po/ca.po
@@ -0,0 +1,441 @@
+# LANGUAGE translations for boot loader
+# Copyright (C) 2005 SUSE Linux GmbH
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: YaST (@memory@)\n"
+"Report-Msgid-Bugs-To: translation@suse.de\n"
+"POT-Creation-Date: 2006-05-15 15:07+0200\n"
+"PO-Revision-Date: 2007-02-19 15:09+0100\n"
+"Last-Translator: Olga López\n"
+"Language-Team: Catalan\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"
+
+#. ok button label
+#. txt_ok
+msgid "OK"
+msgstr "D'acord"
+
+#. cancel button label
+#. txt_cancel
+msgid "Cancel"
+msgstr "Anul·la"
+
+#. reboot button label
+#. txt_reboot
+msgid "Reboot"
+msgstr "Reinicia"
+
+#. continue button label
+#. txt_continue
+msgid "Continue"
+msgstr "Continua"
+
+#. txt_install
+msgid "Installation"
+msgstr "Instal·lació"
+
+#. txt_safe_linux
+msgid "Linux--Safe Settings"
+msgstr "Linux -- Configuració segura"
+
+#. txt_boot_harddisk
+msgid "Boot from Hard Disk"
+msgstr "Arrenca des del disc dur"
+
+#. txt_rescue
+msgid "Rescue System"
+msgstr "Sistema de recuperació"
+
+#. txt_memtest
+msgid "Memory Test"
+msgstr "Prova de memòria"
+
+#. txt_bootoptions
+msgid "Boot Options"
+msgstr "Opcions d'arrencada"
+
+#. window title for exit dialog
+#. txt_exit_title (see txt_exit_dialog)
+msgid "Exiting..."
+msgstr "Sortida..."
+
+#. txt_exit_dialog
+msgid ""
+"You are leaving the graphical boot menu and\n"
+"starting the text mode interface."
+msgstr ""
+"Esteu sortint del menú d'arrencada gràfic i\n"
+"iniciant la interfície del mode de text."
+
+#. txt_help
+msgid "Help"
+msgstr "Ajuda"
+
+#. window title for kernel loading (see txt_load_kernel)
+#. txt_load_kernel_title
+msgid "Starting..."
+msgstr "Inicialització..."
+
+#. Keep the three newlines!
+#. txt_load_kernel
+msgid ""
+"Loading Linux Kernel\n"
+"\n"
+"\n"
+msgstr ""
+"Càrrega del nucli de Linux\n"
+"\n"
+"\n"
+
+#. Keep the three newlines!
+#. txt_load_memtest
+msgid ""
+"Loading memtest86\n"
+"\n"
+"\n"
+msgstr ""
+"Càrrega del memtest86\n"
+"\n"
+"\n"
+
+#. info box title
+#. txt_info_title
+msgid "Boot Loader"
+msgstr "Carregador de l'arrencada"
+
+#. error box title
+#. txt_error_title
+msgid "I/O Error"
+msgstr "Error d'E/S"
+
+#. boot disk change dialog title
+#. txt_change_disk_title
+msgid "Change Boot Disk"
+msgstr "Canvieu el disc d'arrencada"
+
+#. txt_insert_disk
+#, c-format
+msgid "Insert boot disk %u."
+msgstr "Inseriu el disc d'arrencada %u."
+
+#. txt_insert_disk2
+#, c-format
+msgid ""
+"This is boot disk %u.\n"
+"Insert boot disk %u."
+msgstr ""
+"Aquest és el disc d'arrencada %u.\n"
+"Inseriu el disc d'arrencada %u."
+
+#. <product> is e.g. SuSE Linux X.Y or Enterprise Server Z
+#. txt_insert_disk3
+#, c-format
+msgid ""
+"This is not a <product> boot disk.\n"
+"Insert boot disk %u."
+msgstr ""
+"Aquest no és un disc d'arrencada per a <product>.\n"
+"Inseriu el disc d'arrencada %u."
+
+#. password dialog title
+#. txt_password_title
+msgid "Password"
+msgstr "Contrasenya"
+
+#. txt_dud_ready
+msgid "Get your driver update floppy ready."
+msgstr "Prepareu el disquet d'actualització de controladors."
+
+#. power off dialog title
+#. txt_power_off_title
+msgid "Power Off"
+msgstr "Apaga"
+
+#. txt_power_off
+msgid "Halt the system now?"
+msgstr "Voleu aturar el sistema ara?"
+
+#. menu entry for hard disk installation
+#. txt_harddisk
+msgid "Hard Disk"
+msgstr "Disc dur"
+
+#. dialog title for hard disk installation
+#. txt_harddisk_title
+msgid "Hard Disk Installation"
+msgstr "Instal·lació del disc dur"
+
+#. txt_hd_diskdevice
+msgid "Disk Device (Scans All Disks If Empty)\n"
+msgstr "Dispositiu de disc (escaneja tots els discs si es deixa buit)\n"
+
+#. txt_directory
+msgid "Directory\n"
+msgstr "Directori\n"
+
+#. dialog title for ftp installation
+#. txt_ftp_title
+msgid "FTP Installation"
+msgstr "Instal·lació per FTP"
+
+#. txt_server
+msgid "Server\n"
+msgstr "Servidor\n"
+
+#. txt_password
+msgid "Password\n"
+msgstr "Contrasenya\n"
+
+#. label for ftp user input
+#. txt_user1
+msgid "User (Anonymous Login If Empty)\n"
+msgstr "Usuari (entrada anònima si es deixa buit)\n"
+
+#. dialog title for nfs installation
+#. txt_nfs_title
+msgid "NFS Installation"
+msgstr "Instal·lació per NFS"
+
+#. label for smb user input
+#. txt_user2
+msgid "User (Uses \"guest\" If Empty)\n"
+msgstr "Usuari (utilitza \"guest\" si es deixa buit)\n"
+
+#. dialog title for smb installation
+#. txt_smb_title
+msgid "SMB (Windows Share) Installation"
+msgstr "Instal·lació de SMB (recurs compartit del Windows)"
+
+#. dialog title for http installation
+#. txt_http_title
+msgid "HTTP Installation"
+msgstr "Instal·lació per HTTP"
+
+#. 'driver' as in '(hardware) driver update'
+#. txt_driver_update
+msgid "Driver"
+msgstr "Controlador"
+
+#. as in Windows Authentication Domain
+#. txt_domain
+msgid "Domain\n"
+msgstr "Domini\n"
+
+#. button label for other/more options
+#. txt_other_options
+msgid "Other Options"
+msgstr "Altres opcions"
+
+#. label for language selection
+#. txt_language
+msgid "Language"
+msgstr "Idioma"
+
+#. txt_yes
+msgid "Yes"
+msgstr "Sí"
+
+#. txt_no
+msgid "No"
+msgstr "No"
+
+#. menu item for selecting a file
+#. txt_file
+msgid "File"
+msgstr "Fitxer"
+
+#. input label: share as in "Windows share" (SMB)
+#. txt_share
+msgid "Share\n"
+msgstr "Recurs compartit\n"
+
+#. txt_zenAuto
+msgid "Automatic Mode"
+msgstr "Mode automàtic"
+
+#. txt_zenManual
+msgid "Manual Mode"
+msgstr "Mode manual"
+
+#. txt_zenConfig
+msgid "Configure Parameters on ZEN Partition"
+msgstr "Configura els paràmetres a la partició de ZEN"
+
+#. txt_zenInstall
+msgid "Install or Update ZEN Partition"
+msgstr "Instal·la o actualitza la partició de ZEN"
+
+#. txt_zenLilo
+msgid "Reinstall ZEN Partition Boot Loader"
+msgstr "Torna a instal·lar el carregador de l'arrencada de la partició de ZEN"
+
+#. txt_zenDisable
+msgid "Disable ZEN Partition"
+msgstr "Inhabilita la partició de ZEN"
+
+#. txt_zenEnable
+msgid "Enable ZEN Partition"
+msgstr "Habilita la partició de ZEN"
+
+#. video mode menu item
+#. txt_text_mode
+msgid "Text Mode"
+msgstr "Mode de text"
+
+#. menu item, like 'memory test'
+#. txt_firmware
+msgid "Firmware Test"
+msgstr "Prova de microprogramari"
+
+#. txt_dud_file_msg
+msgid ""
+"To load driver updates directly from CD-ROM,\n"
+"enter the driver update file names (separated\n"
+"by commas ',') here:\n"
+msgstr ""
+"Per a carregar les actualitzacions dels controladors directament des del CD-ROM,\n"
+"introduïu els noms dels fitxers d'actualització de controladors (separats\n"
+"per comes ',') aquí:\n"
+
+#. install source menu title
+#. ** please keep it really short (comparable to the english text) **
+#. txt_install_source
+msgid "Source"
+msgstr "Font"
+
+#. video mode/display size menu title
+#. ** please keep it really short (comparable to the english text) **
+#. txt_video_mode
+msgid "Video Mode"
+msgstr ""
+
+#. driver update dialog title
+#. -> txt_dud_file_msg
+#. txt_driver_update2
+msgid "Driver Update"
+msgstr "Actualització de controladors"
+
+#. menu label for selecting (cpu) architecture
+#. like i386, x86-64, ppc
+#. ** please keep it really short (comparable to the english text) **
+#. txt_arch
+msgid "Arch"
+msgstr "Arquit."
+
+#. menu label for selecting some (linux) kernel variant
+#. ** please keep it really short (comparable to the english text) **
+#. txt_kernel
+msgid "Kernel"
+msgstr ""
+
+#. menu item for kernel variant (cf. txt_kernel)
+#. txt_kernel_default
+msgid "Default"
+msgstr "Per defecte"
+
+#. menu item for kernel variant (cf. txt_kernel)
+#. -> like in txt_safe_linux
+#. txt_kernel_safe
+msgid "Safe Settings"
+msgstr ""
+
+#. menu item for kernel variant (cf. txt_kernel)
+#. -> similar to txt_noacpi_install
+#. txt_kernel_noacpi
+msgid "No ACPI"
+msgstr ""
+
+#. menu item for kernel variant (cf. txt_kernel)
+#. -> similar to txt_nolapic_install
+#. txt_kernel_nolapic
+msgid "No Local APIC"
+msgstr ""
+
+#. main menu: start in system repair mode
+#. txt_repain_system
+msgid "Repair Installed System"
+msgstr ""
+
+#. menu item
+#. txt_mediacheck
+msgid "Check Installation Media"
+msgstr ""
+
+#. menu item for keyboard layout (please keep it short)
+#. txt_keyboard
+msgid "Keyboard"
+msgstr "Teclat"
+
+#. menu title
+#. txt_dud_download
+msgid "Download Driver Update"
+msgstr ""
+
+#. input label
+#. txt_dud_enter_url
+msgid "Enter Driver Update URL\n"
+msgstr ""
+
+#. menu item
+#. txt_http_proxy
+msgid "HTTP Proxy"
+msgstr ""
+
+#. menu item
+#. txt_network_config
+msgid "Network Config"
+msgstr ""
+
+#. menu item
+#. txt_no_network
+msgid "No Network"
+msgstr ""
+
+#. short menu item for manual network config (NOT some kind of manual)
+#. txt_manual_network
+msgid "Manual"
+msgstr ""
+
+#. dialog title for manual network config
+#. txt_manual_network_title
+msgid "Manual Network Config"
+msgstr ""
+
+#. label for ip address
+#. txt_host_ip
+msgid "Host IP\n"
+msgstr ""
+
+#. label for gateway ip
+#. txt_gateway_ip
+msgid "Gateway\n"
+msgstr ""
+
+#. label for dns domain name (like 'opensuse.org')
+#. txt_domain_name
+msgid "Domain Name\n"
+msgstr ""
+
+#. label for nameserver list
+#. txt_nameservers
+msgid "Nameservers (separated by ',')\n"
+msgstr ""
+
+#. label for netmask; 'Host IP' refers to label txt_host_ip above
+#. txt_netmask
+msgid "Netmask\n(or use '/N' notation with Host IP)\n"
+msgstr ""
+
+#. label for Live CD installation
+#. txt_live_kde
+msgid "openSUSE Live (KDE)"
+msgstr ""
+
+#. label for Live CD installation
+#. txt_live_gnome
+msgid "openSUSE Live (GNOME)"
+msgstr ""
diff --git a/themes/openSUSE/po/cs.po b/themes/openSUSE/po/cs.po
new file mode 100644
index 0000000..526d8ee
--- /dev/null
+++ b/themes/openSUSE/po/cs.po
@@ -0,0 +1,444 @@
+# translation of cs.po to cs_CZ
+# LANGUAGE translations for boot loader
+# Copyright (C) 2004 SUSE LINUX AG
+#
+# Klara Cihlarova <koty@seznam.cz>, 2004, 2005, 2006.
+msgid ""
+msgstr ""
+"Project-Id-Version: bootloader\n"
+"PO-Revision-Date: 2010-05-30 10:53+0200\n"
+"Last-Translator: Vojtěch Zeisek <Vojtech.Zeisek@opensuse.org>\n"
+"Language-Team: Czech <opensuse-translation@opensuse.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Lokalize 1.0\n"
+"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
+
+#. ok button label
+#. txt_ok
+msgid "OK"
+msgstr "OK"
+
+#. cancel button label
+#. txt_cancel
+msgid "Cancel"
+msgstr "Zrušit"
+
+#. reboot button label
+#. txt_reboot
+msgid "Reboot"
+msgstr "Restartovat"
+
+#. continue button label
+#. txt_continue
+msgid "Continue"
+msgstr "Pokračovat"
+
+#. txt_install
+msgid "Installation"
+msgstr "Instalace"
+
+#. txt_safe_linux
+msgid "Linux--Safe Settings"
+msgstr "Linux -- bezpečné nastavení"
+
+#. txt_boot_harddisk
+msgid "Boot from Hard Disk"
+msgstr "Spustit z disku"
+
+#. txt_rescue
+msgid "Rescue System"
+msgstr "Záchranný systém"
+
+#. txt_memtest
+msgid "Memory Test"
+msgstr "Test paměti"
+
+#. txt_bootoptions
+msgid "Boot Options"
+msgstr "Parametry startu"
+
+#. window title for exit dialog
+#. txt_exit_title (see txt_exit_dialog)
+msgid "Exiting..."
+msgstr "Ukončuji..."
+
+#. txt_exit_dialog
+msgid ""
+"You are leaving the graphical boot menu and\n"
+"starting the text mode interface."
+msgstr ""
+"Opouštíte grafickou startovací nabídku\n"
+"a spouštíte textový režim."
+
+#. txt_help
+msgid "Help"
+msgstr "Nápověda"
+
+#. window title for kernel loading (see txt_load_kernel)
+#. txt_load_kernel_title
+msgid "Starting..."
+msgstr "Startuji..."
+
+#. Keep the three newlines!
+#. txt_load_kernel
+msgid ""
+"Loading Linux Kernel\n"
+"\n"
+"\n"
+msgstr ""
+"Zavádím linuxové jádro\n"
+"\n"
+"\n"
+
+#. Keep the three newlines!
+#. txt_load_memtest
+msgid ""
+"Loading memtest86\n"
+"\n"
+"\n"
+msgstr ""
+"Zavádím memtest86\n"
+"\n"
+"\n"
+
+#. info box title
+#. txt_info_title
+msgid "Boot Loader"
+msgstr "Zavaděč"
+
+#. error box title
+#. txt_error_title
+msgid "I/O Error"
+msgstr "Chyba I/O"
+
+#. boot disk change dialog title
+#. txt_change_disk_title
+msgid "Change Boot Disk"
+msgstr "Změnit startovací disk"
+
+#. txt_insert_disk
+#, c-format
+msgid "Insert boot disk %u."
+msgstr "Vložte startovací disk %u."
+
+#. txt_insert_disk2
+#, c-format
+msgid ""
+"This is boot disk %u.\n"
+"Insert boot disk %u."
+msgstr ""
+"Toto je startovací disk %u.\n"
+"Vložte prosím disk %u."
+
+#. <product> is e.g. SuSE Linux X.Y or Enterprise Server Z
+#. txt_insert_disk3
+#, c-format
+msgid ""
+"This is not a <product> boot disk.\n"
+"Insert boot disk %u."
+msgstr ""
+"Toto není startovací disk systému <product>.\n"
+"Vložte startovací disk %u."
+
+#. password dialog title
+#. txt_password_title
+msgid "Password"
+msgstr "Heslo"
+
+#. txt_dud_ready
+msgid "Get your driver update floppy ready."
+msgstr "Připravte si disketu s ovladači."
+
+#. power off dialog title
+#. txt_power_off_title
+msgid "Power Off"
+msgstr "Vypnout"
+
+#. txt_power_off
+msgid "Halt the system now?"
+msgstr "Chcete nyní vypnout systém?"
+
+#. menu entry for hard disk installation
+#. txt_harddisk
+msgid "Hard Disk"
+msgstr "Pevný disk"
+
+#. dialog title for hard disk installation
+#. txt_harddisk_title
+msgid "Hard Disk Installation"
+msgstr "Instalace z disku"
+
+#. txt_hd_diskdevice
+msgid "Disk Device (Scans All Disks If Empty)\n"
+msgstr "Disk (při nevyplnění prohledávání všech disků)\n"
+
+#. txt_directory
+msgid "Directory\n"
+msgstr "Adresář\n"
+
+#. dialog title for ftp installation
+#. txt_ftp_title
+msgid "FTP Installation"
+msgstr "FTP instalace"
+
+#. txt_server
+msgid "Server\n"
+msgstr "Server\n"
+
+#. txt_password
+msgid "Password\n"
+msgstr "Heslo\n"
+
+#. label for ftp user input
+#. txt_user1
+msgid "User (Anonymous Login If Empty)\n"
+msgstr "Uživatel (při nevyplnění anonymní přihlášení)\n"
+
+#. dialog title for nfs installation
+#. txt_nfs_title
+msgid "NFS Installation"
+msgstr "NFS instalace"
+
+#. label for smb user input
+#. txt_user2
+msgid "User (Uses \"guest\" If Empty)\n"
+msgstr "Uživatel (při nevyplnění nastaveno na \"guest\")\n"
+
+#. dialog title for smb installation
+#. txt_smb_title
+msgid "SMB (Windows Share) Installation"
+msgstr "SMB instalace (sdílený adresář)"
+
+#. dialog title for http installation
+#. txt_http_title
+msgid "HTTP Installation"
+msgstr "HTTP instalace"
+
+#. 'driver' as in '(hardware) driver update'
+#. txt_driver_update
+msgid "Driver"
+msgstr "Ovladač"
+
+#. as in Windows Authentication Domain
+#. txt_domain
+msgid "Domain\n"
+msgstr "Doména\n"
+
+#. button label for other/more options
+#. txt_other_options
+msgid "Other Options"
+msgstr "Další volby"
+
+#. label for language selection
+#. txt_language
+msgid "Language"
+msgstr "Jazyk"
+
+#. txt_yes
+msgid "Yes"
+msgstr "Ano"
+
+#. txt_no
+msgid "No"
+msgstr "Ne"
+
+#. menu item for selecting a file
+#. txt_file
+msgid "File"
+msgstr "Soubor"
+
+#. input label: share as in "Windows share" (SMB)
+#. txt_share
+msgid "Share\n"
+msgstr "Sdílení\n"
+
+#. txt_zenAuto
+msgid "Automatic Mode"
+msgstr "Automatický režim"
+
+#. txt_zenManual
+msgid "Manual Mode"
+msgstr "Ruční režim"
+
+#. txt_zenConfig
+msgid "Configure Parameters on ZEN Partition"
+msgstr "Nastavit parametry pro ZEN oddíl"
+
+#. txt_zenInstall
+msgid "Install or Update ZEN Partition"
+msgstr "Instalovat či aktualizovat ZEN oddíl"
+
+#. txt_zenLilo
+msgid "Reinstall ZEN Partition Boot Loader"
+msgstr "Reinstalovat zavaděč ZEN oddílu"
+
+#. txt_zenDisable
+msgid "Disable ZEN Partition"
+msgstr "Zakázat ZEN oddíl"
+
+#. txt_zenEnable
+msgid "Enable ZEN Partition"
+msgstr "Povolit ZEN oddíl"
+
+#. video mode menu item
+#. txt_text_mode
+msgid "Text Mode"
+msgstr "Textový režim"
+
+#. menu item, like 'memory test'
+#. txt_firmware
+msgid "Firmware Test"
+msgstr "Test firmwaru"
+
+#. txt_dud_file_msg
+msgid ""
+"To load driver updates directly from CD-ROM,\n"
+"enter the driver update file names (separated\n"
+"by commas ',') here:\n"
+msgstr ""
+"Pro nahrání aktualizací ovladačů přímo z CD-ROM,\n"
+"zadejte jména souborů aktualizací (oddělená\n"
+"čárkami ','):\n"
+
+#. install source menu title
+#. ** please keep it really short (comparable to the english text) **
+#. txt_install_source
+msgid "Source"
+msgstr "Zdroj"
+
+#. video mode/display size menu title
+#. ** please keep it really short (comparable to the english text) **
+#. txt_video_mode
+msgid "Video Mode"
+msgstr "Video režim"
+
+#. driver update dialog title
+#. -> txt_dud_file_msg
+#. txt_driver_update2
+msgid "Driver Update"
+msgstr "Aktualizace ovladače"
+
+#. menu label for selecting (cpu) architecture
+#. like i386, x86-64, ppc
+#. ** please keep it really short (comparable to the english text) **
+#. txt_arch
+msgid "Arch"
+msgstr "Arch"
+
+#. menu label for selecting some (linux) kernel variant
+#. ** please keep it really short (comparable to the english text) **
+#. txt_kernel
+msgid "Kernel"
+msgstr "Jádro"
+
+#. menu item for kernel variant (cf. txt_kernel)
+#. txt_kernel_default
+msgid "Default"
+msgstr "Výchozí"
+
+#. menu item for kernel variant (cf. txt_kernel)
+#. -> like in txt_safe_linux
+#. txt_kernel_safe
+msgid "Safe Settings"
+msgstr "Bezpečné nastavení"
+
+#. menu item for kernel variant (cf. txt_kernel)
+#. -> similar to txt_noacpi_install
+#. txt_kernel_noacpi
+msgid "No ACPI"
+msgstr "Bez ACPI"
+
+#. menu item for kernel variant (cf. txt_kernel)
+#. -> similar to txt_nolapic_install
+#. txt_kernel_nolapic
+msgid "No Local APIC"
+msgstr "Bez local APIC"
+
+#. main menu: start in system repair mode
+#. txt_repain_system
+msgid "Repair Installed System"
+msgstr "Opravit nainstalovaný systém"
+
+#. menu item
+#. txt_mediacheck
+msgid "Check Installation Media"
+msgstr "Kontrola instalačního média"
+
+#. menu item for keyboard layout (please keep it short)
+#. txt_keyboard
+msgid "Keyboard"
+msgstr "Klávesnice"
+
+#. menu title
+#. txt_dud_download
+msgid "Download Driver Update"
+msgstr "Stáhnout update ovladače"
+
+#. input label
+#. txt_dud_enter_url
+msgid "Enter Driver Update URL\n"
+msgstr "Vložte URL pro aktualizaci ovladače\n"
+
+#. menu item
+#. txt_http_proxy
+msgid "HTTP Proxy"
+msgstr "HTTP proxy"
+
+#. menu item
+#. txt_network_config
+msgid "Network Config"
+msgstr "Síťová konfigurace"
+
+#. menu item
+#. txt_no_network
+msgid "No Network"
+msgstr "Žádná síť"
+
+#. short menu item for manual network config (NOT some kind of manual)
+#. txt_manual_network
+msgid "Manual"
+msgstr "Ručně"
+
+#. dialog title for manual network config
+#. txt_manual_network_title
+msgid "Manual Network Config"
+msgstr "Ruční nastavení sítě"
+
+#. label for ip address
+#. txt_host_ip
+msgid "Host IP\n"
+msgstr "IP hostitele\n"
+
+#. label for gateway ip
+#. txt_gateway_ip
+msgid "Gateway\n"
+msgstr "Brána\n"
+
+#. label for dns domain name (like 'opensuse.org')
+#. txt_domain_name
+msgid "Domain Name\n"
+msgstr "Doménové jméno\n"
+
+#. label for nameserver list
+#. txt_nameservers
+msgid "Nameservers (separated by ',')\n"
+msgstr "Nameservery (oddělené ',')\n"
+
+#. label for netmask; 'Host IP' refers to label txt_host_ip above
+#. txt_netmask
+msgid "Netmask\n(or use '/N' notation with Host IP)\n"
+msgstr ""
+"Síťová maska\n"
+"(nebo použijte '/N' notaci s IP hostitele)\n"
+
+#. label for Live CD installation
+#. txt_live_kde
+msgid "openSUSE Live (KDE)"
+msgstr "openSUSE Live (KDE)"
+
+#. label for Live CD installation
+#. txt_live_gnome
+msgid "openSUSE Live (GNOME)"
+msgstr "openSUSE Live (GNOME)"
diff --git a/themes/openSUSE/po/da.po b/themes/openSUSE/po/da.po
new file mode 100644
index 0000000..4f66029
--- /dev/null
+++ b/themes/openSUSE/po/da.po
@@ -0,0 +1,445 @@
+# translation of da.po to Dansk
+# translation of bootloader.pot_[g4TXCa].po to Dansk
+# LANGUAGE translations for boot loader
+# Copyright (C) 2005 SUSE Linux GmbH
+# Martin Møller <martin@martinm-76.dk>, 2005.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: bootloader\n"
+"PO-Revision-Date: 2010-05-11 10:40+0200\n"
+"Last-Translator: Martin Schlander <mschlander@opensuse.org>\n"
+"Language-Team: Danish <opensuse-translation@opensuse.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Lokalize 1.0\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#. ok button label
+#. txt_ok
+msgid "OK"
+msgstr "OK"
+
+#. cancel button label
+#. txt_cancel
+msgid "Cancel"
+msgstr "Annullér"
+
+#. reboot button label
+#. txt_reboot
+msgid "Reboot"
+msgstr "Genstart"
+
+#. continue button label
+#. txt_continue
+msgid "Continue"
+msgstr "Fortsæt"
+
+#. txt_install
+msgid "Installation"
+msgstr "Installation"
+
+#. txt_safe_linux
+msgid "Linux--Safe Settings"
+msgstr "Linux--fejlsikret"
+
+#. txt_boot_harddisk
+msgid "Boot from Hard Disk"
+msgstr "Boot fra harddisk"
+
+#. txt_rescue
+msgid "Rescue System"
+msgstr "Redningssystem"
+
+#. txt_memtest
+msgid "Memory Test"
+msgstr "Hukommelsestest"
+
+#. txt_bootoptions
+msgid "Boot Options"
+msgstr "Boot-tilvalg"
+
+#. window title for exit dialog
+#. txt_exit_title (see txt_exit_dialog)
+msgid "Exiting..."
+msgstr "Afslutter..."
+
+#. txt_exit_dialog
+msgid ""
+"You are leaving the graphical boot menu and\n"
+"starting the text mode interface."
+msgstr ""
+"Du forlader den grafiske bootmenu, og\n"
+"starter grænsefladen i teksttilstand."
+
+#. txt_help
+msgid "Help"
+msgstr "Hjælp"
+
+#. window title for kernel loading (see txt_load_kernel)
+#. txt_load_kernel_title
+msgid "Starting..."
+msgstr "Starter..."
+
+#. Keep the three newlines!
+#. txt_load_kernel
+msgid ""
+"Loading Linux Kernel\n"
+"\n"
+"\n"
+msgstr ""
+"Indlæser Linux-kernen\n"
+"\n"
+"\n"
+
+#. Keep the three newlines!
+#. txt_load_memtest
+msgid ""
+"Loading memtest86\n"
+"\n"
+"\n"
+msgstr ""
+"Indlæser 'memtest86'\n"
+"\n"
+"\n"
+
+#. info box title
+#. txt_info_title
+msgid "Boot Loader"
+msgstr "Bootloader"
+
+#. error box title
+#. txt_error_title
+msgid "I/O Error"
+msgstr "I/O-fejl"
+
+#. boot disk change dialog title
+#. txt_change_disk_title
+msgid "Change Boot Disk"
+msgstr "Skift bootdisk"
+
+#. txt_insert_disk
+#, c-format
+msgid "Insert boot disk %u."
+msgstr "Indsæt bootdisk %u."
+
+#. txt_insert_disk2
+#, c-format
+msgid ""
+"This is boot disk %u.\n"
+"Insert boot disk %u."
+msgstr ""
+"Dette er bootdisk %u.\n"
+"Indsæt bootdisk %u."
+
+#. <product> is e.g. SuSE Linux X.Y or Enterprise Server Z
+#. txt_insert_disk3
+#, c-format
+msgid ""
+"This is not a <product> boot disk.\n"
+"Insert boot disk %u."
+msgstr ""
+"Dette er ikke en <product> bootdisk.\n"
+"Indsæt bootdisk %u."
+
+#. password dialog title
+#. txt_password_title
+msgid "Password"
+msgstr "Adgangskode"
+
+#. txt_dud_ready
+msgid "Get your driver update floppy ready."
+msgstr "Gør din driver-opdateringsdiskette klar."
+
+#. power off dialog title
+#. txt_power_off_title
+msgid "Power Off"
+msgstr "Sluk maskinen"
+
+#. txt_power_off
+msgid "Halt the system now?"
+msgstr "Luk systemet ned nu?"
+
+#. menu entry for hard disk installation
+#. txt_harddisk
+msgid "Hard Disk"
+msgstr "Harddisk"
+
+#. dialog title for hard disk installation
+#. txt_harddisk_title
+msgid "Hard Disk Installation"
+msgstr "Harddisk-installation"
+
+#. txt_hd_diskdevice
+msgid "Disk Device (Scans All Disks If Empty)\n"
+msgstr "Diskenhed (gennemsøger alle diske hvis tom)\n"
+
+#. txt_directory
+msgid "Directory\n"
+msgstr "Mappe\n"
+
+#. dialog title for ftp installation
+#. txt_ftp_title
+msgid "FTP Installation"
+msgstr "FTP-installation"
+
+#. txt_server
+msgid "Server\n"
+msgstr "Server\n"
+
+#. txt_password
+msgid "Password\n"
+msgstr "Adgangskode\n"
+
+#. label for ftp user input
+#. txt_user1
+msgid "User (Anonymous Login If Empty)\n"
+msgstr "Bruger (anonymt login hvis tom)\n"
+
+#. dialog title for nfs installation
+#. txt_nfs_title
+msgid "NFS Installation"
+msgstr "NFS-installation"
+
+#. label for smb user input
+#. txt_user2
+msgid "User (Uses \"guest\" If Empty)\n"
+msgstr "Bruger (anvender \"guest\" hvis tom)\n"
+
+#. dialog title for smb installation
+#. txt_smb_title
+msgid "SMB (Windows Share) Installation"
+msgstr "SMB-installation (Windows fildeling)"
+
+#. dialog title for http installation
+#. txt_http_title
+msgid "HTTP Installation"
+msgstr "HTTP-installation"
+
+#. 'driver' as in '(hardware) driver update'
+#. txt_driver_update
+msgid "Driver"
+msgstr "Driver"
+
+#. as in Windows Authentication Domain
+#. txt_domain
+msgid "Domain\n"
+msgstr "Domæne\n"
+
+#. button label for other/more options
+#. txt_other_options
+msgid "Other Options"
+msgstr "Andre tilvalg"
+
+#. label for language selection
+#. txt_language
+msgid "Language"
+msgstr "Sprog"
+
+#. txt_yes
+msgid "Yes"
+msgstr "Ja"
+
+#. txt_no
+msgid "No"
+msgstr "Nej"
+
+#. menu item for selecting a file
+#. txt_file
+msgid "File"
+msgstr "Fil"
+
+#. input label: share as in "Windows share" (SMB)
+#. txt_share
+msgid "Share\n"
+msgstr "Delt ressource\n"
+
+#. txt_zenAuto
+msgid "Automatic Mode"
+msgstr "Automatisk tilstand"
+
+#. txt_zenManual
+msgid "Manual Mode"
+msgstr "Manuel tilstand"
+
+#. txt_zenConfig
+msgid "Configure Parameters on ZEN Partition"
+msgstr "Konfigurér parametre på ZEN-partition"
+
+#. txt_zenInstall
+msgid "Install or Update ZEN Partition"
+msgstr "Installér eller opdatér ZEN-partition"
+
+#. txt_zenLilo
+msgid "Reinstall ZEN Partition Boot Loader"
+msgstr "Geninstallér ZEN-partitionens bootloader"
+
+#. txt_zenDisable
+msgid "Disable ZEN Partition"
+msgstr "Deaktivér ZEN-partition"
+
+#. txt_zenEnable
+msgid "Enable ZEN Partition"
+msgstr "Aktivér ZEN-partition"
+
+#. video mode menu item
+#. txt_text_mode
+msgid "Text Mode"
+msgstr "Teksttilstand"
+
+#. menu item, like 'memory test'
+#. txt_firmware
+msgid "Firmware Test"
+msgstr "Firmware-test"
+
+#. txt_dud_file_msg
+msgid ""
+"To load driver updates directly from CD-ROM,\n"
+"enter the driver update file names (separated\n"
+"by commas ',') here:\n"
+msgstr ""
+"For at indlæse driveropdateringer direkte fra cd-rom,\n"
+"angives filnavnene for driveropdateringerne (adskilt\n"
+"af kommaer ',') her:\n"
+
+#. install source menu title
+#. ** please keep it really short (comparable to the english text) **
+#. txt_install_source
+msgid "Source"
+msgstr "Kilde"
+
+#. video mode/display size menu title
+#. ** please keep it really short (comparable to the english text) **
+#. txt_video_mode
+msgid "Video Mode"
+msgstr "Grafisk tilstand"
+
+#. driver update dialog title
+#. -> txt_dud_file_msg
+#. txt_driver_update2
+msgid "Driver Update"
+msgstr "Driveropdatering"
+
+#. menu label for selecting (cpu) architecture
+#. like i386, x86-64, ppc
+#. ** please keep it really short (comparable to the english text) **
+#. txt_arch
+msgid "Arch"
+msgstr "Ark."
+
+#. menu label for selecting some (linux) kernel variant
+#. ** please keep it really short (comparable to the english text) **
+#. txt_kernel
+msgid "Kernel"
+msgstr "Kerne"
+
+#. menu item for kernel variant (cf. txt_kernel)
+#. txt_kernel_default
+msgid "Default"
+msgstr "Standard"
+
+#. menu item for kernel variant (cf. txt_kernel)
+#. -> like in txt_safe_linux
+#. txt_kernel_safe
+msgid "Safe Settings"
+msgstr "Fejlsikrede indstillinger"
+
+#. menu item for kernel variant (cf. txt_kernel)
+#. -> similar to txt_noacpi_install
+#. txt_kernel_noacpi
+msgid "No ACPI"
+msgstr "Ingen ACPI"
+
+#. menu item for kernel variant (cf. txt_kernel)
+#. -> similar to txt_nolapic_install
+#. txt_kernel_nolapic
+msgid "No Local APIC"
+msgstr "Ingen lokal APIC"
+
+#. main menu: start in system repair mode
+#. txt_repain_system
+msgid "Repair Installed System"
+msgstr "Reparér installeret system"
+
+#. menu item
+#. txt_mediacheck
+msgid "Check Installation Media"
+msgstr "Tjek installationsmedie"
+
+#. menu item for keyboard layout (please keep it short)
+#. txt_keyboard
+msgid "Keyboard"
+msgstr "Tastatur"
+
+#. menu title
+#. txt_dud_download
+msgid "Download Driver Update"
+msgstr "Download driveropdatering"
+
+#. input label
+#. txt_dud_enter_url
+msgid "Enter Driver Update URL\n"
+msgstr "Angiv URL til driveropdatering\n"
+
+#. menu item
+#. txt_http_proxy
+msgid "HTTP Proxy"
+msgstr "HTTP-proxy"
+
+#. menu item
+#. txt_network_config
+msgid "Network Config"
+msgstr "Netværkskonfiguration"
+
+#. menu item
+#. txt_no_network
+msgid "No Network"
+msgstr "Intet netværk"
+
+#. short menu item for manual network config (NOT some kind of manual)
+#. txt_manual_network
+msgid "Manual"
+msgstr "Manuelt"
+
+#. dialog title for manual network config
+#. txt_manual_network_title
+msgid "Manual Network Config"
+msgstr "Manuel netværkskonfiguration"
+
+#. label for ip address
+#. txt_host_ip
+msgid "Host IP\n"
+msgstr "Værts-IP\n"
+
+#. label for gateway ip
+#. txt_gateway_ip
+msgid "Gateway\n"
+msgstr "Gateway\n"
+
+#. label for dns domain name (like 'opensuse.org')
+#. txt_domain_name
+msgid "Domain Name\n"
+msgstr "Domænenavn\n"
+
+#. label for nameserver list
+#. txt_nameservers
+msgid "Nameservers (separated by ',')\n"
+msgstr "Navneservere (adskilt af \",\")\n"
+
+#. label for netmask; 'Host IP' refers to label txt_host_ip above
+#. txt_netmask
+msgid "Netmask\n(or use '/N' notation with Host IP)\n"
+msgstr ""
+"Netmaske\n"
+"(eller brug \"/N\"-notation med værts-IP)\n"
+
+#. label for Live CD installation
+#. txt_live_kde
+msgid "openSUSE Live (KDE)"
+msgstr "openSUSE Live (KDE)"
+
+#. label for Live CD installation
+#. txt_live_gnome
+msgid "openSUSE Live (GNOME)"
+msgstr "openSUSE Live (GNOME)"
diff --git a/themes/openSUSE/po/de.po b/themes/openSUSE/po/de.po
new file mode 100644
index 0000000..7be5d81
--- /dev/null
+++ b/themes/openSUSE/po/de.po
@@ -0,0 +1,447 @@
+# translation of de.po to
+# translation of de.po to German
+# LANGUAGE translations for boot loader
+# Copyright (C) 2004 SUSE LINUX AG
+# Antje Faber <afaber@suse.de>, 2004, 2005.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: bootloader.de\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2005-07-27 16:23+0200\n"
+"PO-Revision-Date: 2009-10-08 19:06+0200\n"
+"Last-Translator: Michael Skiba <trans@michael-skiba.de>\n"
+"Language-Team: German <opensuse-translation-de@opensuse.org>\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: Lokalize 1.0\n"
+
+#. ok button label
+#. txt_ok
+msgid "OK"
+msgstr "OK"
+
+#. cancel button label
+#. txt_cancel
+msgid "Cancel"
+msgstr "Abbrechen"
+
+#. reboot button label
+#. txt_reboot
+msgid "Reboot"
+msgstr "Neustart"
+
+#. continue button label
+#. txt_continue
+msgid "Continue"
+msgstr "Weiter"
+
+#. txt_install
+msgid "Installation"
+msgstr "Installation"
+
+#. txt_safe_linux
+msgid "Linux--Safe Settings"
+msgstr "Linux - Sichere Einstellungen"
+
+#. txt_boot_harddisk
+msgid "Boot from Hard Disk"
+msgstr "Von Festplatte booten"
+
+#. txt_rescue
+msgid "Rescue System"
+msgstr "Rettungssystem"
+
+#. txt_memtest
+msgid "Memory Test"
+msgstr "Speichertest"
+
+#. txt_bootoptions
+msgid "Boot Options"
+msgstr "Bootoptionen"
+
+#. window title for exit dialog
+#. txt_exit_title (see txt_exit_dialog)
+msgid "Exiting..."
+msgstr "Verlassen ..."
+
+#. txt_exit_dialog
+msgid ""
+"You are leaving the graphical boot menu and\n"
+"starting the text mode interface."
+msgstr ""
+"Sie verlassen das grafische Bootmenü und\n"
+"kommen in den Textmodus."
+
+#. txt_help
+msgid "Help"
+msgstr "Hilfe"
+
+#. window title for kernel loading (see txt_load_kernel)
+#. txt_load_kernel_title
+msgid "Starting..."
+msgstr "Starten ..."
+
+#. Keep the three newlines!
+#. txt_load_kernel
+msgid ""
+"Loading Linux Kernel\n"
+"\n"
+"\n"
+msgstr ""
+"Laden des Linux-Kernels\n"
+"\n"
+"\n"
+
+#. Keep the three newlines!
+#. txt_load_memtest
+msgid ""
+"Loading memtest86\n"
+"\n"
+"\n"
+msgstr ""
+"Laden von memtest86\n"
+"\n"
+"\n"
+
+#. info box title
+#. txt_info_title
+msgid "Boot Loader"
+msgstr "Bootloader"
+
+#. error box title
+#. txt_error_title
+msgid "I/O Error"
+msgstr "Ein-/Ausgabefehler"
+
+#. boot disk change dialog title
+#. txt_change_disk_title
+msgid "Change Boot Disk"
+msgstr "Bootdiskette wechseln"
+
+#. txt_insert_disk
+#, c-format
+msgid "Insert boot disk %u."
+msgstr "Bootdiskette %u einlegen."
+
+#. txt_insert_disk2
+#, c-format
+msgid ""
+"This is boot disk %u.\n"
+"Insert boot disk %u."
+msgstr ""
+"Dies ist Bootdiskette %u.\n"
+"Legen Sie bitte die Bootdiskette %u ein."
+
+#. <product> is e.g. SuSE Linux X.Y or Enterprise Server Z
+#. txt_insert_disk3
+#, c-format
+msgid ""
+"This is not a <product> boot disk.\n"
+"Insert boot disk %u."
+msgstr ""
+"Dies ist keine <product>-Bootdiskette.\n"
+"Legen Sie bitte die Bootdiskette %u ein."
+
+#. password dialog title
+#. txt_password_title
+msgid "Password"
+msgstr "Passwort"
+
+#. txt_dud_ready
+msgid "Get your driver update floppy ready."
+msgstr "Halten Sie die Aktualisierungsdiskette für den Treiber bereit."
+
+#. power off dialog title
+#. txt_power_off_title
+msgid "Power Off"
+msgstr "Ausschalten"
+
+#. txt_power_off
+msgid "Halt the system now?"
+msgstr "System jetzt anhalten?"
+
+#. menu entry for hard disk installation
+#. txt_harddisk
+msgid "Hard Disk"
+msgstr "Festplatte"
+
+#. dialog title for hard disk installation
+#. txt_harddisk_title
+msgid "Hard Disk Installation"
+msgstr "Festplatten-Installation"
+
+#. txt_hd_diskdevice
+msgid "Disk Device (Scans All Disks If Empty)\n"
+msgstr "Festplattengerät (scannt alle Festplatten, falls leer)\n"
+
+#. txt_directory
+msgid "Directory\n"
+msgstr "Verzeichnis\n"
+
+#. dialog title for ftp installation
+#. txt_ftp_title
+msgid "FTP Installation"
+msgstr "FTP-Installation"
+
+#. txt_server
+msgid "Server\n"
+msgstr "Server\n"
+
+#. txt_password
+msgid "Password\n"
+msgstr "Passwort\n"
+
+#. label for ftp user input
+#. txt_user1
+msgid "User (Anonymous Login If Empty)\n"
+msgstr "Benutzer (Anonyme Anmeldung, falls leer)\n"
+
+#. dialog title for nfs installation
+#. txt_nfs_title
+msgid "NFS Installation"
+msgstr "NFS-Installation"
+
+#. label for smb user input
+#. txt_user2
+msgid "User (Uses \"guest\" If Empty)\n"
+msgstr "Benutzer (verwendet \"guest\", falls leer)\n"
+
+#. dialog title for smb installation
+#. txt_smb_title
+msgid "SMB (Windows Share) Installation"
+msgstr "SMB-(Windows Share)-Installation"
+
+#. dialog title for http installation
+#. txt_http_title
+msgid "HTTP Installation"
+msgstr "HTTP-Installation"
+
+#. 'driver' as in '(hardware) driver update'
+#. txt_driver_update
+msgid "Driver"
+msgstr "Treiber"
+
+#. as in Windows Authentication Domain
+#. txt_domain
+msgid "Domain\n"
+msgstr "Domäne\n"
+
+#. button label for other/more options
+#. txt_other_options
+msgid "Other Options"
+msgstr "Weitere Optionen"
+
+#. label for language selection
+#. txt_language
+msgid "Language"
+msgstr "Sprache"
+
+#. txt_yes
+msgid "Yes"
+msgstr "Ja"
+
+#. txt_no
+msgid "No"
+msgstr "Nein"
+
+#. menu item for selecting a file
+#. txt_file
+msgid "File"
+msgstr "Datei"
+
+#. input label: share as in "Windows share" (SMB)
+#. txt_share
+msgid "Share\n"
+msgstr "Freigabe\n"
+
+#. txt_zenAuto
+msgid "Automatic Mode"
+msgstr "Automatischer Modus"
+
+#. txt_zenManual
+msgid "Manual Mode"
+msgstr "Manueller Modus"
+
+#. txt_zenConfig
+msgid "Configure Parameters on ZEN Partition"
+msgstr "Parameter in ZEN-Partition einrichten"
+
+#. txt_zenInstall
+msgid "Install or Update ZEN Partition"
+msgstr "ZEN-Partition installieren oder aktualisieren"
+
+#. txt_zenLilo
+msgid "Reinstall ZEN Partition Boot Loader"
+msgstr "Bootloader für ZEN-Partition neu installieren"
+
+#. txt_zenDisable
+msgid "Disable ZEN Partition"
+msgstr "ZEN-Partition deaktivieren"
+
+#. txt_zenEnable
+msgid "Enable ZEN Partition"
+msgstr "ZEN-Partition aktivieren"
+
+#. video mode menu item
+#. txt_text_mode
+msgid "Text Mode"
+msgstr "Textmodus"
+
+#. menu item, like 'memory test'
+#. txt_firmware
+msgid "Firmware Test"
+msgstr "Firmware-Test"
+
+#. txt_dud_file_msg
+msgid ""
+"To load driver updates directly from CD-ROM,\n"
+"enter the driver update file names (separated\n"
+"by commas ',') here:\n"
+msgstr ""
+"Wenn Sie Treiber-Aktualisierungen direkt von der CD-ROM laden möchten,\n"
+"geben Sie hier die Dateinamen der Treiber-Aktualisierungen\n"
+"(durch Kommas getrennt) ein:\n"
+
+#. install source menu title
+#. ** please keep it really short (comparable to the english text) **
+#. txt_install_source
+msgid "Source"
+msgstr "Quelle"
+
+#. video mode/display size menu title
+#. ** please keep it really short (comparable to the english text) **
+#. txt_video_mode
+msgid "Video Mode"
+msgstr "Videomodus"
+
+#. driver update dialog title
+#. -> txt_dud_file_msg
+#. txt_driver_update2
+msgid "Driver Update"
+msgstr "Treiber-Aktualisierung"
+
+#. menu label for selecting (cpu) architecture
+#. like i386, x86-64, ppc
+#. ** please keep it really short (comparable to the english text) **
+#. txt_arch
+msgid "Arch"
+msgstr "Architektur"
+
+#. menu label for selecting some (linux) kernel variant
+#. ** please keep it really short (comparable to the english text) **
+#. txt_kernel
+msgid "Kernel"
+msgstr "Kernel"
+
+#. menu item for kernel variant (cf. txt_kernel)
+#. txt_kernel_default
+msgid "Default"
+msgstr "Standard"
+
+#. menu item for kernel variant (cf. txt_kernel)
+#. -> like in txt_safe_linux
+#. txt_kernel_safe
+msgid "Safe Settings"
+msgstr "Sichere Einstellungen"
+
+#. menu item for kernel variant (cf. txt_kernel)
+#. -> similar to txt_noacpi_install
+#. txt_kernel_noacpi
+msgid "No ACPI"
+msgstr "Kein ACPI"
+
+#. menu item for kernel variant (cf. txt_kernel)
+#. -> similar to txt_nolapic_install
+#. txt_kernel_nolapic
+msgid "No Local APIC"
+msgstr "Kein lokales APIC"
+
+#. main menu: start in system repair mode
+#. txt_repain_system
+msgid "Repair Installed System"
+msgstr "Installiertes System reparieren"
+
+#. menu item
+#. txt_mediacheck
+msgid "Check Installation Media"
+msgstr "Installationsmedium überprüfen"
+
+#. menu item for keyboard layout (please keep it short)
+#. txt_keyboard
+msgid "Keyboard"
+msgstr "Tastatur"
+
+#. menu title
+#. txt_dud_download
+msgid "Download Driver Update"
+msgstr "Treiberaktualisierung wird geladen"
+
+#. input label
+#. txt_dud_enter_url
+msgid "Enter Driver Update URL\n"
+msgstr "URL für die Treiber-Aktualisierung eingeben\n"
+
+#. menu item
+#. txt_http_proxy
+msgid "HTTP Proxy"
+msgstr "HTTP-Proxy"
+
+#. menu item
+#. txt_network_config
+msgid "Network Config"
+msgstr "Netzwerk-Konfiguration"
+
+#. menu item
+#. txt_no_network
+msgid "No Network"
+msgstr "Kein Netzwerk"
+
+#. short menu item for manual network config (NOT some kind of manual)
+#. txt_manual_network
+msgid "Manual"
+msgstr "Manuell"
+
+#. dialog title for manual network config
+#. txt_manual_network_title
+msgid "Manual Network Config"
+msgstr "Manuelle Netzwerk-Einrichtung"
+
+#. label for ip address
+#. txt_host_ip
+msgid "Host IP\n"
+msgstr "Host IP\n"
+
+#. label for gateway ip
+#. txt_gateway_ip
+msgid "Gateway\n"
+msgstr "Gateway\n"
+
+#. label for dns domain name (like 'opensuse.org')
+#. txt_domain_name
+msgid "Domain Name\n"
+msgstr "Domänenname\n"
+
+#. label for nameserver list
+#. txt_nameservers
+msgid "Nameservers (separated by ',')\n"
+msgstr "Nameserver (durch ',' getrennt)\n"
+
+#. label for netmask; 'Host IP' refers to label txt_host_ip above
+#. txt_netmask
+msgid "Netmask\n(or use '/N' notation with Host IP)\n"
+msgstr ""
+"Netzmaske\n"
+"(Oder benutzen Sie die '/N'-Notation mit der Host-IP)\n"
+
+#. label for Live CD installation
+#. txt_live_kde
+msgid "openSUSE Live (KDE)"
+msgstr "openSUSE Live (KDE)"
+
+#. label for Live CD installation
+#. txt_live_gnome
+msgid "openSUSE Live (GNOME)"
+msgstr "openSUSE Live (GNOME)"
diff --git a/themes/openSUSE/po/el.po b/themes/openSUSE/po/el.po
new file mode 100644
index 0000000..a48af1d
--- /dev/null
+++ b/themes/openSUSE/po/el.po
@@ -0,0 +1,443 @@
+# translation of el.po to Hellenic-Ελληνικά-Greek
+# translation of el.po to Hellenic
+# LANGUAGE translations for boot loader
+# Copyright (C) 2004 SUSE LINUX AG
+# Hellenic SuSE Translators Group <hstg@billg.gr>, 2004, 2005.
+# Hellenic SuSE Translation Team <hstg@billg.gr>, 2005.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: bootloader.el\n"
+"PO-Revision-Date: 2008-06-06 12:52+0100\n"
+"Last-Translator: Vasileios Giannakopoulos <billg@billg.gr>\n"
+"Language-Team: Ελληνικά <billg@billg.gr>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.11.4\n"
+
+#. ok button label
+#. txt_ok
+msgid "OK"
+msgstr "Εντάξει"
+
+#. cancel button label
+#. txt_cancel
+msgid "Cancel"
+msgstr "Ακύρωση"
+
+#. reboot button label
+#. txt_reboot
+msgid "Reboot"
+msgstr "Επανεκκίνηση"
+
+#. continue button label
+#. txt_continue
+msgid "Continue"
+msgstr "Συνέχεια"
+
+#. txt_install
+msgid "Installation"
+msgstr "Εγκατάσταση"
+
+#. txt_safe_linux
+msgid "Linux--Safe Settings"
+msgstr "Linux--Ασφαλείς Ρυθμίσεις"
+
+#. txt_boot_harddisk
+msgid "Boot from Hard Disk"
+msgstr "Εκκίνηση από τον Σκληρό Δίσκο"
+
+#. txt_rescue
+msgid "Rescue System"
+msgstr "Σύστημα Διάσωσης"
+
+#. txt_memtest
+msgid "Memory Test"
+msgstr "Έλεγχος Μνήμης"
+
+#. txt_bootoptions
+msgid "Boot Options"
+msgstr "Ρυθμίσεις Εκκίνησης"
+
+#. window title for exit dialog
+#. txt_exit_title (see txt_exit_dialog)
+msgid "Exiting..."
+msgstr "Έξοδος..."
+
+#. txt_exit_dialog
+msgid ""
+"You are leaving the graphical boot menu and\n"
+"starting the text mode interface."
+msgstr ""
+"Εγκαταλείπετε το μενού γραφικής εκκίνησης και\n"
+"ξεκινάτε το περιβάλλον κατάστασης κειμένου."
+
+#. txt_help
+msgid "Help"
+msgstr "Βοήθεια"
+
+#. window title for kernel loading (see txt_load_kernel)
+#. txt_load_kernel_title
+msgid "Starting..."
+msgstr "Εκκίνηση..."
+
+#. Keep the three newlines!
+#. txt_load_kernel
+msgid ""
+"Loading Linux Kernel\n"
+"\n"
+"\n"
+msgstr ""
+"Ο πυρήνας του Linux φορτώνεται\n"
+"\n"
+"\n"
+
+#. Keep the three newlines!
+#. txt_load_memtest
+msgid ""
+"Loading memtest86\n"
+"\n"
+"\n"
+msgstr ""
+"Το memtest86 φορτώνεται\n"
+"\n"
+"\n"
+
+#. info box title
+#. txt_info_title
+msgid "Boot Loader"
+msgstr "Διαχειριστής Εκκίνησης "
+
+#. error box title
+#. txt_error_title
+msgid "I/O Error"
+msgstr "Σφάλμα Εισ/Εξ"
+
+#. boot disk change dialog title
+#. txt_change_disk_title
+msgid "Change Boot Disk"
+msgstr "Αλλαγή Δισκέτας Εκκίνησης"
+
+#. txt_insert_disk
+#, c-format
+msgid "Insert boot disk %u."
+msgstr "Παρακαλώ εισάγετε την δισκέτα εκκίνησης %u."
+
+#. txt_insert_disk2
+#, c-format
+msgid ""
+"This is boot disk %u.\n"
+"Insert boot disk %u."
+msgstr ""
+"Αυτή είναι η δισκέτα εκκίνησης %u.\n"
+"Παρακαλώ εισάγετε τη δισκέτα εκκίνησης %u."
+
+#. <product> is e.g. SuSE Linux X.Y or Enterprise Server Z
+#. txt_insert_disk3
+#, c-format
+msgid ""
+"This is not a <product> boot disk.\n"
+"Insert boot disk %u."
+msgstr ""
+"Αυτή δεν είναι δισκέτα εκκίνησης του <product>.\n"
+"Παρακαλώ εισάγετε τη δισκέτα εκκίνησης %u."
+
+#. password dialog title
+#. txt_password_title
+msgid "Password"
+msgstr "Κωδικός"
+
+#. txt_dud_ready
+msgid "Get your driver update floppy ready."
+msgstr "Ετοιμάστε την δισκέτα ενημέρωσης οδηγών."
+
+#. power off dialog title
+#. txt_power_off_title
+msgid "Power Off"
+msgstr "Διακοπή λειτουργίας"
+
+#. txt_power_off
+msgid "Halt the system now?"
+msgstr "Θέλετε να σταματήσετε το σύστημα τώρα;"
+
+#. menu entry for hard disk installation
+#. txt_harddisk
+msgid "Hard Disk"
+msgstr "Σκληρός Δίσκος"
+
+#. dialog title for hard disk installation
+#. txt_harddisk_title
+msgid "Hard Disk Installation"
+msgstr "Εγκατάσταση Σκληρού Δίσκου"
+
+#. txt_hd_diskdevice
+msgid "Disk Device (Scans All Disks If Empty)\n"
+msgstr "Συσκευή Δίσκου (Ελέγχει Όλους τους Δίσκους Αν είναι Κενοί)\n"
+
+#. txt_directory
+msgid "Directory\n"
+msgstr "Κατάλογος\n"
+
+#. dialog title for ftp installation
+#. txt_ftp_title
+msgid "FTP Installation"
+msgstr "Εγκατάσταση FTP"
+
+#. txt_server
+msgid "Server\n"
+msgstr "Διακομιστής\n"
+
+#. txt_password
+msgid "Password\n"
+msgstr "Κωδικός\n"
+
+#. label for ftp user input
+#. txt_user1
+msgid "User (Anonymous Login If Empty)\n"
+msgstr "Χρήστης (Ανώνυμη Σύνδεση Αν είναι Κενό)\n"
+
+#. dialog title for nfs installation
+#. txt_nfs_title
+msgid "NFS Installation"
+msgstr "Εγκατάσταση NFS"
+
+#. label for smb user input
+#. txt_user2
+msgid "User (Uses \"guest\" If Empty)\n"
+msgstr "Χρήστης (Χρήση του \"guest\" Αν είναι Κενό)\n"
+
+#. dialog title for smb installation
+#. txt_smb_title
+msgid "SMB (Windows Share) Installation"
+msgstr "Εγκατάσταση SMB (Windows Share)"
+
+#. dialog title for http installation
+#. txt_http_title
+msgid "HTTP Installation"
+msgstr "Εγκατάσταση HTTP"
+
+#. 'driver' as in '(hardware) driver update'
+#. txt_driver_update
+msgid "Driver"
+msgstr "Οδηγός"
+
+#. as in Windows Authentication Domain
+#. txt_domain
+msgid "Domain\n"
+msgstr "Περιοχή\n"
+
+#. button label for other/more options
+#. txt_other_options
+msgid "Other Options"
+msgstr "Άλλες Επιλογές"
+
+#. label for language selection
+#. txt_language
+msgid "Language"
+msgstr "Γλώσσα"
+
+#. txt_yes
+msgid "Yes"
+msgstr "Ναι"
+
+#. txt_no
+msgid "No"
+msgstr "Όχι"
+
+#. menu item for selecting a file
+#. txt_file
+msgid "File"
+msgstr "Αρχείο"
+
+#. input label: share as in "Windows share" (SMB)
+#. txt_share
+msgid "Share\n"
+msgstr "Κοινόχρηστο\n"
+
+#. txt_zenAuto
+msgid "Automatic Mode"
+msgstr "Αυτόματο Κατάσταση"
+
+#. txt_zenManual
+msgid "Manual Mode"
+msgstr "Χειροκίνητη Κατάσταση"
+
+#. txt_zenConfig
+msgid "Configure Parameters on ZEN Partition"
+msgstr "Ρύθμιση Παραμέτρων στην Κατάτμηση ΖΕΝ"
+
+#. txt_zenInstall
+msgid "Install or Update ZEN Partition"
+msgstr "Εγκατάσταση ή Ενημέρωση της Κατάτμησης ΖΕΝ"
+
+#. txt_zenLilo
+msgid "Reinstall ZEN Partition Boot Loader"
+msgstr "Επανεγκατάσταση του Διαχειριστή Εκκίνησης για την Κατάτμηση ΖΕΝ"
+
+#. txt_zenDisable
+msgid "Disable ZEN Partition"
+msgstr "Απενεργοποίηση Κατάτμησης ΖΕΝ"
+
+#. txt_zenEnable
+msgid "Enable ZEN Partition"
+msgstr "Ενεργοποίηση Κατάτμησης ΖΕΝ"
+
+#. video mode menu item
+#. txt_text_mode
+msgid "Text Mode"
+msgstr "Κατάσταση Κειμένου"
+
+#. menu item, like 'memory test'
+#. txt_firmware
+msgid "Firmware Test"
+msgstr "Δοκιμή Firmware"
+
+#. txt_dud_file_msg
+msgid ""
+"To load driver updates directly from CD-ROM,\n"
+"enter the driver update file names (separated\n"
+"by commas ',') here:\n"
+msgstr ""
+"Για να φορτώσετε ενημερώσεις οδηγών κατευθείαν από το CD-ROM,\n"
+"πρέπει να εισάγετε εδώ τα ονόματα των αρχείων των οδηγών ενημέρωσης (χωρισμένα\n"
+"από κόμμα ','):\n"
+
+#. install source menu title
+#. ** please keep it really short (comparable to the english text) **
+#. txt_install_source
+msgid "Source"
+msgstr "Πηγή"
+
+#. video mode/display size menu title
+#. ** please keep it really short (comparable to the english text) **
+#. txt_video_mode
+msgid "Video Mode"
+msgstr "Ρύθμιση Οθόνης"
+
+#. driver update dialog title
+#. -> txt_dud_file_msg
+#. txt_driver_update2
+msgid "Driver Update"
+msgstr "Ενημέρωση Οδηγού"
+
+#. menu label for selecting (cpu) architecture
+#. like i386, x86-64, ppc
+#. ** please keep it really short (comparable to the english text) **
+#. txt_arch
+msgid "Arch"
+msgstr "Τόξο"
+
+#. menu label for selecting some (linux) kernel variant
+#. ** please keep it really short (comparable to the english text) **
+#. txt_kernel
+msgid "Kernel"
+msgstr "Πυρήνας"
+
+#. menu item for kernel variant (cf. txt_kernel)
+#. txt_kernel_default
+msgid "Default"
+msgstr "Προκαθορισμένο"
+
+#. menu item for kernel variant (cf. txt_kernel)
+#. -> like in txt_safe_linux
+#. txt_kernel_safe
+msgid "Safe Settings"
+msgstr "Ασφαλείς Ρυθμίσεις"
+
+#. menu item for kernel variant (cf. txt_kernel)
+#. -> similar to txt_noacpi_install
+#. txt_kernel_noacpi
+msgid "No ACPI"
+msgstr "Χωρίς ACPI"
+
+#. menu item for kernel variant (cf. txt_kernel)
+#. -> similar to txt_nolapic_install
+#. txt_kernel_nolapic
+msgid "No Local APIC"
+msgstr "Χωρίς Τοπικό ACPI"
+
+#. main menu: start in system repair mode
+#. txt_repain_system
+msgid "Repair Installed System"
+msgstr "Επισκευή Εγκατεστημένου Συστήματος"
+
+#. menu item
+#. txt_mediacheck
+msgid "Check Installation Media"
+msgstr "Έλεγχος Μέσου Εγκατάστασης"
+
+#. menu item for keyboard layout (please keep it short)
+#. txt_keyboard
+msgid "Keyboard"
+msgstr "Πληκτρολόγιο"
+
+#. menu title
+#. txt_dud_download
+msgid "Download Driver Update"
+msgstr ""
+
+#. input label
+#. txt_dud_enter_url
+msgid "Enter Driver Update URL\n"
+msgstr ""
+
+#. menu item
+#. txt_http_proxy
+msgid "HTTP Proxy"
+msgstr ""
+
+#. menu item
+#. txt_network_config
+msgid "Network Config"
+msgstr ""
+
+#. menu item
+#. txt_no_network
+msgid "No Network"
+msgstr ""
+
+#. short menu item for manual network config (NOT some kind of manual)
+#. txt_manual_network
+msgid "Manual"
+msgstr ""
+
+#. dialog title for manual network config
+#. txt_manual_network_title
+msgid "Manual Network Config"
+msgstr ""
+
+#. label for ip address
+#. txt_host_ip
+msgid "Host IP\n"
+msgstr ""
+
+#. label for gateway ip
+#. txt_gateway_ip
+msgid "Gateway\n"
+msgstr ""
+
+#. label for dns domain name (like 'opensuse.org')
+#. txt_domain_name
+msgid "Domain Name\n"
+msgstr ""
+
+#. label for nameserver list
+#. txt_nameservers
+msgid "Nameservers (separated by ',')\n"
+msgstr ""
+
+#. label for netmask; 'Host IP' refers to label txt_host_ip above
+#. txt_netmask
+msgid "Netmask\n(or use '/N' notation with Host IP)\n"
+msgstr ""
+
+#. label for Live CD installation
+#. txt_live_kde
+msgid "openSUSE Live (KDE)"
+msgstr ""
+
+#. label for Live CD installation
+#. txt_live_gnome
+msgid "openSUSE Live (GNOME)"
+msgstr ""
diff --git a/themes/openSUSE/po/es.po b/themes/openSUSE/po/es.po
new file mode 100644
index 0000000..26cbb4c
--- /dev/null
+++ b/themes/openSUSE/po/es.po
@@ -0,0 +1,449 @@
+# translation of es.po to
+# translation of bootloader.po to
+# LANGUAGE translations for boot loader
+# Copyright (C) 2004 SUSE LINUX AG
+# , 2004
+# Ines Pozo <Ines.Pozo@novell.com>, 2005.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: bootloader\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: \n"
+"PO-Revision-Date: 2010-02-08 16:40+0100\n"
+"Last-Translator: Javier Llorente <javier@opensuse.org>\n"
+"Language-Team: Spanish <opensuse-translation-es@opensuse.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Lokalize 1.0\n"
+"X-Poedit-Language: Spanish\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#. ok button label
+#. txt_ok
+msgid "OK"
+msgstr "Aceptar"
+
+#. cancel button label
+#. txt_cancel
+msgid "Cancel"
+msgstr "Cancelar"
+
+#. reboot button label
+#. txt_reboot
+msgid "Reboot"
+msgstr "Reiniciar"
+
+#. continue button label
+#. txt_continue
+msgid "Continue"
+msgstr "Continuar"
+
+#. txt_install
+msgid "Installation"
+msgstr "Instalación"
+
+#. txt_safe_linux
+msgid "Linux--Safe Settings"
+msgstr "Linux -- Ajustes seguros"
+
+#. txt_boot_harddisk
+msgid "Boot from Hard Disk"
+msgstr "Arrancar desde el disco duro"
+
+#. txt_rescue
+msgid "Rescue System"
+msgstr "Sistema de rescate"
+
+#. txt_memtest
+msgid "Memory Test"
+msgstr "Prueba de memoria"
+
+#. txt_bootoptions
+msgid "Boot Options"
+msgstr "Opciones de arranque"
+
+#. window title for exit dialog
+#. txt_exit_title (see txt_exit_dialog)
+msgid "Exiting..."
+msgstr "Saliendo..."
+
+#. txt_exit_dialog
+msgid ""
+"You are leaving the graphical boot menu and\n"
+"starting the text mode interface."
+msgstr ""
+"Está saliendo del menú gráfico de arranque e\n"
+"iniciando la interfaz en modo texto."
+
+#. txt_help
+msgid "Help"
+msgstr "Ayuda"
+
+#. window title for kernel loading (see txt_load_kernel)
+#. txt_load_kernel_title
+msgid "Starting..."
+msgstr "Iniciando..."
+
+#. Keep the three newlines!
+#. txt_load_kernel
+msgid ""
+"Loading Linux Kernel\n"
+"\n"
+"\n"
+msgstr ""
+"Cargando el kernel Linux\n"
+"\n"
+"\n"
+
+#. Keep the three newlines!
+#. txt_load_memtest
+msgid ""
+"Loading memtest86\n"
+"\n"
+"\n"
+msgstr ""
+"Cargando memtest86\n"
+"\n"
+"\n"
+
+#. info box title
+#. txt_info_title
+msgid "Boot Loader"
+msgstr "Cargador de arranque"
+
+#. error box title
+#. txt_error_title
+msgid "I/O Error"
+msgstr "Error de E/S"
+
+#. boot disk change dialog title
+#. txt_change_disk_title
+msgid "Change Boot Disk"
+msgstr "Cambiar el disco de arranque"
+
+#. txt_insert_disk
+#, c-format
+msgid "Insert boot disk %u."
+msgstr "Inserte el disco de arranque %u."
+
+#. txt_insert_disk2
+#, c-format
+msgid ""
+"This is boot disk %u.\n"
+"Insert boot disk %u."
+msgstr ""
+"Este es el disco de arranque %u.\n"
+"Inserte el disco de arranque %u."
+
+#. <product> is e.g. SuSE Linux X.Y or Enterprise Server Z
+#. txt_insert_disk3
+#, c-format
+msgid ""
+"This is not a <product> boot disk.\n"
+"Insert boot disk %u."
+msgstr ""
+"Este no es un disco de arranque de <product>.\n"
+"Introduzca el disco de arranque %u."
+
+#. password dialog title
+#. txt_password_title
+msgid "Password"
+msgstr "Contraseña"
+
+#. txt_dud_ready
+msgid "Get your driver update floppy ready."
+msgstr "Tenga listo el disco de actualización del controlador."
+
+#. power off dialog title
+#. txt_power_off_title
+msgid "Power Off"
+msgstr "Apagar"
+
+#. txt_power_off
+msgid "Halt the system now?"
+msgstr "¿Desea apagar el sistema ahora?"
+
+#. menu entry for hard disk installation
+#. txt_harddisk
+msgid "Hard Disk"
+msgstr "Disco duro"
+
+#. dialog title for hard disk installation
+#. txt_harddisk_title
+msgid "Hard Disk Installation"
+msgstr "Instalación disco duro"
+
+#. txt_hd_diskdevice
+msgid "Disk Device (Scans All Disks If Empty)\n"
+msgstr "Dispositivo de disco (analiza todos los discos si se deja vacío)\n"
+
+#. txt_directory
+msgid "Directory\n"
+msgstr "Directorio\n"
+
+#. dialog title for ftp installation
+#. txt_ftp_title
+msgid "FTP Installation"
+msgstr "Instalación FTP"
+
+#. txt_server
+msgid "Server\n"
+msgstr "Servidor\n"
+
+#. txt_password
+msgid "Password\n"
+msgstr "Contraseña\n"
+
+#. label for ftp user input
+#. txt_user1
+msgid "User (Anonymous Login If Empty)\n"
+msgstr "Usuario (dejar vacío para anónimo)\n"
+
+#. dialog title for nfs installation
+#. txt_nfs_title
+msgid "NFS Installation"
+msgstr "Instalación NFS"
+
+#. label for smb user input
+#. txt_user2
+msgid "User (Uses \"guest\" If Empty)\n"
+msgstr "Usuario (se utiliza \"guest\" si se deja vacío)\n"
+
+#. dialog title for smb installation
+#. txt_smb_title
+msgid "SMB (Windows Share) Installation"
+msgstr "Instalación SMB (recurso compartido Windows)"
+
+#. dialog title for http installation
+#. txt_http_title
+msgid "HTTP Installation"
+msgstr "Instalación HTTP"
+
+#. 'driver' as in '(hardware) driver update'
+#. txt_driver_update
+msgid "Driver"
+msgstr "Controlador"
+
+#. as in Windows Authentication Domain
+#. txt_domain
+msgid "Domain\n"
+msgstr "Dominio\n"
+
+#. button label for other/more options
+#. txt_other_options
+msgid "Other Options"
+msgstr "Otras opciones"
+
+#. label for language selection
+#. txt_language
+msgid "Language"
+msgstr "Idioma"
+
+#. txt_yes
+msgid "Yes"
+msgstr "Sí"
+
+#. txt_no
+msgid "No"
+msgstr "No"
+
+#. menu item for selecting a file
+#. txt_file
+msgid "File"
+msgstr "Archivo"
+
+#. input label: share as in "Windows share" (SMB)
+#. txt_share
+msgid "Share\n"
+msgstr "Compartir\n"
+
+#. txt_zenAuto
+msgid "Automatic Mode"
+msgstr "Modo automático"
+
+#. txt_zenManual
+msgid "Manual Mode"
+msgstr "Modo manual"
+
+#. txt_zenConfig
+msgid "Configure Parameters on ZEN Partition"
+msgstr "Configurar parámetros en la partición ZEN"
+
+#. txt_zenInstall
+msgid "Install or Update ZEN Partition"
+msgstr "Instalar o actualizar la partición ZEN"
+
+#. txt_zenLilo
+msgid "Reinstall ZEN Partition Boot Loader"
+msgstr "Volver a instalar el cargador de arranque de partición ZEN"
+
+#. txt_zenDisable
+msgid "Disable ZEN Partition"
+msgstr "Deshabilitar partición ZEN"
+
+#. txt_zenEnable
+msgid "Enable ZEN Partition"
+msgstr "Habilitar partición ZEN"
+
+#. video mode menu item
+#. txt_text_mode
+msgid "Text Mode"
+msgstr "Modo texto"
+
+#. menu item, like 'memory test'
+#. txt_firmware
+msgid "Firmware Test"
+msgstr "Prueba de firmware"
+
+#. txt_dud_file_msg
+msgid ""
+"To load driver updates directly from CD-ROM,\n"
+"enter the driver update file names (separated\n"
+"by commas ',') here:\n"
+msgstr ""
+"Para cargar las actualizaciones de controlador directamente desde el CD-ROM,\n"
+"indique los nombres de archivo de las actualizaciones del controlador (separados\n"
+"por comas \",\") aquí:\n"
+
+#. install source menu title
+#. ** please keep it really short (comparable to the english text) **
+#. txt_install_source
+msgid "Source"
+msgstr "Origen"
+
+#. video mode/display size menu title
+#. ** please keep it really short (comparable to the english text) **
+#. txt_video_mode
+msgid "Video Mode"
+msgstr "Modo de vídeo"
+
+#. driver update dialog title
+#. -> txt_dud_file_msg
+#. txt_driver_update2
+msgid "Driver Update"
+msgstr "Actualización de controlador"
+
+#. menu label for selecting (cpu) architecture
+#. like i386, x86-64, ppc
+#. ** please keep it really short (comparable to the english text) **
+#. txt_arch
+msgid "Arch"
+msgstr "Arquitectura"
+
+#. menu label for selecting some (linux) kernel variant
+#. ** please keep it really short (comparable to the english text) **
+#. txt_kernel
+msgid "Kernel"
+msgstr "Kernel"
+
+#. menu item for kernel variant (cf. txt_kernel)
+#. txt_kernel_default
+msgid "Default"
+msgstr "Predeterminado"
+
+#. menu item for kernel variant (cf. txt_kernel)
+#. -> like in txt_safe_linux
+#. txt_kernel_safe
+msgid "Safe Settings"
+msgstr "Ajustes seguros"
+
+#. menu item for kernel variant (cf. txt_kernel)
+#. -> similar to txt_noacpi_install
+#. txt_kernel_noacpi
+msgid "No ACPI"
+msgstr "Sin ACPI"
+
+#. menu item for kernel variant (cf. txt_kernel)
+#. -> similar to txt_nolapic_install
+#. txt_kernel_nolapic
+msgid "No Local APIC"
+msgstr "Sin APIC local"
+
+#. main menu: start in system repair mode
+#. txt_repain_system
+msgid "Repair Installed System"
+msgstr "Reparar el sistema instalado"
+
+#. menu item
+#. txt_mediacheck
+msgid "Check Installation Media"
+msgstr "Verificar el medio de instalación"
+
+#. menu item for keyboard layout (please keep it short)
+#. txt_keyboard
+msgid "Keyboard"
+msgstr "Teclado"
+
+#. menu title
+#. txt_dud_download
+msgid "Download Driver Update"
+msgstr "Bajar actualización de controlador"
+
+#. input label
+#. txt_dud_enter_url
+msgid "Enter Driver Update URL\n"
+msgstr "Escribir URL de actualización de controlador\n"
+
+#. menu item
+#. txt_http_proxy
+msgid "HTTP Proxy"
+msgstr "Proxy HTTP"
+
+#. menu item
+#. txt_network_config
+msgid "Network Config"
+msgstr "Configuración de red"
+
+#. menu item
+#. txt_no_network
+msgid "No Network"
+msgstr "No hay red"
+
+#. short menu item for manual network config (NOT some kind of manual)
+#. txt_manual_network
+msgid "Manual"
+msgstr "Manual"
+
+#. dialog title for manual network config
+#. txt_manual_network_title
+msgid "Manual Network Config"
+msgstr "Configuración manual de la red"
+
+#. label for ip address
+#. txt_host_ip
+msgid "Host IP\n"
+msgstr "IP del host\n"
+
+#. label for gateway ip
+#. txt_gateway_ip
+msgid "Gateway\n"
+msgstr "Puerta de enlace\n"
+
+#. label for dns domain name (like 'opensuse.org')
+#. txt_domain_name
+msgid "Domain Name\n"
+msgstr "Nombre de dominio\n"
+
+#. label for nameserver list
+#. txt_nameservers
+msgid "Nameservers (separated by ',')\n"
+msgstr "Servidores de nombres (separados por ',')\n"
+
+#. label for netmask; 'Host IP' refers to label txt_host_ip above
+#. txt_netmask
+msgid "Netmask\n(or use '/N' notation with Host IP)\n"
+msgstr ""
+"Mascara de red\n"
+"(o use la notación '/N' con la IP del host)\n"
+
+#. label for Live CD installation
+#. txt_live_kde
+msgid "openSUSE Live (KDE)"
+msgstr "openSUSE Live (KDE)"
+
+#. label for Live CD installation
+#. txt_live_gnome
+msgid "openSUSE Live (GNOME)"
+msgstr "openSUSE Live (GNOME)"
diff --git a/themes/openSUSE/po/et.po b/themes/openSUSE/po/et.po
new file mode 100644
index 0000000..d7e4eff
--- /dev/null
+++ b/themes/openSUSE/po/et.po
@@ -0,0 +1,441 @@
+# LANGUAGE translations for boot loader
+# Copyright (C) 2005 SUSE Linux GmbH
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: bootloader.et\n"
+"POT-Creation-Date: 2003-03-04 15:08+0100\n"
+"PO-Revision-Date: 2007-10-04 23:04+0300\n"
+"Last-Translator: Ain Vagula <avagula@gmail.com>\n"
+"Language-Team: Estonian <linux-ee@lists.eenet.ee>\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"
+
+#. ok button label
+#. txt_ok
+msgid "OK"
+msgstr "Sobib"
+
+#. cancel button label
+#. txt_cancel
+msgid "Cancel"
+msgstr "Loobu"
+
+#. reboot button label
+#. txt_reboot
+msgid "Reboot"
+msgstr "Taaskäivita"
+
+#. continue button label
+#. txt_continue
+msgid "Continue"
+msgstr "Jätka"
+
+#. txt_install
+msgid "Installation"
+msgstr "Paigaldamine"
+
+#. txt_safe_linux
+msgid "Linux--Safe Settings"
+msgstr "Linux--ohutud sätted"
+
+#. txt_boot_harddisk
+msgid "Boot from Hard Disk"
+msgstr "Alglaadimine kõvakettalt"
+
+#. txt_rescue
+msgid "Rescue System"
+msgstr "Päästesüsteem"
+
+#. txt_memtest
+msgid "Memory Test"
+msgstr "Mälu testimine"
+
+#. txt_bootoptions
+msgid "Boot Options"
+msgstr "Alglaadimise sätted"
+
+#. window title for exit dialog
+#. txt_exit_title (see txt_exit_dialog)
+msgid "Exiting..."
+msgstr "Väljumine..."
+
+#. txt_exit_dialog
+msgid ""
+"You are leaving the graphical boot menu and\n"
+"starting the text mode interface."
+msgstr ""
+"Graafiline alglaadimismenüü suletakse\n"
+"ja käivitatakse tekstirežiimi liides."
+
+#. txt_help
+msgid "Help"
+msgstr "Abi"
+
+#. window title for kernel loading (see txt_load_kernel)
+#. txt_load_kernel_title
+msgid "Starting..."
+msgstr "Alustamine..."
+
+#. Keep the three newlines!
+#. txt_load_kernel
+msgid ""
+"Loading Linux Kernel\n"
+"\n"
+"\n"
+msgstr ""
+"Linux'i kerneli laadimine\n"
+"\n"
+"\n"
+
+#. Keep the three newlines!
+#. txt_load_memtest
+msgid ""
+"Loading memtest86\n"
+"\n"
+"\n"
+msgstr ""
+"memtest86 laadimine\n"
+"\n"
+"\n"
+
+#. info box title
+#. txt_info_title
+msgid "Boot Loader"
+msgstr "Alglaadija"
+
+#. error box title
+#. txt_error_title
+msgid "I/O Error"
+msgstr "I/O viga"
+
+#. boot disk change dialog title
+#. txt_change_disk_title
+msgid "Change Boot Disk"
+msgstr "Alglaadimisketta vahetamine"
+
+#. txt_insert_disk
+#, c-format
+msgid "Insert boot disk %u."
+msgstr "Sisesta alglaadimisketas %u."
+
+#. txt_insert_disk2
+#, c-format
+msgid ""
+"This is boot disk %u.\n"
+"Insert boot disk %u."
+msgstr ""
+"See on alglaadimisketas %u.\n"
+"Sisesta alglaadimisketas %u."
+
+#. <product> is e.g. SuSE Linux X.Y or Enterprise Server Z
+#. txt_insert_disk3
+#, c-format
+msgid ""
+"This is not a <product> boot disk.\n"
+"Insert boot disk %u."
+msgstr ""
+"See ei ole <product> alglaadimisketas.\n"
+"Sisesta alglaadimisketas %u."
+
+#. password dialog title
+#. txt_password_title
+msgid "Password"
+msgstr "Parool"
+
+#. txt_dud_ready
+msgid "Get your driver update floppy ready."
+msgstr "Hoia oma draiverite uuendamise diskett käepärast."
+
+#. power off dialog title
+#. txt_power_off_title
+msgid "Power Off"
+msgstr "Väljalülitamine"
+
+#. txt_power_off
+msgid "Halt the system now?"
+msgstr "Kas lülitada süsteem välja?"
+
+#. menu entry for hard disk installation
+#. txt_harddisk
+msgid "Hard Disk"
+msgstr "Kõvaketas"
+
+#. dialog title for hard disk installation
+#. txt_harddisk_title
+msgid "Hard Disk Installation"
+msgstr "Paigaldamine kõvakettalt"
+
+#. txt_hd_diskdevice
+msgid "Disk Device (Scans All Disks If Empty)\n"
+msgstr "Kettaseade (puudumise korral skaneeritakse kõiki kettaid)\n"
+
+#. txt_directory
+msgid "Directory\n"
+msgstr "Kataloog\n"
+
+#. dialog title for ftp installation
+#. txt_ftp_title
+msgid "FTP Installation"
+msgstr "FTP-paigaldus"
+
+#. txt_server
+msgid "Server\n"
+msgstr "Server\n"
+
+#. txt_password
+msgid "Password\n"
+msgstr "Parool\n"
+
+#. label for ftp user input
+#. txt_user1
+msgid "User (Anonymous Login If Empty)\n"
+msgstr "Kasutajanimi (anonüümse sisselogimise korral jäta tühjaks)\n"
+
+#. dialog title for nfs installation
+#. txt_nfs_title
+msgid "NFS Installation"
+msgstr "NFS-paigaldus"
+
+#. label for smb user input
+#. txt_user2
+msgid "User (Uses \"guest\" If Empty)\n"
+msgstr "Kasutajanimi (kui väli on tühi, kasutatakse \"guest\"-i)\n"
+
+#. dialog title for smb installation
+#. txt_smb_title
+msgid "SMB (Windows Share) Installation"
+msgstr "SMB (Windows'i jagatud ressurss) paigaldus"
+
+#. dialog title for http installation
+#. txt_http_title
+msgid "HTTP Installation"
+msgstr "HTTP-paigaldus"
+
+#. 'driver' as in '(hardware) driver update'
+#. txt_driver_update
+msgid "Driver"
+msgstr "Draiver"
+
+#. as in Windows Authentication Domain
+#. txt_domain
+msgid "Domain\n"
+msgstr "Domeen\n"
+
+#. button label for other/more options
+#. txt_other_options
+msgid "Other Options"
+msgstr "Muud sätted"
+
+#. label for language selection
+#. txt_language
+msgid "Language"
+msgstr "Keel"
+
+#. txt_yes
+msgid "Yes"
+msgstr "Jah"
+
+#. txt_no
+msgid "No"
+msgstr "Ei"
+
+#. menu item for selecting a file
+#. txt_file
+msgid "File"
+msgstr "Fail"
+
+#. input label: share as in "Windows share" (SMB)
+#. txt_share
+msgid "Share\n"
+msgstr "Ressurss\n"
+
+#. txt_zenAuto
+msgid "Automatic Mode"
+msgstr "Automaatrežiim"
+
+#. txt_zenManual
+msgid "Manual Mode"
+msgstr "Käsitsirežiim"
+
+#. txt_zenConfig
+msgid "Configure Parameters on ZEN Partition"
+msgstr "ZEN-partitsiooni parameetrite häälestamine"
+
+#. txt_zenInstall
+msgid "Install or Update ZEN Partition"
+msgstr "ZEN-partitsiooni paigaldamine või uuendamine"
+
+#. txt_zenLilo
+msgid "Reinstall ZEN Partition Boot Loader"
+msgstr "ZEN-partitsiooni alglaadija taaspaigaldamine"
+
+#. txt_zenDisable
+msgid "Disable ZEN Partition"
+msgstr "ZEN-partitsiooni keelamine"
+
+#. txt_zenEnable
+msgid "Enable ZEN Partition"
+msgstr "ZEN-partitsiooni lubamine"
+
+#. video mode menu item
+#. txt_text_mode
+msgid "Text Mode"
+msgstr "Tekstirežiim"
+
+#. menu item, like 'memory test'
+#. txt_firmware
+msgid "Firmware Test"
+msgstr "Püsivara test"
+
+#. txt_dud_file_msg
+msgid ""
+"To load driver updates directly from CD-ROM,\n"
+"enter the driver update file names (separated\n"
+"by commas ',') here:\n"
+msgstr ""
+"Draiveri uuenduste laadimiseks CD-ROM-ilt\n"
+"sisesta siia draiveri uuenduste failide nimed\n"
+"(eraldatud komadega ','):\n"
+
+#. install source menu title
+#. ** please keep it really short (comparable to the english text) **
+#. txt_install_source
+msgid "Source"
+msgstr "Allikas"
+
+#. video mode/display size menu title
+#. ** please keep it really short (comparable to the english text) **
+#. txt_video_mode
+msgid "Video Mode"
+msgstr "Videorežiim"
+
+#. driver update dialog title
+#. -> txt_dud_file_msg
+#. txt_driver_update2
+msgid "Driver Update"
+msgstr "Draiverite uuendamine"
+
+#. menu label for selecting (cpu) architecture
+#. like i386, x86-64, ppc
+#. ** please keep it really short (comparable to the english text) **
+#. txt_arch
+msgid "Arch"
+msgstr "Arh."
+
+#. menu label for selecting some (linux) kernel variant
+#. ** please keep it really short (comparable to the english text) **
+#. txt_kernel
+msgid "Kernel"
+msgstr "Kernel"
+
+#. menu item for kernel variant (cf. txt_kernel)
+#. txt_kernel_default
+msgid "Default"
+msgstr "Vaikimisi"
+
+#. menu item for kernel variant (cf. txt_kernel)
+#. -> like in txt_safe_linux
+#. txt_kernel_safe
+msgid "Safe Settings"
+msgstr "Ohutud sätted"
+
+#. menu item for kernel variant (cf. txt_kernel)
+#. -> similar to txt_noacpi_install
+#. txt_kernel_noacpi
+msgid "No ACPI"
+msgstr "Ilma ACPI-ta"
+
+#. menu item for kernel variant (cf. txt_kernel)
+#. -> similar to txt_nolapic_install
+#. txt_kernel_nolapic
+msgid "No Local APIC"
+msgstr "Ilma kohaliku APIC-ta"
+
+#. main menu: start in system repair mode
+#. txt_repain_system
+msgid "Repair Installed System"
+msgstr "Paigaldatud süsteemi parandamine"
+
+#. menu item
+#. txt_mediacheck
+msgid "Check Installation Media"
+msgstr ""
+
+#. menu item for keyboard layout (please keep it short)
+#. txt_keyboard
+msgid "Keyboard"
+msgstr "Klaviatuur"
+
+#. menu title
+#. txt_dud_download
+msgid "Download Driver Update"
+msgstr ""
+
+#. input label
+#. txt_dud_enter_url
+msgid "Enter Driver Update URL\n"
+msgstr ""
+
+#. menu item
+#. txt_http_proxy
+msgid "HTTP Proxy"
+msgstr ""
+
+#. menu item
+#. txt_network_config
+msgid "Network Config"
+msgstr ""
+
+#. menu item
+#. txt_no_network
+msgid "No Network"
+msgstr ""
+
+#. short menu item for manual network config (NOT some kind of manual)
+#. txt_manual_network
+msgid "Manual"
+msgstr ""
+
+#. dialog title for manual network config
+#. txt_manual_network_title
+msgid "Manual Network Config"
+msgstr ""
+
+#. label for ip address
+#. txt_host_ip
+msgid "Host IP\n"
+msgstr ""
+
+#. label for gateway ip
+#. txt_gateway_ip
+msgid "Gateway\n"
+msgstr ""
+
+#. label for dns domain name (like 'opensuse.org')
+#. txt_domain_name
+msgid "Domain Name\n"
+msgstr ""
+
+#. label for nameserver list
+#. txt_nameservers
+msgid "Nameservers (separated by ',')\n"
+msgstr ""
+
+#. label for netmask; 'Host IP' refers to label txt_host_ip above
+#. txt_netmask
+msgid "Netmask\n(or use '/N' notation with Host IP)\n"
+msgstr ""
+
+#. label for Live CD installation
+#. txt_live_kde
+msgid "openSUSE Live (KDE)"
+msgstr ""
+
+#. label for Live CD installation
+#. txt_live_gnome
+msgid "openSUSE Live (GNOME)"
+msgstr ""
diff --git a/themes/openSUSE/po/fi.po b/themes/openSUSE/po/fi.po
new file mode 100644
index 0000000..ec82fb2
--- /dev/null
+++ b/themes/openSUSE/po/fi.po
@@ -0,0 +1,447 @@
+# translation of fi.po to suomi
+# translation of bootloader.fi.po to
+# translation of bootloader.po to
+# LANGUAGE translations for boot loader
+# Copyright (C) 2005 SUSE Linux GmbH
+#
+# Jyri Palokangas <jmp@netti.fi>, 2005, 2006.
+# Jami Saarikoski <jami.saarikoski@gmail.com>, 2006.
+msgid ""
+msgstr ""
+"Project-Id-Version: bootloader.fi\n"
+"PO-Revision-Date: 2010-09-18 15:57+0300\n"
+"Last-Translator: Katariina Kemppainen <katariina07@yahoo.se>\n"
+"Language-Team: Finnish <opensuse-fi@opensuse.fi>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Lokalize 1.0\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+
+#. ok button label
+#. txt_ok
+msgid "OK"
+msgstr "OK"
+
+#. cancel button label
+#. txt_cancel
+msgid "Cancel"
+msgstr "Peruuta"
+
+#. reboot button label
+#. txt_reboot
+msgid "Reboot"
+msgstr "Käynnistä uudelleen"
+
+#. continue button label
+#. txt_continue
+msgid "Continue"
+msgstr "Jatka"
+
+#. txt_install
+msgid "Installation"
+msgstr "Asennus"
+
+#. txt_safe_linux
+msgid "Linux--Safe Settings"
+msgstr "Linux--Turvalliset asetukset"
+
+#. txt_boot_harddisk
+msgid "Boot from Hard Disk"
+msgstr "Käynnistä kiintolevyltä"
+
+#. txt_rescue
+msgid "Rescue System"
+msgstr "Korjausjärjestelmä"
+
+#. txt_memtest
+msgid "Memory Test"
+msgstr "Muistitesti"
+
+#. txt_bootoptions
+msgid "Boot Options"
+msgstr "Käynnistysvalinnat"
+
+#. window title for exit dialog
+#. txt_exit_title (see txt_exit_dialog)
+msgid "Exiting..."
+msgstr "Poistutaan..."
+
+#. txt_exit_dialog
+msgid ""
+"You are leaving the graphical boot menu and\n"
+"starting the text mode interface."
+msgstr ""
+"Olet poistumassa graafisesta käynnistysvalikosta ja\n"
+"käynnistämässä tekstipohjaisen liittymän."
+
+#. txt_help
+msgid "Help"
+msgstr "Ohje"
+
+#. window title for kernel loading (see txt_load_kernel)
+#. txt_load_kernel_title
+msgid "Starting..."
+msgstr "Käynnistetään..."
+
+#. Keep the three newlines!
+#. txt_load_kernel
+msgid ""
+"Loading Linux Kernel\n"
+"\n"
+"\n"
+msgstr ""
+"Linux-ytimen lataaminen\n"
+"\n"
+"\n"
+
+#. Keep the three newlines!
+#. txt_load_memtest
+msgid ""
+"Loading memtest86\n"
+"\n"
+"\n"
+msgstr ""
+"Ladataan memtest86\n"
+"\n"
+"\n"
+
+#. info box title
+#. txt_info_title
+msgid "Boot Loader"
+msgstr "Käynnistyslataaja"
+
+#. error box title
+#. txt_error_title
+msgid "I/O Error"
+msgstr "I/O-virhe"
+
+#. boot disk change dialog title
+#. txt_change_disk_title
+msgid "Change Boot Disk"
+msgstr "Muuta käynnistyslevyä"
+
+#. txt_insert_disk
+#, c-format
+msgid "Insert boot disk %u."
+msgstr "Anna käynnistyslevyke %u."
+
+#. txt_insert_disk2
+#, c-format
+msgid ""
+"This is boot disk %u.\n"
+"Insert boot disk %u."
+msgstr ""
+"Tämä on käynnistyslevyke %u.\n"
+"Anna käynnistyslevyke %u."
+
+#. <product> is e.g. SuSE Linux X.Y or Enterprise Server Z
+#. txt_insert_disk3
+#, c-format
+msgid ""
+"This is not a <product> boot disk.\n"
+"Insert boot disk %u."
+msgstr ""
+"Tämä ei ole <product> käynnistyslevyke.\n"
+"Anna käynnistyslevyke %u."
+
+#. password dialog title
+#. txt_password_title
+msgid "Password"
+msgstr "Salasana"
+
+#. txt_dud_ready
+msgid "Get your driver update floppy ready."
+msgstr "Ota ajurin päivityslevyke valmiiksi."
+
+#. power off dialog title
+#. txt_power_off_title
+msgid "Power Off"
+msgstr "Katkaise virta"
+
+#. txt_power_off
+msgid "Halt the system now?"
+msgstr "Pysäytetäänkö järjestelmä nyt?"
+
+#. menu entry for hard disk installation
+#. txt_harddisk
+msgid "Hard Disk"
+msgstr "Kiintolevy"
+
+#. dialog title for hard disk installation
+#. txt_harddisk_title
+msgid "Hard Disk Installation"
+msgstr "Kiintolevyasennus"
+
+#. txt_hd_diskdevice
+msgid "Disk Device (Scans All Disks If Empty)\n"
+msgstr "Levylaite (jos tyhjä, tarkistetaan kaikki levyt)\n"
+
+#. txt_directory
+msgid "Directory\n"
+msgstr "Hakemisto\n"
+
+#. dialog title for ftp installation
+#. txt_ftp_title
+msgid "FTP Installation"
+msgstr "FTP-asennus"
+
+#. txt_server
+msgid "Server\n"
+msgstr "Palvelin\n"
+
+#. txt_password
+msgid "Password\n"
+msgstr "Salasana\n"
+
+#. label for ftp user input
+#. txt_user1
+msgid "User (Anonymous Login If Empty)\n"
+msgstr "Käyttäjä (anonyymi sisäänkirjautuminen, jos tyhjä)\n"
+
+#. dialog title for nfs installation
+#. txt_nfs_title
+msgid "NFS Installation"
+msgstr "NFS-asennus"
+
+#. label for smb user input
+#. txt_user2
+msgid "User (Uses \"guest\" If Empty)\n"
+msgstr "Käyttäjä (tunnuksella \"guest\", jos tyhjä)\n"
+
+#. dialog title for smb installation
+#. txt_smb_title
+msgid "SMB (Windows Share) Installation"
+msgstr "SMB-asennus (Windows-jako) "
+
+#. dialog title for http installation
+#. txt_http_title
+msgid "HTTP Installation"
+msgstr "HTTP-asennus"
+
+#. 'driver' as in '(hardware) driver update'
+#. txt_driver_update
+msgid "Driver"
+msgstr "Ajuri"
+
+#. as in Windows Authentication Domain
+#. txt_domain
+msgid "Domain\n"
+msgstr "Toimialue\n"
+
+#. button label for other/more options
+#. txt_other_options
+msgid "Other Options"
+msgstr "Muut valinnat"
+
+#. label for language selection
+#. txt_language
+msgid "Language"
+msgstr "Kieli"
+
+#. txt_yes
+msgid "Yes"
+msgstr "Kyllä"
+
+#. txt_no
+msgid "No"
+msgstr "Ei"
+
+#. menu item for selecting a file
+#. txt_file
+msgid "File"
+msgstr "Tiedosto"
+
+#. input label: share as in "Windows share" (SMB)
+#. txt_share
+msgid "Share\n"
+msgstr "Jako\n"
+
+#. txt_zenAuto
+msgid "Automatic Mode"
+msgstr "Automaattinen tila"
+
+#. txt_zenManual
+msgid "Manual Mode"
+msgstr "Manuaalinen tila"
+
+#. txt_zenConfig
+msgid "Configure Parameters on ZEN Partition"
+msgstr "Määritä ZEN-osion parametrit"
+
+#. txt_zenInstall
+msgid "Install or Update ZEN Partition"
+msgstr "Asenna tai päivitä ZEN-osio"
+
+#. txt_zenLilo
+msgid "Reinstall ZEN Partition Boot Loader"
+msgstr "Asenna ZEN-osion käynnistyslataaja uudelleen"
+
+#. txt_zenDisable
+msgid "Disable ZEN Partition"
+msgstr "Poista ZEN-osio käytöstä"
+
+#. txt_zenEnable
+msgid "Enable ZEN Partition"
+msgstr "Ota ZEN-osio käyttöön"
+
+#. video mode menu item
+#. txt_text_mode
+msgid "Text Mode"
+msgstr "Tekstitila"
+
+#. menu item, like 'memory test'
+#. txt_firmware
+msgid "Firmware Test"
+msgstr "Laitteisto-ohjelmiston testi"
+
+#. txt_dud_file_msg
+msgid ""
+"To load driver updates directly from CD-ROM,\n"
+"enter the driver update file names (separated\n"
+"by commas ',') here:\n"
+msgstr ""
+"Jos haluat ladata ajuripäivityksen suoraan CD-ROM-levyltä,\n"
+"anna ajuripäivityksen tiedostonimet (erotettuina\n"
+"pilkuilla ','):\n"
+
+#. install source menu title
+#. ** please keep it really short (comparable to the english text) **
+#. txt_install_source
+msgid "Source"
+msgstr "Lähde"
+
+#. video mode/display size menu title
+#. ** please keep it really short (comparable to the english text) **
+#. txt_video_mode
+msgid "Video Mode"
+msgstr "Videotila"
+
+#. driver update dialog title
+#. -> txt_dud_file_msg
+#. txt_driver_update2
+msgid "Driver Update"
+msgstr "Ohjainpäivitys"
+
+#. menu label for selecting (cpu) architecture
+#. like i386, x86-64, ppc
+#. ** please keep it really short (comparable to the english text) **
+#. txt_arch
+msgid "Arch"
+msgstr "Arkkitehtuuri"
+
+#. menu label for selecting some (linux) kernel variant
+#. ** please keep it really short (comparable to the english text) **
+#. txt_kernel
+msgid "Kernel"
+msgstr "Ydin"
+
+#. menu item for kernel variant (cf. txt_kernel)
+#. txt_kernel_default
+msgid "Default"
+msgstr "Oletus"
+
+#. menu item for kernel variant (cf. txt_kernel)
+#. -> like in txt_safe_linux
+#. txt_kernel_safe
+msgid "Safe Settings"
+msgstr "Turvalliset asetukset"
+
+#. menu item for kernel variant (cf. txt_kernel)
+#. -> similar to txt_noacpi_install
+#. txt_kernel_noacpi
+msgid "No ACPI"
+msgstr "Ei ACPI"
+
+#. menu item for kernel variant (cf. txt_kernel)
+#. -> similar to txt_nolapic_install
+#. txt_kernel_nolapic
+msgid "No Local APIC"
+msgstr "Ei paikallinen APIC"
+
+#. main menu: start in system repair mode
+#. txt_repain_system
+msgid "Repair Installed System"
+msgstr "Korjaa asennettu järjestelmä"
+
+#. menu item
+#. txt_mediacheck
+msgid "Check Installation Media"
+msgstr "Tarkista asennusmedia"
+
+#. menu item for keyboard layout (please keep it short)
+#. txt_keyboard
+msgid "Keyboard"
+msgstr "Näppäimistö"
+
+#. menu title
+#. txt_dud_download
+msgid "Download Driver Update"
+msgstr "Lataa ohjainpäivitys"
+
+#. input label
+#. txt_dud_enter_url
+msgid "Enter Driver Update URL\n"
+msgstr "Anna ohjainpäivityksen verkko-osoite\n"
+
+#. menu item
+#. txt_http_proxy
+msgid "HTTP Proxy"
+msgstr "HTTP-välityspalvelin"
+
+#. menu item
+#. txt_network_config
+msgid "Network Config"
+msgstr "Verkon määritys"
+
+#. menu item
+#. txt_no_network
+msgid "No Network"
+msgstr "Ei verkkoa"
+
+#. short menu item for manual network config (NOT some kind of manual)
+#. txt_manual_network
+msgid "Manual"
+msgstr "Manuaalisesti"
+
+#. dialog title for manual network config
+#. txt_manual_network_title
+msgid "Manual Network Config"
+msgstr "Manuaalinen verkon määritys"
+
+#. label for ip address
+#. txt_host_ip
+msgid "Host IP\n"
+msgstr "Koneen IP\n"
+
+#. label for gateway ip
+#. txt_gateway_ip
+msgid "Gateway\n"
+msgstr "Yhdyskäytävä\n"
+
+#. label for dns domain name (like 'opensuse.org')
+#. txt_domain_name
+msgid "Domain Name\n"
+msgstr "Toimialueen nimi\n"
+
+#. label for nameserver list
+#. txt_nameservers
+msgid "Nameservers (separated by ',')\n"
+msgstr "Nimipalvelimet (eroteltuna ','-merkillä)\n"
+
+#. label for netmask; 'Host IP' refers to label txt_host_ip above
+#. txt_netmask
+msgid "Netmask\n(or use '/N' notation with Host IP)\n"
+msgstr ""
+"Aliverkon peite\n"
+"(tai käytä '/N' merkintää koneen IP-osoitteen kanssa)\n"
+
+#. label for Live CD installation
+#. txt_live_kde
+msgid "openSUSE Live (KDE)"
+msgstr "openSUSE Live (KDE)"
+
+#. label for Live CD installation
+#. txt_live_gnome
+msgid "openSUSE Live (GNOME)"
+msgstr "openSUSE Live (GNOME)"
diff --git a/themes/openSUSE/po/fr.po b/themes/openSUSE/po/fr.po
new file mode 100644
index 0000000..c83caa6
--- /dev/null
+++ b/themes/openSUSE/po/fr.po
@@ -0,0 +1,450 @@
+# translation of fr.po to
+# translation of fr.po to français
+# translation of bootloader.fr.po to Français
+# translation of bootloader.po to Français
+# LANGUAGE translations for boot loader
+# Copyright (C) 2004 SUSE LINUX AG
+# Patricia Vaz <Patricia.Vaz@suse.de>, 2004.
+# Patricia Vaz <patricia.vaz@suse.com>, 2004.
+# Patricia Vaz <patricia@suse.de>, 2005.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: fr\n"
+"POT-Creation-Date: \n"
+"PO-Revision-Date: 2010-07-02 16:12+0200\n"
+"Last-Translator: Guillaume GARDET <guillaume.gardet@opensuse.org>\n"
+"Language-Team: French <opensuse-fr@opensuse.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Lokalize 1.0\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+
+#. ok button label
+#. txt_ok
+msgid "OK"
+msgstr "OK"
+
+#. cancel button label
+#. txt_cancel
+msgid "Cancel"
+msgstr "Annuler"
+
+#. reboot button label
+#. txt_reboot
+msgid "Reboot"
+msgstr "Réamorcer"
+
+#. continue button label
+#. txt_continue
+msgid "Continue"
+msgstr "Continuer"
+
+#. txt_install
+msgid "Installation"
+msgstr "Installation"
+
+#. txt_safe_linux
+msgid "Linux--Safe Settings"
+msgstr "Linux - Paramètres sécurisés"
+
+#. txt_boot_harddisk
+msgid "Boot from Hard Disk"
+msgstr "Amorcer depuis le disque dur"
+
+#. txt_rescue
+msgid "Rescue System"
+msgstr "Système de secours"
+
+#. txt_memtest
+msgid "Memory Test"
+msgstr "Test de mémoire"
+
+#. txt_bootoptions
+msgid "Boot Options"
+msgstr "Options d'amorçage"
+
+#. window title for exit dialog
+#. txt_exit_title (see txt_exit_dialog)
+msgid "Exiting..."
+msgstr "Sortie..."
+
+#. txt_exit_dialog
+msgid ""
+"You are leaving the graphical boot menu and\n"
+"starting the text mode interface."
+msgstr ""
+"Vous quittez le menu d'amorçage graphique et\n"
+"démarrez l'interface en mode texte."
+
+#. txt_help
+msgid "Help"
+msgstr "Aide"
+
+#. window title for kernel loading (see txt_load_kernel)
+#. txt_load_kernel_title
+msgid "Starting..."
+msgstr "Démarrage..."
+
+#. Keep the three newlines!
+#. txt_load_kernel
+msgid ""
+"Loading Linux Kernel\n"
+"\n"
+"\n"
+msgstr ""
+"Chargement du noyau Linux\n"
+"\n"
+"\n"
+
+#. Keep the three newlines!
+#. txt_load_memtest
+msgid ""
+"Loading memtest86\n"
+"\n"
+"\n"
+msgstr ""
+"Chargement de memtest86\n"
+"\n"
+"\n"
+
+#. info box title
+#. txt_info_title
+msgid "Boot Loader"
+msgstr "Chargeur d'amorçage"
+
+#. error box title
+#. txt_error_title
+msgid "I/O Error"
+msgstr "Erreur E/S"
+
+#. boot disk change dialog title
+#. txt_change_disk_title
+msgid "Change Boot Disk"
+msgstr "Changer le disque d'amorçage"
+
+#. txt_insert_disk
+#, c-format
+msgid "Insert boot disk %u."
+msgstr "Insérer le disque d'amorçage %u."
+
+#. txt_insert_disk2
+#, c-format
+msgid ""
+"This is boot disk %u.\n"
+"Insert boot disk %u."
+msgstr ""
+"Il s'agit du disque d'amorçage %u.\n"
+"Insérer le disque d'amorçage %u."
+
+#. <product> is e.g. SuSE Linux X.Y or Enterprise Server Z
+#. txt_insert_disk3
+#, c-format
+msgid ""
+"This is not a <product> boot disk.\n"
+"Insert boot disk %u."
+msgstr ""
+"Il ne s'agit pas d'un disque d'amorçage pour <product>.\n"
+"Insérez le disque d'amorçage %u."
+
+#. password dialog title
+#. txt_password_title
+msgid "Password"
+msgstr "Mot de passe"
+
+#. txt_dud_ready
+msgid "Get your driver update floppy ready."
+msgstr "Ayez à disposition la disquette de mise à jour des pilotes."
+
+#. power off dialog title
+#. txt_power_off_title
+msgid "Power Off"
+msgstr "Arrêt"
+
+#. txt_power_off
+msgid "Halt the system now?"
+msgstr "Arrêter le système maintenant ?"
+
+#. menu entry for hard disk installation
+#. txt_harddisk
+msgid "Hard Disk"
+msgstr "Disque dur"
+
+#. dialog title for hard disk installation
+#. txt_harddisk_title
+msgid "Hard Disk Installation"
+msgstr "Installation sur disque dur"
+
+#. txt_hd_diskdevice
+msgid "Disk Device (Scans All Disks If Empty)\n"
+msgstr "Périphérique disque (analyser tous les disques si vide)\n"
+
+#. txt_directory
+msgid "Directory\n"
+msgstr "Répertoire\n"
+
+#. dialog title for ftp installation
+#. txt_ftp_title
+msgid "FTP Installation"
+msgstr "Installation FTP"
+
+#. txt_server
+msgid "Server\n"
+msgstr "Serveur\n"
+
+#. txt_password
+msgid "Password\n"
+msgstr "Mot de passe\n"
+
+#. label for ftp user input
+#. txt_user1
+msgid "User (Anonymous Login If Empty)\n"
+msgstr "Utilisateur (login anonyme si vide)\n"
+
+#. dialog title for nfs installation
+#. txt_nfs_title
+msgid "NFS Installation"
+msgstr "Installation NFS"
+
+#. label for smb user input
+#. txt_user2
+msgid "User (Uses \"guest\" If Empty)\n"
+msgstr "Utilisateur (utilisation de \"guest\" si vide)\n"
+
+#. dialog title for smb installation
+#. txt_smb_title
+msgid "SMB (Windows Share) Installation"
+msgstr "Installation SMB (partage Windows)"
+
+#. dialog title for http installation
+#. txt_http_title
+msgid "HTTP Installation"
+msgstr "Installation HTTP"
+
+#. 'driver' as in '(hardware) driver update'
+#. txt_driver_update
+msgid "Driver"
+msgstr "Pilote"
+
+#. as in Windows Authentication Domain
+#. txt_domain
+msgid "Domain\n"
+msgstr "Domaine\n"
+
+#. button label for other/more options
+#. txt_other_options
+msgid "Other Options"
+msgstr "Autres options"
+
+#. label for language selection
+#. txt_language
+msgid "Language"
+msgstr "Langue"
+
+#. txt_yes
+msgid "Yes"
+msgstr "Oui"
+
+#. txt_no
+msgid "No"
+msgstr "Non"
+
+#. menu item for selecting a file
+#. txt_file
+msgid "File"
+msgstr "Fichier"
+
+#. input label: share as in "Windows share" (SMB)
+#. txt_share
+msgid "Share\n"
+msgstr "Partage\n"
+
+#. txt_zenAuto
+msgid "Automatic Mode"
+msgstr "Mode automatique"
+
+#. txt_zenManual
+msgid "Manual Mode"
+msgstr "Mode manuel"
+
+#. txt_zenConfig
+msgid "Configure Parameters on ZEN Partition"
+msgstr "Configurer les paramètres sur la partition ZEN"
+
+#. txt_zenInstall
+msgid "Install or Update ZEN Partition"
+msgstr "Installer ou mettre à jour la partition ZEN"
+
+#. txt_zenLilo
+msgid "Reinstall ZEN Partition Boot Loader"
+msgstr "Réinstaller le chargeur d'amorçage de la partition ZEN"
+
+#. txt_zenDisable
+msgid "Disable ZEN Partition"
+msgstr "Désactiver la partition ZEN"
+
+#. txt_zenEnable
+msgid "Enable ZEN Partition"
+msgstr "Activer la partition ZEN"
+
+#. video mode menu item
+#. txt_text_mode
+msgid "Text Mode"
+msgstr "Mode texte"
+
+#. menu item, like 'memory test'
+#. txt_firmware
+msgid "Firmware Test"
+msgstr "Test du BIOS"
+
+#. txt_dud_file_msg
+msgid ""
+"To load driver updates directly from CD-ROM,\n"
+"enter the driver update file names (separated\n"
+"by commas ',') here:\n"
+msgstr ""
+"Pour charger les mises à jour de pilote directement depuis un CD-ROM,\n"
+"entrez les noms de fichier séparés\n"
+"par des virgules (,) :\n"
+
+#. install source menu title
+#. ** please keep it really short (comparable to the english text) **
+#. txt_install_source
+msgid "Source"
+msgstr "Source"
+
+#. video mode/display size menu title
+#. ** please keep it really short (comparable to the english text) **
+#. txt_video_mode
+msgid "Video Mode"
+msgstr "Mode vidéo"
+
+#. driver update dialog title
+#. -> txt_dud_file_msg
+#. txt_driver_update2
+msgid "Driver Update"
+msgstr "Mise à jour de pilote"
+
+#. menu label for selecting (cpu) architecture
+#. like i386, x86-64, ppc
+#. ** please keep it really short (comparable to the english text) **
+#. txt_arch
+msgid "Arch"
+msgstr "Arch"
+
+#. menu label for selecting some (linux) kernel variant
+#. ** please keep it really short (comparable to the english text) **
+#. txt_kernel
+msgid "Kernel"
+msgstr "Noyau"
+
+#. menu item for kernel variant (cf. txt_kernel)
+#. txt_kernel_default
+msgid "Default"
+msgstr "Par défaut"
+
+#. menu item for kernel variant (cf. txt_kernel)
+#. -> like in txt_safe_linux
+#. txt_kernel_safe
+msgid "Safe Settings"
+msgstr "Paramètres sécurisés"
+
+#. menu item for kernel variant (cf. txt_kernel)
+#. -> similar to txt_noacpi_install
+#. txt_kernel_noacpi
+msgid "No ACPI"
+msgstr "Pas d'ACPI"
+
+#. menu item for kernel variant (cf. txt_kernel)
+#. -> similar to txt_nolapic_install
+#. txt_kernel_nolapic
+msgid "No Local APIC"
+msgstr "Pas d'APIC local"
+
+#. main menu: start in system repair mode
+#. txt_repain_system
+msgid "Repair Installed System"
+msgstr "Réparer le système installé"
+
+#. menu item
+#. txt_mediacheck
+msgid "Check Installation Media"
+msgstr "Vérifier le média d'installation"
+
+#. menu item for keyboard layout (please keep it short)
+#. txt_keyboard
+msgid "Keyboard"
+msgstr "Clavier"
+
+#. menu title
+#. txt_dud_download
+msgid "Download Driver Update"
+msgstr "Téléchargement de la mise à jour des pilotes"
+
+#. input label
+#. txt_dud_enter_url
+msgid "Enter Driver Update URL\n"
+msgstr "Entrer l'URL de mise à jour des pilotes\n"
+
+#. menu item
+#. txt_http_proxy
+msgid "HTTP Proxy"
+msgstr "Proxy HTTP"
+
+#. menu item
+#. txt_network_config
+msgid "Network Config"
+msgstr "Config. réseau"
+
+#. menu item
+#. txt_no_network
+msgid "No Network"
+msgstr "Pas de réseau"
+
+#. short menu item for manual network config (NOT some kind of manual)
+#. txt_manual_network
+msgid "Manual"
+msgstr "Manuel"
+
+#. dialog title for manual network config
+#. txt_manual_network_title
+msgid "Manual Network Config"
+msgstr "Config. réseau manuelle"
+
+#. label for ip address
+#. txt_host_ip
+msgid "Host IP\n"
+msgstr "IP hôte\n"
+
+#. label for gateway ip
+#. txt_gateway_ip
+msgid "Gateway\n"
+msgstr "Passerelle\n"
+
+#. label for dns domain name (like 'opensuse.org')
+#. txt_domain_name
+msgid "Domain Name\n"
+msgstr "Nom de domaine\n"
+
+#. label for nameserver list
+#. txt_nameservers
+msgid "Nameservers (separated by ',')\n"
+msgstr "Serveurs de noms (séparés par ',')\n"
+
+#. label for netmask; 'Host IP' refers to label txt_host_ip above
+#. txt_netmask
+msgid "Netmask\n(or use '/N' notation with Host IP)\n"
+msgstr ""
+"Masque réseau\n"
+"(ou utilisez la notation '/N' avec l'IP hôte)\n"
+
+#. label for Live CD installation
+#. txt_live_kde
+msgid "openSUSE Live (KDE)"
+msgstr "openSUSE Live (KDE)"
+
+#. label for Live CD installation
+#. txt_live_gnome
+msgid "openSUSE Live (GNOME)"
+msgstr "openSUSE Live (GNOME)"
diff --git a/themes/openSUSE/po/gl.po b/themes/openSUSE/po/gl.po
new file mode 100644
index 0000000..ac1552c
--- /dev/null
+++ b/themes/openSUSE/po/gl.po
@@ -0,0 +1,444 @@
+# LANGUAGE translations for boot loader
+# Copyright (C) 2005 SUSE Linux GmbH
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: bootloader\n"
+"Report-Msgid-Bugs-To: translation@suse.de\n"
+"POT-Creation-Date: 2006-05-15 15:07+0200\n"
+"PO-Revision-Date: 2009-11-29 09:53+0100\n"
+"Last-Translator: Manuel A. Vazquez <xixirei@yahoo.es>\n"
+"Language-Team: Galician <proxecto@trasno.net>\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: Lokalize 1.0\n"
+
+#. ok button label
+#. txt_ok
+msgid "OK"
+msgstr "Aceptar"
+
+#. cancel button label
+#. txt_cancel
+msgid "Cancel"
+msgstr "Cancelar"
+
+#. reboot button label
+#. txt_reboot
+msgid "Reboot"
+msgstr "Reiniciar"
+
+#. continue button label
+#. txt_continue
+msgid "Continue"
+msgstr "Continuar"
+
+#. txt_install
+msgid "Installation"
+msgstr "Instalación"
+
+#. txt_safe_linux
+msgid "Linux--Safe Settings"
+msgstr "Linux--Opcións Seguras"
+
+#. txt_boot_harddisk
+msgid "Boot from Hard Disk"
+msgstr "Arrincar desde o disco duro"
+
+#. txt_rescue
+msgid "Rescue System"
+msgstr "Rescatar sistema"
+
+#. txt_memtest
+msgid "Memory Test"
+msgstr "Proba de memoria"
+
+#. txt_bootoptions
+msgid "Boot Options"
+msgstr "Opcións de arrinque"
+
+#. window title for exit dialog
+#. txt_exit_title (see txt_exit_dialog)
+msgid "Exiting..."
+msgstr "Saíndo..."
+
+#. txt_exit_dialog
+msgid ""
+"You are leaving the graphical boot menu and\n"
+"starting the text mode interface."
+msgstr ""
+"Está saíndo do menú gráfico de arrinque e\n"
+"está iniciando a interface en modo texto."
+
+#. txt_help
+msgid "Help"
+msgstr "Axuda"
+
+#. window title for kernel loading (see txt_load_kernel)
+#. txt_load_kernel_title
+msgid "Starting..."
+msgstr "Iniciando..."
+
+#. Keep the three newlines!
+#. txt_load_kernel
+msgid ""
+"Loading Linux Kernel\n"
+"\n"
+"\n"
+msgstr ""
+"Cargando o Kernel Linux\n"
+"\n"
+"\n"
+
+#. Keep the three newlines!
+#. txt_load_memtest
+msgid ""
+"Loading memtest86\n"
+"\n"
+"\n"
+msgstr ""
+"Cargando memtest86\n"
+"\n"
+"\n"
+
+#. info box title
+#. txt_info_title
+msgid "Boot Loader"
+msgstr "Cargador de arrinque"
+
+#. error box title
+#. txt_error_title
+msgid "I/O Error"
+msgstr "Erro de E/S"
+
+#. boot disk change dialog title
+#. txt_change_disk_title
+msgid "Change Boot Disk"
+msgstr "Cambiar o disco de arrinque"
+
+#. txt_insert_disk
+#, c-format
+msgid "Insert boot disk %u."
+msgstr "Insira o disco de arrinque %u."
+
+#. txt_insert_disk2
+#, c-format
+msgid ""
+"This is boot disk %u.\n"
+"Insert boot disk %u."
+msgstr ""
+"Este é o disco de arrinque %u.\n"
+"Insira o disco de arrinque %u."
+
+#. <product> is e.g. SuSE Linux X.Y or Enterprise Server Z
+#. txt_insert_disk3
+#, c-format
+msgid ""
+"This is not a <product> boot disk.\n"
+"Insert boot disk %u."
+msgstr ""
+"Este non é un disco de arrinque de <product>.\n"
+"Insira o disco de arrinque %u."
+
+#. password dialog title
+#. txt_password_title
+msgid "Password"
+msgstr "Contrasinal"
+
+#. txt_dud_ready
+msgid "Get your driver update floppy ready."
+msgstr "Teña preparado o disquete de actualización do controlador."
+
+#. power off dialog title
+#. txt_power_off_title
+msgid "Power Off"
+msgstr "Apagar"
+
+#. txt_power_off
+msgid "Halt the system now?"
+msgstr "Apagar o sistema agora?"
+
+#. menu entry for hard disk installation
+#. txt_harddisk
+msgid "Hard Disk"
+msgstr "Disco duro"
+
+#. dialog title for hard disk installation
+#. txt_harddisk_title
+msgid "Hard Disk Installation"
+msgstr "Instalación no disco duro"
+
+#. txt_hd_diskdevice
+msgid "Disk Device (Scans All Disks If Empty)\n"
+msgstr "Dispositivo de disco (examina todos os discos se está baleiro)\n"
+
+#. txt_directory
+msgid "Directory\n"
+msgstr "Directorio\n"
+
+#. dialog title for ftp installation
+#. txt_ftp_title
+msgid "FTP Installation"
+msgstr "Instalación por FTP"
+
+#. txt_server
+msgid "Server\n"
+msgstr "Servidor\n"
+
+#. txt_password
+msgid "Password\n"
+msgstr "Contrasinal\n"
+
+#. label for ftp user input
+#. txt_user1
+msgid "User (Anonymous Login If Empty)\n"
+msgstr "Usuario (hase usar anonymous se está baleiro)\n"
+
+#. dialog title for nfs installation
+#. txt_nfs_title
+msgid "NFS Installation"
+msgstr "Instalación por NFS"
+
+#. label for smb user input
+#. txt_user2
+msgid "User (Uses \"guest\" If Empty)\n"
+msgstr "Usuario (hase usar \"guest\" se está baleiro)\n"
+
+#. dialog title for smb installation
+#. txt_smb_title
+msgid "SMB (Windows Share) Installation"
+msgstr "Instalación SMB (compartir con Windows)"
+
+#. dialog title for http installation
+#. txt_http_title
+msgid "HTTP Installation"
+msgstr "Instalación por HTTP"
+
+#. 'driver' as in '(hardware) driver update'
+#. txt_driver_update
+msgid "Driver"
+msgstr "Controlador"
+
+#. as in Windows Authentication Domain
+#. txt_domain
+msgid "Domain\n"
+msgstr "Dominio\n"
+
+#. button label for other/more options
+#. txt_other_options
+msgid "Other Options"
+msgstr "Outras opcións"
+
+#. label for language selection
+#. txt_language
+msgid "Language"
+msgstr "Idioma"
+
+#. txt_yes
+msgid "Yes"
+msgstr "Si"
+
+#. txt_no
+msgid "No"
+msgstr "Non"
+
+#. menu item for selecting a file
+#. txt_file
+msgid "File"
+msgstr "Ficheiro"
+
+#. input label: share as in "Windows share" (SMB)
+#. txt_share
+msgid "Share\n"
+msgstr "Recurso compartido\n"
+
+#. txt_zenAuto
+msgid "Automatic Mode"
+msgstr "Modo automático"
+
+#. txt_zenManual
+msgid "Manual Mode"
+msgstr "Modo manual"
+
+#. txt_zenConfig
+msgid "Configure Parameters on ZEN Partition"
+msgstr "Configurar os parámetros da partición ZEN"
+
+#. txt_zenInstall
+msgid "Install or Update ZEN Partition"
+msgstr "Instalar ou actualizar partición ZEN"
+
+#. txt_zenLilo
+msgid "Reinstall ZEN Partition Boot Loader"
+msgstr "Reinstalar o cargador de arrinque da partición ZEN"
+
+#. txt_zenDisable
+msgid "Disable ZEN Partition"
+msgstr "Desactivar partición ZEN"
+
+#. txt_zenEnable
+msgid "Enable ZEN Partition"
+msgstr "Activar partición ZEN"
+
+#. video mode menu item
+#. txt_text_mode
+msgid "Text Mode"
+msgstr "Modo texto"
+
+#. menu item, like 'memory test'
+#. txt_firmware
+msgid "Firmware Test"
+msgstr "Proba de firmware"
+
+#. txt_dud_file_msg
+msgid ""
+"To load driver updates directly from CD-ROM,\n"
+"enter the driver update file names (separated\n"
+"by commas ',') here:\n"
+msgstr ""
+"Para cargar as actualizacións de controladores directamente\n"
+" desde CDROM, introduza os nomes de ficheiros de\n"
+" actualización de controladores (separados por comas ',') aquí:\n"
+
+#. install source menu title
+#. ** please keep it really short (comparable to the english text) **
+#. txt_install_source
+msgid "Source"
+msgstr "Fonte"
+
+#. video mode/display size menu title
+#. ** please keep it really short (comparable to the english text) **
+#. txt_video_mode
+msgid "Video Mode"
+msgstr "Modo de vídeo"
+
+#. driver update dialog title
+#. -> txt_dud_file_msg
+#. txt_driver_update2
+msgid "Driver Update"
+msgstr "Actualización de controladores"
+
+#. menu label for selecting (cpu) architecture
+#. like i386, x86-64, ppc
+#. ** please keep it really short (comparable to the english text) **
+#. txt_arch
+msgid "Arch"
+msgstr "Arq"
+
+#. menu label for selecting some (linux) kernel variant
+#. ** please keep it really short (comparable to the english text) **
+#. txt_kernel
+msgid "Kernel"
+msgstr "Kernel"
+
+#. menu item for kernel variant (cf. txt_kernel)
+#. txt_kernel_default
+msgid "Default"
+msgstr "Predeterminado"
+
+#. menu item for kernel variant (cf. txt_kernel)
+#. -> like in txt_safe_linux
+#. txt_kernel_safe
+msgid "Safe Settings"
+msgstr "Opcións seguras"
+
+#. menu item for kernel variant (cf. txt_kernel)
+#. -> similar to txt_noacpi_install
+#. txt_kernel_noacpi
+msgid "No ACPI"
+msgstr "Sen ACPI"
+
+#. menu item for kernel variant (cf. txt_kernel)
+#. -> similar to txt_nolapic_install
+#. txt_kernel_nolapic
+msgid "No Local APIC"
+msgstr "Sen APIC Local"
+
+#. main menu: start in system repair mode
+#. txt_repain_system
+msgid "Repair Installed System"
+msgstr "Reparar o sistema instalado"
+
+#. menu item
+#. txt_mediacheck
+msgid "Check Installation Media"
+msgstr "Comprobar o soporte de instalación"
+
+#. menu item for keyboard layout (please keep it short)
+#. txt_keyboard
+msgid "Keyboard"
+msgstr "Teclado"
+
+#. menu title
+#. txt_dud_download
+msgid "Download Driver Update"
+msgstr "Baixar actualización de controlador"
+
+#. input label
+#. txt_dud_enter_url
+msgid "Enter Driver Update URL\n"
+msgstr "Introducir URL de actualización de controlador\n"
+
+#. menu item
+#. txt_http_proxy
+msgid "HTTP Proxy"
+msgstr "HTTP proxy"
+
+#. menu item
+#. txt_network_config
+msgid "Network Config"
+msgstr "Configuración da rede"
+
+#. menu item
+#. txt_no_network
+msgid "No Network"
+msgstr "Sen rede"
+
+#. short menu item for manual network config (NOT some kind of manual)
+#. txt_manual_network
+msgid "Manual"
+msgstr "Manual"
+
+#. dialog title for manual network config
+#. txt_manual_network_title
+msgid "Manual Network Config"
+msgstr "Configuración manual da rede"
+
+#. label for ip address
+#. txt_host_ip
+msgid "Host IP\n"
+msgstr "IP do host\n"
+
+#. label for gateway ip
+#. txt_gateway_ip
+msgid "Gateway\n"
+msgstr "Pasarela\n"
+
+#. label for dns domain name (like 'opensuse.org')
+#. txt_domain_name
+msgid "Domain Name\n"
+msgstr "Nome de dominio\n"
+
+#. label for nameserver list
+#. txt_nameservers
+msgid "Nameservers (separated by ',')\n"
+msgstr "Servidores de nomes (separados por ',')\n"
+
+#. label for netmask; 'Host IP' refers to label txt_host_ip above
+#. txt_netmask
+msgid "Netmask\n(or use '/N' notation with Host IP)\n"
+msgstr ""
+"Máscara de rede\n"
+"(ou empregue a notación '/N' co IP do host)\n"
+
+#. label for Live CD installation
+#. txt_live_kde
+msgid "openSUSE Live (KDE)"
+msgstr "openSUSE Live (KDE)"
+
+#. label for Live CD installation
+#. txt_live_gnome
+msgid "openSUSE Live (GNOME)"
+msgstr "openSUSE Live (GNOME)"
diff --git a/themes/openSUSE/po/gu.po b/themes/openSUSE/po/gu.po
new file mode 100644
index 0000000..9c8369e
--- /dev/null
+++ b/themes/openSUSE/po/gu.po
@@ -0,0 +1,441 @@
+# LANGUAGE translations for boot loader
+# Copyright (C) 2005 SUSE Linux GmbH
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: YaST (@memory@)\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2005-07-27 16:23+0200\n"
+"PO-Revision-Date: 2004-08-09 10:24+0200\n"
+"Last-Translator: Priyavert Sharma <priyavert.sharma@agreeya.com>\n"
+"Language-Team: AgreeYa Solutions <linux_team@agreeya.com>\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"
+
+#. ok button label
+#. txt_ok
+msgid "OK"
+msgstr "બરાબર"
+
+#. cancel button label
+#. txt_cancel
+msgid "Cancel"
+msgstr "રદ કરો "
+
+#. reboot button label
+#. txt_reboot
+msgid "Reboot"
+msgstr "ફરીથી બૂટ કરો"
+
+#. continue button label
+#. txt_continue
+msgid "Continue"
+msgstr "ચાલુ રાખો"
+
+#. txt_install
+msgid "Installation"
+msgstr "સ્થાપન"
+
+#. txt_safe_linux
+msgid "Linux--Safe Settings"
+msgstr "લિનક્ષ -- સુરક્ષિત સેટિંગ્સ"
+
+#. txt_boot_harddisk
+msgid "Boot from Hard Disk"
+msgstr "હાર્ડ ડિસ્કમાંથી બૂટ કરો"
+
+#. txt_rescue
+msgid "Rescue System"
+msgstr "બચાવ સિસ્ટમ"
+
+#. txt_memtest
+msgid "Memory Test"
+msgstr "મેમરી પરિક્ષણ"
+
+#. txt_bootoptions
+msgid "Boot Options"
+msgstr "બૂટ વિકલ્પો"
+
+#. window title for exit dialog
+#. txt_exit_title (see txt_exit_dialog)
+msgid "Exiting..."
+msgstr "બહાર નીકળી રહ્યા છો..."
+
+#. txt_exit_dialog
+msgid ""
+"You are leaving the graphical boot menu and\n"
+"starting the text mode interface."
+msgstr ""
+"તમે ગ્રાફિકલ બૂટ મેનુથી બહાર જઇ રહ્યા છો અને\n"
+"ટેક્ષ્ટ ઢબ ઇન્ટરફેસ શરૂ થઇ રહ્યું છે."
+
+#. txt_help
+msgid "Help"
+msgstr "મદદ"
+
+#. window title for kernel loading (see txt_load_kernel)
+#. txt_load_kernel_title
+msgid "Starting..."
+msgstr "શરૂ થઇ રહ્યું છે..."
+
+#. Keep the three newlines!
+#. txt_load_kernel
+msgid ""
+"Loading Linux Kernel\n"
+"\n"
+"\n"
+msgstr ""
+" લિનક્ષ કર્નલ લોડ થઇ રહ્યું છે \n"
+"\n"
+"\n"
+
+#. Keep the three newlines!
+#. txt_load_memtest
+msgid ""
+"Loading memtest86\n"
+"\n"
+"\n"
+msgstr ""
+" memtest86 લોડ થઇ રહ્યું છે \n"
+"\n"
+"\n"
+
+#. info box title
+#. txt_info_title
+msgid "Boot Loader"
+msgstr "બૂટ લોડર"
+
+#. error box title
+#. txt_error_title
+msgid "I/O Error"
+msgstr "I/O ભૂલ"
+
+#. boot disk change dialog title
+#. txt_change_disk_title
+msgid "Change Boot Disk"
+msgstr "બૂટ ડિસ્ક બદલો"
+
+#. txt_insert_disk
+#, c-format
+msgid "Insert boot disk %u."
+msgstr "%u બૂટ ડિસ્ક દાખલ કરો."
+
+#. txt_insert_disk2
+#, c-format
+msgid ""
+"This is boot disk %u.\n"
+"Insert boot disk %u."
+msgstr ""
+"આ %u બૂટ ડિસ્ક છે.\n"
+"%u બૂટ ડિસ્ક દાખલ કરો "
+
+#. <product> is e.g. SuSE Linux X.Y or Enterprise Server Z
+#. txt_insert_disk3
+#, c-format
+msgid ""
+"This is not a <product> boot disk.\n"
+"Insert boot disk %u."
+msgstr ""
+"આ < પ્રોડક્ટ > બૂટ ડિસ્ક નથી.\n"
+"%u બૂટ ડિસ્ક દાખલ કરો."
+
+#. password dialog title
+#. txt_password_title
+msgid "Password"
+msgstr "પાસવર્ડ"
+
+#. txt_dud_ready
+msgid "Get your driver update floppy ready."
+msgstr "તમારી તૈયાર ડ્રાઇવર અદ્યતન ફ્લોપી મેળવો."
+
+#. power off dialog title
+#. txt_power_off_title
+msgid "Power Off"
+msgstr "પાવર બંધ"
+
+#. txt_power_off
+msgid "Halt the system now?"
+msgstr "અત્યારે સિસ્ટમ"
+
+#. menu entry for hard disk installation
+#. txt_harddisk
+msgid "Hard Disk"
+msgstr "હાર્ડ ડિસ્ક"
+
+#. dialog title for hard disk installation
+#. txt_harddisk_title
+msgid "Hard Disk Installation"
+msgstr "હાર્ડ ડિસ્કનું સ્થાપન"
+
+#. txt_hd_diskdevice
+msgid "Disk Device (Scans All Disks If Empty)\n"
+msgstr " ડિસ્ક ઉપકરણ (જો ખાલી હોય તો બધી ડિસ્કસ સ્કેન કરો)\n"
+
+#. txt_directory
+msgid "Directory\n"
+msgstr "ડિરેક્ટરી\n"
+
+#. dialog title for ftp installation
+#. txt_ftp_title
+msgid "FTP Installation"
+msgstr "FTP સ્થાપન"
+
+#. txt_server
+msgid "Server\n"
+msgstr "સર્વર\n"
+
+#. txt_password
+msgid "Password\n"
+msgstr "પાસવર્ડ\n"
+
+#. label for ftp user input
+#. txt_user1
+msgid "User (Anonymous Login If Empty)\n"
+msgstr "વપરાશકર્તા (જો ખાલી હોય તો અનામી લોગીન કરો)\n"
+
+#. dialog title for nfs installation
+#. txt_nfs_title
+msgid "NFS Installation"
+msgstr " NFS સ્થાપન "
+
+#. label for smb user input
+#. txt_user2
+msgid "User (Uses \"guest\" If Empty)\n"
+msgstr " વપરાશકર્તા (જો ખાલી હોય તો \" મહેમાન \" તરીકે ઉપયોગ કરો)\n"
+
+#. dialog title for smb installation
+#. txt_smb_title
+msgid "SMB (Windows Share) Installation"
+msgstr "SMB (વિન્ડોઝ શેર) સ્થાપન"
+
+#. dialog title for http installation
+#. txt_http_title
+msgid "HTTP Installation"
+msgstr " HTTP સ્થાપન "
+
+#. 'driver' as in '(hardware) driver update'
+#. txt_driver_update
+msgid "Driver"
+msgstr "ડ્રાઇવર"
+
+#. as in Windows Authentication Domain
+#. txt_domain
+msgid "Domain\n"
+msgstr "ડોમેઇન\n"
+
+#. button label for other/more options
+#. txt_other_options
+msgid "Other Options"
+msgstr "અન્ય વિકલ્પો"
+
+#. label for language selection
+#. txt_language
+msgid "Language"
+msgstr "ભાષા"
+
+#. txt_yes
+msgid "Yes"
+msgstr "હા"
+
+#. txt_no
+msgid "No"
+msgstr "ના"
+
+#. menu item for selecting a file
+#. txt_file
+msgid "File"
+msgstr "ફાઈલ"
+
+#. input label: share as in "Windows share" (SMB)
+#. txt_share
+msgid "Share\n"
+msgstr "શેર \n"
+
+#. txt_zenAuto
+msgid "Automatic Mode"
+msgstr "સ્વયંચાલિત ઢબ"
+
+#. txt_zenManual
+msgid "Manual Mode"
+msgstr "મેન્યુઅલ ઢબ"
+
+#. txt_zenConfig
+msgid "Configure Parameters on ZEN Partition"
+msgstr "ZEN પાર્ટિશન પર પારમિતિઓ કન્ફિગર કરો"
+
+#. txt_zenInstall
+msgid "Install or Update ZEN Partition"
+msgstr "ZEN પાર્ટિશન સ્થાપો અથવા અદ્યતન કરો"
+
+#. txt_zenLilo
+msgid "Reinstall ZEN Partition Boot Loader"
+msgstr "ZEN પાર્ટિશન બૂટ લોડર ફરીથી સ્થાપો"
+
+#. txt_zenDisable
+msgid "Disable ZEN Partition"
+msgstr "ZEN પાર્ટિશન અક્ષમ કરો"
+
+#. txt_zenEnable
+msgid "Enable ZEN Partition"
+msgstr "ZEN પાર્ટિશન સક્ષમ કરો"
+
+#. video mode menu item
+#. txt_text_mode
+msgid "Text Mode"
+msgstr "ટેક્ષ્ટ ઢબ"
+
+#. menu item, like 'memory test'
+#. txt_firmware
+msgid "Firmware Test"
+msgstr "ફર્મવેર પરિક્ષણ"
+
+#. txt_dud_file_msg
+msgid ""
+"To load driver updates directly from CD-ROM,\n"
+"enter the driver update file names (separated\n"
+"by commas ',') here:\n"
+msgstr ""
+"સીડી-રોમ પરથી સીધું ડ્રાઇવર અદ્યતનો લોડ કરવા,\n"
+" અહીં ડ્રાઇવર અદ્યતનોના ફાઇલ નામો (કોમા દ્વારા \n"
+"જુદા પાડેલા ',') દાખલ કરો:\n"
+
+#. install source menu title
+#. ** please keep it really short (comparable to the english text) **
+#. txt_install_source
+msgid "Source"
+msgstr "સોર્સ"
+
+#. video mode/display size menu title
+#. ** please keep it really short (comparable to the english text) **
+#. txt_video_mode
+msgid "Video Mode"
+msgstr ""
+
+#. driver update dialog title
+#. -> txt_dud_file_msg
+#. txt_driver_update2
+msgid "Driver Update"
+msgstr "ડ્રાયવર અપડેટ"
+
+#. menu label for selecting (cpu) architecture
+#. like i386, x86-64, ppc
+#. ** please keep it really short (comparable to the english text) **
+#. txt_arch
+msgid "Arch"
+msgstr " આર્ક "
+
+#. menu label for selecting some (linux) kernel variant
+#. ** please keep it really short (comparable to the english text) **
+#. txt_kernel
+msgid "Kernel"
+msgstr ""
+
+#. menu item for kernel variant (cf. txt_kernel)
+#. txt_kernel_default
+msgid "Default"
+msgstr "પ્રાથમિક"
+
+#. menu item for kernel variant (cf. txt_kernel)
+#. -> like in txt_safe_linux
+#. txt_kernel_safe
+msgid "Safe Settings"
+msgstr ""
+
+#. menu item for kernel variant (cf. txt_kernel)
+#. -> similar to txt_noacpi_install
+#. txt_kernel_noacpi
+msgid "No ACPI"
+msgstr ""
+
+#. menu item for kernel variant (cf. txt_kernel)
+#. -> similar to txt_nolapic_install
+#. txt_kernel_nolapic
+msgid "No Local APIC"
+msgstr ""
+
+#. main menu: start in system repair mode
+#. txt_repain_system
+msgid "Repair Installed System"
+msgstr ""
+
+#. menu item
+#. txt_mediacheck
+msgid "Check Installation Media"
+msgstr ""
+
+#. menu item for keyboard layout (please keep it short)
+#. txt_keyboard
+msgid "Keyboard"
+msgstr "કીબોર્ડ"
+
+#. menu title
+#. txt_dud_download
+msgid "Download Driver Update"
+msgstr ""
+
+#. input label
+#. txt_dud_enter_url
+msgid "Enter Driver Update URL\n"
+msgstr ""
+
+#. menu item
+#. txt_http_proxy
+msgid "HTTP Proxy"
+msgstr ""
+
+#. menu item
+#. txt_network_config
+msgid "Network Config"
+msgstr ""
+
+#. menu item
+#. txt_no_network
+msgid "No Network"
+msgstr ""
+
+#. short menu item for manual network config (NOT some kind of manual)
+#. txt_manual_network
+msgid "Manual"
+msgstr ""
+
+#. dialog title for manual network config
+#. txt_manual_network_title
+msgid "Manual Network Config"
+msgstr ""
+
+#. label for ip address
+#. txt_host_ip
+msgid "Host IP\n"
+msgstr ""
+
+#. label for gateway ip
+#. txt_gateway_ip
+msgid "Gateway\n"
+msgstr ""
+
+#. label for dns domain name (like 'opensuse.org')
+#. txt_domain_name
+msgid "Domain Name\n"
+msgstr ""
+
+#. label for nameserver list
+#. txt_nameservers
+msgid "Nameservers (separated by ',')\n"
+msgstr ""
+
+#. label for netmask; 'Host IP' refers to label txt_host_ip above
+#. txt_netmask
+msgid "Netmask\n(or use '/N' notation with Host IP)\n"
+msgstr ""
+
+#. label for Live CD installation
+#. txt_live_kde
+msgid "openSUSE Live (KDE)"
+msgstr ""
+
+#. label for Live CD installation
+#. txt_live_gnome
+msgid "openSUSE Live (GNOME)"
+msgstr ""
diff --git a/themes/openSUSE/po/hi.po b/themes/openSUSE/po/hi.po
new file mode 100644
index 0000000..b409122
--- /dev/null
+++ b/themes/openSUSE/po/hi.po
@@ -0,0 +1,441 @@
+# LANGUAGE translations for boot loader
+# Copyright (C) 2005 SUSE Linux GmbH
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: NetworkManager-vpnc\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2006-05-16 17:10+0200\n"
+"PO-Revision-Date: 2006-01-26 15:19+0100\n"
+"Last-Translator: Priyavert Sharma <priyavert.sharma@agreeya.com>\n"
+"Language-Team: AgreeYa Solutions <www.agreeya.com>\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"
+
+#. ok button label
+#. txt_ok
+msgid "OK"
+msgstr "ओ.के."
+
+#. cancel button label
+#. txt_cancel
+msgid "Cancel"
+msgstr "रद्द"
+
+#. reboot button label
+#. txt_reboot
+msgid "Reboot"
+msgstr "फिर से चालु करें"
+
+#. continue button label
+#. txt_continue
+msgid "Continue"
+msgstr "जारी रखें"
+
+#. txt_install
+msgid "Installation"
+msgstr "अधिष्ठापन"
+
+#. txt_safe_linux
+msgid "Linux--Safe Settings"
+msgstr "लाईनेक्स--सुरक्षित सेटिंग्ज़"
+
+#. txt_boot_harddisk
+msgid "Boot from Hard Disk"
+msgstr "हार्ड डिस्क से बूट करें"
+
+#. txt_rescue
+msgid "Rescue System"
+msgstr "रेस्क्यू सिस्टम"
+
+#. txt_memtest
+msgid "Memory Test"
+msgstr "मेमोरी जांच"
+
+#. txt_bootoptions
+msgid "Boot Options"
+msgstr "बूट विक्लप"
+
+#. window title for exit dialog
+#. txt_exit_title (see txt_exit_dialog)
+msgid "Exiting..."
+msgstr "बाहर आ रहा है..."
+
+#. txt_exit_dialog
+msgid ""
+"You are leaving the graphical boot menu and\n"
+"starting the text mode interface."
+msgstr ""
+"आप ग्राफिकल बूट विकल्प सूची छोड़ रहे है तथा\n"
+"टैक्सट मोड अंतरापृष्ठ आरंभ कर रहे हैं."
+
+#. txt_help
+msgid "Help"
+msgstr "सहायता"
+
+#. window title for kernel loading (see txt_load_kernel)
+#. txt_load_kernel_title
+msgid "Starting..."
+msgstr "आरंभ हो रहा है..."
+
+#. Keep the three newlines!
+#. txt_load_kernel
+msgid ""
+"Loading Linux Kernel\n"
+"\n"
+"\n"
+msgstr ""
+"लाईनेक्स कर्नल लोड हो रहा है\n"
+"\n"
+"\n"
+
+#. Keep the three newlines!
+#. txt_load_memtest
+msgid ""
+"Loading memtest86\n"
+"\n"
+"\n"
+msgstr ""
+"मेमटेस्ट86 लोड हो रहा है\n"
+"\n"
+"\n"
+
+#. info box title
+#. txt_info_title
+msgid "Boot Loader"
+msgstr "बूट लोडर"
+
+#. error box title
+#. txt_error_title
+msgid "I/O Error"
+msgstr "I/O त्रुटि"
+
+#. boot disk change dialog title
+#. txt_change_disk_title
+msgid "Change Boot Disk"
+msgstr "बूट डिस्क का परिवर्तन करें"
+
+#. txt_insert_disk
+#, c-format
+msgid "Insert boot disk %u."
+msgstr "बूट डिस्क %u प्रविष्ट करें."
+
+#. txt_insert_disk2
+#, c-format
+msgid ""
+"This is boot disk %u.\n"
+"Insert boot disk %u."
+msgstr ""
+"यह बूट डिस्क %u है.\n"
+"बूट डिस्क %u प्रविष्ट करें."
+
+#. <product> is e.g. SuSE Linux X.Y or Enterprise Server Z
+#. txt_insert_disk3
+#, c-format
+msgid ""
+"This is not a <product> boot disk.\n"
+"Insert boot disk %u."
+msgstr ""
+"यह <प्रोडक्ट> बूट डिस्क नहीं है.\n"
+"कृपया बूट डिस्क %u प्रविष्ट करें."
+
+#. password dialog title
+#. txt_password_title
+msgid "Password"
+msgstr "कूट शब्द"
+
+#. txt_dud_ready
+msgid "Get your driver update floppy ready."
+msgstr "अपनी ड्राइवर नवीनीकरण फ्लॉपी तैयार पाएं"
+
+#. power off dialog title
+#. txt_power_off_title
+msgid "Power Off"
+msgstr "बिजली बन्द करें"
+
+#. txt_power_off
+msgid "Halt the system now?"
+msgstr "सिस्टम को अभी रोकें"
+
+#. menu entry for hard disk installation
+#. txt_harddisk
+msgid "Hard Disk"
+msgstr "हार्ड डिस्क"
+
+#. dialog title for hard disk installation
+#. txt_harddisk_title
+msgid "Hard Disk Installation"
+msgstr "हार्ड डिस्क अधिष्ठापन"
+
+#. txt_hd_diskdevice
+msgid "Disk Device (Scans All Disks If Empty)\n"
+msgstr "डिस्क उपकरण (यदि सभी डिस्कें खाली है तो स्कैन करें)\n"
+
+#. txt_directory
+msgid "Directory\n"
+msgstr "निर्देशिका\n"
+
+#. dialog title for ftp installation
+#. txt_ftp_title
+msgid "FTP Installation"
+msgstr "FTP अधिष्ठापन"
+
+#. txt_server
+msgid "Server\n"
+msgstr "सर्वर\n"
+
+#. txt_password
+msgid "Password\n"
+msgstr "कूट शब्द\n"
+
+#. label for ftp user input
+#. txt_user1
+msgid "User (Anonymous Login If Empty)\n"
+msgstr "प्रयोक्ता (यदि खाली है तो बेनाम लॉगइन करें)\n"
+
+#. dialog title for nfs installation
+#. txt_nfs_title
+msgid "NFS Installation"
+msgstr "NFS अधिष्ठापन"
+
+#. label for smb user input
+#. txt_user2
+msgid "User (Uses \"guest\" If Empty)\n"
+msgstr "प्रयोक्ता (यदि खाली है तो \"गेस्ट\" का उपयोग करें)\n"
+
+#. dialog title for smb installation
+#. txt_smb_title
+msgid "SMB (Windows Share) Installation"
+msgstr "SMB (विंडोज शेयर) अधिष्ठापन"
+
+#. dialog title for http installation
+#. txt_http_title
+msgid "HTTP Installation"
+msgstr "HTTP अधिष्ठापन"
+
+#. 'driver' as in '(hardware) driver update'
+#. txt_driver_update
+msgid "Driver"
+msgstr "ड्राइवर"
+
+#. as in Windows Authentication Domain
+#. txt_domain
+msgid "Domain\n"
+msgstr "डोमेन\n"
+
+#. button label for other/more options
+#. txt_other_options
+msgid "Other Options"
+msgstr "अन्य विकल्प"
+
+#. label for language selection
+#. txt_language
+msgid "Language"
+msgstr "भाषा"
+
+#. txt_yes
+msgid "Yes"
+msgstr "हां"
+
+#. txt_no
+msgid "No"
+msgstr "नहीं"
+
+#. menu item for selecting a file
+#. txt_file
+msgid "File"
+msgstr "फाइल"
+
+#. input label: share as in "Windows share" (SMB)
+#. txt_share
+msgid "Share\n"
+msgstr "शेयर\n"
+
+#. txt_zenAuto
+msgid "Automatic Mode"
+msgstr "स्वचालित मोड"
+
+#. txt_zenManual
+msgid "Manual Mode"
+msgstr "मैनुअल मोड"
+
+#. txt_zenConfig
+msgid "Configure Parameters on ZEN Partition"
+msgstr "ZEN पार्टिशन पर पैरामीटर्स को कनफिगर करें"
+
+#. txt_zenInstall
+msgid "Install or Update ZEN Partition"
+msgstr "ZEN पार्टिशन का अधिष्ठापन/अद्यतन "
+
+#. txt_zenLilo
+msgid "Reinstall ZEN Partition Boot Loader"
+msgstr "ZEN पार्टिशन बूट लोडर का पुनः अधिष्ठापन करें"
+
+#. txt_zenDisable
+msgid "Disable ZEN Partition"
+msgstr "असमर्थ ZEN पार्टिशन"
+
+#. txt_zenEnable
+msgid "Enable ZEN Partition"
+msgstr "समर्थ ZEN पार्टिशन"
+
+#. video mode menu item
+#. txt_text_mode
+msgid "Text Mode"
+msgstr "पाठ्य मोड"
+
+#. menu item, like 'memory test'
+#. txt_firmware
+msgid "Firmware Test"
+msgstr "फर्मवेयर परीक्षण"
+
+#. txt_dud_file_msg
+msgid ""
+"To load driver updates directly from CD-ROM,\n"
+"enter the driver update file names (separated\n"
+"by commas ',') here:\n"
+msgstr ""
+"सीडी-रोम से सीधे ड्राइवर अद्यतनों को लोड करने के लिए,\n"
+"यहां पर ड्राइवर अद्यतन फाइल नामों को प्रविष्ट (अल्पविराम\n"
+"',' द्वारा पृथक) करें:\n"
+
+#. install source menu title
+#. ** please keep it really short (comparable to the english text) **
+#. txt_install_source
+msgid "Source"
+msgstr "स्रोत"
+
+#. video mode/display size menu title
+#. ** please keep it really short (comparable to the english text) **
+#. txt_video_mode
+msgid "Video Mode"
+msgstr ""
+
+#. driver update dialog title
+#. -> txt_dud_file_msg
+#. txt_driver_update2
+msgid "Driver Update"
+msgstr ""
+
+#. menu label for selecting (cpu) architecture
+#. like i386, x86-64, ppc
+#. ** please keep it really short (comparable to the english text) **
+#. txt_arch
+msgid "Arch"
+msgstr "आर्क"
+
+#. menu label for selecting some (linux) kernel variant
+#. ** please keep it really short (comparable to the english text) **
+#. txt_kernel
+msgid "Kernel"
+msgstr ""
+
+#. menu item for kernel variant (cf. txt_kernel)
+#. txt_kernel_default
+msgid "Default"
+msgstr ""
+
+#. menu item for kernel variant (cf. txt_kernel)
+#. -> like in txt_safe_linux
+#. txt_kernel_safe
+msgid "Safe Settings"
+msgstr ""
+
+#. menu item for kernel variant (cf. txt_kernel)
+#. -> similar to txt_noacpi_install
+#. txt_kernel_noacpi
+msgid "No ACPI"
+msgstr ""
+
+#. menu item for kernel variant (cf. txt_kernel)
+#. -> similar to txt_nolapic_install
+#. txt_kernel_nolapic
+msgid "No Local APIC"
+msgstr ""
+
+#. main menu: start in system repair mode
+#. txt_repain_system
+msgid "Repair Installed System"
+msgstr ""
+
+#. menu item
+#. txt_mediacheck
+msgid "Check Installation Media"
+msgstr ""
+
+#. menu item for keyboard layout (please keep it short)
+#. txt_keyboard
+msgid "Keyboard"
+msgstr "कीबोर्ड"
+
+#. menu title
+#. txt_dud_download
+msgid "Download Driver Update"
+msgstr ""
+
+#. input label
+#. txt_dud_enter_url
+msgid "Enter Driver Update URL\n"
+msgstr ""
+
+#. menu item
+#. txt_http_proxy
+msgid "HTTP Proxy"
+msgstr ""
+
+#. menu item
+#. txt_network_config
+msgid "Network Config"
+msgstr ""
+
+#. menu item
+#. txt_no_network
+msgid "No Network"
+msgstr ""
+
+#. short menu item for manual network config (NOT some kind of manual)
+#. txt_manual_network
+msgid "Manual"
+msgstr ""
+
+#. dialog title for manual network config
+#. txt_manual_network_title
+msgid "Manual Network Config"
+msgstr ""
+
+#. label for ip address
+#. txt_host_ip
+msgid "Host IP\n"
+msgstr ""
+
+#. label for gateway ip
+#. txt_gateway_ip
+msgid "Gateway\n"
+msgstr ""
+
+#. label for dns domain name (like 'opensuse.org')
+#. txt_domain_name
+msgid "Domain Name\n"
+msgstr ""
+
+#. label for nameserver list
+#. txt_nameservers
+msgid "Nameservers (separated by ',')\n"
+msgstr ""
+
+#. label for netmask; 'Host IP' refers to label txt_host_ip above
+#. txt_netmask
+msgid "Netmask\n(or use '/N' notation with Host IP)\n"
+msgstr ""
+
+#. label for Live CD installation
+#. txt_live_kde
+msgid "openSUSE Live (KDE)"
+msgstr ""
+
+#. label for Live CD installation
+#. txt_live_gnome
+msgid "openSUSE Live (GNOME)"
+msgstr ""
diff --git a/themes/openSUSE/po/hr.po b/themes/openSUSE/po/hr.po
new file mode 100644
index 0000000..e4b24a7
--- /dev/null
+++ b/themes/openSUSE/po/hr.po
@@ -0,0 +1,442 @@
+# LANGUAGE translations for boot loader
+# Copyright (C) 2005 SUSE Linux GmbH
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: bootloader.hr\n"
+"Report-Msgid-Bugs-To: translation@suse.de\n"
+"POT-Creation-Date: 2006-05-15 15:07+0200\n"
+"PO-Revision-Date: 2009-03-01 10:48+0100\n"
+"Last-Translator: Krešimir Jozić <kjozic@gmail.com>\n"
+"Language-Team: Croatian <hr@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
+"X-Generator: Lokalize 0.2\n"
+
+#. ok button label
+#. txt_ok
+msgid "OK"
+msgstr "U redu"
+
+#. cancel button label
+#. txt_cancel
+msgid "Cancel"
+msgstr "Otkaži"
+
+#. reboot button label
+#. txt_reboot
+msgid "Reboot"
+msgstr "Ponovno pokreni računalo"
+
+#. continue button label
+#. txt_continue
+msgid "Continue"
+msgstr "Nastavi"
+
+#. txt_install
+msgid "Installation"
+msgstr "Instalacija"
+
+#. txt_safe_linux
+msgid "Linux--Safe Settings"
+msgstr "Linux--sigurne postavke"
+
+#. txt_boot_harddisk
+msgid "Boot from Hard Disk"
+msgstr "Podigni sustav s tvrdog diska"
+
+#. txt_rescue
+msgid "Rescue System"
+msgstr "Sustav za spašavanje"
+
+#. txt_memtest
+msgid "Memory Test"
+msgstr "Test memorije"
+
+#. txt_bootoptions
+msgid "Boot Options"
+msgstr "Opcije podizanja sustava"
+
+#. window title for exit dialog
+#. txt_exit_title (see txt_exit_dialog)
+msgid "Exiting..."
+msgstr "Izlazim..."
+
+#. txt_exit_dialog
+msgid ""
+"You are leaving the graphical boot menu and\n"
+"starting the text mode interface."
+msgstr ""
+"Napuštate grafički izbornik za dizanje sustava i\n"
+"pokrećete tekstualno sučelje"
+
+#. txt_help
+msgid "Help"
+msgstr "Pomoć"
+
+#. window title for kernel loading (see txt_load_kernel)
+#. txt_load_kernel_title
+msgid "Starting..."
+msgstr "Pokrećem..."
+
+#. Keep the three newlines!
+#. txt_load_kernel
+msgid ""
+"Loading Linux Kernel\n"
+"\n"
+"\n"
+msgstr ""
+"Učitavam Linux kernel\n"
+"\n"
+"\n"
+
+#. Keep the three newlines!
+#. txt_load_memtest
+msgid ""
+"Loading memtest86\n"
+"\n"
+"\n"
+msgstr ""
+"Učitavam memtest86\n"
+"\n"
+"\n"
+
+#. info box title
+#. txt_info_title
+msgid "Boot Loader"
+msgstr "Program za podizanje sustava"
+
+#. error box title
+#. txt_error_title
+msgid "I/O Error"
+msgstr "Ulazno/izlazna pogreška"
+
+#. boot disk change dialog title
+#. txt_change_disk_title
+msgid "Change Boot Disk"
+msgstr "Promijeni disk za podizanje sustava"
+
+#. txt_insert_disk
+#, c-format
+msgid "Insert boot disk %u."
+msgstr "Umetnite disketu za podizanje sustava %u."
+
+#. txt_insert_disk2
+#, c-format
+msgid ""
+"This is boot disk %u.\n"
+"Insert boot disk %u."
+msgstr ""
+"Ovo je disketa za podizanje sustava %u.\n"
+"Umetnite disketu za podizanje sustava %u."
+
+#. <product> is e.g. SuSE Linux X.Y or Enterprise Server Z
+#. txt_insert_disk3
+#, c-format
+msgid ""
+"This is not a <product> boot disk.\n"
+"Insert boot disk %u."
+msgstr ""
+"Ovo nije <product> disk za podizanje sustav.\n"
+"Umetnite disk za podizanje sustava %u."
+
+#. password dialog title
+#. txt_password_title
+msgid "Password"
+msgstr "Lozinka"
+
+#. txt_dud_ready
+msgid "Get your driver update floppy ready."
+msgstr "Pripremite disketu s dogradnjom upravljačkih programa."
+
+#. power off dialog title
+#. txt_power_off_title
+msgid "Power Off"
+msgstr "Isključi napajanje"
+
+#. txt_power_off
+msgid "Halt the system now?"
+msgstr "Zaustavi sustav sada?"
+
+#. menu entry for hard disk installation
+#. txt_harddisk
+msgid "Hard Disk"
+msgstr "Tvrdi disk"
+
+#. dialog title for hard disk installation
+#. txt_harddisk_title
+msgid "Hard Disk Installation"
+msgstr "Instalacija s tvrdog diska"
+
+#. txt_hd_diskdevice
+msgid "Disk Device (Scans All Disks If Empty)\n"
+msgstr "Disk uređaj (pretražuje sve diskove ako je prazno)\n"
+
+#. txt_directory
+msgid "Directory\n"
+msgstr "Direktorij\n"
+
+#. dialog title for ftp installation
+#. txt_ftp_title
+msgid "FTP Installation"
+msgstr "FTP instalacija"
+
+#. txt_server
+msgid "Server\n"
+msgstr "Poslužitelj\n"
+
+#. txt_password
+msgid "Password\n"
+msgstr "Lozinka\n"
+
+#. label for ftp user input
+#. txt_user1
+msgid "User (Anonymous Login If Empty)\n"
+msgstr "Korisnik (automatsko prijavljivanje ako je prazno)\n"
+
+#. dialog title for nfs installation
+#. txt_nfs_title
+msgid "NFS Installation"
+msgstr "NFS instalacija"
+
+#. label for smb user input
+#. txt_user2
+msgid "User (Uses \"guest\" If Empty)\n"
+msgstr "Korisnik (koristi \"gost\" ako je prazno)\n"
+
+#. dialog title for smb installation
+#. txt_smb_title
+msgid "SMB (Windows Share) Installation"
+msgstr "SMB (Windows dijeljenje) instalacija"
+
+#. dialog title for http installation
+#. txt_http_title
+msgid "HTTP Installation"
+msgstr "HTTP instalacija"
+
+#. 'driver' as in '(hardware) driver update'
+#. txt_driver_update
+msgid "Driver"
+msgstr "Pogonski program"
+
+#. as in Windows Authentication Domain
+#. txt_domain
+msgid "Domain\n"
+msgstr "Domena\n"
+
+#. button label for other/more options
+#. txt_other_options
+msgid "Other Options"
+msgstr "Ostali izbori"
+
+#. label for language selection
+#. txt_language
+msgid "Language"
+msgstr "Jezik"
+
+#. txt_yes
+msgid "Yes"
+msgstr "Da"
+
+#. txt_no
+msgid "No"
+msgstr "Ne"
+
+#. menu item for selecting a file
+#. txt_file
+msgid "File"
+msgstr "Datoteka"
+
+#. input label: share as in "Windows share" (SMB)
+#. txt_share
+msgid "Share\n"
+msgstr "Dijeli\n"
+
+#. txt_zenAuto
+msgid "Automatic Mode"
+msgstr "Automatski način"
+
+#. txt_zenManual
+msgid "Manual Mode"
+msgstr "Ručni način"
+
+#. txt_zenConfig
+msgid "Configure Parameters on ZEN Partition"
+msgstr "Podesi parametre na ZEN particiji"
+
+#. txt_zenInstall
+msgid "Install or Update ZEN Partition"
+msgstr "Instaliraj ili dogradi ZEN particiju"
+
+#. txt_zenLilo
+msgid "Reinstall ZEN Partition Boot Loader"
+msgstr "Ponovno instaliraj program za podizanje sustava na ZEN particiju"
+
+#. txt_zenDisable
+msgid "Disable ZEN Partition"
+msgstr "Onemogući ZEN particiju"
+
+#. txt_zenEnable
+msgid "Enable ZEN Partition"
+msgstr "Omogući ZEN particiju"
+
+#. video mode menu item
+#. txt_text_mode
+msgid "Text Mode"
+msgstr "Tekstualni način"
+
+#. menu item, like 'memory test'
+#. txt_firmware
+msgid "Firmware Test"
+msgstr "Test firmware-a"
+
+#. txt_dud_file_msg
+msgid ""
+"To load driver updates directly from CD-ROM,\n"
+"enter the driver update file names (separated\n"
+"by commas ',') here:\n"
+msgstr ""
+"Da biste učitali dogradnju upravljačkih programa direkno s CD-ROM-a,\n"
+"unesite imena dogradnji upravljačkih programa (odvojena\n"
+"zarezima ',') ovdje:\n"
+
+#. install source menu title
+#. ** please keep it really short (comparable to the english text) **
+#. txt_install_source
+msgid "Source"
+msgstr "Izvor"
+
+#. video mode/display size menu title
+#. ** please keep it really short (comparable to the english text) **
+#. txt_video_mode
+msgid "Video Mode"
+msgstr "VIdeo način"
+
+#. driver update dialog title
+#. -> txt_dud_file_msg
+#. txt_driver_update2
+msgid "Driver Update"
+msgstr "Dogradnja upravljačkog programa"
+
+#. menu label for selecting (cpu) architecture
+#. like i386, x86-64, ppc
+#. ** please keep it really short (comparable to the english text) **
+#. txt_arch
+msgid "Arch"
+msgstr "Arhitektura"
+
+#. menu label for selecting some (linux) kernel variant
+#. ** please keep it really short (comparable to the english text) **
+#. txt_kernel
+msgid "Kernel"
+msgstr "Kernel"
+
+#. menu item for kernel variant (cf. txt_kernel)
+#. txt_kernel_default
+msgid "Default"
+msgstr "Pretpostavljeno"
+
+#. menu item for kernel variant (cf. txt_kernel)
+#. -> like in txt_safe_linux
+#. txt_kernel_safe
+msgid "Safe Settings"
+msgstr "Sigurne postavke"
+
+#. menu item for kernel variant (cf. txt_kernel)
+#. -> similar to txt_noacpi_install
+#. txt_kernel_noacpi
+msgid "No ACPI"
+msgstr "Bez ACPI-a"
+
+#. menu item for kernel variant (cf. txt_kernel)
+#. -> similar to txt_nolapic_install
+#. txt_kernel_nolapic
+msgid "No Local APIC"
+msgstr "Bez lokalnog ACPI-a"
+
+#. main menu: start in system repair mode
+#. txt_repain_system
+msgid "Repair Installed System"
+msgstr "Popravi instalirani sustav"
+
+#. menu item
+#. txt_mediacheck
+msgid "Check Installation Media"
+msgstr "Provjeri instalacijski medij"
+
+#. menu item for keyboard layout (please keep it short)
+#. txt_keyboard
+msgid "Keyboard"
+msgstr "Tipkovnica"
+
+#. menu title
+#. txt_dud_download
+msgid "Download Driver Update"
+msgstr "Skini dogradnju upravljačkog programa"
+
+#. input label
+#. txt_dud_enter_url
+msgid "Enter Driver Update URL\n"
+msgstr "Unesite URL dogradnje upravljačkog programa\n"
+
+#. menu item
+#. txt_http_proxy
+msgid "HTTP Proxy"
+msgstr ""
+
+#. menu item
+#. txt_network_config
+msgid "Network Config"
+msgstr ""
+
+#. menu item
+#. txt_no_network
+msgid "No Network"
+msgstr ""
+
+#. short menu item for manual network config (NOT some kind of manual)
+#. txt_manual_network
+msgid "Manual"
+msgstr ""
+
+#. dialog title for manual network config
+#. txt_manual_network_title
+msgid "Manual Network Config"
+msgstr ""
+
+#. label for ip address
+#. txt_host_ip
+msgid "Host IP\n"
+msgstr ""
+
+#. label for gateway ip
+#. txt_gateway_ip
+msgid "Gateway\n"
+msgstr ""
+
+#. label for dns domain name (like 'opensuse.org')
+#. txt_domain_name
+msgid "Domain Name\n"
+msgstr ""
+
+#. label for nameserver list
+#. txt_nameservers
+msgid "Nameservers (separated by ',')\n"
+msgstr ""
+
+#. label for netmask; 'Host IP' refers to label txt_host_ip above
+#. txt_netmask
+msgid "Netmask\n(or use '/N' notation with Host IP)\n"
+msgstr ""
+
+#. label for Live CD installation
+#. txt_live_kde
+msgid "openSUSE Live (KDE)"
+msgstr ""
+
+#. label for Live CD installation
+#. txt_live_gnome
+msgid "openSUSE Live (GNOME)"
+msgstr ""
diff --git a/themes/openSUSE/po/hu.po b/themes/openSUSE/po/hu.po
new file mode 100644
index 0000000..ae24d22
--- /dev/null
+++ b/themes/openSUSE/po/hu.po
@@ -0,0 +1,451 @@
+# translation of hu.po to
+# translation of hu.po to Hungarian
+# LANGUAGE translations for boot loader
+# Copyright (C) 2004 SUSE LINUX AG
+#
+# Kéménczy Kálmán, 2006.
+# Marcel Hilzinger <marcel.hilzinger@suselinux.hu>, 2004.
+# Szabolcs Varga <shirokuma@shirokuma.hu>, 2004, 2005.
+# Kalman Kemenczy <kkemenczy@novell.com>, 2006.
+# Kéménczy Kálmán <kkemenczy@novell.com>, 2006.
+msgid ""
+msgstr ""
+"Project-Id-Version: bootloader.hu\n"
+"POT-Creation-Date: \n"
+"PO-Revision-Date: 2010-04-09 23:20+0200\n"
+"Last-Translator: kalman <kkemenczy@gmail.com>\n"
+"Language-Team: Hungarian <hu@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: hu\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: Pootle 2.0.2\n"
+
+#. ok button label
+#. txt_ok
+msgid "OK"
+msgstr "OK"
+
+#. cancel button label
+#. txt_cancel
+msgid "Cancel"
+msgstr "Mégsem"
+
+#. reboot button label
+#. txt_reboot
+msgid "Reboot"
+msgstr "Újraindítás"
+
+#. continue button label
+#. txt_continue
+msgid "Continue"
+msgstr "Folytatás"
+
+#. txt_install
+msgid "Installation"
+msgstr "Telepítés"
+
+#. txt_safe_linux
+msgid "Linux--Safe Settings"
+msgstr "Linux - Biztonságos beállításokkal"
+
+#. txt_boot_harddisk
+msgid "Boot from Hard Disk"
+msgstr "Rendszerindítás merevlemezről"
+
+#. txt_rescue
+msgid "Rescue System"
+msgstr "Mentőrendszer"
+
+#. txt_memtest
+msgid "Memory Test"
+msgstr "Memóriateszt"
+
+#. txt_bootoptions
+msgid "Boot Options"
+msgstr "Rendszerindítási paraméterek"
+
+#. window title for exit dialog
+#. txt_exit_title (see txt_exit_dialog)
+msgid "Exiting..."
+msgstr "Kilépés…"
+
+#. txt_exit_dialog
+msgid ""
+"You are leaving the graphical boot menu and\n"
+"starting the text mode interface."
+msgstr ""
+"Kilép a grafikus rendszerindító menüből és\n"
+"elindul a karakteres mód."
+
+#. txt_help
+msgid "Help"
+msgstr "Súgó"
+
+#. window title for kernel loading (see txt_load_kernel)
+#. txt_load_kernel_title
+msgid "Starting..."
+msgstr "Indítás…"
+
+#. Keep the three newlines!
+#. txt_load_kernel
+msgid ""
+"Loading Linux Kernel\n"
+"\n"
+"\n"
+msgstr ""
+"A Linux kernel betöltése\n"
+"\n"
+"\n"
+
+#. Keep the three newlines!
+#. txt_load_memtest
+msgid ""
+"Loading memtest86\n"
+"\n"
+"\n"
+msgstr ""
+"A memtest86 program betöltése\n"
+"\n"
+"\n"
+
+#. info box title
+#. txt_info_title
+msgid "Boot Loader"
+msgstr "Rendszertöltő"
+
+#. error box title
+#. txt_error_title
+msgid "I/O Error"
+msgstr "I/O hiba"
+
+#. boot disk change dialog title
+#. txt_change_disk_title
+msgid "Change Boot Disk"
+msgstr "Cserélje az indítólemezt"
+
+#. txt_insert_disk
+#, c-format
+msgid "Insert boot disk %u."
+msgstr "Helyezze be a(z) %u. indítólemezt."
+
+#. txt_insert_disk2
+#, c-format
+msgid ""
+"This is boot disk %u.\n"
+"Insert boot disk %u."
+msgstr ""
+"Ez a(z) %u. indítólemez.\n"
+"Helyezze be a(z) %u. indítólemezt."
+
+#. <product> is e.g. SuSE Linux X.Y or Enterprise Server Z
+#. txt_insert_disk3
+#, c-format
+msgid ""
+"This is not a <product> boot disk.\n"
+"Insert boot disk %u."
+msgstr ""
+"Ez nem egy <product> indítólemez.\n"
+"Helyezze be a(z) %u. indítólemezt."
+
+#. password dialog title
+#. txt_password_title
+msgid "Password"
+msgstr "Jelszó"
+
+#. txt_dud_ready
+msgid "Get your driver update floppy ready."
+msgstr "Készítse elő a frissítéseket tartalmazó meghajtólemezt."
+
+#. power off dialog title
+#. txt_power_off_title
+msgid "Power Off"
+msgstr "Gép kikapcsolása"
+
+#. txt_power_off
+msgid "Halt the system now?"
+msgstr "Ki akarja most kapcsolni a számítógépet?"
+
+#. menu entry for hard disk installation
+#. txt_harddisk
+msgid "Hard Disk"
+msgstr "Merevlemez"
+
+#. dialog title for hard disk installation
+#. txt_harddisk_title
+msgid "Hard Disk Installation"
+msgstr "Telepítés merevlemezről"
+
+#. txt_hd_diskdevice
+msgid "Disk Device (Scans All Disks If Empty)\n"
+msgstr "Merevlemez-eszköz (ha üres, akkor az összes merevlemez ellenőrzése)\n"
+
+#. txt_directory
+msgid "Directory\n"
+msgstr "Könyvtár\n"
+
+#. dialog title for ftp installation
+#. txt_ftp_title
+msgid "FTP Installation"
+msgstr "FTP telepítés"
+
+#. txt_server
+msgid "Server\n"
+msgstr "Kiszolgáló\n"
+
+#. txt_password
+msgid "Password\n"
+msgstr "Jelszó\n"
+
+#. label for ftp user input
+#. txt_user1
+msgid "User (Anonymous Login If Empty)\n"
+msgstr "Felhasználó (ha üres, akkor anonymous)\n"
+
+#. dialog title for nfs installation
+#. txt_nfs_title
+msgid "NFS Installation"
+msgstr "NFS telepítés"
+
+#. label for smb user input
+#. txt_user2
+msgid "User (Uses \"guest\" If Empty)\n"
+msgstr "Felhasználó (ha üres, akkor \"guest\")\n"
+
+#. dialog title for smb installation
+#. txt_smb_title
+msgid "SMB (Windows Share) Installation"
+msgstr "SMB telepítés (Windows megosztásról)"
+
+#. dialog title for http installation
+#. txt_http_title
+msgid "HTTP Installation"
+msgstr "HTTP telepítés"
+
+#. 'driver' as in '(hardware) driver update'
+#. txt_driver_update
+msgid "Driver"
+msgstr "Illesztőprogram"
+
+#. as in Windows Authentication Domain
+#. txt_domain
+msgid "Domain\n"
+msgstr "Tartomány\n"
+
+#. button label for other/more options
+#. txt_other_options
+msgid "Other Options"
+msgstr "Egyéb beállítások"
+
+#. label for language selection
+#. txt_language
+msgid "Language"
+msgstr "Nyelv"
+
+#. txt_yes
+msgid "Yes"
+msgstr "Igen"
+
+#. txt_no
+msgid "No"
+msgstr "Nem"
+
+#. menu item for selecting a file
+#. txt_file
+msgid "File"
+msgstr "Fájl"
+
+#. input label: share as in "Windows share" (SMB)
+#. txt_share
+msgid "Share\n"
+msgstr "Megosztás\n"
+
+#. txt_zenAuto
+msgid "Automatic Mode"
+msgstr "Automatikus"
+
+#. txt_zenManual
+msgid "Manual Mode"
+msgstr "Kézi"
+
+#. txt_zenConfig
+msgid "Configure Parameters on ZEN Partition"
+msgstr "ZEN partíció paramétereinek beállítása"
+
+#. txt_zenInstall
+msgid "Install or Update ZEN Partition"
+msgstr "ZEN partíció telepítése/frissítése"
+
+#. txt_zenLilo
+msgid "Reinstall ZEN Partition Boot Loader"
+msgstr "ZEN partíció betöltőjének újratelepítése"
+
+#. txt_zenDisable
+msgid "Disable ZEN Partition"
+msgstr "ZEN partíció tiltása"
+
+#. txt_zenEnable
+msgid "Enable ZEN Partition"
+msgstr "ZEN partíció engedélyezése"
+
+#. video mode menu item
+#. txt_text_mode
+msgid "Text Mode"
+msgstr "Karakteres mód"
+
+#. menu item, like 'memory test'
+#. txt_firmware
+msgid "Firmware Test"
+msgstr "Firmware-teszt"
+
+#. txt_dud_file_msg
+msgid ""
+"To load driver updates directly from CD-ROM,\n"
+"enter the driver update file names (separated\n"
+"by commas ',') here:\n"
+msgstr ""
+"Amennyiben az illesztőprogram-frissítéseket közvetlenül\n"
+"CD-ről tölti be, adja meg az illesztőprogramok nevét\n"
+"(vesszővel elválasztva ','):\n"
+
+#. install source menu title
+#. ** please keep it really short (comparable to the english text) **
+#. txt_install_source
+msgid "Source"
+msgstr "Forrás"
+
+#. video mode/display size menu title
+#. ** please keep it really short (comparable to the english text) **
+#. txt_video_mode
+msgid "Video Mode"
+msgstr "Videomód"
+
+#. driver update dialog title
+#. -> txt_dud_file_msg
+#. txt_driver_update2
+msgid "Driver Update"
+msgstr "Illesztőprogram-frissítés"
+
+#. menu label for selecting (cpu) architecture
+#. like i386, x86-64, ppc
+#. ** please keep it really short (comparable to the english text) **
+#. txt_arch
+msgid "Arch"
+msgstr "Arch"
+
+#. menu label for selecting some (linux) kernel variant
+#. ** please keep it really short (comparable to the english text) **
+#. txt_kernel
+msgid "Kernel"
+msgstr "Kernel"
+
+#. menu item for kernel variant (cf. txt_kernel)
+#. txt_kernel_default
+msgid "Default"
+msgstr "Alapértelmezett"
+
+#. menu item for kernel variant (cf. txt_kernel)
+#. -> like in txt_safe_linux
+#. txt_kernel_safe
+msgid "Safe Settings"
+msgstr "Biztonságos beállítások"
+
+#. menu item for kernel variant (cf. txt_kernel)
+#. -> similar to txt_noacpi_install
+#. txt_kernel_noacpi
+msgid "No ACPI"
+msgstr "ACPI nélkül"
+
+#. menu item for kernel variant (cf. txt_kernel)
+#. -> similar to txt_nolapic_install
+#. txt_kernel_nolapic
+msgid "No Local APIC"
+msgstr "Helyi APIC-támogatás nélkül"
+
+#. main menu: start in system repair mode
+#. txt_repain_system
+msgid "Repair Installed System"
+msgstr "A telepített rendszer javítása"
+
+#. menu item
+#. txt_mediacheck
+msgid "Check Installation Media"
+msgstr "Telepítőkészlet ellenőrzése"
+
+#. menu item for keyboard layout (please keep it short)
+#. txt_keyboard
+msgid "Keyboard"
+msgstr "Billentyűzet"
+
+#. menu title
+#. txt_dud_download
+msgid "Download Driver Update"
+msgstr "Illesztőprogram-frissítés letöltése"
+
+#. input label
+#. txt_dud_enter_url
+msgid "Enter Driver Update URL\n"
+msgstr "Illesztőprogram-frissítés URL-je\n"
+
+#. menu item
+#. txt_http_proxy
+msgid "HTTP Proxy"
+msgstr "HTTP-proxy"
+
+#. menu item
+#. txt_network_config
+msgid "Network Config"
+msgstr "Hálózati beállítás"
+
+#. menu item
+#. txt_no_network
+msgid "No Network"
+msgstr "Nincs hálózat"
+
+#. short menu item for manual network config (NOT some kind of manual)
+#. txt_manual_network
+msgid "Manual"
+msgstr "Kézi"
+
+#. dialog title for manual network config
+#. txt_manual_network_title
+msgid "Manual Network Config"
+msgstr "Kézi hálózatbeállítás"
+
+#. label for ip address
+#. txt_host_ip
+msgid "Host IP\n"
+msgstr "Gép IP\n"
+
+#. label for gateway ip
+#. txt_gateway_ip
+msgid "Gateway\n"
+msgstr "Átjáró\n"
+
+#. label for dns domain name (like 'opensuse.org')
+#. txt_domain_name
+msgid "Domain Name\n"
+msgstr "Tartománynév\n"
+
+#. label for nameserver list
+#. txt_nameservers
+msgid "Nameservers (separated by ',')\n"
+msgstr "Névkiszolgáló (vesszővel elválasztva)\n"
+
+#. label for netmask; 'Host IP' refers to label txt_host_ip above
+#. txt_netmask
+msgid "Netmask\n(or use '/N' notation with Host IP)\n"
+msgstr ""
+"Hálózati maszk\n"
+"(vagy /N használata a gép IP-vel)\n"
+
+#. label for Live CD installation
+#. txt_live_kde
+msgid "openSUSE Live (KDE)"
+msgstr "openSUSE Live (KDE)"
+
+#. label for Live CD installation
+#. txt_live_gnome
+msgid "openSUSE Live (GNOME)"
+msgstr "openSUSE Live (GNOME)"
diff --git a/themes/openSUSE/po/id.po b/themes/openSUSE/po/id.po
new file mode 100644
index 0000000..9ebba0f
--- /dev/null
+++ b/themes/openSUSE/po/id.po
@@ -0,0 +1,442 @@
+# LANGUAGE translations for boot loader
+# Copyright (C) 2005 SUSE Linux GmbH
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: bootloader\n"
+"Report-Msgid-Bugs-To: translation@suse.de\n"
+"POT-Creation-Date: 2006-05-15 15:07+0200\n"
+"PO-Revision-Date: 2006-10-13 00:07+0700\n"
+"Last-Translator: Tedi Heriyanto <tedi.heriyanto@gmail.com>\n"
+"Language-Team: Indonesian <i18n@suse.de>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0\n"
+"X-Generator: KBabel 1.11.2\n"
+
+#. ok button label
+#. txt_ok
+msgid "OK"
+msgstr "OK"
+
+#. cancel button label
+#. txt_cancel
+msgid "Cancel"
+msgstr "Batal"
+
+#. reboot button label
+#. txt_reboot
+msgid "Reboot"
+msgstr "Reboot"
+
+#. continue button label
+#. txt_continue
+msgid "Continue"
+msgstr "Lanjutkan"
+
+#. txt_install
+msgid "Installation"
+msgstr "Instalasi"
+
+#. txt_safe_linux
+msgid "Linux--Safe Settings"
+msgstr "Linux--Seting Aman"
+
+#. txt_boot_harddisk
+msgid "Boot from Hard Disk"
+msgstr "Boot dari Hard Disk"
+
+#. txt_rescue
+msgid "Rescue System"
+msgstr "Sistem Penyelamat"
+
+#. txt_memtest
+msgid "Memory Test"
+msgstr "Tes Memori"
+
+#. txt_bootoptions
+msgid "Boot Options"
+msgstr "Opsi Boot"
+
+#. window title for exit dialog
+#. txt_exit_title (see txt_exit_dialog)
+msgid "Exiting..."
+msgstr "Keluar..."
+
+#. txt_exit_dialog
+msgid ""
+"You are leaving the graphical boot menu and\n"
+"starting the text mode interface."
+msgstr ""
+"Anda meninggalkan menu boot grafis dan\n"
+"memulai interface mode teks."
+
+#. txt_help
+msgid "Help"
+msgstr "Bantuan"
+
+#. window title for kernel loading (see txt_load_kernel)
+#. txt_load_kernel_title
+msgid "Starting..."
+msgstr "Mulai..."
+
+#. Keep the three newlines!
+#. txt_load_kernel
+msgid ""
+"Loading Linux Kernel\n"
+"\n"
+"\n"
+msgstr ""
+"Memuatkan Kernel Linux\n"
+"\n"
+"\n"
+
+#. Keep the three newlines!
+#. txt_load_memtest
+msgid ""
+"Loading memtest86\n"
+"\n"
+"\n"
+msgstr ""
+"Memuatkan memtest86\n"
+"\n"
+"\n"
+
+#. info box title
+#. txt_info_title
+msgid "Boot Loader"
+msgstr "Boot Loader"
+
+#. error box title
+#. txt_error_title
+msgid "I/O Error"
+msgstr "Kesalahan I/O"
+
+#. boot disk change dialog title
+#. txt_change_disk_title
+msgid "Change Boot Disk"
+msgstr "Merubah Disk Boot"
+
+#. txt_insert_disk
+#, c-format
+msgid "Insert boot disk %u."
+msgstr "Masukkan disk boot %u."
+
+#. txt_insert_disk2
+#, c-format
+msgid ""
+"This is boot disk %u.\n"
+"Insert boot disk %u."
+msgstr ""
+"Ini adalah disk boot %u.\n"
+"Masukkan disk boot %u."
+
+#. <product> is e.g. SuSE Linux X.Y or Enterprise Server Z
+#. txt_insert_disk3
+#, c-format
+msgid ""
+"This is not a <product> boot disk.\n"
+"Insert boot disk %u."
+msgstr ""
+"Ini bukan boot disk <product>.\n"
+"Masukkan disk boot %u"
+
+#. password dialog title
+#. txt_password_title
+msgid "Password"
+msgstr "Password"
+
+#. txt_dud_ready
+msgid "Get your driver update floppy ready."
+msgstr "Siapkan floppy update driver anda."
+
+#. power off dialog title
+#. txt_power_off_title
+msgid "Power Off"
+msgstr "Power Off"
+
+#. txt_power_off
+msgid "Halt the system now?"
+msgstr "Halt sistem sekarang?"
+
+#. menu entry for hard disk installation
+#. txt_harddisk
+msgid "Hard Disk"
+msgstr "Hard Disk"
+
+#. dialog title for hard disk installation
+#. txt_harddisk_title
+msgid "Hard Disk Installation"
+msgstr "Instalasi Hard Disk"
+
+#. txt_hd_diskdevice
+msgid "Disk Device (Scans All Disks If Empty)\n"
+msgstr "Device Disk (Scan Seluruh Disk bila Kosong)\n"
+
+#. txt_directory
+msgid "Directory\n"
+msgstr "Direktori\n"
+
+#. dialog title for ftp installation
+#. txt_ftp_title
+msgid "FTP Installation"
+msgstr "Instalasi FTP"
+
+#. txt_server
+msgid "Server\n"
+msgstr "Server\n"
+
+#. txt_password
+msgid "Password\n"
+msgstr "Password\n"
+
+#. label for ftp user input
+#. txt_user1
+msgid "User (Anonymous Login If Empty)\n"
+msgstr "User (Login Anonim bila Kosong)\n"
+
+#. dialog title for nfs installation
+#. txt_nfs_title
+msgid "NFS Installation"
+msgstr "Instalasi NFS"
+
+#. label for smb user input
+#. txt_user2
+msgid "User (Uses \"guest\" If Empty)\n"
+msgstr "User (Gunakan \"guest\" jika Kosong)\n"
+
+#. dialog title for smb installation
+#. txt_smb_title
+msgid "SMB (Windows Share) Installation"
+msgstr "Instalasi SMB (Share Windows)"
+
+#. dialog title for http installation
+#. txt_http_title
+msgid "HTTP Installation"
+msgstr "Instalasi HTTP"
+
+#. 'driver' as in '(hardware) driver update'
+#. txt_driver_update
+msgid "Driver"
+msgstr "Driver"
+
+#. as in Windows Authentication Domain
+#. txt_domain
+msgid "Domain\n"
+msgstr "Domain\n"
+
+#. button label for other/more options
+#. txt_other_options
+msgid "Other Options"
+msgstr "Opsi Lain"
+
+#. label for language selection
+#. txt_language
+msgid "Language"
+msgstr "Bahasa"
+
+#. txt_yes
+msgid "Yes"
+msgstr "Ya"
+
+#. txt_no
+msgid "No"
+msgstr "Tidak"
+
+#. menu item for selecting a file
+#. txt_file
+msgid "File"
+msgstr "File"
+
+#. input label: share as in "Windows share" (SMB)
+#. txt_share
+msgid "Share\n"
+msgstr "Share\n"
+
+#. txt_zenAuto
+msgid "Automatic Mode"
+msgstr "Mode Otomatis"
+
+#. txt_zenManual
+msgid "Manual Mode"
+msgstr "Mode Manual"
+
+#. txt_zenConfig
+msgid "Configure Parameters on ZEN Partition"
+msgstr "Konfigurasi Parameter pada Partisi ZEN"
+
+#. txt_zenInstall
+msgid "Install or Update ZEN Partition"
+msgstr "Instalasi atau Update Partisi ZEN"
+
+#. txt_zenLilo
+msgid "Reinstall ZEN Partition Boot Loader"
+msgstr "Instalasi ulang Boot Loader Partisi ZEN"
+
+#. txt_zenDisable
+msgid "Disable ZEN Partition"
+msgstr "Tiadakan Partisi ZEN"
+
+#. txt_zenEnable
+msgid "Enable ZEN Partition"
+msgstr "Adakan Partisi ZEN"
+
+#. video mode menu item
+#. txt_text_mode
+msgid "Text Mode"
+msgstr "Mode Teks"
+
+#. menu item, like 'memory test'
+#. txt_firmware
+msgid "Firmware Test"
+msgstr "Tes Firmware"
+
+#. txt_dud_file_msg
+msgid ""
+"To load driver updates directly from CD-ROM,\n"
+"enter the driver update file names (separated\n"
+"by commas ',') here:\n"
+msgstr ""
+"Untuk memuatkan update driver secara langsung dari CDROM,\n"
+"masukkan nama file update driver (dipisahkan\n"
+"oleh koma ',') di sini:\n"
+
+#. install source menu title
+#. ** please keep it really short (comparable to the english text) **
+#. txt_install_source
+msgid "Source"
+msgstr ""
+
+#. video mode/display size menu title
+#. ** please keep it really short (comparable to the english text) **
+#. txt_video_mode
+msgid "Video Mode"
+msgstr ""
+
+#. driver update dialog title
+#. -> txt_dud_file_msg
+#. txt_driver_update2
+msgid "Driver Update"
+msgstr ""
+
+#. menu label for selecting (cpu) architecture
+#. like i386, x86-64, ppc
+#. ** please keep it really short (comparable to the english text) **
+#. txt_arch
+msgid "Arch"
+msgstr ""
+
+#. menu label for selecting some (linux) kernel variant
+#. ** please keep it really short (comparable to the english text) **
+#. txt_kernel
+msgid "Kernel"
+msgstr ""
+
+#. menu item for kernel variant (cf. txt_kernel)
+#. txt_kernel_default
+msgid "Default"
+msgstr ""
+
+#. menu item for kernel variant (cf. txt_kernel)
+#. -> like in txt_safe_linux
+#. txt_kernel_safe
+msgid "Safe Settings"
+msgstr ""
+
+#. menu item for kernel variant (cf. txt_kernel)
+#. -> similar to txt_noacpi_install
+#. txt_kernel_noacpi
+msgid "No ACPI"
+msgstr ""
+
+#. menu item for kernel variant (cf. txt_kernel)
+#. -> similar to txt_nolapic_install
+#. txt_kernel_nolapic
+msgid "No Local APIC"
+msgstr ""
+
+#. main menu: start in system repair mode
+#. txt_repain_system
+msgid "Repair Installed System"
+msgstr ""
+
+#. menu item
+#. txt_mediacheck
+msgid "Check Installation Media"
+msgstr ""
+
+#. menu item for keyboard layout (please keep it short)
+#. txt_keyboard
+msgid "Keyboard"
+msgstr ""
+
+#. menu title
+#. txt_dud_download
+msgid "Download Driver Update"
+msgstr ""
+
+#. input label
+#. txt_dud_enter_url
+msgid "Enter Driver Update URL\n"
+msgstr ""
+
+#. menu item
+#. txt_http_proxy
+msgid "HTTP Proxy"
+msgstr ""
+
+#. menu item
+#. txt_network_config
+msgid "Network Config"
+msgstr ""
+
+#. menu item
+#. txt_no_network
+msgid "No Network"
+msgstr ""
+
+#. short menu item for manual network config (NOT some kind of manual)
+#. txt_manual_network
+msgid "Manual"
+msgstr ""
+
+#. dialog title for manual network config
+#. txt_manual_network_title
+msgid "Manual Network Config"
+msgstr ""
+
+#. label for ip address
+#. txt_host_ip
+msgid "Host IP\n"
+msgstr ""
+
+#. label for gateway ip
+#. txt_gateway_ip
+msgid "Gateway\n"
+msgstr ""
+
+#. label for dns domain name (like 'opensuse.org')
+#. txt_domain_name
+msgid "Domain Name\n"
+msgstr ""
+
+#. label for nameserver list
+#. txt_nameservers
+msgid "Nameservers (separated by ',')\n"
+msgstr ""
+
+#. label for netmask; 'Host IP' refers to label txt_host_ip above
+#. txt_netmask
+msgid "Netmask\n(or use '/N' notation with Host IP)\n"
+msgstr ""
+
+#. label for Live CD installation
+#. txt_live_kde
+msgid "openSUSE Live (KDE)"
+msgstr ""
+
+#. label for Live CD installation
+#. txt_live_gnome
+msgid "openSUSE Live (GNOME)"
+msgstr ""
diff --git a/themes/openSUSE/po/it.po b/themes/openSUSE/po/it.po
new file mode 100644
index 0000000..838d79b
--- /dev/null
+++ b/themes/openSUSE/po/it.po
@@ -0,0 +1,448 @@
+# translation of it.po to
+# translation of it.po to
+# translation of bootloader.po to
+# translation of bootloader.po to
+# LANGUAGE translations for boot loader
+# Copyright (C) 2004 SUSE LINUX AG
+msgid ""
+msgstr ""
+"Project-Id-Version: bootloader\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2009-09-21 09:35+0200\n"
+"PO-Revision-Date: 2010-03-31 18:35+0100\n"
+"Last-Translator: Andrea Florio <andrea@opensuse.org>\n"
+"Language-Team: italiano <translations@opensuse.org>\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"
+"X-Poedit-SourceCharset: utf-8\n"
+
+#. ok button label
+#. txt_ok
+msgid "OK"
+msgstr "Ok"
+
+#. cancel button label
+#. txt_cancel
+msgid "Cancel"
+msgstr "Cancella"
+
+#. reboot button label
+#. txt_reboot
+msgid "Reboot"
+msgstr "Riavvia"
+
+#. continue button label
+#. txt_continue
+msgid "Continue"
+msgstr "Continua"
+
+#. txt_install
+msgid "Installation"
+msgstr "Installazione"
+
+#. txt_safe_linux
+msgid "Linux--Safe Settings"
+msgstr "Linux--Safe Settings"
+
+#. txt_boot_harddisk
+msgid "Boot from Hard Disk"
+msgstr "Avvio dal disco rigido"
+
+#. txt_rescue
+msgid "Rescue System"
+msgstr "Sistema di salvataggio"
+
+#. txt_memtest
+msgid "Memory Test"
+msgstr "Verifica della memoria "
+
+#. txt_bootoptions
+msgid "Boot Options"
+msgstr "Opzioni di boot"
+
+#. window title for exit dialog
+#. txt_exit_title (see txt_exit_dialog)
+msgid "Exiting..."
+msgstr "Uscita in corso..."
+
+#. txt_exit_dialog
+msgid ""
+"You are leaving the graphical boot menu and\n"
+"starting the text mode interface."
+msgstr ""
+"State per uscire dal menu di avvio grafico e\n"
+"per avviare l'interfaccia nel modo testo."
+
+#. txt_help
+msgid "Help"
+msgstr "Aiuto"
+
+#. window title for kernel loading (see txt_load_kernel)
+#. txt_load_kernel_title
+msgid "Starting..."
+msgstr "Avvio in corso..."
+
+#. Keep the three newlines!
+#. txt_load_kernel
+msgid ""
+"Loading Linux Kernel\n"
+"\n"
+"\n"
+msgstr ""
+"Caricamento del kernel Linux in corso\n"
+"\n"
+"\n"
+
+#. Keep the three newlines!
+#. txt_load_memtest
+msgid ""
+"Loading memtest86\n"
+"\n"
+"\n"
+msgstr ""
+"Caricamento di memtest86 in corso\n"
+"\n"
+"\n"
+
+#. info box title
+#. txt_info_title
+msgid "Boot Loader"
+msgstr "Boot loader"
+
+#. error box title
+#. txt_error_title
+msgid "I/O Error"
+msgstr "Errore di I/O"
+
+#. boot disk change dialog title
+#. txt_change_disk_title
+msgid "Change Boot Disk"
+msgstr "Cambia dischetto di boot"
+
+#. txt_insert_disk
+#, c-format
+msgid "Insert boot disk %u."
+msgstr "Inserire il disco di avvio di %u."
+
+#. txt_insert_disk2
+#, c-format
+msgid ""
+"This is boot disk %u.\n"
+"Insert boot disk %u."
+msgstr ""
+"Questo è il disco di avvio di %u.\n"
+"Inserire il disco di avvio di %u."
+
+#. <product> is e.g. SuSE Linux X.Y or Enterprise Server Z
+#. txt_insert_disk3
+#, c-format
+msgid ""
+"This is not a <product> boot disk.\n"
+"Insert boot disk %u."
+msgstr ""
+"Questo non è un disco di avvio di <prodotto>.\n"
+"Inserire il disco di avvio %u."
+
+#. password dialog title
+#. txt_password_title
+msgid "Password"
+msgstr "Password"
+
+#. txt_dud_ready
+msgid "Get your driver update floppy ready."
+msgstr "Preparare il disco floppy con l'aggiornamento dei driver."
+
+#. power off dialog title
+#. txt_power_off_title
+msgid "Power Off"
+msgstr "Spegnimento"
+
+#. txt_power_off
+msgid "Halt the system now?"
+msgstr "Arrestare il sistema?"
+
+#. menu entry for hard disk installation
+#. txt_harddisk
+msgid "Hard Disk"
+msgstr "Disco rigido"
+
+#. dialog title for hard disk installation
+#. txt_harddisk_title
+msgid "Hard Disk Installation"
+msgstr "Installazione disco rigido"
+
+#. txt_hd_diskdevice
+msgid "Disk Device (Scans All Disks If Empty)\n"
+msgstr "Dispositivo disco (se vuoto analizza tutti i dischi)\n"
+
+#. txt_directory
+msgid "Directory\n"
+msgstr "Directory\n"
+
+#. dialog title for ftp installation
+#. txt_ftp_title
+msgid "FTP Installation"
+msgstr "Installazione FTP"
+
+#. txt_server
+msgid "Server\n"
+msgstr "Server\n"
+
+#. txt_password
+msgid "Password\n"
+msgstr "Password\n"
+
+#. label for ftp user input
+#. txt_user1
+msgid "User (Anonymous Login If Empty)\n"
+msgstr "Utente (login anonimo se vuoto)\n"
+
+#. dialog title for nfs installation
+#. txt_nfs_title
+msgid "NFS Installation"
+msgstr "Installazione NFS"
+
+#. label for smb user input
+#. txt_user2
+msgid "User (Uses \"guest\" If Empty)\n"
+msgstr "Utente (se vuoto viene utilizzato \"guest\")\n"
+
+#. dialog title for smb installation
+#. txt_smb_title
+msgid "SMB (Windows Share) Installation"
+msgstr "Installazione SMB (share Windows)"
+
+#. dialog title for http installation
+#. txt_http_title
+msgid "HTTP Installation"
+msgstr "Installazione HTTP"
+
+#. 'driver' as in '(hardware) driver update'
+#. txt_driver_update
+msgid "Driver"
+msgstr "Driver"
+
+#. as in Windows Authentication Domain
+#. txt_domain
+msgid "Domain\n"
+msgstr "Domino\n"
+
+#. button label for other/more options
+#. txt_other_options
+msgid "Other Options"
+msgstr "Altre opzioni"
+
+#. label for language selection
+#. txt_language
+msgid "Language"
+msgstr "Lingua"
+
+#. txt_yes
+msgid "Yes"
+msgstr "Sì"
+
+#. txt_no
+msgid "No"
+msgstr "No"
+
+#. menu item for selecting a file
+#. txt_file
+msgid "File"
+msgstr "File"
+
+#. input label: share as in "Windows share" (SMB)
+#. txt_share
+msgid "Share\n"
+msgstr "Condividi\n"
+
+#. txt_zenAuto
+msgid "Automatic Mode"
+msgstr "Modalità automatica"
+
+#. txt_zenManual
+msgid "Manual Mode"
+msgstr "Modalità manuale"
+
+#. txt_zenConfig
+msgid "Configure Parameters on ZEN Partition"
+msgstr "Configura parametri nella partizione ZEN"
+
+#. txt_zenInstall
+msgid "Install or Update ZEN Partition"
+msgstr "Installa o aggiorna partizione ZEN"
+
+#. txt_zenLilo
+msgid "Reinstall ZEN Partition Boot Loader"
+msgstr "Reinstalla caricatore di avvio partizione ZEN"
+
+#. txt_zenDisable
+msgid "Disable ZEN Partition"
+msgstr "Disabilita partizione ZEN"
+
+#. txt_zenEnable
+msgid "Enable ZEN Partition"
+msgstr "Abilita partizione ZEN"
+
+#. video mode menu item
+#. txt_text_mode
+msgid "Text Mode"
+msgstr "Modo testo"
+
+#. menu item, like 'memory test'
+#. txt_firmware
+msgid "Firmware Test"
+msgstr "Verifica firmware"
+
+#. txt_dud_file_msg
+msgid ""
+"To load driver updates directly from CD-ROM,\n"
+"enter the driver update file names (separated\n"
+"by commas ',') here:\n"
+msgstr ""
+"Per caricare gli aggiornamenti del driver direttamente dal CD ROM,\n"
+"immettere qui i nomi dei file di aggiornamento del driver (separati\n"
+"da virgole','):\n"
+
+#. install source menu title
+#. ** please keep it really short (comparable to the english text) **
+#. txt_install_source
+msgid "Source"
+msgstr "Sorgente"
+
+#. video mode/display size menu title
+#. ** please keep it really short (comparable to the english text) **
+#. txt_video_mode
+msgid "Video Mode"
+msgstr "Modalità video"
+
+#. driver update dialog title
+#. -> txt_dud_file_msg
+#. txt_driver_update2
+msgid "Driver Update"
+msgstr "Aggiornamento driver"
+
+#. menu label for selecting (cpu) architecture
+#. like i386, x86-64, ppc
+#. ** please keep it really short (comparable to the english text) **
+#. txt_arch
+msgid "Arch"
+msgstr "Arch."
+
+#. menu label for selecting some (linux) kernel variant
+#. ** please keep it really short (comparable to the english text) **
+#. txt_kernel
+msgid "Kernel"
+msgstr "Kernel"
+
+#. menu item for kernel variant (cf. txt_kernel)
+#. txt_kernel_default
+msgid "Default"
+msgstr "Predefinito"
+
+#. menu item for kernel variant (cf. txt_kernel)
+#. -> like in txt_safe_linux
+#. txt_kernel_safe
+msgid "Safe Settings"
+msgstr "Impostazioni sicure"
+
+#. menu item for kernel variant (cf. txt_kernel)
+#. -> similar to txt_noacpi_install
+#. txt_kernel_noacpi
+msgid "No ACPI"
+msgstr "No ACPI"
+
+#. menu item for kernel variant (cf. txt_kernel)
+#. -> similar to txt_nolapic_install
+#. txt_kernel_nolapic
+msgid "No Local APIC"
+msgstr "No Local APIC"
+
+#. main menu: start in system repair mode
+#. txt_repain_system
+msgid "Repair Installed System"
+msgstr "Ripara sistema installato"
+
+#. menu item
+#. txt_mediacheck
+msgid "Check Installation Media"
+msgstr "Verifica del supporto di installazione"
+
+#. menu item for keyboard layout (please keep it short)
+#. txt_keyboard
+msgid "Keyboard"
+msgstr "Tastiera"
+
+#. menu title
+#. txt_dud_download
+msgid "Download Driver Update"
+msgstr "Download dell'aggiornamento del driver"
+
+#. input label
+#. txt_dud_enter_url
+msgid "Enter Driver Update URL\n"
+msgstr "Inserisci l'URL dell'aggiornamento del driver\n"
+
+#. menu item
+#. txt_http_proxy
+msgid "HTTP Proxy"
+msgstr "Proxy HTTP"
+
+#. menu item
+#. txt_network_config
+msgid "Network Config"
+msgstr "Configurazione Rete"
+
+#. menu item
+#. txt_no_network
+msgid "No Network"
+msgstr "Nessuna Rete"
+
+#. short menu item for manual network config (NOT some kind of manual)
+#. txt_manual_network
+msgid "Manual"
+msgstr "Manuale"
+
+#. dialog title for manual network config
+#. txt_manual_network_title
+msgid "Manual Network Config"
+msgstr "Configurazione manuale della rete"
+
+#. label for ip address
+#. txt_host_ip
+msgid "Host IP\n"
+msgstr "IP Host\n"
+
+#. label for gateway ip
+#. txt_gateway_ip
+msgid "Gateway\n"
+msgstr "Gateway\n"
+
+#. label for dns domain name (like 'opensuse.org')
+#. txt_domain_name
+msgid "Domain Name\n"
+msgstr "Nome Domino\n"
+
+#. label for nameserver list
+#. txt_nameservers
+msgid "Nameservers (separated by ',')\n"
+msgstr "Server dei nomi (separati da ',')\n"
+
+#. label for netmask; 'Host IP' refers to label txt_host_ip above
+#. txt_netmask
+msgid "Netmask\n(or use '/N' notation with Host IP)\n"
+msgstr ""
+"Netmask\n"
+"(or utilizza la notazione '/N' con l'IP dell'host)\n"
+
+#. label for Live CD installation
+#. txt_live_kde
+msgid "openSUSE Live (KDE)"
+msgstr "openSUSE Live (KDE)"
+
+#. label for Live CD installation
+#. txt_live_gnome
+msgid "openSUSE Live (GNOME)"
+msgstr "openSUSE Live (GNOME)"
diff --git a/themes/openSUSE/po/ja.po b/themes/openSUSE/po/ja.po
new file mode 100644
index 0000000..af16b48
--- /dev/null
+++ b/themes/openSUSE/po/ja.po
@@ -0,0 +1,441 @@
+# LANGUAGE translations for boot loader
+# Copyright (C) 2004 SUSE LINUX AG
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: bootloader\n"
+"PO-Revision-Date: 2009-10-05 22:35+0900\n"
+"Last-Translator: Yasuhiko Kamata <belphegor@belbel.or.jp>\n"
+"Language-Team: Japanese <opensuse-ja@opensuse.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.11.4\n"
+
+#. ok button label
+#. txt_ok
+msgid "OK"
+msgstr "OK"
+
+#. cancel button label
+#. txt_cancel
+msgid "Cancel"
+msgstr "キャンセル"
+
+#. reboot button label
+#. txt_reboot
+msgid "Reboot"
+msgstr "再起動"
+
+#. continue button label
+#. txt_continue
+msgid "Continue"
+msgstr "続行"
+
+#. txt_install
+msgid "Installation"
+msgstr "インストール"
+
+#. txt_safe_linux
+msgid "Linux--Safe Settings"
+msgstr "Linux -- 安全設定"
+
+#. txt_boot_harddisk
+msgid "Boot from Hard Disk"
+msgstr "ハードディスクから起動"
+
+#. txt_rescue
+msgid "Rescue System"
+msgstr "レスキューシステム"
+
+#. txt_memtest
+msgid "Memory Test"
+msgstr "メモリテスト"
+
+#. txt_bootoptions
+msgid "Boot Options"
+msgstr "起動オプション"
+
+#. window title for exit dialog
+#. txt_exit_title (see txt_exit_dialog)
+msgid "Exiting..."
+msgstr "終了しています..."
+
+#. txt_exit_dialog
+msgid ""
+"You are leaving the graphical boot menu and\n"
+"starting the text mode interface."
+msgstr ""
+"グラフィックブートメニューから\n"
+"テキストモードに切替えます。"
+
+#. txt_help
+msgid "Help"
+msgstr "ヘルプ"
+
+#. window title for kernel loading (see txt_load_kernel)
+#. txt_load_kernel_title
+msgid "Starting..."
+msgstr "起動しています..."
+
+#. Keep the three newlines!
+#. txt_load_kernel
+msgid ""
+"Loading Linux Kernel\n"
+"\n"
+"\n"
+msgstr ""
+"Linuxカーネルを読み込んでいます\n"
+"\n"
+"\n"
+
+#. Keep the three newlines!
+#. txt_load_memtest
+msgid ""
+"Loading memtest86\n"
+"\n"
+"\n"
+msgstr ""
+"memtest86 を読み込んでいます\n"
+"\n"
+"\n"
+
+#. info box title
+#. txt_info_title
+msgid "Boot Loader"
+msgstr "ブートローダ"
+
+#. error box title
+#. txt_error_title
+msgid "I/O Error"
+msgstr "入出力エラー"
+
+#. boot disk change dialog title
+#. txt_change_disk_title
+msgid "Change Boot Disk"
+msgstr "ブートディスクの変更"
+
+#. txt_insert_disk
+#, c-format
+msgid "Insert boot disk %u."
+msgstr "ブートディスク %u を挿入してください。"
+
+#. txt_insert_disk2
+#, c-format
+msgid ""
+"This is boot disk %u.\n"
+"Insert boot disk %u."
+msgstr ""
+"これはブートディスク %u です。\n"
+"ブートディスク %u を挿入してください。"
+
+#. <product> is e.g. SuSE Linux X.Y or Enterprise Server Z
+#. txt_insert_disk3
+#, c-format
+msgid ""
+"This is not a <product> boot disk.\n"
+"Insert boot disk %u."
+msgstr ""
+"これは <product> ブートディスクではありません。\n"
+"ブートディスク %u を挿入してください。"
+
+#. password dialog title
+#. txt_password_title
+msgid "Password"
+msgstr "パスワード"
+
+#. txt_dud_ready
+msgid "Get your driver update floppy ready."
+msgstr "ドライバ更新のフロッピーディスクを準備してください。"
+
+#. power off dialog title
+#. txt_power_off_title
+msgid "Power Off"
+msgstr "電源オフ"
+
+#. txt_power_off
+msgid "Halt the system now?"
+msgstr "システムを中止しますか?"
+
+#. menu entry for hard disk installation
+#. txt_harddisk
+msgid "Hard Disk"
+msgstr "ハードディスク"
+
+#. dialog title for hard disk installation
+#. txt_harddisk_title
+msgid "Hard Disk Installation"
+msgstr "ハードディスクへのインストール"
+
+#. txt_hd_diskdevice
+msgid "Disk Device (Scans All Disks If Empty)\n"
+msgstr "ディスクデバイス (空の場合は全ディスクを検索します)\n"
+
+#. txt_directory
+msgid "Directory\n"
+msgstr "ディレクトリ\n"
+
+#. dialog title for ftp installation
+#. txt_ftp_title
+msgid "FTP Installation"
+msgstr "FTP インストール"
+
+#. txt_server
+msgid "Server\n"
+msgstr "サーバ\n"
+
+#. txt_password
+msgid "Password\n"
+msgstr "パスワード\n"
+
+#. label for ftp user input
+#. txt_user1
+msgid "User (Anonymous Login If Empty)\n"
+msgstr "ユーザ (無入力の場合は匿名ログイン)\n"
+
+#. dialog title for nfs installation
+#. txt_nfs_title
+msgid "NFS Installation"
+msgstr "NFS インストール"
+
+#. label for smb user input
+#. txt_user2
+msgid "User (Uses \"guest\" If Empty)\n"
+msgstr "ユーザ (無入力の場合は guest を使用)\n"
+
+#. dialog title for smb installation
+#. txt_smb_title
+msgid "SMB (Windows Share) Installation"
+msgstr "SMB (Windows 共有) インストール"
+
+#. dialog title for http installation
+#. txt_http_title
+msgid "HTTP Installation"
+msgstr "HTTP インストール"
+
+#. 'driver' as in '(hardware) driver update'
+#. txt_driver_update
+msgid "Driver"
+msgstr "ドライバ"
+
+#. as in Windows Authentication Domain
+#. txt_domain
+msgid "Domain\n"
+msgstr "ドメイン\n"
+
+#. button label for other/more options
+#. txt_other_options
+msgid "Other Options"
+msgstr "その他のオプション"
+
+#. label for language selection
+#. txt_language
+msgid "Language"
+msgstr "言語"
+
+#. txt_yes
+msgid "Yes"
+msgstr "はい"
+
+#. txt_no
+msgid "No"
+msgstr "いいえ"
+
+#. menu item for selecting a file
+#. txt_file
+msgid "File"
+msgstr "ファイル"
+
+#. input label: share as in "Windows share" (SMB)
+#. txt_share
+msgid "Share\n"
+msgstr "共有\n"
+
+#. txt_zenAuto
+msgid "Automatic Mode"
+msgstr "自動モード"
+
+#. txt_zenManual
+msgid "Manual Mode"
+msgstr "手動モード"
+
+#. txt_zenConfig
+msgid "Configure Parameters on ZEN Partition"
+msgstr "ZEN パーティション上のパラメータ設定"
+
+#. txt_zenInstall
+msgid "Install or Update ZEN Partition"
+msgstr "ZEN パーティションのインストールまたはアップデート"
+
+#. txt_zenLilo
+msgid "Reinstall ZEN Partition Boot Loader"
+msgstr "ZEN パーティションブートローダの再インストール"
+
+#. txt_zenDisable
+msgid "Disable ZEN Partition"
+msgstr "ZEN パーティションを無効にする"
+
+#. txt_zenEnable
+msgid "Enable ZEN Partition"
+msgstr "ZEN パーティションを有効にする"
+
+#. video mode menu item
+#. txt_text_mode
+msgid "Text Mode"
+msgstr "テキストモード"
+
+#. menu item, like 'memory test'
+#. txt_firmware
+msgid "Firmware Test"
+msgstr "ファームウェアのテスト"
+
+#. txt_dud_file_msg
+msgid ""
+"To load driver updates directly from CD-ROM,\n"
+"enter the driver update file names (separated\n"
+"by commas ',') here:\n"
+msgstr ""
+"CD-ROMから直接更新済みのドライバを読み込むするには、\n"
+"更新済みのドライバファイル名をここで入力してください\n"
+"(コンマ ',' で区切ります):\n"
+
+#. install source menu title
+#. ** please keep it really short (comparable to the english text) **
+#. txt_install_source
+msgid "Source"
+msgstr "ソース"
+
+#. video mode/display size menu title
+#. ** please keep it really short (comparable to the english text) **
+#. txt_video_mode
+msgid "Video Mode"
+msgstr "ビデオモード"
+
+#. driver update dialog title
+#. -> txt_dud_file_msg
+#. txt_driver_update2
+msgid "Driver Update"
+msgstr "ドライバ更新"
+
+#. menu label for selecting (cpu) architecture
+#. like i386, x86-64, ppc
+#. ** please keep it really short (comparable to the english text) **
+#. txt_arch
+msgid "Arch"
+msgstr "アーキテクチャ"
+
+#. menu label for selecting some (linux) kernel variant
+#. ** please keep it really short (comparable to the english text) **
+#. txt_kernel
+msgid "Kernel"
+msgstr "カーネル"
+
+#. menu item for kernel variant (cf. txt_kernel)
+#. txt_kernel_default
+msgid "Default"
+msgstr "デフォルト"
+
+#. menu item for kernel variant (cf. txt_kernel)
+#. -> like in txt_safe_linux
+#. txt_kernel_safe
+msgid "Safe Settings"
+msgstr "安全設定"
+
+#. menu item for kernel variant (cf. txt_kernel)
+#. -> similar to txt_noacpi_install
+#. txt_kernel_noacpi
+msgid "No ACPI"
+msgstr "ACPI なし"
+
+#. menu item for kernel variant (cf. txt_kernel)
+#. -> similar to txt_nolapic_install
+#. txt_kernel_nolapic
+msgid "No Local APIC"
+msgstr "ローカル APIC なし"
+
+#. main menu: start in system repair mode
+#. txt_repain_system
+msgid "Repair Installed System"
+msgstr "インストール済みのシステムを修復"
+
+#. menu item
+#. txt_mediacheck
+msgid "Check Installation Media"
+msgstr "インストールメディアのチェック"
+
+#. menu item for keyboard layout (please keep it short)
+#. txt_keyboard
+msgid "Keyboard"
+msgstr "キーボード"
+
+#. menu title
+#. txt_dud_download
+msgid "Download Driver Update"
+msgstr "ドライバ更新のダウンロード"
+
+#. input label
+#. txt_dud_enter_url
+msgid "Enter Driver Update URL\n"
+msgstr "ドライバ更新の URL を入力してください\n"
+
+#. menu item
+#. txt_http_proxy
+msgid "HTTP Proxy"
+msgstr "HTTP プロキシ"
+
+#. menu item
+#. txt_network_config
+msgid "Network Config"
+msgstr "ネットワーク設定"
+
+#. menu item
+#. txt_no_network
+msgid "No Network"
+msgstr "ネットワーク無し"
+
+#. short menu item for manual network config (NOT some kind of manual)
+#. txt_manual_network
+msgid "Manual"
+msgstr "手動"
+
+#. dialog title for manual network config
+#. txt_manual_network_title
+msgid "Manual Network Config"
+msgstr "手動ネットワーク設定"
+
+#. label for ip address
+#. txt_host_ip
+msgid "Host IP\n"
+msgstr "ホスト IP\n"
+
+#. label for gateway ip
+#. txt_gateway_ip
+msgid "Gateway\n"
+msgstr "ゲートウエイ\n"
+
+#. label for dns domain name (like 'opensuse.org')
+#. txt_domain_name
+msgid "Domain Name\n"
+msgstr "ドメイン名\n"
+
+#. label for nameserver list
+#. txt_nameservers
+msgid "Nameservers (separated by ',')\n"
+msgstr "ネームサーバ (',' で区切る)\n"
+
+#. label for netmask; 'Host IP' refers to label txt_host_ip above
+#. txt_netmask
+msgid "Netmask\n(or use '/N' notation with Host IP)\n"
+msgstr ""
+"ネットマスク\n"
+"(ホスト IP の設定項目で '/N' の形式を利用することもできます)\n"
+
+#. label for Live CD installation
+#. txt_live_kde
+msgid "openSUSE Live (KDE)"
+msgstr "openSUSE Live (KDE)"
+
+#. label for Live CD installation
+#. txt_live_gnome
+msgid "openSUSE Live (GNOME)"
+msgstr "openSUSE Live (GNOME)"
diff --git a/themes/openSUSE/po/ka.po b/themes/openSUSE/po/ka.po
new file mode 100644
index 0000000..4ff6093
--- /dev/null
+++ b/themes/openSUSE/po/ka.po
@@ -0,0 +1,440 @@
+# LANGUAGE translations for boot loader
+# Copyright (C) 2005 SUSE Linux GmbH
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: @PACKAGE@\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2006-06-19 15:33+0200\n"
+"PO-Revision-Date: 2009-03-06 01:13+0400\n"
+"Last-Translator: George Machitidze <giomac@gmail.com>\n"
+"Language-Team: Georgian <>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"X-Generator: Lokalize 0.2\n"
+
+#. ok button label
+#. txt_ok
+msgid "OK"
+msgstr "OK"
+
+#. cancel button label
+#. txt_cancel
+msgid "Cancel"
+msgstr "შეწყვეტა"
+
+#. reboot button label
+#. txt_reboot
+msgid "Reboot"
+msgstr "გადატვირთვა"
+
+#. continue button label
+#. txt_continue
+msgid "Continue"
+msgstr "გაგრძელება"
+
+#. txt_install
+msgid "Installation"
+msgstr "ჩადგმა"
+
+#. txt_safe_linux
+msgid "Linux--Safe Settings"
+msgstr "Linux--უსაფრთხო პარამეტრებით"
+
+#. txt_boot_harddisk
+msgid "Boot from Hard Disk"
+msgstr "მყარი დისკიდან ჩატვირთვა"
+
+#. txt_rescue
+msgid "Rescue System"
+msgstr "მაშველი სისტემა"
+
+#. txt_memtest
+msgid "Memory Test"
+msgstr "მეხსიერების შემოწმება"
+
+#. txt_bootoptions
+msgid "Boot Options"
+msgstr "ჩარტვირთვის პარამეტრები"
+
+#. window title for exit dialog
+#. txt_exit_title (see txt_exit_dialog)
+msgid "Exiting..."
+msgstr "გამოსვლა..."
+
+#. txt_exit_dialog
+msgid ""
+"You are leaving the graphical boot menu and\n"
+"starting the text mode interface."
+msgstr ""
+"თქვენ ტოვებთ გრაფიკულ მენიუს\n"
+"გადადიხართ ტექსტურ რეჟიმში."
+
+#. txt_help
+msgid "Help"
+msgstr "დახმარება"
+
+#. window title for kernel loading (see txt_load_kernel)
+#. txt_load_kernel_title
+msgid "Starting..."
+msgstr "დაწყება..."
+
+#. Keep the three newlines!
+#. txt_load_kernel
+msgid ""
+"Loading Linux Kernel\n"
+"\n"
+"\n"
+msgstr ""
+"Linux-ის ბირთვის ჩატვირთვაl\n"
+"\n"
+"\n"
+
+#. Keep the three newlines!
+#. txt_load_memtest
+msgid ""
+"Loading memtest86\n"
+"\n"
+"\n"
+msgstr ""
+"memtest86-ის ჩარტვირთვა\n"
+"\n"
+"\n"
+
+#. info box title
+#. txt_info_title
+msgid "Boot Loader"
+msgstr "ჩამტვირთავი"
+
+#. error box title
+#. txt_error_title
+msgid "I/O Error"
+msgstr "I/O შეცდომა"
+
+#. boot disk change dialog title
+#. txt_change_disk_title
+msgid "Change Boot Disk"
+msgstr "ჩატვირთვის დისკის შეცვლა"
+
+#. txt_insert_disk
+#, c-format
+msgid "Insert boot disk %u."
+msgstr "ჩადეთ ჩასატვირთი დისკი %u."
+
+#. txt_insert_disk2
+#, c-format
+msgid ""
+"This is boot disk %u.\n"
+"Insert boot disk %u."
+msgstr ""
+"ეს არის ჩასატვირთი დისკი %u.\n"
+"ჩადეთ ჩასატვირთი დისკი %u."
+
+#. <product> is e.g. SuSE Linux X.Y or Enterprise Server Z
+#. txt_insert_disk3
+#, c-format
+msgid ""
+"This is not a <product> boot disk.\n"
+"Insert boot disk %u."
+msgstr ""
+"ეს არ არის <product>-ის ჩასატვირთი დისკი.\n"
+"ჩადეთ ჩასატვირთი დისკი %u."
+
+#. password dialog title
+#. txt_password_title
+msgid "Password"
+msgstr "პაროლი"
+
+#. txt_dud_ready
+msgid "Get your driver update floppy ready."
+msgstr "მოამზადეთ დრაივერის განახლების დისკეტა."
+
+#. power off dialog title
+#. txt_power_off_title
+msgid "Power Off"
+msgstr "გამოთიშვა"
+
+#. txt_power_off
+msgid "Halt the system now?"
+msgstr "ახლავე შევაჩერო სისტემა?"
+
+#. menu entry for hard disk installation
+#. txt_harddisk
+msgid "Hard Disk"
+msgstr "მყარი დისკი"
+
+#. dialog title for hard disk installation
+#. txt_harddisk_title
+msgid "Hard Disk Installation"
+msgstr "მყარი დისკით ჩადგმა"
+
+#. txt_hd_diskdevice
+msgid "Disk Device (Scans All Disks If Empty)\n"
+msgstr "Disk Device (Scans All Disks If Empty)\n"
+
+#. txt_directory
+msgid "Directory\n"
+msgstr "დირექტორია\n"
+
+#. dialog title for ftp installation
+#. txt_ftp_title
+msgid "FTP Installation"
+msgstr "FTP-ით ჩადგმა"
+
+#. txt_server
+msgid "Server\n"
+msgstr "სერვერი\n"
+
+#. txt_password
+msgid "Password\n"
+msgstr "პაროლი\n"
+
+#. label for ftp user input
+#. txt_user1
+msgid "User (Anonymous Login If Empty)\n"
+msgstr "მოხმარებელი (ცარიელის შემთხვევაში ანონიმური)\n"
+
+#. dialog title for nfs installation
+#. txt_nfs_title
+msgid "NFS Installation"
+msgstr "NFS-ით ჩადგმა"
+
+#. label for smb user input
+#. txt_user2
+msgid "User (Uses \"guest\" If Empty)\n"
+msgstr "მოხმარბელი (თუ ცარიელია, იყენებს \"guest\"-ს)\n"
+
+#. dialog title for smb installation
+#. txt_smb_title
+msgid "SMB (Windows Share) Installation"
+msgstr "SMB (Windows-ის გაზიარებით) ჩადგმა"
+
+#. dialog title for http installation
+#. txt_http_title
+msgid "HTTP Installation"
+msgstr "HTTP-ით ჩადგმა"
+
+#. 'driver' as in '(hardware) driver update'
+#. txt_driver_update
+msgid "Driver"
+msgstr "ფრაივერი"
+
+#. as in Windows Authentication Domain
+#. txt_domain
+msgid "Domain\n"
+msgstr "დომენი\n"
+
+#. button label for other/more options
+#. txt_other_options
+msgid "Other Options"
+msgstr "სხვა პარამეტრები"
+
+#. label for language selection
+#. txt_language
+msgid "Language"
+msgstr "ენა"
+
+#. txt_yes
+msgid "Yes"
+msgstr "დიახ"
+
+#. txt_no
+msgid "No"
+msgstr "არა"
+
+#. menu item for selecting a file
+#. txt_file
+msgid "File"
+msgstr "ფაილი"
+
+#. input label: share as in "Windows share" (SMB)
+#. txt_share
+msgid "Share\n"
+msgstr "ზიარი\n"
+
+#. txt_zenAuto
+msgid "Automatic Mode"
+msgstr "ავტომატური რეჟიმი"
+
+#. txt_zenManual
+msgid "Manual Mode"
+msgstr "ხელოვნური რეჟმი"
+
+#. txt_zenConfig
+msgid "Configure Parameters on ZEN Partition"
+msgstr "ZEN დანაყოფის პარამეტრების მითთება"
+
+#. txt_zenInstall
+msgid "Install or Update ZEN Partition"
+msgstr "ZEN დანაყოფის ჩადგმა ან განახლება"
+
+#. txt_zenLilo
+msgid "Reinstall ZEN Partition Boot Loader"
+msgstr ""
+
+#. txt_zenDisable
+msgid "Disable ZEN Partition"
+msgstr "ZEN დანაყოფის გათიშვა"
+
+#. txt_zenEnable
+msgid "Enable ZEN Partition"
+msgstr "ZEN დანაყოფის ჩართვა"
+
+#. video mode menu item
+#. txt_text_mode
+msgid "Text Mode"
+msgstr "ტექსტური რეჟიმი"
+
+#. menu item, like 'memory test'
+#. txt_firmware
+msgid "Firmware Test"
+msgstr ""
+
+#. txt_dud_file_msg
+#, wrap
+msgid ""
+"To load driver updates directly from CD-ROM,\n"
+"enter the driver update file names (separated\n"
+"by commas ',') here:\n"
+msgstr ""
+
+#. install source menu title
+#. ** please keep it really short (comparable to the english text) **
+#. txt_install_source
+msgid "Source"
+msgstr "წყარო"
+
+#. video mode/display size menu title
+#. ** please keep it really short (comparable to the english text) **
+#. txt_video_mode
+msgid "Video Mode"
+msgstr "ვიდეოს რეჟიმი"
+
+#. driver update dialog title
+#. -> txt_dud_file_msg
+#. txt_driver_update2
+msgid "Driver Update"
+msgstr "დრაივერის განახლება"
+
+#. menu label for selecting (cpu) architecture
+#. like i386, x86-64, ppc
+#. ** please keep it really short (comparable to the english text) **
+#. txt_arch
+msgid "Arch"
+msgstr "არქიტექტურა"
+
+#. menu label for selecting some (linux) kernel variant
+#. ** please keep it really short (comparable to the english text) **
+#. txt_kernel
+msgid "Kernel"
+msgstr "ბირთვი"
+
+#. menu item for kernel variant (cf. txt_kernel)
+#. txt_kernel_default
+msgid "Default"
+msgstr "ნაგულისხმები"
+
+#. menu item for kernel variant (cf. txt_kernel)
+#. -> like in txt_safe_linux
+#. txt_kernel_safe
+msgid "Safe Settings"
+msgstr "უსაფრთხო პარამეტრები"
+
+#. menu item for kernel variant (cf. txt_kernel)
+#. -> similar to txt_noacpi_install
+#. txt_kernel_noacpi
+msgid "No ACPI"
+msgstr "ACPI-ის გარეშე"
+
+#. menu item for kernel variant (cf. txt_kernel)
+#. -> similar to txt_nolapic_install
+#. txt_kernel_nolapic
+msgid "No Local APIC"
+msgstr "ადგილობრივი APIC-ის გარეშე"
+
+#. main menu: start in system repair mode
+#. txt_repain_system
+msgid "Repair Installed System"
+msgstr "ჩადგმული სისტემის შველა"
+
+#. menu item
+#. txt_mediacheck
+msgid "Check Installation Media"
+msgstr "დისკის შემოწმება"
+
+#. menu item for keyboard layout (please keep it short)
+#. txt_keyboard
+msgid "Keyboard"
+msgstr "კლავიატურა"
+
+#. menu title
+#. txt_dud_download
+msgid "Download Driver Update"
+msgstr ""
+
+#. input label
+#. txt_dud_enter_url
+msgid "Enter Driver Update URL\n"
+msgstr ""
+
+#. menu item
+#. txt_http_proxy
+msgid "HTTP Proxy"
+msgstr ""
+
+#. menu item
+#. txt_network_config
+msgid "Network Config"
+msgstr ""
+
+#. menu item
+#. txt_no_network
+msgid "No Network"
+msgstr ""
+
+#. short menu item for manual network config (NOT some kind of manual)
+#. txt_manual_network
+msgid "Manual"
+msgstr ""
+
+#. dialog title for manual network config
+#. txt_manual_network_title
+msgid "Manual Network Config"
+msgstr ""
+
+#. label for ip address
+#. txt_host_ip
+msgid "Host IP\n"
+msgstr ""
+
+#. label for gateway ip
+#. txt_gateway_ip
+msgid "Gateway\n"
+msgstr ""
+
+#. label for dns domain name (like 'opensuse.org')
+#. txt_domain_name
+msgid "Domain Name\n"
+msgstr ""
+
+#. label for nameserver list
+#. txt_nameservers
+msgid "Nameservers (separated by ',')\n"
+msgstr ""
+
+#. label for netmask; 'Host IP' refers to label txt_host_ip above
+#. txt_netmask
+msgid "Netmask\n(or use '/N' notation with Host IP)\n"
+msgstr ""
+
+#. label for Live CD installation
+#. txt_live_kde
+msgid "openSUSE Live (KDE)"
+msgstr ""
+
+#. label for Live CD installation
+#. txt_live_gnome
+msgid "openSUSE Live (GNOME)"
+msgstr ""
diff --git a/themes/openSUSE/po/ko.po b/themes/openSUSE/po/ko.po
new file mode 100644
index 0000000..5c42caf
--- /dev/null
+++ b/themes/openSUSE/po/ko.po
@@ -0,0 +1,446 @@
+# LANGUAGE translations for boot loader
+# Copyright (C) 2005 SUSE Linux GmbH
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: bootloader.ko\n"
+"Report-Msgid-Bugs-To: translation@suse.de\n"
+"POT-Creation-Date: \n"
+"PO-Revision-Date: 2009-10-23 02:24+0900\n"
+"Last-Translator: Yunseok Choi <xein@naver.com>\n"
+"Language-Team: Korean <xein@naver.com>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"X-Poedit-Language: Korean\n"
+"X-Poedit-Country: KOREA, REPUBLIC OF\n"
+"X-Poedit-SourceCharset: utf-8\n"
+
+#. ok button label
+#. txt_ok
+msgid "OK"
+msgstr "확인"
+
+#. cancel button label
+#. txt_cancel
+msgid "Cancel"
+msgstr "취소"
+
+#. reboot button label
+#. txt_reboot
+msgid "Reboot"
+msgstr "시스템 다시 시작"
+
+#. continue button label
+#. txt_continue
+msgid "Continue"
+msgstr "계속"
+
+#. txt_install
+msgid "Installation"
+msgstr "오픈수세 설치"
+
+#. txt_safe_linux
+msgid "Linux--Safe Settings"
+msgstr "리눅스--안전 설정"
+
+#. txt_boot_harddisk
+msgid "Boot from Hard Disk"
+msgstr "하드디스크로 부팅"
+
+#. txt_rescue
+msgid "Rescue System"
+msgstr "시스템 복구(콘솔)"
+
+#. txt_memtest
+msgid "Memory Test"
+msgstr "메모리 테스트"
+
+#. txt_bootoptions
+msgid "Boot Options"
+msgstr "부트 옵션"
+
+#. window title for exit dialog
+#. txt_exit_title (see txt_exit_dialog)
+msgid "Exiting..."
+msgstr "종료 중..."
+
+#. txt_exit_dialog
+msgid ""
+"You are leaving the graphical boot menu and\n"
+"starting the text mode interface."
+msgstr ""
+"그래픽 부트메뉴에서 떠나\n"
+"텍스트 모드 인터페이스로 시작합니다."
+
+#. txt_help
+msgid "Help"
+msgstr "도움말"
+
+#. window title for kernel loading (see txt_load_kernel)
+#. txt_load_kernel_title
+msgid "Starting..."
+msgstr "시작 중..."
+
+#. Keep the three newlines!
+#. txt_load_kernel
+msgid ""
+"Loading Linux Kernel\n"
+"\n"
+"\n"
+msgstr ""
+"리눅스 커널 불러오는 중\n"
+"\n"
+"\n"
+
+#. Keep the three newlines!
+#. txt_load_memtest
+msgid ""
+"Loading memtest86\n"
+"\n"
+"\n"
+msgstr ""
+"memtest84 불러오는 중\n"
+"\n"
+"\n"
+
+#. info box title
+#. txt_info_title
+msgid "Boot Loader"
+msgstr "부트로더"
+
+#. error box title
+#. txt_error_title
+msgid "I/O Error"
+msgstr "I/O 오류"
+
+#. boot disk change dialog title
+#. txt_change_disk_title
+msgid "Change Boot Disk"
+msgstr "부트 디스크 변경"
+
+#. txt_insert_disk
+#, c-format
+msgid "Insert boot disk %u."
+msgstr "%u 부트 디스크 삽입하세요."
+
+#. txt_insert_disk2
+#, c-format
+msgid ""
+"This is boot disk %u.\n"
+"Insert boot disk %u."
+msgstr ""
+"이것은 %u 부트디스크 입니다.\n"
+"%u 부트디스크를 삽입하세요."
+
+#. <product> is e.g. SuSE Linux X.Y or Enterprise Server Z
+#. txt_insert_disk3
+#, c-format
+msgid ""
+"This is not a <product> boot disk.\n"
+"Insert boot disk %u."
+msgstr ""
+"이것은 <product> 부트디스크가 아닙니다.\n"
+"%u 부트디스크를 삽입하세요."
+
+#. password dialog title
+#. txt_password_title
+msgid "Password"
+msgstr "열쇠글"
+
+#. txt_dud_ready
+msgid "Get your driver update floppy ready."
+msgstr "플로피디스크에서 드라이버를 업데이트 준비"
+
+#. power off dialog title
+#. txt_power_off_title
+msgid "Power Off"
+msgstr "전원 끄기"
+
+#. txt_power_off
+msgid "Halt the system now?"
+msgstr "시스템을 지금 종료하시겠습니까?"
+
+#. menu entry for hard disk installation
+#. txt_harddisk
+msgid "Hard Disk"
+msgstr "하드디스크"
+
+#. dialog title for hard disk installation
+#. txt_harddisk_title
+msgid "Hard Disk Installation"
+msgstr "하드디스크 설치"
+
+#. txt_hd_diskdevice
+msgid "Disk Device (Scans All Disks If Empty)\n"
+msgstr "디스크 장치 (비어있을 경우 모든 디스크 검색)\n"
+
+#. txt_directory
+msgid "Directory\n"
+msgstr "디렉터리\n"
+
+#. dialog title for ftp installation
+#. txt_ftp_title
+msgid "FTP Installation"
+msgstr "FTP 설치"
+
+#. txt_server
+msgid "Server\n"
+msgstr "서버\n"
+
+#. txt_password
+msgid "Password\n"
+msgstr "열쇠글\n"
+
+#. label for ftp user input
+#. txt_user1
+msgid "User (Anonymous Login If Empty)\n"
+msgstr "사용자 (비어있을 경우 익명 로그인)\n"
+
+#. dialog title for nfs installation
+#. txt_nfs_title
+msgid "NFS Installation"
+msgstr "NFS 설치"
+
+#. label for smb user input
+#. txt_user2
+msgid "User (Uses \"guest\" If Empty)\n"
+msgstr "사용자 (비어있을 경우 \"guest\" 사용)\n"
+
+#. dialog title for smb installation
+#. txt_smb_title
+msgid "SMB (Windows Share) Installation"
+msgstr "SMB (윈도우 공유) 설치"
+
+#. dialog title for http installation
+#. txt_http_title
+msgid "HTTP Installation"
+msgstr "HTTP 설치"
+
+#. 'driver' as in '(hardware) driver update'
+#. txt_driver_update
+msgid "Driver"
+msgstr "드라이버"
+
+#. as in Windows Authentication Domain
+#. txt_domain
+msgid "Domain\n"
+msgstr "도메인\n"
+
+#. button label for other/more options
+#. txt_other_options
+msgid "Other Options"
+msgstr "다른 옵션"
+
+#. label for language selection
+#. txt_language
+msgid "Language"
+msgstr "언어"
+
+#. txt_yes
+msgid "Yes"
+msgstr "예"
+
+#. txt_no
+msgid "No"
+msgstr "아니요"
+
+#. menu item for selecting a file
+#. txt_file
+msgid "File"
+msgstr "파일"
+
+#. input label: share as in "Windows share" (SMB)
+#. txt_share
+msgid "Share\n"
+msgstr "공유\n"
+
+#. txt_zenAuto
+msgid "Automatic Mode"
+msgstr "자동 모드"
+
+#. txt_zenManual
+msgid "Manual Mode"
+msgstr "수동 모드"
+
+#. txt_zenConfig
+msgid "Configure Parameters on ZEN Partition"
+msgstr "ZEN 파티션 매개변수 구성"
+
+#. txt_zenInstall
+msgid "Install or Update ZEN Partition"
+msgstr "ZEN 파티션 설치 또는 업데이트"
+
+#. txt_zenLilo
+msgid "Reinstall ZEN Partition Boot Loader"
+msgstr "ZEN 파티션 부트로더 재설치"
+
+#. txt_zenDisable
+msgid "Disable ZEN Partition"
+msgstr "ZEN 파티션 비활성"
+
+#. txt_zenEnable
+msgid "Enable ZEN Partition"
+msgstr "ZEN 파티션 활성"
+
+#. video mode menu item
+#. txt_text_mode
+msgid "Text Mode"
+msgstr "텍스트 모드"
+
+#. menu item, like 'memory test'
+#. txt_firmware
+msgid "Firmware Test"
+msgstr "펌웨어 테스트"
+
+#. txt_dud_file_msg
+msgid ""
+"To load driver updates directly from CD-ROM,\n"
+"enter the driver update file names (separated\n"
+"by commas ',') here:\n"
+msgstr ""
+"CD-ROM으로 바로 업데이트 드라이버를 불러옵니다\n"
+"이곳에 업데이트 드라이버 이름을 입력하세요\n"
+"(쉼표로 구분하세요 ','):\n"
+
+#. install source menu title
+#. ** please keep it really short (comparable to the english text) **
+#. txt_install_source
+msgid "Source"
+msgstr "소스"
+
+#. video mode/display size menu title
+#. ** please keep it really short (comparable to the english text) **
+#. txt_video_mode
+msgid "Video Mode"
+msgstr "비디오 모드"
+
+#. driver update dialog title
+#. -> txt_dud_file_msg
+#. txt_driver_update2
+msgid "Driver Update"
+msgstr "드라이버 업데이트"
+
+#. menu label for selecting (cpu) architecture
+#. like i386, x86-64, ppc
+#. ** please keep it really short (comparable to the english text) **
+#. txt_arch
+msgid "Arch"
+msgstr "Arch"
+
+#. menu label for selecting some (linux) kernel variant
+#. ** please keep it really short (comparable to the english text) **
+#. txt_kernel
+msgid "Kernel"
+msgstr "커널"
+
+#. menu item for kernel variant (cf. txt_kernel)
+#. txt_kernel_default
+msgid "Default"
+msgstr "기본"
+
+#. menu item for kernel variant (cf. txt_kernel)
+#. -> like in txt_safe_linux
+#. txt_kernel_safe
+msgid "Safe Settings"
+msgstr "안전 설정"
+
+#. menu item for kernel variant (cf. txt_kernel)
+#. -> similar to txt_noacpi_install
+#. txt_kernel_noacpi
+msgid "No ACPI"
+msgstr "ACPI 없음"
+
+#. menu item for kernel variant (cf. txt_kernel)
+#. -> similar to txt_nolapic_install
+#. txt_kernel_nolapic
+msgid "No Local APIC"
+msgstr "내부 APIC 없음"
+
+#. main menu: start in system repair mode
+#. txt_repain_system
+msgid "Repair Installed System"
+msgstr "설치된 시스템 복원(복구 도구)"
+
+#. menu item
+#. txt_mediacheck
+msgid "Check Installation Media"
+msgstr "설치 미디어 확인"
+
+#. menu item for keyboard layout (please keep it short)
+#. txt_keyboard
+msgid "Keyboard"
+msgstr "키보드"
+
+#. menu title
+#. txt_dud_download
+msgid "Download Driver Update"
+msgstr "드라이버 업데이트 다운로드"
+
+#. input label
+#. txt_dud_enter_url
+msgid "Enter Driver Update URL\n"
+msgstr "드라이버 업데이트 URL 입력\n"
+
+#. menu item
+#. txt_http_proxy
+msgid "HTTP Proxy"
+msgstr "HTTP 프록시"
+
+#. menu item
+#. txt_network_config
+msgid "Network Config"
+msgstr "네트워크 설정"
+
+#. menu item
+#. txt_no_network
+msgid "No Network"
+msgstr "네트워크 없음"
+
+#. short menu item for manual network config (NOT some kind of manual)
+#. txt_manual_network
+msgid "Manual"
+msgstr "수동"
+
+#. dialog title for manual network config
+#. txt_manual_network_title
+msgid "Manual Network Config"
+msgstr "수동 네트워크 설정"
+
+#. label for ip address
+#. txt_host_ip
+msgid "Host IP\n"
+msgstr "호스트 IP\n"
+
+#. label for gateway ip
+#. txt_gateway_ip
+msgid "Gateway\n"
+msgstr "게이트웨이\n"
+
+#. label for dns domain name (like 'opensuse.org')
+#. txt_domain_name
+msgid "Domain Name\n"
+msgstr "도메인 네임\n"
+
+#. label for nameserver list
+#. txt_nameservers
+msgid "Nameservers (separated by ',')\n"
+msgstr "네임서버 (콤마','로 구분)\n"
+
+#. label for netmask; 'Host IP' refers to label txt_host_ip above
+#. txt_netmask
+msgid "Netmask\n(or use '/N' notation with Host IP)\n"
+msgstr ""
+"넷마스크\n"
+"(또는 '/N'으로 호스트 IP와 함께 사용)\n"
+
+#. label for Live CD installation
+#. txt_live_kde
+msgid "openSUSE Live (KDE)"
+msgstr "오픈수세 라이브 (KDE)"
+
+#. label for Live CD installation
+#. txt_live_gnome
+msgid "openSUSE Live (GNOME)"
+msgstr "오픈수세 라이브 (그놈)"
diff --git a/themes/openSUSE/po/ky.po b/themes/openSUSE/po/ky.po
new file mode 100644
index 0000000..2c0fe74
--- /dev/null
+++ b/themes/openSUSE/po/ky.po
@@ -0,0 +1,441 @@
+# Kirghiz translations for gfxboot
+# Copyright (C) 2004 SUSE LINUX AG
+# Copyright (C) 2004 Vdel CREC
+# Ilyas Bakirov <just_ilyas@yahoo.com>, 2009.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: bootloader\n"
+"POT-Creation-Date: 2008-09-26 18:04+0200\n"
+"PO-Revision-Date: 2009-03-25 17:37+0600\n"
+"Last-Translator: Ilyas Bakirov <just_ilyas@yahoo.com>\n"
+"Language-Team: Kirghiz <just_ilyas@yahoo.com>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. ok button label
+#. txt_ok
+msgid "OK"
+msgstr "OK"
+
+#. cancel button label
+#. txt_cancel
+msgid "Cancel"
+msgstr "Айнуу"
+
+#. reboot button label
+#. txt_reboot
+msgid "Reboot"
+msgstr "Кайра жүктөө"
+
+#. continue button label
+#. txt_continue
+msgid "Continue"
+msgstr "Улантуу"
+
+#. txt_install
+msgid "Installation"
+msgstr "Орнотуу"
+
+#. txt_safe_linux
+msgid "Linux--Safe Settings"
+msgstr "Linux--Safe Settings"
+
+#. txt_boot_harddisk
+msgid "Boot from Hard Disk"
+msgstr "Катуу дисктен жүктөө"
+
+#. txt_rescue
+msgid "Rescue System"
+msgstr "Аварийдик системаны жүктөө"
+
+#. txt_memtest
+msgid "Memory Test"
+msgstr "Эс тести"
+
+#. txt_bootoptions
+msgid "Boot Options"
+msgstr "Жүктөө параметрлери"
+
+#. window title for exit dialog
+#. txt_exit_title (see txt_exit_dialog)
+msgid "Exiting..."
+msgstr "Чыгуу..."
+
+#. txt_exit_dialog
+msgid ""
+"You are leaving the graphical boot menu and\n"
+"starting the text mode interface."
+msgstr ""
+"Графикалык жүктөө менюсу аякталып жатат\n"
+"жана тексттик интерфейс башталып жатат."
+
+#. txt_help
+msgid "Help"
+msgstr "Жардам"
+
+#. window title for kernel loading (see txt_load_kernel)
+#. txt_load_kernel_title
+msgid "Starting..."
+msgstr "Баштоо..."
+
+#. Keep the three newlines!
+#. txt_load_kernel
+msgid ""
+"Loading Linux Kernel\n"
+"\n"
+"\n"
+msgstr ""
+"Linux ядросу жүктөлүп жатат\n"
+"\n"
+"\n"
+
+#. Keep the three newlines!
+#. txt_load_memtest
+msgid ""
+"Loading memtest86\n"
+"\n"
+"\n"
+msgstr ""
+"memtest86 эс тести жүктөлүп жатат\n"
+"\n"
+"\n"
+
+#. info box title
+#. txt_info_title
+msgid "Boot Loader"
+msgstr "Жүктөгүч"
+
+#. error box title
+#. txt_error_title
+msgid "I/O Error"
+msgstr "I/O Катасы"
+
+#. boot disk change dialog title
+#. txt_change_disk_title
+msgid "Change Boot Disk"
+msgstr "Жүктөлүүчү дискти алмаштыруу"
+
+#. txt_insert_disk
+#, c-format
+msgid "Insert boot disk %u."
+msgstr "%u жүктөлүүчү дискти киргизиңиз."
+
+#. txt_insert_disk2
+#, c-format
+msgid ""
+"This is boot disk %u.\n"
+"Insert boot disk %u."
+msgstr ""
+"Бул %u жүктөлүүчү диски.\n"
+"%u жүктөлүүчү дискти киргизиңиз."
+
+#. <product> is e.g. SuSE Linux X.Y or Enterprise Server Z
+#. txt_insert_disk3
+#, c-format
+msgid ""
+"This is not a <product> boot disk.\n"
+"Insert boot disk %u."
+msgstr ""
+"Бул <product> жүктөлүүчү диски эмес.\n"
+"%u жүктөлүүчү дискти киргизиңиз."
+
+#. password dialog title
+#. txt_password_title
+msgid "Password"
+msgstr "Сырсөз"
+
+#. txt_dud_ready
+msgid "Get your driver update floppy ready."
+msgstr "Драйвер жаңылоолор дискетасын даярдап коюңуз."
+
+#. power off dialog title
+#. txt_power_off_title
+msgid "Power Off"
+msgstr "Өчүрүү"
+
+#. txt_power_off
+msgid "Halt the system now?"
+msgstr "Система өчүрүлсүнбү?"
+
+#. menu entry for hard disk installation
+#. txt_harddisk
+msgid "Hard Disk"
+msgstr "Катуу диск"
+
+#. dialog title for hard disk installation
+#. txt_harddisk_title
+msgid "Hard Disk Installation"
+msgstr "Катуу диск орнотулушу"
+
+#. txt_hd_diskdevice
+msgid "Disk Device (Scans All Disks If Empty)\n"
+msgstr "Диск түзүлүшү (көрсөтүлбөгөн болсо бардык дисктер араланат)\n"
+
+#. txt_directory
+msgid "Directory\n"
+msgstr "Каталог\n"
+
+#. dialog title for ftp installation
+#. txt_ftp_title
+msgid "FTP Installation"
+msgstr "FTP орнотулушу"
+
+#. txt_server
+msgid "Server\n"
+msgstr "Сервер\n"
+
+#. txt_password
+msgid "Password\n"
+msgstr "Сырсөз\n"
+
+#. label for ftp user input
+#. txt_user1
+msgid "User (Anonymous Login If Empty)\n"
+msgstr "Колдонуучу (көрсөтүлбөгөн болсо анонимдик кирүү колдонулат)\n"
+
+#. dialog title for nfs installation
+#. txt_nfs_title
+msgid "NFS Installation"
+msgstr "NFS орнотулушу"
+
+#. label for smb user input
+#. txt_user2
+msgid "User (Uses \"guest\" If Empty)\n"
+msgstr "Колдонуучу (көрсөтүлбөгөн болсо \"guest\" колдонулат\n"
+
+#. dialog title for smb installation
+#. txt_smb_title
+msgid "SMB (Windows Share) Installation"
+msgstr "SMB (Windows бөлүшүү) орнотулушу"
+
+#. dialog title for http installation
+#. txt_http_title
+msgid "HTTP Installation"
+msgstr "HTTP орнотулушу"
+
+#. 'driver' as in '(hardware) driver update'
+#. txt_driver_update
+msgid "Driver"
+msgstr "Драйвер"
+
+#. as in Windows Authentication Domain
+#. txt_domain
+msgid "Domain\n"
+msgstr "Домен\n"
+
+#. button label for other/more options
+#. txt_other_options
+msgid "Other Options"
+msgstr "Башка параметрлер"
+
+#. label for language selection
+#. txt_language
+msgid "Language"
+msgstr "Тил"
+
+#. txt_yes
+msgid "Yes"
+msgstr "Ооба"
+
+#. txt_no
+msgid "No"
+msgstr "Жок"
+
+#. menu item for selecting a file
+#. txt_file
+msgid "File"
+msgstr "Файл"
+
+#. input label: share as in "Windows share" (SMB)
+#. txt_share
+msgid "Share\n"
+msgstr "Бөлүшүү\n"
+
+#. txt_zenAuto
+msgid "Automatic Mode"
+msgstr "Автоматтык режим"
+
+#. txt_zenManual
+msgid "Manual Mode"
+msgstr "Жеке кол менен режими"
+
+#. txt_zenConfig
+msgid "Configure Parameters on ZEN Partition"
+msgstr "ZEN бөлүмүндө параметрлерди ырастоо"
+
+#. txt_zenInstall
+msgid "Install or Update ZEN Partition"
+msgstr "ZEN бөлүмүн орнотуу же жаңылоо"
+
+#. txt_zenLilo
+msgid "Reinstall ZEN Partition Boot Loader"
+msgstr "ZEN бөлүмдүн жүктөгүчүн кайра орнотуу"
+
+#. txt_zenDisable
+msgid "Disable ZEN Partition"
+msgstr "ZEN бөлүмүн өчүрүү"
+
+#. txt_zenEnable
+msgid "Enable ZEN Partition"
+msgstr "ZEN бөлүмүн жандыруу"
+
+#. video mode menu item
+#. txt_text_mode
+msgid "Text Mode"
+msgstr "Текст режими"
+
+#. menu item, like 'memory test'
+#. txt_firmware
+msgid "Firmware Test"
+msgstr "Firmware тести"
+
+#. txt_dud_file_msg
+msgid ""
+"To load driver updates directly from CD-ROM,\n"
+"enter the driver update file names (separated\n"
+"by commas ',') here:\n"
+msgstr ""
+"Дисктен драйвер жаңылоолорду жүктөө\n"
+"үчүн драйвер жаңылоолор файл аттарын\n"
+"кириңиз (үтүр менен бөлүнгөн ','):\n"
+
+#. install source menu title
+#. ** please keep it really short (comparable to the english text) **
+#. txt_install_source
+msgid "Source"
+msgstr "Булак"
+
+#. video mode/display size menu title
+#. ** please keep it really short (comparable to the english text) **
+#. txt_video_mode
+msgid "Video Mode"
+msgstr "Видео режими"
+
+#. driver update dialog title
+#. -> txt_dud_file_msg
+#. txt_driver_update2
+msgid "Driver Update"
+msgstr "Драйвер Жаңылоо"
+
+#. menu label for selecting (cpu) architecture
+#. like i386, x86-64, ppc
+#. ** please keep it really short (comparable to the english text) **
+#. txt_arch
+msgid "Arch"
+msgstr "Арх."
+
+#. menu label for selecting some (linux) kernel variant
+#. ** please keep it really short (comparable to the english text) **
+#. txt_kernel
+msgid "Kernel"
+msgstr "Ядро"
+
+#. menu item for kernel variant (cf. txt_kernel)
+#. txt_kernel_default
+msgid "Default"
+msgstr "Алдын ала"
+
+#. menu item for kernel variant (cf. txt_kernel)
+#. -> like in txt_safe_linux
+#. txt_kernel_safe
+msgid "Safe Settings"
+msgstr "Safe Settings"
+
+#. menu item for kernel variant (cf. txt_kernel)
+#. -> similar to txt_noacpi_install
+#. txt_kernel_noacpi
+msgid "No ACPI"
+msgstr "ACPIсиз"
+
+#. menu item for kernel variant (cf. txt_kernel)
+#. -> similar to txt_nolapic_install
+#. txt_kernel_nolapic
+msgid "No Local APIC"
+msgstr "Локалдык APICсиз"
+
+#. main menu: start in system repair mode
+#. txt_repain_system
+msgid "Repair Installed System"
+msgstr "Орнотулган системаны ондоо"
+
+#. menu item
+#. txt_mediacheck
+msgid "Check Installation Media"
+msgstr "Орнотуу булактарын текшерүү"
+
+#. menu item for keyboard layout (please keep it short)
+#. txt_keyboard
+msgid "Keyboard"
+msgstr "Клавиатура"
+
+#. menu title
+#. txt_dud_download
+msgid "Download Driver Update"
+msgstr "Драйвер жаңылоосун жүктөө"
+
+#. input label
+#. txt_dud_enter_url
+msgid "Enter Driver Update URL\n"
+msgstr "Драйвер жаңылоо URL адресин кириңиз\n"
+
+#. menu item
+#. txt_http_proxy
+msgid "HTTP Proxy"
+msgstr ""
+
+#. menu item
+#. txt_network_config
+msgid "Network Config"
+msgstr ""
+
+#. menu item
+#. txt_no_network
+msgid "No Network"
+msgstr ""
+
+#. short menu item for manual network config (NOT some kind of manual)
+#. txt_manual_network
+msgid "Manual"
+msgstr ""
+
+#. dialog title for manual network config
+#. txt_manual_network_title
+msgid "Manual Network Config"
+msgstr ""
+
+#. label for ip address
+#. txt_host_ip
+msgid "Host IP\n"
+msgstr ""
+
+#. label for gateway ip
+#. txt_gateway_ip
+msgid "Gateway\n"
+msgstr ""
+
+#. label for dns domain name (like 'opensuse.org')
+#. txt_domain_name
+msgid "Domain Name\n"
+msgstr ""
+
+#. label for nameserver list
+#. txt_nameservers
+msgid "Nameservers (separated by ',')\n"
+msgstr ""
+
+#. label for netmask; 'Host IP' refers to label txt_host_ip above
+#. txt_netmask
+msgid "Netmask\n(or use '/N' notation with Host IP)\n"
+msgstr ""
+
+#. label for Live CD installation
+#. txt_live_kde
+msgid "openSUSE Live (KDE)"
+msgstr ""
+
+#. label for Live CD installation
+#. txt_live_gnome
+msgid "openSUSE Live (GNOME)"
+msgstr ""
diff --git a/themes/openSUSE/po/lt.po b/themes/openSUSE/po/lt.po
new file mode 100644
index 0000000..5ee852d
--- /dev/null
+++ b/themes/openSUSE/po/lt.po
@@ -0,0 +1,443 @@
+# LITHUANIAN translations for boot loader
+# Copyright (C) 2005 SUSE Linux GmbH
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: bootloader\n"
+"POT-Creation-Date: \n"
+"PO-Revision-Date: 2010-08-26 19:20+0300\n"
+"Last-Translator: Mindaugas Baranauskas <embar@users.berlios.de>\n"
+"Language-Team: Lithuanian <>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Lokalize 1.0\n"
+"Plural-Forms: nplurals=4; plural=(n%10==1 ? 0 : n%10==1 && n%100!=11 ? 1 : n%10>=2 && (n%100<10 || n%100>=20) ? 2 : 3);\n"
+
+#. ok button label
+#. txt_ok
+msgid "OK"
+msgstr "Gerai"
+
+#. cancel button label
+#. txt_cancel
+msgid "Cancel"
+msgstr "Atšaukti"
+
+#. reboot button label
+#. txt_reboot
+msgid "Reboot"
+msgstr "Paleisti iš naujo"
+
+#. continue button label
+#. txt_continue
+msgid "Continue"
+msgstr "Tęsti"
+
+#. txt_install
+msgid "Installation"
+msgstr "Diegimas"
+
+#. txt_safe_linux
+msgid "Linux--Safe Settings"
+msgstr "Linux--saugios nuostatos"
+
+#. txt_boot_harddisk
+msgid "Boot from Hard Disk"
+msgstr "Paleisti iš standžiojo disko"
+
+#. txt_rescue
+msgid "Rescue System"
+msgstr "Avarinė sistema"
+
+#. txt_memtest
+msgid "Memory Test"
+msgstr "Atminties testas"
+
+#. txt_bootoptions
+msgid "Boot Options"
+msgstr "Paleidimo parametrai"
+
+#. window title for exit dialog
+#. txt_exit_title (see txt_exit_dialog)
+msgid "Exiting..."
+msgstr "Išeinama..."
+
+#. txt_exit_dialog
+msgid ""
+"You are leaving the graphical boot menu and\n"
+"starting the text mode interface."
+msgstr ""
+"Paliekate grafinį paleidimo meniu ir\n"
+"paleidžiate tekstinę sąsają."
+
+#. txt_help
+msgid "Help"
+msgstr "Pagalba"
+
+#. window title for kernel loading (see txt_load_kernel)
+#. txt_load_kernel_title
+msgid "Starting..."
+msgstr "Paleidžiama..."
+
+#. Keep the three newlines!
+#. txt_load_kernel
+msgid ""
+"Loading Linux Kernel\n"
+"\n"
+"\n"
+msgstr ""
+"Įkeliamas Linux branduolys\n"
+"\n"
+"\n"
+
+#. Keep the three newlines!
+#. txt_load_memtest
+msgid ""
+"Loading memtest86\n"
+"\n"
+"\n"
+msgstr ""
+"Įkeliamas memtest86\n"
+"\n"
+"\n"
+
+#. info box title
+#. txt_info_title
+msgid "Boot Loader"
+msgstr "Paleidyklė"
+
+#. error box title
+#. txt_error_title
+msgid "I/O Error"
+msgstr "I/O klaida"
+
+#. boot disk change dialog title
+#. txt_change_disk_title
+msgid "Change Boot Disk"
+msgstr "Keisti paleidimo diską"
+
+#. txt_insert_disk
+#, c-format
+msgid "Insert boot disk %u."
+msgstr "Įdėkite paleidimo diską %u."
+
+#. txt_insert_disk2
+#, c-format
+msgid ""
+"This is boot disk %u.\n"
+"Insert boot disk %u."
+msgstr ""
+"Tai paleidimo diskas %u.\n"
+"Įdėkite paleidimo diską %u."
+
+#. <product> is e.g. SuSE Linux X.Y or Enterprise Server Z
+#. txt_insert_disk3
+#, c-format
+msgid ""
+"This is not a <product> boot disk.\n"
+"Insert boot disk %u."
+msgstr ""
+"Tai ne <product> paleidimo diskas.\n"
+"Įdėkite paleidimo diską %u."
+
+#. password dialog title
+#. txt_password_title
+msgid "Password"
+msgstr "Slaptažodis"
+
+#. txt_dud_ready
+msgid "Get your driver update floppy ready."
+msgstr "Paruoškite savo diskelį su tvarkyklės atnaujinimu."
+
+#. power off dialog title
+#. txt_power_off_title
+msgid "Power Off"
+msgstr "Išjungti"
+
+#. txt_power_off
+msgid "Halt the system now?"
+msgstr "Sustabdyti sistemą?"
+
+#. menu entry for hard disk installation
+#. txt_harddisk
+msgid "Hard Disk"
+msgstr "Standusis diskas"
+
+#. dialog title for hard disk installation
+#. txt_harddisk_title
+msgid "Hard Disk Installation"
+msgstr "Diegimas iš standžiojo disko"
+
+#. txt_hd_diskdevice
+msgid "Disk Device (Scans All Disks If Empty)\n"
+msgstr "Diskų įrenginys (jei nėra, skenuos visus diskus)\n"
+
+#. txt_directory
+msgid "Directory\n"
+msgstr "Katalogas\n"
+
+#. dialog title for ftp installation
+#. txt_ftp_title
+msgid "FTP Installation"
+msgstr "FTP diegimas"
+
+#. txt_server
+msgid "Server\n"
+msgstr "Serveris\n"
+
+#. txt_password
+msgid "Password\n"
+msgstr "Slaptažodis\n"
+
+#. label for ftp user input
+#. txt_user1
+msgid "User (Anonymous Login If Empty)\n"
+msgstr "Naudotojas (jungiasi anonimas, jei tuščia)\n"
+
+#. dialog title for nfs installation
+#. txt_nfs_title
+msgid "NFS Installation"
+msgstr "NFS diegimas"
+
+#. label for smb user input
+#. txt_user2
+msgid "User (Uses \"guest\" If Empty)\n"
+msgstr "Naudotojas (naudojama „guest“, jei tuščia)\n"
+
+#. dialog title for smb installation
+#. txt_smb_title
+msgid "SMB (Windows Share) Installation"
+msgstr "Diegimas per SMB (Windows bendrasis išteklius)"
+
+#. dialog title for http installation
+#. txt_http_title
+msgid "HTTP Installation"
+msgstr "HTTP diegimas"
+
+#. 'driver' as in '(hardware) driver update'
+#. txt_driver_update
+msgid "Driver"
+msgstr "Tvarkyklė"
+
+#. as in Windows Authentication Domain
+#. txt_domain
+msgid "Domain\n"
+msgstr "Sritis\n"
+
+#. button label for other/more options
+#. txt_other_options
+msgid "Other Options"
+msgstr "Kiti parametrai"
+
+#. label for language selection
+#. txt_language
+msgid "Language"
+msgstr "Kalba"
+
+#. txt_yes
+msgid "Yes"
+msgstr "Taip"
+
+#. txt_no
+msgid "No"
+msgstr "Ne"
+
+#. menu item for selecting a file
+#. txt_file
+msgid "File"
+msgstr "Rinkmena"
+
+#. input label: share as in "Windows share" (SMB)
+#. txt_share
+msgid "Share\n"
+msgstr "Bendrasis išteklius\n"
+
+#. txt_zenAuto
+msgid "Automatic Mode"
+msgstr "Automatinė veiksena"
+
+#. txt_zenManual
+msgid "Manual Mode"
+msgstr "Rankinė veiksena"
+
+#. txt_zenConfig
+msgid "Configure Parameters on ZEN Partition"
+msgstr "Konfigūruoti ZEN skaidinio parametrus"
+
+#. txt_zenInstall
+msgid "Install or Update ZEN Partition"
+msgstr "Įdiegti arba atnaujinti ZEN skaidinį"
+
+#. txt_zenLilo
+msgid "Reinstall ZEN Partition Boot Loader"
+msgstr "Iš naujo įdiegti ZEN skaidinio paleidyklę"
+
+#. txt_zenDisable
+msgid "Disable ZEN Partition"
+msgstr "Uždrausti ZEN skaidinį"
+
+#. txt_zenEnable
+msgid "Enable ZEN Partition"
+msgstr "Įgalinti ZEN skaidinį"
+
+#. video mode menu item
+#. txt_text_mode
+msgid "Text Mode"
+msgstr "Tekstinė veiksena"
+
+#. menu item, like 'memory test'
+#. txt_firmware
+msgid "Firmware Test"
+msgstr "Programinės aparatinės įrangos patikrinimas"
+
+#. txt_dud_file_msg
+msgid ""
+"To load driver updates directly from CD-ROM,\n"
+"enter the driver update file names (separated\n"
+"by commas ',') here:\n"
+msgstr ""
+"Norėdami įkelti tvarkyklės atnaujinimus tiesiai\n"
+"iš CD-ROM, nurodykite tvarkyklės atnaujinimo\n"
+"rinkmenų pavadinimus (atskirtų kableliais) čia:\n"
+
+#. install source menu title
+#. ** please keep it really short (comparable to the english text) **
+#. txt_install_source
+msgid "Source"
+msgstr "Šaltinis"
+
+#. video mode/display size menu title
+#. ** please keep it really short (comparable to the english text) **
+#. txt_video_mode
+msgid "Video Mode"
+msgstr "Vaizdo veiksena"
+
+#. driver update dialog title
+#. -> txt_dud_file_msg
+#. txt_driver_update2
+msgid "Driver Update"
+msgstr "Tvarkyklės atnaujinimas"
+
+#. menu label for selecting (cpu) architecture
+#. like i386, x86-64, ppc
+#. ** please keep it really short (comparable to the english text) **
+#. txt_arch
+msgid "Arch"
+msgstr "Arch"
+
+#. menu label for selecting some (linux) kernel variant
+#. ** please keep it really short (comparable to the english text) **
+#. txt_kernel
+msgid "Kernel"
+msgstr "Branduolys"
+
+#. menu item for kernel variant (cf. txt_kernel)
+#. txt_kernel_default
+msgid "Default"
+msgstr "Numatytasis"
+
+#. menu item for kernel variant (cf. txt_kernel)
+#. -> like in txt_safe_linux
+#. txt_kernel_safe
+msgid "Safe Settings"
+msgstr "Saugios nuostatos"
+
+#. menu item for kernel variant (cf. txt_kernel)
+#. -> similar to txt_noacpi_install
+#. txt_kernel_noacpi
+msgid "No ACPI"
+msgstr "Be ACPI"
+
+#. menu item for kernel variant (cf. txt_kernel)
+#. -> similar to txt_nolapic_install
+#. txt_kernel_nolapic
+msgid "No Local APIC"
+msgstr "Be vietinio APIC"
+
+#. main menu: start in system repair mode
+#. txt_repain_system
+msgid "Repair Installed System"
+msgstr "Taisyti įdiegtą sistemą"
+
+#. menu item
+#. txt_mediacheck
+msgid "Check Installation Media"
+msgstr "Tikrinti diegimo laikmeną"
+
+#. menu item for keyboard layout (please keep it short)
+#. txt_keyboard
+msgid "Keyboard"
+msgstr "Klaviatūra"
+
+#. menu title
+#. txt_dud_download
+msgid "Download Driver Update"
+msgstr "Atsisiųsti tvarkyklių atnaujinimus"
+
+#. input label
+#. txt_dud_enter_url
+msgid "Enter Driver Update URL\n"
+msgstr "Įveskite adresą tvarkyklės atnaujinimui\n"
+
+#. menu item
+#. txt_http_proxy
+msgid "HTTP Proxy"
+msgstr "HTTP įgaliotasis serveris"
+
+#. menu item
+#. txt_network_config
+msgid "Network Config"
+msgstr "Tinklo konfigūracija"
+
+#. menu item
+#. txt_no_network
+msgid "No Network"
+msgstr "Be tinklo"
+
+#. short menu item for manual network config (NOT some kind of manual)
+#. txt_manual_network
+msgid "Manual"
+msgstr "Rankinė"
+
+#. dialog title for manual network config
+#. txt_manual_network_title
+msgid "Manual Network Config"
+msgstr "Rankinė tinklo konfigūracija"
+
+#. label for ip address
+#. txt_host_ip
+msgid "Host IP\n"
+msgstr "Kompiuterio IP\n"
+
+#. label for gateway ip
+#. txt_gateway_ip
+msgid "Gateway\n"
+msgstr "Tinklų sietuvas\n"
+
+#. label for dns domain name (like 'opensuse.org')
+#. txt_domain_name
+msgid "Domain Name\n"
+msgstr "Srities vardas\n"
+
+#. label for nameserver list
+#. txt_nameservers
+msgid "Nameservers (separated by ',')\n"
+msgstr "Vardų serveriai (atskirti kableliais)\n"
+
+#. label for netmask; 'Host IP' refers to label txt_host_ip above
+#. txt_netmask
+msgid "Netmask\n(or use '/N' notation with Host IP)\n"
+msgstr ""
+"Tinklo kaukė\n"
+"(naudokite „/N“ užrašą su kompiuterio IP)\n"
+
+#. label for Live CD installation
+#. txt_live_kde
+msgid "openSUSE Live (KDE)"
+msgstr "Demonstracinė openSUSE (KDE)"
+
+#. label for Live CD installation
+#. txt_live_gnome
+msgid "openSUSE Live (GNOME)"
+msgstr "Demonstracinė openSUSE (GNOME)"
diff --git a/themes/openSUSE/po/mr.po b/themes/openSUSE/po/mr.po
new file mode 100644
index 0000000..a9ecba9
--- /dev/null
+++ b/themes/openSUSE/po/mr.po
@@ -0,0 +1,442 @@
+# LANGUAGE translations for boot loader
+# Copyright (C) 2005 SUSE Linux GmbH
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Check hardware-2.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2007-01-16 23:21+0100\n"
+"PO-Revision-Date: 2006-11-13 12:55+0530\n"
+"Last-Translator: Priyavert Sharma <priyavert.sharma@agreeya.com>\n"
+"Language-Team: AgreeYa Solutions <linux_team@agreeya.com>\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.10.2\n"
+
+#. ok button label
+#. txt_ok
+msgid "OK"
+msgstr "ठीक आहे"
+
+#. cancel button label
+#. txt_cancel
+msgid "Cancel"
+msgstr "रद्द करा"
+
+#. reboot button label
+#. txt_reboot
+msgid "Reboot"
+msgstr "पुन्हा सुरु करा (रीबूट)"
+
+#. continue button label
+#. txt_continue
+msgid "Continue"
+msgstr "पुढे चालू ठेवा"
+
+#. txt_install
+msgid "Installation"
+msgstr "स्थापना (इन्स्टॉलेशन)"
+
+#. txt_safe_linux
+msgid "Linux--Safe Settings"
+msgstr " लायनक्स--सुरक्षित सेटिंग्ज "
+
+#. txt_boot_harddisk
+msgid "Boot from Hard Disk"
+msgstr "हार्ड डिस्कवरुन सुरु करा"
+
+#. txt_rescue
+msgid "Rescue System"
+msgstr "बचावात्मक प्रणाली"
+
+#. txt_memtest
+msgid "Memory Test"
+msgstr "स्मृती चाचणी"
+
+#. txt_bootoptions
+msgid "Boot Options"
+msgstr "सुरु करण्याचे (बूट) पर्याय"
+
+#. window title for exit dialog
+#. txt_exit_title (see txt_exit_dialog)
+msgid "Exiting..."
+msgstr "बाहेर येत आहे..."
+
+#. txt_exit_dialog
+msgid ""
+"You are leaving the graphical boot menu and\n"
+"starting the text mode interface."
+msgstr ""
+"आपण ग्राफिकल बूट मेन्यूमधून बाहेर येत आहात आणि\n"
+"पाठ्य मोड इंटरफेस सुरु करत आहात."
+
+#. txt_help
+msgid "Help"
+msgstr "मदत"
+
+#. window title for kernel loading (see txt_load_kernel)
+#. txt_load_kernel_title
+msgid "Starting..."
+msgstr "सुरु करत आहे..."
+
+#. Keep the three newlines!
+#. txt_load_kernel
+msgid ""
+"Loading Linux Kernel\n"
+"\n"
+"\n"
+msgstr ""
+"लायनक्स कर्नेल लोड करत आहे.\n"
+"\n"
+"\n"
+
+#. Keep the three newlines!
+#. txt_load_memtest
+msgid ""
+"Loading memtest86\n"
+"\n"
+"\n"
+msgstr ""
+"मेमटेक्स्ट 86 लोड करत आहे\n"
+"\n"
+"\n"
+
+#. info box title
+#. txt_info_title
+msgid "Boot Loader"
+msgstr "बूट लोडर"
+
+#. error box title
+#. txt_error_title
+msgid "I/O Error"
+msgstr "I/O चूक"
+
+#. boot disk change dialog title
+#. txt_change_disk_title
+msgid "Change Boot Disk"
+msgstr "बूट डिस्क बदला"
+
+#. txt_insert_disk
+#, c-format
+msgid "Insert boot disk %u."
+msgstr "%u.बूट डिस्क घाला"
+
+#. txt_insert_disk2
+#, c-format
+msgid ""
+"This is boot disk %u.\n"
+"Insert boot disk %u."
+msgstr ""
+"ही %u.बूट डिस्क आहे\n"
+"बूट डिस्क %u.घाला"
+
+#. <product> is e.g. SuSE Linux X.Y or Enterprise Server Z
+#. txt_insert_disk3
+#, c-format
+msgid ""
+"This is not a <product> boot disk.\n"
+"Insert boot disk %u."
+msgstr ""
+"ही <product> बूट डिस्क नाही.\n"
+"%u.बूट डिस्क घाला"
+
+#. password dialog title
+#. txt_password_title
+msgid "Password"
+msgstr "पासवर्ड"
+
+#. txt_dud_ready
+msgid "Get your driver update floppy ready."
+msgstr "आपला ड्रायव्हर अपडेट करणारी फ्लॉपी तयार ठेवा."
+
+#. power off dialog title
+#. txt_power_off_title
+msgid "Power Off"
+msgstr "वीजपुरवठा बंद"
+
+#. txt_power_off
+msgid "Halt the system now?"
+msgstr "प्रणाली आता थांबवायची?"
+
+#. menu entry for hard disk installation
+#. txt_harddisk
+msgid "Hard Disk"
+msgstr "हार्ड डिस्क"
+
+#. dialog title for hard disk installation
+#. txt_harddisk_title
+msgid "Hard Disk Installation"
+msgstr "हार्ड डिस्कची स्थापना"
+
+#. txt_hd_diskdevice
+msgid "Disk Device (Scans All Disks If Empty)\n"
+msgstr "डिस्क डिव्हाईस (सर्व डिस्क रिकाम्या आहेत किंवा काय ते पहाते)\n"
+
+#. txt_directory
+msgid "Directory\n"
+msgstr "डिरेक्टरी\n"
+
+#. dialog title for ftp installation
+#. txt_ftp_title
+msgid "FTP Installation"
+msgstr "FTP स्थापना"
+
+#. txt_server
+msgid "Server\n"
+msgstr "सर्व्हर\n"
+
+#. txt_password
+msgid "Password\n"
+msgstr "पासवर्ड\n"
+
+#. label for ftp user input
+#. txt_user1
+msgid "User (Anonymous Login If Empty)\n"
+msgstr "उपभोक्ता (रिक्त असल्यास निनावी लॉगईन) \n"
+
+#. dialog title for nfs installation
+#. txt_nfs_title
+msgid "NFS Installation"
+msgstr "NFS स्थापना"
+
+#. label for smb user input
+#. txt_user2
+msgid "User (Uses \"guest\" If Empty)\n"
+msgstr "उपभोक्ता (रिक्त असल्यास \"guest\" वापरते)\n"
+
+#. dialog title for smb installation
+#. txt_smb_title
+msgid "SMB (Windows Share) Installation"
+msgstr "SMB (विंडोज शेयर) स्थापना "
+
+#. dialog title for http installation
+#. txt_http_title
+msgid "HTTP Installation"
+msgstr "HTTP स्थापना"
+
+#. 'driver' as in '(hardware) driver update'
+#. txt_driver_update
+msgid "Driver"
+msgstr "ड्रायव्हर"
+
+#. as in Windows Authentication Domain
+#. txt_domain
+msgid "Domain\n"
+msgstr "डोमेन\n"
+
+#. button label for other/more options
+#. txt_other_options
+msgid "Other Options"
+msgstr "अन्य पर्याय"
+
+#. label for language selection
+#. txt_language
+msgid "Language"
+msgstr "भाषा"
+
+#. txt_yes
+msgid "Yes"
+msgstr "होय"
+
+#. txt_no
+msgid "No"
+msgstr "नाही"
+
+#. menu item for selecting a file
+#. txt_file
+msgid "File"
+msgstr "फाईल"
+
+#. input label: share as in "Windows share" (SMB)
+#. txt_share
+msgid "Share\n"
+msgstr "शेअर\n"
+
+#. txt_zenAuto
+msgid "Automatic Mode"
+msgstr "स्वयंचलित मोड"
+
+#. txt_zenManual
+msgid "Manual Mode"
+msgstr "हाताने चालणारा मोड"
+
+#. txt_zenConfig
+msgid "Configure Parameters on ZEN Partition"
+msgstr "ZEN पार्टिशनवर पॅरामीटर्सचा आकृतीबंध बनवा"
+
+#. txt_zenInstall
+msgid "Install or Update ZEN Partition"
+msgstr " ZEN पार्टिशन स्थापित किंवा अपडेट करा"
+
+#. txt_zenLilo
+msgid "Reinstall ZEN Partition Boot Loader"
+msgstr "ZEN पार्टिशन बूट लोडर पुनरस्थापित करा"
+
+#. txt_zenDisable
+msgid "Disable ZEN Partition"
+msgstr " ZEN पार्टिशन असमर्थ करा"
+
+#. txt_zenEnable
+msgid "Enable ZEN Partition"
+msgstr "ZEN पार्टिशन समर्थ करा"
+
+#. video mode menu item
+#. txt_text_mode
+msgid "Text Mode"
+msgstr "पाठ्य मोड"
+
+#. menu item, like 'memory test'
+#. txt_firmware
+msgid "Firmware Test"
+msgstr " फर्मवेअर चाचणी"
+
+#. txt_dud_file_msg
+msgid ""
+"To load driver updates directly from CD-ROM,\n"
+"enter the driver update file names (separated\n"
+"by commas ',') here:\n"
+msgstr ""
+"CD-ROM वरुन थेट ड्रायव्हर अपडेट्स लोड करण्यासाठी,\n"
+"ड्रायव्हर अपडेट फाईलींची नांवे येथे प्रविष्ट करा \n"
+"(स्वल्पविराम ',' देऊन) वेगवेगळी कराः\n"
+
+#. install source menu title
+#. ** please keep it really short (comparable to the english text) **
+#. txt_install_source
+msgid "Source"
+msgstr "स्रोत"
+
+#. video mode/display size menu title
+#. ** please keep it really short (comparable to the english text) **
+#. txt_video_mode
+msgid "Video Mode"
+msgstr ""
+
+#. driver update dialog title
+#. -> txt_dud_file_msg
+#. txt_driver_update2
+msgid "Driver Update"
+msgstr ""
+
+#. menu label for selecting (cpu) architecture
+#. like i386, x86-64, ppc
+#. ** please keep it really short (comparable to the english text) **
+#. txt_arch
+msgid "Arch"
+msgstr "शिल्प"
+
+#. menu label for selecting some (linux) kernel variant
+#. ** please keep it really short (comparable to the english text) **
+#. txt_kernel
+msgid "Kernel"
+msgstr ""
+
+#. menu item for kernel variant (cf. txt_kernel)
+#. txt_kernel_default
+msgid "Default"
+msgstr ""
+
+#. menu item for kernel variant (cf. txt_kernel)
+#. -> like in txt_safe_linux
+#. txt_kernel_safe
+msgid "Safe Settings"
+msgstr ""
+
+#. menu item for kernel variant (cf. txt_kernel)
+#. -> similar to txt_noacpi_install
+#. txt_kernel_noacpi
+msgid "No ACPI"
+msgstr ""
+
+#. menu item for kernel variant (cf. txt_kernel)
+#. -> similar to txt_nolapic_install
+#. txt_kernel_nolapic
+msgid "No Local APIC"
+msgstr ""
+
+#. main menu: start in system repair mode
+#. txt_repain_system
+msgid "Repair Installed System"
+msgstr ""
+
+#. menu item
+#. txt_mediacheck
+msgid "Check Installation Media"
+msgstr ""
+
+#. menu item for keyboard layout (please keep it short)
+#. txt_keyboard
+msgid "Keyboard"
+msgstr "की बोर्ड"
+
+#. menu title
+#. txt_dud_download
+msgid "Download Driver Update"
+msgstr ""
+
+#. input label
+#. txt_dud_enter_url
+msgid "Enter Driver Update URL\n"
+msgstr ""
+
+#. menu item
+#. txt_http_proxy
+msgid "HTTP Proxy"
+msgstr ""
+
+#. menu item
+#. txt_network_config
+msgid "Network Config"
+msgstr ""
+
+#. menu item
+#. txt_no_network
+msgid "No Network"
+msgstr ""
+
+#. short menu item for manual network config (NOT some kind of manual)
+#. txt_manual_network
+msgid "Manual"
+msgstr ""
+
+#. dialog title for manual network config
+#. txt_manual_network_title
+msgid "Manual Network Config"
+msgstr ""
+
+#. label for ip address
+#. txt_host_ip
+msgid "Host IP\n"
+msgstr ""
+
+#. label for gateway ip
+#. txt_gateway_ip
+msgid "Gateway\n"
+msgstr ""
+
+#. label for dns domain name (like 'opensuse.org')
+#. txt_domain_name
+msgid "Domain Name\n"
+msgstr ""
+
+#. label for nameserver list
+#. txt_nameservers
+msgid "Nameservers (separated by ',')\n"
+msgstr ""
+
+#. label for netmask; 'Host IP' refers to label txt_host_ip above
+#. txt_netmask
+msgid "Netmask\n(or use '/N' notation with Host IP)\n"
+msgstr ""
+
+#. label for Live CD installation
+#. txt_live_kde
+msgid "openSUSE Live (KDE)"
+msgstr ""
+
+#. label for Live CD installation
+#. txt_live_gnome
+msgid "openSUSE Live (GNOME)"
+msgstr ""
diff --git a/themes/openSUSE/po/nb.po b/themes/openSUSE/po/nb.po
new file mode 100644
index 0000000..890a943
--- /dev/null
+++ b/themes/openSUSE/po/nb.po
@@ -0,0 +1,447 @@
+# translation of nb.po to
+# translation of bootloader.nb.po to
+# translation of bootloader.po to
+# LANGUAGE translations for boot loader
+# Copyright (C) 2004 SUSE LINUX AG
+# Olav Pettershagen <olav.pettershagen@trysil.online.no>, 2004, 2005.
+# Olav Pettershagen <olav.pet@online.no>, 2005.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: bootloader\n"
+"PO-Revision-Date: 2009-10-06 21:52+0200\n"
+"Last-Translator: Olav Pettershagen <olav.pet@gmail.com>\n"
+"Language-Team: Norwegian Bokmål <opensuse-translation@opensuse.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Lokalize 1.0\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#. ok button label
+#. txt_ok
+msgid "OK"
+msgstr "OK"
+
+#. cancel button label
+#. txt_cancel
+msgid "Cancel"
+msgstr "Avbryt"
+
+#. reboot button label
+#. txt_reboot
+msgid "Reboot"
+msgstr "Start på nytt"
+
+#. continue button label
+#. txt_continue
+msgid "Continue"
+msgstr "Fortsett"
+
+#. txt_install
+msgid "Installation"
+msgstr "Installasjon"
+
+#. txt_safe_linux
+msgid "Linux--Safe Settings"
+msgstr "Linux--sikker modus"
+
+#. txt_boot_harddisk
+msgid "Boot from Hard Disk"
+msgstr "Start fra harddisk"
+
+#. txt_rescue
+msgid "Rescue System"
+msgstr "Redningssystem"
+
+#. txt_memtest
+msgid "Memory Test"
+msgstr "Minnekontroll"
+
+#. txt_bootoptions
+msgid "Boot Options"
+msgstr "Oppstartsalternativer"
+
+#. window title for exit dialog
+#. txt_exit_title (see txt_exit_dialog)
+msgid "Exiting..."
+msgstr "Avslutter..."
+
+#. txt_exit_dialog
+msgid ""
+"You are leaving the graphical boot menu and\n"
+"starting the text mode interface."
+msgstr ""
+"Du er i ferd med å avslutte den grafiske oppstartsmenyen\n"
+"og gå over til tekstmodus."
+
+#. txt_help
+msgid "Help"
+msgstr "Hjelp"
+
+#. window title for kernel loading (see txt_load_kernel)
+#. txt_load_kernel_title
+msgid "Starting..."
+msgstr "Starter..."
+
+#. Keep the three newlines!
+#. txt_load_kernel
+msgid ""
+"Loading Linux Kernel\n"
+"\n"
+"\n"
+msgstr ""
+"Laster Linux-kjerne\n"
+"\n"
+"\n"
+
+#. Keep the three newlines!
+#. txt_load_memtest
+msgid ""
+"Loading memtest86\n"
+"\n"
+"\n"
+msgstr ""
+"Laster memtest86\n"
+"\n"
+"\n"
+
+#. info box title
+#. txt_info_title
+msgid "Boot Loader"
+msgstr "Oppstartslaster"
+
+#. error box title
+#. txt_error_title
+msgid "I/O Error"
+msgstr "Inn/ut-feil"
+
+#. boot disk change dialog title
+#. txt_change_disk_title
+msgid "Change Boot Disk"
+msgstr "Endre oppstartsdisk"
+
+#. txt_insert_disk
+#, c-format
+msgid "Insert boot disk %u."
+msgstr "Sett inn oppstartsdisken %u."
+
+#. txt_insert_disk2
+#, c-format
+msgid ""
+"This is boot disk %u.\n"
+"Insert boot disk %u."
+msgstr ""
+"Dette er oppstartsdisk %u.\n"
+"Sett inn oppstartsdisk %u."
+
+#. <product> is e.g. SuSE Linux X.Y or Enterprise Server Z
+#. txt_insert_disk3
+#, c-format
+msgid ""
+"This is not a <product> boot disk.\n"
+"Insert boot disk %u."
+msgstr ""
+"Dette er ikke en oppstartsdisk for <product>.\n"
+"Sett inn oppstartsdisk %u."
+
+#. password dialog title
+#. txt_password_title
+msgid "Password"
+msgstr "Passord"
+
+#. txt_dud_ready
+msgid "Get your driver update floppy ready."
+msgstr "Hold disketten med driveroppdateringer klar."
+
+#. power off dialog title
+#. txt_power_off_title
+msgid "Power Off"
+msgstr "Slå av maskinen"
+
+#. txt_power_off
+msgid "Halt the system now?"
+msgstr "Hvil du avslutte nå?"
+
+#. menu entry for hard disk installation
+#. txt_harddisk
+msgid "Hard Disk"
+msgstr "Harddisk"
+
+#. dialog title for hard disk installation
+#. txt_harddisk_title
+msgid "Hard Disk Installation"
+msgstr "Harddiskinstallasjon"
+
+#. txt_hd_diskdevice
+msgid "Disk Device (Scans All Disks If Empty)\n"
+msgstr "Diskenhet (søker på alle disker hvis tomt)\n"
+
+#. txt_directory
+msgid "Directory\n"
+msgstr "Katalog\n"
+
+#. dialog title for ftp installation
+#. txt_ftp_title
+msgid "FTP Installation"
+msgstr "FTP-installasjon"
+
+#. txt_server
+msgid "Server\n"
+msgstr "Server\n"
+
+#. txt_password
+msgid "Password\n"
+msgstr "Passord\n"
+
+#. label for ftp user input
+#. txt_user1
+msgid "User (Anonymous Login If Empty)\n"
+msgstr "Bruker (anonym innlogging hvis tomt)\n"
+
+#. dialog title for nfs installation
+#. txt_nfs_title
+msgid "NFS Installation"
+msgstr "NFS-installasjon"
+
+#. label for smb user input
+#. txt_user2
+msgid "User (Uses \"guest\" If Empty)\n"
+msgstr "Bruker (bruker \"guest\" hvis tomt)\n"
+
+#. dialog title for smb installation
+#. txt_smb_title
+msgid "SMB (Windows Share) Installation"
+msgstr "SMB-installasjon (delt Windows-ressurs)"
+
+#. dialog title for http installation
+#. txt_http_title
+msgid "HTTP Installation"
+msgstr "HTTP-installasjon"
+
+#. 'driver' as in '(hardware) driver update'
+#. txt_driver_update
+msgid "Driver"
+msgstr "Driver"
+
+#. as in Windows Authentication Domain
+#. txt_domain
+msgid "Domain\n"
+msgstr "Domene\n"
+
+#. button label for other/more options
+#. txt_other_options
+msgid "Other Options"
+msgstr "Andre valg"
+
+#. label for language selection
+#. txt_language
+msgid "Language"
+msgstr "Språk"
+
+#. txt_yes
+msgid "Yes"
+msgstr "Ja"
+
+#. txt_no
+msgid "No"
+msgstr "Nei"
+
+#. menu item for selecting a file
+#. txt_file
+msgid "File"
+msgstr "Fil"
+
+#. input label: share as in "Windows share" (SMB)
+#. txt_share
+msgid "Share\n"
+msgstr "Delt ressurs\n"
+
+#. txt_zenAuto
+msgid "Automatic Mode"
+msgstr "Automatisk modus"
+
+#. txt_zenManual
+msgid "Manual Mode"
+msgstr "Manuell modus"
+
+#. txt_zenConfig
+msgid "Configure Parameters on ZEN Partition"
+msgstr "Konfigurer parametere for ZEN-partisjon"
+
+#. txt_zenInstall
+msgid "Install or Update ZEN Partition"
+msgstr "Installerer eller oppdater ZEN-partisjon"
+
+#. txt_zenLilo
+msgid "Reinstall ZEN Partition Boot Loader"
+msgstr "Installer oppstartslaster for ZEN-partisjon på nytt"
+
+#. txt_zenDisable
+msgid "Disable ZEN Partition"
+msgstr "Deaktiver ZEN-partisjon"
+
+#. txt_zenEnable
+msgid "Enable ZEN Partition"
+msgstr "Aktiver ZEN-partisjon"
+
+#. video mode menu item
+#. txt_text_mode
+msgid "Text Mode"
+msgstr "Tekstmodus"
+
+#. menu item, like 'memory test'
+#. txt_firmware
+msgid "Firmware Test"
+msgstr "Fastvarekontroll"
+
+#. txt_dud_file_msg
+msgid ""
+"To load driver updates directly from CD-ROM,\n"
+"enter the driver update file names (separated\n"
+"by commas ',') here:\n"
+msgstr ""
+"For å laste driveroppdateringer direkte fra CD-ROM,\n"
+"angi driveroppdateringsfilenes navn (adskilt\n"
+"av komma ',') her:\n"
+
+#. install source menu title
+#. ** please keep it really short (comparable to the english text) **
+#. txt_install_source
+msgid "Source"
+msgstr "Kilde"
+
+#. video mode/display size menu title
+#. ** please keep it really short (comparable to the english text) **
+#. txt_video_mode
+msgid "Video Mode"
+msgstr "Grafisk modus"
+
+#. driver update dialog title
+#. -> txt_dud_file_msg
+#. txt_driver_update2
+msgid "Driver Update"
+msgstr "Driveroppdatering"
+
+#. menu label for selecting (cpu) architecture
+#. like i386, x86-64, ppc
+#. ** please keep it really short (comparable to the english text) **
+#. txt_arch
+msgid "Arch"
+msgstr "Ark."
+
+#. menu label for selecting some (linux) kernel variant
+#. ** please keep it really short (comparable to the english text) **
+#. txt_kernel
+msgid "Kernel"
+msgstr "Kjerne"
+
+#. menu item for kernel variant (cf. txt_kernel)
+#. txt_kernel_default
+msgid "Default"
+msgstr "Standard"
+
+#. menu item for kernel variant (cf. txt_kernel)
+#. -> like in txt_safe_linux
+#. txt_kernel_safe
+msgid "Safe Settings"
+msgstr "Sikker modus"
+
+#. menu item for kernel variant (cf. txt_kernel)
+#. -> similar to txt_noacpi_install
+#. txt_kernel_noacpi
+msgid "No ACPI"
+msgstr "Ikke bruk ACPI"
+
+#. menu item for kernel variant (cf. txt_kernel)
+#. -> similar to txt_nolapic_install
+#. txt_kernel_nolapic
+msgid "No Local APIC"
+msgstr "Ikke bruk lokal APIC"
+
+#. main menu: start in system repair mode
+#. txt_repain_system
+msgid "Repair Installed System"
+msgstr "Reparer installert system"
+
+#. menu item
+#. txt_mediacheck
+msgid "Check Installation Media"
+msgstr "Kontroller installasjonsmedier"
+
+#. menu item for keyboard layout (please keep it short)
+#. txt_keyboard
+msgid "Keyboard"
+msgstr "Tastatur"
+
+#. menu title
+#. txt_dud_download
+msgid "Download Driver Update"
+msgstr "Last ned driveroppgradering"
+
+#. input label
+#. txt_dud_enter_url
+msgid "Enter Driver Update URL\n"
+msgstr "Angi nettadresse for driveroppgradering\n"
+
+#. menu item
+#. txt_http_proxy
+msgid "HTTP Proxy"
+msgstr "HTTP-mellomserver"
+
+#. menu item
+#. txt_network_config
+msgid "Network Config"
+msgstr "Nettverksoppsett"
+
+#. menu item
+#. txt_no_network
+msgid "No Network"
+msgstr "Ingen nettverk"
+
+#. short menu item for manual network config (NOT some kind of manual)
+#. txt_manual_network
+msgid "Manual"
+msgstr "Manuell"
+
+#. dialog title for manual network config
+#. txt_manual_network_title
+msgid "Manual Network Config"
+msgstr "Manuelt nettverksoppsett"
+
+#. label for ip address
+#. txt_host_ip
+msgid "Host IP\n"
+msgstr "Verts-IP\n"
+
+#. label for gateway ip
+#. txt_gateway_ip
+msgid "Gateway\n"
+msgstr "Systemport\n"
+
+#. label for dns domain name (like 'opensuse.org')
+#. txt_domain_name
+msgid "Domain Name\n"
+msgstr "Domenenavn\n"
+
+#. label for nameserver list
+#. txt_nameservers
+msgid "Nameservers (separated by ',')\n"
+msgstr "Navneservere (adskilt av ',')\n"
+
+#. label for netmask; 'Host IP' refers to label txt_host_ip above
+#. txt_netmask
+msgid "Netmask\n(or use '/N' notation with Host IP)\n"
+msgstr ""
+"Nettverksmaske\n"
+"(eller bruk '/N'-notasjon med verts-IP)\n"
+
+#. label for Live CD installation
+#. txt_live_kde
+msgid "openSUSE Live (KDE)"
+msgstr "openSUSE Live (KDE)"
+
+#. label for Live CD installation
+#. txt_live_gnome
+msgid "openSUSE Live (GNOME)"
+msgstr "openSUSE Live (GNOME)"
diff --git a/themes/openSUSE/po/nl.po b/themes/openSUSE/po/nl.po
new file mode 100644
index 0000000..268d709
--- /dev/null
+++ b/themes/openSUSE/po/nl.po
@@ -0,0 +1,447 @@
+# translation of bootloader.po to Nederlands
+# translation of bootloader.po to Dutch
+# translation of nl.po to Dutch
+# LANGUAGE translations for boot loader
+# Copyright (C) 2004 SUSE LINUX AG
+# Proefgelezen op 10-08-2005 door Henk Krus
+# Arthur & Ettie Kerkmeester <a.s.kerkmeester@hccnet.nl>, 2004, 2005.
+# Rinse de Vries <rinsedevries@kde.nl>, 2005.
+msgid ""
+msgstr ""
+"Project-Id-Version: bootloader.nl\n"
+"PO-Revision-Date: 2009-10-05 19:42+0200\n"
+"Last-Translator: Freek de Kruijf <freek@opensuse.org>\n"
+"Language-Team: Dutch <yast-nl-l10n@lists.sf.kovoks.nl>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.11.4\n"
+"Plural-Forms: nplurals=2; plural= n != 1;\n"
+
+#. ok button label
+#. txt_ok
+msgid "OK"
+msgstr "OK"
+
+#. cancel button label
+#. txt_cancel
+msgid "Cancel"
+msgstr "Annuleren"
+
+#. reboot button label
+#. txt_reboot
+msgid "Reboot"
+msgstr "Herstarten"
+
+#. continue button label
+#. txt_continue
+msgid "Continue"
+msgstr "Doorgaan"
+
+#. txt_install
+msgid "Installation"
+msgstr "Installatie"
+
+#. txt_safe_linux
+msgid "Linux--Safe Settings"
+msgstr "Linux - Veilige instellingen"
+
+#. txt_boot_harddisk
+msgid "Boot from Hard Disk"
+msgstr "Van harde schijf opstarten"
+
+#. txt_rescue
+msgid "Rescue System"
+msgstr "Reddingssysteem"
+
+#. txt_memtest
+msgid "Memory Test"
+msgstr "Geheugentest"
+
+#. txt_bootoptions
+msgid "Boot Options"
+msgstr "Opstartopties"
+
+#. window title for exit dialog
+#. txt_exit_title (see txt_exit_dialog)
+msgid "Exiting..."
+msgstr "Beëindigen..."
+
+#. txt_exit_dialog
+msgid ""
+"You are leaving the graphical boot menu and\n"
+"starting the text mode interface."
+msgstr ""
+"U gaat het grafische opstartmenu verlaten en\n"
+"de interface wordt nu opgestart in tekstmodus."
+
+#. txt_help
+msgid "Help"
+msgstr "Help"
+
+#. window title for kernel loading (see txt_load_kernel)
+#. txt_load_kernel_title
+msgid "Starting..."
+msgstr "Starten..."
+
+#. Keep the three newlines!
+#. txt_load_kernel
+msgid ""
+"Loading Linux Kernel\n"
+"\n"
+"\n"
+msgstr ""
+"Linux-kernel wordt geladen\n"
+"\n"
+"\n"
+
+#. Keep the three newlines!
+#. txt_load_memtest
+msgid ""
+"Loading memtest86\n"
+"\n"
+"\n"
+msgstr ""
+"Memtest86 wordt geladen\n"
+"\n"
+"\n"
+
+#. info box title
+#. txt_info_title
+msgid "Boot Loader"
+msgstr "Bootloader"
+
+#. error box title
+#. txt_error_title
+msgid "I/O Error"
+msgstr "I/O-fout"
+
+#. boot disk change dialog title
+#. txt_change_disk_title
+msgid "Change Boot Disk"
+msgstr "Opstartdiskette wijzigen"
+
+#. txt_insert_disk
+#, c-format
+msgid "Insert boot disk %u."
+msgstr "Plaats opstartdiskette %u."
+
+#. txt_insert_disk2
+#, c-format
+msgid ""
+"This is boot disk %u.\n"
+"Insert boot disk %u."
+msgstr ""
+"Dit is opstartdiskette %u.\n"
+"Plaats a.u.b. opstartdiskette %u."
+
+#. <product> is e.g. SuSE Linux X.Y or Enterprise Server Z
+#. txt_insert_disk3
+#, c-format
+msgid ""
+"This is not a <product> boot disk.\n"
+"Insert boot disk %u."
+msgstr ""
+"Dit is geen opstartdiskette van <product>.\n"
+"Plaats a.u.b. opstartdiskette %u."
+
+#. password dialog title
+#. txt_password_title
+msgid "Password"
+msgstr "Wachtwoord"
+
+#. txt_dud_ready
+msgid "Get your driver update floppy ready."
+msgstr "Houdt uw diskette met de stuurprogramma-opwaardering gereed."
+
+#. power off dialog title
+#. txt_power_off_title
+msgid "Power Off"
+msgstr "Computer uitgeschakeld"
+
+#. txt_power_off
+msgid "Halt the system now?"
+msgstr "Wilt u nu het systeem stoppen?"
+
+#. menu entry for hard disk installation
+#. txt_harddisk
+msgid "Hard Disk"
+msgstr "Harde schijf "
+
+#. dialog title for hard disk installation
+#. txt_harddisk_title
+msgid "Hard Disk Installation"
+msgstr "Installatie van harde schijf"
+
+#. txt_hd_diskdevice
+msgid "Disk Device (Scans All Disks If Empty)\n"
+msgstr "Schijfapparaat (indien leeg: alle schijven doorzoeken)\n"
+
+#. txt_directory
+msgid "Directory\n"
+msgstr "Map\n"
+
+#. dialog title for ftp installation
+#. txt_ftp_title
+msgid "FTP Installation"
+msgstr "FTP-installatie"
+
+#. txt_server
+msgid "Server\n"
+msgstr "Server\n"
+
+#. txt_password
+msgid "Password\n"
+msgstr "Wachtwoord\n"
+
+#. label for ftp user input
+#. txt_user1
+msgid "User (Anonymous Login If Empty)\n"
+msgstr "Gebruiker (indien leeg: anonieme aanmelding)\n"
+
+#. dialog title for nfs installation
+#. txt_nfs_title
+msgid "NFS Installation"
+msgstr "NFS-installatie"
+
+#. label for smb user input
+#. txt_user2
+msgid "User (Uses \"guest\" If Empty)\n"
+msgstr "Gebruiker (indien leeg: \"guest\" gebruiken)\n"
+
+#. dialog title for smb installation
+#. txt_smb_title
+msgid "SMB (Windows Share) Installation"
+msgstr "SMB-installatie (Windows-netwerk)"
+
+#. dialog title for http installation
+#. txt_http_title
+msgid "HTTP Installation"
+msgstr "HTTP-installatie"
+
+#. 'driver' as in '(hardware) driver update'
+#. txt_driver_update
+msgid "Driver"
+msgstr "Stuurprogramma"
+
+#. as in Windows Authentication Domain
+#. txt_domain
+msgid "Domain\n"
+msgstr "Domein\n"
+
+#. button label for other/more options
+#. txt_other_options
+msgid "Other Options"
+msgstr "Andere opties"
+
+#. label for language selection
+#. txt_language
+msgid "Language"
+msgstr "Taal"
+
+#. txt_yes
+msgid "Yes"
+msgstr "Ja"
+
+#. txt_no
+msgid "No"
+msgstr "Nee"
+
+#. menu item for selecting a file
+#. txt_file
+msgid "File"
+msgstr "Bestand"
+
+#. input label: share as in "Windows share" (SMB)
+#. txt_share
+msgid "Share\n"
+msgstr "Bron\n"
+
+#. txt_zenAuto
+msgid "Automatic Mode"
+msgstr "Automatisch"
+
+#. txt_zenManual
+msgid "Manual Mode"
+msgstr "Handmatig"
+
+#. txt_zenConfig
+msgid "Configure Parameters on ZEN Partition"
+msgstr "Parameters op ZEN-partitie instellen"
+
+#. txt_zenInstall
+msgid "Install or Update ZEN Partition"
+msgstr "ZEN-partitie installeren/opwaarderen"
+
+#. txt_zenLilo
+msgid "Reinstall ZEN Partition Boot Loader"
+msgstr "Bootloader voor ZEN-partitie herinstalleren"
+
+#. txt_zenDisable
+msgid "Disable ZEN Partition"
+msgstr "ZEN-partitie uitschakelen"
+
+#. txt_zenEnable
+msgid "Enable ZEN Partition"
+msgstr "ZEN-partitie inschakelen"
+
+#. video mode menu item
+#. txt_text_mode
+msgid "Text Mode"
+msgstr "Tekstmodus"
+
+#. menu item, like 'memory test'
+#. txt_firmware
+msgid "Firmware Test"
+msgstr "Firmware-test"
+
+#. txt_dud_file_msg
+msgid ""
+"To load driver updates directly from CD-ROM,\n"
+"enter the driver update file names (separated\n"
+"by commas ',') here:\n"
+msgstr ""
+"Om stuurprogramma-opwaarderingen direct van cd-rom te laden,\n"
+"voer hier de bestandsnamen in van de stuurprogramma-opwaarderings\n"
+"(gescheiden door comma's):\n"
+
+#. install source menu title
+#. ** please keep it really short (comparable to the english text) **
+#. txt_install_source
+msgid "Source"
+msgstr "Bron"
+
+#. video mode/display size menu title
+#. ** please keep it really short (comparable to the english text) **
+#. txt_video_mode
+msgid "Video Mode"
+msgstr "Videomodus"
+
+#. driver update dialog title
+#. -> txt_dud_file_msg
+#. txt_driver_update2
+msgid "Driver Update"
+msgstr "Stuurprogramma-opwaardering"
+
+#. menu label for selecting (cpu) architecture
+#. like i386, x86-64, ppc
+#. ** please keep it really short (comparable to the english text) **
+#. txt_arch
+msgid "Arch"
+msgstr "Arch"
+
+#. menu label for selecting some (linux) kernel variant
+#. ** please keep it really short (comparable to the english text) **
+#. txt_kernel
+msgid "Kernel"
+msgstr "Kernel"
+
+#. menu item for kernel variant (cf. txt_kernel)
+#. txt_kernel_default
+msgid "Default"
+msgstr "Standaard"
+
+#. menu item for kernel variant (cf. txt_kernel)
+#. -> like in txt_safe_linux
+#. txt_kernel_safe
+msgid "Safe Settings"
+msgstr "Veilige instellingen"
+
+#. menu item for kernel variant (cf. txt_kernel)
+#. -> similar to txt_noacpi_install
+#. txt_kernel_noacpi
+msgid "No ACPI"
+msgstr "Geen ACPI"
+
+#. menu item for kernel variant (cf. txt_kernel)
+#. -> similar to txt_nolapic_install
+#. txt_kernel_nolapic
+msgid "No Local APIC"
+msgstr "Geen lokale APIC"
+
+#. main menu: start in system repair mode
+#. txt_repain_system
+msgid "Repair Installed System"
+msgstr "Geïnstalleerd systeem repareren"
+
+#. menu item
+#. txt_mediacheck
+msgid "Check Installation Media"
+msgstr "Controleer installatiemedia"
+
+#. menu item for keyboard layout (please keep it short)
+#. txt_keyboard
+msgid "Keyboard"
+msgstr "Toetsenbord"
+
+#. menu title
+#. txt_dud_download
+msgid "Download Driver Update"
+msgstr "Stuurprogramma-opwaardering laden"
+
+#. input label
+#. txt_dud_enter_url
+msgid "Enter Driver Update URL\n"
+msgstr "Voer de URL van de stuurprogramma-opwaardering in\n"
+
+#. menu item
+#. txt_http_proxy
+msgid "HTTP Proxy"
+msgstr "HTTP-proxy"
+
+#. menu item
+#. txt_network_config
+msgid "Network Config"
+msgstr "Netwerkconfiguratie"
+
+#. menu item
+#. txt_no_network
+msgid "No Network"
+msgstr "Geen netwerk"
+
+#. short menu item for manual network config (NOT some kind of manual)
+#. txt_manual_network
+msgid "Manual"
+msgstr "Handmatig"
+
+#. dialog title for manual network config
+#. txt_manual_network_title
+msgid "Manual Network Config"
+msgstr "Handmatige netwerkconfiguratie"
+
+#. label for ip address
+#. txt_host_ip
+msgid "Host IP\n"
+msgstr "Host-IP\n"
+
+#. label for gateway ip
+#. txt_gateway_ip
+msgid "Gateway\n"
+msgstr "Gateway\n"
+
+#. label for dns domain name (like 'opensuse.org')
+#. txt_domain_name
+msgid "Domain Name\n"
+msgstr "Domeinnaam\n"
+
+#. label for nameserver list
+#. txt_nameservers
+msgid "Nameservers (separated by ',')\n"
+msgstr "Nameservers (gescheiden door ',')\n"
+
+#. label for netmask; 'Host IP' refers to label txt_host_ip above
+#. txt_netmask
+msgid "Netmask\n(or use '/N' notation with Host IP)\n"
+msgstr ""
+"Netmasker\n"
+"(of gebruik '/N' notatie met Host-IP)\n"
+
+#. label for Live CD installation
+#. txt_live_kde
+msgid "openSUSE Live (KDE)"
+msgstr "openSUSE Live (KDE)"
+
+#. label for Live CD installation
+#. txt_live_gnome
+msgid "openSUSE Live (GNOME)"
+msgstr "openSUSE Live (GNOME)"
diff --git a/themes/openSUSE/po/pa.po b/themes/openSUSE/po/pa.po
new file mode 100644
index 0000000..2939deb
--- /dev/null
+++ b/themes/openSUSE/po/pa.po
@@ -0,0 +1,452 @@
+# translation of bootloader.pa.po to Panjabi
+# translation of bootloader.po to Panjabi
+# LANGUAGE translations for boot loader
+# Copyright (C) 2005 SUSE Linux GmbH
+# Amanpreet Singh Alam[ਆਲਮ] <amanpreetalam@yahoo.com>, 2005.
+# Amanpreet Singh Alam[ਆਲਮ] <amanpreetalam@yahoo.com>, 2005.
+# Amanpreet Singh Alam[ਆਲਮ] <amanpreetalam@yahoo.com>, 2005.
+# Amanpreet Singh Alam[ਆਲਮ] <amanpreetalam@yahoo.com>, 2005.
+# Amanpreet Singh Alam[ਆਲਮ] <amanpreetalam@yahoo.com>, 2005.
+# Amanpreet Singh Alam[ਆਲਮ] <amanpreetalam@yahoo.com>, 2005.
+# Amanpreet Singh Alam[ਆਲਮ] <amanpreetalam@yahoo.com>, 2005.
+# Amanpreet Singh Alam[ਆਲਮ] <amanpreetalam@yahoo.com>, 2005.
+# Amanpreet Singh Alam[ਆਲਮ] <amanpreetalam@yahoo.com>, 2005.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: bootloader.pa\n"
+"POT-Creation-Date: \n"
+"PO-Revision-Date: 2008-11-23 07:47+0530\n"
+"Last-Translator: KDB <brar.kd@gmail.com>\n"
+"Language-Team: Panjabi <punjabi-l10n@list.sf.net>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.11.4\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+
+#. ok button label
+#. txt_ok
+msgid "OK"
+msgstr "ਠੀਕ ਹੈ"
+
+#. cancel button label
+#. txt_cancel
+msgid "Cancel"
+msgstr "ਰੱਦ ਕਰੋ"
+
+#. reboot button label
+#. txt_reboot
+msgid "Reboot"
+msgstr "ਮੁੜ-ਚਾਲੂ"
+
+#. continue button label
+#. txt_continue
+msgid "Continue"
+msgstr "ਜਾਰੀ ਰੱਖੋ"
+
+#. txt_install
+msgid "Installation"
+msgstr "ਇੰਸਟਾਲੇਸ਼ਨ"
+
+#. txt_safe_linux
+msgid "Linux--Safe Settings"
+msgstr "ਲੀਨਕਸ--ਸੁਰੱਖਿਅਤ ਸੈਟਿੰਗ"
+
+#. txt_boot_harddisk
+msgid "Boot from Hard Disk"
+msgstr "ਹਾਰਡ ਡਿਸਕ ਤੋਂ ਬੂਟ"
+
+#. txt_rescue
+msgid "Rescue System"
+msgstr "ਸੰਕਟਕਾਲੀਨ ਸਿਸਟਮ"
+
+#. txt_memtest
+msgid "Memory Test"
+msgstr "ਮੈਮੋਰੀ ਟੈਸਟ"
+
+#. txt_bootoptions
+msgid "Boot Options"
+msgstr "ਬੂਟ ਚੋਣਾਂ"
+
+#. window title for exit dialog
+#. txt_exit_title (see txt_exit_dialog)
+msgid "Exiting..."
+msgstr "ਬੰਦ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ..."
+
+#. txt_exit_dialog
+msgid ""
+"You are leaving the graphical boot menu and\n"
+"starting the text mode interface."
+msgstr ""
+"ਤੁਸੀਂ ਗਰਾਫਿਕਲ ਬੂਟ ਮੇਨੂ ਛੱਡ ਕੇ ਟੈਕਸਟ ਢੰਗ ਨਾਲ ਇੰਟਰਫੇਸ ਸ਼ੁਰੂ\n"
+"ਕਰ ਰਹੇ ਹੋ।"
+
+#. txt_help
+msgid "Help"
+msgstr "ਮੱਦਦ"
+
+#. window title for kernel loading (see txt_load_kernel)
+#. txt_load_kernel_title
+msgid "Starting..."
+msgstr "ਸ਼ੁਰੂ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ..."
+
+#. Keep the three newlines!
+#. txt_load_kernel
+msgid ""
+"Loading Linux Kernel\n"
+"\n"
+"\n"
+msgstr ""
+"ਲੀਨਕਸ ਕਰਨਲ ਲੋਡ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ\n"
+"\n"
+"\n"
+
+#. Keep the three newlines!
+#. txt_load_memtest
+msgid ""
+"Loading memtest86\n"
+"\n"
+"\n"
+msgstr ""
+"memtest86 ਲੋਡ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ\n"
+"\n"
+"\n"
+
+#. info box title
+#. txt_info_title
+msgid "Boot Loader"
+msgstr "ਬੂਟ ਲੋਡਰ"
+
+#. error box title
+#. txt_error_title
+msgid "I/O Error"
+msgstr "I/O ਗਲਤੀ"
+
+#. boot disk change dialog title
+#. txt_change_disk_title
+msgid "Change Boot Disk"
+msgstr "ਬੂਟ ਡਿਸਕ ਬਦਲੋ"
+
+#. txt_insert_disk
+#, c-format
+msgid "Insert boot disk %u."
+msgstr "ਬੂਟ ਡਿਸਕ %u ਪਾਓ"
+
+#. txt_insert_disk2
+#, c-format
+msgid ""
+"This is boot disk %u.\n"
+"Insert boot disk %u."
+msgstr ""
+"ਇਹ ਬੂਟ ਡਿਸਕ %u ਹੈ।\n"
+"ਬੂਟ ਡਿਸਕ %u ਪਾਓ।"
+
+#. <product> is e.g. SuSE Linux X.Y or Enterprise Server Z
+#. txt_insert_disk3
+#, c-format
+msgid ""
+"This is not a <product> boot disk.\n"
+"Insert boot disk %u."
+msgstr ""
+"ਇਹ <product> ਬੂਟ ਡਿਸਕ ਨਹੀਂ ਹੈ।\n"
+"ਬੂਟ ਡਿਸਕ %u ਪਾਓ ਜੀ।"
+
+#. password dialog title
+#. txt_password_title
+msgid "Password"
+msgstr "ਪਾਸਵਰਡ"
+
+#. txt_dud_ready
+msgid "Get your driver update floppy ready."
+msgstr "ਆਪਣੀ ਡਰਾਇਵਰ ਅੱਪਡੇਟ ਫਲਾਪੀ ਤਿਆਰ ਰੱਖੋ।"
+
+#. power off dialog title
+#. txt_power_off_title
+msgid "Power Off"
+msgstr "ਬੰਦ ਕਰੋ"
+
+#. txt_power_off
+msgid "Halt the system now?"
+msgstr "ਕੀ ਹੁਣੇ ਸਿਸਟਮ ਬੰਦ ਕਰਨਾ ਹੈ?"
+
+#. menu entry for hard disk installation
+#. txt_harddisk
+msgid "Hard Disk"
+msgstr "ਹਾਰਡ ਡਿਸਕ"
+
+#. dialog title for hard disk installation
+#. txt_harddisk_title
+msgid "Hard Disk Installation"
+msgstr "ਹਾਰਡ ਡਿਸਕ ਇੰਸਟਾਲੇਸ਼ਨ"
+
+#. txt_hd_diskdevice
+msgid "Disk Device (Scans All Disks If Empty)\n"
+msgstr "ਡਿਸਕ ਜੰਤਰ (ਜੇਕਰ ਖਾਲੀ ਹੈ ਤਾਂ ਸਭ ਡਿਸਕਾਂ ਦੀ ਜਾਂਚ)\n"
+
+#. txt_directory
+msgid "Directory\n"
+msgstr "ਡਾਇਰੈਕਟਰੀ\n"
+
+#. dialog title for ftp installation
+#. txt_ftp_title
+msgid "FTP Installation"
+msgstr "FTP ਇੰਸਟਾਲੇਸ਼ਨ"
+
+#. txt_server
+msgid "Server\n"
+msgstr "ਸਰਵਰ\n"
+
+#. txt_password
+msgid "Password\n"
+msgstr "ਪਾਸਵਰਡ\n"
+
+#. label for ftp user input
+#. txt_user1
+msgid "User (Anonymous Login If Empty)\n"
+msgstr "ਯੂਜ਼ਰ (ਅਗਿਆਤ ਲਾਗਇਨ, ਜੇਕਰ ਖਾਲੀ ਹੈ ਤਾਂ)\n"
+
+#. dialog title for nfs installation
+#. txt_nfs_title
+msgid "NFS Installation"
+msgstr "NFS ਇੰਸਟਾਲੇਸ਼ਨ"
+
+#. label for smb user input
+#. txt_user2
+msgid "User (Uses \"guest\" If Empty)\n"
+msgstr "ਯੂਜ਼ਰ (ਜੇਕਰ ਖਾਲੀ ਹੋਇਆ ਤਾਂ \"guest\" ਵਰਤੇਗਾ)\n"
+
+#. dialog title for smb installation
+#. txt_smb_title
+msgid "SMB (Windows Share) Installation"
+msgstr "SMB (Windows ਸਾਂਝ) ਇੰਸਟਾਲੇਸ਼ਨ"
+
+#. dialog title for http installation
+#. txt_http_title
+msgid "HTTP Installation"
+msgstr "HTTP ਇੰਸਟਾਲੇਸ਼ਨ"
+
+#. 'driver' as in '(hardware) driver update'
+#. txt_driver_update
+msgid "Driver"
+msgstr "ਡਰਾਇਵਰ"
+
+#. as in Windows Authentication Domain
+#. txt_domain
+msgid "Domain\n"
+msgstr "ਡੋਮੇਨ\n"
+
+#. button label for other/more options
+#. txt_other_options
+msgid "Other Options"
+msgstr "ਹੋਰ ਚੋਣਾਂ"
+
+#. label for language selection
+#. txt_language
+msgid "Language"
+msgstr "ਭਾਸ਼ਾ"
+
+#. txt_yes
+msgid "Yes"
+msgstr "ਹਾਂ"
+
+#. txt_no
+msgid "No"
+msgstr "ਨਹੀਂ"
+
+#. menu item for selecting a file
+#. txt_file
+msgid "File"
+msgstr "ਫਾਇਲ"
+
+#. input label: share as in "Windows share" (SMB)
+#. txt_share
+msgid "Share\n"
+msgstr "ਸਾਂਝ\n"
+
+#. txt_zenAuto
+msgid "Automatic Mode"
+msgstr "ਆਟੋਮੈਟਿਕ ਮੋਡ"
+
+#. txt_zenManual
+msgid "Manual Mode"
+msgstr "ਦਸਤੀ ਮੋਡ"
+
+#. txt_zenConfig
+msgid "Configure Parameters on ZEN Partition"
+msgstr "ZEN ਪਾਰਟੀਸ਼ਨ ਉੱਤੇ ਪੈਰਾਮੀਟਰ ਸੰਰਚਨਾ"
+
+#. txt_zenInstall
+msgid "Install or Update ZEN Partition"
+msgstr "ZEN ਪਾਰਟੀਸ਼ਨ ਇੰਸਟਾਲ ਜਾਂ ਅੱਪਡੇਟ"
+
+#. txt_zenLilo
+msgid "Reinstall ZEN Partition Boot Loader"
+msgstr "ZEN ਪਾਰਟੀਸ਼ਨ ਬੂਟ ਲੋਡਰ ਮੁੜ-ਇੰਸਟਾਲ"
+
+#. txt_zenDisable
+msgid "Disable ZEN Partition"
+msgstr "ZEN ਪਾਰਟੀਸ਼ਨ ਆਯੋਗ"
+
+#. txt_zenEnable
+msgid "Enable ZEN Partition"
+msgstr "ZEN ਪਾਰਟੀਸ਼ਨ ਯੋਗ"
+
+#. video mode menu item
+#. txt_text_mode
+msgid "Text Mode"
+msgstr "ਟੈਕਸਟ ਮੋਡ"
+
+#. menu item, like 'memory test'
+#. txt_firmware
+msgid "Firmware Test"
+msgstr "ਫਾਇਰਮਵੇਅਰ ਟੈਸਟ"
+
+#. txt_dud_file_msg
+msgid ""
+"To load driver updates directly from CD-ROM,\n"
+"enter the driver update file names (separated\n"
+"by commas ',') here:\n"
+msgstr ""
+"CD-ROM ਤੋਂ ਡਰਾਇਵਰ ਅੱਪਡੇਟ ਸਿੱਧਾ ਲੋਡ ਕਰਨ ਲਈ,\n"
+"ਅੱਪਡੇਟ ਡਰਾਇਵਰ ਫਾਇਲ ਨਾਂ ਇੱਥੇ ਦਿਓ (',' ਨਾਲ ਵੱਖ\n"
+"ਕਰਕੇ):\n"
+
+#. install source menu title
+#. ** please keep it really short (comparable to the english text) **
+#. txt_install_source
+msgid "Source"
+msgstr "ਸਰੋਤ"
+
+#. video mode/display size menu title
+#. ** please keep it really short (comparable to the english text) **
+#. txt_video_mode
+msgid "Video Mode"
+msgstr "ਵੀਡਿਓ ਮੋਡ"
+
+#. driver update dialog title
+#. -> txt_dud_file_msg
+#. txt_driver_update2
+msgid "Driver Update"
+msgstr "ਡਰਾਇਵਰ ਅੱਪਡੇਟ"
+
+#. menu label for selecting (cpu) architecture
+#. like i386, x86-64, ppc
+#. ** please keep it really short (comparable to the english text) **
+#. txt_arch
+msgid "Arch"
+msgstr "ਢਾਂਚਾ"
+
+#. menu label for selecting some (linux) kernel variant
+#. ** please keep it really short (comparable to the english text) **
+#. txt_kernel
+msgid "Kernel"
+msgstr "ਕਰਨਲ"
+
+#. menu item for kernel variant (cf. txt_kernel)
+#. txt_kernel_default
+msgid "Default"
+msgstr "ਡਿਫਾਲਟ"
+
+#. menu item for kernel variant (cf. txt_kernel)
+#. -> like in txt_safe_linux
+#. txt_kernel_safe
+msgid "Safe Settings"
+msgstr "ਸੁਰੱਖਿਅਤ ਸੈਟਿੰਗ"
+
+#. menu item for kernel variant (cf. txt_kernel)
+#. -> similar to txt_noacpi_install
+#. txt_kernel_noacpi
+msgid "No ACPI"
+msgstr "ACPI ਨਹੀਂ"
+
+#. menu item for kernel variant (cf. txt_kernel)
+#. -> similar to txt_nolapic_install
+#. txt_kernel_nolapic
+msgid "No Local APIC"
+msgstr "ਲੋਕਲ APIC ਨਹੀਂ"
+
+#. main menu: start in system repair mode
+#. txt_repain_system
+msgid "Repair Installed System"
+msgstr "ਇੰਸਟਾਲ ਹੋਇਆ ਸਿਸਟਮ ਰਿਪੇਅਰ"
+
+#. menu item
+#. txt_mediacheck
+msgid "Check Installation Media"
+msgstr "ਇੰਸਟਾਲੇਸ਼ਨ ਮੀਡਿਆ ਚੈੱਕ ਕਰੋ"
+
+#. menu item for keyboard layout (please keep it short)
+#. txt_keyboard
+msgid "Keyboard"
+msgstr "ਕੀਬੋਰਡ"
+
+#. menu title
+#. txt_dud_download
+msgid "Download Driver Update"
+msgstr "ਡਰਾਇਵਰ ਅੱਪਡੇਟ ਡਾਊਨਲੋਡ ਕਰੋ"
+
+#. input label
+#. txt_dud_enter_url
+msgid "Enter Driver Update URL\n"
+msgstr "ਡਰਾਇਵਰ ਅੱਪਡੇਟ URL ਦਿਓ\n"
+
+#. menu item
+#. txt_http_proxy
+msgid "HTTP Proxy"
+msgstr ""
+
+#. menu item
+#. txt_network_config
+msgid "Network Config"
+msgstr ""
+
+#. menu item
+#. txt_no_network
+msgid "No Network"
+msgstr ""
+
+#. short menu item for manual network config (NOT some kind of manual)
+#. txt_manual_network
+msgid "Manual"
+msgstr ""
+
+#. dialog title for manual network config
+#. txt_manual_network_title
+msgid "Manual Network Config"
+msgstr ""
+
+#. label for ip address
+#. txt_host_ip
+msgid "Host IP\n"
+msgstr ""
+
+#. label for gateway ip
+#. txt_gateway_ip
+msgid "Gateway\n"
+msgstr ""
+
+#. label for dns domain name (like 'opensuse.org')
+#. txt_domain_name
+msgid "Domain Name\n"
+msgstr ""
+
+#. label for nameserver list
+#. txt_nameservers
+msgid "Nameservers (separated by ',')\n"
+msgstr ""
+
+#. label for netmask; 'Host IP' refers to label txt_host_ip above
+#. txt_netmask
+msgid "Netmask\n(or use '/N' notation with Host IP)\n"
+msgstr ""
+
+#. label for Live CD installation
+#. txt_live_kde
+msgid "openSUSE Live (KDE)"
+msgstr ""
+
+#. label for Live CD installation
+#. txt_live_gnome
+msgid "openSUSE Live (GNOME)"
+msgstr ""
diff --git a/themes/openSUSE/po/pl.po b/themes/openSUSE/po/pl.po
new file mode 100644
index 0000000..5618cbe
--- /dev/null
+++ b/themes/openSUSE/po/pl.po
@@ -0,0 +1,443 @@
+# translation of pl.po to
+# translation of pl.po to
+# LANGUAGE translations for boot loader
+# Copyright (C) 2004 SUSE LINUX AG
+# Wojciech Kapusta <wojciech@aviary.pl>, 2006.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: bootloader\n"
+"PO-Revision-Date: 2010-03-09 15:19\n"
+"Last-Translator: Novell Language <language@novell.com>\n"
+"Language-Team: Novell Language <language@novell.com>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. ok button label
+#. txt_ok
+msgid "OK"
+msgstr "OK"
+
+#. cancel button label
+#. txt_cancel
+msgid "Cancel"
+msgstr "Anuluj"
+
+#. reboot button label
+#. txt_reboot
+msgid "Reboot"
+msgstr "Uruchom ponownie"
+
+#. continue button label
+#. txt_continue
+msgid "Continue"
+msgstr "Kontynuuj"
+
+#. txt_install
+msgid "Installation"
+msgstr "Instalacja"
+
+#. txt_safe_linux
+msgid "Linux--Safe Settings"
+msgstr "Linux (bezpieczne ustawienia)"
+
+#. txt_boot_harddisk
+msgid "Boot from Hard Disk"
+msgstr "Uruchomienie z dysku twardego"
+
+#. txt_rescue
+msgid "Rescue System"
+msgstr "System ratunkowy"
+
+#. txt_memtest
+msgid "Memory Test"
+msgstr "Test pamięci"
+
+#. txt_bootoptions
+msgid "Boot Options"
+msgstr "Opcje uruchamiania"
+
+#. window title for exit dialog
+#. txt_exit_title (see txt_exit_dialog)
+msgid "Exiting..."
+msgstr "Zamykanie..."
+
+#. txt_exit_dialog
+msgid ""
+"You are leaving the graphical boot menu and\n"
+"starting the text mode interface."
+msgstr ""
+"Nastąpi zamknięcie graficznego menu rozruchowego\n"
+"i uruchomienie interfejsu tekstowego."
+
+#. txt_help
+msgid "Help"
+msgstr "Pomoc"
+
+#. window title for kernel loading (see txt_load_kernel)
+#. txt_load_kernel_title
+msgid "Starting..."
+msgstr "Uruchamianie..."
+
+#. Keep the three newlines!
+#. txt_load_kernel
+msgid ""
+"Loading Linux Kernel\n"
+"\n"
+"\n"
+msgstr ""
+"Wczytywanie jądra systemu Linux\n"
+"\n"
+"\n"
+
+#. Keep the three newlines!
+#. txt_load_memtest
+msgid ""
+"Loading memtest86\n"
+"\n"
+"\n"
+msgstr ""
+"Wczytywanie memtest86\n"
+"\n"
+"\n"
+
+#. info box title
+#. txt_info_title
+msgid "Boot Loader"
+msgstr "Program rozruchowy"
+
+#. error box title
+#. txt_error_title
+msgid "I/O Error"
+msgstr "Błąd wejścia/wyjścia"
+
+#. boot disk change dialog title
+#. txt_change_disk_title
+msgid "Change Boot Disk"
+msgstr "Zmiana dysku rozruchowego"
+
+#. txt_insert_disk
+#, c-format
+msgid "Insert boot disk %u."
+msgstr "Proszę umieścić w napędzie dysk startowy %u."
+
+#. txt_insert_disk2
+#, c-format
+msgid ""
+"This is boot disk %u.\n"
+"Insert boot disk %u."
+msgstr ""
+"W napędzie znajduje się dysk startowy %u.\n"
+"Proszę włożyć dysk startowy %u."
+
+#. <product> is e.g. SuSE Linux X.Y or Enterprise Server Z
+#. txt_insert_disk3
+#, c-format
+msgid ""
+"This is not a <product> boot disk.\n"
+"Insert boot disk %u."
+msgstr ""
+"To nie jest dysk startowy <product>.\n"
+"Proszę włożyć dysk startowy %u."
+
+#. password dialog title
+#. txt_password_title
+msgid "Password"
+msgstr "Hasło"
+
+#. txt_dud_ready
+msgid "Get your driver update floppy ready."
+msgstr "Proszę przygotować dyskietkę z aktualizacjami sterowników."
+
+#. power off dialog title
+#. txt_power_off_title
+msgid "Power Off"
+msgstr "Wyłączanie"
+
+#. txt_power_off
+msgid "Halt the system now?"
+msgstr "Czy zatrzymać system?"
+
+#. menu entry for hard disk installation
+#. txt_harddisk
+msgid "Hard Disk"
+msgstr "Dysk twardy"
+
+#. dialog title for hard disk installation
+#. txt_harddisk_title
+msgid "Hard Disk Installation"
+msgstr "Instalacja na dysku twardym"
+
+#. txt_hd_diskdevice
+msgid "Disk Device (Scans All Disks If Empty)\n"
+msgstr "Dysk do skanowania (skanuje wszystkie dyski, jeśli puste)\n"
+
+#. txt_directory
+msgid "Directory\n"
+msgstr "Katalog\n"
+
+#. dialog title for ftp installation
+#. txt_ftp_title
+msgid "FTP Installation"
+msgstr "Instalacja FTP"
+
+#. txt_server
+msgid "Server\n"
+msgstr "Serwer\n"
+
+#. txt_password
+msgid "Password\n"
+msgstr "Hasło\n"
+
+#. label for ftp user input
+#. txt_user1
+msgid "User (Anonymous Login If Empty)\n"
+msgstr "Użytkownik (używa \"anonymous\", jeśli puste)\n"
+
+#. dialog title for nfs installation
+#. txt_nfs_title
+msgid "NFS Installation"
+msgstr "Instalacja NFS"
+
+#. label for smb user input
+#. txt_user2
+msgid "User (Uses \"guest\" If Empty)\n"
+msgstr "Użytkownik (używa \"guest\", jeśli puste)\n"
+
+#. dialog title for smb installation
+#. txt_smb_title
+msgid "SMB (Windows Share) Installation"
+msgstr "Instalacja SMB (udział dyskowy Windows)"
+
+#. dialog title for http installation
+#. txt_http_title
+msgid "HTTP Installation"
+msgstr "Instalacja HTTP"
+
+#. 'driver' as in '(hardware) driver update'
+#. txt_driver_update
+msgid "Driver"
+msgstr "Sterownik"
+
+#. as in Windows Authentication Domain
+#. txt_domain
+msgid "Domain\n"
+msgstr "Domena\n"
+
+#. button label for other/more options
+#. txt_other_options
+msgid "Other Options"
+msgstr "Inne opcje"
+
+#. label for language selection
+#. txt_language
+msgid "Language"
+msgstr "Język"
+
+#. txt_yes
+msgid "Yes"
+msgstr "Tak"
+
+#. txt_no
+msgid "No"
+msgstr "Nie"
+
+#. menu item for selecting a file
+#. txt_file
+msgid "File"
+msgstr "Plik"
+
+#. input label: share as in "Windows share" (SMB)
+#. txt_share
+msgid "Share\n"
+msgstr "Zasób\n"
+
+#. txt_zenAuto
+msgid "Automatic Mode"
+msgstr "Tryb automatyczny"
+
+#. txt_zenManual
+msgid "Manual Mode"
+msgstr "Tryb ręczny"
+
+#. txt_zenConfig
+msgid "Configure Parameters on ZEN Partition"
+msgstr "Konfiguruj parametry partycji ZEN"
+
+#. txt_zenInstall
+msgid "Install or Update ZEN Partition"
+msgstr "Instaluj lub aktualizuj partycję ZEN"
+
+#. txt_zenLilo
+msgid "Reinstall ZEN Partition Boot Loader"
+msgstr "Przeinstaluj program rozruchowy z partycji ZEN"
+
+#. txt_zenDisable
+msgid "Disable ZEN Partition"
+msgstr "Wyłącz partycję ZEN"
+
+#. txt_zenEnable
+msgid "Enable ZEN Partition"
+msgstr "Włącz partycję ZEN"
+
+#. video mode menu item
+#. txt_text_mode
+msgid "Text Mode"
+msgstr "Tryb tekstowy"
+
+#. menu item, like 'memory test'
+#. txt_firmware
+msgid "Firmware Test"
+msgstr "Test oprogramowania sprzętowego"
+
+#. txt_dud_file_msg
+msgid ""
+"To load driver updates directly from CD-ROM,\n"
+"enter the driver update file names (separated\n"
+"by commas ',') here:\n"
+msgstr ""
+"Aby wczytać aktualizacje programów obsługi \n"
+"bezpośrednio z płyty CD, proszę podać nazwy plików\n"
+"z aktualizacjami (oddzielone przecinkami \",\"):\n"
+
+#. install source menu title
+#. ** please keep it really short (comparable to the english text) **
+#. txt_install_source
+msgid "Source"
+msgstr "Źródło"
+
+#. video mode/display size menu title
+#. ** please keep it really short (comparable to the english text) **
+#. txt_video_mode
+msgid "Video Mode"
+msgstr "Tryb graficzny"
+
+#. driver update dialog title
+#. -> txt_dud_file_msg
+#. txt_driver_update2
+msgid "Driver Update"
+msgstr "Aktualizacja programów obsługi"
+
+#. menu label for selecting (cpu) architecture
+#. like i386, x86-64, ppc
+#. ** please keep it really short (comparable to the english text) **
+#. txt_arch
+msgid "Arch"
+msgstr "Arch."
+
+#. menu label for selecting some (linux) kernel variant
+#. ** please keep it really short (comparable to the english text) **
+#. txt_kernel
+msgid "Kernel"
+msgstr "Jądro"
+
+#. menu item for kernel variant (cf. txt_kernel)
+#. txt_kernel_default
+msgid "Default"
+msgstr "Domyślny"
+
+#. menu item for kernel variant (cf. txt_kernel)
+#. -> like in txt_safe_linux
+#. txt_kernel_safe
+msgid "Safe Settings"
+msgstr "Bezpieczne ustawienia"
+
+#. menu item for kernel variant (cf. txt_kernel)
+#. -> similar to txt_noacpi_install
+#. txt_kernel_noacpi
+msgid "No ACPI"
+msgstr "Bez ACPI"
+
+#. menu item for kernel variant (cf. txt_kernel)
+#. -> similar to txt_nolapic_install
+#. txt_kernel_nolapic
+msgid "No Local APIC"
+msgstr "Bez lokalnego APIC"
+
+#. main menu: start in system repair mode
+#. txt_repain_system
+msgid "Repair Installed System"
+msgstr "Naprawa systemu"
+
+#. menu item
+#. txt_mediacheck
+msgid "Check Installation Media"
+msgstr "Sprawdzenie płyty instalacyjnej"
+
+#. menu item for keyboard layout (please keep it short)
+#. txt_keyboard
+msgid "Keyboard"
+msgstr "Klawiatura"
+
+#. menu title
+#. txt_dud_download
+msgid "Download Driver Update"
+msgstr "Pobierz aktualizacje sterowników"
+
+#. input label
+#. txt_dud_enter_url
+msgid "Enter Driver Update URL\n"
+msgstr "Proszę wprowadzić adres URL aktualizacji sterowników\n"
+
+#. menu item
+#. txt_http_proxy
+msgid "HTTP Proxy"
+msgstr "Serwer Proxy HTTP"
+
+#. menu item
+#. txt_network_config
+msgid "Network Config"
+msgstr "Konfiguracja sieci"
+
+#. menu item
+#. txt_no_network
+msgid "No Network"
+msgstr "Brak sieci"
+
+#. short menu item for manual network config (NOT some kind of manual)
+#. txt_manual_network
+msgid "Manual"
+msgstr "Podręcznik"
+
+#. dialog title for manual network config
+#. txt_manual_network_title
+msgid "Manual Network Config"
+msgstr "Ręczna konfiguracja sieci"
+
+#. label for ip address
+#. txt_host_ip
+msgid "Host IP\n"
+msgstr "IP hosta\n"
+
+#. label for gateway ip
+#. txt_gateway_ip
+msgid "Gateway\n"
+msgstr "Bramka\n"
+
+#. label for dns domain name (like 'opensuse.org')
+#. txt_domain_name
+msgid "Domain Name\n"
+msgstr "Domena\n"
+
+#. label for nameserver list
+#. txt_nameservers
+msgid "Nameservers (separated by ',')\n"
+msgstr "Serwery nazw (rozdzielone ',')\n"
+
+#. label for netmask; 'Host IP' refers to label txt_host_ip above
+#. txt_netmask
+msgid "Netmask\n(or use '/N' notation with Host IP)\n"
+msgstr ""
+"Maska sieci\n"
+"(lub użyj zapisu '/N' w adresie hosta)\n"
+
+#. label for Live CD installation
+#. txt_live_kde
+msgid "openSUSE Live (KDE)"
+msgstr "openSUSE Live (KDE)"
+
+#. label for Live CD installation
+#. txt_live_gnome
+msgid "openSUSE Live (GNOME)"
+msgstr "openSUSE Live (GNOME)"
diff --git a/themes/openSUSE/po/pt.po b/themes/openSUSE/po/pt.po
new file mode 100644
index 0000000..8b2ac03
--- /dev/null
+++ b/themes/openSUSE/po/pt.po
@@ -0,0 +1,444 @@
+# translation of pt.po to portuguese
+# LANGUAGE translations for boot loader
+# Copyright (C) 2005 SUSE Linux GmbH
+# Antonio Cardoso Martins <digiplan@netvisao.pt>, 2005.
+# Elisio Andre Martins Catana <eacatana@netvisao.pt>, 2005.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: bootloader.pt\n"
+"POT-Creation-Date: \n"
+"PO-Revision-Date: 2008-05-13 23:07+0100\n"
+"Last-Translator: Antonio Cardoso Martins <digiplan.pt@gmail.com>\n"
+"Language-Team: Portuguese <opensuse-pt@opensuse.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.11.4\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#. ok button label
+#. txt_ok
+msgid "OK"
+msgstr "OK"
+
+#. cancel button label
+#. txt_cancel
+msgid "Cancel"
+msgstr "Cancelar"
+
+#. reboot button label
+#. txt_reboot
+msgid "Reboot"
+msgstr "Reinicializar"
+
+#. continue button label
+#. txt_continue
+msgid "Continue"
+msgstr "Continuar"
+
+#. txt_install
+msgid "Installation"
+msgstr "Instalação"
+
+#. txt_safe_linux
+msgid "Linux--Safe Settings"
+msgstr "Linux--Definições de Segurança"
+
+#. txt_boot_harddisk
+msgid "Boot from Hard Disk"
+msgstr "Iniciar a partir do Disco Rígido"
+
+#. txt_rescue
+msgid "Rescue System"
+msgstr "Sistema de Recuperação"
+
+#. txt_memtest
+msgid "Memory Test"
+msgstr "Teste de Memória"
+
+#. txt_bootoptions
+msgid "Boot Options"
+msgstr "Opções de Arranque"
+
+#. window title for exit dialog
+#. txt_exit_title (see txt_exit_dialog)
+msgid "Exiting..."
+msgstr "A sair..."
+
+#. txt_exit_dialog
+msgid ""
+"You are leaving the graphical boot menu and\n"
+"starting the text mode interface."
+msgstr ""
+"Está a sair do menu de arranque gráfico\n"
+"e a iniciar a interface em modo de texto."
+
+#. txt_help
+msgid "Help"
+msgstr "Ajuda"
+
+#. window title for kernel loading (see txt_load_kernel)
+#. txt_load_kernel_title
+msgid "Starting..."
+msgstr "A iniciar..."
+
+#. Keep the three newlines!
+#. txt_load_kernel
+msgid ""
+"Loading Linux Kernel\n"
+"\n"
+"\n"
+msgstr ""
+"A carregar o Kernel do Linux\n"
+"\n"
+"\n"
+
+#. Keep the three newlines!
+#. txt_load_memtest
+msgid ""
+"Loading memtest86\n"
+"\n"
+"\n"
+msgstr ""
+"A carregar memtest86\n"
+"\n"
+"\n"
+
+#. info box title
+#. txt_info_title
+msgid "Boot Loader"
+msgstr "Gestor de Arranque"
+
+#. error box title
+#. txt_error_title
+msgid "I/O Error"
+msgstr "Erro de I/O"
+
+#. boot disk change dialog title
+#. txt_change_disk_title
+msgid "Change Boot Disk"
+msgstr "Mudar Disco de Arranque"
+
+#. txt_insert_disk
+#, c-format
+msgid "Insert boot disk %u."
+msgstr "Inserir disco de arranque %u."
+
+#. txt_insert_disk2
+#, c-format
+msgid ""
+"This is boot disk %u.\n"
+"Insert boot disk %u."
+msgstr ""
+"Este é o disco de arranque %u.\n"
+"Introduza o disco de arranque %u."
+
+#. <product> is e.g. SuSE Linux X.Y or Enterprise Server Z
+#. txt_insert_disk3
+#, c-format
+msgid ""
+"This is not a <product> boot disk.\n"
+"Insert boot disk %u."
+msgstr ""
+"Este não é o disco de arranque do <product>.\n"
+"Introduza o disco de arranque %u."
+
+#. password dialog title
+#. txt_password_title
+msgid "Password"
+msgstr "Palavra Passe"
+
+#. txt_dud_ready
+msgid "Get your driver update floppy ready."
+msgstr "Certifique-se que tem a disquete com a actualização do driver."
+
+#. power off dialog title
+#. txt_power_off_title
+msgid "Power Off"
+msgstr "Desligar"
+
+#. txt_power_off
+msgid "Halt the system now?"
+msgstr "Desligar o sistema agora?"
+
+#. menu entry for hard disk installation
+#. txt_harddisk
+msgid "Hard Disk"
+msgstr "Disco Rígido"
+
+#. dialog title for hard disk installation
+#. txt_harddisk_title
+msgid "Hard Disk Installation"
+msgstr "Instalação pelo Disco Rígido"
+
+#. txt_hd_diskdevice
+msgid "Disk Device (Scans All Disks If Empty)\n"
+msgstr "Dispositivo de Disco (Analisar Todos os Discos, caso estejam vazios)\n"
+
+#. txt_directory
+msgid "Directory\n"
+msgstr "Directório\n"
+
+#. dialog title for ftp installation
+#. txt_ftp_title
+msgid "FTP Installation"
+msgstr "Instalação por FTP"
+
+#. txt_server
+msgid "Server\n"
+msgstr "Servidor\n"
+
+#. txt_password
+msgid "Password\n"
+msgstr "Palavra Passe\n"
+
+#. label for ftp user input
+#. txt_user1
+msgid "User (Anonymous Login If Empty)\n"
+msgstr "Utilizador (login Anónimo, Se estiver Vazio)\n"
+
+#. dialog title for nfs installation
+#. txt_nfs_title
+msgid "NFS Installation"
+msgstr "Instalação por NFS"
+
+#. label for smb user input
+#. txt_user2
+msgid "User (Uses \"guest\" If Empty)\n"
+msgstr "Utilizador (utilizando \"guest\" Se Estiver Vazio)\n"
+
+#. dialog title for smb installation
+#. txt_smb_title
+msgid "SMB (Windows Share) Installation"
+msgstr "Instalação por SMB (Partilha Windows)"
+
+#. dialog title for http installation
+#. txt_http_title
+msgid "HTTP Installation"
+msgstr "Instalação por HTTP"
+
+#. 'driver' as in '(hardware) driver update'
+#. txt_driver_update
+msgid "Driver"
+msgstr "Driver"
+
+#. as in Windows Authentication Domain
+#. txt_domain
+msgid "Domain\n"
+msgstr "Domínio\n"
+
+#. button label for other/more options
+#. txt_other_options
+msgid "Other Options"
+msgstr "Outras Opções"
+
+#. label for language selection
+#. txt_language
+msgid "Language"
+msgstr "Idioma"
+
+#. txt_yes
+msgid "Yes"
+msgstr "Sim"
+
+#. txt_no
+msgid "No"
+msgstr "Não"
+
+#. menu item for selecting a file
+#. txt_file
+msgid "File"
+msgstr "Ficheiro"
+
+#. input label: share as in "Windows share" (SMB)
+#. txt_share
+msgid "Share\n"
+msgstr "Partilha\n"
+
+#. txt_zenAuto
+msgid "Automatic Mode"
+msgstr "Modo Automático"
+
+#. txt_zenManual
+msgid "Manual Mode"
+msgstr "Modo Manual"
+
+#. txt_zenConfig
+msgid "Configure Parameters on ZEN Partition"
+msgstr "Configurar parâmetros na partição ZEN"
+
+#. txt_zenInstall
+msgid "Install or Update ZEN Partition"
+msgstr "Instalar ou Actualizar partição ZEN"
+
+#. txt_zenLilo
+msgid "Reinstall ZEN Partition Boot Loader"
+msgstr "Reinstalar o gestor de arranque da partição ZEN"
+
+#. txt_zenDisable
+msgid "Disable ZEN Partition"
+msgstr "Desactivar partição ZEN"
+
+#. txt_zenEnable
+msgid "Enable ZEN Partition"
+msgstr "Activar partição ZEN"
+
+#. video mode menu item
+#. txt_text_mode
+msgid "Text Mode"
+msgstr "Modo de Texto"
+
+#. menu item, like 'memory test'
+#. txt_firmware
+msgid "Firmware Test"
+msgstr "Testar Firmware"
+
+#. txt_dud_file_msg
+msgid ""
+"To load driver updates directly from CD-ROM,\n"
+"enter the driver update file names (separated\n"
+"by commas ',') here:\n"
+msgstr ""
+"Para carregar actualizações de drivers directamente do CD-ROM,\n"
+"introduza o nome dos ficheiros de actualização (separados\n"
+"por virgulas ',') aqui:\n"
+
+#. install source menu title
+#. ** please keep it really short (comparable to the english text) **
+#. txt_install_source
+msgid "Source"
+msgstr "Origem"
+
+#. video mode/display size menu title
+#. ** please keep it really short (comparable to the english text) **
+#. txt_video_mode
+msgid "Video Mode"
+msgstr "Modo de Vídeo"
+
+#. driver update dialog title
+#. -> txt_dud_file_msg
+#. txt_driver_update2
+msgid "Driver Update"
+msgstr "Actualização do Driver"
+
+#. menu label for selecting (cpu) architecture
+#. like i386, x86-64, ppc
+#. ** please keep it really short (comparable to the english text) **
+#. txt_arch
+msgid "Arch"
+msgstr "Arch"
+
+#. menu label for selecting some (linux) kernel variant
+#. ** please keep it really short (comparable to the english text) **
+#. txt_kernel
+msgid "Kernel"
+msgstr "Kernel"
+
+#. menu item for kernel variant (cf. txt_kernel)
+#. txt_kernel_default
+msgid "Default"
+msgstr "Pré-definido"
+
+#. menu item for kernel variant (cf. txt_kernel)
+#. -> like in txt_safe_linux
+#. txt_kernel_safe
+msgid "Safe Settings"
+msgstr "Definições de Segurança"
+
+#. menu item for kernel variant (cf. txt_kernel)
+#. -> similar to txt_noacpi_install
+#. txt_kernel_noacpi
+msgid "No ACPI"
+msgstr "Sem ACPI"
+
+#. menu item for kernel variant (cf. txt_kernel)
+#. -> similar to txt_nolapic_install
+#. txt_kernel_nolapic
+msgid "No Local APIC"
+msgstr "Sem Local APIC"
+
+#. main menu: start in system repair mode
+#. txt_repain_system
+msgid "Repair Installed System"
+msgstr "Reparar o Sstema Instalado"
+
+#. menu item
+#. txt_mediacheck
+msgid "Check Installation Media"
+msgstr "Verificar o Suporte de Instalação"
+
+#. menu item for keyboard layout (please keep it short)
+#. txt_keyboard
+msgid "Keyboard"
+msgstr "Teclado"
+
+#. menu title
+#. txt_dud_download
+msgid "Download Driver Update"
+msgstr ""
+
+#. input label
+#. txt_dud_enter_url
+msgid "Enter Driver Update URL\n"
+msgstr ""
+
+#. menu item
+#. txt_http_proxy
+msgid "HTTP Proxy"
+msgstr ""
+
+#. menu item
+#. txt_network_config
+msgid "Network Config"
+msgstr ""
+
+#. menu item
+#. txt_no_network
+msgid "No Network"
+msgstr ""
+
+#. short menu item for manual network config (NOT some kind of manual)
+#. txt_manual_network
+msgid "Manual"
+msgstr ""
+
+#. dialog title for manual network config
+#. txt_manual_network_title
+msgid "Manual Network Config"
+msgstr ""
+
+#. label for ip address
+#. txt_host_ip
+msgid "Host IP\n"
+msgstr ""
+
+#. label for gateway ip
+#. txt_gateway_ip
+msgid "Gateway\n"
+msgstr ""
+
+#. label for dns domain name (like 'opensuse.org')
+#. txt_domain_name
+msgid "Domain Name\n"
+msgstr ""
+
+#. label for nameserver list
+#. txt_nameservers
+msgid "Nameservers (separated by ',')\n"
+msgstr ""
+
+#. label for netmask; 'Host IP' refers to label txt_host_ip above
+#. txt_netmask
+msgid "Netmask\n(or use '/N' notation with Host IP)\n"
+msgstr ""
+
+#. label for Live CD installation
+#. txt_live_kde
+msgid "openSUSE Live (KDE)"
+msgstr ""
+
+#. label for Live CD installation
+#. txt_live_gnome
+msgid "openSUSE Live (GNOME)"
+msgstr ""
diff --git a/themes/openSUSE/po/pt_BR.po b/themes/openSUSE/po/pt_BR.po
new file mode 100644
index 0000000..4bc8fd6
--- /dev/null
+++ b/themes/openSUSE/po/pt_BR.po
@@ -0,0 +1,446 @@
+# LANGUAGE translations for boot loader
+# Copyright (C) 2004 SUSE LINUX AG
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: bootloader\n"
+"POT-Creation-Date: \n"
+"PO-Revision-Date: 2010-05-18 16:38-0300\n"
+"Last-Translator: Luiz Fernando Ranghetti <elchevive@opensuse.org>\n"
+"Language-Team: Brazilian Portuguese <opensuse-pt@opensuse.org>\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-Poedit-Language: Portuguese\n"
+"X-Poedit-Country: BRAZIL\n"
+"X-Poedit-SourceCharset: utf-8\n"
+"X-Generator: Lokalize 1.0\n"
+
+#. ok button label
+#. txt_ok
+msgid "OK"
+msgstr "OK"
+
+#. cancel button label
+#. txt_cancel
+msgid "Cancel"
+msgstr "Cancelar"
+
+#. reboot button label
+#. txt_reboot
+msgid "Reboot"
+msgstr "Reinicializar"
+
+#. continue button label
+#. txt_continue
+msgid "Continue"
+msgstr "Continuar"
+
+#. txt_install
+msgid "Installation"
+msgstr "Instalação"
+
+#. txt_safe_linux
+msgid "Linux--Safe Settings"
+msgstr "Linux--configurações seguras"
+
+#. txt_boot_harddisk
+msgid "Boot from Hard Disk"
+msgstr "Inicializar a partir do disco rígido"
+
+#. txt_rescue
+msgid "Rescue System"
+msgstr "Sistema de recuperação"
+
+#. txt_memtest
+msgid "Memory Test"
+msgstr "Teste de memória"
+
+#. txt_bootoptions
+msgid "Boot Options"
+msgstr "Opções de inicialização"
+
+#. window title for exit dialog
+#. txt_exit_title (see txt_exit_dialog)
+msgid "Exiting..."
+msgstr "Saindo..."
+
+#. txt_exit_dialog
+msgid ""
+"You are leaving the graphical boot menu and\n"
+"starting the text mode interface."
+msgstr ""
+"Você está saindo do menu de inicialização gráfica\n"
+"e iniciando a interface em modo de texto."
+
+#. txt_help
+msgid "Help"
+msgstr "Ajuda"
+
+#. window title for kernel loading (see txt_load_kernel)
+#. txt_load_kernel_title
+msgid "Starting..."
+msgstr "Iniciando..."
+
+#. Keep the three newlines!
+#. txt_load_kernel
+msgid ""
+"Loading Linux Kernel\n"
+"\n"
+"\n"
+msgstr ""
+"Carregando o kernel do Linux\n"
+"\n"
+"\n"
+
+#. Keep the three newlines!
+#. txt_load_memtest
+msgid ""
+"Loading memtest86\n"
+"\n"
+"\n"
+msgstr ""
+"Carregando o memtest86\n"
+"\n"
+"\n"
+
+#. info box title
+#. txt_info_title
+msgid "Boot Loader"
+msgstr "Carregador de inicialização"
+
+#. error box title
+#. txt_error_title
+msgid "I/O Error"
+msgstr "Erro de E/S"
+
+#. boot disk change dialog title
+#. txt_change_disk_title
+msgid "Change Boot Disk"
+msgstr "Alterar o disco de inicialização"
+
+#. txt_insert_disk
+#, c-format
+msgid "Insert boot disk %u."
+msgstr "Inserir o disco de inicialização %u."
+
+#. txt_insert_disk2
+#, c-format
+msgid ""
+"This is boot disk %u.\n"
+"Insert boot disk %u."
+msgstr ""
+"Este é o disco de inicialização %u.\n"
+"Insira o disco de inicialização %u."
+
+#. <product> is e.g. SuSE Linux X.Y or Enterprise Server Z
+#. txt_insert_disk3
+#, c-format
+msgid ""
+"This is not a <product> boot disk.\n"
+"Insert boot disk %u."
+msgstr ""
+"Este não é um disco de inicialização do <product>.\n"
+"Insira o disco de inicialização %u."
+
+#. password dialog title
+#. txt_password_title
+msgid "Password"
+msgstr "Senha"
+
+#. txt_dud_ready
+msgid "Get your driver update floppy ready."
+msgstr "Tenha o disquete de atualização de driver pronto."
+
+#. power off dialog title
+#. txt_power_off_title
+msgid "Power Off"
+msgstr "Desligar"
+
+#. txt_power_off
+msgid "Halt the system now?"
+msgstr "Desligar o sistema agora?"
+
+#. menu entry for hard disk installation
+#. txt_harddisk
+msgid "Hard Disk"
+msgstr "Disco rígido"
+
+#. dialog title for hard disk installation
+#. txt_harddisk_title
+msgid "Hard Disk Installation"
+msgstr "Instalação no disco rígido"
+
+#. txt_hd_diskdevice
+msgid "Disk Device (Scans All Disks If Empty)\n"
+msgstr "Dispositivo de disco (pesquisa em todos os discos se vazio)\n"
+
+#. txt_directory
+msgid "Directory\n"
+msgstr "Diretório\n"
+
+#. dialog title for ftp installation
+#. txt_ftp_title
+msgid "FTP Installation"
+msgstr "Instalação por FTP"
+
+#. txt_server
+msgid "Server\n"
+msgstr "Servidor\n"
+
+#. txt_password
+msgid "Password\n"
+msgstr "Senha\n"
+
+#. label for ftp user input
+#. txt_user1
+msgid "User (Anonymous Login If Empty)\n"
+msgstr "Usuário (efetua login anônimo se vazio)\n"
+
+#. dialog title for nfs installation
+#. txt_nfs_title
+msgid "NFS Installation"
+msgstr "Instalação por NFS"
+
+#. label for smb user input
+#. txt_user2
+msgid "User (Uses \"guest\" If Empty)\n"
+msgstr "Usuário (utiliza \"guest\" se vazio)\n"
+
+#. dialog title for smb installation
+#. txt_smb_title
+msgid "SMB (Windows Share) Installation"
+msgstr "Instalação por SMB (compartilhamento Windows)"
+
+#. dialog title for http installation
+#. txt_http_title
+msgid "HTTP Installation"
+msgstr "Instalação por HTTP"
+
+#. 'driver' as in '(hardware) driver update'
+#. txt_driver_update
+msgid "Driver"
+msgstr "Driver"
+
+#. as in Windows Authentication Domain
+#. txt_domain
+msgid "Domain\n"
+msgstr "Domínio\n"
+
+#. button label for other/more options
+#. txt_other_options
+msgid "Other Options"
+msgstr "Outras opções"
+
+#. label for language selection
+#. txt_language
+msgid "Language"
+msgstr "Idioma"
+
+#. txt_yes
+msgid "Yes"
+msgstr "Sim"
+
+#. txt_no
+msgid "No"
+msgstr "Não"
+
+#. menu item for selecting a file
+#. txt_file
+msgid "File"
+msgstr "Arquivo"
+
+#. input label: share as in "Windows share" (SMB)
+#. txt_share
+msgid "Share\n"
+msgstr "Compartilhamento\n"
+
+#. txt_zenAuto
+msgid "Automatic Mode"
+msgstr "Modo automático"
+
+#. txt_zenManual
+msgid "Manual Mode"
+msgstr "Modo manual"
+
+#. txt_zenConfig
+msgid "Configure Parameters on ZEN Partition"
+msgstr "Configurar os parâmetros na partição ZEN"
+
+#. txt_zenInstall
+msgid "Install or Update ZEN Partition"
+msgstr "Instalar ou atualizar partição ZEN"
+
+#. txt_zenLilo
+msgid "Reinstall ZEN Partition Boot Loader"
+msgstr "Reinstalar o carregador de inicialização na partição ZEN"
+
+#. txt_zenDisable
+msgid "Disable ZEN Partition"
+msgstr "Desabilitar a partição ZEN"
+
+#. txt_zenEnable
+msgid "Enable ZEN Partition"
+msgstr "Habilitar a partição ZEN"
+
+#. video mode menu item
+#. txt_text_mode
+msgid "Text Mode"
+msgstr "Modo de texto"
+
+#. menu item, like 'memory test'
+#. txt_firmware
+msgid "Firmware Test"
+msgstr "Teste de firmware"
+
+#. txt_dud_file_msg
+msgid ""
+"To load driver updates directly from CD-ROM,\n"
+"enter the driver update file names (separated\n"
+"by commas ',') here:\n"
+msgstr ""
+"Para carregar atualizações de driver diretamente do CD-ROM,\n"
+"digite aqui os nomes dos arquivos de atualização de driver\n"
+"(separados por vírgulas ','):\n"
+
+#. install source menu title
+#. ** please keep it really short (comparable to the english text) **
+#. txt_install_source
+msgid "Source"
+msgstr "Fonte"
+
+#. video mode/display size menu title
+#. ** please keep it really short (comparable to the english text) **
+#. txt_video_mode
+msgid "Video Mode"
+msgstr "Modo de vídeo"
+
+#. driver update dialog title
+#. -> txt_dud_file_msg
+#. txt_driver_update2
+msgid "Driver Update"
+msgstr "Atualização de driver"
+
+#. menu label for selecting (cpu) architecture
+#. like i386, x86-64, ppc
+#. ** please keep it really short (comparable to the english text) **
+#. txt_arch
+msgid "Arch"
+msgstr "Arquitetura"
+
+#. menu label for selecting some (linux) kernel variant
+#. ** please keep it really short (comparable to the english text) **
+#. txt_kernel
+msgid "Kernel"
+msgstr "Kernel"
+
+#. menu item for kernel variant (cf. txt_kernel)
+#. txt_kernel_default
+msgid "Default"
+msgstr "Padrão"
+
+#. menu item for kernel variant (cf. txt_kernel)
+#. -> like in txt_safe_linux
+#. txt_kernel_safe
+msgid "Safe Settings"
+msgstr "Configurações seguras"
+
+#. menu item for kernel variant (cf. txt_kernel)
+#. -> similar to txt_noacpi_install
+#. txt_kernel_noacpi
+msgid "No ACPI"
+msgstr "Sem ACPI"
+
+#. menu item for kernel variant (cf. txt_kernel)
+#. -> similar to txt_nolapic_install
+#. txt_kernel_nolapic
+msgid "No Local APIC"
+msgstr "Sem APIC local"
+
+#. main menu: start in system repair mode
+#. txt_repain_system
+msgid "Repair Installed System"
+msgstr "Reparar o sistema instalado"
+
+#. menu item
+#. txt_mediacheck
+msgid "Check Installation Media"
+msgstr "Verificar a mídia de instalação"
+
+#. menu item for keyboard layout (please keep it short)
+#. txt_keyboard
+msgid "Keyboard"
+msgstr "Teclado"
+
+#. menu title
+#. txt_dud_download
+msgid "Download Driver Update"
+msgstr "Baixar a atualização de driver"
+
+#. input label
+#. txt_dud_enter_url
+msgid "Enter Driver Update URL\n"
+msgstr "Digite o URL da atualização de driver\n"
+
+#. menu item
+#. txt_http_proxy
+msgid "HTTP Proxy"
+msgstr "Proxy HTTP"
+
+#. menu item
+#. txt_network_config
+msgid "Network Config"
+msgstr "Configuração de rede"
+
+#. menu item
+#. txt_no_network
+msgid "No Network"
+msgstr "Nenhuma rede"
+
+#. short menu item for manual network config (NOT some kind of manual)
+#. txt_manual_network
+msgid "Manual"
+msgstr "Manual"
+
+#. dialog title for manual network config
+#. txt_manual_network_title
+msgid "Manual Network Config"
+msgstr "Configuração de rede manual"
+
+#. label for ip address
+#. txt_host_ip
+msgid "Host IP\n"
+msgstr "IP da máquina\n"
+
+#. label for gateway ip
+#. txt_gateway_ip
+msgid "Gateway\n"
+msgstr "Gateway\n"
+
+#. label for dns domain name (like 'opensuse.org')
+#. txt_domain_name
+msgid "Domain Name\n"
+msgstr "Nome do domínio\n"
+
+#. label for nameserver list
+#. txt_nameservers
+msgid "Nameservers (separated by ',')\n"
+msgstr "Servidores de nome (separados por ',')\n"
+
+#. label for netmask; 'Host IP' refers to label txt_host_ip above
+#. txt_netmask
+msgid "Netmask\n(or use '/N' notation with Host IP)\n"
+msgstr ""
+"Máscara de rede\n"
+"(ou use a notação '/N' com o IP da máquina)\n"
+
+#. label for Live CD installation
+#. txt_live_kde
+msgid "openSUSE Live (KDE)"
+msgstr "openSUSE Live (KDE)"
+
+#. label for Live CD installation
+#. txt_live_gnome
+msgid "openSUSE Live (GNOME)"
+msgstr "openSUSE Live (GNOME)"
diff --git a/themes/openSUSE/po/ro.po b/themes/openSUSE/po/ro.po
new file mode 100644
index 0000000..67bdbd5
--- /dev/null
+++ b/themes/openSUSE/po/ro.po
@@ -0,0 +1,445 @@
+# translation of ro.po to Romanian
+# LANGUAGE translations for boot loader
+# Copyright (C) 2004 SUSE LINUX AG
+# Claudiu Costin <claudiuc@kde.org>, 2004.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openSUSE\n"
+"Report-Msgid-Bugs-To: translation@suse.de\n"
+"POT-Creation-Date: 2010-04-13 13:36+0200\n"
+"PO-Revision-Date: 2010-04-30 16:32+0300\n"
+"Last-Translator: Lucian Oprea <oprea.luci@gmail.com>\n"
+"Language-Team: Comunitatea traducatorilor openSUSE Romania. Contact: <oprea.luci@gmail.com><strainu10@gmail.com><traduceri@suseromania.ro>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=n==1 ? 0 : (n==0 || (n%100 > 0 && n%100 < 20)) ? 1 : 2;\n"
+"X-Generator: Narro 0.9.4 on http://tradu.softwareliber.ro\n"
+
+#. ok button label
+#. txt_ok
+msgid "OK"
+msgstr "OK"
+
+#. cancel button label
+#. txt_cancel
+msgid "Cancel"
+msgstr "Renunţă"
+
+#. reboot button label
+#. txt_reboot
+msgid "Reboot"
+msgstr "Reporneşte"
+
+#. continue button label
+#. txt_continue
+msgid "Continue"
+msgstr "Continuă"
+
+#. txt_install
+msgid "Installation"
+msgstr "Instalare"
+
+#. txt_safe_linux
+msgid "Linux--Safe Settings"
+msgstr "Linux--Setări sigure"
+
+#. txt_boot_harddisk
+msgid "Boot from Hard Disk"
+msgstr "Bootează de pe hard disc"
+
+#. txt_rescue
+msgid "Rescue System"
+msgstr "Sistem de salvare"
+
+#. txt_memtest
+msgid "Memory Test"
+msgstr "Test de memorie"
+
+#. txt_bootoptions
+msgid "Boot Options"
+msgstr "Opţiuni de pornire"
+
+#. window title for exit dialog
+#. txt_exit_title (see txt_exit_dialog)
+msgid "Exiting..."
+msgstr "Ies..."
+
+#. txt_exit_dialog
+msgid ""
+"You are leaving the graphical boot menu and\n"
+"starting the text mode interface."
+msgstr ""
+"Acum părăsiţi modul grafic de boot\n"
+"şi intraţi în interfaţa text."
+
+#. txt_help
+msgid "Help"
+msgstr "Ajutor"
+
+#. window title for kernel loading (see txt_load_kernel)
+#. txt_load_kernel_title
+msgid "Starting..."
+msgstr "Pornesc..."
+
+#. Keep the three newlines!
+#. txt_load_kernel
+msgid ""
+"Loading Linux Kernel\n"
+"\n"
+"\n"
+msgstr ""
+"Încarc kernelul Linux\n"
+"\n"
+"\n"
+
+#. Keep the three newlines!
+#. txt_load_memtest
+msgid ""
+"Loading memtest86\n"
+"\n"
+"\n"
+msgstr ""
+"Încarc memtest86\n"
+"\n"
+"\n"
+
+#. info box title
+#. txt_info_title
+msgid "Boot Loader"
+msgstr "Bootloader"
+
+#. error box title
+#. txt_error_title
+msgid "I/O Error"
+msgstr "Eroare I/O"
+
+#. boot disk change dialog title
+#. txt_change_disk_title
+msgid "Change Boot Disk"
+msgstr "Schimbaţi discul de pornire"
+
+#. txt_insert_disk
+#, c-format
+msgid "Insert boot disk %u."
+msgstr "Introduceţi discul de pornire %u."
+
+#. txt_insert_disk2
+#, c-format
+msgid ""
+"This is boot disk %u.\n"
+"Insert boot disk %u."
+msgstr ""
+"Aceasta este discul de pornire %u.\n"
+"Introduceţi discul de pornire %u."
+
+#. <product> is e.g. SuSE Linux X.Y or Enterprise Server Z
+#. txt_insert_disk3
+#, c-format
+msgid ""
+"This is not a <product> boot disk.\n"
+"Insert boot disk %u."
+msgstr ""
+"Acesta nu este un disc de pornire <product>.\n"
+"Introduceţi discul %u."
+
+#. password dialog title
+#. txt_password_title
+msgid "Password"
+msgstr "Parolă"
+
+#. txt_dud_ready
+msgid "Get your driver update floppy ready."
+msgstr "Pregătiţi discheta de actualizare a driverelor."
+
+#. power off dialog title
+#. txt_power_off_title
+msgid "Power Off"
+msgstr "Oprire alimentare"
+
+#. txt_power_off
+msgid "Halt the system now?"
+msgstr "Opresc sistemul acum?"
+
+#. menu entry for hard disk installation
+#. txt_harddisk
+msgid "Hard Disk"
+msgstr "Hard Disc"
+
+#. dialog title for hard disk installation
+#. txt_harddisk_title
+msgid "Hard Disk Installation"
+msgstr "Instalare de pe hard disc"
+
+#. txt_hd_diskdevice
+msgid "Disk Device (Scans All Disks If Empty)\n"
+msgstr "Dispozitive disc (scanează toate discurile dacă nu este completat)\n"
+
+#. txt_directory
+msgid "Directory\n"
+msgstr "Director\n"
+
+#. dialog title for ftp installation
+#. txt_ftp_title
+msgid "FTP Installation"
+msgstr "Instalare prin FTP"
+
+#. txt_server
+msgid "Server\n"
+msgstr "Server\n"
+
+#. txt_password
+msgid "Password\n"
+msgstr "Parolă\n"
+
+#. label for ftp user input
+#. txt_user1
+msgid "User (Anonymous Login If Empty)\n"
+msgstr "Utilizator (anonim, dacă nu este completat)\n"
+
+#. dialog title for nfs installation
+#. txt_nfs_title
+msgid "NFS Installation"
+msgstr "Instalare prin NFS"
+
+#. label for smb user input
+#. txt_user2
+msgid "User (Uses \"guest\" If Empty)\n"
+msgstr "Utilizator (foloseşte \"guest\" dacă este necompletat)\n"
+
+#. dialog title for smb installation
+#. txt_smb_title
+msgid "SMB (Windows Share) Installation"
+msgstr "Instalare prin SMB (share Windows)"
+
+#. dialog title for http installation
+#. txt_http_title
+msgid "HTTP Installation"
+msgstr "Instalare prin HTTP"
+
+#. 'driver' as in '(hardware) driver update'
+#. txt_driver_update
+msgid "Driver"
+msgstr "Driver"
+
+#. as in Windows Authentication Domain
+#. txt_domain
+msgid "Domain\n"
+msgstr "Domeniu\n"
+
+#. button label for other/more options
+#. txt_other_options
+msgid "Other Options"
+msgstr "Alte opţiuni"
+
+#. txt_language
+msgid "Language"
+msgstr "Limbă"
+
+#. txt_yes
+msgid "Yes"
+msgstr "Da"
+
+#. txt_no
+msgid "No"
+msgstr "Nu"
+
+#. menu item for selecting a file
+#. txt_file
+msgid "File"
+msgstr "Fişier"
+
+#. input label: share as in "Windows share" (SMB)
+#. txt_share
+msgid "Share\n"
+msgstr "Partajare\n"
+
+#. txt_zenAuto
+msgid "Automatic Mode"
+msgstr "Mod automat"
+
+#. txt_zenManual
+msgid "Manual Mode"
+msgstr "Mod manual"
+
+#. txt_zenConfig
+msgid "Configure Parameters on ZEN Partition"
+msgstr "Configuraţi parametrii partiţiei ZEN"
+
+#. txt_zenInstall
+msgid "Install or Update ZEN Partition"
+msgstr "Instalează sau actualizează partiţie ZEN"
+
+#. txt_zenLilo
+msgid "Reinstall ZEN Partition Boot Loader"
+msgstr "Reinstalează încărcătorul de sistem al partiţiei ZEN"
+
+#. txt_zenDisable
+msgid "Disable ZEN Partition"
+msgstr "Dezactiveaza partiţia ZEN"
+
+#. txt_zenEnable
+msgid "Enable ZEN Partition"
+msgstr "Activează partiţia ZEN"
+
+#. video mode menu item
+#. txt_text_mode
+msgid "Text Mode"
+msgstr "Mod text"
+
+#. menu item, like 'memory test'
+#. txt_firmware
+msgid "Firmware Test"
+msgstr "Test de firmware"
+
+#. txt_dud_file_msg
+msgid ""
+"To load driver updates directly from CD-ROM,\n"
+"enter the driver update file names (separated\n"
+"by commas ',') here:\n"
+msgstr ""
+"Pentru a încărca actualizările de driver direct de pe CD-ROM,\n"
+"introduceţi aici numele fişierelor cu actualizările (separate prin\n"
+"virgulă ','):\n"
+
+#. install source menu title
+#. ** please keep it really short (comparable to the english text) **
+#. txt_install_source
+msgid "Source"
+msgstr "Sursă"
+
+#. video mode/display size menu title
+#. ** please keep it really short (comparable to the english text) **
+#. txt_video_mode
+msgid "Video Mode"
+msgstr "Mod video"
+
+#. driver update dialog title
+#. -> txt_dud_file_msg
+#. txt_driver_update2
+msgid "Driver Update"
+msgstr "Actualizare de driver"
+
+#. menu label for selecting (cpu) architecture
+#. like i386, x86-64, ppc
+#. ** please keep it really short (comparable to the english text) **
+#. txt_arch
+msgid "Arch"
+msgstr "Arh."
+
+#. menu label for selecting some (linux) kernel variant
+#. ** please keep it really short (comparable to the english text) **
+#. txt_kernel
+msgid "Kernel"
+msgstr "Kernel"
+
+#. menu item for kernel variant (cf. txt_kernel)
+#. txt_kernel_default
+msgid "Default"
+msgstr "Implicit"
+
+#. menu item for kernel variant (cf. txt_kernel)
+#. -> like in txt_safe_linux
+#. txt_kernel_safe
+msgid "Safe Settings"
+msgstr "Setări sigure"
+
+#. menu item for kernel variant (cf. txt_kernel)
+#. -> similar to txt_noacpi_install
+#. txt_kernel_noacpi
+msgid "No ACPI"
+msgstr "Fără APIC"
+
+#. menu item for kernel variant (cf. txt_kernel)
+#. -> similar to txt_nolapic_install
+#. txt_kernel_nolapic
+msgid "No Local APIC"
+msgstr "Fără APIC local"
+
+#. main menu: start in system repair mode
+#. txt_repain_system
+msgid "Repair Installed System"
+msgstr "Repară sistemul instalat"
+
+#. menu item
+#. txt_mediacheck
+msgid "Check Installation Media"
+msgstr "Verifică mediul de instalare"
+
+#. menu item for keyboard layout (please keep it short)
+#. txt_keyboard
+msgid "Keyboard"
+msgstr "Tastatură"
+
+#. menu title
+#. txt_dud_download
+msgid "Download Driver Update"
+msgstr "Descarcă actualizări pentru drivere"
+
+#. input label
+#. txt_dud_enter_url
+msgid "Enter Driver Update URL\n"
+msgstr "Introduceţi adresa de actualizare a driverului\n"
+
+#. menu item
+#. txt_http_proxy
+msgid "HTTP Proxy"
+msgstr "Proxy HTTP"
+
+#. menu item
+#. txt_network_config
+msgid "Network Config"
+msgstr "Configurarea Reţelei"
+
+#. menu item
+#. txt_no_network
+msgid "No Network"
+msgstr "Reţea inaccesibilă"
+
+#. short menu item for manual network config (NOT some kind of manual)
+#. txt_manual_network
+msgid "Manual"
+msgstr "Mod manual"
+
+#. dialog title for manual network config
+#. txt_manual_network_title
+msgid "Manual Network Config"
+msgstr "Configurarea manuală a reţelei"
+
+#. label for ip address
+#. txt_host_ip
+msgid "Host IP\n"
+msgstr "IP-ul gazdei\n"
+
+#. label for gateway ip
+#. txt_gateway_ip
+msgid "Gateway\n"
+msgstr "Gateway\n"
+
+#. label for dns domain name (like 'opensuse.org')
+#. txt_domain_name
+msgid "Domain Name\n"
+msgstr "Nume domeniu\n"
+
+#. label for nameserver list
+#. txt_nameservers
+msgid "Nameservers (separated by ',')\n"
+msgstr "Servere de nume (separate de ',')\n"
+
+#. label for netmask; 'Host IP' refers to label txt_host_ip above
+#. txt_netmask
+msgid "Netmask\n(or use '/N' notation with Host IP)\n"
+msgstr ""
+"Mască de reţea\n"
+"(sau utilizaţi notaţia '/N' cu IP-ul Gazdei)\n"
+
+#. label for Live CD installation
+#. txt_live_kde
+msgid "openSUSE Live (KDE)"
+msgstr "openSUSE Live (KDE)"
+
+#. label for Live CD installation
+#. txt_live_gnome
+msgid "openSUSE Live (GNOME)"
+msgstr "openSUSE Live (GNOME)"
diff --git a/themes/openSUSE/po/ru.po b/themes/openSUSE/po/ru.po
new file mode 100644
index 0000000..389c42c
--- /dev/null
+++ b/themes/openSUSE/po/ru.po
@@ -0,0 +1,448 @@
+# translation of ru.po to Russian
+# translation of bootloader.po to Russian
+# LANGUAGE translations for boot loader
+# Copyright (C) 2004 SUSE LINUX AG
+# Copyright (C) 2004 Vdel CREC
+# Andrew Bogatov<bert@bert2.crec.mipt.ru>, 2004.
+# Aleksey Osipov <aliks-os@yandex.ru>, 2006.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: bootloader.ru\n"
+"POT-Creation-Date: 2008-09-26 18:04+0200\n"
+"PO-Revision-Date: 2010-04-10 20:32+0300\n"
+"Last-Translator: Alexander Melentiev <alex239@gmail.com>\n"
+"Language-Team: Russian <opensuse-translation-ru@opensuse.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Lokalize 1.0\n"
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
+
+#. ok button label
+#. txt_ok
+msgid "OK"
+msgstr "OK"
+
+#. cancel button label
+#. txt_cancel
+msgid "Cancel"
+msgstr "Отмена"
+
+#. reboot button label
+#. txt_reboot
+msgid "Reboot"
+msgstr "Перезагрузка"
+
+#. continue button label
+#. txt_continue
+msgid "Continue"
+msgstr "Продолжить"
+
+#. txt_install
+msgid "Installation"
+msgstr "Установка"
+
+#. txt_safe_linux
+msgid "Linux--Safe Settings"
+msgstr "Linux -- безопасные параметры"
+
+#. txt_boot_harddisk
+msgid "Boot from Hard Disk"
+msgstr "Загрузка с жёсткого диска"
+
+#. txt_rescue
+msgid "Rescue System"
+msgstr "Восстановление системы"
+
+#. txt_memtest
+msgid "Memory Test"
+msgstr "Проверка памяти"
+
+#. txt_bootoptions
+msgid "Boot Options"
+msgstr "Параметры загрузки"
+
+#. window title for exit dialog
+#. txt_exit_title (see txt_exit_dialog)
+msgid "Exiting..."
+msgstr "Выход..."
+
+#. txt_exit_dialog
+msgid ""
+"You are leaving the graphical boot menu and\n"
+"starting the text mode interface."
+msgstr ""
+"Вы вышли из графического меню загрузки и\n"
+"запустили интерфейс текстового режима."
+
+#. txt_help
+msgid "Help"
+msgstr "Справка"
+
+#. window title for kernel loading (see txt_load_kernel)
+#. txt_load_kernel_title
+msgid "Starting..."
+msgstr "Запуск..."
+
+#. Keep the three newlines!
+#. txt_load_kernel
+msgid ""
+"Loading Linux Kernel\n"
+"\n"
+"\n"
+msgstr ""
+"Загрузка ядра Linux\n"
+"\n"
+"\n"
+
+#. Keep the three newlines!
+#. txt_load_memtest
+msgid ""
+"Loading memtest86\n"
+"\n"
+"\n"
+msgstr ""
+"Загрузка memtest86\n"
+"\n"
+"\n"
+
+#. info box title
+#. txt_info_title
+msgid "Boot Loader"
+msgstr "Загрузчик"
+
+#. error box title
+#. txt_error_title
+msgid "I/O Error"
+msgstr "Ошибка ввода/вывода"
+
+#. boot disk change dialog title
+#. txt_change_disk_title
+msgid "Change Boot Disk"
+msgstr "Сменить загрузочный диск"
+
+#. txt_insert_disk
+#, c-format
+msgid "Insert boot disk %u."
+msgstr "Вставьте загрузочный диск %u."
+
+#. txt_insert_disk2
+#, c-format
+msgid ""
+"This is boot disk %u.\n"
+"Insert boot disk %u."
+msgstr ""
+"Это загрузочный диск %u.\n"
+"Вставьте загрузочный диск %u."
+
+#. <product> is e.g. SuSE Linux X.Y or Enterprise Server Z
+#. txt_insert_disk3
+#, c-format
+msgid ""
+"This is not a <product> boot disk.\n"
+"Insert boot disk %u."
+msgstr ""
+"Это не загрузочный диск <product>.\n"
+"Вставьте загрузочный диск %u."
+
+#. password dialog title
+#. txt_password_title
+msgid "Password"
+msgstr "Пароль"
+
+#. txt_dud_ready
+msgid "Get your driver update floppy ready."
+msgstr "Подготовьте дискету с драйверами."
+
+#. power off dialog title
+#. txt_power_off_title
+msgid "Power Off"
+msgstr "Выключить питание"
+
+#. txt_power_off
+msgid "Halt the system now?"
+msgstr "Остановить систему?"
+
+#. menu entry for hard disk installation
+#. txt_harddisk
+msgid "Hard Disk"
+msgstr "Жёсткий диск"
+
+#. dialog title for hard disk installation
+#. txt_harddisk_title
+msgid "Hard Disk Installation"
+msgstr "Установка с жёсткого диска"
+
+#. txt_hd_diskdevice
+msgid "Disk Device (Scans All Disks If Empty)\n"
+msgstr "Дисковое устройство (проверить все диски, если не указано)\n"
+
+#. txt_directory
+msgid "Directory\n"
+msgstr "Каталог\n"
+
+#. dialog title for ftp installation
+#. txt_ftp_title
+msgid "FTP Installation"
+msgstr "Установка по FTP"
+
+#. txt_server
+msgid "Server\n"
+msgstr "Сервер\n"
+
+#. txt_password
+msgid "Password\n"
+msgstr "Пароль\n"
+
+#. label for ftp user input
+#. txt_user1
+msgid "User (Anonymous Login If Empty)\n"
+msgstr "Пользователь (анонимный вход, если не указан)\n"
+
+#. dialog title for nfs installation
+#. txt_nfs_title
+msgid "NFS Installation"
+msgstr "Установка по NFS"
+
+#. label for smb user input
+#. txt_user2
+msgid "User (Uses \"guest\" If Empty)\n"
+msgstr "Пользователь (использовать \"guest\", если не указан)\n"
+
+#. dialog title for smb installation
+#. txt_smb_title
+msgid "SMB (Windows Share) Installation"
+msgstr "Установка по SMB (из общей папки Windows)"
+
+#. dialog title for http installation
+#. txt_http_title
+msgid "HTTP Installation"
+msgstr "Установка по HTTP"
+
+#. 'driver' as in '(hardware) driver update'
+#. txt_driver_update
+msgid "Driver"
+msgstr "Драйвер"
+
+#. as in Windows Authentication Domain
+#. txt_domain
+msgid "Domain\n"
+msgstr "Домен\n"
+
+#. button label for other/more options
+#. txt_other_options
+msgid "Other Options"
+msgstr "Другие параметры"
+
+#. label for language selection
+#. txt_language
+msgid "Language"
+msgstr "Язык"
+
+#. txt_yes
+msgid "Yes"
+msgstr "Да"
+
+#. txt_no
+msgid "No"
+msgstr "Нет"
+
+#. menu item for selecting a file
+#. txt_file
+msgid "File"
+msgstr "Файл"
+
+#. input label: share as in "Windows share" (SMB)
+#. txt_share
+msgid "Share\n"
+msgstr "Общая папка\n"
+
+#. txt_zenAuto
+msgid "Automatic Mode"
+msgstr "Автоматический режим"
+
+#. txt_zenManual
+msgid "Manual Mode"
+msgstr "Ручной режим"
+
+#. txt_zenConfig
+msgid "Configure Parameters on ZEN Partition"
+msgstr "Настройка параметров на разделе ZEN"
+
+#. txt_zenInstall
+msgid "Install or Update ZEN Partition"
+msgstr "Установить или обновить раздел ZEN"
+
+#. txt_zenLilo
+msgid "Reinstall ZEN Partition Boot Loader"
+msgstr "Переустановить загрузчик раздела ZEN"
+
+#. txt_zenDisable
+msgid "Disable ZEN Partition"
+msgstr "Отключить раздел ZEN"
+
+#. txt_zenEnable
+msgid "Enable ZEN Partition"
+msgstr "Включить раздел ZEN"
+
+#. video mode menu item
+#. txt_text_mode
+msgid "Text Mode"
+msgstr "Текстовый режим"
+
+#. menu item, like 'memory test'
+#. txt_firmware
+msgid "Firmware Test"
+msgstr "Проверка прошивок"
+
+#. txt_dud_file_msg
+msgid ""
+"To load driver updates directly from CD-ROM,\n"
+"enter the driver update file names (separated\n"
+"by commas ',') here:\n"
+msgstr ""
+"Чтобы напрямую загрузить обновления драйверов с компакт-диска,\n"
+"введите имена файлов обновлений драйверов (разделенные\n"
+"запятыми ','):\n"
+
+#. install source menu title
+#. ** please keep it really short (comparable to the english text) **
+#. txt_install_source
+msgid "Source"
+msgstr "Источник"
+
+#. video mode/display size menu title
+#. ** please keep it really short (comparable to the english text) **
+#. txt_video_mode
+msgid "Video Mode"
+msgstr "Разрешение"
+
+#. driver update dialog title
+#. -> txt_dud_file_msg
+#. txt_driver_update2
+msgid "Driver Update"
+msgstr "Обновление драйверов"
+
+#. menu label for selecting (cpu) architecture
+#. like i386, x86-64, ppc
+#. ** please keep it really short (comparable to the english text) **
+#. txt_arch
+msgid "Arch"
+msgstr "Архитектура"
+
+#. menu label for selecting some (linux) kernel variant
+#. ** please keep it really short (comparable to the english text) **
+#. txt_kernel
+msgid "Kernel"
+msgstr "Ядро"
+
+#. menu item for kernel variant (cf. txt_kernel)
+#. txt_kernel_default
+msgid "Default"
+msgstr "По умолчанию"
+
+#. menu item for kernel variant (cf. txt_kernel)
+#. -> like in txt_safe_linux
+#. txt_kernel_safe
+msgid "Safe Settings"
+msgstr "Безопасные параметры"
+
+#. menu item for kernel variant (cf. txt_kernel)
+#. -> similar to txt_noacpi_install
+#. txt_kernel_noacpi
+msgid "No ACPI"
+msgstr "Без ACPI"
+
+#. menu item for kernel variant (cf. txt_kernel)
+#. -> similar to txt_nolapic_install
+#. txt_kernel_nolapic
+msgid "No Local APIC"
+msgstr "Без локального APIC"
+
+#. main menu: start in system repair mode
+#. txt_repain_system
+msgid "Repair Installed System"
+msgstr "Восстановление установленной системы"
+
+#. menu item
+#. txt_mediacheck
+msgid "Check Installation Media"
+msgstr "Проверка установочного носителя"
+
+#. menu item for keyboard layout (please keep it short)
+#. txt_keyboard
+msgid "Keyboard"
+msgstr "Клавиатура"
+
+#. menu title
+#. txt_dud_download
+msgid "Download Driver Update"
+msgstr "Загрузить обновление драйверов"
+
+#. input label
+#. txt_dud_enter_url
+msgid "Enter Driver Update URL\n"
+msgstr "Введите URL обновления драйверов\n"
+
+#. menu item
+#. txt_http_proxy
+msgid "HTTP Proxy"
+msgstr "HTTP-прокси"
+
+#. menu item
+#. txt_network_config
+msgid "Network Config"
+msgstr "Настройка сети"
+
+#. menu item
+#. txt_no_network
+msgid "No Network"
+msgstr "Нет сети"
+
+#. short menu item for manual network config (NOT some kind of manual)
+#. txt_manual_network
+msgid "Manual"
+msgstr "Вручную"
+
+#. dialog title for manual network config
+#. txt_manual_network_title
+msgid "Manual Network Config"
+msgstr "Ручная настройка сети"
+
+#. label for ip address
+#. txt_host_ip
+msgid "Host IP\n"
+msgstr "IP-адрес узла\n"
+
+#. label for gateway ip
+#. txt_gateway_ip
+msgid "Gateway\n"
+msgstr "Шлюз\n"
+
+#. label for dns domain name (like 'opensuse.org')
+#. txt_domain_name
+msgid "Domain Name\n"
+msgstr "Имя домена\n"
+
+#. label for nameserver list
+#. txt_nameservers
+msgid "Nameservers (separated by ',')\n"
+msgstr "Серверы имён (разделённые ',')\n"
+
+#. label for netmask; 'Host IP' refers to label txt_host_ip above
+#. txt_netmask
+msgid "Netmask\n(or use '/N' notation with Host IP)\n"
+msgstr ""
+"Маска сети\n"
+"(или используйте нотацию '/N' в поле IP-адреса)\n"
+
+#. label for Live CD installation
+#. txt_live_kde
+msgid "openSUSE Live (KDE)"
+msgstr "openSUSE Live (KDE)"
+
+#. label for Live CD installation
+#. txt_live_gnome
+msgid "openSUSE Live (GNOME)"
+msgstr "openSUSE Live (GNOME)"
diff --git a/themes/openSUSE/po/sk.po b/themes/openSUSE/po/sk.po
new file mode 100644
index 0000000..a1aa63d
--- /dev/null
+++ b/themes/openSUSE/po/sk.po
@@ -0,0 +1,448 @@
+# translation of bootloader.po to
+# LANGUAGE translations for boot loader
+# Copyright (C) 2004 SUSE LINUX AG
+# , 2004.
+# , 2004.
+# Andrej Kacian <andrej@kacian.sk>, 2005.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: bootloader\n"
+"POT-Creation-Date: \n"
+"PO-Revision-Date: 2009-10-07 21:13+0100\n"
+"Last-Translator: Rastislav Krupanský <rastislav.krupansky@gmail.com>\n"
+"Language-Team: Slovak <sk-i18n@lists.linux.sk>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.11.4\n"
+"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
+"X-Poedit-Language: Slovak\n"
+"X-Poedit-Country: SLOVAKIA\n"
+
+#. ok button label
+#. txt_ok
+msgid "OK"
+msgstr "OK"
+
+#. cancel button label
+#. txt_cancel
+msgid "Cancel"
+msgstr "Zrušiť"
+
+#. reboot button label
+#. txt_reboot
+msgid "Reboot"
+msgstr "Reštartovať"
+
+#. continue button label
+#. txt_continue
+msgid "Continue"
+msgstr "Pokračovať"
+
+#. txt_install
+msgid "Installation"
+msgstr "Inštalácia"
+
+#. txt_safe_linux
+msgid "Linux--Safe Settings"
+msgstr "Linux - Bezpečné nastavenie"
+
+#. txt_boot_harddisk
+msgid "Boot from Hard Disk"
+msgstr "Spustiť systém z pevného disku"
+
+#. txt_rescue
+msgid "Rescue System"
+msgstr "Záchranný systém"
+
+#. txt_memtest
+msgid "Memory Test"
+msgstr "Test pamäte"
+
+#. txt_bootoptions
+msgid "Boot Options"
+msgstr "Možnosti štartu"
+
+#. window title for exit dialog
+#. txt_exit_title (see txt_exit_dialog)
+msgid "Exiting..."
+msgstr "Končím..."
+
+#. txt_exit_dialog
+msgid ""
+"You are leaving the graphical boot menu and\n"
+"starting the text mode interface."
+msgstr ""
+"Opúšťate grafické menu štartu a spúšťate\n"
+"textové používateľské rozhranie."
+
+#. txt_help
+msgid "Help"
+msgstr "Pomocník"
+
+#. window title for kernel loading (see txt_load_kernel)
+#. txt_load_kernel_title
+msgid "Starting..."
+msgstr "Spúšťam..."
+
+#. Keep the three newlines!
+#. txt_load_kernel
+msgid ""
+"Loading Linux Kernel\n"
+"\n"
+"\n"
+msgstr ""
+"Načítavam linuxové jadro\n"
+"\n"
+"\n"
+
+#. Keep the three newlines!
+#. txt_load_memtest
+msgid ""
+"Loading memtest86\n"
+"\n"
+"\n"
+msgstr ""
+"Načítavam memtest86\n"
+"\n"
+"\n"
+
+#. info box title
+#. txt_info_title
+msgid "Boot Loader"
+msgstr "Správca štartu"
+
+#. error box title
+#. txt_error_title
+msgid "I/O Error"
+msgstr "Chyba vstupu/výstupu"
+
+#. boot disk change dialog title
+#. txt_change_disk_title
+msgid "Change Boot Disk"
+msgstr "Zmena štartovacej diskety"
+
+#. txt_insert_disk
+#, c-format
+msgid "Insert boot disk %u."
+msgstr "Prosím, vložte štartovaciu disketu %u."
+
+#. txt_insert_disk2
+#, c-format
+msgid ""
+"This is boot disk %u.\n"
+"Insert boot disk %u."
+msgstr ""
+"Toto je štartovacia disketa %u.\n"
+"Prosím, vložte štartovaciu disketu %u."
+
+#. <product> is e.g. SuSE Linux X.Y or Enterprise Server Z
+#. txt_insert_disk3
+#, c-format
+msgid ""
+"This is not a <product> boot disk.\n"
+"Insert boot disk %u."
+msgstr ""
+"Toto nie je štartovacia disketa <product>.\n"
+"Prosím, vložte štartovaciu disketu %u."
+
+#. password dialog title
+#. txt_password_title
+msgid "Password"
+msgstr "Heslo"
+
+#. txt_dud_ready
+msgid "Get your driver update floppy ready."
+msgstr "Prosím, pripravte si disketu s aktualizovanými ovládačmi."
+
+#. power off dialog title
+#. txt_power_off_title
+msgid "Power Off"
+msgstr "Vypnúť"
+
+#. txt_power_off
+msgid "Halt the system now?"
+msgstr "Chcete vypnúť počítač teraz?"
+
+#. menu entry for hard disk installation
+#. txt_harddisk
+msgid "Hard Disk"
+msgstr "Pevný disk"
+
+#. dialog title for hard disk installation
+#. txt_harddisk_title
+msgid "Hard Disk Installation"
+msgstr "Inštalácia na pevný disk"
+
+#. txt_hd_diskdevice
+msgid "Disk Device (Scans All Disks If Empty)\n"
+msgstr "Diskové zariadenie (prehľadá všetky disky, ak necháte prázdne)\n"
+
+#. txt_directory
+msgid "Directory\n"
+msgstr "Adresár\n"
+
+#. dialog title for ftp installation
+#. txt_ftp_title
+msgid "FTP Installation"
+msgstr "FTP Inštalácia"
+
+#. txt_server
+msgid "Server\n"
+msgstr "Server\n"
+
+#. txt_password
+msgid "Password\n"
+msgstr "Heslo\n"
+
+#. label for ftp user input
+#. txt_user1
+msgid "User (Anonymous Login If Empty)\n"
+msgstr "Používateľ (ak necháte prázdne, použije anonymné prihlásenie)\n"
+
+#. dialog title for nfs installation
+#. txt_nfs_title
+msgid "NFS Installation"
+msgstr "NFS Inštalácia"
+
+#. label for smb user input
+#. txt_user2
+msgid "User (Uses \"guest\" If Empty)\n"
+msgstr "Používateľ (ak necháte prázdne, použije \"guest\")\n"
+
+#. dialog title for smb installation
+#. txt_smb_title
+msgid "SMB (Windows Share) Installation"
+msgstr "SMB (Windows zdieľanie) Inštalácia"
+
+#. dialog title for http installation
+#. txt_http_title
+msgid "HTTP Installation"
+msgstr "HTTP Inštalácia"
+
+#. 'driver' as in '(hardware) driver update'
+#. txt_driver_update
+msgid "Driver"
+msgstr "Ovládač"
+
+#. as in Windows Authentication Domain
+#. txt_domain
+msgid "Domain\n"
+msgstr "Doména\n"
+
+#. button label for other/more options
+#. txt_other_options
+msgid "Other Options"
+msgstr "Ďalšie voľby"
+
+#. txt_language
+msgid "Language"
+msgstr "Jazyk"
+
+#. txt_yes
+msgid "Yes"
+msgstr "Áno"
+
+#. txt_no
+msgid "No"
+msgstr "Nie"
+
+#. menu item for selecting a file
+#. txt_file
+msgid "File"
+msgstr "Súbor"
+
+#. input label: share as in "Windows share" (SMB)
+#. txt_share
+msgid "Share\n"
+msgstr "Zdieľanie\n"
+
+#. txt_zenAuto
+msgid "Automatic Mode"
+msgstr "Automatický režim"
+
+#. txt_zenManual
+msgid "Manual Mode"
+msgstr "Ručný režim"
+
+#. txt_zenConfig
+msgid "Configure Parameters on ZEN Partition"
+msgstr "Nastaviť parametre pre ZENový diskový oddiel"
+
+#. txt_zenInstall
+msgid "Install or Update ZEN Partition"
+msgstr "Inštalovať alebo obnoviť ZENový diskový oddiel"
+
+#. txt_zenLilo
+msgid "Reinstall ZEN Partition Boot Loader"
+msgstr "Preinštalovať spúšťač systému pre ZENový oddiel"
+
+#. txt_zenDisable
+msgid "Disable ZEN Partition"
+msgstr "Zakázať ZENový diskový oddiel"
+
+#. txt_zenEnable
+msgid "Enable ZEN Partition"
+msgstr "Povoliť ZENový diskový oddiel"
+
+#. video mode menu item
+#. txt_text_mode
+msgid "Text Mode"
+msgstr "Textový režim"
+
+#. menu item, like 'memory test'
+#. txt_firmware
+msgid "Firmware Test"
+msgstr "Test firmvéru"
+
+#. txt_dud_file_msg
+msgid ""
+"To load driver updates directly from CD-ROM,\n"
+"enter the driver update file names (separated\n"
+"by commas ',') here:\n"
+msgstr ""
+"Ak chcete nahrať aktualizované ovládače priamo z CD,\n"
+"zadajte názvy súborov ovládačov oddelené čiarkami ','\n"
+"sem:\n"
+
+#. install source menu title
+#. ** please keep it really short (comparable to the english text) **
+#. txt_install_source
+msgid "Source"
+msgstr "Zdroj"
+
+#. video mode/display size menu title
+#. ** please keep it really short (comparable to the english text) **
+#. txt_video_mode
+msgid "Video Mode"
+msgstr "Zobrazovací režim"
+
+#. driver update dialog title
+#. -> txt_dud_file_msg
+#. txt_driver_update2
+msgid "Driver Update"
+msgstr "Aktualizácia ovládačov"
+
+#. menu label for selecting (cpu) architecture
+#. like i386, x86-64, ppc
+#. ** please keep it really short (comparable to the english text) **
+#. txt_arch
+msgid "Arch"
+msgstr "Arch"
+
+#. menu label for selecting some (linux) kernel variant
+#. ** please keep it really short (comparable to the english text) **
+#. txt_kernel
+msgid "Kernel"
+msgstr "Jadro"
+
+#. menu item for kernel variant (cf. txt_kernel)
+#. txt_kernel_default
+msgid "Default"
+msgstr "Predvolené"
+
+#. menu item for kernel variant (cf. txt_kernel)
+#. -> like in txt_safe_linux
+#. txt_kernel_safe
+msgid "Safe Settings"
+msgstr "Záchranný režim"
+
+#. menu item for kernel variant (cf. txt_kernel)
+#. -> similar to txt_noacpi_install
+#. txt_kernel_noacpi
+msgid "No ACPI"
+msgstr "Bez ACPI"
+
+#. menu item for kernel variant (cf. txt_kernel)
+#. -> similar to txt_nolapic_install
+#. txt_kernel_nolapic
+msgid "No Local APIC"
+msgstr "Bez Lokálneho APIC"
+
+#. main menu: start in system repair mode
+#. txt_repain_system
+msgid "Repair Installed System"
+msgstr "Opraviť nainštalovaný systém"
+
+#. menu item
+#. txt_mediacheck
+msgid "Check Installation Media"
+msgstr "Kontrola integrity média"
+
+#. menu item for keyboard layout (please keep it short)
+#. txt_keyboard
+msgid "Keyboard"
+msgstr "Klávesnica"
+
+#. menu title
+#. txt_dud_download
+msgid "Download Driver Update"
+msgstr "Stiahnuť aktualizovaný ovládač"
+
+#. input label
+#. txt_dud_enter_url
+msgid "Enter Driver Update URL\n"
+msgstr "Zadajte URL aktualizácie ovládača\n"
+
+#. menu item
+#. txt_http_proxy
+msgid "HTTP Proxy"
+msgstr "HTTP proxy"
+
+#. menu item
+#. txt_network_config
+msgid "Network Config"
+msgstr "Nastavenie siete"
+
+#. menu item
+#. txt_no_network
+msgid "No Network"
+msgstr "Žiadna sieť"
+
+#. short menu item for manual network config (NOT some kind of manual)
+#. txt_manual_network
+msgid "Manual"
+msgstr "Ručne"
+
+#. dialog title for manual network config
+#. txt_manual_network_title
+msgid "Manual Network Config"
+msgstr "Ručné nastavenie siete"
+
+#. label for ip address
+#. txt_host_ip
+msgid "Host IP\n"
+msgstr "IP hostiteľa\n"
+
+#. label for gateway ip
+#. txt_gateway_ip
+msgid "Gateway\n"
+msgstr "Brána\n"
+
+#. label for dns domain name (like 'opensuse.org')
+#. txt_domain_name
+msgid "Domain Name\n"
+msgstr "Názov domény\n"
+
+#. label for nameserver list
+#. txt_nameservers
+msgid "Nameservers (separated by ',')\n"
+msgstr "Menné servery (oddelené s ',')\n"
+
+#. label for netmask; 'Host IP' refers to label txt_host_ip above
+#. txt_netmask
+msgid "Netmask\n(or use '/N' notation with Host IP)\n"
+msgstr ""
+"Sieťová maska\n"
+"(alebo '/N' použite notáciu s IP hostiteľa)\n"
+
+#. label for Live CD installation
+#. txt_live_kde
+msgid "openSUSE Live (KDE)"
+msgstr "openSUSE Live (KDE)"
+
+#. label for Live CD installation
+#. txt_live_gnome
+msgid "openSUSE Live (GNOME)"
+msgstr "openSUSE Live (GNOME)"
diff --git a/themes/openSUSE/po/sl.po b/themes/openSUSE/po/sl.po
new file mode 100644
index 0000000..7ad2951
--- /dev/null
+++ b/themes/openSUSE/po/sl.po
@@ -0,0 +1,450 @@
+# translation of sl.po to Slovenščina
+# translation of bootloader.sl_SI.po to Slovenscina
+# translation of sl_SI.po to Slovenscina
+# LANGUAGE translations for boot loader
+# Copyright (C) 2004 SUSE LINUX AG
+# Janez Krek <janez.krek@euroteh.si>, 2004, 2005.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: sl\n"
+"PO-Revision-Date: 2005-08-21 00:23+0200\n"
+"Last-Translator: Janez Krek <janez.krek@euroteh.si>\n"
+"Language-Team: Slovenščina <sl@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.3.1\n"
+"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);\n"
+"n%100==4 ? 2 : 3);\n"
+
+#. ok button label
+#. txt_ok
+msgid "OK"
+msgstr "V redu"
+
+#. cancel button label
+#. txt_cancel
+msgid "Cancel"
+msgstr "Prekini"
+
+#. reboot button label
+#. txt_reboot
+msgid "Reboot"
+msgstr "Ponovni zagon"
+
+#. continue button label
+#. txt_continue
+msgid "Continue"
+msgstr "Nadaljevanje"
+
+#. txt_install
+msgid "Installation"
+msgstr "Namestitev"
+
+#. txt_safe_linux
+msgid "Linux--Safe Settings"
+msgstr "Linux--varne nastavitve"
+
+#. txt_boot_harddisk
+msgid "Boot from Hard Disk"
+msgstr "Zagon s trdega diska"
+
+#. txt_rescue
+msgid "Rescue System"
+msgstr "Sistem za reševanje"
+
+#. txt_memtest
+msgid "Memory Test"
+msgstr "Testiranje pomnilnika"
+
+#. txt_bootoptions
+msgid "Boot Options"
+msgstr "Možnosti pri zagonu"
+
+#. window title for exit dialog
+#. txt_exit_title (see txt_exit_dialog)
+msgid "Exiting..."
+msgstr "Zaključevanje..."
+
+#. txt_exit_dialog
+msgid ""
+"You are leaving the graphical boot menu and\n"
+"starting the text mode interface."
+msgstr ""
+"Zapustili boste grafični zagonski menu in\n"
+"nadaljevali v tekstovnem načinu."
+
+#. txt_help
+msgid "Help"
+msgstr "Pomoč"
+
+#. window title for kernel loading (see txt_load_kernel)
+#. txt_load_kernel_title
+msgid "Starting..."
+msgstr "Zagon..."
+
+#. Keep the three newlines!
+#. txt_load_kernel
+msgid ""
+"Loading Linux Kernel\n"
+"\n"
+"\n"
+msgstr ""
+"Nalaganje Linux jedra\n"
+"\n"
+"\n"
+
+#. Keep the three newlines!
+#. txt_load_memtest
+msgid ""
+"Loading memtest86\n"
+"\n"
+"\n"
+msgstr ""
+"Nalaganje memtest86\n"
+"\n"
+"\n"
+
+#. info box title
+#. txt_info_title
+#, fuzzy
+msgid "Boot Loader"
+msgstr "Zagonski nalagalnik"
+
+#. error box title
+#. txt_error_title
+#, fuzzy
+msgid "I/O Error"
+msgstr "V/I napaka"
+
+#. boot disk change dialog title
+#. txt_change_disk_title
+msgid "Change Boot Disk"
+msgstr "Zamenjava zagonske diskete"
+
+#. txt_insert_disk
+#, c-format
+msgid "Insert boot disk %u."
+msgstr "Vstavite zagonsko disketo %u."
+
+#. txt_insert_disk2
+#, c-format
+msgid ""
+"This is boot disk %u.\n"
+"Insert boot disk %u."
+msgstr ""
+"To je zagonska disketa %u.\n"
+"Vstavite zagonsko disketo %u."
+
+#. <product> is e.g. SuSE Linux X.Y or Enterprise Server Z
+#. txt_insert_disk3
+#, c-format,fuzzy
+msgid ""
+"This is not a <product> boot disk.\n"
+"Insert boot disk %u."
+msgstr ""
+"To ni zagonska disketa za <product>.\n"
+"Prosim vstavite zagonsko disketo %u."
+
+#. password dialog title
+#. txt_password_title
+msgid "Password"
+msgstr "Geslo"
+
+#. txt_dud_ready
+msgid "Get your driver update floppy ready."
+msgstr "Prosim pripravite disketo za posodobitev gonilnikov."
+
+#. power off dialog title
+#. txt_power_off_title
+msgid "Power Off"
+msgstr "Zaustavitev sistema"
+
+#. txt_power_off
+msgid "Halt the system now?"
+msgstr "Želite sedaj zaustaviti sistem?"
+
+#. menu entry for hard disk installation
+#. txt_harddisk
+msgid "Hard Disk"
+msgstr "Trdi disk"
+
+#. dialog title for hard disk installation
+#. txt_harddisk_title
+msgid "Hard Disk Installation"
+msgstr "Namestitev na trdi disk"
+
+#. txt_hd_diskdevice
+#, fuzzy
+msgid "Disk Device (Scans All Disks If Empty)\n"
+msgstr "Naprava (če je polje prazno, pregled vseh diskov)\n"
+
+#. txt_directory
+msgid "Directory\n"
+msgstr "Imenik\n"
+
+#. dialog title for ftp installation
+#. txt_ftp_title
+msgid "FTP Installation"
+msgstr "Namestitev preko FTP"
+
+#. txt_server
+msgid "Server\n"
+msgstr "Strežnik\n"
+
+#. txt_password
+msgid "Password\n"
+msgstr "Geslo\n"
+
+#. label for ftp user input
+#. txt_user1
+#, fuzzy
+msgid "User (Anonymous Login If Empty)\n"
+msgstr "Uporabnik (če je polje prazno, anonimna prijava)\n"
+
+#. dialog title for nfs installation
+#. txt_nfs_title
+msgid "NFS Installation"
+msgstr "Namestitev preko NFS"
+
+#. label for smb user input
+#. txt_user2
+#, fuzzy
+msgid "User (Uses \"guest\" If Empty)\n"
+msgstr "Uporabnik (če je polje prazno, uporabnik \"guest\")\n"
+
+#. dialog title for smb installation
+#. txt_smb_title
+msgid "SMB (Windows Share) Installation"
+msgstr "Namestitev preko SMB (Windows vir v skupini rabi)"
+
+#. dialog title for http installation
+#. txt_http_title
+msgid "HTTP Installation"
+msgstr "Namestitev preko HTTP"
+
+#. 'driver' as in '(hardware) driver update'
+#. txt_driver_update
+msgid "Driver"
+msgstr "Gonilnik"
+
+#. as in Windows Authentication Domain
+#. txt_domain
+msgid "Domain\n"
+msgstr "Domena\n"
+
+#. button label for other/more options
+#. txt_other_options
+msgid "Other Options"
+msgstr "Ostale možnosti"
+
+#. label for language selection
+#. txt_language
+msgid "Language"
+msgstr "Jezik"
+
+#. txt_yes
+msgid "Yes"
+msgstr "Da"
+
+#. txt_no
+msgid "No"
+msgstr "Ne"
+
+#. menu item for selecting a file
+#. txt_file
+msgid "File"
+msgstr ""
+
+#. input label: share as in "Windows share" (SMB)
+#. txt_share
+msgid "Share\n"
+msgstr ""
+
+#. txt_zenAuto
+msgid "Automatic Mode"
+msgstr ""
+
+#. txt_zenManual
+#, fuzzy
+msgid "Manual Mode"
+msgstr "Način z dvema izhodoma"
+
+#. txt_zenConfig
+msgid "Configure Parameters on ZEN Partition"
+msgstr ""
+
+#. txt_zenInstall
+#, fuzzy
+msgid "Install or Update ZEN Partition"
+msgstr "Nameščene posodobitve: "
+
+#. txt_zenLilo
+msgid "Reinstall ZEN Partition Boot Loader"
+msgstr ""
+
+#. txt_zenDisable
+msgid "Disable ZEN Partition"
+msgstr ""
+
+#. txt_zenEnable
+msgid "Enable ZEN Partition"
+msgstr ""
+
+#. video mode menu item
+#. txt_text_mode
+#, fuzzy
+msgid "Text Mode"
+msgstr "Model miške"
+
+#. menu item, like 'memory test'
+#. txt_firmware
+msgid "Firmware Test"
+msgstr ""
+
+#. txt_dud_file_msg
+msgid ""
+"To load driver updates directly from CD-ROM,\n"
+"enter the driver update file names (separated\n"
+"by commas ',') here:\n"
+msgstr ""
+
+#. install source menu title
+#. ** please keep it really short (comparable to the english text) **
+#. txt_install_source
+msgid "Source"
+msgstr "Izvor"
+
+#. video mode/display size menu title
+#. ** please keep it really short (comparable to the english text) **
+#. txt_video_mode
+msgid "Video Mode"
+msgstr ""
+
+#. driver update dialog title
+#. -> txt_dud_file_msg
+#. txt_driver_update2
+msgid "Driver Update"
+msgstr ""
+
+#. menu label for selecting (cpu) architecture
+#. like i386, x86-64, ppc
+#. ** please keep it really short (comparable to the english text) **
+#. txt_arch
+msgid "Arch"
+msgstr ""
+
+#. menu label for selecting some (linux) kernel variant
+#. ** please keep it really short (comparable to the english text) **
+#. txt_kernel
+msgid "Kernel"
+msgstr ""
+
+#. menu item for kernel variant (cf. txt_kernel)
+#. txt_kernel_default
+msgid "Default"
+msgstr ""
+
+#. menu item for kernel variant (cf. txt_kernel)
+#. -> like in txt_safe_linux
+#. txt_kernel_safe
+msgid "Safe Settings"
+msgstr ""
+
+#. menu item for kernel variant (cf. txt_kernel)
+#. -> similar to txt_noacpi_install
+#. txt_kernel_noacpi
+msgid "No ACPI"
+msgstr ""
+
+#. menu item for kernel variant (cf. txt_kernel)
+#. -> similar to txt_nolapic_install
+#. txt_kernel_nolapic
+msgid "No Local APIC"
+msgstr ""
+
+#. main menu: start in system repair mode
+#. txt_repain_system
+msgid "Repair Installed System"
+msgstr ""
+
+#. menu item
+#. txt_mediacheck
+msgid "Check Installation Media"
+msgstr ""
+
+#. menu item for keyboard layout (please keep it short)
+#. txt_keyboard
+msgid "Keyboard"
+msgstr "Tipkovnca"
+
+#. menu title
+#. txt_dud_download
+msgid "Download Driver Update"
+msgstr ""
+
+#. input label
+#. txt_dud_enter_url
+msgid "Enter Driver Update URL\n"
+msgstr ""
+
+#. menu item
+#. txt_http_proxy
+msgid "HTTP Proxy"
+msgstr ""
+
+#. menu item
+#. txt_network_config
+msgid "Network Config"
+msgstr ""
+
+#. menu item
+#. txt_no_network
+msgid "No Network"
+msgstr ""
+
+#. short menu item for manual network config (NOT some kind of manual)
+#. txt_manual_network
+msgid "Manual"
+msgstr ""
+
+#. dialog title for manual network config
+#. txt_manual_network_title
+msgid "Manual Network Config"
+msgstr ""
+
+#. label for ip address
+#. txt_host_ip
+msgid "Host IP\n"
+msgstr ""
+
+#. label for gateway ip
+#. txt_gateway_ip
+msgid "Gateway\n"
+msgstr ""
+
+#. label for dns domain name (like 'opensuse.org')
+#. txt_domain_name
+msgid "Domain Name\n"
+msgstr ""
+
+#. label for nameserver list
+#. txt_nameservers
+msgid "Nameservers (separated by ',')\n"
+msgstr ""
+
+#. label for netmask; 'Host IP' refers to label txt_host_ip above
+#. txt_netmask
+msgid "Netmask\n(or use '/N' notation with Host IP)\n"
+msgstr ""
+
+#. label for Live CD installation
+#. txt_live_kde
+msgid "openSUSE Live (KDE)"
+msgstr ""
+
+#. label for Live CD installation
+#. txt_live_gnome
+msgid "openSUSE Live (GNOME)"
+msgstr ""
diff --git a/themes/openSUSE/po/sr.po b/themes/openSUSE/po/sr.po
new file mode 100644
index 0000000..32e65ae
--- /dev/null
+++ b/themes/openSUSE/po/sr.po
@@ -0,0 +1,440 @@
+# Serbian translations for boot loader
+# Copyright (C) 2005 SUSE Linux GmbH
+# Copyright © 2005 Danilo Segan <danilo@gnome.org>
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: bootloader\n"
+"PO-Revision-Date: 2007-09-30 01:20+0200\n"
+"Last-Translator: Жарко Михајловић <developer@beotel.net>\n"
+"Language-Team: Serbian (Српски језик) <sr@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.11.4\n"
+
+#. ok button label
+#. txt_ok
+msgid "OK"
+msgstr "У реду"
+
+#. cancel button label
+#. txt_cancel
+msgid "Cancel"
+msgstr "Одустани"
+
+#. reboot button label
+#. txt_reboot
+msgid "Reboot"
+msgstr "Ресетуј"
+
+#. continue button label
+#. txt_continue
+msgid "Continue"
+msgstr "Настави"
+
+#. txt_install
+msgid "Installation"
+msgstr "Инсталација"
+
+#. txt_safe_linux
+msgid "Linux--Safe Settings"
+msgstr "Линукс — безбедна подешавања"
+
+#. txt_boot_harddisk
+msgid "Boot from Hard Disk"
+msgstr "Покрени са тврдог диска"
+
+#. txt_rescue
+msgid "Rescue System"
+msgstr "Спасилачки систем"
+
+#. txt_memtest
+msgid "Memory Test"
+msgstr "Провера меморије"
+
+#. txt_bootoptions
+msgid "Boot Options"
+msgstr "Опције за покретање"
+
+#. window title for exit dialog
+#. txt_exit_title (see txt_exit_dialog)
+msgid "Exiting..."
+msgstr "Завршавам..."
+
+#. txt_exit_dialog
+msgid ""
+"You are leaving the graphical boot menu and\n"
+"starting the text mode interface."
+msgstr ""
+"Напуштате графички мени за покретање и\n"
+"покрећете текстуално сучеље."
+
+#. txt_help
+msgid "Help"
+msgstr "Помоћ"
+
+#. window title for kernel loading (see txt_load_kernel)
+#. txt_load_kernel_title
+msgid "Starting..."
+msgstr "Покрећем..."
+
+#. Keep the three newlines!
+#. txt_load_kernel
+msgid ""
+"Loading Linux Kernel\n"
+"\n"
+"\n"
+msgstr ""
+"Учитавам Линукс језгро\n"
+"\n"
+"\n"
+
+#. Keep the three newlines!
+#. txt_load_memtest
+msgid ""
+"Loading memtest86\n"
+"\n"
+"\n"
+msgstr ""
+"Учитавам memtest86\n"
+"\n"
+"\n"
+
+#. info box title
+#. txt_info_title
+msgid "Boot Loader"
+msgstr "Покретач система"
+
+#. error box title
+#. txt_error_title
+msgid "I/O Error"
+msgstr "У/И грешка"
+
+#. boot disk change dialog title
+#. txt_change_disk_title
+msgid "Change Boot Disk"
+msgstr "Промените диск за покретање"
+
+#. txt_insert_disk
+#, c-format
+msgid "Insert boot disk %u."
+msgstr "Уметните диск за покретање %u."
+
+#. txt_insert_disk2
+#, c-format
+msgid ""
+"This is boot disk %u.\n"
+"Insert boot disk %u."
+msgstr ""
+"Ово је диск за покретање %u.\n"
+"Уметните диск за покретање %u."
+
+#. <product> is e.g. SuSE Linux X.Y or Enterprise Server Z
+#. txt_insert_disk3
+#, c-format
+msgid ""
+"This is not a <product> boot disk.\n"
+"Insert boot disk %u."
+msgstr ""
+"Ово није диск за покретање <product>.\n"
+"Уметните диск за покретање %u."
+
+#. password dialog title
+#. txt_password_title
+msgid "Password"
+msgstr "Лозинка"
+
+#. txt_dud_ready
+msgid "Get your driver update floppy ready."
+msgstr "Припремите вашу дискету са освежењем драјвера."
+
+#. power off dialog title
+#. txt_power_off_title
+msgid "Power Off"
+msgstr "Угаси"
+
+#. txt_power_off
+msgid "Halt the system now?"
+msgstr "Сада угасити систем?"
+
+#. menu entry for hard disk installation
+#. txt_harddisk
+msgid "Hard Disk"
+msgstr "Тврди диск"
+
+#. dialog title for hard disk installation
+#. txt_harddisk_title
+msgid "Hard Disk Installation"
+msgstr "Инсталација на тврди диск"
+
+#. txt_hd_diskdevice
+msgid "Disk Device (Scans All Disks If Empty)\n"
+msgstr "Диск (прегледај све дискове ако је празно)\n"
+
+#. txt_directory
+msgid "Directory\n"
+msgstr "Директоријум\n"
+
+#. dialog title for ftp installation
+#. txt_ftp_title
+msgid "FTP Installation"
+msgstr "FTP инсталација"
+
+#. txt_server
+msgid "Server\n"
+msgstr "Сервер\n"
+
+#. txt_password
+msgid "Password\n"
+msgstr "Лозинка\n"
+
+#. label for ftp user input
+#. txt_user1
+msgid "User (Anonymous Login If Empty)\n"
+msgstr "Корсиник (анонимна пријава ако је празно)\n"
+
+#. dialog title for nfs installation
+#. txt_nfs_title
+msgid "NFS Installation"
+msgstr "NFS инсталација"
+
+#. label for smb user input
+#. txt_user2
+msgid "User (Uses \"guest\" If Empty)\n"
+msgstr "Корисник (користи „guest“ ако је празно)\n"
+
+#. dialog title for smb installation
+#. txt_smb_title
+msgid "SMB (Windows Share) Installation"
+msgstr "SMB (дељени Windows диск) инсталација"
+
+#. dialog title for http installation
+#. txt_http_title
+msgid "HTTP Installation"
+msgstr "HTTP инсталација"
+
+#. 'driver' as in '(hardware) driver update'
+#. txt_driver_update
+msgid "Driver"
+msgstr "Драјвер"
+
+#. as in Windows Authentication Domain
+#. txt_domain
+msgid "Domain\n"
+msgstr "Домен\n"
+
+#. button label for other/more options
+#. txt_other_options
+msgid "Other Options"
+msgstr "Остале опције"
+
+#. label for language selection
+#. txt_language
+msgid "Language"
+msgstr "Језик"
+
+#. txt_yes
+msgid "Yes"
+msgstr "Да"
+
+#. txt_no
+msgid "No"
+msgstr "Не"
+
+#. menu item for selecting a file
+#. txt_file
+msgid "File"
+msgstr "Датотека"
+
+#. input label: share as in "Windows share" (SMB)
+#. txt_share
+msgid "Share\n"
+msgstr "Дељено\n"
+
+#. txt_zenAuto
+msgid "Automatic Mode"
+msgstr "Аутоматски режим"
+
+#. txt_zenManual
+msgid "Manual Mode"
+msgstr "Ручни режим"
+
+#. txt_zenConfig
+msgid "Configure Parameters on ZEN Partition"
+msgstr "Подеси параметре ZEN партиције"
+
+#. txt_zenInstall
+msgid "Install or Update ZEN Partition"
+msgstr "Инсталирај или ажурирај ZEN партицију"
+
+#. txt_zenLilo
+msgid "Reinstall ZEN Partition Boot Loader"
+msgstr "Реинсталирај ZEN Boot Loader"
+
+#. txt_zenDisable
+msgid "Disable ZEN Partition"
+msgstr "Онемогући ZEN партицију"
+
+#. txt_zenEnable
+msgid "Enable ZEN Partition"
+msgstr "Омогући ZEN партицију"
+
+#. video mode menu item
+#. txt_text_mode
+msgid "Text Mode"
+msgstr "Текст режим"
+
+#. menu item, like 'memory test'
+#. txt_firmware
+msgid "Firmware Test"
+msgstr "Firmware тест"
+
+#. txt_dud_file_msg
+msgid ""
+"To load driver updates directly from CD-ROM,\n"
+"enter the driver update file names (separated\n"
+"by commas ',') here:\n"
+msgstr ""
+"Да учитате нове драјвере са CD-ROM-а,\n"
+"упишите имена нових фајлова (одвојена\n"
+"зарезима ',') овде:\n"
+
+#. install source menu title
+#. ** please keep it really short (comparable to the english text) **
+#. txt_install_source
+msgid "Source"
+msgstr "Извор"
+
+#. video mode/display size menu title
+#. ** please keep it really short (comparable to the english text) **
+#. txt_video_mode
+msgid "Video Mode"
+msgstr "Видео режим"
+
+#. driver update dialog title
+#. -> txt_dud_file_msg
+#. txt_driver_update2
+msgid "Driver Update"
+msgstr "Ажурирање драјвера"
+
+#. menu label for selecting (cpu) architecture
+#. like i386, x86-64, ppc
+#. ** please keep it really short (comparable to the english text) **
+#. txt_arch
+msgid "Arch"
+msgstr "Арх."
+
+#. menu label for selecting some (linux) kernel variant
+#. ** please keep it really short (comparable to the english text) **
+#. txt_kernel
+msgid "Kernel"
+msgstr "Језгро"
+
+#. menu item for kernel variant (cf. txt_kernel)
+#. txt_kernel_default
+msgid "Default"
+msgstr "Подразумевано"
+
+#. menu item for kernel variant (cf. txt_kernel)
+#. -> like in txt_safe_linux
+#. txt_kernel_safe
+msgid "Safe Settings"
+msgstr "Безбедна подешавања"
+
+#. menu item for kernel variant (cf. txt_kernel)
+#. -> similar to txt_noacpi_install
+#. txt_kernel_noacpi
+msgid "No ACPI"
+msgstr "Без ACPI"
+
+#. menu item for kernel variant (cf. txt_kernel)
+#. -> similar to txt_nolapic_install
+#. txt_kernel_nolapic
+msgid "No Local APIC"
+msgstr "Без локалног APIC"
+
+#. main menu: start in system repair mode
+#. txt_repain_system
+msgid "Repair Installed System"
+msgstr "Поправи систем"
+
+#. menu item
+#. txt_mediacheck
+msgid "Check Installation Media"
+msgstr ""
+
+#. menu item for keyboard layout (please keep it short)
+#. txt_keyboard
+msgid "Keyboard"
+msgstr ""
+
+#. menu title
+#. txt_dud_download
+msgid "Download Driver Update"
+msgstr ""
+
+#. input label
+#. txt_dud_enter_url
+msgid "Enter Driver Update URL\n"
+msgstr ""
+
+#. menu item
+#. txt_http_proxy
+msgid "HTTP Proxy"
+msgstr ""
+
+#. menu item
+#. txt_network_config
+msgid "Network Config"
+msgstr ""
+
+#. menu item
+#. txt_no_network
+msgid "No Network"
+msgstr ""
+
+#. short menu item for manual network config (NOT some kind of manual)
+#. txt_manual_network
+msgid "Manual"
+msgstr ""
+
+#. dialog title for manual network config
+#. txt_manual_network_title
+msgid "Manual Network Config"
+msgstr ""
+
+#. label for ip address
+#. txt_host_ip
+msgid "Host IP\n"
+msgstr ""
+
+#. label for gateway ip
+#. txt_gateway_ip
+msgid "Gateway\n"
+msgstr ""
+
+#. label for dns domain name (like 'opensuse.org')
+#. txt_domain_name
+msgid "Domain Name\n"
+msgstr ""
+
+#. label for nameserver list
+#. txt_nameservers
+msgid "Nameservers (separated by ',')\n"
+msgstr ""
+
+#. label for netmask; 'Host IP' refers to label txt_host_ip above
+#. txt_netmask
+msgid "Netmask\n(or use '/N' notation with Host IP)\n"
+msgstr ""
+
+#. label for Live CD installation
+#. txt_live_kde
+msgid "openSUSE Live (KDE)"
+msgstr ""
+
+#. label for Live CD installation
+#. txt_live_gnome
+msgid "openSUSE Live (GNOME)"
+msgstr ""
diff --git a/themes/openSUSE/po/sv.po b/themes/openSUSE/po/sv.po
new file mode 100644
index 0000000..d7f2d17
--- /dev/null
+++ b/themes/openSUSE/po/sv.po
@@ -0,0 +1,442 @@
+# Copyright (C) 2004 SUSE LINUX AG
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: bootloader\n"
+"POT-Creation-Date: \n"
+"PO-Revision-Date: 2008-11-05 23:52+0100\n"
+"Last-Translator: Jonas Björk <jonas@jonasbjork.net>\n"
+"Language-Team: svenska <sv@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.11.4\n"
+"X-Poedit-Language: Swedish\n"
+"X-Poedit-Country: SWEDEN\n"
+"X-Poedit-SourceCharset: utf-8\n"
+
+#. ok button label
+#. txt_ok
+msgid "OK"
+msgstr "OK"
+
+#. cancel button label
+#. txt_cancel
+msgid "Cancel"
+msgstr "Avbryt"
+
+#. reboot button label
+#. txt_reboot
+msgid "Reboot"
+msgstr "Starta om"
+
+#. continue button label
+#. txt_continue
+msgid "Continue"
+msgstr "Fortsätt"
+
+#. txt_install
+msgid "Installation"
+msgstr "Installation"
+
+#. txt_safe_linux
+msgid "Linux--Safe Settings"
+msgstr "Linux - Säkra inställningar"
+
+#. txt_boot_harddisk
+msgid "Boot from Hard Disk"
+msgstr "Starta från hårddisk"
+
+#. txt_rescue
+msgid "Rescue System"
+msgstr "Räddningssystem"
+
+#. txt_memtest
+msgid "Memory Test"
+msgstr "Minnestest"
+
+#. txt_bootoptions
+msgid "Boot Options"
+msgstr "Startalternativ"
+
+#. window title for exit dialog
+#. txt_exit_title (see txt_exit_dialog)
+msgid "Exiting..."
+msgstr "Avslutar..."
+
+#. txt_exit_dialog
+msgid ""
+"You are leaving the graphical boot menu and\n"
+"starting the text mode interface."
+msgstr ""
+"Du är på väg att lämna den grafiska startmenyn och\n"
+"starta textlägesgränssnittet."
+
+#. txt_help
+msgid "Help"
+msgstr "Hjälp"
+
+#. window title for kernel loading (see txt_load_kernel)
+#. txt_load_kernel_title
+msgid "Starting..."
+msgstr "Startar..."
+
+#. Keep the three newlines!
+#. txt_load_kernel
+msgid ""
+"Loading Linux Kernel\n"
+"\n"
+"\n"
+msgstr ""
+"Laddar Linuxkärnan\n"
+"\n"
+"\n"
+
+#. Keep the three newlines!
+#. txt_load_memtest
+msgid ""
+"Loading memtest86\n"
+"\n"
+"\n"
+msgstr ""
+"Laddar memtest86\n"
+"\n"
+"\n"
+
+#. info box title
+#. txt_info_title
+msgid "Boot Loader"
+msgstr "Starthanterare"
+
+#. error box title
+#. txt_error_title
+msgid "I/O Error"
+msgstr "I/O-fel"
+
+#. boot disk change dialog title
+#. txt_change_disk_title
+msgid "Change Boot Disk"
+msgstr "Ändra startdisk"
+
+#. txt_insert_disk
+#, c-format
+msgid "Insert boot disk %u."
+msgstr "Sätt i startdisk %u."
+
+#. txt_insert_disk2
+#, c-format
+msgid ""
+"This is boot disk %u.\n"
+"Insert boot disk %u."
+msgstr ""
+"Det här är startdisk %u.\n"
+"Sätt i startdisk %u."
+
+#. <product> is e.g. SuSE Linux X.Y or Enterprise Server Z
+#. txt_insert_disk3
+#, c-format
+msgid ""
+"This is not a <product> boot disk.\n"
+"Insert boot disk %u."
+msgstr ""
+"Det här är inte en <product>-startdisk.\n"
+"Sätt i startdisk %u."
+
+#. password dialog title
+#. txt_password_title
+msgid "Password"
+msgstr "Lösenord"
+
+#. txt_dud_ready
+msgid "Get your driver update floppy ready."
+msgstr "Ha disketten för drivrutinsuppdatering redo."
+
+#. power off dialog title
+#. txt_power_off_title
+msgid "Power Off"
+msgstr "Stäng av"
+
+#. txt_power_off
+msgid "Halt the system now?"
+msgstr "Vill du stänga av systemet nu?"
+
+#. menu entry for hard disk installation
+#. txt_harddisk
+msgid "Hard Disk"
+msgstr "Hårddisk"
+
+#. dialog title for hard disk installation
+#. txt_harddisk_title
+msgid "Hard Disk Installation"
+msgstr "Hårddiskinstallation"
+
+#. txt_hd_diskdevice
+msgid "Disk Device (Scans All Disks If Empty)\n"
+msgstr "Diskenhet (söker av alla diskar om tom)\n"
+
+#. txt_directory
+msgid "Directory\n"
+msgstr "Katalog\n"
+
+#. dialog title for ftp installation
+#. txt_ftp_title
+msgid "FTP Installation"
+msgstr "FTP-installation"
+
+#. txt_server
+msgid "Server\n"
+msgstr "Server\n"
+
+#. txt_password
+msgid "Password\n"
+msgstr "Lösenord\n"
+
+#. label for ftp user input
+#. txt_user1
+msgid "User (Anonymous Login If Empty)\n"
+msgstr "Användare (anonym inloggning om tomt)\n"
+
+#. dialog title for nfs installation
+#. txt_nfs_title
+msgid "NFS Installation"
+msgstr "NFS-installation"
+
+#. label for smb user input
+#. txt_user2
+msgid "User (Uses \"guest\" If Empty)\n"
+msgstr "Användare (använder \"guest\" om tomt)\n"
+
+#. dialog title for smb installation
+#. txt_smb_title
+msgid "SMB (Windows Share) Installation"
+msgstr "SMB (Windows-utdelning) installation"
+
+#. dialog title for http installation
+#. txt_http_title
+msgid "HTTP Installation"
+msgstr "HTTP-installation"
+
+#. 'driver' as in '(hardware) driver update'
+#. txt_driver_update
+msgid "Driver"
+msgstr "Drivrutin"
+
+#. as in Windows Authentication Domain
+#. txt_domain
+msgid "Domain\n"
+msgstr "Domän\n"
+
+#. button label for other/more options
+#. txt_other_options
+msgid "Other Options"
+msgstr "Fler alternativ"
+
+#. label for language selection
+#. txt_language
+msgid "Language"
+msgstr "Språk"
+
+#. txt_yes
+msgid "Yes"
+msgstr "Ja"
+
+#. txt_no
+msgid "No"
+msgstr "Nej"
+
+#. menu item for selecting a file
+#. txt_file
+msgid "File"
+msgstr "Fil"
+
+#. input label: share as in "Windows share" (SMB)
+#. txt_share
+msgid "Share\n"
+msgstr "Utdelning\n"
+
+#. txt_zenAuto
+msgid "Automatic Mode"
+msgstr "Automatiskt läge"
+
+#. txt_zenManual
+msgid "Manual Mode"
+msgstr "Manuellt läge"
+
+#. txt_zenConfig
+msgid "Configure Parameters on ZEN Partition"
+msgstr "Ställ in parametrar på ZEN-partition"
+
+#. txt_zenInstall
+msgid "Install or Update ZEN Partition"
+msgstr "Installera eller uppdatera ZEN-partition"
+
+#. txt_zenLilo
+msgid "Reinstall ZEN Partition Boot Loader"
+msgstr "Ominstallera starthanterare för ZEN-partition"
+
+#. txt_zenDisable
+msgid "Disable ZEN Partition"
+msgstr "Inaktivera ZEN-partition"
+
+#. txt_zenEnable
+msgid "Enable ZEN Partition"
+msgstr "Aktivera ZEN-partition"
+
+#. video mode menu item
+#. txt_text_mode
+msgid "Text Mode"
+msgstr "Textläge"
+
+#. menu item, like 'memory test'
+#. txt_firmware
+msgid "Firmware Test"
+msgstr "Test av fast programvara"
+
+#. txt_dud_file_msg
+msgid ""
+"To load driver updates directly from CD-ROM,\n"
+"enter the driver update file names (separated\n"
+"by commas ',') here:\n"
+msgstr ""
+"För att ladda drivrutinsuppdateringar direkt från cd-rom,\n"
+"ange drivrutinsuppdateringsfilnamn (åtskilda med kommatecken\n"
+"\",\") här:\n"
+
+#. install source menu title
+#. ** please keep it really short (comparable to the english text) **
+#. txt_install_source
+msgid "Source"
+msgstr "Källa"
+
+#. video mode/display size menu title
+#. ** please keep it really short (comparable to the english text) **
+#. txt_video_mode
+msgid "Video Mode"
+msgstr "Videoläge"
+
+#. driver update dialog title
+#. -> txt_dud_file_msg
+#. txt_driver_update2
+msgid "Driver Update"
+msgstr "Drivrutinsuppdatering"
+
+#. menu label for selecting (cpu) architecture
+#. like i386, x86-64, ppc
+#. ** please keep it really short (comparable to the english text) **
+#. txt_arch
+msgid "Arch"
+msgstr "Arkitektur"
+
+#. menu label for selecting some (linux) kernel variant
+#. ** please keep it really short (comparable to the english text) **
+#. txt_kernel
+msgid "Kernel"
+msgstr "Kärna"
+
+#. menu item for kernel variant (cf. txt_kernel)
+#. txt_kernel_default
+msgid "Default"
+msgstr "Standard"
+
+#. menu item for kernel variant (cf. txt_kernel)
+#. -> like in txt_safe_linux
+#. txt_kernel_safe
+msgid "Safe Settings"
+msgstr "Säkra inställningar"
+
+#. menu item for kernel variant (cf. txt_kernel)
+#. -> similar to txt_noacpi_install
+#. txt_kernel_noacpi
+msgid "No ACPI"
+msgstr "Ingen ACPI"
+
+#. menu item for kernel variant (cf. txt_kernel)
+#. -> similar to txt_nolapic_install
+#. txt_kernel_nolapic
+msgid "No Local APIC"
+msgstr "Ingen lokal ACPI"
+
+#. main menu: start in system repair mode
+#. txt_repain_system
+msgid "Repair Installed System"
+msgstr "Reparera installerat system"
+
+#. menu item
+#. txt_mediacheck
+msgid "Check Installation Media"
+msgstr "Kontrollera installationsmedia"
+
+#. menu item for keyboard layout (please keep it short)
+#. txt_keyboard
+msgid "Keyboard"
+msgstr "Tangentbord"
+
+#. menu title
+#. txt_dud_download
+msgid "Download Driver Update"
+msgstr ""
+
+#. input label
+#. txt_dud_enter_url
+msgid "Enter Driver Update URL\n"
+msgstr ""
+
+#. menu item
+#. txt_http_proxy
+msgid "HTTP Proxy"
+msgstr ""
+
+#. menu item
+#. txt_network_config
+msgid "Network Config"
+msgstr ""
+
+#. menu item
+#. txt_no_network
+msgid "No Network"
+msgstr ""
+
+#. short menu item for manual network config (NOT some kind of manual)
+#. txt_manual_network
+msgid "Manual"
+msgstr ""
+
+#. dialog title for manual network config
+#. txt_manual_network_title
+msgid "Manual Network Config"
+msgstr ""
+
+#. label for ip address
+#. txt_host_ip
+msgid "Host IP\n"
+msgstr ""
+
+#. label for gateway ip
+#. txt_gateway_ip
+msgid "Gateway\n"
+msgstr ""
+
+#. label for dns domain name (like 'opensuse.org')
+#. txt_domain_name
+msgid "Domain Name\n"
+msgstr ""
+
+#. label for nameserver list
+#. txt_nameservers
+msgid "Nameservers (separated by ',')\n"
+msgstr ""
+
+#. label for netmask; 'Host IP' refers to label txt_host_ip above
+#. txt_netmask
+msgid "Netmask\n(or use '/N' notation with Host IP)\n"
+msgstr ""
+
+#. label for Live CD installation
+#. txt_live_kde
+msgid "openSUSE Live (KDE)"
+msgstr ""
+
+#. label for Live CD installation
+#. txt_live_gnome
+msgid "openSUSE Live (GNOME)"
+msgstr ""
diff --git a/themes/openSUSE/po/ta.po b/themes/openSUSE/po/ta.po
new file mode 100644
index 0000000..d83bcea
--- /dev/null
+++ b/themes/openSUSE/po/ta.po
@@ -0,0 +1,441 @@
+# LANGUAGE translations for boot loader
+# Copyright (C) 2005 SUSE Linux GmbH
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: NetworkManager-vpnc\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2006-05-16 17:10+0200\n"
+"PO-Revision-Date: 2006-01-26 15:19+0100\n"
+"Last-Translator: Priyavert Sharma <priyavert.sharma@agreeya.com>\n"
+"Language-Team: AgreeYa Solutions <www.agreeya.com>\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"
+
+#. ok button label
+#. txt_ok
+msgid "OK"
+msgstr "ஓ.கே."
+
+#. cancel button label
+#. txt_cancel
+msgid "Cancel"
+msgstr "ரத்து செய்"
+
+#. reboot button label
+#. txt_reboot
+msgid "Reboot"
+msgstr "ரீபூட்"
+
+#. continue button label
+#. txt_continue
+msgid "Continue"
+msgstr "தொடரு"
+
+#. txt_install
+msgid "Installation"
+msgstr "நிறுவுதல்"
+
+#. txt_safe_linux
+msgid "Linux--Safe Settings"
+msgstr "லினுக்ஸ்--பாதுகாப்பான செட்டிங்குகள்"
+
+#. txt_boot_harddisk
+msgid "Boot from Hard Disk"
+msgstr "ஹார்டு டிஸ்கிலிருந்து பூட் செய்"
+
+#. txt_rescue
+msgid "Rescue System"
+msgstr "மீட்பு ௮மைப்பு முறை"
+
+#. txt_memtest
+msgid "Memory Test"
+msgstr "நினைவாற்றல் சோதனை"
+
+#. txt_bootoptions
+msgid "Boot Options"
+msgstr "பூட் தெரிவுகள்"
+
+#. window title for exit dialog
+#. txt_exit_title (see txt_exit_dialog)
+msgid "Exiting..."
+msgstr "வெளியேறுகிறது..."
+
+#. txt_exit_dialog
+msgid ""
+"You are leaving the graphical boot menu and\n"
+"starting the text mode interface."
+msgstr ""
+"நீங்கள் கிராபிகல் பூட் மெனுவிலிருந்து வெளியேறுகிறீர்கள்\n"
+"மற்றும்ஸீ டெக்ஸ்ட் மோட் இன்டர்பேஸ்."
+
+#. txt_help
+msgid "Help"
+msgstr "உதவி"
+
+#. window title for kernel loading (see txt_load_kernel)
+#. txt_load_kernel_title
+msgid "Starting..."
+msgstr "ஆரம்பிக்கிறது..."
+
+#. Keep the three newlines!
+#. txt_load_kernel
+msgid ""
+"Loading Linux Kernel\n"
+"\n"
+"\n"
+msgstr ""
+"லினுக்ஸ் கெர்னல் லோடு ஆகிறது\n"
+"\n"
+"\n"
+
+#. Keep the three newlines!
+#. txt_load_memtest
+msgid ""
+"Loading memtest86\n"
+"\n"
+"\n"
+msgstr ""
+"மெம்டெஸ்ட் 86 லோடு ஆகிறது\n"
+"\n"
+"\n"
+
+#. info box title
+#. txt_info_title
+msgid "Boot Loader"
+msgstr "பூட் லோடர்"
+
+#. error box title
+#. txt_error_title
+msgid "I/O Error"
+msgstr "ஐ/ஓ தவறு"
+
+#. boot disk change dialog title
+#. txt_change_disk_title
+msgid "Change Boot Disk"
+msgstr "பூட் டிஸ்க்கை மாற்று"
+
+#. txt_insert_disk
+#, c-format
+msgid "Insert boot disk %u."
+msgstr "இன்சர்ட் பூட் டிஸ்க் %u"
+
+#. txt_insert_disk2
+#, c-format
+msgid ""
+"This is boot disk %u.\n"
+"Insert boot disk %u."
+msgstr ""
+"இதுதான் பூட் டிஸ்க் %u.\n"
+"இன்சர்ட் பூட் டிஸ்க் %u."
+
+#. <product> is e.g. SuSE Linux X.Y or Enterprise Server Z
+#. txt_insert_disk3
+#, c-format
+msgid ""
+"This is not a <product> boot disk.\n"
+"Insert boot disk %u."
+msgstr ""
+"இது <ப்ராடக்ட்> பூட் டிஸ்க் ௮ல்ல.\n"
+"தயவுசெய்து இன்சர்ட் பூட் டிஸ்க்%u"
+
+#. password dialog title
+#. txt_password_title
+msgid "Password"
+msgstr "கடவுச்சொல்"
+
+#. txt_dud_ready
+msgid "Get your driver update floppy ready."
+msgstr "உங்களுடைய டிரைவர் ௮ப்டேட் ப்ளாப்பியை தயார் செய்யவும்."
+
+#. power off dialog title
+#. txt_power_off_title
+msgid "Power Off"
+msgstr "பவர் ஆஃப்"
+
+#. txt_power_off
+msgid "Halt the system now?"
+msgstr "கணிப்பொறியை இப்போது நிறுத்தவும்?"
+
+#. menu entry for hard disk installation
+#. txt_harddisk
+msgid "Hard Disk"
+msgstr "ஹார்டு டிஸ்க்"
+
+#. dialog title for hard disk installation
+#. txt_harddisk_title
+msgid "Hard Disk Installation"
+msgstr "ஹார்டு டிஸ்க் நிறுவுதல்"
+
+#. txt_hd_diskdevice
+msgid "Disk Device (Scans All Disks If Empty)\n"
+msgstr "டிஸ்க் சாதனம் (காலியாக இருந்தால் எல்லா டிஸ்க்குகளையும் ஸ்கேன் செய்யவும்)\n"
+
+#. txt_directory
+msgid "Directory\n"
+msgstr "டைரக்டரி\n"
+
+#. dialog title for ftp installation
+#. txt_ftp_title
+msgid "FTP Installation"
+msgstr "FTP நிறுவுதல்"
+
+#. txt_server
+msgid "Server\n"
+msgstr "சர்வர்\n"
+
+#. txt_password
+msgid "Password\n"
+msgstr "கடவுச்சொல்\n"
+
+#. label for ftp user input
+#. txt_user1
+msgid "User (Anonymous Login If Empty)\n"
+msgstr "பயன்படுத்துபவர் (காலியாக இருந்தால் பெயரின்றி லாக் இன்)\n"
+
+#. dialog title for nfs installation
+#. txt_nfs_title
+msgid "NFS Installation"
+msgstr "NFS நிறுவுதல்"
+
+#. label for smb user input
+#. txt_user2
+msgid "User (Uses \"guest\" If Empty)\n"
+msgstr "பயன்படுத்துபவர் (காலியாக இருந்தால் \"கெஸ்ட்\" பயன்படுத்தவும்)\n"
+
+#. dialog title for smb installation
+#. txt_smb_title
+msgid "SMB (Windows Share) Installation"
+msgstr "SMB (விண்டோஸ் ஷோ) நிறுவுதல்"
+
+#. dialog title for http installation
+#. txt_http_title
+msgid "HTTP Installation"
+msgstr "HTTP நிறுவுதல்"
+
+#. 'driver' as in '(hardware) driver update'
+#. txt_driver_update
+msgid "Driver"
+msgstr "டிரைவர்"
+
+#. as in Windows Authentication Domain
+#. txt_domain
+msgid "Domain\n"
+msgstr "டொமைன்\n"
+
+#. button label for other/more options
+#. txt_other_options
+msgid "Other Options"
+msgstr "பிற தெரிவுகள்"
+
+#. label for language selection
+#. txt_language
+msgid "Language"
+msgstr "மொழி"
+
+#. txt_yes
+msgid "Yes"
+msgstr "ஆம்"
+
+#. txt_no
+msgid "No"
+msgstr "இல்லை"
+
+#. menu item for selecting a file
+#. txt_file
+msgid "File"
+msgstr "கோப்பு"
+
+#. input label: share as in "Windows share" (SMB)
+#. txt_share
+msgid "Share\n"
+msgstr "பகிர்ந்துகொள்\n"
+
+#. txt_zenAuto
+msgid "Automatic Mode"
+msgstr "ஆட்டோமேடிக் மோட்"
+
+#. txt_zenManual
+msgid "Manual Mode"
+msgstr "மேனுவல் மோட்"
+
+#. txt_zenConfig
+msgid "Configure Parameters on ZEN Partition"
+msgstr "ZEN பிரிவினையில் ஒருங்கிணைக்கும் ௮ளவீடுகள்"
+
+#. txt_zenInstall
+msgid "Install or Update ZEN Partition"
+msgstr "ZEN பிரிவினையை நிறுவு/மேம்படுத்து"
+
+#. txt_zenLilo
+msgid "Reinstall ZEN Partition Boot Loader"
+msgstr "ZEN பிரிவினை பூட் லோடரை மறுநிறுவுதல் செய்"
+
+#. txt_zenDisable
+msgid "Disable ZEN Partition"
+msgstr "ZEN பிரிவினையை செயலிழக்கச் செய்"
+
+#. txt_zenEnable
+msgid "Enable ZEN Partition"
+msgstr "ZEN பிரிவினையை ஏதுவாக்கு"
+
+#. video mode menu item
+#. txt_text_mode
+msgid "Text Mode"
+msgstr "உரை மோட்"
+
+#. menu item, like 'memory test'
+#. txt_firmware
+msgid "Firmware Test"
+msgstr "ஃபர்ம்வேர் சோதனை"
+
+#. txt_dud_file_msg
+msgid ""
+"To load driver updates directly from CD-ROM,\n"
+"enter the driver update file names (separated\n"
+"by commas ',') here:\n"
+msgstr ""
+"சிடி-ரோமிலிருந்து நேரடியாக டிரைவர் புதுப்பித்தல்களை \n"
+"சேர்ப்பதற்கு, டிரைவர் புதுப்பித்தல் கோப்பு பெயர்களை \n"
+"(காற்புள்ளிகளால்(',') பிரித்து) இங்கு என்டர் செய்யவும்:\n"
+
+#. install source menu title
+#. ** please keep it really short (comparable to the english text) **
+#. txt_install_source
+msgid "Source"
+msgstr ""
+
+#. video mode/display size menu title
+#. ** please keep it really short (comparable to the english text) **
+#. txt_video_mode
+msgid "Video Mode"
+msgstr ""
+
+#. driver update dialog title
+#. -> txt_dud_file_msg
+#. txt_driver_update2
+msgid "Driver Update"
+msgstr ""
+
+#. menu label for selecting (cpu) architecture
+#. like i386, x86-64, ppc
+#. ** please keep it really short (comparable to the english text) **
+#. txt_arch
+msgid "Arch"
+msgstr "Arch"
+
+#. menu label for selecting some (linux) kernel variant
+#. ** please keep it really short (comparable to the english text) **
+#. txt_kernel
+msgid "Kernel"
+msgstr ""
+
+#. menu item for kernel variant (cf. txt_kernel)
+#. txt_kernel_default
+msgid "Default"
+msgstr ""
+
+#. menu item for kernel variant (cf. txt_kernel)
+#. -> like in txt_safe_linux
+#. txt_kernel_safe
+msgid "Safe Settings"
+msgstr ""
+
+#. menu item for kernel variant (cf. txt_kernel)
+#. -> similar to txt_noacpi_install
+#. txt_kernel_noacpi
+msgid "No ACPI"
+msgstr ""
+
+#. menu item for kernel variant (cf. txt_kernel)
+#. -> similar to txt_nolapic_install
+#. txt_kernel_nolapic
+msgid "No Local APIC"
+msgstr ""
+
+#. main menu: start in system repair mode
+#. txt_repain_system
+msgid "Repair Installed System"
+msgstr ""
+
+#. menu item
+#. txt_mediacheck
+msgid "Check Installation Media"
+msgstr ""
+
+#. menu item for keyboard layout (please keep it short)
+#. txt_keyboard
+msgid "Keyboard"
+msgstr "தட்டச்சு பொறி"
+
+#. menu title
+#. txt_dud_download
+msgid "Download Driver Update"
+msgstr ""
+
+#. input label
+#. txt_dud_enter_url
+msgid "Enter Driver Update URL\n"
+msgstr ""
+
+#. menu item
+#. txt_http_proxy
+msgid "HTTP Proxy"
+msgstr ""
+
+#. menu item
+#. txt_network_config
+msgid "Network Config"
+msgstr ""
+
+#. menu item
+#. txt_no_network
+msgid "No Network"
+msgstr ""
+
+#. short menu item for manual network config (NOT some kind of manual)
+#. txt_manual_network
+msgid "Manual"
+msgstr ""
+
+#. dialog title for manual network config
+#. txt_manual_network_title
+msgid "Manual Network Config"
+msgstr ""
+
+#. label for ip address
+#. txt_host_ip
+msgid "Host IP\n"
+msgstr ""
+
+#. label for gateway ip
+#. txt_gateway_ip
+msgid "Gateway\n"
+msgstr ""
+
+#. label for dns domain name (like 'opensuse.org')
+#. txt_domain_name
+msgid "Domain Name\n"
+msgstr ""
+
+#. label for nameserver list
+#. txt_nameservers
+msgid "Nameservers (separated by ',')\n"
+msgstr ""
+
+#. label for netmask; 'Host IP' refers to label txt_host_ip above
+#. txt_netmask
+msgid "Netmask\n(or use '/N' notation with Host IP)\n"
+msgstr ""
+
+#. label for Live CD installation
+#. txt_live_kde
+msgid "openSUSE Live (KDE)"
+msgstr ""
+
+#. label for Live CD installation
+#. txt_live_gnome
+msgid "openSUSE Live (GNOME)"
+msgstr ""
diff --git a/themes/openSUSE/po/tg.po b/themes/openSUSE/po/tg.po
new file mode 100644
index 0000000..d2940ed
--- /dev/null
+++ b/themes/openSUSE/po/tg.po
@@ -0,0 +1,427 @@
+# LANGUAGE translations for boot loader
+# Copyright (C) 2005 SUSE Linux GmbH
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: desktop-translations 20090902\n"
+"POT-Creation-Date: 2009-09-02 10:54+0000\n"
+"PO-Revision-Date: 2010-04-05 18:44+0500\n"
+"Last-Translator: Victor Ibragimov <victor.ibragimov@gmail.com>\n"
+"Language-Team: Tajik openSUSE Team <victor.ibragimov@gmail.com>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Poedit-Language: Tajik\n"
+"X-Poedit-Country: TAJIKISTAN\n"
+
+#. ok button label
+#. txt_ok
+msgid "OK"
+msgstr "Хуб"
+
+#. cancel button label
+#. txt_cancel
+msgid "Cancel"
+msgstr "Бекор кардан"
+
+#. reboot button label
+#. txt_reboot
+msgid "Reboot"
+msgstr "Бозборшавӣ"
+
+#. continue button label
+#. txt_continue
+msgid "Continue"
+msgstr "Давом"
+
+#. txt_install
+msgid "Installation"
+msgstr "Коргузорӣ"
+
+#. txt_safe_linux
+msgid "Linux--Safe Settings"
+msgstr "Linux--Танзимои бехатарӣ"
+
+#. txt_boot_harddisk
+msgid "Boot from Hard Disk"
+msgstr "Боркунӣ аз диски компютерӣ"
+
+#. txt_rescue
+msgid "Rescue System"
+msgstr "Системаи бехатарӣ"
+
+#. txt_memtest
+msgid "Memory Test"
+msgstr "Санҷиши хотира"
+
+#. txt_bootoptions
+msgid "Boot Options"
+msgstr "Имконоти боршавӣ"
+
+#. window title for exit dialog
+#. txt_exit_title (see txt_exit_dialog)
+msgid "Exiting..."
+msgstr "Хуруҷшавӣ..."
+
+#. txt_exit_dialog
+msgid ""
+"You are leaving the graphical boot menu and\n"
+"starting the text mode interface."
+msgstr ""
+
+#. txt_help
+msgid "Help"
+msgstr "Роҳнамо"
+
+#. window title for kernel loading (see txt_load_kernel)
+#. txt_load_kernel_title
+msgid "Starting..."
+msgstr "Оғозкунӣ..."
+
+#. Keep the three newlines!
+#. txt_load_kernel
+msgid ""
+"Loading Linux Kernel\n"
+"\n"
+"\n"
+msgstr ""
+
+#. Keep the three newlines!
+#. txt_load_memtest
+msgid ""
+"Loading memtest86\n"
+"\n"
+"\n"
+msgstr ""
+
+#. info box title
+#. txt_info_title
+msgid "Boot Loader"
+msgstr ""
+
+#. error box title
+#. txt_error_title
+msgid "I/O Error"
+msgstr "Хатои I/O"
+
+#. boot disk change dialog title
+#. txt_change_disk_title
+msgid "Change Boot Disk"
+msgstr "Тағйири диски боршавӣ"
+
+#. txt_insert_disk
+#, c-format
+msgid "Insert boot disk %u."
+msgstr ""
+
+#. txt_insert_disk2
+#, c-format
+msgid ""
+"This is boot disk %u.\n"
+"Insert boot disk %u."
+msgstr ""
+
+#. <product> is e.g. SuSE Linux X.Y or Enterprise Server Z
+#. txt_insert_disk3
+#, c-format
+msgid ""
+"This is not a <product> boot disk.\n"
+"Insert boot disk %u."
+msgstr ""
+
+#. password dialog title
+#. txt_password_title
+msgid "Password"
+msgstr "Парол"
+
+#. txt_dud_ready
+msgid "Get your driver update floppy ready."
+msgstr ""
+
+#. power off dialog title
+#. txt_power_off_title
+msgid "Power Off"
+msgstr "Хомӯшкунӣ"
+
+#. txt_power_off
+msgid "Halt the system now?"
+msgstr "Оё системаро ҳозир хомӯш месозед?"
+
+#. menu entry for hard disk installation
+#. txt_harddisk
+msgid "Hard Disk"
+msgstr "Диски компютерӣ"
+
+#. dialog title for hard disk installation
+#. txt_harddisk_title
+msgid "Hard Disk Installation"
+msgstr "Коргузории диски компютерӣ"
+
+#. txt_hd_diskdevice
+msgid "Disk Device (Scans All Disks If Empty)\n"
+msgstr ""
+
+#. txt_directory
+msgid "Directory\n"
+msgstr "Феҳраст\n"
+
+#. dialog title for ftp installation
+#. txt_ftp_title
+msgid "FTP Installation"
+msgstr "Коргузории FTP"
+
+#. txt_server
+msgid "Server\n"
+msgstr "Сервер\n"
+
+#. txt_password
+msgid "Password\n"
+msgstr "Парол\n"
+
+#. label for ftp user input
+#. txt_user1
+msgid "User (Anonymous Login If Empty)\n"
+msgstr ""
+
+#. dialog title for nfs installation
+#. txt_nfs_title
+msgid "NFS Installation"
+msgstr "Коргузории NFS"
+
+#. label for smb user input
+#. txt_user2
+msgid "User (Uses \"guest\" If Empty)\n"
+msgstr ""
+
+#. dialog title for smb installation
+#. txt_smb_title
+msgid "SMB (Windows Share) Installation"
+msgstr ""
+
+#. dialog title for http installation
+#. txt_http_title
+msgid "HTTP Installation"
+msgstr "Коргузории HTTP"
+
+#. 'driver' as in '(hardware) driver update'
+#. txt_driver_update
+msgid "Driver"
+msgstr "Драйвер"
+
+#. as in Windows Authentication Domain
+#. txt_domain
+msgid "Domain\n"
+msgstr "Номи сервер\n"
+
+#. button label for other/more options
+#. txt_other_options
+msgid "Other Options"
+msgstr "Имконоти дигар"
+
+#. label for language selection
+#. txt_language
+msgid "Language"
+msgstr "Забон"
+
+#. txt_yes
+msgid "Yes"
+msgstr "Ҳа"
+
+#. txt_no
+msgid "No"
+msgstr "Не"
+
+#. menu item for selecting a file
+#. txt_file
+msgid "File"
+msgstr "Файл"
+
+#. input label: share as in "Windows share" (SMB)
+#. txt_share
+msgid "Share\n"
+msgstr ""
+
+#. txt_zenAuto
+msgid "Automatic Mode"
+msgstr "Ҳолати худкор"
+
+#. txt_zenManual
+msgid "Manual Mode"
+msgstr "Ҳолати дастӣ"
+
+#. txt_zenConfig
+msgid "Configure Parameters on ZEN Partition"
+msgstr ""
+
+#. txt_zenInstall
+msgid "Install or Update ZEN Partition"
+msgstr ""
+
+#. txt_zenLilo
+msgid "Reinstall ZEN Partition Boot Loader"
+msgstr ""
+
+#. txt_zenDisable
+msgid "Disable ZEN Partition"
+msgstr ""
+
+#. txt_zenEnable
+msgid "Enable ZEN Partition"
+msgstr ""
+
+#. video mode menu item
+#. txt_text_mode
+msgid "Text Mode"
+msgstr "Ҳолати матнӣ"
+
+#. menu item, like 'memory test'
+#. txt_firmware
+msgid "Firmware Test"
+msgstr ""
+
+#. txt_dud_file_msg
+#, wrap
+msgid ""
+"To load driver updates directly from CD-ROM,\n"
+"enter the driver update file names (separated\n"
+"by commas ',') here:\n"
+msgstr ""
+
+#. install source menu title
+#. ** please keep it really short (comparable to the english text) **
+#. txt_install_source
+msgid "Source"
+msgstr "Манбаъ"
+
+#. video mode/display size menu title
+#. ** please keep it really short (comparable to the english text) **
+#. txt_video_mode
+msgid "Video Mode"
+msgstr "Ҳолати видеоӣ"
+
+#. driver update dialog title
+#. -> txt_dud_file_msg
+#. txt_driver_update2
+msgid "Driver Update"
+msgstr "Навсозии драйверҳо"
+
+#. menu label for selecting (cpu) architecture
+#. like i386, x86-64, ppc
+#. ** please keep it really short (comparable to the english text) **
+#. txt_arch
+msgid "Arch"
+msgstr ""
+
+#. menu label for selecting some (linux) kernel variant
+#. ** please keep it really short (comparable to the english text) **
+#. txt_kernel
+msgid "Kernel"
+msgstr ""
+
+#. menu item for kernel variant (cf. txt_kernel)
+#. txt_kernel_default
+msgid "Default"
+msgstr "Стандартӣ"
+
+#. menu item for kernel variant (cf. txt_kernel)
+#. -> like in txt_safe_linux
+#. txt_kernel_safe
+msgid "Safe Settings"
+msgstr "Танзимоти бехатарӣ"
+
+#. menu item for kernel variant (cf. txt_kernel)
+#. -> similar to txt_noacpi_install
+#. txt_kernel_noacpi
+msgid "No ACPI"
+msgstr ""
+
+#. menu item for kernel variant (cf. txt_kernel)
+#. -> similar to txt_nolapic_install
+#. txt_kernel_nolapic
+msgid "No Local APIC"
+msgstr ""
+
+#. main menu: start in system repair mode
+#. txt_repain_system
+msgid "Repair Installed System"
+msgstr "Созкунии системаи сабтшуда"
+
+#. menu item
+#. txt_mediacheck
+msgid "Check Installation Media"
+msgstr ""
+
+#. menu item for keyboard layout (please keep it short)
+#. txt_keyboard
+msgid "Keyboard"
+msgstr "Клавиатура"
+
+#. menu title
+#. txt_dud_download
+msgid "Download Driver Update"
+msgstr ""
+
+#. input label
+#. txt_dud_enter_url
+msgid "Enter Driver Update URL\n"
+msgstr ""
+
+#. menu item
+#. txt_http_proxy
+msgid "HTTP Proxy"
+msgstr "Прокси HTTP"
+
+#. menu item
+#. txt_network_config
+msgid "Network Config"
+msgstr "Танзимоти шабака"
+
+#. menu item
+#. txt_no_network
+msgid "No Network"
+msgstr ""
+
+#. short menu item for manual network config (NOT some kind of manual)
+#. txt_manual_network
+msgid "Manual"
+msgstr "Дастур"
+
+#. dialog title for manual network config
+#. txt_manual_network_title
+msgid "Manual Network Config"
+msgstr "Танзимоти дастии шабака"
+
+#. label for ip address
+#. txt_host_ip
+msgid "Host IP\n"
+msgstr ""
+
+#. label for gateway ip
+#. txt_gateway_ip
+msgid "Gateway\n"
+msgstr ""
+
+#. label for dns domain name (like 'opensuse.org')
+#. txt_domain_name
+msgid "Domain Name\n"
+msgstr "Номи сервер\n"
+
+#. label for nameserver list
+#. txt_nameservers
+msgid "Nameservers (separated by ',')\n"
+msgstr ""
+
+#. label for netmask; 'Host IP' refers to label txt_host_ip above
+#. txt_netmask
+msgid "Netmask\n(or use '/N' notation with Host IP)\n"
+msgstr ""
+
+#. label for Live CD installation
+#. txt_live_kde
+msgid "openSUSE Live (KDE)"
+msgstr "Зиндаи openSUSE (KDE)"
+
+#. label for Live CD installation
+#. txt_live_gnome
+msgid "openSUSE Live (GNOME)"
+msgstr "Зиндаи openSUSE (GNOME)"
diff --git a/themes/openSUSE/po/th.po b/themes/openSUSE/po/th.po
new file mode 100644
index 0000000..63deebd
--- /dev/null
+++ b/themes/openSUSE/po/th.po
@@ -0,0 +1,444 @@
+# LANGUAGE translations for boot loader
+# Copyright (C) 2005 SUSE Linux GmbH
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: YaST (@memory@)\n"
+"Report-Msgid-Bugs-To: i18n@suse.de\n"
+"POT-Creation-Date: 2008-01-03 17:06+0100\n"
+"PO-Revision-Date: 2010-07-09 21:59+0700\n"
+"Last-Translator: Thanomsub Noppaburana <donga.nb@gmail.com>\n"
+"Language-Team: Thai <thai-l10n@googlegroups.com>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"X-Generator: Lokalize 1.1\n"
+
+#. ok button label
+#. txt_ok
+msgid "OK"
+msgstr "ตกลง"
+
+#. cancel button label
+#. txt_cancel
+msgid "Cancel"
+msgstr "ยกเลิก"
+
+#. reboot button label
+#. txt_reboot
+msgid "Reboot"
+msgstr "บูตระบบใหม่"
+
+#. continue button label
+#. txt_continue
+msgid "Continue"
+msgstr "ทำต่อไป"
+
+#. txt_install
+msgid "Installation"
+msgstr "ทำการติดตั้ง"
+
+#. txt_safe_linux
+msgid "Linux--Safe Settings"
+msgstr "ลินุกซ์--ตั้งค่าแบบปลอดภัย"
+
+#. txt_boot_harddisk
+msgid "Boot from Hard Disk"
+msgstr "บูตระบบจากฮาร์ดดิสก์"
+
+#. txt_rescue
+msgid "Rescue System"
+msgstr "กู้ระบบ"
+
+#. txt_memtest
+msgid "Memory Test"
+msgstr "ทดสอบหน่วยความจำ"
+
+#. txt_bootoptions
+msgid "Boot Options"
+msgstr "ตัวเลือกการบูต"
+
+#. window title for exit dialog
+#. txt_exit_title (see txt_exit_dialog)
+msgid "Exiting..."
+msgstr "กำลังออก..."
+
+#. txt_exit_dialog
+msgid ""
+"You are leaving the graphical boot menu and\n"
+"starting the text mode interface."
+msgstr ""
+"คุณกำลังออกจากเมนูการบูตแบบกราฟิก\n"
+"
และเริ่มส่วนติดต่อในโหมดข้อความ"
+
+#. txt_help
+msgid "Help"
+msgstr "ช่วยเหลือ"
+
+#. window title for kernel loading (see txt_load_kernel)
+#. txt_load_kernel_title
+msgid "Starting..."
+msgstr "กำลังเริ่ม..."
+
+#. Keep the three newlines!
+#. txt_load_kernel
+msgid ""
+"Loading Linux Kernel\n"
+"\n"
+"\n"
+msgstr ""
+"ทำการโหลดเคอร์เนลของลินุกซ์\n"
+"
\n"
+"
\n"
+
+#. Keep the three newlines!
+#. txt_load_memtest
+msgid ""
+"Loading memtest86\n"
+"\n"
+"\n"
+msgstr ""
+"ทำการโหลด memtest86\n"
+"
\n"
+"
\n"
+
+#. info box title
+#. txt_info_title
+msgid "Boot Loader"
+msgstr "ตัวจัดการการบูต"
+
+#. error box title
+#. txt_error_title
+msgid "I/O Error"
+msgstr "I/O ผิดพลาด"
+
+#. boot disk change dialog title
+#. txt_change_disk_title
+msgid "Change Boot Disk"
+msgstr "เปลี่ยนดิสก์ที่จะใช้บูต"
+
+#. txt_insert_disk
+#, c-format
+msgid "Insert boot disk %u."
+msgstr "โปรดใส่ดิสก์ %u ที่จะใช้บูต"
+
+#. txt_insert_disk2
+#, c-format
+msgid ""
+"This is boot disk %u.\n"
+"Insert boot disk %u."
+msgstr ""
+"นี่คือดิสก์ %u สำหรับใช้บูต\n"
+"
โปรดใส่ดิสก์ %u เพื่อใช้บูต"
+
+#. <product> is e.g. SuSE Linux X.Y or Enterprise Server Z
+#. txt_insert_disk3
+#, c-format
+msgid ""
+"This is not a <product> boot disk.\n"
+"Insert boot disk %u."
+msgstr ""
+"นี่ไม่ใช่ดิสก์เพื่อใช้บูตของ <product>\n"
+"
โปรดใส่ดิกส์ %u เพื่อใช้บูต"
+
+#. password dialog title
+#. txt_password_title
+msgid "Password"
+msgstr "รหัสผ่าน"
+
+#. txt_dud_ready
+msgid "Get your driver update floppy ready."
+msgstr "พร้อมรับแผ่นฟลอปปีไดรเวอร์รุ่นใหม่"
+
+#. power off dialog title
+#. txt_power_off_title
+msgid "Power Off"
+msgstr "ปิดเครื่อง"
+
+#. txt_power_off
+msgid "Halt the system now?"
+msgstr "จะปิดเครื่องเดี๋ยวนี้หรือไม่ ?"
+
+#. menu entry for hard disk installation
+#. txt_harddisk
+msgid "Hard Disk"
+msgstr "ฮาร์ดดิสก์"
+
+#. dialog title for hard disk installation
+#. txt_harddisk_title
+msgid "Hard Disk Installation"
+msgstr "ติดตั้งจากฮาร์ดดิสก์"
+
+#. txt_hd_diskdevice
+msgid "Disk Device (Scans All Disks If Empty)\n"
+msgstr "อุปกรณ์ดิสก์ (หากว่างไว้จะค้นหาดิสก์ทั้งหมด)\n"
+
+#. txt_directory
+msgid "Directory\n"
+msgstr "ไดเรกทอรี\n"
+
+#. dialog title for ftp installation
+#. txt_ftp_title
+msgid "FTP Installation"
+msgstr "ติดตั้งผ่านทาง FTP"
+
+#. txt_server
+msgid "Server\n"
+msgstr "เครื่องแม่ข่าย\n"
+
+#. txt_password
+msgid "Password\n"
+msgstr "รหัสผ่าน\n"
+
+#. label for ftp user input
+#. txt_user1
+msgid "User (Anonymous Login If Empty)\n"
+msgstr "ผู้ใช้ (หากว่างไว้จะใช้ผู้ใช้นิรนาม)\n"
+
+#. dialog title for nfs installation
+#. txt_nfs_title
+msgid "NFS Installation"
+msgstr "ติดตั้งผ่านทาง NFS"
+
+#. label for smb user input
+#. txt_user2
+msgid "User (Uses \"guest\" If Empty)\n"
+msgstr "ผู้ใช้ (หากว่างไว้จะใช้ \"guest\" แทน)\n"
+
+#. dialog title for smb installation
+#. txt_smb_title
+msgid "SMB (Windows Share) Installation"
+msgstr "ติดตั้งผ่านทาง SMB (แชร์ของระบบวินโดว์ส)"
+
+#. dialog title for http installation
+#. txt_http_title
+msgid "HTTP Installation"
+msgstr "ติดตั้งผ่านทาง HTTP"
+
+#. 'driver' as in '(hardware) driver update'
+#. txt_driver_update
+msgid "Driver"
+msgstr "ไดรเวอร์"
+
+#. as in Windows Authentication Domain
+#. txt_domain
+msgid "Domain\n"
+msgstr "โดเมน\n"
+
+#. button label for other/more options
+#. txt_other_options
+msgid "Other Options"
+msgstr "ตัวเลือกอื่น"
+
+#. label for language selection
+#. txt_language
+msgid "Language"
+msgstr "ภาษา"
+
+#. txt_yes
+msgid "Yes"
+msgstr "ใช่"
+
+#. txt_no
+msgid "No"
+msgstr "ไม่ใช่"
+
+#. menu item for selecting a file
+#. txt_file
+msgid "File"
+msgstr "แฟ้ม"
+
+#. input label: share as in "Windows share" (SMB)
+#. txt_share
+msgid "Share\n"
+msgstr "แชร์\n"
+
+#. txt_zenAuto
+msgid "Automatic Mode"
+msgstr "โหมดอัตโนมัติ"
+
+#. txt_zenManual
+msgid "Manual Mode"
+msgstr "โหมดทำด้วยตนเอง"
+
+#. txt_zenConfig
+msgid "Configure Parameters on ZEN Partition"
+msgstr "ปรับแต่งพารามิเตอร์บนพาร์ทิชัน ZEN"
+
+#. txt_zenInstall
+msgid "Install or Update ZEN Partition"
+msgstr "ติดตั้งหรืออัปเดตพาร์ทิชัน ZEN"
+
+#. txt_zenLilo
+msgid "Reinstall ZEN Partition Boot Loader"
+msgstr "ติดตั้งตัวจัดการการบูตของพาร์ทิชัน ZEN อีกครั้ง"
+
+#. txt_zenDisable
+msgid "Disable ZEN Partition"
+msgstr "ปิดการใช้พาร์ทิชัน ZEN"
+
+#. txt_zenEnable
+msgid "Enable ZEN Partition"
+msgstr "เปิดการใช้พาร์ทิชัน ZEN"
+
+#. video mode menu item
+#. txt_text_mode
+msgid "Text Mode"
+msgstr "โหมดข้อความ"
+
+#. menu item, like 'memory test'
+#. txt_firmware
+msgid "Firmware Test"
+msgstr "ทดสอบเฟิร์มแวร์"
+
+#. txt_dud_file_msg
+msgid ""
+"To load driver updates directly from CD-ROM,\n"
+"enter the driver update file names (separated\n"
+"by commas ',') here:\n"
+msgstr ""
+"เพื่อโหลดไดรเวอร์รุ่นใหม่โดยตรงจากแผ่นซีดีรอม\n"
+"
ป้อนชื่อแฟ้มของไดรเวอร์รุ่นใหม่ (แยกด้วยจุลภาค ',')\n"
+"
ได้ที่นี่:\n"
+
+#. install source menu title
+#. ** please keep it really short (comparable to the english text) **
+#. txt_install_source
+msgid "Source"
+msgstr "ต้นฉบับ"
+
+#. video mode/display size menu title
+#. ** please keep it really short (comparable to the english text) **
+#. txt_video_mode
+msgid "Video Mode"
+msgstr "โหมดแสดงผล"
+
+#. driver update dialog title
+#. -> txt_dud_file_msg
+#. txt_driver_update2
+msgid "Driver Update"
+msgstr "อัปเดตไดรเวอร์"
+
+#. menu label for selecting (cpu) architecture
+#. like i386, x86-64, ppc
+#. ** please keep it really short (comparable to the english text) **
+#. txt_arch
+msgid "Arch"
+msgstr "สถาปัตยกรรม"
+
+#. menu label for selecting some (linux) kernel variant
+#. ** please keep it really short (comparable to the english text) **
+#. txt_kernel
+msgid "Kernel"
+msgstr "เคอร์เนล"
+
+#. menu item for kernel variant (cf. txt_kernel)
+#. txt_kernel_default
+msgid "Default"
+msgstr "ค่าปริยาย"
+
+#. menu item for kernel variant (cf. txt_kernel)
+#. -> like in txt_safe_linux
+#. txt_kernel_safe
+msgid "Safe Settings"
+msgstr "ตั้งค่าแบบปลอดภัย"
+
+#. menu item for kernel variant (cf. txt_kernel)
+#. -> similar to txt_noacpi_install
+#. txt_kernel_noacpi
+msgid "No ACPI"
+msgstr "ไม่มี ACPI"
+
+#. menu item for kernel variant (cf. txt_kernel)
+#. -> similar to txt_nolapic_install
+#. txt_kernel_nolapic
+msgid "No Local APIC"
+msgstr "ไม่มี APIC ภายใน"
+
+#. main menu: start in system repair mode
+#. txt_repain_system
+msgid "Repair Installed System"
+msgstr "ซ่อมแซมระบบที่ติดตั้งไว้"
+
+#. menu item
+#. txt_mediacheck
+msgid "Check Installation Media"
+msgstr "ตรวจสอบสื่อการติดตั้ง"
+
+#. menu item for keyboard layout (please keep it short)
+#. txt_keyboard
+msgid "Keyboard"
+msgstr "แป้นพิมพ์"
+
+#. menu title
+#. txt_dud_download
+msgid "Download Driver Update"
+msgstr "ดาวน์โหลดไดรเวอร์รุ่นใหม่"
+
+#. input label
+#. txt_dud_enter_url
+msgid "Enter Driver Update URL\n"
+msgstr "ป้อนที่อยู่ URL ของไดรเวอร์รุ่นใหม่\n"
+
+#. menu item
+#. txt_http_proxy
+msgid "HTTP Proxy"
+msgstr "พร็อกซีบริการ HTTP"
+
+#. menu item
+#. txt_network_config
+msgid "Network Config"
+msgstr "ปรับแต่งค่าเครือข่าย"
+
+#. menu item
+#. txt_no_network
+msgid "No Network"
+msgstr "ไม่มีเครือข่าย"
+
+#. short menu item for manual network config (NOT some kind of manual)
+#. txt_manual_network
+msgid "Manual"
+msgstr "ตั้งด้วยตนเอง"
+
+#. dialog title for manual network config
+#. txt_manual_network_title
+msgid "Manual Network Config"
+msgstr "การปรับแต่งค่าเครือข่ายด้วยตนเอง"
+
+#. label for ip address
+#. txt_host_ip
+msgid "Host IP\n"
+msgstr "ค่าไอพีของเครื่อง\n"
+
+#. label for gateway ip
+#. txt_gateway_ip
+msgid "Gateway\n"
+msgstr "เกตเวย์\n"
+
+#. label for dns domain name (like 'opensuse.org')
+#. txt_domain_name
+msgid "Domain Name\n"
+msgstr "ชื่อโดเมน\n"
+
+#. label for nameserver list
+#. txt_nameservers
+msgid "Nameservers (separated by ',')\n"
+msgstr "เครื่องให้บริการสืบค้นชื่อ (แยกแต่ละตัวด้วยเครื่องหมาย ',')\n"
+
+#. label for netmask; 'Host IP' refers to label txt_host_ip above
+#. txt_netmask
+msgid "Netmask\n(or use '/N' notation with Host IP)\n"
+msgstr ""
+"มาสก์เครือข่าย\n"
+"(หรือใช้ค่าบิทเครือข่าย '/N' ร่วมกับค่าไอพีของเครื่อง)\n"
+
+#. label for Live CD installation
+#. txt_live_kde
+msgid "openSUSE Live (KDE)"
+msgstr "openSUSE Live (KDE)"
+
+#. label for Live CD installation
+#. txt_live_gnome
+msgid "openSUSE Live (GNOME)"
+msgstr "openSUSE Live (GNOME)"
diff --git a/themes/openSUSE/po/tr.po b/themes/openSUSE/po/tr.po
new file mode 100644
index 0000000..9c010db
--- /dev/null
+++ b/themes/openSUSE/po/tr.po
@@ -0,0 +1,441 @@
+# LANGUAGE translations for boot loader
+# Copyright (C) 2005 SUSE Linux GmbH
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: YaST (@memory@)\n"
+"Report-Msgid-Bugs-To: translation@suse.de\n"
+"POT-Creation-Date: 2006-05-15 15:07+0200\n"
+"PO-Revision-Date: 2006-10-18 04:18+0100\n"
+"Last-Translator: Ömer Kehri <xanathar@gmx.com.tr>\n"
+"Language-Team: turkish <i18n@suse.de>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+#. ok button label
+#. txt_ok
+msgid "OK"
+msgstr "Tamam"
+
+#. cancel button label
+#. txt_cancel
+msgid "Cancel"
+msgstr "Vazgeç"
+
+#. reboot button label
+#. txt_reboot
+msgid "Reboot"
+msgstr "Yeniden başlat"
+
+#. continue button label
+#. txt_continue
+msgid "Continue"
+msgstr "Devam et"
+
+#. txt_install
+msgid "Installation"
+msgstr "Kurulum"
+
+#. txt_safe_linux
+msgid "Linux--Safe Settings"
+msgstr "Linux--Güvenli ayarlar"
+
+#. txt_boot_harddisk
+msgid "Boot from Hard Disk"
+msgstr "Sistemi sabit diskten aç"
+
+#. txt_rescue
+msgid "Rescue System"
+msgstr "Kurtarma sistemi"
+
+#. txt_memtest
+msgid "Memory Test"
+msgstr "Bellek testi"
+
+#. txt_bootoptions
+msgid "Boot Options"
+msgstr "Açılış seçenekleri"
+
+#. window title for exit dialog
+#. txt_exit_title (see txt_exit_dialog)
+msgid "Exiting..."
+msgstr "Çıkılıyor..."
+
+#. txt_exit_dialog
+msgid ""
+"You are leaving the graphical boot menu and\n"
+"starting the text mode interface."
+msgstr ""
+"Grafik arabirimini kullanan açılış menüsünden çıkıyor ve\n"
+"yazı tabanlı arabirimi başlatıyorsunuz."
+
+#. txt_help
+msgid "Help"
+msgstr "Yardım"
+
+#. window title for kernel loading (see txt_load_kernel)
+#. txt_load_kernel_title
+msgid "Starting..."
+msgstr "Başlatılıyor..."
+
+#. Keep the three newlines!
+#. txt_load_kernel
+msgid ""
+"Loading Linux Kernel\n"
+"\n"
+"\n"
+msgstr ""
+"Linux kernel'i yükleniyor\n"
+"\n"
+"\n"
+
+#. Keep the three newlines!
+#. txt_load_memtest
+msgid ""
+"Loading memtest86\n"
+"\n"
+"\n"
+msgstr ""
+"memtest86 yükleniyor\n"
+"\n"
+"\n"
+
+#. info box title
+#. txt_info_title
+msgid "Boot Loader"
+msgstr "Açılış yükleyicisi"
+
+#. error box title
+#. txt_error_title
+msgid "I/O Error"
+msgstr "Giriş/Çıkış hatası"
+
+#. boot disk change dialog title
+#. txt_change_disk_title
+msgid "Change Boot Disk"
+msgstr "Sistem açılış diskini değiştir"
+
+#. txt_insert_disk
+#, c-format
+msgid "Insert boot disk %u."
+msgstr "%u açılış diskini takın."
+
+#. txt_insert_disk2
+#, c-format
+msgid ""
+"This is boot disk %u.\n"
+"Insert boot disk %u."
+msgstr ""
+"Bu açılış diski %u.\n"
+"%u açılış diskini takın."
+
+#. <product> is e.g. SuSE Linux X.Y or Enterprise Server Z
+#. txt_insert_disk3
+#, c-format
+msgid ""
+"This is not a <product> boot disk.\n"
+"Insert boot disk %u."
+msgstr ""
+"Bu <product> açılış diski değil.\n"
+"%u açılış diskini takın."
+
+#. password dialog title
+#. txt_password_title
+msgid "Password"
+msgstr "Parola"
+
+#. txt_dud_ready
+msgid "Get your driver update floppy ready."
+msgstr "Sürücü güncelleme disketini hazır bulundurun."
+
+#. power off dialog title
+#. txt_power_off_title
+msgid "Power Off"
+msgstr "Sistemi kapat"
+
+#. txt_power_off
+msgid "Halt the system now?"
+msgstr "Sistem şimdi kapatılsın mı?"
+
+#. menu entry for hard disk installation
+#. txt_harddisk
+msgid "Hard Disk"
+msgstr "Sabit disk"
+
+#. dialog title for hard disk installation
+#. txt_harddisk_title
+msgid "Hard Disk Installation"
+msgstr "Sabit disk kurulumu"
+
+#. txt_hd_diskdevice
+msgid "Disk Device (Scans All Disks If Empty)\n"
+msgstr "Disk aygıtı (Boş bırakılırsa tüm diskler taranacak)\n"
+
+#. txt_directory
+msgid "Directory\n"
+msgstr "Dizin\n"
+
+#. dialog title for ftp installation
+#. txt_ftp_title
+msgid "FTP Installation"
+msgstr "FTP kurulumu"
+
+#. txt_server
+msgid "Server\n"
+msgstr "Sunucu\n"
+
+#. txt_password
+msgid "Password\n"
+msgstr "Parola\n"
+
+#. label for ftp user input
+#. txt_user1
+msgid "User (Anonymous Login If Empty)\n"
+msgstr "Kullanıcı (Boş bırakılırsa anonim olarak giriş yapılacak)\n"
+
+#. dialog title for nfs installation
+#. txt_nfs_title
+msgid "NFS Installation"
+msgstr "NFS kurulumu"
+
+#. label for smb user input
+#. txt_user2
+msgid "User (Uses \"guest\" If Empty)\n"
+msgstr "Kullanıcı (Boş bırakılırsa \"guest\" kullanılacak)\n"
+
+#. dialog title for smb installation
+#. txt_smb_title
+msgid "SMB (Windows Share) Installation"
+msgstr "SMB (Windows paylaşımı) kurulumu"
+
+#. dialog title for http installation
+#. txt_http_title
+msgid "HTTP Installation"
+msgstr "HTTP kurulumu"
+
+#. 'driver' as in '(hardware) driver update'
+#. txt_driver_update
+msgid "Driver"
+msgstr "Sürücü"
+
+#. as in Windows Authentication Domain
+#. txt_domain
+msgid "Domain\n"
+msgstr "Alan\n"
+
+#. button label for other/more options
+#. txt_other_options
+msgid "Other Options"
+msgstr "Diğer seçenekler"
+
+#. label for language selection
+#. txt_language
+msgid "Language"
+msgstr "Dil"
+
+#. txt_yes
+msgid "Yes"
+msgstr "Evet"
+
+#. txt_no
+msgid "No"
+msgstr "Hayır"
+
+#. menu item for selecting a file
+#. txt_file
+msgid "File"
+msgstr "Dosya"
+
+#. input label: share as in "Windows share" (SMB)
+#. txt_share
+msgid "Share\n"
+msgstr "Paylaşım\n"
+
+#. txt_zenAuto
+msgid "Automatic Mode"
+msgstr "Otomatik mod"
+
+#. txt_zenManual
+msgid "Manual Mode"
+msgstr "Elle kullanma modu"
+
+#. txt_zenConfig
+msgid "Configure Parameters on ZEN Partition"
+msgstr "ZEN disk bölümündeki parametreleri ayarla"
+
+#. txt_zenInstall
+msgid "Install or Update ZEN Partition"
+msgstr "Bir ZEN disk bölümü kur/güncelle"
+
+#. txt_zenLilo
+msgid "Reinstall ZEN Partition Boot Loader"
+msgstr "ZEN bölümü açılış yükleyicisini yeniden kur"
+
+#. txt_zenDisable
+msgid "Disable ZEN Partition"
+msgstr "ZEN bölümünü devre dışı bırak"
+
+#. txt_zenEnable
+msgid "Enable ZEN Partition"
+msgstr "ZEN bölümünü etkinleştir"
+
+#. video mode menu item
+#. txt_text_mode
+msgid "Text Mode"
+msgstr "Yazı modu"
+
+#. menu item, like 'memory test'
+#. txt_firmware
+msgid "Firmware Test"
+msgstr "Aygıt yazılımı testi"
+
+#. txt_dud_file_msg
+msgid ""
+"To load driver updates directly from CD-ROM,\n"
+"enter the driver update file names (separated\n"
+"by commas ',') here:\n"
+msgstr ""
+"Sürücü güncellemelerini doğrudan CD-ROM'dan\n"
+"yüklemek için sürücü güncelleme dosya adlarını girin:\n"
+"(virgüllerle ',' ayırarak)\n"
+
+#. install source menu title
+#. ** please keep it really short (comparable to the english text) **
+#. txt_install_source
+msgid "Source"
+msgstr "Kaynak"
+
+#. video mode/display size menu title
+#. ** please keep it really short (comparable to the english text) **
+#. txt_video_mode
+msgid "Video Mode"
+msgstr ""
+
+#. driver update dialog title
+#. -> txt_dud_file_msg
+#. txt_driver_update2
+msgid "Driver Update"
+msgstr ""
+
+#. menu label for selecting (cpu) architecture
+#. like i386, x86-64, ppc
+#. ** please keep it really short (comparable to the english text) **
+#. txt_arch
+msgid "Arch"
+msgstr "Mimari"
+
+#. menu label for selecting some (linux) kernel variant
+#. ** please keep it really short (comparable to the english text) **
+#. txt_kernel
+msgid "Kernel"
+msgstr ""
+
+#. menu item for kernel variant (cf. txt_kernel)
+#. txt_kernel_default
+msgid "Default"
+msgstr ""
+
+#. menu item for kernel variant (cf. txt_kernel)
+#. -> like in txt_safe_linux
+#. txt_kernel_safe
+msgid "Safe Settings"
+msgstr ""
+
+#. menu item for kernel variant (cf. txt_kernel)
+#. -> similar to txt_noacpi_install
+#. txt_kernel_noacpi
+msgid "No ACPI"
+msgstr ""
+
+#. menu item for kernel variant (cf. txt_kernel)
+#. -> similar to txt_nolapic_install
+#. txt_kernel_nolapic
+msgid "No Local APIC"
+msgstr ""
+
+#. main menu: start in system repair mode
+#. txt_repain_system
+msgid "Repair Installed System"
+msgstr ""
+
+#. menu item
+#. txt_mediacheck
+msgid "Check Installation Media"
+msgstr ""
+
+#. menu item for keyboard layout (please keep it short)
+#. txt_keyboard
+msgid "Keyboard"
+msgstr "Klavye"
+
+#. menu title
+#. txt_dud_download
+msgid "Download Driver Update"
+msgstr ""
+
+#. input label
+#. txt_dud_enter_url
+msgid "Enter Driver Update URL\n"
+msgstr ""
+
+#. menu item
+#. txt_http_proxy
+msgid "HTTP Proxy"
+msgstr ""
+
+#. menu item
+#. txt_network_config
+msgid "Network Config"
+msgstr ""
+
+#. menu item
+#. txt_no_network
+msgid "No Network"
+msgstr ""
+
+#. short menu item for manual network config (NOT some kind of manual)
+#. txt_manual_network
+msgid "Manual"
+msgstr ""
+
+#. dialog title for manual network config
+#. txt_manual_network_title
+msgid "Manual Network Config"
+msgstr ""
+
+#. label for ip address
+#. txt_host_ip
+msgid "Host IP\n"
+msgstr ""
+
+#. label for gateway ip
+#. txt_gateway_ip
+msgid "Gateway\n"
+msgstr ""
+
+#. label for dns domain name (like 'opensuse.org')
+#. txt_domain_name
+msgid "Domain Name\n"
+msgstr ""
+
+#. label for nameserver list
+#. txt_nameservers
+msgid "Nameservers (separated by ',')\n"
+msgstr ""
+
+#. label for netmask; 'Host IP' refers to label txt_host_ip above
+#. txt_netmask
+msgid "Netmask\n(or use '/N' notation with Host IP)\n"
+msgstr ""
+
+#. label for Live CD installation
+#. txt_live_kde
+msgid "openSUSE Live (KDE)"
+msgstr ""
+
+#. label for Live CD installation
+#. txt_live_gnome
+msgid "openSUSE Live (GNOME)"
+msgstr ""
diff --git a/themes/openSUSE/po/uk.po b/themes/openSUSE/po/uk.po
new file mode 100644
index 0000000..3e0084f
--- /dev/null
+++ b/themes/openSUSE/po/uk.po
@@ -0,0 +1,445 @@
+# translation of uk.po to Ukrainian
+# LANGUAGE translations for boot loader
+# Copyright (C) 2004 SUSE LINUX AG
+#
+# Ivan Petrouchtchak <iip@telus.net>, 2005.
+# Ivan Petrouchtchak <ivanpetrouchtchak@yahoo.com>, 2006.
+msgid ""
+msgstr ""
+"Project-Id-Version: bootloader.uk\n"
+"PO-Revision-Date: 2009-10-05 21:52-0700\n"
+"Last-Translator: Ivan Petrouchtchak <fr.ivan@ukrainian-orthodox.org>\n"
+"Language-Team: Ukrainian <translation@linux.org.ua>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.11.4\n"
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
+
+#. ok button label
+#. txt_ok
+msgid "OK"
+msgstr "Гаразд"
+
+#. cancel button label
+#. txt_cancel
+msgid "Cancel"
+msgstr "Скасувати"
+
+#. reboot button label
+#. txt_reboot
+msgid "Reboot"
+msgstr "Перезавантажити комп'ютер"
+
+#. continue button label
+#. txt_continue
+msgid "Continue"
+msgstr "Продовжити"
+
+#. txt_install
+msgid "Installation"
+msgstr "Встановлення"
+
+#. txt_safe_linux
+msgid "Linux--Safe Settings"
+msgstr "Linux -- безпечні параметри"
+
+#. txt_boot_harddisk
+msgid "Boot from Hard Disk"
+msgstr "Завантажити з жорсткого диска"
+
+#. txt_rescue
+msgid "Rescue System"
+msgstr "Порятунок системи"
+
+#. txt_memtest
+msgid "Memory Test"
+msgstr "Тест пам'яті"
+
+#. txt_bootoptions
+msgid "Boot Options"
+msgstr "Параметри завантаження"
+
+#. window title for exit dialog
+#. txt_exit_title (see txt_exit_dialog)
+msgid "Exiting..."
+msgstr "Вихід..."
+
+#. txt_exit_dialog
+msgid ""
+"You are leaving the graphical boot menu and\n"
+"starting the text mode interface."
+msgstr ""
+"Ви покидаєте графічне меню завантаження\n"
+"і запускаєте текстовий варіант інтерфейсу."
+
+#. txt_help
+msgid "Help"
+msgstr "Довідка"
+
+#. window title for kernel loading (see txt_load_kernel)
+#. txt_load_kernel_title
+msgid "Starting..."
+msgstr "Запуск..."
+
+#. Keep the three newlines!
+#. txt_load_kernel
+msgid ""
+"Loading Linux Kernel\n"
+"\n"
+"\n"
+msgstr ""
+"Завантаження ядра Linux\n"
+"\n"
+"\n"
+
+#. Keep the three newlines!
+#. txt_load_memtest
+msgid ""
+"Loading memtest86\n"
+"\n"
+"\n"
+msgstr ""
+"Завантаження memtest86\n"
+"\n"
+"\n"
+
+#. info box title
+#. txt_info_title
+msgid "Boot Loader"
+msgstr "Завантажувач"
+
+#. error box title
+#. txt_error_title
+msgid "I/O Error"
+msgstr "Помилка вводу/виводу"
+
+#. boot disk change dialog title
+#. txt_change_disk_title
+msgid "Change Boot Disk"
+msgstr "Змініть завантажувальний диск"
+
+#. txt_insert_disk
+#, c-format
+msgid "Insert boot disk %u."
+msgstr "Вставте завантажувальний диск %u."
+
+#. txt_insert_disk2
+#, c-format
+msgid ""
+"This is boot disk %u.\n"
+"Insert boot disk %u."
+msgstr ""
+"Це завантажувальний диск %u.\n"
+"Вставте завантажувальний диск %u."
+
+#. <product> is e.g. SuSE Linux X.Y or Enterprise Server Z
+#. txt_insert_disk3
+#, c-format
+msgid ""
+"This is not a <product> boot disk.\n"
+"Insert boot disk %u."
+msgstr ""
+"Це не завантажувальний диск <product>.\n"
+"Вставте завантажувальний диск %u."
+
+#. password dialog title
+#. txt_password_title
+msgid "Password"
+msgstr "Пароль"
+
+#. txt_dud_ready
+msgid "Get your driver update floppy ready."
+msgstr "Підготуйте дискету з оновленнями драйверів."
+
+#. power off dialog title
+#. txt_power_off_title
+msgid "Power Off"
+msgstr "Вимкнути живлення"
+
+#. txt_power_off
+msgid "Halt the system now?"
+msgstr "Хочете зараз вимкнути систему?"
+
+#. menu entry for hard disk installation
+#. txt_harddisk
+msgid "Hard Disk"
+msgstr "Жорсткий диск"
+
+#. dialog title for hard disk installation
+#. txt_harddisk_title
+msgid "Hard Disk Installation"
+msgstr "Встановлення з жорсткого диска"
+
+#. txt_hd_diskdevice
+msgid "Disk Device (Scans All Disks If Empty)\n"
+msgstr "Дисковий пристрій (зондує всі диски, якщо порожнє)\n"
+
+#. txt_directory
+msgid "Directory\n"
+msgstr "Каталог\n"
+
+#. dialog title for ftp installation
+#. txt_ftp_title
+msgid "FTP Installation"
+msgstr "Встановлення з FTP"
+
+#. txt_server
+msgid "Server\n"
+msgstr "Сервер\n"
+
+#. txt_password
+msgid "Password\n"
+msgstr "Пароль\n"
+
+#. label for ftp user input
+#. txt_user1
+msgid "User (Anonymous Login If Empty)\n"
+msgstr "Користувач (анонімний вхід, якщо порожнє)\n"
+
+#. dialog title for nfs installation
+#. txt_nfs_title
+msgid "NFS Installation"
+msgstr "Встановлення з NFS"
+
+#. label for smb user input
+#. txt_user2
+msgid "User (Uses \"guest\" If Empty)\n"
+msgstr "Користувач (вживає «guest», якщо порожнє)\n"
+
+#. dialog title for smb installation
+#. txt_smb_title
+msgid "SMB (Windows Share) Installation"
+msgstr "Встановлення з SMB (Windows Share)"
+
+#. dialog title for http installation
+#. txt_http_title
+msgid "HTTP Installation"
+msgstr "Встановлення через HTTP"
+
+#. 'driver' as in '(hardware) driver update'
+#. txt_driver_update
+msgid "Driver"
+msgstr "Драйвер"
+
+#. as in Windows Authentication Domain
+#. txt_domain
+msgid "Domain\n"
+msgstr "Домен\n"
+
+#. button label for other/more options
+#. txt_other_options
+msgid "Other Options"
+msgstr "Інші параметри"
+
+#. label for language selection
+#. txt_language
+msgid "Language"
+msgstr "Мова"
+
+#. txt_yes
+msgid "Yes"
+msgstr "Так"
+
+#. txt_no
+msgid "No"
+msgstr "Ні"
+
+#. menu item for selecting a file
+#. txt_file
+msgid "File"
+msgstr "Файл"
+
+#. input label: share as in "Windows share" (SMB)
+#. txt_share
+msgid "Share\n"
+msgstr "Ресурс\n"
+
+#. txt_zenAuto
+msgid "Automatic Mode"
+msgstr "Автоматичний режим"
+
+#. txt_zenManual
+msgid "Manual Mode"
+msgstr "Ручний режим"
+
+#. txt_zenConfig
+msgid "Configure Parameters on ZEN Partition"
+msgstr "Налаштувати параметри на розділі ZEN"
+
+#. txt_zenInstall
+msgid "Install or Update ZEN Partition"
+msgstr "Встановити або оновити розділ ZEN"
+
+#. txt_zenLilo
+msgid "Reinstall ZEN Partition Boot Loader"
+msgstr "Перевстановити завантажувач розділу ZEN"
+
+#. txt_zenDisable
+msgid "Disable ZEN Partition"
+msgstr "Вимкнути розділ ZEN"
+
+#. txt_zenEnable
+msgid "Enable ZEN Partition"
+msgstr "Увімкнути розділ ZEN"
+
+#. video mode menu item
+#. txt_text_mode
+msgid "Text Mode"
+msgstr "Текстовий режим"
+
+#. menu item, like 'memory test'
+#. txt_firmware
+msgid "Firmware Test"
+msgstr "Тест мікропрограмного забезпечення"
+
+#. txt_dud_file_msg
+msgid ""
+"To load driver updates directly from CD-ROM,\n"
+"enter the driver update file names (separated\n"
+"by commas ',') here:\n"
+msgstr ""
+"Щоб завантажити оновлення драйверів з\n"
+"CD-ROM, введіть сюди назви файлів для\n"
+"оновлення драйвера (розділені комами \",\"):\n"
+
+#. install source menu title
+#. ** please keep it really short (comparable to the english text) **
+#. txt_install_source
+msgid "Source"
+msgstr "Джерело"
+
+#. video mode/display size menu title
+#. ** please keep it really short (comparable to the english text) **
+#. txt_video_mode
+msgid "Video Mode"
+msgstr "Відеорежим"
+
+#. driver update dialog title
+#. -> txt_dud_file_msg
+#. txt_driver_update2
+msgid "Driver Update"
+msgstr "Оновлення драйверів"
+
+#. menu label for selecting (cpu) architecture
+#. like i386, x86-64, ppc
+#. ** please keep it really short (comparable to the english text) **
+#. txt_arch
+msgid "Arch"
+msgstr "Арх."
+
+#. menu label for selecting some (linux) kernel variant
+#. ** please keep it really short (comparable to the english text) **
+#. txt_kernel
+msgid "Kernel"
+msgstr "Ядро"
+
+#. menu item for kernel variant (cf. txt_kernel)
+#. txt_kernel_default
+msgid "Default"
+msgstr "Типове"
+
+#. menu item for kernel variant (cf. txt_kernel)
+#. -> like in txt_safe_linux
+#. txt_kernel_safe
+msgid "Safe Settings"
+msgstr "Безпечні параметри"
+
+#. menu item for kernel variant (cf. txt_kernel)
+#. -> similar to txt_noacpi_install
+#. txt_kernel_noacpi
+msgid "No ACPI"
+msgstr "Без ACPI"
+
+#. menu item for kernel variant (cf. txt_kernel)
+#. -> similar to txt_nolapic_install
+#. txt_kernel_nolapic
+msgid "No Local APIC"
+msgstr "Без локального APIC"
+
+#. main menu: start in system repair mode
+#. txt_repain_system
+msgid "Repair Installed System"
+msgstr "Поремонтувати встановлену систему"
+
+#. menu item
+#. txt_mediacheck
+msgid "Check Installation Media"
+msgstr "Перевірити носій для встановлення"
+
+#. menu item for keyboard layout (please keep it short)
+#. txt_keyboard
+msgid "Keyboard"
+msgstr "Клавіатура"
+
+#. menu title
+#. txt_dud_download
+msgid "Download Driver Update"
+msgstr "Завантажити оновлення драйверів"
+
+#. input label
+#. txt_dud_enter_url
+msgid "Enter Driver Update URL\n"
+msgstr "Введіть URL для оновлення драйверів\n"
+
+#. menu item
+#. txt_http_proxy
+msgid "HTTP Proxy"
+msgstr "Проксі HTTP"
+
+#. menu item
+#. txt_network_config
+msgid "Network Config"
+msgstr "Налаштування мережі"
+
+#. menu item
+#. txt_no_network
+msgid "No Network"
+msgstr "Нема мережі"
+
+#. short menu item for manual network config (NOT some kind of manual)
+#. txt_manual_network
+msgid "Manual"
+msgstr "Ручне"
+
+#. dialog title for manual network config
+#. txt_manual_network_title
+msgid "Manual Network Config"
+msgstr "Налаштування мережі вручну"
+
+#. label for ip address
+#. txt_host_ip
+msgid "Host IP\n"
+msgstr "IP вузла\n"
+
+#. label for gateway ip
+#. txt_gateway_ip
+msgid "Gateway\n"
+msgstr "Шлюз\n"
+
+#. label for dns domain name (like 'opensuse.org')
+#. txt_domain_name
+msgid "Domain Name\n"
+msgstr "Назва домену\n"
+
+#. label for nameserver list
+#. txt_nameservers
+msgid "Nameservers (separated by ',')\n"
+msgstr "Сервери назв (розділені «,»)\n"
+
+#. label for netmask; 'Host IP' refers to label txt_host_ip above
+#. txt_netmask
+msgid "Netmask\n(or use '/N' notation with Host IP)\n"
+msgstr ""
+"Маска мережі\n"
+"(або використовуйте нотацію «/N» з IP вузла)\n"
+
+#. label for Live CD installation
+#. txt_live_kde
+msgid "openSUSE Live (KDE)"
+msgstr "Живчик openSUSE (KDE)"
+
+#. label for Live CD installation
+#. txt_live_gnome
+msgid "openSUSE Live (GNOME)"
+msgstr "Живчик openSUSE (GNOME)"
diff --git a/themes/openSUSE/po/wa.po b/themes/openSUSE/po/wa.po
new file mode 100644
index 0000000..c09b73e
--- /dev/null
+++ b/themes/openSUSE/po/wa.po
@@ -0,0 +1,443 @@
+# LANGUAGE translations for boot loader
+# Copyright (C) 2005 SUSE Linux GmbH
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: bootloader.wa\n"
+"POT-Creation-Date: 2006-10-01 19:37+0200\n"
+"PO-Revision-Date: 2009-10-14 18:42+0200\n"
+"Last-Translator: Jean Cayron <jean.cayron@gmail.com>\n"
+"Language-Team: American English <linux-wa@walon.org>\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: Lokalize 0.3\n"
+
+#. ok button label
+#. txt_ok
+msgid "OK"
+msgstr "I va"
+
+#. cancel button label
+#. txt_cancel
+msgid "Cancel"
+msgstr "Rinoncî"
+
+#. reboot button label
+#. txt_reboot
+msgid "Reboot"
+msgstr "Renonder l' copiutrece"
+
+#. continue button label
+#. txt_continue
+msgid "Continue"
+msgstr "Continouwer"
+
+#. txt_install
+msgid "Installation"
+msgstr "Astalaedje"
+
+#. txt_safe_linux
+msgid "Linux--Safe Settings"
+msgstr "Linux--Tchuzes di såvrité"
+
+#. txt_boot_harddisk
+msgid "Boot from Hard Disk"
+msgstr "Enonder a pårti del deure plake"
+
+#. txt_rescue
+msgid "Rescue System"
+msgstr "Sistinme di houplaedje"
+
+#. txt_memtest
+msgid "Memory Test"
+msgstr "Saye di memwere"
+
+#. txt_bootoptions
+msgid "Boot Options"
+msgstr "Tchuzes d' enondaedje"
+
+#. window title for exit dialog
+#. txt_exit_title (see txt_exit_dialog)
+msgid "Exiting..."
+msgstr "Dji cwite..."
+
+#. txt_exit_dialog
+msgid ""
+"You are leaving the graphical boot menu and\n"
+"starting the text mode interface."
+msgstr ""
+"Vos cwitez l' menu grafike d' enondaedje sistinme et\n"
+"enondez l' eterface e mode tecse."
+
+#. txt_help
+msgid "Help"
+msgstr "Aidance"
+
+#. window title for kernel loading (see txt_load_kernel)
+#. txt_load_kernel_title
+msgid "Starting..."
+msgstr "Dj' enonde..."
+
+#. Keep the three newlines!
+#. txt_load_kernel
+msgid ""
+"Loading Linux Kernel\n"
+"\n"
+"\n"
+msgstr ""
+"Dji tchedje li nawea Linux\n"
+"\n"
+"\n"
+
+#. Keep the three newlines!
+#. txt_load_memtest
+msgid ""
+"Loading memtest86\n"
+"\n"
+"\n"
+msgstr ""
+"Dji tchedje memtest86\n"
+"\n"
+"\n"
+
+#. info box title
+#. txt_info_title
+msgid "Boot Loader"
+msgstr "Tcherdjeu d' enondaedje sistinme"
+
+#. error box title
+#. txt_error_title
+msgid "I/O Error"
+msgstr "Aroke d' I/R"
+
+#. boot disk change dialog title
+#. txt_change_disk_title
+msgid "Change Boot Disk"
+msgstr "Candjî l' plake d' enondaedje"
+
+#. txt_insert_disk
+#, c-format
+msgid "Insert boot disk %u."
+msgstr "Intrez l' diskete d' enondaedje %u"
+
+#. txt_insert_disk2
+#, c-format
+msgid ""
+"This is boot disk %u.\n"
+"Insert boot disk %u."
+msgstr ""
+"Çouci est l' diskete d' enondaedje %u.\n"
+"Intrez l' diskete d' enondaedje %u."
+
+#. <product> is e.g. SuSE Linux X.Y or Enterprise Server Z
+#. txt_insert_disk3
+#, c-format
+msgid ""
+"This is not a <product> boot disk.\n"
+"Insert boot disk %u."
+msgstr ""
+"Çouci n' est nén ene diskete d' enondaedje <product>.\n"
+"Intrez l' diskete d' enondaedje %u."
+
+#. password dialog title
+#. txt_password_title
+msgid "Password"
+msgstr "Sicret"
+
+#. txt_dud_ready
+msgid "Get your driver update floppy ready."
+msgstr "Preparez vosse diskete di metaedje a djoû di moenneu."
+
+#. power off dialog title
+#. txt_power_off_title
+msgid "Power Off"
+msgstr "Distinde"
+
+#. txt_power_off
+msgid "Halt the system now?"
+msgstr "Arester l' sistinme asteure?"
+
+#. menu entry for hard disk installation
+#. txt_harddisk
+msgid "Hard Disk"
+msgstr "Deure plake"
+
+#. dialog title for hard disk installation
+#. txt_harddisk_title
+msgid "Hard Disk Installation"
+msgstr "Astalaedje del deure plake"
+
+#. txt_hd_diskdevice
+msgid "Disk Device (Scans All Disks If Empty)\n"
+msgstr "Éndjin plake (scane totes les plakes si vude)\n"
+
+#. txt_directory
+msgid "Directory\n"
+msgstr "Ridant\n"
+
+#. dialog title for ftp installation
+#. txt_ftp_title
+msgid "FTP Installation"
+msgstr "Astalaedje FTP"
+
+#. txt_server
+msgid "Server\n"
+msgstr "Sierveu\n"
+
+#. txt_password
+msgid "Password\n"
+msgstr "Sicret\n"
+
+#. label for ftp user input
+#. txt_user1
+msgid "User (Anonymous Login If Empty)\n"
+msgstr "Uzeu (login racamuchyî si vude)\n"
+
+#. dialog title for nfs installation
+#. txt_nfs_title
+msgid "NFS Installation"
+msgstr "Astalaedje NFS"
+
+#. label for smb user input
+#. txt_user2
+msgid "User (Uses \"guest\" If Empty)\n"
+msgstr "Uzeu (eploye \"guest\" si vude)\n"
+
+#. dialog title for smb installation
+#. txt_smb_title
+msgid "SMB (Windows Share) Installation"
+msgstr "Astalaedje SMB (pårtaedje avou Windows)"
+
+#. dialog title for http installation
+#. txt_http_title
+msgid "HTTP Installation"
+msgstr "Astalaedje HTTP"
+
+#. 'driver' as in '(hardware) driver update'
+#. txt_driver_update
+msgid "Driver"
+msgstr "Mineu"
+
+#. as in Windows Authentication Domain
+#. txt_domain
+msgid "Domain\n"
+msgstr "Dominne\n"
+
+#. button label for other/more options
+#. txt_other_options
+msgid "Other Options"
+msgstr "Ôtès tchuzes"
+
+#. label for language selection
+#. txt_language
+msgid "Language"
+msgstr "Lingaedje"
+
+#. txt_yes
+msgid "Yes"
+msgstr "Oyi"
+
+#. txt_no
+msgid "No"
+msgstr "Nonna"
+
+#. menu item for selecting a file
+#. txt_file
+msgid "File"
+msgstr "Fitchî"
+
+#. input label: share as in "Windows share" (SMB)
+#. txt_share
+msgid "Share\n"
+msgstr "Pårtaedje\n"
+
+#. txt_zenAuto
+msgid "Automatic Mode"
+msgstr "Môde otomatike"
+
+#. txt_zenManual
+msgid "Manual Mode"
+msgstr "Môde al mwin"
+
+#. txt_zenConfig
+msgid "Configure Parameters on ZEN Partition"
+msgstr "Apontyî les parametes sol pårticion ZEN"
+
+#. txt_zenInstall
+msgid "Install or Update ZEN Partition"
+msgstr "Astaler ou mete a djoû les pårticion ZEN"
+
+#. txt_zenLilo
+msgid "Reinstall ZEN Partition Boot Loader"
+msgstr "Rastaler l' tcherdjeu d' enondaedje del pårticion ZEN"
+
+#. txt_zenDisable
+msgid "Disable ZEN Partition"
+msgstr "Dismete li pårticion ZEN"
+
+#. txt_zenEnable
+msgid "Enable ZEN Partition"
+msgstr "Mete en alaedje le pårticion ZEN"
+
+#. video mode menu item
+#. txt_text_mode
+msgid "Text Mode"
+msgstr "Môde tecse"
+
+#. menu item, like 'memory test'
+#. txt_firmware
+msgid "Firmware Test"
+msgstr "Saye firmware"
+
+#. txt_dud_file_msg
+msgid ""
+"To load driver updates directly from CD-ROM,\n"
+"enter the driver update file names (separated\n"
+"by commas ',') here:\n"
+msgstr ""
+"Po tcherdjî les metaedjes a djoû d' moenneu direk do\n"
+"CD-ROM, intrez les nos d' fitchî di metaedje a djoû\n"
+"(metous a pårt pa des comas ',') vaici:\n"
+
+#. install source menu title
+#. ** please keep it really short (comparable to the english text) **
+#. txt_install_source
+msgid "Source"
+msgstr "Sourdant"
+
+#. video mode/display size menu title
+#. ** please keep it really short (comparable to the english text) **
+#. txt_video_mode
+msgid "Video Mode"
+msgstr "Môde videyo"
+
+#. driver update dialog title
+#. -> txt_dud_file_msg
+#. txt_driver_update2
+msgid "Driver Update"
+msgstr "Metaedje a djoû do mineu"
+
+#. menu label for selecting (cpu) architecture
+#. like i386, x86-64, ppc
+#. ** please keep it really short (comparable to the english text) **
+#. txt_arch
+msgid "Arch"
+msgstr "Årtch"
+
+#. menu label for selecting some (linux) kernel variant
+#. ** please keep it really short (comparable to the english text) **
+#. txt_kernel
+msgid "Kernel"
+msgstr "Nawea"
+
+#. menu item for kernel variant (cf. txt_kernel)
+#. txt_kernel_default
+msgid "Default"
+msgstr "Prémetou"
+
+#. menu item for kernel variant (cf. txt_kernel)
+#. -> like in txt_safe_linux
+#. txt_kernel_safe
+msgid "Safe Settings"
+msgstr "Tchuzes såvrité"
+
+#. menu item for kernel variant (cf. txt_kernel)
+#. -> similar to txt_noacpi_install
+#. txt_kernel_noacpi
+msgid "No ACPI"
+msgstr "Nol ACPI"
+
+#. menu item for kernel variant (cf. txt_kernel)
+#. -> similar to txt_nolapic_install
+#. txt_kernel_nolapic
+msgid "No Local APIC"
+msgstr "Nou locå ACPI"
+
+#. main menu: start in system repair mode
+#. txt_repain_system
+msgid "Repair Installed System"
+msgstr "Remantchî on sistinme d' astalé"
+
+#. menu item
+#. txt_mediacheck
+msgid "Check Installation Media"
+msgstr "Verifyî media d' astalaedje"
+
+#. menu item for keyboard layout (please keep it short)
+#. txt_keyboard
+msgid "Keyboard"
+msgstr "Taprece"
+
+#. menu title
+#. txt_dud_download
+msgid "Download Driver Update"
+msgstr "Aberweter metaedje a djoû do mineu"
+
+#. input label
+#. txt_dud_enter_url
+msgid "Enter Driver Update URL\n"
+msgstr "Sititchî l' URL do metaedje a djoû do mineu\n"
+
+#. menu item
+#. txt_http_proxy
+msgid "HTTP Proxy"
+msgstr "Procsi HTTP"
+
+#. menu item
+#. txt_network_config
+msgid "Network Config"
+msgstr "Apontiaedje del rantoele"
+
+#. menu item
+#. txt_no_network
+msgid "No Network"
+msgstr "Nole rantoele"
+
+#. short menu item for manual network config (NOT some kind of manual)
+#. txt_manual_network
+msgid "Manual"
+msgstr "Al mwin"
+
+#. dialog title for manual network config
+#. txt_manual_network_title
+msgid "Manual Network Config"
+msgstr "Apontiaedje al mwin del rantoele"
+
+#. label for ip address
+#. txt_host_ip
+msgid "Host IP\n"
+msgstr "IP do lodjoe\n"
+
+#. label for gateway ip
+#. txt_gateway_ip
+msgid "Gateway\n"
+msgstr "Pontea\n"
+
+#. label for dns domain name (like 'opensuse.org')
+#. txt_domain_name
+msgid "Domain Name\n"
+msgstr "No do dominne\n"
+
+#. label for nameserver list
+#. txt_nameservers
+msgid "Nameservers (separated by ',')\n"
+msgstr "Sierveus di nos (dispårtis pa des « , »)\n"
+
+#. label for netmask; 'Host IP' refers to label txt_host_ip above
+#. txt_netmask
+msgid "Netmask\n(or use '/N' notation with Host IP)\n"
+msgstr ""
+"Masse di rantoele\n"
+"(oudonbén siervoz do scrijhaedje « /N » avou l' IP do lodjoe)\n"
+
+#. label for Live CD installation
+#. txt_live_kde
+msgid "openSUSE Live (KDE)"
+msgstr "Vicante plake d' openSUSE (KDE)"
+
+#. label for Live CD installation
+#. txt_live_gnome
+msgid "openSUSE Live (GNOME)"
+msgstr "Vicante plake d' openSUSE (GNOME)"
diff --git a/themes/openSUSE/po/xh.po b/themes/openSUSE/po/xh.po
new file mode 100644
index 0000000..85e7437
--- /dev/null
+++ b/themes/openSUSE/po/xh.po
@@ -0,0 +1,438 @@
+# LANGUAGE translations for boot loader
+# Copyright (C) 2005 SUSE Linux GmbH
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: bootloader\n"
+"PO-Revision-Date: 2005-07-27 11:49+0200\n"
+"Last-Translator: Novell Language <language@novell.com>\n"
+"Language-Team: Novell Language <language@novell.com>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. ok button label
+#. txt_ok
+msgid "OK"
+msgstr "KULUNGILE"
+
+#. cancel button label
+#. txt_cancel
+msgid "Cancel"
+msgstr "Rhoxisa"
+
+#. reboot button label
+#. txt_reboot
+msgid "Reboot"
+msgstr "Phinda umisele inkqubo"
+
+#. continue button label
+#. txt_continue
+msgid "Continue"
+msgstr "Uyaqhuba?"
+
+#. txt_install
+msgid "Installation"
+msgstr "Ukuhlohla"
+
+#. txt_safe_linux
+msgid "Linux--Safe Settings"
+msgstr "Imimiselo Ye-Linux -- Ikhuselekile"
+
+#. txt_boot_harddisk
+msgid "Boot from Hard Disk"
+msgstr "Misela Inkqubo Kwiqokobhe Lekhompyutha"
+
+#. txt_rescue
+msgid "Rescue System"
+msgstr "Isixokelelwano Sokuhlangula"
+
+#. txt_memtest
+msgid "Memory Test"
+msgstr "Uvavanyo Lukavimba Wolwazi"
+
+#. txt_bootoptions
+msgid "Boot Options"
+msgstr "Izikhethwa Zomiselo Lwenkqubo"
+
+#. window title for exit dialog
+#. txt_exit_title (see txt_exit_dialog)
+msgid "Exiting..."
+msgstr "Kuyaphunywa..."
+
+#. txt_exit_dialog
+msgid ""
+"You are leaving the graphical boot menu and\n"
+"starting the text mode interface."
+msgstr ""
+"Ushiya imenyu yegrafu yokumisela inkqubo kwaye\n"
+"uqalisa ngesithuba somdibaniso wemo yokusebenza kwisiqendu."
+
+#. txt_help
+msgid "Help"
+msgstr "Uncedo"
+
+#. window title for kernel loading (see txt_load_kernel)
+#. txt_load_kernel_title
+msgid "Starting..."
+msgstr "Kuyaqaliswa..."
+
+#. Keep the three newlines!
+#. txt_load_kernel
+msgid ""
+"Loading Linux Kernel\n"
+"\n"
+"\n"
+msgstr ""
+"Kulayishwa i-Kernel ye-Linux\n"
+"\n"
+" \n"
+
+#. Keep the three newlines!
+#. txt_load_memtest
+msgid ""
+"Loading memtest86\n"
+"\n"
+"\n"
+msgstr ""
+"Kulayishwa uvavanyo lwe-mem86\n"
+"\n"
+" \n"
+
+#. info box title
+#. txt_info_title
+msgid "Boot Loader"
+msgstr "Umlayishi Womiselo Lwenkqubo"
+
+#. error box title
+#. txt_error_title
+msgid "I/O Error"
+msgstr "Imposiso ye-I/O "
+
+#. boot disk change dialog title
+#. txt_change_disk_title
+msgid "Change Boot Disk"
+msgstr "Guqula Idiski Yokumisela Inkqubo"
+
+#. txt_insert_disk
+#, c-format
+msgid "Insert boot disk %u."
+msgstr "Faka idiski yokumisela inkqubo %u."
+
+#. txt_insert_disk2
+#, c-format
+msgid ""
+"This is boot disk %u.\n"
+"Insert boot disk %u."
+msgstr ""
+"Le yidiski yokumisela inkqubo ye-%u.\n"
+"Faka idiski yokumisela inkqubo ye-%u."
+
+#. <product> is e.g. SuSE Linux X.Y or Enterprise Server Z
+#. txt_insert_disk3
+#, c-format
+msgid ""
+"This is not a <product> boot disk.\n"
+"Insert boot disk %u."
+msgstr ""
+"Le asiyodiski yokumisela inkqubo ye-<mveliso>.\n"
+"Faka idiski yokumisela inkqubo ye-%u."
+
+#. password dialog title
+#. txt_password_title
+msgid "Password"
+msgstr "Igama lokugqithisa"
+
+#. txt_dud_ready
+msgid "Get your driver update floppy ready."
+msgstr "Yenza i-floppy yohlaziyo lomqhubi lulunge."
+
+#. power off dialog title
+#. txt_power_off_title
+msgid "Power Off"
+msgstr "Umbane Ucimile"
+
+#. txt_power_off
+msgid "Halt the system now?"
+msgstr "Uyasizizilizisa isixokelelwano ngoku?"
+
+#. menu entry for hard disk installation
+#. txt_harddisk
+msgid "Hard Disk"
+msgstr "Okuseqokobheni Lekhompyutha"
+
+#. dialog title for hard disk installation
+#. txt_harddisk_title
+msgid "Hard Disk Installation"
+msgstr "Ukuhlohla Okuseqokobheni Lekhompyutha"
+
+#. txt_hd_diskdevice
+msgid "Disk Device (Scans All Disks If Empty)\n"
+msgstr "Isixhobo Sediski (Sifota ngokuskena Zonke Iidiski Xa Silikhamte)\n"
+
+#. txt_directory
+msgid "Directory\n"
+msgstr "Uvimba weefayili\n"
+
+#. dialog title for ftp installation
+#. txt_ftp_title
+msgid "FTP Installation"
+msgstr "Ukuhlohlwa kwe-FTP"
+
+#. txt_server
+msgid "Server\n"
+msgstr "Iseva\n"
+
+#. txt_password
+msgid "Password\n"
+msgstr "Igama lokugqithisa\n"
+
+#. label for ftp user input
+#. txt_user1
+msgid "User (Anonymous Login If Empty)\n"
+msgstr "Umsebenzisi (Ungena Ngokungalixeli Igama Ukuba likhamte)\n"
+
+#. dialog title for nfs installation
+#. txt_nfs_title
+msgid "NFS Installation"
+msgstr "Ukuhlohlwa kwe-NFS"
+
+#. label for smb user input
+#. txt_user2
+msgid "User (Uses \"guest\" If Empty)\n"
+msgstr "Umsebenzisi (Usebenzisa\"undwendwe\" Ukuba likhamte)\n"
+
+#. dialog title for smb installation
+#. txt_smb_title
+msgid "SMB (Windows Share) Installation"
+msgstr "Ukuhlohlwa kwe-SMB (Ukwabelana ne-Windows)"
+
+#. dialog title for http installation
+#. txt_http_title
+msgid "HTTP Installation"
+msgstr "Ukuhlohlwa kwe-HTTP"
+
+#. 'driver' as in '(hardware) driver update'
+#. txt_driver_update
+msgid "Driver"
+msgstr "Umqhubi"
+
+#. as in Windows Authentication Domain
+#. txt_domain
+msgid "Domain\n"
+msgstr "Ummandla wolawulo\n"
+
+#. button label for other/more options
+#. txt_other_options
+msgid "Other Options"
+msgstr "Ezinye Izikhethwa"
+
+#. label for language selection
+#. txt_language
+msgid "Language"
+msgstr "Ulwimi"
+
+#. txt_yes
+msgid "Yes"
+msgstr "Ewe"
+
+#. txt_no
+msgid "No"
+msgstr "Hayi"
+
+#. menu item for selecting a file
+#. txt_file
+msgid "File"
+msgstr "Ifayili"
+
+#. input label: share as in "Windows share" (SMB)
+#. txt_share
+msgid "Share\n"
+msgstr "Ukwabelana\n"
+
+#. txt_zenAuto
+msgid "Automatic Mode"
+msgstr "Imo Yokusebenza Ezenzekelayo"
+
+#. txt_zenManual
+msgid "Manual Mode"
+msgstr "Imo Yokusebenza Yokwenza Ngesandla"
+
+#. txt_zenConfig
+msgid "Configure Parameters on ZEN Partition"
+msgstr "Yenza Ubumbeko Lwemida Yenkcazelo Kwisahlulelo se-ZEN"
+
+#. txt_zenInstall
+msgid "Install or Update ZEN Partition"
+msgstr "Hlohla okanye Hlaziya Isahlulelo se-ZEN"
+
+#. txt_zenLilo
+msgid "Reinstall ZEN Partition Boot Loader"
+msgstr "Phinda Uhlohle Umlayishi Womiselo Lwenkqubo Yesahlulelo se-ZEN"
+
+#. txt_zenDisable
+msgid "Disable ZEN Partition"
+msgstr "Susa Isakhono Kwisahlulelo se-ZEN"
+
+#. txt_zenEnable
+msgid "Enable ZEN Partition"
+msgstr "Nika Isakhono Kwisahlulelo se-ZEN"
+
+#. video mode menu item
+#. txt_text_mode
+msgid "Text Mode"
+msgstr "Imo Yokusebenza Ngesiqendu"
+
+#. menu item, like 'memory test'
+#. txt_firmware
+msgid "Firmware Test"
+msgstr "Uvavanyo lwe-Firmware"
+
+#. txt_dud_file_msg
+msgid ""
+"To load driver updates directly from CD-ROM,\n"
+"enter the driver update file names (separated\n"
+"by commas ',') here:\n"
+msgstr ""
+"Ukuze ulayishe iziganeko zohlaziyo lomqhubi ngokungqalileyo ukusuka kwi-CD-ROM,\n"
+"ngenisa amagama eefayili zokuhlaziya umqhubi (ezahlukaniswe\n"
+" ngeekoma ',') apha:\n"
+
+#. install source menu title
+#. ** please keep it really short (comparable to the english text) **
+#. txt_install_source
+msgid "Source"
+msgstr "Uvimba"
+
+#. video mode/display size menu title
+#. ** please keep it really short (comparable to the english text) **
+#. txt_video_mode
+msgid "Video Mode"
+msgstr ""
+
+#. driver update dialog title
+#. -> txt_dud_file_msg
+#. txt_driver_update2
+msgid "Driver Update"
+msgstr ""
+
+#. menu label for selecting (cpu) architecture
+#. like i386, x86-64, ppc
+#. ** please keep it really short (comparable to the english text) **
+#. txt_arch
+msgid "Arch"
+msgstr "Ezokwakha."
+
+#. menu label for selecting some (linux) kernel variant
+#. ** please keep it really short (comparable to the english text) **
+#. txt_kernel
+msgid "Kernel"
+msgstr ""
+
+#. menu item for kernel variant (cf. txt_kernel)
+#. txt_kernel_default
+msgid "Default"
+msgstr ""
+
+#. menu item for kernel variant (cf. txt_kernel)
+#. -> like in txt_safe_linux
+#. txt_kernel_safe
+msgid "Safe Settings"
+msgstr ""
+
+#. menu item for kernel variant (cf. txt_kernel)
+#. -> similar to txt_noacpi_install
+#. txt_kernel_noacpi
+msgid "No ACPI"
+msgstr ""
+
+#. menu item for kernel variant (cf. txt_kernel)
+#. -> similar to txt_nolapic_install
+#. txt_kernel_nolapic
+msgid "No Local APIC"
+msgstr ""
+
+#. main menu: start in system repair mode
+#. txt_repain_system
+msgid "Repair Installed System"
+msgstr ""
+
+#. menu item
+#. txt_mediacheck
+msgid "Check Installation Media"
+msgstr ""
+
+#. menu item for keyboard layout (please keep it short)
+#. txt_keyboard
+msgid "Keyboard"
+msgstr "Ibhodi yamaqhosha"
+
+#. menu title
+#. txt_dud_download
+msgid "Download Driver Update"
+msgstr ""
+
+#. input label
+#. txt_dud_enter_url
+msgid "Enter Driver Update URL\n"
+msgstr ""
+
+#. menu item
+#. txt_http_proxy
+msgid "HTTP Proxy"
+msgstr ""
+
+#. menu item
+#. txt_network_config
+msgid "Network Config"
+msgstr ""
+
+#. menu item
+#. txt_no_network
+msgid "No Network"
+msgstr ""
+
+#. short menu item for manual network config (NOT some kind of manual)
+#. txt_manual_network
+msgid "Manual"
+msgstr ""
+
+#. dialog title for manual network config
+#. txt_manual_network_title
+msgid "Manual Network Config"
+msgstr ""
+
+#. label for ip address
+#. txt_host_ip
+msgid "Host IP\n"
+msgstr ""
+
+#. label for gateway ip
+#. txt_gateway_ip
+msgid "Gateway\n"
+msgstr ""
+
+#. label for dns domain name (like 'opensuse.org')
+#. txt_domain_name
+msgid "Domain Name\n"
+msgstr ""
+
+#. label for nameserver list
+#. txt_nameservers
+msgid "Nameservers (separated by ',')\n"
+msgstr ""
+
+#. label for netmask; 'Host IP' refers to label txt_host_ip above
+#. txt_netmask
+msgid "Netmask\n(or use '/N' notation with Host IP)\n"
+msgstr ""
+
+#. label for Live CD installation
+#. txt_live_kde
+msgid "openSUSE Live (KDE)"
+msgstr ""
+
+#. label for Live CD installation
+#. txt_live_gnome
+msgid "openSUSE Live (GNOME)"
+msgstr ""
diff --git a/themes/openSUSE/po/zh_CN.po b/themes/openSUSE/po/zh_CN.po
new file mode 100644
index 0000000..5e68565
--- /dev/null
+++ b/themes/openSUSE/po/zh_CN.po
@@ -0,0 +1,439 @@
+# LANGUAGE translations for boot loader
+# Copyright (C) 2004 SUSE LINUX AG
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: bootloader\n"
+"POT-Creation-Date: \n"
+"PO-Revision-Date: 2008-11-24 18:08+0800\n"
+"Last-Translator: Thruth Wang <wanglihao@gmail.com>\n"
+"Language-Team: Simplified Chinese\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. ok button label
+#. txt_ok
+msgid "OK"
+msgstr "确定"
+
+#. cancel button label
+#. txt_cancel
+msgid "Cancel"
+msgstr "取消"
+
+#. reboot button label
+#. txt_reboot
+msgid "Reboot"
+msgstr "重启"
+
+#. continue button label
+#. txt_continue
+msgid "Continue"
+msgstr "继续"
+
+#. txt_install
+msgid "Installation"
+msgstr "安装"
+
+#. txt_safe_linux
+msgid "Linux--Safe Settings"
+msgstr "Linux - 安全设置"
+
+#. txt_boot_harddisk
+msgid "Boot from Hard Disk"
+msgstr "从硬盘引导"
+
+#. txt_rescue
+msgid "Rescue System"
+msgstr "救援系统"
+
+#. txt_memtest
+msgid "Memory Test"
+msgstr "内存测试"
+
+#. txt_bootoptions
+msgid "Boot Options"
+msgstr "引导选项"
+
+#. window title for exit dialog
+#. txt_exit_title (see txt_exit_dialog)
+msgid "Exiting..."
+msgstr "正在退出..."
+
+#. txt_exit_dialog
+msgid ""
+"You are leaving the graphical boot menu and\n"
+"starting the text mode interface."
+msgstr ""
+"您将离开图形引导菜单\n"
+"并启动文本方式界面。"
+
+#. txt_help
+msgid "Help"
+msgstr "帮助"
+
+#. window title for kernel loading (see txt_load_kernel)
+#. txt_load_kernel_title
+msgid "Starting..."
+msgstr "正在启动..."
+
+#. Keep the three newlines!
+#. txt_load_kernel
+msgid ""
+"Loading Linux Kernel\n"
+"\n"
+"\n"
+msgstr ""
+"正在装载 Linux 内核\n"
+"\n"
+"\n"
+
+#. Keep the three newlines!
+#. txt_load_memtest
+msgid ""
+"Loading memtest86\n"
+"\n"
+"\n"
+msgstr ""
+"正在装载 memtest86\n"
+"\n"
+"\n"
+
+#. info box title
+#. txt_info_title
+msgid "Boot Loader"
+msgstr "引导装载程序"
+
+#. error box title
+#. txt_error_title
+msgid "I/O Error"
+msgstr "I/O 错误"
+
+#. boot disk change dialog title
+#. txt_change_disk_title
+msgid "Change Boot Disk"
+msgstr "更换引导盘"
+
+#. txt_insert_disk
+#, c-format
+msgid "Insert boot disk %u."
+msgstr "插入引导盘 %u。"
+
+#. txt_insert_disk2
+#, c-format
+msgid ""
+"This is boot disk %u.\n"
+"Insert boot disk %u."
+msgstr ""
+"这是引导盘 %u。\n"
+"插入引导盘 %u。"
+
+#. <product> is e.g. SuSE Linux X.Y or Enterprise Server Z
+#. txt_insert_disk3
+#, c-format
+msgid ""
+"This is not a <product> boot disk.\n"
+"Insert boot disk %u."
+msgstr ""
+"这不是 <product> 引导磁盘。\n"
+"请插入引导磁盘 %u。"
+
+#. password dialog title
+#. txt_password_title
+msgid "Password"
+msgstr "口令"
+
+#. txt_dud_ready
+msgid "Get your driver update floppy ready."
+msgstr "准备好驱动程序更新软盘。"
+
+#. power off dialog title
+#. txt_power_off_title
+msgid "Power Off"
+msgstr "关闭电源"
+
+#. txt_power_off
+msgid "Halt the system now?"
+msgstr "是否立即暂停系统?"
+
+#. menu entry for hard disk installation
+#. txt_harddisk
+msgid "Hard Disk"
+msgstr "硬盘"
+
+#. dialog title for hard disk installation
+#. txt_harddisk_title
+msgid "Hard Disk Installation"
+msgstr "硬盘安装"
+
+#. txt_hd_diskdevice
+msgid "Disk Device (Scans All Disks If Empty)\n"
+msgstr "磁盘设备(如果为空,则扫描所有磁盘)\n"
+
+#. txt_directory
+msgid "Directory\n"
+msgstr "目录\n"
+
+#. dialog title for ftp installation
+#. txt_ftp_title
+msgid "FTP Installation"
+msgstr "FTP 安装"
+
+#. txt_server
+msgid "Server\n"
+msgstr "服务器\n"
+
+#. txt_password
+msgid "Password\n"
+msgstr "口令\n"
+
+#. label for ftp user input
+#. txt_user1
+msgid "User (Anonymous Login If Empty)\n"
+msgstr "用户(如果未填写,则以匿名身份登录)\n"
+
+#. dialog title for nfs installation
+#. txt_nfs_title
+msgid "NFS Installation"
+msgstr "NFS 安装"
+
+#. label for smb user input
+#. txt_user2
+msgid "User (Uses \"guest\" If Empty)\n"
+msgstr "用户(如果为空,则使用“guest”)\n"
+
+#. dialog title for smb installation
+#. txt_smb_title
+msgid "SMB (Windows Share) Installation"
+msgstr "SMB(Windows 共享)安装"
+
+#. dialog title for http installation
+#. txt_http_title
+msgid "HTTP Installation"
+msgstr "HTTP 安装"
+
+#. 'driver' as in '(hardware) driver update'
+#. txt_driver_update
+msgid "Driver"
+msgstr "驱动程序"
+
+#. as in Windows Authentication Domain
+#. txt_domain
+msgid "Domain\n"
+msgstr "域\n"
+
+#. button label for other/more options
+#. txt_other_options
+msgid "Other Options"
+msgstr "其他选项"
+
+#. label for language selection
+#. txt_language
+msgid "Language"
+msgstr "语言"
+
+#. txt_yes
+msgid "Yes"
+msgstr "是"
+
+#. txt_no
+msgid "No"
+msgstr "否"
+
+#. menu item for selecting a file
+#. txt_file
+msgid "File"
+msgstr "文件"
+
+#. input label: share as in "Windows share" (SMB)
+#. txt_share
+msgid "Share\n"
+msgstr "共享\n"
+
+#. txt_zenAuto
+msgid "Automatic Mode"
+msgstr "自动方式"
+
+#. txt_zenManual
+msgid "Manual Mode"
+msgstr "手动方式"
+
+#. txt_zenConfig
+msgid "Configure Parameters on ZEN Partition"
+msgstr "在 ZEN 分区上配置参数"
+
+#. txt_zenInstall
+msgid "Install or Update ZEN Partition"
+msgstr "安装或更新 ZEN 分区"
+
+#. txt_zenLilo
+msgid "Reinstall ZEN Partition Boot Loader"
+msgstr "重新安装 ZEN 分区引导装载程序"
+
+#. txt_zenDisable
+msgid "Disable ZEN Partition"
+msgstr "禁用 ZEN 分区"
+
+#. txt_zenEnable
+msgid "Enable ZEN Partition"
+msgstr "启用 ZEN 分区"
+
+#. video mode menu item
+#. txt_text_mode
+msgid "Text Mode"
+msgstr "文本方式"
+
+#. menu item, like 'memory test'
+#. txt_firmware
+msgid "Firmware Test"
+msgstr "固件测试"
+
+#. txt_dud_file_msg
+msgid ""
+"To load driver updates directly from CD-ROM,\n"
+"enter the driver update file names (separated\n"
+"by commas ',') here:\n"
+msgstr ""
+"要直接从 CD-ROM 装入驱动程序更新,\n"
+"请在此处输入驱动程序更新文件名(以逗号“,”\n"
+"隔开):\n"
+
+#. install source menu title
+#. ** please keep it really short (comparable to the english text) **
+#. txt_install_source
+msgid "Source"
+msgstr "源"
+
+#. video mode/display size menu title
+#. ** please keep it really short (comparable to the english text) **
+#. txt_video_mode
+msgid "Video Mode"
+msgstr "视频模式"
+
+#. driver update dialog title
+#. -> txt_dud_file_msg
+#. txt_driver_update2
+msgid "Driver Update"
+msgstr "驱动程序更新"
+
+#. menu label for selecting (cpu) architecture
+#. like i386, x86-64, ppc
+#. ** please keep it really short (comparable to the english text) **
+#. txt_arch
+msgid "Arch"
+msgstr "体系"
+
+#. menu label for selecting some (linux) kernel variant
+#. ** please keep it really short (comparable to the english text) **
+#. txt_kernel
+msgid "Kernel"
+msgstr "内核"
+
+#. menu item for kernel variant (cf. txt_kernel)
+#. txt_kernel_default
+msgid "Default"
+msgstr "默认"
+
+#. menu item for kernel variant (cf. txt_kernel)
+#. -> like in txt_safe_linux
+#. txt_kernel_safe
+msgid "Safe Settings"
+msgstr "安全设置"
+
+#. menu item for kernel variant (cf. txt_kernel)
+#. -> similar to txt_noacpi_install
+#. txt_kernel_noacpi
+msgid "No ACPI"
+msgstr "无 ACPI"
+
+#. menu item for kernel variant (cf. txt_kernel)
+#. -> similar to txt_nolapic_install
+#. txt_kernel_nolapic
+msgid "No Local APIC"
+msgstr "无本地 ACPI"
+
+#. main menu: start in system repair mode
+#. txt_repain_system
+msgid "Repair Installed System"
+msgstr "修复已安装系统"
+
+#. menu item
+#. txt_mediacheck
+msgid "Check Installation Media"
+msgstr "检查安装介质"
+
+#. menu item for keyboard layout (please keep it short)
+#. txt_keyboard
+msgid "Keyboard"
+msgstr "键盘"
+
+#. menu title
+#. txt_dud_download
+msgid "Download Driver Update"
+msgstr "下载驱动程序更新"
+
+#. input label
+#. txt_dud_enter_url
+msgid "Enter Driver Update URL\n"
+msgstr "输入驱动程序更新 URL\n"
+
+#. menu item
+#. txt_http_proxy
+msgid "HTTP Proxy"
+msgstr ""
+
+#. menu item
+#. txt_network_config
+msgid "Network Config"
+msgstr ""
+
+#. menu item
+#. txt_no_network
+msgid "No Network"
+msgstr ""
+
+#. short menu item for manual network config (NOT some kind of manual)
+#. txt_manual_network
+msgid "Manual"
+msgstr ""
+
+#. dialog title for manual network config
+#. txt_manual_network_title
+msgid "Manual Network Config"
+msgstr ""
+
+#. label for ip address
+#. txt_host_ip
+msgid "Host IP\n"
+msgstr ""
+
+#. label for gateway ip
+#. txt_gateway_ip
+msgid "Gateway\n"
+msgstr ""
+
+#. label for dns domain name (like 'opensuse.org')
+#. txt_domain_name
+msgid "Domain Name\n"
+msgstr ""
+
+#. label for nameserver list
+#. txt_nameservers
+msgid "Nameservers (separated by ',')\n"
+msgstr ""
+
+#. label for netmask; 'Host IP' refers to label txt_host_ip above
+#. txt_netmask
+msgid "Netmask\n(or use '/N' notation with Host IP)\n"
+msgstr ""
+
+#. label for Live CD installation
+#. txt_live_kde
+msgid "openSUSE Live (KDE)"
+msgstr ""
+
+#. label for Live CD installation
+#. txt_live_gnome
+msgid "openSUSE Live (GNOME)"
+msgstr ""
diff --git a/themes/openSUSE/po/zh_TW.po b/themes/openSUSE/po/zh_TW.po
new file mode 100644
index 0000000..642cf9f
--- /dev/null
+++ b/themes/openSUSE/po/zh_TW.po
@@ -0,0 +1,442 @@
+# LANGUAGE translations for boot loader
+# Copyright (C) 2004 SUSE LINUX AG
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: bootloader\n"
+"PO-Revision-Date: 2010-07-01 00:38+0800\n"
+"Last-Translator: \n"
+"Language-Team: Chinese Traditional <kde-i18n-doc@kde.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Lokalize 1.0\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+
+#. ok button label
+#. txt_ok
+msgid "OK"
+msgstr "確定"
+
+#. cancel button label
+#. txt_cancel
+msgid "Cancel"
+msgstr "取消"
+
+#. reboot button label
+#. txt_reboot
+msgid "Reboot"
+msgstr "重新開機"
+
+#. continue button label
+#. txt_continue
+msgid "Continue"
+msgstr "繼續"
+
+#. txt_install
+msgid "Installation"
+msgstr "安裝"
+
+#. txt_safe_linux
+msgid "Linux--Safe Settings"
+msgstr "Linux -- 安全設定"
+
+#. txt_boot_harddisk
+msgid "Boot from Hard Disk"
+msgstr "從硬碟開機"
+
+#. txt_rescue
+msgid "Rescue System"
+msgstr "救援系統"
+
+#. txt_memtest
+msgid "Memory Test"
+msgstr "記憶體測試"
+
+#. txt_bootoptions
+msgid "Boot Options"
+msgstr "開機選項"
+
+#. window title for exit dialog
+#. txt_exit_title (see txt_exit_dialog)
+msgid "Exiting..."
+msgstr "正在離開..."
+
+#. txt_exit_dialog
+msgid ""
+"You are leaving the graphical boot menu and\n"
+"starting the text mode interface."
+msgstr ""
+"您將離開圖形開機功能表並\n"
+"啟動文字模式介面。"
+
+#. txt_help
+msgid "Help"
+msgstr "說明"
+
+#. window title for kernel loading (see txt_load_kernel)
+#. txt_load_kernel_title
+msgid "Starting..."
+msgstr "正在啟動..."
+
+#. Keep the three newlines!
+#. txt_load_kernel
+msgid ""
+"Loading Linux Kernel\n"
+"\n"
+"\n"
+msgstr ""
+"載入 Linux 核心\n"
+"\n"
+"\n"
+
+#. Keep the three newlines!
+#. txt_load_memtest
+msgid ""
+"Loading memtest86\n"
+"\n"
+"\n"
+msgstr ""
+"載入 memtest86\n"
+"\n"
+"\n"
+
+#. info box title
+#. txt_info_title
+msgid "Boot Loader"
+msgstr "開機載入器"
+
+#. error box title
+#. txt_error_title
+msgid "I/O Error"
+msgstr "I/O 錯誤"
+
+#. boot disk change dialog title
+#. txt_change_disk_title
+msgid "Change Boot Disk"
+msgstr "變更開機磁碟"
+
+#. txt_insert_disk
+#, c-format
+msgid "Insert boot disk %u."
+msgstr "插入開機磁碟 %u。"
+
+#. txt_insert_disk2
+#, c-format
+msgid ""
+"This is boot disk %u.\n"
+"Insert boot disk %u."
+msgstr ""
+"這是開機磁片 %u。\n"
+"插入開機磁片 %u。"
+
+#. <product> is e.g. SuSE Linux X.Y or Enterprise Server Z
+#. txt_insert_disk3
+#, c-format
+msgid ""
+"This is not a <product> boot disk.\n"
+"Insert boot disk %u."
+msgstr ""
+"這不是 <product> 開機磁片。\n"
+"插入開機磁片 %u。"
+
+#. password dialog title
+#. txt_password_title
+msgid "Password"
+msgstr "密碼"
+
+#. txt_dud_ready
+msgid "Get your driver update floppy ready."
+msgstr "備妥您的驅動程式更新磁片。"
+
+#. power off dialog title
+#. txt_power_off_title
+msgid "Power Off"
+msgstr "關閉電源"
+
+#. txt_power_off
+msgid "Halt the system now?"
+msgstr "要立即終止系統嗎?"
+
+#. menu entry for hard disk installation
+#. txt_harddisk
+msgid "Hard Disk"
+msgstr "硬碟"
+
+#. dialog title for hard disk installation
+#. txt_harddisk_title
+msgid "Hard Disk Installation"
+msgstr "硬碟安裝"
+
+#. txt_hd_diskdevice
+msgid "Disk Device (Scans All Disks If Empty)\n"
+msgstr "磁碟裝置 (如果為空白則掃描所有磁碟)\n"
+
+#. txt_directory
+msgid "Directory\n"
+msgstr "目錄\n"
+
+#. dialog title for ftp installation
+#. txt_ftp_title
+msgid "FTP Installation"
+msgstr "FTP 安裝"
+
+#. txt_server
+msgid "Server\n"
+msgstr "伺服器\n"
+
+#. txt_password
+msgid "Password\n"
+msgstr "密碼\n"
+
+#. label for ftp user input
+#. txt_user1
+msgid "User (Anonymous Login If Empty)\n"
+msgstr "使用者 (如果是空的,將匿名登入)\n"
+
+#. dialog title for nfs installation
+#. txt_nfs_title
+msgid "NFS Installation"
+msgstr "NFS 安裝"
+
+#. label for smb user input
+#. txt_user2
+msgid "User (Uses \"guest\" If Empty)\n"
+msgstr "使用者 (如果空白則使用 \"guest\")\n"
+
+#. dialog title for smb installation
+#. txt_smb_title
+msgid "SMB (Windows Share) Installation"
+msgstr "SMB (Windows 分享) 安裝"
+
+#. dialog title for http installation
+#. txt_http_title
+msgid "HTTP Installation"
+msgstr "HTTP 安裝"
+
+#. 'driver' as in '(hardware) driver update'
+#. txt_driver_update
+msgid "Driver"
+msgstr "驅動程式"
+
+#. as in Windows Authentication Domain
+#. txt_domain
+msgid "Domain\n"
+msgstr "領域\n"
+
+#. button label for other/more options
+#. txt_other_options
+msgid "Other Options"
+msgstr "其他選項"
+
+#. label for language selection
+#. txt_language
+msgid "Language"
+msgstr "語言"
+
+#. txt_yes
+msgid "Yes"
+msgstr "是"
+
+#. txt_no
+msgid "No"
+msgstr "否"
+
+#. menu item for selecting a file
+#. txt_file
+msgid "File"
+msgstr "檔案"
+
+#. input label: share as in "Windows share" (SMB)
+#. txt_share
+msgid "Share\n"
+msgstr "共享\n"
+
+#. txt_zenAuto
+msgid "Automatic Mode"
+msgstr "自動模式"
+
+#. txt_zenManual
+msgid "Manual Mode"
+msgstr "手動模式"
+
+#. txt_zenConfig
+msgid "Configure Parameters on ZEN Partition"
+msgstr "設定 ZEN 分割區參數"
+
+#. txt_zenInstall
+msgid "Install or Update ZEN Partition"
+msgstr "安裝或更新 ZEN 分割區"
+
+#. txt_zenLilo
+msgid "Reinstall ZEN Partition Boot Loader"
+msgstr "重新安裝 ZEN 分割區開機載入器"
+
+#. txt_zenDisable
+msgid "Disable ZEN Partition"
+msgstr "停用 ZEN 分割區"
+
+#. txt_zenEnable
+msgid "Enable ZEN Partition"
+msgstr "啟用 ZEN 分割區"
+
+#. video mode menu item
+#. txt_text_mode
+msgid "Text Mode"
+msgstr "文字模式"
+
+#. menu item, like 'memory test'
+#. txt_firmware
+msgid "Firmware Test"
+msgstr "韌體測試"
+
+#. txt_dud_file_msg
+msgid ""
+"To load driver updates directly from CD-ROM,\n"
+"enter the driver update file names (separated\n"
+"by commas ',') here:\n"
+msgstr ""
+"若要從 CD-ROM 直接載入驅動程式更新,\n"
+"請在此輸入驅動程式更新檔案名稱 \n"
+"(由逗號 ',' 分隔):\n"
+
+#. install source menu title
+#. ** please keep it really short (comparable to the english text) **
+#. txt_install_source
+msgid "Source"
+msgstr "來源"
+
+#. video mode/display size menu title
+#. ** please keep it really short (comparable to the english text) **
+#. txt_video_mode
+msgid "Video Mode"
+msgstr "視訊模式"
+
+#. driver update dialog title
+#. -> txt_dud_file_msg
+#. txt_driver_update2
+msgid "Driver Update"
+msgstr "驅動程式更新"
+
+#. menu label for selecting (cpu) architecture
+#. like i386, x86-64, ppc
+#. ** please keep it really short (comparable to the english text) **
+#. txt_arch
+msgid "Arch"
+msgstr "架構"
+
+#. menu label for selecting some (linux) kernel variant
+#. ** please keep it really short (comparable to the english text) **
+#. txt_kernel
+msgid "Kernel"
+msgstr "核心"
+
+#. menu item for kernel variant (cf. txt_kernel)
+#. txt_kernel_default
+msgid "Default"
+msgstr "預設值"
+
+#. menu item for kernel variant (cf. txt_kernel)
+#. -> like in txt_safe_linux
+#. txt_kernel_safe
+msgid "Safe Settings"
+msgstr "安全設定"
+
+#. menu item for kernel variant (cf. txt_kernel)
+#. -> similar to txt_noacpi_install
+#. txt_kernel_noacpi
+msgid "No ACPI"
+msgstr "關閉 ACPI"
+
+#. menu item for kernel variant (cf. txt_kernel)
+#. -> similar to txt_nolapic_install
+#. txt_kernel_nolapic
+msgid "No Local APIC"
+msgstr "關閉本機 APIC"
+
+#. main menu: start in system repair mode
+#. txt_repain_system
+msgid "Repair Installed System"
+msgstr "修復已安裝的系統"
+
+#. menu item
+#. txt_mediacheck
+msgid "Check Installation Media"
+msgstr "檢查安裝媒體"
+
+#. menu item for keyboard layout (please keep it short)
+#. txt_keyboard
+msgid "Keyboard"
+msgstr "鍵盤"
+
+#. menu title
+#. txt_dud_download
+msgid "Download Driver Update"
+msgstr "下載驅動程式更新"
+
+#. input label
+#. txt_dud_enter_url
+msgid "Enter Driver Update URL\n"
+msgstr "輸入驅動程式更新位址\n"
+
+#. menu item
+#. txt_http_proxy
+msgid "HTTP Proxy"
+msgstr "HTTP代理伺服器"
+
+#. menu item
+#. txt_network_config
+msgid "Network Config"
+msgstr "網路設定"
+
+#. menu item
+#. txt_no_network
+msgid "No Network"
+msgstr "無網路"
+
+#. short menu item for manual network config (NOT some kind of manual)
+#. txt_manual_network
+msgid "Manual"
+msgstr "手動模式"
+
+#. dialog title for manual network config
+#. txt_manual_network_title
+msgid "Manual Network Config"
+msgstr "手動網路設定"
+
+#. label for ip address
+#. txt_host_ip
+msgid "Host IP\n"
+msgstr "主機IP\n"
+
+#. label for gateway ip
+#. txt_gateway_ip
+msgid "Gateway\n"
+msgstr "閘道\n"
+
+#. label for dns domain name (like 'opensuse.org')
+#. txt_domain_name
+msgid "Domain Name\n"
+msgstr "網域名稱\n"
+
+#. label for nameserver list
+#. txt_nameservers
+msgid "Nameservers (separated by ',')\n"
+msgstr "名稱伺服器 (以 , 分隔)\n"
+
+#. label for netmask; 'Host IP' refers to label txt_host_ip above
+#. txt_netmask
+msgid "Netmask\n(or use '/N' notation with Host IP)\n"
+msgstr ""
+"子遮罩\n"
+"(或以主機ip加上 /N 表示)\n"
+
+#. label for Live CD installation
+#. txt_live_kde
+msgid "openSUSE Live (KDE)"
+msgstr "openSUSE Live (KDE)"
+
+#. label for Live CD installation
+#. txt_live_gnome
+msgid "openSUSE Live (GNOME)"
+msgstr "openSUSE Live (GNOME)"
diff --git a/themes/openSUSE/po/zu.po b/themes/openSUSE/po/zu.po
new file mode 100644
index 0000000..0086434
--- /dev/null
+++ b/themes/openSUSE/po/zu.po
@@ -0,0 +1,438 @@
+# LANGUAGE translations for boot loader
+# Copyright (C) 2005 SUSE Linux GmbH
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: bootloader\n"
+"PO-Revision-Date: 2005-07-27 11:49+0200\n"
+"Last-Translator: Novell Language <language@novell.com>\n"
+"Language-Team: Novell Language <language@novell.com>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. ok button label
+#. txt_ok
+msgid "OK"
+msgstr "OK"
+
+#. cancel button label
+#. txt_cancel
+msgid "Cancel"
+msgstr "Khansela"
+
+#. reboot button label
+#. txt_reboot
+msgid "Reboot"
+msgstr "Vula kabusha"
+
+#. continue button label
+#. txt_continue
+msgid "Continue"
+msgstr "Qhubeka"
+
+#. txt_install
+msgid "Installation"
+msgstr "Ukufaka uhlelo"
+
+#. txt_safe_linux
+msgid "Linux--Safe Settings"
+msgstr "I-Linux--Amasethingi Aphephile"
+
+#. txt_boot_harddisk
+msgid "Boot from Hard Disk"
+msgstr "Qalisa kuGalaza (Hard Disk)"
+
+#. txt_rescue
+msgid "Rescue System"
+msgstr "Hlenga Isistimu"
+
+#. txt_memtest
+msgid "Memory Test"
+msgstr "Ukuhlola Imemori"
+
+#. txt_bootoptions
+msgid "Boot Options"
+msgstr "Okukhethwa Kukho Kokuqalisa"
+
+#. window title for exit dialog
+#. txt_exit_title (see txt_exit_dialog)
+msgid "Exiting..."
+msgstr "Luyaphuma..."
+
+#. txt_exit_dialog
+msgid ""
+"You are leaving the graphical boot menu and\n"
+"starting the text mode interface."
+msgstr ""
+"Uyaphuma kwimenu yezithombe yokuqalisa futhi\n"
+"i-interface yemodi elandelayo."
+
+#. txt_help
+msgid "Help"
+msgstr "Usizo"
+
+#. window title for kernel loading (see txt_load_kernel)
+#. txt_load_kernel_title
+msgid "Starting..."
+msgstr "Iyaqalisa..."
+
+#. Keep the three newlines!
+#. txt_load_kernel
+msgid ""
+"Loading Linux Kernel\n"
+"\n"
+"\n"
+msgstr ""
+"Ifaka i-Linux Kernel\n"
+"\n"
+" \n"
+
+#. Keep the three newlines!
+#. txt_load_memtest
+msgid ""
+"Loading memtest86\n"
+"\n"
+"\n"
+msgstr ""
+"Ifaka i-memtes86\n"
+"\n"
+" \n"
+
+#. info box title
+#. txt_info_title
+msgid "Boot Loader"
+msgstr "I-Boot Loader"
+
+#. error box title
+#. txt_error_title
+msgid "I/O Error"
+msgstr "Iphutha le-I/O"
+
+#. boot disk change dialog title
+#. txt_change_disk_title
+msgid "Change Boot Disk"
+msgstr "Shintsha Idiski Yokuqalisa"
+
+#. txt_insert_disk
+#, c-format
+msgid "Insert boot disk %u."
+msgstr "Faka idiski yokuqalisa%u."
+
+#. txt_insert_disk2
+#, c-format
+msgid ""
+"This is boot disk %u.\n"
+"Insert boot disk %u."
+msgstr ""
+"Lena idiski yokuqalisa %u.\n"
+"Faka idiski yokuqalisa %u."
+
+#. <product> is e.g. SuSE Linux X.Y or Enterprise Server Z
+#. txt_insert_disk3
+#, c-format
+msgid ""
+"This is not a <product> boot disk.\n"
+"Insert boot disk %u."
+msgstr ""
+"Lena akuyona <product>idiski yokuqalisa.\n"
+"Faka idiski yokuqalisa %u."
+
+#. password dialog title
+#. txt_password_title
+msgid "Password"
+msgstr "Iphasiwedi"
+
+#. txt_dud_ready
+msgid "Get your driver update floppy ready."
+msgstr "Yenza ukuba iflophi yokuvuselela i-driver yakho ihlale ilungele."
+
+#. power off dialog title
+#. txt_power_off_title
+msgid "Power Off"
+msgstr "Cisha"
+
+#. txt_power_off
+msgid "Halt the system now?"
+msgstr "Misa isistimu manje?"
+
+#. menu entry for hard disk installation
+#. txt_harddisk
+msgid "Hard Disk"
+msgstr "Ugalaza (hard disk)"
+
+#. dialog title for hard disk installation
+#. txt_harddisk_title
+msgid "Hard Disk Installation"
+msgstr "Ukufakwa Kukagalaza (hard disk)"
+
+#. txt_hd_diskdevice
+msgid "Disk Device (Scans All Disks If Empty)\n"
+msgstr "Idivayisi Yediski (Iskena Wonke Amadiski Uma Engenalutho)\n"
+
+#. txt_directory
+msgid "Directory\n"
+msgstr "I-directory\n"
+
+#. dialog title for ftp installation
+#. txt_ftp_title
+msgid "FTP Installation"
+msgstr "Ukufakwa Kwe-FTP"
+
+#. txt_server
+msgid "Server\n"
+msgstr "Isiphakelalwazi\n"
+
+#. txt_password
+msgid "Password\n"
+msgstr "Iphasiwedi\n"
+
+#. label for ftp user input
+#. txt_user1
+msgid "User (Anonymous Login If Empty)\n"
+msgstr "Umsebenzisi (Ukungena Kongaziwa Uma Kungenalutho)\n"
+
+#. dialog title for nfs installation
+#. txt_nfs_title
+msgid "NFS Installation"
+msgstr "Ukufakwa Kwe-NFS"
+
+#. label for smb user input
+#. txt_user2
+msgid "User (Uses \"guest\" If Empty)\n"
+msgstr "Umsebenzisi (Usebenzisa \"isivakashi\" Uma Kungenalutho)\n"
+
+#. dialog title for smb installation
+#. txt_smb_title
+msgid "SMB (Windows Share) Installation"
+msgstr "Ukufakwa Kwe-SMB (I-Windows Share)"
+
+#. dialog title for http installation
+#. txt_http_title
+msgid "HTTP Installation"
+msgstr "Ukufakwa Kwe-HTTP"
+
+#. 'driver' as in '(hardware) driver update'
+#. txt_driver_update
+msgid "Driver"
+msgstr "I-driver"
+
+#. as in Windows Authentication Domain
+#. txt_domain
+msgid "Domain\n"
+msgstr "I-domain\n"
+
+#. button label for other/more options
+#. txt_other_options
+msgid "Other Options"
+msgstr "Okunye Ongakhetha Kukho"
+
+#. label for language selection
+#. txt_language
+msgid "Language"
+msgstr "Ulimi"
+
+#. txt_yes
+msgid "Yes"
+msgstr "Yebo"
+
+#. txt_no
+msgid "No"
+msgstr "Cha"
+
+#. menu item for selecting a file
+#. txt_file
+msgid "File"
+msgstr "Ifayela"
+
+#. input label: share as in "Windows share" (SMB)
+#. txt_share
+msgid "Share\n"
+msgstr "Abelana\n"
+
+#. txt_zenAuto
+msgid "Automatic Mode"
+msgstr "Imodi Ezenzakalelayo"
+
+#. txt_zenManual
+msgid "Manual Mode"
+msgstr "Imodi Yokuzenzela Mathupha"
+
+#. txt_zenConfig
+msgid "Configure Parameters on ZEN Partition"
+msgstr "Hlela Amapharamitha Ekamelweni (partition) Le-ZEN"
+
+#. txt_zenInstall
+msgid "Install or Update ZEN Partition"
+msgstr "Faka noma Uvuselele Ikamelo Le-ZEN"
+
+#. txt_zenLilo
+msgid "Reinstall ZEN Partition Boot Loader"
+msgstr "Phinde Ufake I-Boot Loader Yekamelo Le-ZEN"
+
+#. txt_zenDisable
+msgid "Disable ZEN Partition"
+msgstr "Yenza Ikamelo Le-ZEN Lingasebenzi"
+
+#. txt_zenEnable
+msgid "Enable ZEN Partition"
+msgstr "Yenza Ikamelo Le-ZEN Lisebenze"
+
+#. video mode menu item
+#. txt_text_mode
+msgid "Text Mode"
+msgstr "Imodi Yombhalo"
+
+#. menu item, like 'memory test'
+#. txt_firmware
+msgid "Firmware Test"
+msgstr "Uvivinyo Lwe-Firmware"
+
+#. txt_dud_file_msg
+msgid ""
+"To load driver updates directly from CD-ROM,\n"
+"enter the driver update file names (separated\n"
+"by commas ',') here:\n"
+msgstr ""
+"Ukuze ufake izivuseleli ze-driver ngokuqondile ukusuka kwi-CD-ROM,\n"
+"faka amagama efayela yezivuseleli ze-driver (ehlukaniswe\n"
+" ngokhefana',') lapha:\n"
+
+#. install source menu title
+#. ** please keep it really short (comparable to the english text) **
+#. txt_install_source
+msgid "Source"
+msgstr "Umthombo"
+
+#. video mode/display size menu title
+#. ** please keep it really short (comparable to the english text) **
+#. txt_video_mode
+msgid "Video Mode"
+msgstr ""
+
+#. driver update dialog title
+#. -> txt_dud_file_msg
+#. txt_driver_update2
+msgid "Driver Update"
+msgstr ""
+
+#. menu label for selecting (cpu) architecture
+#. like i386, x86-64, ppc
+#. ** please keep it really short (comparable to the english text) **
+#. txt_arch
+msgid "Arch"
+msgstr "I-Arch"
+
+#. menu label for selecting some (linux) kernel variant
+#. ** please keep it really short (comparable to the english text) **
+#. txt_kernel
+msgid "Kernel"
+msgstr ""
+
+#. menu item for kernel variant (cf. txt_kernel)
+#. txt_kernel_default
+msgid "Default"
+msgstr "Okufike Nohlelo (default)"
+
+#. menu item for kernel variant (cf. txt_kernel)
+#. -> like in txt_safe_linux
+#. txt_kernel_safe
+msgid "Safe Settings"
+msgstr ""
+
+#. menu item for kernel variant (cf. txt_kernel)
+#. -> similar to txt_noacpi_install
+#. txt_kernel_noacpi
+msgid "No ACPI"
+msgstr ""
+
+#. menu item for kernel variant (cf. txt_kernel)
+#. -> similar to txt_nolapic_install
+#. txt_kernel_nolapic
+msgid "No Local APIC"
+msgstr ""
+
+#. main menu: start in system repair mode
+#. txt_repain_system
+msgid "Repair Installed System"
+msgstr ""
+
+#. menu item
+#. txt_mediacheck
+msgid "Check Installation Media"
+msgstr ""
+
+#. menu item for keyboard layout (please keep it short)
+#. txt_keyboard
+msgid "Keyboard"
+msgstr "Ikhibhodi"
+
+#. menu title
+#. txt_dud_download
+msgid "Download Driver Update"
+msgstr ""
+
+#. input label
+#. txt_dud_enter_url
+msgid "Enter Driver Update URL\n"
+msgstr ""
+
+#. menu item
+#. txt_http_proxy
+msgid "HTTP Proxy"
+msgstr ""
+
+#. menu item
+#. txt_network_config
+msgid "Network Config"
+msgstr ""
+
+#. menu item
+#. txt_no_network
+msgid "No Network"
+msgstr ""
+
+#. short menu item for manual network config (NOT some kind of manual)
+#. txt_manual_network
+msgid "Manual"
+msgstr ""
+
+#. dialog title for manual network config
+#. txt_manual_network_title
+msgid "Manual Network Config"
+msgstr ""
+
+#. label for ip address
+#. txt_host_ip
+msgid "Host IP\n"
+msgstr ""
+
+#. label for gateway ip
+#. txt_gateway_ip
+msgid "Gateway\n"
+msgstr ""
+
+#. label for dns domain name (like 'opensuse.org')
+#. txt_domain_name
+msgid "Domain Name\n"
+msgstr ""
+
+#. label for nameserver list
+#. txt_nameservers
+msgid "Nameservers (separated by ',')\n"
+msgstr ""
+
+#. label for netmask; 'Host IP' refers to label txt_host_ip above
+#. txt_netmask
+msgid "Netmask\n(or use '/N' notation with Host IP)\n"
+msgstr ""
+
+#. label for Live CD installation
+#. txt_live_kde
+msgid "openSUSE Live (KDE)"
+msgstr ""
+
+#. label for Live CD installation
+#. txt_live_gnome
+msgid "openSUSE Live (GNOME)"
+msgstr ""
diff --git a/themes/openSUSE/src/Makefile b/themes/openSUSE/src/Makefile
new file mode 100644
index 0000000..886441a
--- /dev/null
+++ b/themes/openSUSE/src/Makefile
@@ -0,0 +1,16 @@
+BINDIR := $(shell [ -x ../../../gfxboot-compile ] && echo ../../../ )
+
+GFXBOOT_COMPILE = $(BINDIR)gfxboot-compile
+BFLAGS = -O -v -L ../..
+
+all: main.bin
+
+main.bin: main.bc *.inc ../po/.ready
+ $(GFXBOOT_COMPILE) $(BFLAGS) -l main.log -c main.bc $@
+
+../po/.ready:
+ make -C ../po
+
+clean:
+ rm -f main.bin *.log *~
+
diff --git a/themes/openSUSE/src/bsplash.inc b/themes/openSUSE/src/bsplash.inc
new file mode 100644
index 0000000..bdf9abd
--- /dev/null
+++ b/themes/openSUSE/src/bsplash.inc
@@ -0,0 +1,295 @@
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+%
+% Boot loader splash code.
+%
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Some global vars.
+
+/.b_init 0 def
+/.b_done 1 def
+/.b_run 2 def
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Init splash.
+%
+% ( ) ==> ( )
+%
+/bsplash.init {
+ /bsplash.list [
+ config.welcome 2 eq { [ /b1.init /b1.done /b1.run ] } if
+ [ /b2.init /b2.done /b2.run ]
+ ] def
+
+ bsplash.list { dup .b_init get exec } forall
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Free splash memory.
+%
+% ( ) ==> ( )
+%
+/bsplash.free {
+ bsplash.list { dup .b_done get exec } forall
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Show boot loader splash.
+%
+% ( ) ==> ( )
+%
+/bsplash.show {
+ currentimage
+
+ % "/boot/i386/loader/xxx" chdir
+
+ "welcome.jpg" findfile /splash.file over def setimage
+
+ 0 0 moveto 0 0 image.size image
+
+ % "/boot/i386/loader" chdir
+
+ bsplash.init
+
+ bsplash.skip not { 100000 usleep } if
+
+ bsplash.skip not {
+ {
+ 0 usleep
+ bsplash.skip { exit } if
+ bsplash.run { exit } if
+ } loop
+ } if
+
+ bsplash.free
+
+ setimage
+
+ /splash.file xfree
+
+} def
+
+
+% Run splash animations. Return 'true' when done.
+%
+% ( ) ==> ( true|false )
+%
+/bsplash.run {
+ true
+
+ bsplash.list { dup .b_run get exec and } forall
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Just wait.
+%
+% ( ) ==> ( )
+%
+/bsplash.done {
+ bsplash.skip not {
+ 1500000 usleep
+ } if
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Check if we should skip the intro.
+%
+% ( ) ==> ( true|false )
+%
+/bsplash.skip {
+ % any key pressed?
+ getkey 0xffff and {
+ /bsplash.skip true def
+ true
+ } {
+ false
+ } ifelse
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Init.
+%
+% ( array ) ==> ( )
+%
+/b1.init {
+ pop
+
+ /b1_ok false def
+
+ /b1_cd "cd.jpg" readimage def
+ /b1_cd_mask "cd_a.jpg" readimage def
+
+ b1_cd .undef eq b1_cd_mask .undef eq or { return } if
+
+ /b1_cd_tmp b1_cd imgsize 0 0 moveto savescreen def
+
+ 20 350 moveto
+ /b1_orig 300 150 savescreen def
+ /b1_buf 300 150 savescreen def
+
+ /b1_idx 0 def
+ /b1_steps 20 def
+
+ /b1_ok true def
+} def
+
+
+/b1_x [ 0 2 6 15 25 37 51 67 83 98 113 125 136 144 148 150 ] def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Cleanup.
+%
+% ( array ) ==> ( )
+%
+/b1.done {
+ pop
+
+ b1_ok not { return } if
+
+ /b1_cd xfree
+ /b1_cd_mask xfree
+ /b1_cd_tmp xfree
+
+ /b1_orig xfree
+ /b1_buf xfree
+
+ /b1_ok false def
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Run animation.
+%
+% Return true when finished.
+%
+% ( array ) ==> ( true|false )
+%
+/b1.run {
+ pop
+
+ b1_ok not { true return } if
+
+ /b1_idx inc
+
+ b1_idx b1_steps gt { true return } if
+
+ b1_buf b1_orig over length memcpy
+
+ b1_cd_tmp b1_cd_mask over length memcpy
+ 0 255 b1_idx 20 mul sub 0 max b1_cd_tmp blend
+
+ /b1_dx_cur b1_x b1_idx aget dup .undef eq { pop 150 } if def
+
+ 150 0 moveto
+ b1_cd b1_cd_tmp b1_buf blend
+
+ 150 b1_dx_cur 2 div sub 0 moveto
+ b1_cd b1_cd_tmp b1_buf blend
+
+ 150 b1_dx_cur sub 0 moveto
+ b1_cd b1_cd_tmp b1_buf blend
+
+
+ 20 350 moveto b1_buf restorescreen
+
+ false
+
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Init.
+%
+% ( array ) ==> ( )
+%
+/b2.init {
+ pop
+
+ /b2_ok false def
+
+ /b2_text "text.jpg" readimage def
+ % /b2_spot "spotlite.jpg" readimage def
+
+ b2_text .undef eq { return } if
+
+ /b2_text_tmp b2_text imgsize 0 0 moveto savescreen def
+ % /b2_spot_tmp b2_spot imgsize 0 0 moveto savescreen def
+
+ 560 120 moveto
+ /b2_orig b2_text imgsize savescreen def
+ /b2_buf b2_text imgsize savescreen def
+
+ /b2_idx 0 def
+ /b2_start 10 def
+ /b2_steps 20 def
+
+ /b2_ok true def
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Cleanup.
+%
+% ( array ) ==> ( )
+%
+/b2.done {
+ pop
+
+ b2_ok not { return } if
+
+ /b2_text xfree
+ /b2_text_tmp xfree
+
+ /b2_orig xfree
+ /b2_buf xfree
+
+ /b2_ok false def
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Run animation.
+%
+% Return true when finished.
+%
+% ( array ) ==> ( true|false )
+%
+/b2.run {
+ pop
+
+ b2_ok not { true return } if
+
+ /b2_idx inc
+
+ b2_idx b2_start b2_steps add gt { true return } if
+
+ b2_idx b2_start lt { false return } if
+
+ b2_buf b2_orig over length memcpy
+
+ b2_text_tmp b2_text over length memcpy
+ 0 255 b2_idx b2_start sub 20 mul sub 0 max b2_text_tmp blend
+
+ % b2_spot_tmp b2_spot over length memcpy
+ % 0 255 b2_idx b2_start sub 20 mul sub 0 max b2_spot_tmp blend
+
+ % 0 0 moveto
+ % 0x80ff80 b2_spot_tmp b2_buf blend
+ 0 0 moveto
+ 0xffffff b2_text_tmp b2_buf blend
+
+ 560 120 moveto b2_buf restorescreen
+
+ false
+
+} def
+
+
diff --git a/themes/openSUSE/src/button.inc b/themes/openSUSE/src/button.inc
new file mode 100644
index 0000000..372ef54
--- /dev/null
+++ b/themes/openSUSE/src/button.inc
@@ -0,0 +1,116 @@
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+%
+% button handling
+%
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Button templates.
+%
+% [ x y width height label selected hotkey action ]
+%
+/button.ok { [ 0 0 90 25 txt_ok false 0 0 ] } def
+/button.cancel { [ 0 0 90 25 txt_cancel false keyEsc 0 ] } def
+/button.reboot { [ 0 0 90 25 txt_reboot false 0 0 ] } def
+/button.continue { [ 0 0 90 25 txt_continue false 0 0 ] } def
+% /button.eject { [ 0 0 90 25 "Eject" false 0 0 ] } def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Set default button.
+%
+% ( button ) => ( button )
+%
+/button.default {
+ dup 5 true put
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Make it _not_ the default button.
+%
+% ( button ) => ( button )
+%
+/button.notdefault {
+ dup 5 false put
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Set button position.
+%
+% ( button x y ) ==> ( button )
+%
+/button.moveto {
+ rot dup 0 5 -1 roll put exch over 1 rot put
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Assign action to button.
+%
+% ( button action ) => ( button )
+%
+/button.setaction {
+ over 7 rot put
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Draw button.
+%
+% ( button ) ==> ( )
+%
+/button.show {
+ /bt.x over 0 get def
+ /bt.y over 1 get def
+ /bt.width over 2 get def
+ /bt.height over 3 get def
+ /bt.text over 4 get def
+ /bt.default exch 5 get def
+
+ bt.text strsize
+ bt.height sub neg 2 div /bt.y.textofs exch def
+ bt.width sub neg 2 div /bt.x.textofs exch def
+
+ bt.x bt.y moveto
+ currentpoint currentpoint currentpoint
+
+ currentpoint bt.width bt.height window.current .color.bg get setcolor fillrect moveto
+
+ bt.default {
+ black black
+ } {
+ window.current .color.bg get dup
+ } ifelse
+ bt.width bt.height drawborder
+ moveto 1 1 rmoveto white black bt.width 2 sub bt.height 2 sub drawborder
+ moveto
+ % 2 2 rmoveto white black bt.width 4 sub bt.height 4 sub drawborder
+
+ window.current .color.fg get setcolor
+ moveto bt.x.textofs bt.y.textofs rmoveto bt.text show
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Press button.
+%
+% ( button ) ==> ( )
+%
+/button.press {
+ /bt.x over 0 get def
+ /bt.y over 1 get def
+ /bt.width over 2 get def
+ /bt.height exch 3 get def
+
+ bt.x 3 add bt.y 3 add moveto
+ bt.width 7 sub bt.height 7 sub savescreen
+ 1 1 rmoveto dup restorescreen free
+
+ bt.x 1 add bt.y 1 add moveto black white bt.width 2 sub bt.height 2 sub drawborder
+ % bt.x 2 add bt.y 2 add moveto black white bt.width 4 sub bt.height 4 sub drawborder
+} def
+
+
diff --git a/themes/openSUSE/src/common.inc b/themes/openSUSE/src/common.inc
new file mode 100644
index 0000000..d9fa9aa
--- /dev/null
+++ b/themes/openSUSE/src/common.inc
@@ -0,0 +1,1778 @@
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+%
+% Main part.
+%
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+% max command line length
+/cmdlinelength 512 def
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+%
+% Install source is 64bit?
+%
+% ( ) ==> ( true|false )
+%
+/64bit_source {
+ % 64 bit dir exists and is != 32 bit dir
+ 64bit_boot_dir 32bit_boot_dir ne
+ 64bit_boot_dir .undef ne and
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+%
+% Are we a dvd?
+%
+% ( ) ==> ( true|false )
+%
+/is_dvd {
+ % check only once
+ is_dvd.result .undef ne { is_dvd.result return } if
+
+ /is_dvd.result
+ mediatype m_cdrom eq {
+ 0x10 readsector
+ dup 0x50 add getdword exch free
+ 9 shr % iso size in MB
+ 720 gt % assume dvd if > 720 MB
+ } {
+ false
+ } ifelse
+ def
+
+ is_dvd.result return
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+%
+% Install source is 32 & 64bit?
+%
+% ( ) ==> ( true|false )
+%
+/32+64bit_source {
+ 32bit_boot_dir .undef ne
+ % uncomment next line to automatically warn about 32bit software on 64bit machines, too
+ % 64bit_boot_dir .undef ne and
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+%
+% Enough memory?
+%
+% ( ) ==> ( true|false )
+%
+/enough_mem {
+ biosmem 4 20 shl lt
+ biosmem mem.check 20 shl ge or
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+%
+% Check if there are boot directories for 32 & 64bit.
+%
+% Assumes 32bit to be in *i386* and 64bit in *x86_64*.
+%
+% ( ) ==> ( )
+%
+/check_arch_boot_dir {
+ getcwd dup .undef ne {
+ /64bit.tmp 256 string def
+
+ dup "i386" strstr 0 ne over "x86_64" strstr 0 ne or {
+ dup "i386" strstr {
+ /32bit_boot_dir exch def
+ /64bit_boot_dir 32bit_boot_dir "i386" "x86_64" strreplace
+ } {
+ /64bit_boot_dir exch def
+ /32bit_boot_dir 64bit_boot_dir "x86_64" "i386" strreplace
+ } ifelse
+
+ dup "%s/isolinux.cfg" 64bit.tmp sprintf
+ 64bit.tmp filesize .undef ne { def } { free pop } ifelse
+
+ } {
+ /32bit_boot_dir over def
+ /64bit_boot_dir exch def
+ } ifelse
+
+ 64bit.tmp free
+
+ % font.normal setfont
+ % 0 400 moveto 32bit_boot_dir print
+ % 0 420 moveto 64bit_boot_dir print dtrace
+
+ } {
+ pop
+ } ifelse
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+%
+% input event handling
+%
+% ( key ) ==> ( input_buffer menu_entry action )
+%
+% key
+% bit 0-7 ascii
+% bit 8-15 scan code
+% bit 16-32 status bits (ctrl, shift...)
+%
+% action
+% 0: ok, stay in input loop
+% 1: switch to text mode
+% >=2: start linux
+%
+/KeyEvent {
+ % timeout
+
+ menu.texts 0 eq { pop "" -1 1 return } if
+
+ dup 0 eq { boot.ed.list buildcmdline 2 return } if
+
+ debug 4 ge {
+ % print keycode somewhere
+ -1 settransparentcolor
+ white setcolor
+ 500 0 moveto dup print " " print
+ } if
+
+ dup 0xff00 and 16 shl over 0xff and dup 0xe0 eq { pop 0 } if add /key exch def
+ 16 shr 0xffff and /keystat exch def
+
+ key 24 shr 0xff and dup 0xf0 ge exch 0xf4 le and { key serial.input return } if
+
+ key
+
+ config.keymap { mapkey } if
+
+ dup 0xffffff and dup { exch } if pop
+
+ debug 4 ge {
+ % print mapped key somewhere
+ -1 settransparentcolor
+ white setcolor
+ 500 20 moveto dup print " " print
+ } if
+
+ ptheme {
+ % reverse direction
+ /p.xmas.dx p.xmas.dx neg def
+
+ key keyF9 eq
+ key keyF7 eq or {
+ % call super penguin
+ p.call.super
+ } {
+ key keyF1 ge
+ key keyF10 le and {
+ % read something
+ /p.read.timer rand 0x31 and neg -30 add def
+ } if
+ } ifelse
+
+ } if
+
+ % some special keys
+ debug.input
+
+ % put key through normal input queue
+ window.input
+
+ pop
+
+ window.action actExit eq {
+ /window.action actNothing def
+ "" -1 1 return
+ } if
+
+ window.action actRestore eq {
+ /window.action actNothing def
+ "" config.restore.id 2 return
+ } if
+
+ window.action actCloseInfo eq {
+ /window.action actNothing def
+ % cd change dialog
+ info.type 5 eq info.type 6 eq or {
+ % 'mount' re-reads fs metadata
+ mount pop
+ } if
+
+ "" -1 3 return
+ } if
+
+ window.action actPassword eq {
+ /window.action actNothing def
+ password.dialog {
+ password.dialog .ed.buffer.list get 0 get
+ } { "" } ifelse
+ -1 3 return
+ } if
+
+ window.action actStart eq {
+ /window.action actNothing def
+ /load_error false def
+
+ config.memcheck {
+ menu.texts menu.entry 0 max menu.texts length 1 sub min get
+ dup "mem.min[%s]" mem.min sprintf
+ "mem.msg[%s]" mem.msg sprintf
+
+ enough_mem not {
+ nomem_popup
+ "" -1 0 return
+ } if
+ } if
+
+ % some tricks to make it possible to review the complete command line
+ debug 3 ge xxx.cmdline .undef eq and {
+ /window.action actNothing def
+
+ boot.ed.list buildcmdline /xxx.menu exch def /xxx.cmdline exch def
+
+ /dia window.dialog def
+ dia .title "Kernel command line" put
+ dia .text "" put
+ % Must all be of same size!
+ dia .ed.list 1 array put
+ dia .ed.buffer.list [ xxx.cmdline ] put
+ dia .ed.text.list [ "All options\n" ] put
+
+ dia .ed.focus 0 put
+ dia .ed.width 600 put
+ dia .ed.font font.normal put
+ dia .buttons [
+ button.ok button.default actStart button.setaction
+ button.cancel button.notdefault /xxx.cancel button.setaction
+ config.rtl { exch } if
+ ] put
+ dia window.init
+ dia window.show
+
+ "" -1 0
+ } {
+ sound.done
+
+ xxx.cmdline .undef ne {
+ xxx.cmdline xxx.menu
+ /xxx.cmdline .undef def
+ } {
+ boot.ed.list buildcmdline
+ } ifelse
+ 2 return
+ } ifelse
+ } if
+
+ window.action actRedraw eq {
+ /window.action actNothing def
+ main.redraw
+ } if
+
+ window.action actRedrawPanel eq {
+ /window.action actNothing def
+ panel.show
+ } if
+
+ window.action actInstallOK eq {
+ /window.action actNothing def
+ install.ok
+ } if
+
+ window.action actInstallCancel eq {
+ /window.action actNothing def
+ install.cancel
+ } if
+
+ "" -1 0
+} def
+
+
+/xxx.cancel {
+ /xxx.cmdline .undef def
+ actNothing
+} def
+
+
+/bc.cmd cmdlinelength string def
+/mem.min 128 string def
+/mem.msg 256 string def
+
+
+% ( edit_object_list ) ==> ( cmdline menu_entry )
+%
+/buildcmdline {
+ menu.entry 0 lt menu.entry menu.texts length ge or { pop "" -1 return } if
+
+ [ over
+ {
+ dup .inp_show get {
+ build1cmdline strdup
+ } {
+ pop
+ } ifelse
+ } forall
+
+ % empty? -> pass at least the first edit object
+ dup [ eq { over 0 get build1cmdline strdup } if
+
+ ]
+
+ dup boot.splitstr join bc.cmd over strcpy pop free
+ dup { free } forall free
+
+ pop bc.cmd menu.entry
+
+ % increment menu idx to account for removed entry
+ config.restore.id .undef ne {
+ menu.entry config.restore.id ge { 1 add } if
+ } if
+
+} def
+
+
+% ( edit_object ) ==> ( cmdline )
+%
+% grub:
+% just return
+%
+% syslinux & lilo:
+% add kernel name at start of command line
+%
+/build1cmdline {
+ syslinux {
+ % set new working directory
+ xmenu.bits .xm_current get 1 eq { 64bit_boot_dir } { 32bit_boot_dir } ifelse
+ dup .undef ne {
+ dup getcwd ne { chdir } { pop } ifelse
+ } {
+ pop
+ } ifelse
+ } if
+ % getcwd 0 300 moveto show trace
+
+ % lilo & syslinux: prepend kernel/label name
+ grub {
+ bc.cmd 0 0 put
+ } {
+ menu.texts menu.entry get "%s " bc.cmd sprintf
+ } ifelse
+
+ config.spl {
+ xmenu.video {
+ /splash_file 32 string def
+
+ video.modes.list xmenu.video .xm_current get get
+ dup .vm_mode get 0 ge {
+ ",19201200.spl" splash_file sprintf
+ } if
+ pop
+
+ % check whether splash file exists
+ splash_file 1 add filesize .undef eq {
+ splash_file 0 0 put % empty string
+ } if
+ } if
+ } if
+
+ xmenu.kernelopts {
+ kernelopts.options xmenu.kernelopts .xm_current get get dup "" ne {
+ "%s " bc.cmd dup length add sprintf
+ } { pop } ifelse
+ } if
+
+ xmenu.otheropts {
+ otheropts.options xmenu.otheropts .xm_current get get dup "" ne {
+ "%s " bc.cmd dup length add sprintf
+ } { pop } ifelse
+ } if
+
+ /cmdline.hidden over dup length .inp_hidden ge { .inp_hidden get } { pop .undef } ifelse def
+
+ cmdline.hidden {
+ cmdline.hidden "" ne {
+ splash_file {
+ /bc.tmp cmdline.hidden length splash_file length add string def
+ cmdline.hidden "initrd=" bootopt.find dup .undef ne {
+ skipnonspaces
+ dup
+ dup 0 get over 0 0 put
+ splash_file cmdline.hidden "%s%s" bc.tmp sprintf
+ 0 exch put
+ "%s" bc.tmp dup length add sprintf
+ } {
+ pop
+ bc.tmp cmdline.hidden strcpy pop
+ } ifelse
+
+ bc.tmp "%s " bc.cmd dup length add sprintf
+
+ bc.tmp free /bc.tmp .undef def
+ } {
+ cmdline.hidden "%s " bc.cmd dup length add sprintf
+ } ifelse
+ } if
+ } if
+
+ /splash_file xfree
+
+ syslinux {
+ video.modes.list xmenu.video .xm_current get get .vm_options get
+ "%s " bc.cmd dup length add sprintf
+
+ v_impaired 1 ge {
+ "braille=1 " bc.cmd dup length add sprintf
+ } if
+
+ v_impaired 2 ge {
+ "linemode=1 " bc.cmd dup length add sprintf
+ } if
+ } if
+
+ config.addopt.lang {
+ config.lang {
+ config.lang.changed {
+ config.lang "lang=%s " bc.cmd dup length add sprintf
+ } if
+ } if
+ } if
+
+ config.addopt.keytable {
+ config.keymap.id {
+ config.lang getkeymapfromlocale config.keymap.id ne {
+ config.keymap.id "keytable=%s " bc.cmd dup length add sprintf
+ } if
+ } if
+ } if
+
+ xmenu.dud {
+ xmenu.dud .xm_current get .dud_url eq {
+ input.edit.dud_url 0 get dup "" ne {
+ "dud=%s " bc.cmd dup length add sprintf
+ } { pop } ifelse
+ } {
+ xmenu.dud .xm_current get .dud_file eq {
+ input.edit.dud_file 0 get dup "" ne {
+ "driverupdate=%s " bc.cmd dup length add sprintf
+ } { pop } ifelse
+ } {
+ dud.options xmenu.dud .xm_current get get dup "" ne {
+ "%s " bc.cmd dup length add sprintf
+ } { pop } ifelse
+ } ifelse
+ } ifelse
+ } if
+
+ xmenu.profile {
+ profile.options xmenu.profile .xm_current get get dup "" ne {
+ "%s " bc.cmd dup length add sprintf
+ } { pop } ifelse
+ } if
+
+ xmenu.install {
+ config.noinstallopt menu.texts menu.entry get iselement not {
+ install.option "" ne {
+ install.option "%s " bc.cmd dup length add sprintf
+ } if
+ proxy.option "" ne {
+ proxy.option "%s " bc.cmd dup length add sprintf
+ } if
+ } if
+ } if
+
+ xmenu.net {
+ xmenu.install {
+ net.config_type .undef ne {
+ xmenu.install .xm_current get dup .inst_cdrom eq exch .inst_hd eq or {
+ % TODO: add netsetup=XXX
+ } {
+ net.config_type .net_static eq {
+ input.net.static 0 get dup "" ne {
+ "hostip=%s " bc.cmd dup length add sprintf
+ } { pop } ifelse
+ input.net.static 1 get dup "" ne {
+ "netmask=%s " bc.cmd dup length add sprintf
+ } { pop } ifelse
+ input.net.static 2 get dup "" ne {
+ "gateway=%s " bc.cmd dup length add sprintf
+ } { pop } ifelse
+ input.net.static 3 get dup "" ne {
+ "nameserver=%s " bc.cmd dup length add sprintf
+ } { pop } ifelse
+ input.net.static 4 get dup "" ne {
+ "domain=%s " bc.cmd dup length add sprintf
+ } { pop } ifelse
+ } if
+ } ifelse
+ } if
+ } if
+ } if
+
+ % add user-supplied options
+
+ bc.cmd exch .inp_buf get strcat " " strcat pop
+
+ % remove all but last 'vga' & 'initrd' options
+ [ "vga" "initrd" ] dup {
+ {
+ bc.cmd over bootopt.find2 .undef eq { pop exit } if
+ bc.cmd over bootopt.remove free
+ } loop
+ } forall free
+
+ bc.cmd "driverupdate" bootopt.find dup .undef ne {
+ % exclude 'driverupdate=0 and driverupdate=1'
+ "driverupdate=" length get
+ dup '0' ne exch '1' ne and {
+
+ /bc.tmp bc.cmd "driverupdate" bootopt.remove def
+ bc.tmp .undef ne {
+ /bc.tmp bc.tmp "driverupdate=" length add ',' split bc.tmp free def
+ /bc.tmp2 cmdlinelength string def
+
+ bc.tmp2 "initrd=" strcpy pop
+
+ bc.tmp length 0 gt {
+ % add '+' to first arg unless it starts with '+' or '-'
+ bc.tmp 0 get 0 get
+ dup '-' eq { % remove '-'
+ bc.tmp 0 get dup 1 add strdup exch free
+ bc.tmp exch 0 exch put
+ pop '+'
+ } if
+ '+' ne { % add '+'
+ bc.tmp 0 get length 1 add string "+" strcat bc.tmp 0 get strcat
+ bc.tmp 0 get free bc.tmp exch 0 exch put
+ } if
+
+ bc.tmp length 1 sub -1 0 {
+ bc.tmp exch get
+ bc.tmp2 exch strcat "," strcat pop
+ } for
+ } if
+
+ bc.tmp dup { free } forall free
+
+ % last 'initrd' option
+ /bc.tmp .undef def
+ {
+ bc.cmd "initrd" bootopt.remove dup .undef ne {
+ bc.tmp free /bc.tmp exch def
+ } {
+ pop exit
+ } ifelse
+ } loop
+
+ % re-add new 'initrd' option
+ bc.tmp {
+ bc.tmp2 bc.tmp "initrd=" length add strcat pop
+ bc.tmp free
+ bc.cmd bc.tmp2 strcat " " strcat pop
+ } if
+ } if
+
+ } if
+ } { pop } ifelse
+
+ syslinux {
+ % find out initrd sizes for kernel loading progress bar
+ /progress_extra 0 def
+ bc.cmd "initrd" bootopt.find dup .undef ne {
+ "initrd=" length add
+ dup dup skipnonspaces
+ sub neg
+ string
+ exch strcpy
+ % it's a ',' separated list
+ dup ',' split exch free
+ dup
+ {
+ dup
+ % skip leading '+' or '-'
+ dup 0 get dup '+' eq exch '-' eq or { 1 add } if
+ filesize dup .undef ne {
+ dup -2 eq { /progress_nosize true def } if
+ sectorsize 1 sub add
+ sectorsize div /progress_extra exch progress_extra add def
+ } { pop } ifelse
+ free
+ } forall
+ free
+ } { pop } ifelse
+ } if
+
+ % remove final space
+ bc.cmd dropspaces
+
+ bc.cmd
+} def
+
+
+/iso.needscheck {
+ false
+
+ /i_tmp 0x10 readsector def
+ i_tmp {
+ i_tmp dup length 1 sub 0 put
+ /i_tmp2 i_tmp 0x373 add cvs def
+ i_tmp2 "check=1" strstr {
+ pop true
+ } if
+
+ i_tmp free
+ } if
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% ( menu_entries_array cmdline_args_array defaultentry ) == > ( )
+/MenuInit {
+ bsplash.done
+
+ colorbits 8 le {
+ 0 setcolor 0 0 moveto screen.size fillrect loadpalette
+ } if
+
+ init
+
+ /menu.entry -1 def
+
+ /menu.dentry exch def
+ /menu.args exch def
+ /menu.texts exch def
+
+ menu.texts length 0 eq { return } if
+
+ /mi_name "mediacheck" "" gfxconfig.set.str
+
+ mi_name {
+ /remove.mediachk false def
+ sectorsize 0x800 eq {
+ /remove.mediachk iso.needscheck not def
+ } if
+ } {
+ /remove.mediachk false def
+ } ifelse
+
+ config.restore.title {
+ /mi_name config.restore.title def
+ /remove.mediachk true def
+
+ 0
+ menu.texts {
+ config.restore.title eq { /config.restore.id over def exit } if
+ 1 add
+ } forall
+ pop
+ } if
+
+ remove.mediachk menu.dentry mi_name ne and {
+ /mi_tmp 0 def
+ menu.texts {
+ mi_name eq { exit } if
+ /mi_tmp inc
+ } forall
+
+ mi_tmp menu.texts length lt {
+ /mi_tmp2 0 def
+ /menu.texts
+ [
+ menu.texts { mi_tmp2 mi_tmp eq { pop } if /mi_tmp2 inc } forall
+ ]
+ def
+
+ /mi_tmp2 0 def
+ /menu.args
+ [
+ menu.args { mi_tmp2 mi_tmp eq { pop } if /mi_tmp2 inc } forall
+ ]
+ def
+ } if
+ } if
+
+ window.main
+ dup window.init
+ window.show
+
+ config.beep { 3000 50000 beep } if
+
+ config.talk {
+ load_talk_dialog
+ menu.texts menu.idx get menuitemmap speak
+ } if
+
+ syslinux {
+ 32+64bit_source not {
+
+ 64bit {
+ 64bit_source not { notimeout 32bit_popup } if
+ } {
+ 64bit_source { notimeout 64bit_popup } if
+ } ifelse
+
+ } if
+ } if
+
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% ( text errorcode ) ==> ( )
+% errorcode:
+% 0 normal info
+% 1 fatal error
+% 2 missing file
+% 3 disk change
+% 4 disk change failed
+% 5 ask for cd change
+% 6 change cd back to original
+%
+
+/info.tmpmsg 256 string def
+
+/InfoBoxInit {
+ /info.type exch def
+ /info.msg exch def
+
+ window.dialog
+
+ info.type 1 eq {
+ dup .title.bg window.title.error.bg put
+ dup .title txt_error_title put
+ dup .buttons
+ [
+ button.reboot button.default actCloseInfo button.setaction
+ ] put
+ } {
+ dup .title txt_info_title put
+ dup .buttons
+ [
+ button.ok button.default actCloseInfo button.setaction
+% button.cancel button.notdefault actCloseInfo button.setaction
+ ] put
+ } ifelse
+
+ syslinux info.type 2 eq and {
+ dup .title "I/O Error" put
+ info.msg "File not found: %s" info.tmpmsg sprintf
+ /info.msg info.tmpmsg def
+ /load_error true def
+ } if
+
+ syslinux info.type 3 eq and {
+ dup .title txt_change_disk_title put
+ 0 getinfo 1 add txt_insert_disk info.tmpmsg sprintf
+ /info.msg info.tmpmsg def
+ } if
+
+ syslinux info.type 4 eq and {
+ dup .title txt_change_disk_title put
+ 1 getinfo 15 not and {
+ 0 getinfo 1 add
+ txt_insert_disk3 info.tmpmsg sprintf
+ } {
+ 0 getinfo 1 add 1 getinfo 1 add
+ txt_insert_disk2 info.tmpmsg sprintf
+ } ifelse
+ /info.msg info.tmpmsg def
+ } if
+
+ syslinux info.type 5 eq and {
+ dup .title "Driver Update" put
+ info.msg "Insert driver update CD-ROM for\n\"%s\"." info.tmpmsg sprintf
+ /info.msg info.tmpmsg def
+ } if
+
+ syslinux info.type 6 eq and {
+ dup .title "Driver Update" put
+ /info.msg "Put the openSUSE CD-ROM back into the drive." def
+ } if
+
+ dup .text info.msg put
+
+ serial.line.status {
+ serial.infobox .undef eq {
+ /serial.infobox .xm_size array def
+ serial.infobox .xm_current 0 put
+ } if
+
+ serial.infobox .xm_title 2 index .title get put
+ serial.infobox .xm_text info.msg put
+ serial.infobox .xm_list [ info.type 1 eq { "reboot" } { "ok" } ifelse ] put
+
+ serial.infobox.setup
+ } if
+
+ dup window.init
+ window.show
+
+} def
+
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+% progress bar code
+
+
+% Show percentage of progress bar.
+%
+% ( percentage ) ==> ( )
+%
+/progress.percent {
+ 0 max 100 min % so people don't ask silly questions...
+ "100%" strsize over neg progress.text.x add progress.text.y moveto
+ window.current .color.bg get setcolor
+ fillrect
+
+ "%3u%%" 8 string dup 4 1 roll sprintf
+
+ dup strsize pop neg progress.text.x add progress.text.y moveto
+ window.current .color.fg get setcolor
+
+ serial.line.status {
+ "\x08\x08\x08\x08" serial.show
+ dup serial.show
+ } if
+
+ dup show
+ free
+
+} def
+
+
+% Show n-th progress bar symbol.
+%
+% ( n ) ==> ( )
+%
+/progress.sym.show {
+ /progress.sym.current exch def
+
+ progress.bar.x progress.bar.y moveto
+ progress.sym.width progress.sym.current 1 sub mul 1 add 1 rmoveto
+ progress.sym.width 2 sub
+ progress.bar.height 2 sub
+ progress.bar.color setcolor
+ fillrect
+
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% ( kernel_name ) ==> ( )
+/ProgressInit {
+ /progress.kname exch def
+
+ boot.ed.list { edit.hidecursor } forall
+
+ /dia window.dialog def
+
+ dia .width.min 350 put
+ dia .position 10 put
+
+ dia .title txt_load_kernel_title put
+ dia .text
+ progress.kname "memtest" eq {
+ txt_load_memtest
+ } {
+ txt_load_kernel
+ } ifelse
+ put
+
+ dia window.init
+ dia window.show
+
+ % now add progress bar
+
+ dia .x get dia .y get moveto
+ dia .text.x get dia .text.y get 28 add rmoveto
+
+ /progress.bar.height 19 def
+ /progress.bar.width dia .width get progress_nosize { 25 } { 75 } ifelse sub def
+
+ /progress.sym.width 10 def
+ /progress.bar.width
+ progress.bar.width progress.sym.width div
+ /progress.syms over def progress.sym.width mul
+ def
+
+ currentpoint over 1 sub over 2 sub moveto
+ black white progress.bar.width 2 add progress.bar.height 4 add drawborder
+
+ /progress.bar.y exch def
+ /progress.bar.x exch def
+
+ /progress.text.x progress.bar.x progress.bar.width 55 add add def
+ /progress.text.y progress.bar.y progress.bar.height fontheight sub 2 div add def
+
+ /progress.sym.current 0 def
+
+ progress_nosize not { 0 progress.percent } if
+
+ serial.line.status {
+ "\n" serial.show
+ dia .text get serial.show
+ " 0%" serial.show
+ } if
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% ( ) ==> ( )
+/ProgressDone {
+ window.done
+
+ load_error {
+ /load_error false def
+ boot.ed.list boot.window .ed.focus get get edit.showcursor
+ } if
+
+ serial.line.status { "\n\n" serial.show } if
+
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% ( max current ) ==> ( )
+%
+% Note: max is just kernel size (in sectors).
+%
+/ProgressUpdate {
+ progress_nosize {
+ exch pop
+ sectorsize mul 10 shr
+ progress.bar.x progress.bar.y moveto
+ window.color.bg setcolor
+ progress.bar.width progress.bar.height fillrect
+ progress.bar.width 10 sub 0 rmoveto
+ window.color.fg setcolor
+ 64 string exch
+ "%d kB" 2 index sprintf
+ dup showright free
+
+ return
+ } if
+
+ exch progress_extra add exch
+
+ over over 100 mul exch 1 max div progress.percent
+
+ progress.syms mul progress.syms 2 div add exch 1 max div
+
+ 0 max progress.syms min
+
+ dup progress.sym.current gt {
+ progress.sym.current 1 add over 1 exch {
+ progress.sym.show
+ } for
+ } if
+ pop
+
+} def
+
+% initrd size (in sectors)
+/progress_extra 0 def
+
+% for pxe we don't get file sizes
+/progress_nosize false def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% ( time ) ==> ( )
+% /Timer { pop } def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% ( label correct_password ) ==> ( )
+%
+/PasswordInit {
+ /password.key exch def pop
+
+ /dia window.dialog def
+
+ /password.dialog dia def
+
+ dia .title txt_password_title put
+ dia .text "" put
+
+ % Must all be of same size!
+ dia .ed.list 1 array put
+ dia .ed.buffer.list [ 31 string ] put
+ dia .ed.text.list [ txt_password ] put
+
+ dia .ed.focus 0 put
+
+ dia .ed.width 200 put
+
+ dia .ed.font font.normal pwmode put
+
+ dia .buttons
+ [ button.ok button.default actPassword button.setaction ]
+ put
+
+ dia window.init
+ dia window.show
+
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% ( password ) ==> ( error )
+%
+% error:
+% true password ok
+% false wrong password
+%
+% ****** FIXME: test result seems to be unused
+%
+/PasswordDone {
+
+ password.key eq
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% ( text ) == > ( new_text )
+/menuitemmap {
+ translate
+ config._2space {
+ /mmm.tmp xfree
+ strdup /mmm.tmp over def
+ dup length 0 gt {
+ 0 1 2 index length 1 sub {
+ over over get '_' eq { over exch ' ' put } { pop } ifelse
+ } for
+ } if
+ } if
+ dup "memtest" eq over "memtest86" eq or { pop txt_memtest return } if
+ dup "firmware" eq { pop txt_firmware return } if
+ mode.install {
+ dup "linux" eq { pop txt_install return } if
+ dup "repair" eq { pop txt_repain_system return } if
+ dup "rescue" eq { pop txt_rescue return } if
+ dup "harddisk" eq { pop txt_boot_harddisk return } if
+ dup "mediachk" eq { pop txt_mediacheck return } if
+ dup "mediacheck" eq { pop txt_mediacheck return } if
+ } {
+ dup "failsafe" eq { pop txt_safe_linux return } if
+ dup "linux" eq { pop "Linux" return } if
+ dup "windows" eq { pop "Windows" return } if
+ } ifelse
+ % still no luck... - try to translate
+ _
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% ( color0 color1 width height ) ==> ( )
+/drawborder {
+ currentpoint /db.y0 exch def /db.x0 exch def
+
+ /db.y1 exch 1 sub db.y0 add def
+ /db.x1 exch 1 sub db.x0 add def
+ /db.col1 exch def
+ /db.col0 exch def
+
+ db.x0 db.y1 moveto
+
+ db.col0 setcolor
+ db.x0 db.y0 lineto db.x1 db.y0 lineto
+
+ db.col1 setcolor
+ db.x1 db.y1 lineto db.x0 db.y1 lineto
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% ( color0 color1 color2 width height ) ==> ( )
+% draw frame with shadow
+% color0: upper left, color1: lower right, color2: shadow
+/drawborder3 {
+ currentpoint /db.y0 exch def /db.x0 exch def
+
+ /db.y1 exch 1 sub db.y0 add def
+ /db.x1 exch 1 sub db.x0 add def
+ /db.col2 exch def
+ /db.col1 exch def
+ /db.col0 exch def
+
+ db.x0 db.y1 moveto
+
+ db.col0 setcolor
+ db.x0 db.y0 lineto db.x1 db.y0 lineto
+
+ db.col1 setcolor
+ db.x1 db.y1 lineto db.x0 db.y1 lineto
+
+ db.col2 -1 ne {
+ db.col2 setcolor
+ 1 1 rmoveto
+ db.x1 1 add db.y1 1 add lineto
+ db.x1 1 add db.y0 1 add lineto
+ } if
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% ( color0 color1 width height ) ==> ( )
+/drawborder4 {
+ 3 index 4 1 roll rot dup 3 index 3 index
+ currentpoint 6 2 roll
+ 1 1 rmoveto drawborder
+ moveto drawborder
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% center text
+% ( text width height ) ==> ( )
+/centertext {
+ 3 -1 roll strsize
+ 4 2 roll
+ 4 1 roll exch 4 1 roll sub 2 div neg 3 1 roll sub 2 div neg
+} def
+
+
+% ( img ) => ( width heigh )
+/imgsize {
+ dup .undef eq {
+ pop 0 0
+ } {
+ getdword dup
+ 0xffff and exch 16 shr
+ } ifelse
+} def
+
+
+% ( pic pic_a -- )
+/showlogo {
+ /tmp.sc over imgsize savescreen def
+
+ currentpoint 4 2 roll
+ 0 0 moveto tmp.sc blend
+ moveto tmp.sc restorescreen
+
+ tmp.sc free
+} def
+
+
+% ( file_name ) ==> ( image )
+/readimage {
+ findfile dup .undef ne {
+ dup setimage 0 0 image.size unpackimage exch free
+ } if
+} def
+
+
+/init {
+ 0 0 moveto currentpoint clip.size image
+
+ ptheme { ptheme.init } if
+
+ % set default language
+ "lang" findfile dup {
+ /tmp over length 1 add 2 max string def
+ tmp exch {
+ dup ' ' eq over '\n' eq or { pop pop exit } if
+ over exch 0 exch put
+ 1 add
+ } forall
+ tmp dup setlang pop getkeymapfromlocale setkeymap
+ } {
+ pop
+ "en_US" dup setlang pop getkeymapfromlocale setkeymap
+ % reset, it's just the fallback lang
+ /config.lang.changed false def
+ } ifelse
+
+ keymap.default "" ne { keymap.default setkeymap } if
+
+ font.large setfont
+
+ /menu.text.xofs 10 def
+ /menu.text.yofs 2 def
+ /menu.item.height fontheight dup ptheme { 3 } { 2 } ifelse div add def
+ /menu.bar.height fontheight menu.text.yofs dup add add def
+
+ font.normal setfont
+
+ /menu.bar.width menu.bar.min.width def
+
+ % false: no boot options line initially
+ /boot.show true def
+
+} def
+
+
+/chksum {
+ 0 exch
+ { add } forall
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Some special debug & test keys.
+%
+% ( key_in ) ==> ( key_out )
+%
+/debug.input {
+ dup keyShiftF4 eq debug 3 ge and {
+ currentcolor black setcolor
+ currentpoint 0 0 moveto
+ 64 string biosmem "mem = %u " 2 index sprintf dup show free
+ moveto setcolor
+ } if
+
+ dup keyF8 eq syslinux and {
+ kroete.file .undef eq { /kroete.file "kroete.dat" findfile def } if
+ kroete.file kroete.dir idle
+ /kroete.dir kroete.dir 1 xor def
+ } if
+
+ dup keyF9 eq syslinux and {
+ /v_impaired inc
+
+ v_impaired 1 eq config.talk not and {
+ /config.talk true def
+ load_talk_dialog
+ menu.texts menu.idx get menuitemmap speak
+ } {
+ sound.getsamplerate { sound.getsamplerate sound.setsamplerate } if
+ } ifelse
+
+ xmenu.video .xm_current config.livecd { 1 } { 0 } ifelse put % 0 = text mode, 1 = VESA
+ % redraw unless another menu is still open
+ window.current {
+ window.current .xmenu get .undef eq { video.update } if
+ } if
+
+ .undef 0 idle
+ kroete.file free /kroete.file .undef def
+ pop 0
+ } if
+
+ dup keyShiftF3 eq syslinux and debug 3 ge and {
+ currentcolor black setcolor
+ currentpoint 0 0 moveto
+ "eject " print bootdrive eject print
+ moveto setcolor
+ } if
+
+ dup keyShiftF5 eq syslinux and debug 3 ge and {
+ currentcolor black setcolor
+ currentpoint 100 0 moveto
+ bootdrive print
+ moveto setcolor
+ } if
+
+ dup keyShiftF8 eq debug 3 ge and {
+ currentcolor debug 1 and { white } { black } ifelse setcolor
+
+ currentpoint 300 0 moveto
+ 0 memsize print "/" print print " " print
+ moveto
+
+ currentpoint 300 20 moveto
+ 1 memsize print "/" print print " " print
+ moveto
+
+ currentpoint 300 40 moveto
+ 2 memsize print "/" print print " " print
+ moveto
+
+ currentpoint 300 60 moveto
+ 3 memsize print "/" print print " " print
+ moveto
+
+ currentpoint 300 80 moveto
+ 4 memsize print "/" print print " " print
+ moveto
+
+ setcolor
+ } if
+
+ dup keyShiftF9 eq debug 3 ge and {
+ dumpmem
+ } if
+
+ dup keyShiftF10 eq {
+ /debug debug 1 add def
+ } if
+
+ dup keyShiftF11 eq {
+ 400 0 moveto "ani_%04d.jpg" play_movie
+ } if
+
+ dup keyShiftF1 eq {
+ /transp transp 0x10 sub 0 max def
+
+ /player 0 def
+ player "hapysuse.mod" findfile dup
+ {
+ mod.load
+ config.volume sound.setvolume
+ player 0 mod.play
+ /player player 1 add 3 and def
+ } {
+ pop
+ } ifelse
+
+ pop 0
+ } if
+
+ dup keyShiftF3 eq {
+ "fsfsong.wav" findfile dup
+ {
+ config.volume sound.setvolume
+ wav.play
+ } {
+ pop
+ } ifelse
+
+ pop 0
+ } if
+
+ dup keyShiftF4 eq {
+ % sound test XXXXXXXX
+
+ sound.done
+
+ } if
+
+ dup keyF11 eq debug 1 ge and {
+
+ /dit {
+ dup 0xff and rand 0xff and gt { 0xff add } if
+ 8 shr
+ } def
+
+ /c13.r rand 0x7f00 and def
+ /c02_13.r rand 0x7f00 and c13.r sub def
+ /c23.r rand 0x7f00 and def
+ /c01_23.r rand 0x7f00 and c23.r sub def
+ /c13.g rand 0x7f00 and def
+ /c02_13.g rand 0x7f00 and c13.g sub def
+ /c23.g rand 0x7f00 and def
+ /c01_23.g rand 0x7f00 and c23.g sub def
+ /c13.b rand 0x7f00 and def
+ /c02_13.b rand 0x7f00 and c13.b sub def
+ /c23.b rand 0x7f00 and def
+ /c01_23.b rand 0x7f00 and c23.b sub def
+
+ screen.size /h exch def /w exch def
+
+ 0 1 screen.size exch pop {
+ 0 1 screen.size pop {
+ over moveto
+
+ currentpoint c01_23.r mul h div exch c02_13.r mul w div add c13.r add c23.r add
+ dit 0 max 0xff min 16 shl
+ currentpoint c01_23.g mul h div exch c02_13.g mul w div add c13.g add c23.g add
+ dit 0 max 0xff min 8 shl
+ currentpoint c01_23.b mul h div exch c02_13.b mul w div add c13.b add c23.b add
+ dit 0 max 0xff min add add
+
+ setcolor putpixel
+ } for
+ pop
+ } for
+
+ pop 0
+ } if
+
+ dup keyF12 eq debug 6 ge and {
+ % mouse support testing
+
+ 1 keepmode
+
+ /mouse xxx def
+ 0xc00000 setcolor
+ mouse .undef eq {
+ 700 580 moveto "no mouse" show
+ } {
+ {
+ mouse getdword 16 shl 16 shr screen.size pop 2 div add
+ mouse getdword 16 shr neg screen.size exch pop 2 div add
+ moveto 4 4 fillrect
+
+ mouse 4 add getdword 7 and
+ dup 1 and { 0xc00000 setcolor } if
+ dup 2 and { 0x0000a0 setcolor } if
+ dup 4 and { 0x009000 setcolor } if
+
+ 3 and 3 eq { exit } if
+
+ } loop
+ } ifelse
+ pop 0
+ } if
+
+ dup keyShiftF12 eq {
+ /transp transp 0x10 add 0x100 min def
+ pop 0
+ } if
+
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Show exit popup.
+%
+% ( ) ==> ( )
+%
+/exit_popup {
+ window.dialog
+
+ dup .title txt_exit_title put
+ dup .text txt_exit_dialog put
+ dup .buttons [
+ button.ok button.default actExit button.setaction
+ button.cancel button.notdefault actNothing button.setaction
+ config.rtl { exch } if
+ ] put
+ dup window.init
+ window.show
+
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Show help window.
+%
+% ( ) ==> ( )
+%
+/show_help {
+ window.help
+
+ dup window.init
+ window.show
+
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Warn that we are about to install 32bit software on a 64bit system.
+%
+% ( ) ==> ( )
+%
+/32bit_popup {
+ window.dialog
+
+ dup .title "Cool computer, but..." put
+ dup .text "You are about to install 32-bit software on a 64-bit computer." put
+ dup .buttons [
+ button.continue button.default actNothing button.setaction
+ ] put
+ dup window.init
+ window.show
+
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Warn that we are about to install 64bit software on a 32bit system.
+%
+% ( ) ==> ( )
+%
+/64bit_popup {
+ window.dialog
+
+ dup .title "Cool software, but..." put
+ dup .text "This is a 32-bit computer. You cannot use 64-bit software on it." put
+ dup .buttons [
+ button.reboot button.default actReboot actNoClose or button.setaction
+ ] put
+ dup window.init
+ window.show
+
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Warn that we don't have enough memory.
+%
+% ( ) ==> ( )
+%
+/nomem_popup {
+ window.dialog
+
+ dup .title "Sorry, but..." put
+ dup .text mem.show put
+ dup .buttons [
+ button.ok button.default actNothing button.setaction
+ ] put
+ dup window.init
+ window.show
+
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Show "power off" popup.
+%
+% ( ) ==> ( )
+%
+/power_off {
+ window.dialog
+
+ dup .title txt_power_off_title put
+ dup .text txt_power_off put
+ dup .buttons [
+ button.ok button.notdefault actPowerOff actNoClose or button.setaction
+ button.cancel button.default actNothing button.setaction
+ config.rtl { exch } if
+ ] put
+ dup window.init
+ window.show
+
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Set global config variables.
+%
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% For monitor tests: fake DDC info.
+%
+
+% "ddc" findfile test1
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% First, figure out video mode.
+%
+
+/config.screen.width /config.screen.height "screen.size" 800 600 gfxconfig.set.int2
+
+/screen.fallback false def
+
+config.screen.width config.screen.height 32 findmode setmode not {
+ config.screen.width config.screen.height 16 findmode setmode not {
+ /screen.fallback true def
+ 640 480 16 findmode setmode not {
+ 640 480 32 findmode setmode not {
+ false .end
+ } if
+ } if
+ } if
+} if
+
+% prepend fallback section to layout section list
+screen.fallback {
+ /gfxconfig.layout [ "640x480" gfxconfig.layout { } forall ] gfxconfig.layout free def
+} if
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Figure out whether to use penguin theme.
+%
+
+/config.penguin "penguin" 0 gfxconfig.set.int
+
+% more likely during winter...
+config.penguin -1 eq {
+ date
+ 0
+
+ over month 12 eq { 5 add } if
+ over month 1 le { 5 add } if
+ over weekday 5 eq { 2 mul } if
+ over weekday 6 eq { 4 mul } if
+ over dup month 12 eq exch day dup 24 ge exch 6 eq or and { pop 100 } if
+ over dup month 1 eq exch day 1 eq and { pop 100 } if
+
+ /config.penguin exch def
+ pop
+} if
+
+/ptheme rand pop rand 100 mod config.penguin lt def
+
+0x417 cvp getbyte 0x40 and 0 ne { /ptheme true def } if
+0x417 cvp getbyte 0x10 and 0 ne { /ptheme false def } if
+
+% prepend penguin section to layout section list
+ptheme {
+ /gfxconfig.layout [ "penguin" gfxconfig.layout { } forall ] gfxconfig.layout free def
+} if
+
+% for compatibility: prepend live section to layout section list if 'livecd' is set
+/config.livecd "livecd" false gfxconfig.set.bool
+config.livecd {
+ /gfxconfig.layout [ "live" gfxconfig.layout { } forall ] gfxconfig.layout free def
+} if
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Then, read the other config variables (might depend on video mode).
+%
+
+/config.welcome "welcome" 0 gfxconfig.set.int
+/config.beep "beep" false gfxconfig.set.bool
+/config.volume "volume" 70 gfxconfig.set.int
+/config.talk "talk" false gfxconfig.set.bool
+/config._2space "_2space" false gfxconfig.set.bool
+/config.memcheck "memcheck" false gfxconfig.set.bool
+/config.spl "spl" false gfxconfig.set.bool
+/config.autodown "autodown" false gfxconfig.set.bool
+/transp "menu.transparency" 0x20 gfxconfig.set.int
+/config.screen.width
+/config.screen.height "screen.size" 800 600 gfxconfig.set.int2
+/config.background "background" "back.jpg" gfxconfig.set.str
+/config.font.normal "font.normal" "16x16.fnt" gfxconfig.set.str
+/config.font.large "font.large" "16x16.fnt" gfxconfig.set.str
+/config.restore.title "restore.title" "" gfxconfig.set.str
+/progress.bar.color "progress.bar.color" white gfxconfig.set.int
+/xmenu.normal.bg "menu.normal.bg" black gfxconfig.set.int
+/xmenu.normal.fg "menu.normal.fg" white gfxconfig.set.int
+/xmenu.normal.alt.fg "menu.normal.alt.fg" 0x606060 gfxconfig.set.int
+/xmenu.selected.bg "menu.selected.bg" white gfxconfig.set.int
+/xmenu.selected.fg "menu.selected.fg" black gfxconfig.set.int
+/window.color.bg "window.bg" white gfxconfig.set.int
+/window.color.fg "window.fg" black gfxconfig.set.int
+/window.title.bg "window.title.bg" black gfxconfig.set.int
+/window.title.fg "window.title.fg" white gfxconfig.set.int
+/window.title.error.bg "window.title.error.bg" 0xc00000 gfxconfig.set.int
+/help.link.fg "help.link.fg" 0x0000a0 gfxconfig.set.int
+/help.link.selected.fg "help.link.selected.fg" white gfxconfig.set.int
+/help.link.selected.bg "help.link.selected.bg" 0x0000a0 gfxconfig.set.int
+/help.highlight.fg "help.highlight.fg" 0x009000 gfxconfig.set.int
+/menu.text.normal "mainmenu.normal.fg" white gfxconfig.set.int
+/menu.text.select "mainmenu.selected.fg" black gfxconfig.set.int
+/boot.text.options "bootopt.label.fg" white gfxconfig.set.int
+/boot.text.normal "bootopt.text.fg" white gfxconfig.set.int
+/menu.bar.color "mainmenu.bar.color" white gfxconfig.set.int
+/menu.bar.min.width "mainmenu.bar.minwidth" 300 gfxconfig.set.int
+/menu.bar.transparency "mainmenu.bar.transparency" 70 gfxconfig.set.int
+/menu.start.x
+/menu.start.y "mainmenu.pos" 253 170 gfxconfig.set.int2
+/menu.max.entries "mainmenu.entries" 8 gfxconfig.set.int
+/boot.pos.x
+/boot.pos.y "bootopt.pos" 263 480 gfxconfig.set.int2
+/panel.normal.fg "panel.normal.fg" white gfxconfig.set.int
+/panel.title.fg "panel.title.fg" white gfxconfig.set.int
+/panel.f-key.fg "panel.f-key.fg" black gfxconfig.set.int
+/keymap.submenu "keymap.submenu" false gfxconfig.set.bool
+/keymap.default "keymap" "" gfxconfig.set.str
+/config.addopt.lang "addopt.lang" false gfxconfig.set.bool
+/config.addopt.keytable "addopt.keytable" false gfxconfig.set.bool
+
+/install.install "install" "" gfxconfig.set.str
+/install.http.server "install.http.server" "" gfxconfig.set.str
+/install.http.path "install.http.path" "" gfxconfig.set.str
+
+/install.nfs.server "install.nfs.server" "" gfxconfig.set.str
+/install.nfs.path "install.nfs.path" "" gfxconfig.set.str
+
+/install.ftp.server "install.ftp.server" "" gfxconfig.set.str
+/install.ftp.path "install.ftp.path" "" gfxconfig.set.str
+/install.ftp.user "install.ftp.user" "" gfxconfig.set.str
+/install.ftp.password "install.ftp.password" "" gfxconfig.set.str
+
+/install.smb.server "install.smb.server" "" gfxconfig.set.str
+/install.smb.share "install.smb.share" "" gfxconfig.set.str
+/install.smb.path "install.smb.path" "" gfxconfig.set.str
+/install.smb.domain "install.smb.domain" "" gfxconfig.set.str
+/install.smb.user "install.smb.user" "" gfxconfig.set.str
+/install.smb.password "install.smb.password" "" gfxconfig.set.str
+
+/install.hd.device "install.hd.device" "" gfxconfig.set.str
+/install.hd.path "install.hd.path" "" gfxconfig.set.str
+
+/dud.default "dud" "" gfxconfig.set.str
+/dud.file "dud.file" "" gfxconfig.set.str
+/dud.url "dud.url" "" gfxconfig.set.str
+/dud.url.name "dud.url.name" "" gfxconfig.set.str
+
+/config.key.F2 "key.F2" "" gfxconfig.set.str
+/config.key.F3 "key.F3" "" gfxconfig.set.str
+/config.key.F4 "key.F4" "" gfxconfig.set.str
+/config.key.F5 "key.F5" "" gfxconfig.set.str
+/config.key.F6 "key.F6" "" gfxconfig.set.str
+/config.key.F7 "key.F7" "" gfxconfig.set.str
+/config.key.F8 "key.F8" "" gfxconfig.set.str
+/config.key.F9 "key.F9" "" gfxconfig.set.str
+/config.key.F10 "key.F10" "" gfxconfig.set.str
+/config.key.F11 "key.F11" "" gfxconfig.set.str
+/config.key.F12 "key.F12" "" gfxconfig.set.str
+
+/config.product "product" "openSUSE" gfxconfig.set.str
+
+/config.init "init" "" gfxconfig.set.str
+
+/serial.line0 "serial.line0" [ ] gfxconfig.set.array_str
+/serial.line1 "serial.line1" [ ] gfxconfig.set.array_str
+/serial.line2 "serial.line2" [ ] gfxconfig.set.array_str
+/serial.line3 "serial.line3" [ ] gfxconfig.set.array_str
+
+/serial.lines [
+ serial.line0 serial.line1 serial.line2 serial.line3
+] def
+
+% Array of menu entries with no boot option input field.
+/config.nobootoptions "nobootoptions" [ ] gfxconfig.set.array_str
+
+% Array of menu entries which should not get an 'install' option appended.
+/config.noinstallopt "noinstallopt" [ ] gfxconfig.set.array_str
+
+% Mininum required memory in MB.
+/mem.check {
+ mem.min gfxconfig.int dup .undef eq { pop 0 } if
+} def
+
+% Message to print if we fail minimum memory requirement.
+/mem.show {
+ mem.msg gfxconfig.str dup .undef eq { pop "Not enough memory." } if
+} def
+
+/mode.install false def
+gfxconfig.layout { "install" eq { /mode.install true def exit } if } forall
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+% drawing area size
+/clip.size { screen.size } def
+
+% set background image
+config.background findfile setimage
+
+% get font(s)
+/font.normal config.font.normal findfile def
+/font.large
+ % don't load it twice
+ config.font.normal config.font.large eq {
+ font.normal
+ } {
+ config.font.large findfile
+ } ifelse
+def
+
+% default kroet direction (idle task)
+/kroete.dir 0 def
+
+% default debug level
+/debug 0 def
+
+% no specials for visual impaired people
+/v_impaired 0 def
+
+% show welcome animation?
+ptheme
+screen.fallback or
+CapsLock or
+config.welcome 0 eq or
+{
+ /bsplash.done { } def
+} {
+ bsplash.show
+} ifelse
+
+% check for bi-arch config
+check_arch_boot_dir
+
diff --git a/themes/openSUSE/src/dia_about.inc b/themes/openSUSE/src/dia_about.inc
new file mode 100644
index 0000000..11b5b37
--- /dev/null
+++ b/themes/openSUSE/src/dia_about.inc
@@ -0,0 +1,77 @@
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+%
+% Panel 'about' entry.
+%
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Show help window.
+%
+% ( ) => ( )
+%
+/panel.about {
+ panel 0
+ "help" panel.entry dup { [ keyF1 0 "F1" 5 -1 roll { } forall ] } if
+ put
+ about.popup
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Return width of 'about' entry.
+%
+% ( ) => ( width )
+%
+/panel.about.width {
+ "About" strsize pop
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Redraw panel entry.
+%
+% ( panel ) => ( )
+%
+/panel.about.update {
+ panel.text.moveto
+ "About" show
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Show 'about' box.
+%
+% ( ) ==> ( )
+%
+/about.popup {
+ window.dialog
+
+ dup .title "About" put
+ dup .text about.msg put
+ dup .buttons [
+ button.ok button.default actRedraw button.setaction
+ ] put
+ dup window.init
+ window.show
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Return 'about' text, if any.
+%
+% ( -- obj1 )
+%
+% obj1: string with message or .undef
+%
+/about.msg {
+
+ /about.msg
+ ptheme { "pabout.txt" } { "about.txt" } ifelse findfile dup .undef ne {
+ dup length string dup cvp rot dup length memcpy
+ } if
+ def
+
+ about.msg
+
+} def
+
diff --git a/themes/openSUSE/src/dia_bits.inc b/themes/openSUSE/src/dia_bits.inc
new file mode 100644
index 0000000..01a4ea8
--- /dev/null
+++ b/themes/openSUSE/src/dia_bits.inc
@@ -0,0 +1,101 @@
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+%
+% 32/64 bit install selection dialog.
+%
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Some global vars.
+%
+/bits.default 0 def
+
+/bits.suffix [
+ .undef
+ "64"
+] def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Build menu list.
+%
+% ( ) ==> ( )
+%
+/bits.init {
+ /xmenu.bits .xm_size array def
+
+ /xmenu xmenu.bits def
+
+ xmenu .xm_list [ "x86" ] put
+
+ 32+64bit_source {
+ 64bit {
+ /bits.default 1 def
+ xmenu .xm_list [ "x86" "x86-64" ] put
+ } if
+ } if
+
+ % no '64' suffix
+ 32bit_boot_dir 64bit_boot_dir ne {
+ bits.suffix 1 .undef put
+ } if
+
+ xmenu .xm_title /txt_arch put
+
+ xmenu .xm_current bits.default put
+
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Update bit selection menu.
+%
+% ( ) ==> ( )
+%
+/bits.update {
+ /xmenu xmenu.bits def
+
+ /window.action actRedrawPanel def
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Show bit selection menu.
+%
+% ( ) => ( )
+%
+/panel.bits {
+ "bits" help.setcontext
+
+ window.xmenu
+ dup .xmenu xmenu.bits put
+ dup .xmenu.update /bits.update put
+ dup window.init
+ window.show
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Return width of panel entry.
+%
+% ( ) => ( width )
+%
+/panel.bits.width {
+ /xmenu xmenu.bits def
+
+ pmenu.width
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Redraw panel entry.
+%
+% ( panel ) => ( )
+%
+/panel.bits.update {
+ /xmenu xmenu.bits def
+
+ pmenu.panel.update
+} def
+
+
diff --git a/themes/openSUSE/src/dia_dud.inc b/themes/openSUSE/src/dia_dud.inc
new file mode 100644
index 0000000..647965c
--- /dev/null
+++ b/themes/openSUSE/src/dia_dud.inc
@@ -0,0 +1,165 @@
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+%
+% Driver update dialog.
+%
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Some global vars.
+%
+/.dud_yes 0 def
+/.dud_no 1 def
+/.dud_file 2 def
+/.dud_url 3 def
+
+/dud.last .dud_no def
+
+/dud.options [
+ "dud=1"
+ ""
+ .undef
+ .undef
+] def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Build driver update menu.
+%
+% ( ) ==> ( )
+%
+/dud.init {
+ /xmenu.dud .xm_size array def
+
+ /xmenu xmenu.dud def
+
+ /input.edit.dud_file [ 127 string ] def
+ /input.edit.dud_url [ 127 string ] def
+
+ dud.read.config
+
+ xmenu .xm_current dud.last put
+ xmenu .xm_list [ /txt_yes /txt_no /txt_file dud.url.name ] put
+
+ xmenu .xm_title /txt_driver_update put
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Update driver update mode.
+%
+% ( ) ==> ( )
+%
+/dud.update {
+ /xmenu xmenu.dud def
+
+ xmenu .xm_current get dup .dud_file eq over .dud_url eq or {
+ dud.dialog
+ } if
+ /window.action actRedrawPanel def
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Show driver update menu.
+%
+% ( ) => ( )
+%
+/panel.dud {
+ "driverupdate" help.setcontext
+
+ window.xmenu
+ dup .xmenu xmenu.dud put
+ dup .xmenu.update /dud.update put
+ dup window.init
+ window.show
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Return width of panel entry.
+%
+% ( ) => ( width )
+%
+/panel.dud.width {
+ /xmenu xmenu.dud def
+
+ pmenu.width
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Redraw panel entry.
+%
+% ( panel ) => ( )
+%
+/panel.dud.update {
+ /xmenu xmenu.dud def
+
+ pmenu.panel.update
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+/dud.dialog {
+
+ /dia window.dialog def
+
+ dia .text "" put
+
+ xmenu .xm_current get
+
+ dup .dud_file eq {
+ dia .title txt_driver_update2 put
+
+ % Must all be of same size!
+ dia .ed.list 1 array put
+ dia .ed.buffer.list input.edit.dud_file put
+ dia .ed.text.list [ txt_dud_file_msg ] put
+ } if
+
+ dup .dud_url eq {
+ dia .title txt_dud_download put
+
+ % Must all be of same size!
+ dia .ed.list 1 array put
+ dia .ed.buffer.list input.edit.dud_url put
+ dia .ed.text.list [ txt_dud_enter_url ] put
+ } if
+
+ pop
+
+ dia .ed.focus 0 put
+ dia .ed.width 300 put
+
+ dia .buttons [
+ button.ok button.default actNothing button.setaction
+ button.cancel button.notdefault actNothing button.setaction
+ config.rtl { exch } if
+ ] put
+
+ dia window.init
+ dia window.show
+
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Read default values.
+%
+% ( -- )
+%
+/dud.read.config {
+ dud.default
+ dup "yes" eq { /dud.last .dud_yes def } if
+ dup "no" eq { /dud.last .dud_no def } if
+ dup "file" eq { /dud.last .dud_file def } if
+ dup "url" eq { /dud.last .dud_url def } if
+ pop
+
+ input.edit.dud_file 0 get dud.file strcpy pop
+ input.edit.dud_url 0 get dud.url strcpy pop
+
+ dud.url.name "" eq { /dud.url.name "URL" def } if
+
+} def
diff --git a/themes/openSUSE/src/dia_help.inc b/themes/openSUSE/src/dia_help.inc
new file mode 100644
index 0000000..86db5aa
--- /dev/null
+++ b/themes/openSUSE/src/dia_help.inc
@@ -0,0 +1,46 @@
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+%
+% Panel help entry.
+%
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Show help window.
+%
+% ( ) => ( )
+%
+/panel.help {
+ help.context "opt" eq {
+ findbootoption
+ help.mapcontext
+ dup help.findpage
+ "" eq { pop } { help.setcontext } ifelse
+ } if
+ show_help
+
+ config.talk { txt_help speak } if
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Return width of help entry.
+%
+% ( ) => ( width )
+%
+/panel.help.width {
+ txt_help strsize pop
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Redraw panel entry.
+%
+% ( panel ) => ( )
+%
+/panel.help.update {
+ panel.text.moveto
+
+ txt_help show.rtl
+} def
+
+
diff --git a/themes/openSUSE/src/dia_install.inc b/themes/openSUSE/src/dia_install.inc
new file mode 100644
index 0000000..69ccb34
--- /dev/null
+++ b/themes/openSUSE/src/dia_install.inc
@@ -0,0 +1,443 @@
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+%
+% Install mode selection dialog.
+%
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Some global vars.
+%
+/install.option 255 string def
+/proxy.option 255 string def
+
+% install types
+/.inst_cdrom 0 def
+/.inst_hd 1 def
+/.inst_slp 2 def
+/.inst_ftp 3 def
+/.inst_http 4 def
+/.inst_nfs 5 def
+/.inst_smb 6 def
+/.inst_net_setup 7 def
+/.inst_net_proxy 8 def
+
+/install.default .inst_cdrom def
+
+% isohybrid image booted as disk
+sectorsize 0x200 eq bootdrive 0x80 eq or {
+ /install.default .inst_hd def
+} if
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Build install mode list.
+%
+% ( ) ==> ( )
+%
+/install.init {
+ /xmenu.install .xm_size array def
+
+ /xmenu xmenu.install def
+
+ /input.edit.ftp [ 63 string 127 string 31 string 31 string ] def
+ /input.edit.http [ 63 string 127 string ] def
+ /input.edit.nfs [ 63 string 127 string ] def
+ /input.edit.smb [ 63 string 31 string 127 string 31 string 31 string 31 string ] def
+ /input.edit.hd [ 63 string 127 string ] def
+ /input.edit.proxy [ 63 string 127 string 63 string 63 string ] def
+
+ install.read.config
+
+ xmenu .xm_current install.default put
+
+ % see install types (.inst_*)
+ xmenu .xm_list [
+ is_dvd { "DVD" } { "CD-ROM" } ifelse
+ /txt_harddisk
+ "\x09SLP"
+ "FTP"
+ "HTTP"
+ "NFS"
+ "SMB / CIFS"
+ /install.submenu.net
+ /txt_http_proxy
+ ] put
+
+ xmenu .xm_title /txt_install_source put
+
+ install.set.install.option
+
+ % needed in case menu is only attached to install menu
+ net.init
+} def
+
+
+/install.submenu.net.buf 64 string def
+/install.submenu.net {
+ /txt_network_config exec "\x09\x09%s" install.submenu.net.buf sprintf
+ install.submenu.net.buf
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Update install mode.
+%
+% ( ) ==> ( )
+%
+/install.update {
+ /xmenu xmenu.install def
+
+ xmenu .xm_current get .inst_net_setup eq {
+ xmenu .xm_current over .xm_last get put
+ panel.net
+ } {
+ xmenu .xm_current get dup .inst_cdrom eq exch .inst_slp eq or {
+ install.set.install.option
+ /window.action actRedrawPanel def
+ } {
+ install.dialog
+ } ifelse
+ } ifelse
+
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Show install menu.
+%
+% ( ) => ( )
+%
+/panel.install {
+ "install_src" help.setcontext
+
+ window.xmenu
+ dup .xmenu xmenu.install put
+ dup .xmenu.update /install.update put
+ dup window.init
+ window.show
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Return width of panel entry.
+%
+% ( ) => ( width )
+%
+/panel.install.width {
+ /xmenu xmenu.install def
+
+ pmenu.width
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Redraw panel entry.
+%
+% ( panel ) => ( )
+%
+/panel.install.update {
+ /xmenu xmenu.install def
+
+ pmenu.panel.update
+
+ xmenu.net .xm_panel_x xmenu.install .xm_panel_x get put
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+
+/install.dialog {
+
+ /dia window.dialog def
+
+ dia .text "" put
+
+ xmenu .xm_current get
+
+ dup .inst_ftp eq {
+ dia .title txt_ftp_title put
+
+ % Must all be of same size!
+ dia .ed.list 4 array put
+ dia .ed.buffer.list input.edit.ftp put
+ dia .ed.text.list [ txt_server txt_directory txt_user1 txt_password ] put
+
+ dia .ed.font font.normal put
+ dia .ed.pw_field 3 put
+
+ } if
+
+ dup .inst_http eq {
+ dia .title txt_http_title put
+
+ % Must all be of same size!
+ dia .ed.list 2 array put
+ dia .ed.buffer.list input.edit.http put
+ dia .ed.text.list [ txt_server txt_directory ] put
+
+ } if
+
+ dup .inst_nfs eq {
+ dia .title txt_nfs_title put
+
+ % Must all be of same size!
+ dia .ed.list 2 array put
+ dia .ed.buffer.list input.edit.nfs put
+ dia .ed.text.list [ txt_server txt_directory ] put
+
+ } if
+
+ dup .inst_smb eq {
+ dia .title txt_smb_title put
+
+ % Must all be of same size!
+ dia .ed.list 6 array put
+ dia .ed.buffer.list input.edit.smb put
+ dia .ed.text.list [ txt_server txt_share txt_directory txt_domain txt_user2 txt_password ] put
+
+ dia .ed.font font.normal put
+ dia .ed.pw_field 5 put
+
+ } if
+
+ dup .inst_hd eq {
+ dia .title txt_harddisk_title put
+
+ % Must all be of same size!
+ dia .ed.list 2 array put
+ dia .ed.buffer.list input.edit.hd put
+ dia .ed.text.list [ txt_hd_diskdevice txt_directory ] put
+
+ } if
+
+ dup .inst_net_proxy eq {
+ dia .title "HTTP Proxy" put
+
+ % Must all be of same size!
+ dia .ed.list 4 array put
+ dia .ed.buffer.list input.edit.proxy put
+ dia .ed.text.list [ txt_server "Port\n" "User\n" txt_password ] put
+
+ dia .ed.font font.normal put
+ dia .ed.pw_field 3 put
+
+ } if
+
+ pop
+
+ dia .ed.focus 0 put
+ dia .ed.width 300 put
+
+ dia .buttons [
+ button.ok button.default actInstallOK actNoClose or button.setaction
+ button.cancel button.notdefault actInstallCancel button.setaction
+ config.rtl { exch } if
+ ] put
+
+ dia window.init
+ dia window.show
+
+} def
+
+
+
+/install.ok {
+ /xmenu xmenu.install def
+
+ window.done
+
+ /window.action actRedrawPanel def
+
+ pmenu.update
+
+ install.set.install.option
+
+ xmenu .xm_current get .inst_net_proxy eq {
+ xmenu .xm_current over .xm_last get put
+ } if
+} def
+
+
+/install.cancel {
+ /xmenu xmenu.install def
+
+ xmenu .xm_current over .xm_last get put
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Set 'install=' boot option.
+%
+% ( -- )
+%
+/install.set.install.option {
+ xmenu .xm_current get
+
+ dup .inst_net_proxy ne {
+ % default: .inst_cdrom
+ install.option "" strcpy pop
+ } if
+
+ dup .inst_slp eq {
+ install.option "install=slp:/" strcpy pop
+ } if
+
+ dup .inst_ftp eq {
+ input.edit.ftp
+
+ "install=ftp://" install.option sprintf
+
+ % add user name & password
+ dup 2 get "" ne {
+ dup 2 get url_escape "%s" install.option dup length add sprintf
+ dup 3 get "" ne {
+ dup 3 get url_escape ":%s" install.option dup length add sprintf
+ } if
+ "@" install.option dup length add sprintf
+ } if
+
+ dup 1 get exch 0 get "%s/%s" install.option dup length add sprintf
+ } if
+
+ dup .inst_http eq {
+ input.edit.http
+ dup 1 get dup 0 get '/' eq { 1 add } if
+ exch 0 get
+ "install=http://%s/%s" install.option sprintf
+ } if
+
+ dup .inst_nfs eq {
+ input.edit.nfs
+ dup 1 get dup 0 get '/' eq { 1 add } if
+ exch 0 get
+ "install=nfs://%s/%s" install.option sprintf
+ } if
+
+ dup .inst_smb eq {
+ input.edit.smb
+
+ "install=smb://" install.option sprintf
+
+ % add domain
+ dup 3 get "" ne {
+ dup 3 get "%s;" install.option dup length add sprintf
+ } if
+
+ % add user name & password
+ dup 4 get "" ne {
+ dup 4 get url_escape "%s" install.option dup length add sprintf
+ dup 5 get "" ne {
+ dup 5 get url_escape ":%s" install.option dup length add sprintf
+ } if
+ "@" install.option dup length add sprintf
+ } if
+
+ dup 2 get dup 0 get '/' eq { 1 add } if
+ over 1 get rot 0 get
+ "%s/%s/%s" install.option dup length add sprintf
+ } if
+
+ dup .inst_hd eq {
+ input.edit.hd
+ dup 1 get dup 0 get '/' eq { 1 add } if
+ exch 0 get dup 0 get '/' eq { 1 add } if
+ "install=hd://%s/%s" install.option sprintf
+ } if
+
+ dup .inst_net_proxy eq {
+ input.edit.proxy
+ dup 0 get "" ne {
+ "proxy=http://" proxy.option sprintf
+ % add user name & password
+ dup 2 get "" ne {
+ dup 2 get url_escape "%s" proxy.option dup length add sprintf
+ dup 3 get "" ne {
+ dup 3 get url_escape ":%s" proxy.option dup length add sprintf
+ } if
+ "@" proxy.option dup length add sprintf
+ } if
+
+ dup 1 get exch 0 get "%s:%s" proxy.option dup length add sprintf
+ } {
+ pop
+ proxy.option "" strcpy pop
+ } ifelse
+ } if
+
+ pop
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Read default values.
+%
+% ( -- )
+%
+/install.read.config {
+ install.install
+ dup "cdrom" eq { /install.default .inst_cdrom def } if
+ dup "slp" eq { /install.default .inst_slp def } if
+ dup "ftp" eq { /install.default .inst_ftp def } if
+ dup "http" eq { /install.default .inst_http def } if
+ dup "nfs" eq { /install.default .inst_nfs def } if
+ dup "smb" eq { /install.default .inst_smb def } if
+ dup "hd" eq { /install.default .inst_hd def } if
+ pop
+
+ input.edit.http 0 get install.http.server strcpy pop
+ input.edit.http 1 get install.http.path strcpy pop
+
+ input.edit.nfs 0 get install.nfs.server strcpy pop
+ input.edit.nfs 1 get install.nfs.path strcpy pop
+
+ input.edit.ftp 0 get install.ftp.server strcpy pop
+ input.edit.ftp 1 get install.ftp.path strcpy pop
+ input.edit.ftp 2 get install.ftp.user strcpy pop
+ input.edit.ftp 3 get install.ftp.password strcpy pop
+
+ input.edit.smb 0 get install.smb.server strcpy pop
+ input.edit.smb 1 get install.smb.share strcpy pop
+ input.edit.smb 2 get install.smb.path strcpy pop
+ input.edit.smb 3 get install.smb.domain strcpy pop
+ input.edit.smb 4 get install.smb.user strcpy pop
+ input.edit.smb 5 get install.smb.password strcpy pop
+
+ input.edit.hd 0 get install.hd.device strcpy pop
+ input.edit.hd 1 get install.hd.path strcpy pop
+
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Escape ("%XX") fishy chars.
+%
+% ( str1 -- str2 )
+%
+% Note: the returned string is a static buffer.
+%
+/url_escape {
+ /url_esc_idx 0 def
+
+ {
+ /url_esc_c exch def
+ url_esc_c '0' ge url_esc_c '9' le and
+ url_esc_c 'A' ge url_esc_c 'Z' le and or
+ url_esc_c 'a' ge url_esc_c 'z' le and or
+ url_esc_c '_' eq or
+ {
+ url_esc_buf url_esc_idx url_esc_c put
+ /url_esc_idx inc
+ } {
+ url_esc_c "%%%02x" url_esc_buf url_esc_idx add sprintf
+ /url_esc_idx url_esc_idx 3 add def
+ } ifelse
+ } forall
+
+ url_esc_buf dup url_esc_idx 0 put
+} def
+
+/url_esc_buf 256 string def
+
+
diff --git a/themes/openSUSE/src/dia_kernelopts.inc b/themes/openSUSE/src/dia_kernelopts.inc
new file mode 100644
index 0000000..942efb6
--- /dev/null
+++ b/themes/openSUSE/src/dia_kernelopts.inc
@@ -0,0 +1,94 @@
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+%
+% Kernel options dialog.
+%
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Some global vars.
+%
+/kernelopts.default 0 def
+
+/kernelopts.options [
+ ""
+ "apm=off acpi=off mce=off barrier=off ide=nodma idewait=50 i8042.nomux psmouse.proto=bare irqpoll pci=nommconf"
+ "acpi=off"
+ "nolapic"
+] def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Build kernelopts list.
+%
+% ( ) ==> ( )
+%
+/kernelopts.init {
+ /xmenu.kernelopts .xm_size array def
+
+ /xmenu xmenu.kernelopts def
+
+ xmenu .xm_current kernelopts.default put
+ xmenu .xm_list [
+ /txt_kernel_default
+ /txt_kernel_safe
+ /txt_kernel_noacpi
+ /txt_kernel_nolapic
+ ] put
+ xmenu .xm_title /txt_kernel put
+
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Update kernelopts mode.
+%
+% ( ) ==> ( )
+%
+/kernelopts.update {
+ /xmenu xmenu.kernelopts def
+
+ /window.action actRedrawPanel def
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Show kernelopts menu.
+%
+% ( ) => ( )
+%
+/panel.kernelopts {
+ "main" help.setcontext
+
+ window.xmenu
+ dup .xmenu xmenu.kernelopts put
+ dup .xmenu.update /kernelopts.update put
+ dup window.init
+ window.show
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Return width of panel entry.
+%
+% ( ) => ( width )
+%
+/panel.kernelopts.width {
+ /xmenu xmenu.kernelopts def
+
+ pmenu.width
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Redraw panel entry.
+%
+% ( panel ) => ( )
+%
+/panel.kernelopts.update {
+ /xmenu xmenu.kernelopts def
+
+ pmenu.panel.update
+} def
+
+
diff --git a/themes/openSUSE/src/dia_keymap.inc b/themes/openSUSE/src/dia_keymap.inc
new file mode 100644
index 0000000..0c4feb7
--- /dev/null
+++ b/themes/openSUSE/src/dia_keymap.inc
@@ -0,0 +1,105 @@
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+%
+% keyboard map selection dialog.
+%
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Some global vars.
+%
+
+/keymap.setdefault {
+ xmenu.keymap .xm_current
+
+ 0
+ keymaps {
+ .km.id get config.keymap.id eq { exit } if
+ 1 add
+ } forall
+
+ dup keymaps length ge { pop 0 } if
+
+ put
+
+} def
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Build menu list.
+%
+% ( ) ==> ( )
+%
+/keymap.init {
+ /xmenu.keymap .xm_size array def
+
+ /xmenu xmenu.keymap def
+
+ xmenu .xm_list [
+ keymaps { .km.name get } forall
+ ] put
+
+ xmenu .xm_title /txt_keyboard put
+
+ keymap.setdefault
+
+ % just once (see lang.init)
+ /keymap.init { } def
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Update keybaord selection menu.
+%
+% ( ) ==> ( )
+%
+/keymap.update {
+ /xmenu xmenu.keymap def
+
+ keymaps xmenu .xm_current get get .km.id get setkeymap
+
+ /window.action actRedrawPanel def
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Show keymap selection menu.
+%
+% ( ) => ( )
+%
+/panel.keymap {
+ "keymap" help.setcontext
+
+ keymap.setdefault
+
+ window.xmenu
+ dup .xmenu xmenu.keymap put
+ dup .xmenu.update /keymap.update put
+ dup window.init
+ window.show
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Return width of panel entry.
+%
+% ( ) => ( width )
+%
+/panel.keymap.width {
+ /xmenu xmenu.keymap def
+
+ pmenu.width
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Redraw panel entry.
+%
+% ( panel ) => ( )
+%
+/panel.keymap.update {
+ /xmenu xmenu.keymap def
+
+ pmenu.panel.update
+} def
+
+
diff --git a/themes/openSUSE/src/dia_lang.inc b/themes/openSUSE/src/dia_lang.inc
new file mode 100644
index 0000000..6f42f11
--- /dev/null
+++ b/themes/openSUSE/src/dia_lang.inc
@@ -0,0 +1,313 @@
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+%
+% Language selection dialog.
+%
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Some global vars.
+%
+
+% fallback if there is no "languages"
+/lang.items [ "en_US" ] def
+/lang.names [ "English (US)" ] def
+
+/.la.locale 0 def
+/.la.keymap 1 def
+/.la.rtl 2 def
+/.la.name 3 def
+
+/lang.defaultnames [
+ [ "af_ZA" "us" false "Afrikaans" ] % Afrikaans
+% [ "ar_EG" "arabic" true "\u064a\u0628\u0631\u0639" ] % Arabic
+ [ "ar_EG" "arabic" true "\ufef2\ufe91\ufeae\ufecb" ] % Arabic
+ [ "ast_ES" "es" false "Asturianu" ] % Asturian
+ [ "bg_BG" "us" false "Български" ] % Bulgarian
+ [ "bn_BD" "us" false "\u09ac\u09be\u0982\u09b2\u09be" ] % Bengali
+ [ "bs_BA" "us" false "Bosanski" ] % Bosnian
+ [ "ca_ES" "es" false "Català" ] % Catalan
+ [ "cs_CZ" "cz-us-qwertz" false "Čeština" ] % Czech
+ [ "cy_GB" "us" false "Cymraeg" ] % Welsh
+ [ "da_DK" "dk" false "Dansk" ] % Danish
+ [ "de_DE" "de-latin1-nodeadkeys" false "Deutsch" ] % German
+ [ "el_GR" "gr" false "Ελληνικά" ] % Greek
+ [ "en_GB" "uk" false "English (UK)" ] % English
+ [ "en_US" "us" false "English (US)" ] % English
+ [ "es_ES" "es" false "Español" ] % Spanish
+ [ "et_EE" "et" false "Eesti" ] % Estonian
+ [ "fa_IR" "us" true "\ufbfd\ufeb4\u0631\ufe8e\ufed3" ] % Farsi
+ [ "fi_FI" "fi-latin1" false "Suomi" ] % Finnish
+ [ "fr_FR" "fr-latin1" false "Français" ] % French
+ [ "gl_ES" "es" false "Galego" ] % Galician
+ [ "ka_GE" "us" false "ქართული" ] % Kartuli
+ [ "gu_IN" "us" false "\u0a97\u0ac1\u0a9c\u0ab0\u0abe\u0aa4\u0ac0" ] % Gujarati
+ [ "he_IL" "us" false "תירבע" ] % Hebrew
+% [ "hi_IN" "us" false "\u0939\u093f\u0928\u094d\u0926\u0940" ] % Hindi
+ [ "hi_IN" "us" false "\u0939\u093f\u0902\u0926\u0940" ] % Hindi
+ [ "hr_HR" "croat" false "Hrvatski" ] % Croatian
+ [ "hu_HU" "hu" false "Magyar" ] % Hungarian
+ [ "id_ID" "us" false "Bahasa Indonesia" ] % Indonesian
+ [ "it_IT" "it" false "Italiano" ] % Italian
+ [ "ja_JP" "jp106" false "日本語" ] % Japanese
+ [ "jv_ID" "us" false "Basa Jawa" ] % Javanese
+% [ "km_KH" "khmer" false "\u1781\u17d2\u1798\u17c2\u179a" ] % Khmer
+ [ "km_KH" "khmer" false "Khmer" ] % Khmer
+ [ "ko_KR" "korean" false "한글" ] % Korean
+ [ "ky_KG" "us" false "Кыргызча" ] % Kirghiz
+ [ "lo_LA" "us" false "\u0e9e\u0eb2\u0eaa\u0eb2\u0ea5\u0eb2\u0ea7" ] % Lao
+ [ "lt_LT" "lt.baltic" false "Lietuvių" ] % Lithuanian
+ [ "mk_MK" "us" false "Македонски" ] % Macedonian
+ [ "mr_IN" "us" false "\u092e\u0930\u093e\u0920\u0940" ] % Marathi
+ [ "nb_NO" "no-latin1" false "Norsk" ] % Norwegian
+ [ "nl_NL" "us" false "Nederlands" ] % Dutch
+ [ "nn_NO" "no-latin1" false "Nynorsk" ] % Nynorsk
+ [ "pa_IN" "us" false "\u0a2a\u0a70\u0a1c\u0a3e\u0a2c\u0a40" ] % Punjabi
+ [ "pl_PL" "Pl02" false "Polski" ] % Polish
+ [ "pt_BR" "br-abnt2" false "Português (Brasil)" ] % Portuguese (Brazilian)
+ [ "pt_PT" "pt-latin1" false "Português" ] % Portuguese
+ [ "ro_RO" "us" false "Română" ] % Romanian
+ [ "ru_RU" "ruwin_alt-UTF-8" false "Русский" ] % Russian
+ [ "si_LK" "us" false "\u0dc3\u0dd2\u0d82\u0dc4\u0dbd" ] % Sinhala
+ [ "sk_SK" "sk-qwertz" false "Slovenčina" ] % Slovak
+ [ "sl_SI" "slovene" false "Slovenščina" ] % Slovenian
+ [ "sr_RS" "sr-cy" false "Srpski" ] % Serbian
+ [ "sv_SE" "sv-latin1" false "Svenska" ] % Swedish
+ [ "ta_IN" "us" false "\u0ba4\u0bae\u0bbf\u0bb4\u0bcd" ] % Tamil
+ [ "tg_TJ" "tj" false "тоҷикӣ" ] % Tadjik
+ [ "th_TH" "us" false "\u0e20\u0e32\u0e29\u0e32\u0e44\u0e17\u0e22" ] % Thai
+ [ "tr_TR" "trq" false "Türkçe" ] % Turkish
+ [ "uk_UA" "ua" false "Українська" ] % Ukrainian
+ [ "vi_VN" "us" false "Tiếng Việt" ] % Vietnamese
+ [ "wa_BE" "be-latin1" false "Walon" ] % Walloon
+ [ "xh_ZA" "us" false "isiXhosa" ] % Xhosa
+ [ "zh_CN" "us" false "简体中文" ] % Simplified Chinese
+ [ "zh_TW" "us" false "繁體中文 (台灣)" ] % Traditional Chinese
+ [ "zu_ZA" "us" false "isiZulu" ] % Zulu
+] def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Get language property.
+%
+% Returns .undef if not found.
+%
+% ( locale prop ) ==> ( obj )
+%
+/lang.getprop {
+ lang.defaultnames {
+ dup .la.locale get 3 index eq { exch get exch pop return } { pop } ifelse
+ } forall
+
+ % try a loose match
+ lang.defaultnames {
+ dup .la.locale get 3 index locale.cmp { exch get exch pop return } { pop } ifelse
+ } forall
+
+ pop pop .undef
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Get language name.
+%
+% Returns locale if not found.
+%
+% ( locale ) ==> ( name )
+%
+/lang.getdefname {
+ dup
+ .la.name lang.getprop
+ dup .undef ne { exch } if
+ pop
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Check for rtl.
+%
+% ( locale ) ==> ( bool )
+%
+/lang.getrtl {
+ .la.rtl lang.getprop
+ dup .undef eq { pop false } if
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Parse "languages" file.
+%
+% ( ) ==> ( )
+%
+/lang.parsedata {
+ /lang.default 0 def
+
+ "languages" findfile dup { /lang.data exch def } { pop return } ifelse
+
+ /la.tmp.datalen lang.data length def
+ /la.tmp.str lang.data cvs def
+
+ la.tmp.datalen 0 eq { return } if
+ la.tmp.str la.tmp.datalen 1 sub get '\n' ne { return } if
+
+ '\n' seteotchar
+
+ /lang.items [
+
+ /la.tmp.len 0 def
+ /la.tmp.cnt 0 def
+ {
+ la.tmp.str la.tmp.len add strdup
+ dup dup length 0 put
+ /la.tmp.len over length 1 add la.tmp.len add def
+
+ dup 0 get '*' eq { 1 add /lang.default la.tmp.cnt def } if
+
+ la.tmp.len la.tmp.datalen ge { exit } if
+
+ /la.tmp.cnt inc
+ } loop
+
+ ] def
+
+ ' ' seteotchar
+
+ /lang.names [
+
+ lang.items {
+
+ dup dup length add
+
+ dup 0 get {
+ dup 0 0 put 1 add
+ exch pop
+ } {
+ pop lang.getdefname
+ } ifelse
+
+ } forall
+
+ keymap.submenu {
+ /lang.submenu.keyboard
+ } if
+
+ ] def
+
+ /lang.submenu.idx keymap.submenu { lang.names length 1 sub } { -1 } ifelse def
+
+ 0 seteotchar
+
+} def
+
+
+/lang.submenu.keyboard.buf 64 string def
+/lang.submenu.keyboard {
+ /txt_keyboard exec "\x09\x09%s" lang.submenu.keyboard.buf sprintf
+ lang.submenu.keyboard.buf
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Build language list.
+%
+% ( ) ==> ( )
+%
+/lang.init {
+ /xmenu.lang .xm_size array def
+ /xmenu xmenu.lang def
+
+ lang.parsedata
+
+ xmenu .xm_current lang.default put
+ xmenu .xm_list lang.names put
+
+ xmenu .xm_title /txt_language put
+
+ % make menu smaller if there are more than 19 language entries
+ %lang.items length 19 gt {
+ % xmenu .xm_vspace 2 put
+ %} if
+
+ % start with current lang
+
+ /la.tmp.cnt 0 def
+ lang.items {
+ config.lang locale.cmp { xmenu .xm_current la.tmp.cnt put exit } if
+ /la.tmp.cnt inc
+ } forall
+
+ /la.tmp.cnt 0 def
+ lang.items {
+ config.lang eq { xmenu .xm_current la.tmp.cnt put exit } if
+ /la.tmp.cnt inc
+ } forall
+
+ % needed in case menu is only attached to lang menu
+ keymap.init
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Update language.
+%
+% ( ) ==> ( )
+%
+/lang.update {
+ /xmenu xmenu.lang def
+
+ xmenu .xm_current get lang.submenu.idx eq {
+ xmenu .xm_current over .xm_last get put
+ panel.keymap
+ } {
+ lang.items xmenu .xm_current get get
+ dup
+ setlang { /window.action actRedraw def } if
+ getkeymapfromlocale setkeymap
+ keymap.setdefault
+ } ifelse
+
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Show language menu.
+%
+% ( ) => ( )
+%
+/panel.lang {
+ "keytable" help.setcontext
+
+ window.xmenu
+ dup .xmenu xmenu.lang put
+ dup .xmenu.update /lang.update put
+ dup window.init
+ window.show
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Return width of panel entry.
+%
+% ( ) => ( width )
+%
+/panel.lang.width {
+ /xmenu xmenu.lang def
+
+ pmenu.width
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Redraw panel entry.
+%
+% ( panel ) => ( )
+%
+/panel.lang.update {
+ /xmenu xmenu.lang def
+
+ pmenu.panel.update
+
+ xmenu.keymap .xm_panel_x xmenu.lang .xm_panel_x get put
+} def
+
+
diff --git a/themes/openSUSE/src/dia_net.inc b/themes/openSUSE/src/dia_net.inc
new file mode 100644
index 0000000..a192cfa
--- /dev/null
+++ b/themes/openSUSE/src/dia_net.inc
@@ -0,0 +1,135 @@
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+%
+% network setup dialogs.
+%
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Some global vars.
+%
+/.net_no 0 def
+/.net_dhcp 1 def
+/.net_static 2 def
+
+/net.default .net_no def
+/net.config_type .undef def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Build menu list.
+%
+% ( ) ==> ( )
+%
+/net.init {
+ /xmenu.net .xm_size array def
+
+ /xmenu xmenu.net def
+
+ xmenu .xm_list [ /txt_no_network "DHCP" /txt_manual_network ] put
+
+ xmenu .xm_title /txt_network_config put
+
+ xmenu .xm_current net.default put
+
+ /input.net.static [ 5 { 127 string } repeat ] def
+
+ % just once (see install.init)
+ /net.init { } def
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Update network selection menu.
+%
+% ( ) ==> ( )
+%
+/net.update {
+ /xmenu xmenu.net def
+
+ /net.config_type xmenu .xm_current get def
+
+ xmenu .xm_current get .net_static eq {
+ net.dialog
+ } if
+
+ /window.action actRedrawPanel def
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Show net selection menu.
+%
+% ( ) => ( )
+%
+/panel.net {
+ "net" help.setcontext
+
+ window.xmenu
+ dup .xmenu xmenu.net put
+ dup .xmenu.update /net.update put
+ dup window.init
+ window.show
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Return width of panel entry.
+%
+% ( ) => ( width )
+%
+/panel.net.width {
+ /xmenu xmenu.net def
+
+ pmenu.width
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Redraw panel entry.
+%
+% ( panel ) => ( )
+%
+/panel.net.update {
+ /xmenu xmenu.net def
+
+ pmenu.panel.update
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+/net.dialog {
+ /dia window.dialog def
+
+ dia .text "" put
+
+ dia .title txt_manual_network_title put
+
+ % ip, netmask, gateway, dns nameserver, domain
+
+ % Must all be of same size!
+ dia .ed.list 5 array put
+ dia .ed.buffer.list input.net.static put
+ dia .ed.text.list [ txt_host_ip txt_netmask txt_gateway_ip txt_nameservers txt_domain_name ] put
+
+ dia .ed.focus 0 put
+ dia .ed.width 300 put
+
+ dia .buttons [
+ button.ok button.default actNothing button.setaction
+ button.cancel button.notdefault /net.static.abort button.setaction
+ config.rtl { exch } if
+ ] put
+
+ dia window.init
+ dia window.show
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+/net.static.abort {
+ xmenu.net .xm_current over .xm_last get put
+ actNothing
+} def
+
+
diff --git a/themes/openSUSE/src/dia_otheropts.inc b/themes/openSUSE/src/dia_otheropts.inc
new file mode 100644
index 0000000..67a082e
--- /dev/null
+++ b/themes/openSUSE/src/dia_otheropts.inc
@@ -0,0 +1,111 @@
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+%
+% Various kernel options dialog.
+%
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Some global vars.
+%
+/otheropts.default 0 def
+
+config.init "/sbin/init" eq { /config.init "" def } if
+config.init "/bin/systemd" eq { /otheropts.default 1 def } if
+config.init "/sbin/sysvinit" eq { /otheropts.default 2 def } if
+config.init "/bin/sh" eq { /otheropts.default 3 def } if
+
+/otheropts.xtra
+ config.init "" ne
+ config.init "/bin/systemd" ne and
+ config.init "/sbin/sysvinit" ne and
+ config.init "/bin/sh" ne and
+def
+
+/otheropts.options [
+ ""
+ "init=/bin/systemd"
+ "init=/sbin/sysvinit"
+ "init=/bin/sh"
+ otheropts.xtra {
+ 100 string dup config.init "init=%s" rot sprintf
+ /otheropts.default 3 def
+ } if
+] def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Build otheropts list.
+%
+% ( ) ==> ( )
+%
+/otheropts.init {
+ /xmenu.otheropts .xm_size array def
+
+ /xmenu xmenu.otheropts def
+
+ xmenu .xm_current otheropts.default put
+ xmenu .xm_list [
+ "Default"
+ "Systemd"
+ "System V"
+ "Shell"
+ otheropts.xtra { config.init } if
+ ] put
+ xmenu .xm_title "Init Program" put
+
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Update otheropts mode.
+%
+% ( ) ==> ( )
+%
+/otheropts.update {
+ /xmenu xmenu.otheropts def
+
+ /window.action actRedrawPanel def
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Show otheropts menu.
+%
+% ( ) => ( )
+%
+/panel.otheropts {
+ "main" help.setcontext
+
+ window.xmenu
+ dup .xmenu xmenu.otheropts put
+ dup .xmenu.update /otheropts.update put
+ dup window.init
+ window.show
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Return width of panel entry.
+%
+% ( ) => ( width )
+%
+/panel.otheropts.width {
+ /xmenu xmenu.otheropts def
+
+ pmenu.width
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Redraw panel entry.
+%
+% ( panel ) => ( )
+%
+/panel.otheropts.update {
+ /xmenu xmenu.otheropts def
+
+ pmenu.panel.update
+} def
+
+
diff --git a/themes/openSUSE/src/dia_profile.inc b/themes/openSUSE/src/dia_profile.inc
new file mode 100644
index 0000000..64eede6
--- /dev/null
+++ b/themes/openSUSE/src/dia_profile.inc
@@ -0,0 +1,137 @@
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+%
+% Profile selection dialog.
+%
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Some global vars.
+%
+
+% fallback if we can't parse "profiles"
+/profile.options [ "" ] def
+/profile.items [ "Broken Profiles" ] def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Parse "profiles" file.
+%
+% ( ) ==> ( )
+%
+/profile.parsedata {
+ /pf.tmp.datalen profile.data length def
+ /pf.tmp.str profile.data cvs def
+
+ /profile.default 0 def
+
+ pf.tmp.datalen 0 eq { return } if
+ pf.tmp.str pf.tmp.datalen 1 sub get '\n' ne { return } if
+
+ '\n' seteotchar
+
+ /profile.items [
+
+ /pf.tmp.len 0 def
+ /pf.tmp.cnt 0 def
+ {
+ pf.tmp.str pf.tmp.len add strdup
+ dup dup length 0 put
+ /pf.tmp.len over length 1 add pf.tmp.len add def
+
+ dup 0 get '*' eq { 1 add /profile.default pf.tmp.cnt def } if
+
+ pf.tmp.len pf.tmp.datalen ge { exit } if
+
+ /pf.tmp.cnt inc
+ } loop
+
+ ] def
+
+ ' ' seteotchar
+
+ /profile.options [
+
+ profile.items {
+ dup length add
+ dup 0 0 put
+ 1 add
+ } forall
+
+ ] def
+
+ 0 seteotchar
+
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Build profile list.
+%
+% ( ) ==> ( )
+%
+/profile.init {
+ /xmenu.profile .xm_size array def
+ /xmenu xmenu.profile def
+
+ profile.parsedata
+
+ xmenu .xm_title "Profile" put
+
+ xmenu .xm_current profile.default put
+ xmenu .xm_list profile.items put
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Update profile.
+%
+% ( ) ==> ( )
+%
+/profile.update {
+ /xmenu xmenu.profile def
+
+ /window.action actRedrawPanel def
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Show profile menu.
+%
+% ( ) => ( )
+%
+/panel.profile {
+ "profile" help.setcontext
+
+ window.xmenu
+ dup .xmenu xmenu.profile put
+ dup .xmenu.update /profile.update put
+ dup window.init
+ window.show
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Return width of panel entry.
+%
+% ( ) => ( width )
+%
+/panel.profile.width {
+ /xmenu xmenu.profile def
+
+ pmenu.width
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Redraw panel entry.
+%
+% ( panel ) => ( )
+%
+/panel.profile.update {
+ /xmenu xmenu.profile def
+
+ pmenu.panel.update
+} def
+
+
diff --git a/themes/openSUSE/src/dia_restore.inc b/themes/openSUSE/src/dia_restore.inc
new file mode 100644
index 0000000..72b460e
--- /dev/null
+++ b/themes/openSUSE/src/dia_restore.inc
@@ -0,0 +1,60 @@
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+%
+% System restore entry.
+%
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Show restore popup.
+%
+% ( ) => ( )
+%
+/panel.restore {
+ restore_popup
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Return width of restore entry.
+%
+% ( ) => ( width )
+%
+/panel.restore.width {
+ "System Restore" strsize pop
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Redraw panel entry.
+%
+% ( panel ) => ( )
+%
+/panel.restore.update {
+ panel.text.moveto
+
+ "System Restore" show.rtl
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Show restore popup.
+%
+% ( ) ==> ( )
+%
+/restore_popup {
+ window.dialog
+
+ dup .title "Restore popup title" put
+ dup .text "Going to restore.\nYou're sure?" put
+ dup .buttons [
+ button.ok button.default actRestore button.setaction
+ button.cancel button.notdefault actNothing button.setaction
+ config.rtl { exch } if
+ ] put
+ dup window.init
+ window.show
+
+} def
+
+
diff --git a/themes/openSUSE/src/dia_video.inc b/themes/openSUSE/src/dia_video.inc
new file mode 100644
index 0000000..d566e33
--- /dev/null
+++ b/themes/openSUSE/src/dia_video.inc
@@ -0,0 +1,336 @@
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+%
+% Video mode selection dialog.
+%
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Some global vars.
+%
+% video mode array fields
+/.vm_mode 0 def
+/.vm_flags 1 def
+/.vm_options 2 def
+/.vm_label 3 def
+/.vm_width 4 def
+/.vm_height 5 def
+
+% .vm_flags:
+%
+% bit 0: is vbe mode
+% 1: supported display res
+%
+
+% We have kernel splash images for at least these sizes.
+/video.splashsizes [
+ 0 0 % special: for text mode
+ 1 0 % special: for VESA mode
+ 800 600
+ 1024 600
+ 1024 768
+ 1280 800
+ 1280 1024
+ 1400 1050
+ 1600 1200
+ 1680 1050
+ 1920 1200
+] def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Create sort key for video modes.
+%
+% ( vm_index ) ==> ( sort_index )
+%
+/vmsortindex {
+ video.modes.list exch get
+ dup
+ .vm_width get 16 shl
+ exch .vm_height get add
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Swap video mode entries.
+% (Helper for video mode sorting.)
+%
+% ( vm_index_1 vm_index_2 ) ==> ( )
+%
+/vmsortexch {
+ over video.modes.list exch get
+ over video.modes.list exch get
+ video.modes.list
+ 5 -1 roll rot put
+ video.modes.list 3 1 roll put
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Check if we have a splash in that resolution.
+%
+% ( video_mode_list_entry ) ==> ( true|false )
+%
+/video.havesplash {
+ false exch
+
+ 0 2 video.splashsizes length 1 sub {
+ over over over
+ .vm_height get rot .vm_width get rot video.splashsizes exch get eq
+ rot 1 add video.splashsizes exch get rot eq and
+ { exch pop true exch exit } if
+ } for
+
+ pop
+
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Check if display supports that resolution.
+%
+% ( video_mode_list_entry ) ==> ( true|false )
+%
+/video.resok {
+ false exch
+
+ 0 2 video.res length 1 sub {
+ over over over
+ .vm_height get rot .vm_width get rot video.res exch get eq
+ rot 1 add video.res exch get rot eq and
+ { exch pop true exch exit } if
+ } for
+
+ pop
+
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Build video mode list.
+%
+% ( ) ==> ( )
+%
+/video.init {
+ /xmenu.video .xm_size array def
+
+ /xmenu xmenu.video def
+
+ "ddc" findfile test1
+ /video.res [ displaysizes ] def
+
+ % build list of video modes
+ /video.modes.list [
+ [ -1 0 "textmode=1" /txt_text_mode 0 0 ] % special: text mode
+ [ -2 0 "nomodeset" "No KMS" 1 0 ] % special: no KMS (width = 1 to make it sort)
+ [ -3 0 "" "Default" 2 0 ] % special: no video options (width = 2 to make it sort)
+
+ % first, try 16 bit
+ /vm_color_bits 16 def
+
+ {
+ 0 1 videomodes {
+ videomodeinfo dup .undef eq {
+ pop pop pop pop
+ } {
+ [
+ over 0xbfff and 6 2 roll
+ 0x4000 and % fb support
+ exch vm_color_bits eq and % color bits
+ over 576 ge and % height >= 576
+ 2 index 1024 ge and % width >= 1024
+ { 1 "" "" 5 -2 roll ] } { pop pop pop pop } ifelse
+ } ifelse
+ } for
+
+ % no modes added? -> try 8 bit
+ dup .vm_mode get -2 eq vm_color_bits 8 ne and {
+ /vm_color_bits 8 def
+ } {
+ exit
+ } ifelse
+ } loop
+
+ % add display sizes
+
+ video.res length {
+ 0 2 video.res length 1 sub {
+ [
+ exch 0 2 "" "" 5 -1 roll
+ video.res over get exch video.res exch 1 add get
+ ]
+ } for
+ } if
+
+ ] def
+
+ % sort video.modes.list
+
+ video.modes.list length 3 gt {
+ 0 1 video.modes.list length 2 sub {
+ dup 1 add 1 video.modes.list length 1 sub {
+ over vmsortindex over vmsortindex gt {
+ over over vmsortexch
+ } if
+ pop
+ } for
+ pop
+ } for
+ } if
+
+ % remove duplicates
+ % (assumes text or vesa entry to be first)
+
+ /video.modes.list
+ [
+ video.modes.list {
+ dup .vm_mode get 0 ge { % ensure it's not the first entry
+ over .vm_width get over .vm_width get eq
+ 2 index .vm_height get 2 index .vm_height get eq and {
+ over .vm_mode get over .vm_mode get max 2 index .vm_mode rot put
+ over .vm_flags get over .vm_flags get or 2 index .vm_flags rot put
+ free
+ } if
+ } if
+ } forall
+ ]
+ video.modes.list free
+ def
+
+ % create mode strings & menu labels
+
+ true
+
+ video.modes.list {
+ dup .vm_flags get 3 and {
+ dup .vm_options 64 string put
+ dup .vm_label 32 string put
+
+ % add separating line before first entry
+ over {
+ dup .vm_label get "\x09" exch sprintf
+ exch pop false exch
+ } if
+
+ dup .vm_flags get 1 and {
+ dup .vm_mode get 0x200 add over .vm_options get "vga=0x%x " exch sprintf
+ } if
+
+ dup .vm_flags get 2 and {
+ dup .vm_height get over .vm_width get 2 index .vm_options get "video=%dx%d " exch dup length add sprintf
+ } if
+
+ dup .vm_flags get 2 and 0 eq {
+ dup .vm_label get "\x01" exch dup length add sprintf
+ } if
+
+ dup .vm_height get over .vm_width get 2 index .vm_label get "%d x %d" exch dup length add sprintf
+ } if
+
+ pop
+ } forall
+
+ pop
+
+ % create menu
+
+ /video.modes.text [
+ video.modes.list { .vm_label get } forall
+ ] def
+
+ % add to menu
+
+ xmenu .xm_list video.modes.text put
+ xmenu .xm_title /txt_video_mode put
+
+ % select largest mode the monitor supports
+
+ boot_failsafe 4 and { 0 0 } { monitorsize } ifelse
+ exch 1024 max exch 768 max % at least 1024x768
+
+ % ATI quirk: avoid 1280x1024, older chips (<= 8MB, max res 1280x1024) use
+ % interlaced there
+
+ video.modes.list dup length 1 sub get
+ dup .vm_width get 1280 eq exch .vm_height get 1024 eq and {
+ video.memory 0x2000 le {
+ video.oem "ATI " strstr 1 eq {
+ exch 1024 min exch 768 min % down to 1024x768
+ } if
+ } if
+ } if
+
+ % 'default' entry
+ xmenu .xm_current 2 put
+
+ -1
+ video.modes.list {
+ exch 1 add exch
+
+ dup .vm_width get 4 index le
+ exch .vm_height get 3 index le and {
+ xmenu .xm_current 2 index put
+ } if
+
+ } forall
+ pop
+
+ % FIXME: force 'default' entry
+ xmenu .xm_current 2 put
+
+ pop pop
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Update video mode.
+%
+% ( ) ==> ( )
+%
+/video.update {
+ /xmenu xmenu.video def
+
+ /window.action actRedrawPanel def
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Show video menu.
+%
+% ( ) => ( )
+%
+/panel.video {
+ "videomode" help.setcontext
+
+ window.xmenu
+ dup .xmenu xmenu.video put
+ dup .xmenu.update /video.update put
+ dup window.init
+ window.show
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Return width of video entry.
+%
+% ( ) => ( width )
+%
+/panel.video.width {
+ /xmenu xmenu.video def
+
+ pmenu.width
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Redraw panel entry.
+%
+% ( panel ) => ( )
+%
+/panel.video.update {
+ /xmenu xmenu.video def
+
+ pmenu.panel.update
+} def
+
+
diff --git a/themes/openSUSE/src/gfxboot.cfg b/themes/openSUSE/src/gfxboot.cfg
new file mode 100644
index 0000000..1fa96c3
--- /dev/null
+++ b/themes/openSUSE/src/gfxboot.cfg
@@ -0,0 +1,220 @@
+; Sections are read in the order given in base::layout, with section 'base'
+; implicitly added at the end. If a config value is given more than once,
+; the first entry wins.
+;
+; If a screen resolution can't be set, 640x480 is used as fallback (and
+; section '640x480' added to the layout list).
+;
+; If the penguin screen is active, section 'penguin' is automatically added
+; to the layout list.
+;
+; Setting livecd=1 implicitly adds section 'live' to the layout list.
+;
+; Color values: 24 bit RGB (e.g. 0xff0000 = red).
+;
+
+[base]
+; theme name
+theme=
+; product name
+product=
+; other sections to read
+layout=800x600
+; penguin theme likelihood (in percent, -1 = auto)
+penguin=-1
+; activate speech output
+talk=0
+; sound volume (0..100)
+volume=70
+; menu background transparency (0..255)
+menu.transparency=0x20
+; default font
+font.normal=16x16.fnt
+; main menu font
+font.large=16x16.fnt
+; background image
+background=back.jpg
+; max. visible main menu items
+mainmenu.entries=8
+; minimal main menu selection bar width
+mainmenu.bar.minwidth=300
+; main menu selection bar transparency (0..255)
+mainmenu.bar.transparency=150
+; main menu colors
+mainmenu.bar.color=0xffffff
+mainmenu.normal.fg=0xffffff
+mainmenu.selected.fg=0x000000
+; boot option colors
+bootopt.label.fg=0xffffff
+bootopt.text.fg=0xffffff
+; progress bar color
+progress.bar.color=0x295202
+; menu colors
+menu.normal.bg=0xd8deed
+menu.normal.fg=0x000000
+menu.normal.alt.fg=0x606060
+menu.selected.bg=0x6c6c6c
+menu.selected.fg=0xffffff
+; window colors
+window.bg=0xd8deed
+window.fg=0x000000
+window.title.bg=0x217b05
+window.title.fg=0xffffff
+window.title.error.bg=0xc00000
+; help system colors
+help.link.fg=0x0000a0
+help.link.selected.fg=0xffffff
+help.link.selected.bg=0x0000a0
+help.highlight.fg=0x009000
+; panel colors
+panel.fg=0xffffff
+panel.title.fg=0xffffff
+panel.f-key.fg=0xffe050
+; default keymap (e.g. de-latin1-nodeadkeys or cz-lat2-us)
+keymap=
+; replace underscores ('_') with space in menu entries
+_2space=1
+
+[800x600]
+; screen size
+screen.size=800,600
+; upper left corner, if x = -1, center horizontally
+mainmenu.pos=-1,170
+; boot option input field position
+bootopt.pos=263,480
+
+[640x480]
+; screen size
+screen.size=640,480
+; upper left corner, if x = -1, center horizontally
+mainmenu.pos=-1,122
+; boot option input field position
+bootopt.pos=263,380
+
+[penguin]
+; upper left corner, if x = -1, center horizontally
+mainmenu.pos=220,163
+; main menu selection bar transparency (0..255)
+mainmenu.bar.transparency=120
+; boot option input field position
+bootopt.pos=263,490
+; background image
+background=pback.jpg
+
+[install]
+; show welcome animation
+welcome=1
+; beep when menu is ready
+beep=1
+; main menu item shown only if iso is tagged for media check
+mediacheck=mediachk
+; main menu items where user can't add boot options
+nobootoptions=harddisk,memtest
+; main menu items that are not passed an 'install' parameter
+noinstallopt=harddisk,firmware,memtest
+; default install method (one of: cdrom, slp, ftp, http, nfs, smb, hd; default: cdrom)
+install=
+; default repo location
+install.http.server=
+install.http.path=
+install.nfs.server=
+install.nfs.path=
+install.ftp.server=
+install.ftp.path=
+install.ftp.user=
+install.ftp.password=
+install.smb.server=
+install.smb.share=
+install.smb.path=
+install.smb.domain=
+install.smb.user=
+install.smb.password=
+install.hd.device=
+install.hd.path=
+; default driver update (one of: yes, no, file, url; default: no)
+dud=
+; if 'dud=file': file name on DVD
+dud.file=
+; if 'dud=url': URL
+dud.url=
+; if 'dud=url': menu item name (default = 'URL')
+dud.url.name=
+; serial line setup (up to four lines)
+; format: port,baud,dev
+; - port: 0-3: first four BIOS serial lines (COM1-COM4); >=4: I/O port (0x3f8)
+; - baud: baud rate (e.g. 115200); 0 = autodetect (considers baud rates >= 9600)
+; - dev: linux device name (e.g. ttyS0)
+; - all lines are set up with 8 bits, no parity, 1 stop bit
+; - if the bootloader also has a serial line setup, the port is
+; automatically used
+serial.line0=0,0,ttyS0
+serial.line1=1,0,ttyS1
+serial.line2=
+serial.line3=
+; show keymap menu as submenu in lang dialog
+keymap.submenu=1
+; check min memory size
+memcheck=0
+; apppend *.spl to initrd
+spl=1
+; move down one menu entry the first time an F-key is used
+autodown=1
+; F-key assignments
+; value can be one of: lang, video, install, kernelopts, dud, bits, keymap,
+; profile, restore, otheropts
+; note1: 'bits' is only shown on x86_64, 'profile' only when a file 'profile'
+; exists, 'restore' only when there is a boot entry 'restore'
+; note2: F1 is always help, F9 enables speech output, F10 exits gfxboot
+key.F2=lang
+key.F3=video
+key.F4=install
+key.F5=kernelopts
+key.F6=dud
+key.F7=bits
+; add 'lang' option with current locale
+addopt.lang=1
+; add 'keytable' option with current keymap
+addopt.keytable=1
+
+
+[boot]
+; show welcome animation
+welcome=0
+; beep when menu is ready
+beep=0
+; show keymap menu as submenu in lang dialog
+keymap.submenu=0
+; system restore menu entry
+restore.title=
+; F-key assignments, see install section for doc
+key.F2=lang
+key.F3=profile
+key.F4=keymap
+key.F5=otheropts
+key.F11=restore
+; add 'lang' option with current locale
+addopt.lang=0
+; add 'keytable' option with current keymap
+addopt.keytable=0
+; init process, default: /sbin/init
+init=
+
+[live]
+; set livecd flag
+livecd=1
+; move down one menu entry the first time an F-key is used
+autodown=0
+; F-key assignments, see install section for doc
+key.F2=lang
+key.F3=video
+key.F4=kernelopts
+key.F5=
+key.F6=
+key.F7=
+key.F8=
+key.F11=
+key.F12=
+; add 'lang' option with current locale
+addopt.lang=1
+; add 'keytable' option with current keymap
+addopt.keytable=0
diff --git a/themes/openSUSE/src/help.inc b/themes/openSUSE/src/help.inc
new file mode 100644
index 0000000..8c4651c
--- /dev/null
+++ b/themes/openSUSE/src/help.inc
@@ -0,0 +1,684 @@
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+%
+% help system
+%
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+% global vars used by help system
+
+
+/help.context "main" def
+
+/help.light white def
+/help.dark black def
+/help.font font.normal def
+/help.normal.bg window.color.bg def
+/help.normal.fg window.color.fg def
+
+/help.x 80 def
+/help.y 50 def
+/help.width 480 def
+/help.height 322 def
+
+clip.size pop 800 eq {
+ /help.x 120 def
+ /help.y 90 def
+ /help.width 560 def
+ /help.height 359 def
+} if
+
+/help.text.x help.x 10 add def
+/help.text.y help.y 30 add def
+
+/help.text.width help.width 20 sub def
+/help.text.height help.height help.text.y sub help.y add 4 sub def
+/help.text.rightmargin help.text.x help.text.width add def
+
+/help.title.x help.x 10 add def
+/help.title.y help.y 3 add def
+/help.title.height 20 def
+/help.title.font font.normal def
+
+/help.hist.page 16 array def
+/help.hist.startrow help.hist.page length array def
+/help.hist.selectedlink help.hist.page length array def
+
+
+% for boot option lookup
+/bo.opt.max 32 def
+/bo.opt bo.opt.max 3 add string def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Map help context.
+%
+% ( context ) ==> ( new_context )
+%
+% Note: obsolete.
+%
+/help.mapcontext {
+ % dup "xxx" eq { pop "yyy" } if
+
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Set help context.
+%
+% ( context ) ==> ( )
+%
+/help.setcontext {
+ help.mapcontext /help.context exch def
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Find boot option the cursor is positioned at.
+%
+% ( ) ==> ( option )
+%
+/findbootoption {
+ boot.window .ed.list get boot.window .ed.focus get get
+ /bo.buf over .inp_buf get def
+ /bo.len over .inp_buf_len get def
+ /bo.pos exch .inp_int get .inp_int_cur get def
+
+ {
+ bo.pos 0 eq { exit } if
+ bo.buf bo.pos 1 sub get ' ' le { exit } if
+ /bo.pos bo.pos 1 sub def
+ } loop
+
+ /bo.buf bo.buf bo.pos add def
+
+ bo.buf 0 get ' ' le { "" return } if
+
+ % "o_" + option name is the help text label
+ "o_" bo.opt sprintf
+
+ 0 1 bo.opt.max 1 sub {
+ dup
+ bo.buf exch get
+ dup ' ' le over '=' eq or { pop pop exit } if
+ over bo.opt 2 add exch rot put
+ bo.opt 3 add exch 0 put
+ } for
+
+ bo.opt
+
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Find help page.
+%
+% returns help page or empty string if no page was found
+%
+% ( label ) ==> ( help_text )
+%
+% Shows first help page if label is not found.
+%
+/help.findpage {
+ dup length 3 add dup string
+ "\x12%s\x14"
+ 3 1 roll dup 5 1 roll snprintf
+ help.getmessages over strstr
+ dup { 2 sub } if 1 add
+ help.getmessages add
+ exch free
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Find help page.
+%
+% returns n-th help page or empty string if no page was found
+%
+% ( n ) ==> ( help_text )
+%
+/help.findpagebyindex {
+ help.getmessages exch
+ {
+ dup "\x04" strstr
+ dup { add } { pop pop "" exit } ifelse
+ } repeat
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Init & display help page.
+%
+% ( help_text start_row selected_link ) ==> ( )
+%
+/help.initpage {
+ /help.selectedlink exch def
+ /help.startrow exch def
+
+ /help.currenttext over def
+
+ window.title.bg setcolor
+ help.x 1 add help.y 1 add moveto
+ help.width 2 sub help.title.height 1 sub fillrect
+
+ help.text.x help.text.y moveto
+ currentmaxrows 0 setmaxrows exch formattext setmaxrows
+
+ white setcolor
+ currenteotchar 16 seteotchar
+ help.title.x help.title.y moveto currenttitle
+ currentfont help.title.font setfont exch show setfont
+ seteotchar
+
+ getlinks { help.selectedlink setlink } if
+
+ help.updatepage
+
+ % 500 0 moveto gettextrows print
+ % 400 0 moveto getlinks print
+
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Redraw help page.
+%
+% ( ) ==> ( )
+%
+/help.updatepage {
+ help.normal.bg setcolor
+ help.text.x help.text.y moveto
+ help.text.width help.text.height fillrect
+
+ help.normal.fg help.highlight.fg help.link.fg help.link.selected.fg settextcolors
+
+ help.startrow setstartrow
+
+ help.text.x help.text.y moveto
+ help.currenttext show
+
+ 0 setstartrow
+
+ true help.selectedlink help.redrawlink
+
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Used to iterate over all help pages (for debugging).
+%
+% get the n-th page starting from current pos
+%
+% ( n ) ==> ( help_text )
+%
+/help.test {
+ help.test.cnt add
+ dup 1 lt { pop 1 } if
+ /help.test.cnt over def
+ help.findpagebyindex
+ dup "" eq {
+ % one page back
+ pop help.test.cnt 1 sub /help.test.cnt over def
+ help.findpagebyindex
+ } if
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Redraw link.
+%
+% selected: true or false.
+%
+% ( selected n ) ==> ( )
+%
+%
+/help.redrawlink {
+ getlinks 0 eq { pop pop return } if
+ getlink
+ dup help.startrow lt
+ over help.startrow help.text.rows add ge or {
+ 5 { pop } repeat return
+ } if
+ help.startrow sub lineheight mul help.text.y add
+ moveto
+ rot
+
+ 16 seteotchar
+
+ {
+ currenttextcolors 4 1 roll pop pop pop
+ help.link.selected.bg
+ } {
+ currenttextcolors 4 2 roll pop pop pop
+ help.normal.bg
+ } ifelse
+
+ setcolor over currentpoint rot strsize fillrect moveto
+
+ setcolor show
+
+ 4 seteotchar
+
+ pop
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Select n-th link.
+%
+% ( n ) ==> ( )
+%
+/help.selectlink {
+ help.selectedlink over eq {
+ pop
+ } {
+ % deselect old link
+ false help.selectedlink help.redrawlink
+
+ /help.selectedlink over dup setlink def
+
+ % select link
+ true exch help.redrawlink
+ } ifelse
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Select first visible link.
+%
+% No screen update if 'update' is false.
+%
+% ( update ) ==> ( )
+%
+/help.sel.firstlink {
+ getlinks {
+ 0 1 getlinks 1 sub {
+ dup
+ getlink 4 1 roll pop pop pop
+ dup help.startrow help.text.rows add ge {
+ pop pop exit
+ } if
+ dup help.startrow ge {
+ pop
+ over { help.selectlink } { /help.selectedlink exch dup setlink def } ifelse
+ exit
+ } if
+ pop pop
+ } for
+ } if
+ pop
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Select last visible link.
+%
+% No screen update if 'update' is false.
+%
+% ( update ) ==> ( )
+%
+/help.sel.lastlink {
+ getlinks {
+ getlinks 1 sub -1 0 {
+ dup
+ getlink 4 1 roll pop pop pop
+ dup help.startrow lt {
+ pop pop exit
+ } if
+ dup help.startrow help.text.rows add lt {
+ pop
+ over { help.selectlink } { /help.selectedlink exch dup setlink def } ifelse
+ exit
+ } if
+ pop pop
+ } for
+ } if
+ pop
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Push current help context to history.
+%
+% ( ) ==> ( )
+%
+/help.add2history {
+ help.hist.index help.hist.page length lt {
+ help.hist.page help.hist.index help.currenttext put
+ help.hist.startrow help.hist.index help.startrow put
+ help.hist.selectedlink help.hist.index help.selectedlink put
+ /help.hist.index help.hist.index 1 add def
+ } if
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Follow currently selected link.
+%
+% ( ) ==> ( )
+%
+/help.followlink {
+ getlinks {
+ help.selectedlink getlink pop pop pop
+ help.add2history
+ help.findpage
+ dup "" eq {
+ pop
+ } {
+ 0 0 help.initpage
+ } ifelse
+ } if
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Go back to previous page.
+%
+% ( ) ==> ( )
+%
+/help.prevlink {
+ help.hist.index 0 gt {
+ /help.hist.index help.hist.index 1 sub def
+ help.hist.page help.hist.index get
+ help.hist.startrow help.hist.index get
+ help.hist.selectedlink help.hist.index get
+ help.initpage
+ } if
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Scroll a page down.
+%
+% ( ) ==> ( )
+%
+/help.key.pagedown {
+ help.startrow
+ gettextrows help.text.rows gt {
+ pop
+ gettextrows help.text.rows sub
+ help.startrow help.text.rows add
+ min
+ } if
+
+ dup help.startrow eq {
+ pop
+ true help.sel.lastlink
+ } {
+ /help.startrow exch def
+ false help.sel.firstlink
+ help.updatepage
+ } ifelse
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Scroll a page up.
+%
+% ( ) ==> ( )
+%
+/help.key.pageup {
+ help.startrow
+ gettextrows help.text.rows gt {
+ pop
+ 0
+ help.startrow help.text.rows sub
+ max
+ } if
+
+ dup help.startrow eq {
+ pop
+ true help.sel.firstlink
+ } {
+ /help.startrow exch def
+ false help.sel.firstlink
+ help.updatepage
+ } ifelse
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Go to page start.
+%
+% ( ) ==> ( )
+%
+/help.key.home {
+ help.startrow 0 eq {
+ true help.sel.firstlink
+ } {
+ /help.startrow 0 def
+ false help.sel.firstlink
+ help.updatepage
+ } ifelse
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Go to page end.
+%
+% ( ) ==> ( )
+%
+/help.key.end {
+ gettextrows help.text.rows sub 0 max
+ dup help.startrow eq {
+ pop
+ true help.sel.lastlink
+ } {
+ /help.startrow exch def
+ false help.sel.lastlink
+ help.updatepage
+ } ifelse
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Next link or scroll down.
+%
+% ( ) ==> ( )
+%
+/help.key.down {
+ help.selectedlink getlinks 1 sub lt {
+ help.selectedlink 1 add getlink 4 1 roll pop pop pop
+ dup help.startrow help.text.rows add lt {
+ % link visible
+ pop help.selectedlink 1 add help.selectlink
+ return
+ } {
+ help.startrow help.text.rows add eq {
+ % link visible after scrolling down
+ /help.selectedlink help.selectedlink 1 add dup setlink def
+ } if
+ } ifelse
+ } if
+
+ % scroll down
+
+ help.startrow help.text.rows add gettextrows lt {
+ /help.startrow help.startrow 1 add def
+ help.updatepage
+ } if
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Previous link or scroll up.
+%
+% ( ) ==> ( )
+%
+/help.key.up {
+ help.selectedlink 0 gt {
+ help.selectedlink 1 sub getlink 4 1 roll pop pop pop
+ % row
+ dup help.startrow ge {
+ % link visible
+ pop help.selectedlink 1 sub help.selectlink
+ return
+ } {
+ help.startrow 1 sub eq {
+ % link visible after scrolling up
+ /help.selectedlink help.selectedlink 1 sub dup setlink def
+ } if
+ } ifelse
+ } if
+
+ % scroll up
+
+ help.startrow 0 gt {
+ /help.startrow help.startrow 1 sub def
+ help.updatepage
+ } if
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Handle keyboard input.
+%
+% ( key_in ) ==> ( key_out )
+%
+/help.input {
+ dup 0 eq { return } if
+
+ dup keyEsc eq { /window.action actNothing def window.done } if
+ dup keyCtrlDown eq { 1 help.test 0 0 help.initpage } if
+ dup keyCtrlUp eq { -1 help.test 0 0 help.initpage } if
+ dup keyDown eq { help.key.down } if
+ dup keyUp eq { help.key.up } if
+ dup keyPgDown eq { help.key.pagedown } if
+ dup keyPgUp eq { help.key.pageup } if
+ dup keyHome eq { help.key.home } if
+ dup keyEnd eq { help.key.end } if
+ dup keyRight eq { help.followlink } if
+ dup keyEnter eq { help.followlink } if
+ dup 0xff and ' ' eq { help.followlink } if
+ dup keyLeft eq { help.prevlink } if
+ dup 0xff and '\x08' eq { help.prevlink } if
+ dup keyF1 eq {
+ "help" help.findpage
+ dup help.currenttext eq {
+ pop
+ } {
+ help.add2history
+ 0 0 help.initpage
+ } ifelse
+ } if
+% dup keyF9 eq {
+% /help.font help.font 8 add 10 mod def help.reinit
+% help.currenttext help.startrow help.selectedlink help.initpage
+% } if
+ pop 0
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Recalculate some sizes and redraw help screen.
+%
+% ( ) ==> ( )
+%
+/help.reinit {
+ help.normal.bg setcolor
+ help.x help.y moveto
+ help.width help.height fillrect
+
+ help.x 1 add help.y 1 add help.title.height add moveto
+ help.dark help.light
+ help.width 2 sub help.height 2 sub help.title.height sub
+ drawborder
+
+ help.font setfont
+
+ /help.text.rows help.text.height lineheight div def
+ help.text.rows setmaxrows
+
+ help.text.rightmargin settextwrap
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Initialize help window.
+%
+% ( window ) ==> ( )
+%
+/help.init {
+ /help.tmp exch def
+
+ help.x 1 sub help.y 1 sub moveto
+ help.light help.dark
+ help.width 2 add help.height 2 add
+ over over
+ savescreen
+ help.tmp .saved rot put
+ drawborder
+
+ help.reinit
+
+ 4 seteotchar
+
+ /help.hist.index 0 def
+
+ /help.test.cnt 1 def
+
+ help.context help.findpage 0 0 help.initpage
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Draw help window.
+%
+% ( window ) ==> ( )
+%
+/help.show {
+ window.push
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Close current help window.
+%
+% ( ) ==> ( )
+%
+/help.done {
+ 0 settextwrap
+ 0 seteotchar
+ 0 setmaxrows
+} def
+
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Create new help window.
+%
+% ( ) ==> ( window )
+%
+/window.help {
+ widget.size array
+ dup .type t_help put
+
+ dup .x help.x put
+ dup .y help.y put
+
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Find help texts.
+%
+% ( ) ==> ( start_of_help_messages )
+%
+% Note: must always return something (fake a message if necessary).
+%
+/help.getmessages {
+
+ help.messages .undef eq {
+ % load help texts
+ /help.messages
+ config.lang "%s.hlp" locale.findfile
+ dup .undef eq { pop "en_US" "%s.hlp" locale.findfile } if
+ dup .undef eq { pop "\x04\x12\x14No Help Texts\x10Sorry, no help texts found." } if
+ cvs
+ def
+ } if
+
+ help.messages
+
+} def
+
+
diff --git a/themes/openSUSE/src/keytables.inc b/themes/openSUSE/src/keytables.inc
new file mode 100644
index 0000000..ac19bd6
--- /dev/null
+++ b/themes/openSUSE/src/keytables.inc
@@ -0,0 +1,99 @@
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+%
+% Keyboard mappings.
+%
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+
+% keymap layout (diff to us map):
+%
+% key_code, plain, shift, altgr
+%
+
+/.km.name 0 def
+/.km.id 1 def
+/.km.map 2 def
+
+%% include ../keymaps/keymap.Pl02.inc
+%% include ../keymaps/keymap.be-latin1.inc
+%% include ../keymaps/keymap.br-abnt2.inc
+%% include ../keymaps/keymap.cf.inc
+%% include ../keymaps/keymap.cn-latin1.inc
+%% include ../keymaps/keymap.croat.inc
+%% include ../keymaps/keymap.cz-lat2-us.inc
+%% include ../keymaps/keymap.cz-us-qwertz.inc
+%% include ../keymaps/keymap.de-latin1-nodeadkeys.inc
+%% include ../keymaps/keymap.dk.inc
+%% include ../keymaps/keymap.dvorak.inc
+%% include ../keymaps/keymap.es.inc
+%% include ../keymaps/keymap.et.inc
+%% include ../keymaps/keymap.fi-latin1.inc
+%% include ../keymaps/keymap.fr-latin1.inc
+%% include ../keymaps/keymap.fr_CH-latin1.inc
+%% include ../keymaps/keymap.gr.inc
+%% include ../keymaps/keymap.hu.inc
+%% include ../keymaps/keymap.is-latin1.inc
+%% include ../keymaps/keymap.it.inc
+%% include ../keymaps/keymap.jp106.inc
+%% include ../keymaps/keymap.la-latin1.inc
+%% include ../keymaps/keymap.lt.baltic.inc
+%% include ../keymaps/keymap.nl.inc
+%% include ../keymaps/keymap.no-latin1.inc
+%% include ../keymaps/keymap.pt-latin1.inc
+%% include ../keymaps/keymap.ruwin_alt-UTF-8.inc
+%% include ../keymaps/keymap.sg-latin1.inc
+%% include ../keymaps/keymap.sk-qwerty.inc
+%% include ../keymaps/keymap.sk-qwertz.inc
+%% include ../keymaps/keymap.slovene.inc
+%% include ../keymaps/keymap.sr-cy.inc
+%% include ../keymaps/keymap.sv-latin1.inc
+%% include ../keymaps/keymap.tj.inc
+%% include ../keymaps/keymap.trq.inc
+%% include ../keymaps/keymap.ua.inc
+%% include ../keymaps/keymap.uk.inc
+
+% array must not be empty
+/keymaps [
+ [ "Arabic" "arabic" .undef ]
+ [ "Belgian" "be-latin1" keymap.be-latin1 ]
+ [ "Canadian (Multilingual)" "cn-latin1" keymap.cn-latin1 ]
+ [ "Croatian" "croat" keymap.croat ]
+ [ "Czech" "cz-us-qwertz" keymap.cz-us-qwertz ]
+ [ "Czech (qwerty)" "cz-lat2-us" keymap.cz-lat2-us ]
+ [ "Danish" "dk" keymap.dk ]
+ [ "Dutch" "nl" keymap.nl ]
+ [ "Dvorak" "dvorak" keymap.dvorak ]
+ [ "English (UK)" "uk" keymap.uk ]
+ [ "English (US)" "us" .undef ]
+ [ "Estonian" "et" keymap.et ]
+ [ "Finnish" "fi-latin1" keymap.fi-latin1 ]
+ [ "French" "fr-latin1" keymap.fr-latin1 ]
+ [ "French (Canada)" "cf" keymap.cf ]
+ [ "French (Switzerland)" "fr_CH-latin1" keymap.fr_CH-latin1 ]
+ [ "German" "de-latin1-nodeadkeys" keymap.de-latin1-nodeadkeys ]
+ [ "German (Switzerland)" "sg-latin1" keymap.sg-latin1 ]
+ [ "Greek" "gr" keymap.gr ]
+ [ "Hungarian" "hu" keymap.hu ]
+ [ "Icelandic" "is-latin1" keymap.is-latin1 ]
+ [ "Italian" "it" keymap.it ]
+ [ "Japanese" "jp106" keymap.jp106 ]
+ [ "Khmer" "khmer" .undef ]
+ [ "Korean" "korean" .undef ]
+ [ "Lithuanian" "lt.baltic" keymap.lt.baltic ]
+ [ "Norwegian" "no-latin1" keymap.no-latin1 ]
+ [ "Polish" "Pl02" keymap.Pl02 ]
+ [ "Portuguese" "pt-latin1" keymap.pt-latin1 ]
+ [ "Portuguese (Brazil)" "br-abnt2" keymap.br-abnt2 ]
+ [ "Russian" "ruwin_alt-UTF-8" keymap.ruwin_alt-UTF-8 ]
+ [ "Serbian" "sr-cy" keymap.sr-cy ]
+ [ "Slovak" "sk-qwertz" keymap.sk-qwertz ]
+ [ "Slovak (qwerty)" "sk-qwerty" keymap.sk-qwerty ]
+ [ "Slovene" "slovene" keymap.slovene ]
+ [ "Spanish" "es" keymap.es ]
+ [ "Spanish (Latin America)" "la-latin1" keymap.la-latin1 ]
+ [ "Swedish" "sv-latin1" keymap.sv-latin1 ]
+ [ "Tajik" "tj" keymap.tj ]
+ [ "Turkish" "trq" keymap.trq ]
+ [ "Ukrainian" "ua" keymap.ua ]
+] def
+
diff --git a/themes/openSUSE/src/locale.inc b/themes/openSUSE/src/locale.inc
new file mode 100644
index 0000000..4cb8e49
--- /dev/null
+++ b/themes/openSUSE/src/locale.inc
@@ -0,0 +1,310 @@
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+%
+% Handle translations.
+%
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Set language.
+%
+% ( locale ) ==> ( true|false )
+%
+/setlang {
+ config.lang over eq { pop false return } if
+
+ /config.lang exch def
+
+ /config.rtl config.lang lang.getrtl def
+
+ % clear old help texts
+ /help.messages xfree
+
+ translation.texts {
+ translation.texts dup { free } forall free
+ /translation.texts .undef def
+ } if
+
+ findtexts
+
+ locale.texts.en .undef eq {
+ /locale.texts.en "en_US" "%s.tr" loadtexts def
+ } if
+
+ /config.lang.changed true def
+
+ true
+} def
+
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Set keyboard map.
+%
+% ( keymap|locale ) ==> ( )
+%
+% keymap may be .undef.
+%
+/setkeymap {
+ /keymap.tmp exch def
+
+ config.keymap.id keymap.tmp eq { return } if
+
+ /config.keymap .undef def
+ /config.keymap.id .undef def
+
+ 2 {
+ keymap.tmp .undef eq { exit } if
+
+ keymaps {
+ dup .km.id get keymap.tmp eq {
+ dup .km.map get /config.keymap exch def
+ .km.id get /config.keymap.id exch def
+ } { pop } ifelse
+ } forall
+
+ config.keymap.id .undef ne { exit } if
+
+ % 2nd run: try to look it up in language list
+ /keymap.tmp keymap.tmp getkeymapfromlocale def
+ } repeat
+
+ config.keymap.id .undef eq { /config.keymap.id "us" def } if
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Look up keymap in languale locale list.
+%
+% ( locale ) ==> ( keymap )
+%
+% Returns .undef if locale was not found.
+%
+/getkeymapfromlocale {
+ /kbd.tmp exch def
+ /kbd.tmp.locale .undef def
+
+ lang.defaultnames {
+ dup .la.locale get kbd.tmp eq { .la.keymap get /kbd.tmp.locale exch def exit } { pop } ifelse
+ } forall
+
+ kbd.tmp.locale .undef eq {
+ lang.defaultnames {
+ dup .la.locale get kbd.tmp locale.cmp { .la.keymap get /kbd.tmp.locale exch def exit } { pop } ifelse
+ } forall
+ } if
+
+ kbd.tmp.locale
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Set texts for current language.
+%
+% ( ) ==> ( )
+%
+/findtexts {
+ /locale.texts afree
+ /locale.texts config.lang "%s.tr" loadtexts def
+
+ 0 texts {
+ over locale.texts exch aget dup .undef eq { pop "No Texts!" } if def
+ 1 add
+ } forall
+ pop
+
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Load texts for current language.
+%
+% ( str1 str2 -- array1 )
+%
+% str1: locale
+% str2: file name template (like "foo.%s")
+% array1: array with texts (empty if no file was found)
+%
+/loadtexts {
+ locale.findfile
+ dup .undef eq { pop "en_US" "%s.tr" locale.findfile } if
+ dup .undef eq { pop [ ] return } if
+
+ /ft.len over length def
+ /ft.str over cvs def
+ /ft.pos 0 def
+
+ [
+ {
+ ft.pos ft.str length add ft.len lt {
+ ft.str strdup
+ /ft.str ft.str dup length 1 add /ft.pos over ft.pos add def add def
+ } {
+ exit
+ } ifelse
+ } loop
+ ]
+
+ exch free
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Translate menu entry.
+%
+% ( text ) ==> ( text )
+%
+/translate {
+ translations.init
+
+ translation.texts length 2 lt { return } if
+
+ 0 2 translation.texts length -2 and 1 sub {
+ translation.texts over get 2 index eq {
+ 1 add translation.texts exch get exch pop exit
+ } { pop } ifelse
+ } for
+
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Read menu translations.
+%
+% ( ) ==> ( )
+%
+/translations.init {
+ translation.texts { return } if
+
+ /translation.texts [ ] def
+
+ config.lang .undef eq { return } if
+
+ config.lang "translations.%s" locale.findfile dup {
+
+ /la.tmp.datalen over length def
+ /la.tmp.str exch cvs def
+
+ la.tmp.datalen 0 eq { return } if
+ la.tmp.str la.tmp.datalen 1 sub get '\n' ne { return } if
+
+ '\n' seteotchar
+
+ /translation.texts [
+
+ /la.tmp.len 0 def
+
+ {
+ la.tmp.str la.tmp.len add strdup
+ dup dup length 0 put
+ /la.tmp.len over length 1 add la.tmp.len add def
+
+ la.tmp.len la.tmp.datalen ge { exit } if
+
+ } loop
+
+ ] def
+
+ 0 seteotchar
+ } { pop } ifelse
+
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Read locale-specific file.
+%
+% ( str1 str2 -- ptr1 )
+%
+% str1: locale
+% str2: file name template (like "foo.%s")
+% ptr1: buffer with file data (or .undef)
+%
+/locale.findfile {
+ over length over length add string
+
+ rot strdup rot
+
+ over over 4 index sprintf 2 index findfile
+
+ dup .undef eq {
+ pop
+ exch
+ dup "_" strstr dup {
+ 1 sub
+ over exch 0 put
+ exch
+ over over 4 index sprintf 2 index findfile
+ } {
+ pop exch .undef
+ } ifelse
+ } if
+
+ exch pop exch free exch free
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Compare two locale names.
+%
+% ( str1 str2 -- int1 )
+%
+% str1: locale1
+% str2: locale2
+% int1: 0 = no match, 1 = loose match, 2 = identical
+%
+/locale.cmp {
+ over over eq { pop pop 2 return } if
+
+ currenteotchar '_' seteotchar
+
+ rot strdup rot strdup
+
+ over over eq rot free exch free
+
+ exch seteotchar
+
+ { 1 } { 0 } ifelse
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Translate english text.
+%
+% ( str1 -- str2 )
+%
+% str1: text in en_US
+% str2: text
+%
+/_ {
+ 0 locale.texts.en {
+ 2 index eq {
+ locale.texts exch aget dup .undef eq { pop dup } if exch pop
+ return
+ } if
+ 1 add
+ } forall
+ pop
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Get english text from translated text.
+%
+% ( str1 -- str2 )
+%
+% str1: text
+% str2: text in en_US
+%
+/__ {
+ 0 locale.texts {
+ 2 index eq {
+ locale.texts.en exch aget dup .undef eq { pop dup } if exch pop
+ return
+ } if
+ 1 add
+ } forall
+ pop
+} def
+
+
diff --git a/themes/openSUSE/src/main.bc b/themes/openSUSE/src/main.bc
new file mode 100644
index 0000000..e1698b9
--- /dev/null
+++ b/themes/openSUSE/src/main.bc
@@ -0,0 +1,33 @@
+%% include system.inc
+%% include bsplash.inc
+
+%% include timeout.inc
+%% include common.inc
+%% include serial.inc
+
+%% include ../po/text.inc
+%% include window.inc
+%% include button.inc
+%% include help.inc
+%% include menu.inc
+%% include xmenu.inc
+%% include dia_video.inc
+%% include dia_lang.inc
+%% include dia_dud.inc
+%% include dia_help.inc
+%% include dia_profile.inc
+%% include dia_install.inc
+%% include dia_bits.inc
+%% include dia_about.inc
+%% include dia_kernelopts.inc
+%% include dia_keymap.inc
+%% include dia_restore.inc
+%% include dia_net.inc
+%% include dia_otheropts.inc
+%% include panel.inc
+%% include keytables.inc
+%% include locale.inc
+%% include speech.inc
+
+%% include penguin.inc
+
diff --git a/themes/openSUSE/src/menu.inc b/themes/openSUSE/src/menu.inc
new file mode 100644
index 0000000..add7612
--- /dev/null
+++ b/themes/openSUSE/src/menu.inc
@@ -0,0 +1,494 @@
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+%
+% Main menu (boot entry + boot options + panel).
+%
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+% max number of boot option input fields
+/boot.ed.max 2 def
+
+% boot option input line separator
+/boot.splitchar 1 def
+/boot.splitstr 1 string dup 0 boot.splitchar put def
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Create new main window.
+%
+% ( ) ==> ( window )
+%
+/window.main {
+ widget.size array
+ dup .type t_main put
+ dup .font font.normal put
+ dup .ed.font font.normal put
+ dup .color.fg boot.text.normal put
+
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Initialize main window.
+%
+% ( window ) ==> ( )
+%
+/main.init {
+ pop
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Redraw main window.
+% (E.g. after selecting a new language.)
+%
+% ( window ) ==> ( )
+%
+/main.redraw {
+
+ % boot.drawlabels
+
+ main.drawmenu
+ /keepbootoptions 1 def
+ menu.entry true MenuSelect
+ /keepbootoptions .undef def
+
+ panel.show
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Draw boot option input field labels.
+%
+% ( ) == > ( )
+%
+/boot.drawlabels {
+ boot.show not { return } if
+
+ boot.text.options setcolor
+ window.current .font get setfont
+ boot.ed.list {
+ dup .inp_x get 10 sub over .inp_y get moveto
+ currentpoint
+ currentpoint 0 exch moveto
+ currentpoint rot 1 add fontheight image
+ moveto
+ dup .inp_show get {
+ .inp_label get exec showright
+ } { pop } ifelse
+ } forall
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Setup boot option input field.
+%
+% ( ) == > ( )
+%
+/boot.input.setup {
+ % boot.show not { return } if
+
+ boot.ed.list {
+ dup .inp_x get over .inp_y get boot.ed.height add moveto
+
+ currentpoint boot.ed.width 2 image
+
+ currentcolor
+ currenttransparency
+
+ white setcolor
+ 0xe0 settransparency
+
+ 2 index .inp_show get {
+ boot.ed.width 2 fillrect
+ } if
+
+ settransparency
+ setcolor
+
+ pop
+
+ } forall
+} def
+
+
+/boot.input.preinit {
+
+ boot.ed.list { dup .inp_show false put .inp_buf get 0 0 put } forall
+
+ menu.args menu.entry get boot.splitchar split
+
+ 0 1 boot.ed.list length 1 sub {
+ over over aget dup .undef ne {
+ boot.ed.list rot get dup .inp_show true put .inp_buf get exch strcpy pop
+ } {
+ pop pop exit
+ } ifelse
+ } for
+
+ free
+
+ config.nobootoptions menu.texts menu.entry get iselement {
+ boot.ed.list 0 get .inp_show false put
+ } if
+
+ boot.ed.list { splitcmdline } forall
+
+} def
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Activate boot option input field.
+%
+% ( ) == > ( )
+%
+/bootoptions.init {
+ window.current .color.fg get setcolor
+ window.current .ed.font get setfont
+
+ boot.ed.list boot.window .ed.focus get get edit.hidecursor
+
+ boot.window .ed.focus 0 put
+
+ boot.show {
+ boot.ed.list {
+ dup .inp_show get {
+ dup
+ dup dup .inp_buf get exch over edit.init
+ "" ne { ' ' edit.input } { pop } ifelse
+ edit.hidecursor
+ } {
+ edit.done
+ } ifelse
+ } forall
+ boot.ed.list boot.window .ed.focus get get dup .inp_show get { edit.showcursor } { pop } ifelse
+
+ boot.ed.list {
+ dup .inp_show get .inp_visible exch put
+ } forall
+
+ } if
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Redraw boot option input field.
+%
+% ( ) == > ( )
+%
+/bootoptions.redraw {
+
+ % clear old options
+
+ boot.text.options setcolor
+ window.current .font get setfont
+ boot.ed.list {
+ dup .inp_x get 10 sub over .inp_y get moveto
+ currentpoint
+ currentpoint 0 exch moveto
+ currentpoint rot 1 add fontheight image
+ moveto
+ dup .inp_show get {
+ .inp_label get exec showright
+ } { pop } ifelse
+ } forall
+
+ boot.drawlabels
+ boot.input.setup
+
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Draw boot menu.
+%
+% No entry is marked as selected.
+%
+% ( ) == > ( )
+%
+/main.drawmenu {
+ menu.text.normal setcolor
+
+ /menu.bar.width.old menu.bar.width def
+
+ /menu.bar.width
+ menu.bar.min.width
+ % also leave space for timeout indicator (+24)
+ menu.texts { menuitemmap strsize pop menu.text.xofs 2 mul add 2 add 24 add max } forall
+ def
+
+ % center menu
+ menu.start.x -1 eq {
+ /menu.start.x clip.size pop menu.bar.width sub 2 div 0 max def
+ } if
+
+ /x menu.start.x def
+ /y menu.start.y def
+
+ 0 1 menu.visible.entries 1 sub {
+ x y moveto currentpoint menu.bar.width.old menu.bar.height image
+ x config.rtl { menu.bar.width menu.text.xofs sub } { menu.text.xofs } ifelse add
+ y menu.text.yofs add moveto
+ menu.texts exch menu.shift add get menuitemmap
+ currentfont exch font.large setfont show.rtl setfont
+ /y y menu.item.height add def
+ } for
+
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Select/deselect menu entry.
+%
+% If an entry is selected (status = true), the boot options input field is
+% initialized.
+%
+% ( entry status ) ==> ( )
+%
+% status:
+% false not selected
+% true selected
+%
+% Note: menu.bar.width must be valid even if status = false.
+%
+/MenuSelect {
+ /menu.status exch def
+
+ /menu.idx over def
+
+ menu.shift sub
+ menu.item.height mul menu.start.y add
+ menu.start.x exch
+ moveto
+
+ currentpoint
+ menu.status {
+ menu.bar.color setcolor
+ currenttransparency
+ menu.bar.transparency settransparency
+ menu.bar.width menu.bar.height
+ fillrect
+ settransparency
+ } {
+ currentpoint menu.bar.width menu.bar.height image
+ } ifelse
+ moveto
+
+ config.rtl { menu.bar.width menu.text.xofs sub } { menu.text.xofs } ifelse
+ menu.text.yofs rmoveto
+ menu.status {
+ menu.text.select
+ } {
+ menu.text.normal
+ } ifelse
+ setcolor
+ menu.texts menu.idx get menuitemmap
+ menu.status { config.talk { dup speak } if } if
+ currentfont exch font.large setfont show.rtl setfont
+
+ menu.status {
+ % init boot options
+ keepbootoptions .undef eq {
+
+ boot.input.preinit
+
+ false
+ boot.ed.list {
+ dup .inp_show get exch .inp_visible get xor or
+ } forall
+ {
+ boot.input.setup
+ boot.drawlabels
+ } if
+
+ bootoptions.init
+ } {
+ bootoptions.redraw
+ } ifelse
+
+ % set help context
+ "main" help.setcontext
+ menu.texts menu.idx get
+ dup help.findpage "" eq {
+ pop
+ } {
+ help.setcontext
+ } ifelse
+ } if
+
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Draw main window.
+%
+% ( window ) ==> ( )
+%
+/main.show {
+ window.push
+
+ /menu.shift 0 def
+ /menu.visible.entries menu.texts length menu.max.entries min def
+
+ % get index of default entry
+ /menu.entry 0 def
+ 0 1 menu.texts length 1 sub {
+ dup menu.texts exch get menu.dentry eq { /menu.entry exch def exit } { pop } ifelse
+ } for
+
+ menu.entry menu.visible.entries sub 0 ge {
+ /menu.shift menu.entry menu.texts length menu.visible.entries sub min def
+ } if
+
+ boot.text.options setcolor
+
+ window.current .font get setfont
+
+ /boot.ed.width screen.size pop boot.pos.x boot.pos.y pop sub ptheme { 60 } { 20 } ifelse sub def
+ /boot.ed.height fontheight 2 add def
+
+ /boot.window window.current def
+
+ /boot.ed.list [
+ 0 1 boot.ed.max 1 sub {
+ [
+ boot.pos.x boot.pos.y exch 10 add exch 1 sub 4 -1 roll boot.ed.height 5 add mul add
+ over over moveto boot.ed.width boot.ed.height savescreen
+ cmdlinelength string
+ cmdlinelength
+ .undef
+ cmdlinelength string
+ "More Options"
+ false
+ false
+ ]
+ } for
+ ] def
+
+ boot.ed.list 0 get .inp_label /txt_bootoptions put
+
+ boot.window .ed.list boot.ed.list put
+ boot.window .ed.focus 0 put
+
+ main.drawmenu
+
+ boot.drawlabels
+
+ menu.entry true MenuSelect
+
+ % find default splash mode
+ % 0 1 splash.options length 1 sub {
+ % splash.options over get menu.args menu.entry get exch strstr {
+ % /splash.default exch def
+ % } {
+ % pop
+ % } ifelse
+ % } for
+
+ panel.init
+
+ "main" help.setcontext
+
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Split command line into hidden and normal part.
+%
+% ( edit_object ) == > ( )
+%
+/splitcmdline {
+ dup length .inp_hidden le { pop return } if
+ dup .inp_hidden get .undef eq { pop return } if
+
+ dup .inp_hidden get over .inp_buf get strcpy pop
+
+ dup .inp_hidden get "showopts" bootopt.find dup {
+ dup "showopts" length add skipspaces
+ 2 index .inp_buf get exch strcpy dropspaces
+ 0 0 put
+ .inp_hidden get dropspaces
+ } {
+ pop dup .inp_hidden get 0 0 put
+ .inp_buf get dropspaces
+ } ifelse
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Handle keyboard input.
+%
+% ( key_in ) ==> ( key_out )
+%
+/main.input {
+ dup 0 eq { return } if
+
+ % handle panel entries
+ panel.input
+
+ dup keyF10 eq {
+ power_off
+ pop 0
+ } if
+
+ dup keyEsc eq { exit_popup pop 0 } if
+
+ dup keyEnter eq {
+ /window.action actStart def
+ pop 0
+ } if
+
+ dup keyUp eq {
+ menu.entry 0 gt {
+ menu.entry false MenuSelect
+ menu.entry menu.shift eq {
+ /menu.shift menu.shift 1 sub def main.drawmenu
+ } if
+ /menu.entry menu.entry 1 sub def
+ menu.entry true MenuSelect
+ } if
+ pop 0
+ } if
+
+ dup keyDown eq {
+ menu.entry menu.texts length 1 sub lt {
+ menu.entry false MenuSelect
+ menu.visible.entries menu.entry menu.shift sub sub 1 eq {
+ /menu.shift menu.shift 1 add def main.drawmenu
+ } if
+ /menu.entry menu.entry 1 add def
+ menu.entry true MenuSelect
+ } if
+ pop 0
+ } if
+
+ dup keyPgUp eq {
+ menu.entry 0 gt {
+ menu.entry false MenuSelect
+ /menu.entry 0 def
+ menu.shift 0 ne {
+ /menu.shift 0 def main.drawmenu
+ } if
+ menu.entry true MenuSelect
+ } if
+ pop 0
+ } if
+
+ dup keyPgDown eq {
+ menu.entry menu.texts length 1 sub lt {
+ menu.entry false MenuSelect
+ /menu.entry menu.texts length 1 sub def
+ menu.texts length menu.visible.entries sub dup menu.shift ne {
+ /menu.shift exch def main.drawmenu
+ } {
+ pop
+ } ifelse
+ menu.entry true MenuSelect
+ } if
+ pop 0
+ } if
+
+ dup 0 ne {
+ "opt" help.setcontext
+ } if
+
+} def
+
+
diff --git a/themes/openSUSE/src/panel.inc b/themes/openSUSE/src/panel.inc
new file mode 100644
index 0000000..9a611b3
--- /dev/null
+++ b/themes/openSUSE/src/panel.inc
@@ -0,0 +1,212 @@
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+%
+% Panel handling.
+%
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Some global vars.
+%
+/panel.size { clip.size pop 48 } def
+/panel.y { clip.size exch pop panel.size exch pop sub 5 sub } def
+/panel.text.y { panel.y 5 add } def
+/panel.text.Fy 0 def
+/panel.font font.normal def
+
+/panel.expert false def
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Init panel.
+%
+% ( ) ==> ( )
+%
+/panel.init {
+
+ /panel.back 0 panel.y moveto panel.size savescreen def
+
+ /config.key.F1 about.msg { "about" } { "help" } ifelse def
+
+ % define panel layout
+ /panel [
+
+ % [ key x label show_func width_func update_func init_func ]
+
+ config.key.F1 panel.entry dup { [ keyF1 0 "F1" 5 -1 roll { } forall ] } { pop } ifelse
+ config.key.F2 panel.entry dup { [ keyF2 0 "F2" 5 -1 roll { } forall ] } { pop } ifelse
+ config.key.F3 panel.entry dup { [ keyF3 0 "F3" 5 -1 roll { } forall ] } { pop } ifelse
+ config.key.F4 panel.entry dup { [ keyF4 0 "F4" 5 -1 roll { } forall ] } { pop } ifelse
+ config.key.F5 panel.entry dup { [ keyF5 0 "F5" 5 -1 roll { } forall ] } { pop } ifelse
+ config.key.F6 panel.entry dup { [ keyF6 0 "F6" 5 -1 roll { } forall ] } { pop } ifelse
+ config.key.F7 panel.entry dup { [ keyF7 0 "F7" 5 -1 roll { } forall ] } { pop } ifelse
+ config.key.F8 panel.entry dup { [ keyF8 0 "F8" 5 -1 roll { } forall ] } { pop } ifelse
+ config.key.F11 panel.entry dup { [ keyF11 0 "F11" 5 -1 roll { } forall ] } { pop } ifelse
+ config.key.F12 panel.entry dup { [ keyF12 0 "F12" 5 -1 roll { } forall ] } { pop } ifelse
+
+ ] def
+
+ xmenu.bits .undef eq { bits.init } if
+
+ % initialize all
+ panel { 6 get dup .undef ne { exec } { pop } ifelse } forall
+
+ panel.show
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Show panel.
+%
+% ( ) ==> ( )
+%
+/panel.show {
+ panel.font setfont
+
+% panel.bg setcolor
+ 0 panel.y moveto
+% currentpoint
+ panel.back restorescreen
+% currenttransparency
+% 50 settransparency
+% panel.size fillrect
+% settransparency
+% moveto
+
+% panel.border.color setcolor
+% 0 -1 rmoveto
+% 0 1 clip.size pop 3 div { pop putpixel 3 0 rmoveto } for
+
+ % don't change xmenu
+ /xmenu xmenu
+
+ /panel.x config.rtl { clip.size pop } { 0 } ifelse def
+ panel { dup {
+ dup 1 panel.x put
+ dup 4 get exec over 2 get strsize pop add 20 add panel.x exch
+ config.rtl { sub } { add } ifelse
+ /panel.x exch def
+ dup 5 get exec
+ } { pop } ifelse } forall
+
+ def
+
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Handle keyboard input.
+%
+% ( key_in ) ==> ( key_out )
+%
+/panel.input {
+ panel { dup {
+ dup 0 get 2 index eq { over panel.extra pop 3 get exec pop 0 exit } { pop } ifelse
+ } { pop } ifelse } forall
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Draw panel entry label and move to text field.
+%
+% ( panel ) => ( )
+%
+/panel.text.moveto {
+ /panel.tmp.x over 1 get 10 config.rtl { sub } { add } ifelse def
+ /panel.tmp.F exch 2 get def
+
+ panel.tmp.x panel.text.y panel.text.Fy add moveto
+ panel.f-key.fg setcolor panel.tmp.F show.rtl
+ panel.normal.fg setcolor
+
+ 6 config.rtl { neg } if panel.text.Fy neg rmoveto
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Do some extra things.
+%
+% ( key ) => ( key )
+%
+/panel.extra {
+ % move down one menu entry; but only once
+ % see keyDown in menu::main.input
+
+ % only for install CDs
+ config.autodown not { return } if
+
+ % not for F1
+ dup keyF1 eq { return } if
+
+ panel.extra.fkey .undef eq
+ menu.entry 0 eq
+ menu.entry menu.texts length 1 sub lt
+ and and {
+ /panel.extra.fkey 1 def
+ menu.entry false MenuSelect
+ menu.visible.entries menu.entry menu.shift sub sub 1 eq {
+ /menu.shift menu.shift 1 add def main.drawmenu
+ } if
+ /menu.entry menu.entry 1 add def
+ menu.entry true MenuSelect
+ } if
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Get panel entry definition.
+%
+% ( label -- array )
+%
+/panel.entry {
+ % [ show_func width_func update_func init_func ]
+
+ dup "help" eq { pop [ /panel.help /panel.help.width /panel.help.update .undef ] return } if
+ dup "about" eq { pop [ /panel.about /panel.about.width /panel.about.update .undef ] return } if
+
+ dup "lang" eq { pop [ /panel.lang /panel.lang.width /panel.lang.update /lang.init ] return } if
+ dup "video" eq { pop [ /panel.video /panel.video.width /panel.video.update /video.init ] return } if
+ dup "install" eq { pop [ /panel.install /panel.install.width /panel.install.update /install.init ] return } if
+ dup "kernelopts" eq { pop [ /panel.kernelopts /panel.kernelopts.width /panel.kernelopts.update /kernelopts.init ] return } if
+ dup "otheropts" eq { pop [ /panel.otheropts /panel.otheropts.width /panel.otheropts.update /otheropts.init ] return } if
+ dup "dud" eq { pop [ /panel.dud /panel.dud.width /panel.dud.update /dud.init ] return } if
+ dup "keymap" eq { pop [ /panel.keymap /panel.keymap.width /panel.keymap.update /keymap.init ] return } if
+
+ dup "bits" eq { pop
+ .undef
+ 32+64bit_source {
+ 64bit {
+ 32bit_boot_dir .undef ne
+ 64bit_boot_dir .undef ne
+ 32bit_boot_dir 64bit_boot_dir ne
+ and and {
+ pop [ /panel.bits /panel.bits.width /panel.bits.update /bits.init ]
+ } if
+ } if
+ } if
+
+ return
+ } if
+
+ dup "profile" eq { pop
+ .undef
+ "profiles" findfile dup {
+ /profile.data exch def
+ pop [ /panel.profile /panel.profile.width /panel.profile.update /profile.init ]
+ } { pop } ifelse
+
+ return
+ } if
+
+ dup "restore" eq { pop
+ .undef
+ config.restore.id .undef ne {
+ pop [ /panel.restore /panel.restore.width /panel.restore.update .undef ]
+ } if
+
+ return
+ } if
+
+ pop .undef
+} def
+
+
diff --git a/themes/openSUSE/src/penguin.inc b/themes/openSUSE/src/penguin.inc
new file mode 100644
index 0000000..66ac9b0
--- /dev/null
+++ b/themes/openSUSE/src/penguin.inc
@@ -0,0 +1,351 @@
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+%
+% "Penguins" boot screen.
+%
+% Copyright (C) 2001-2002, Raphael Quinet <quinet@gamers.org>
+% Copyright (C) 2005 Steffen Winterfeldt <snwint@suse.de>
+%
+% 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+%
+% Revision history:
+% 2001-11-15 - (xray-blue.config) file derived from xray-green.config
+% 2002-01-04 - file derived from xray-blue.config
+% 2002-01-05 - keystrokes can influence penguins, added timeout message
+% 2002-01-10 - adjusted the speed of the penguins
+% 2005-08-21 - reworked graphics for 800x600 @ 16 bit color
+% - reimplemented to fit to current openSUSE layout
+%
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+%
+% Original comment by Raphael:
+%
+% This script is based on those included in SuSE 7.2 and SuSE 7.3, modified
+% by Raphael Quinet. The walking penguins were extracted from the program
+% "xpenguins" (http://xpenguins.seul.org/), which had borrowed them from the
+% game "Pingus" (http://pingus.seul.org/). The original "walker" was created
+% by Joel Fauche <joel.fauche@wanadoo.fr>, the "tumbler" was created by Craig
+% Timpany <timpany@es.co.nz>, the "reader" and the "superpenguin" were
+% created by Rob Gietema <tycoon@planetdescent.com>, Robin Hogan
+% <R.J.Hogan@reading.ac.uk> and Brian Chu <chub@stuy.yi.org>.
+%
+% Requires the patched syslinux version included in openSUSE 10.0 or later.
+%
+% For more information on the original work done by Raphael, see:
+% http://www.gamers.org/~quinet/lilo/.
+%
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+%
+% penguin animations
+%
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+/p.xmas.xmin 192 def
+/p.xmas.xmax 556 def
+/p.xmas.x 500 def
+/p.xmas.y 89 def
+/p.xmas.dx -4 def
+/p.xmas.frame 0 def
+/p.xmas.frames 8 def
+/p.xmas.src.x 252 def
+/p.xmas.src.y 0 def
+/p.xmas.src.w 32 def
+/p.xmas.src.h 45 def
+
+
+/p.walk.xmin 80 def
+/p.walk.xmax 720 def
+/p.walk.x 200 def
+/p.walk.y 523 def
+/p.walk.dx 4 def
+/p.walk.frame 0 def
+/p.walk.frames 8 def
+/p.walk.src.x 3 def
+/p.walk.src.y 1 def
+/p.walk.src.w 30 def
+/p.walk.src.h 30 def
+
+/p.read.timer 0 def
+/p.read.frame 0 def
+/p.read.frames 4 def
+/p.read.src.x 515 def
+/p.read.src.y 1 def
+
+
+/p.fall.ymax 520 def
+/p.fall.ymin -31 def
+/p.fall.x 762 def
+/p.fall.y 0 def
+/p.fall.frame 0 def
+/p.fall.frames 8 def
+/p.fall.src.x 3 def
+/p.fall.src.y 65 def
+/p.fall.src.w 30 def
+/p.fall.src.h 25 def
+/p.fall.dy -4 def % for super penguin
+
+/p.super false def % show super penguin
+/p.super.frames 2 def
+/p.super.src.x 644 def
+/p.super.src.y 0 def
+/p.super.src.h 31 def
+
+
+/ptheme.init {
+ currentimage
+
+ "panim.jpg" findfile dup setimage 0 0 image.size unpackimage /panim.img exch def free
+ "panim_a.jpg" findfile dup setimage 0 0 image.size unpackimage /panim_a.img exch def free
+
+ setimage
+
+
+ % xmas penguin
+
+ % save drawing background
+ p.xmas.xmin p.xmas.y moveto
+ /p.xmas.back
+ p.xmas.xmax p.xmas.xmin sub p.xmas.src.w add p.xmas.dx abs add
+ p.xmas.src.h savescreen
+ def
+
+ % it just needs the right size
+ /p.xmas.single 0 0 moveto p.xmas.src.w p.xmas.dx abs add p.xmas.src.h savescreen def
+
+
+ % walking penguin
+
+ % save drawing background
+ p.walk.xmin p.walk.y moveto
+ /p.walk.back
+ p.walk.xmax p.walk.xmin sub p.walk.src.w add p.walk.dx abs add
+ p.walk.src.h savescreen
+ def
+
+ % it just needs the right size
+ /p.walk.single 0 0 moveto p.walk.src.w p.walk.dx abs add p.walk.src.h savescreen def
+
+
+ % falling penguin
+
+ % save drawing background
+ /p.fall.back p.fall.x 10 moveto p.fall.src.w p.fall.src.h savescreen def
+
+ % one background line
+ /p.fall.back1 p.fall.x 10 moveto p.fall.src.w 1 savescreen def
+
+ % it just needs the right size
+ /p.fall.single 0 0 moveto p.fall.src.w p.fall.src.h savescreen def
+
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Draw next Xmas penguin frame.
+%
+% ( ) ==> ( )
+%
+/p.xmas.animate {
+ p.xmas.dx 0 lt {
+ p.xmas.dx p.xmas.x add p.xmas.xmin lt {
+ /p.xmas.dx p.xmas.dx neg def
+ } if
+ } {
+ p.xmas.dx p.xmas.x add p.xmas.xmax gt {
+ /p.xmas.dx p.xmas.dx neg def
+ } if
+ }
+ ifelse
+
+ /p.xmas.x p.xmas.x p.xmas.dx add def
+ /p.xmas.frame p.xmas.frame 1 add p.xmas.frames mod def
+
+ % copy background
+ p.xmas.x p.xmas.xmin sub 0 moveto
+ p.xmas.back 0xff p.xmas.single blend
+
+ % add penguin
+ p.xmas.src.x p.xmas.src.w p.xmas.frame mul add
+ p.xmas.src.y p.xmas.dx 0 gt { p.xmas.src.h add } if moveto
+ panim.img panim_a.img p.xmas.single blend
+
+ % draw
+ p.xmas.x p.xmas.y moveto p.xmas.single restorescreen
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Draw next walking penguin frame.
+%
+% ( ) ==> ( )
+%
+/p.walk.animate {
+ /p.read.timer p.read.timer 1 add 0 min def
+
+ p.read.timer 0 lt {
+ % slow down reading
+ p.read.timer 2 mod 0 eq { return } if
+ /p.read.frame p.read.frame 1 add p.read.frames mod def
+ } {
+ p.walk.dx 0 lt {
+ p.walk.dx p.walk.x add p.walk.xmin lt {
+ /p.walk.dx p.walk.dx neg def
+ } if
+ } {
+ p.walk.dx p.walk.x add p.walk.xmax gt {
+ /p.walk.dx p.walk.dx neg def
+ } if
+ }
+ ifelse
+
+ /p.walk.x p.walk.x p.walk.dx add def
+ /p.walk.frame p.walk.frame 1 add p.walk.frames mod def
+ } ifelse
+
+ % copy background
+ p.walk.x p.walk.xmin sub 0 moveto
+ p.walk.back 0xff p.walk.single blend
+
+ p.read.timer 0 lt {
+ % add penguin
+ p.read.src.x p.walk.src.w p.read.frame mul add
+ p.read.src.y
+ } {
+ % add penguin
+ p.walk.src.x p.walk.src.w p.walk.frame mul add
+ p.walk.src.y p.walk.dx 0 gt { p.walk.src.h add } if
+ } ifelse
+ moveto
+ panim.img panim_a.img p.walk.single blend
+
+ % draw
+ p.walk.x p.walk.y moveto p.walk.single restorescreen
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Draw next super penguin frame.
+%
+% ( ) ==> ( )
+%
+/p.super.animate {
+ p.fall.y p.fall.dy add p.fall.ymin lt {
+ /p.fall.y 0 def
+
+ /p.super false def
+
+ return
+ } if
+
+ /p.fall.y p.fall.y p.fall.dy add def
+ /p.fall.frame p.fall.frame 1 add p.fall.frames mod def
+
+ % copy background
+ 0 0 moveto
+ p.fall.back 0xff p.fall.single blend
+
+ % add penguin
+ p.fall.src.x
+ p.fall.src.y p.fall.src.h p.fall.frame mul add moveto
+ panim.img panim_a.img p.fall.single blend
+
+ % draw
+ p.fall.x p.fall.y moveto p.fall.single restorescreen
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Draw falling penguin.
+%
+% ( timeout time ) ==> ( )
+%
+/p.timeout.animate {
+ dup 0 le {
+ pop pop
+
+ % it vanishes...
+ p.fall.x p.fall.y moveto p.fall.back restorescreen
+
+ p.call.super
+
+ return
+ } if
+
+ over sub neg p.fall.ymax mul exch div
+
+ dup p.fall.y gt {
+ p.fall.y 1 2 index 1 sub {
+ p.fall.x exch moveto p.fall.back1 restorescreen
+ } for
+ } if
+ /p.fall.y exch def
+ /p.fall.frame p.fall.frame 1 add p.fall.frames mod def
+
+ % copy background
+ 0 0 moveto
+ p.fall.back 0xff p.fall.single blend
+
+ % add penguin
+ p.fall.src.x p.fall.src.w p.fall.frame mul add
+ p.fall.src.y moveto
+ panim.img panim_a.img p.fall.single blend
+
+ % draw
+ p.fall.x p.fall.y moveto p.fall.single restorescreen
+
+} def
+
+
+% call super penguin
+/p.call.super {
+ p.super { return } if
+
+ /p.super true def
+
+ p.fall.y 0 le {
+ /p.fall.y p.fall.ymax def
+ } if
+
+ % super penguin has different height
+ /p.fall.src.x p.super.src.x def
+ /p.fall.src.y p.super.src.y def
+ /p.fall.src.h p.super.src.h def
+
+ % and less frames
+ /p.fall.frames p.super.frames def
+
+ % change them
+ p.fall.back free
+ /p.fall.back p.fall.x 10 moveto p.fall.src.w p.fall.src.h savescreen def
+
+ p.fall.single free
+ /p.fall.single 0 0 moveto p.fall.src.w p.fall.src.h savescreen def
+} def
+
+
+ptheme {
+ % ( time ) ==> ( )
+ /Timer {
+ dup 3 mod 0 eq { p.xmas.animate } if
+ dup 3 mod 1 eq { p.walk.animate } if
+ pop
+ p.super { p.super.animate } if
+ } def
+
+} if
+
+
diff --git a/themes/openSUSE/src/serial.inc b/themes/openSUSE/src/serial.inc
new file mode 100644
index 0000000..eac5466
--- /dev/null
+++ b/themes/openSUSE/src/serial.inc
@@ -0,0 +1,519 @@
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Some vars.
+
+/act.nop 0 def
+/act.boot 1 def
+
+/.sm.setup 0 def
+/.sm.ok 1 def
+
+/serial.action act.nop def
+
+/serial.setup /serial.setup.start def
+
+/serial.menu.index 0 def
+
+/serial.line.status 0 def
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% serial line input event handling
+%
+% ( key -- input_buffer menu_entry action )
+%
+% key
+% bit 0-7 ascii
+% bit 24-32 scan code (0xf0 + serial line number)
+%
+% action
+% 0: ok, stay in input loop
+% 1: switch to text mode
+% >=2: start linux
+%
+/serial.input {
+ dup 24 shr 0x0f and 1 exch shl serial.line.status or /serial.line.status exch def
+
+ 0xffffff and
+
+ % ^? -> ^H
+ dup 0x7f eq { pop 8 } if
+
+ serial.setup exec
+
+ serial.edit
+ dup 0 eq { pop "" -1 0 return } if
+
+ 1 eq { serial.menu.ok } { serial.menu.prev } ifelse
+
+ window.action actCloseInfo eq {
+ /window.action actNothing def
+ window.done
+ } if
+
+ serial.action act.boot eq {
+ % /serial.setup serial.menu.layout serial.menu.index get .sm.setup get def
+
+ serial.cmdline serial.menu_idx 2
+ return
+ } if
+
+ "" -1 0
+} def
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Write string to serial line.
+%
+% ( str1 -- )
+%
+/serial.show {
+ {
+ dup 0x0a eq { 0x0d serial.putc } if
+ serial.putc
+ } forall
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% ( str1 -- )
+%
+/serial.edit.init {
+ serial.edit.buf exch strcpy
+ "> " serial.show serial.show
+} def
+
+/serial.edit.buf 1024 string def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% ( int1 -- int2 )
+%
+/serial.edit {
+ dup 0x0d eq {
+ "\n\n" serial.show
+ pop 1 return
+ } if
+
+ dup 0x1b eq {
+ "\n\n" serial.show
+ pop 2 return
+ } if
+
+ dup 0x08 eq {
+ serial.edit.buf length 0 gt {
+ serial.edit.buf dup length 1 sub 0 put
+ "\x08 \x08" serial.show
+ } if
+ pop 0 return
+ } if
+
+ dup 0x15 eq {
+ serial.edit.buf length 0 gt {
+ serial.edit.buf length {
+ "\x08 \x08" serial.show
+ } repeat
+ serial.edit.buf 0 0 put
+ } if
+ pop 0 return
+ } if
+
+ dup 0x20 ge over 0x7e le and {
+ serial.edit.buf cvp length serial.edit.buf length 1 add gt {
+ serial.edit.buf dup length add dup 1 0 put 0 2 index put
+
+ serial.putc 0 return
+ } if
+ } if
+
+ pop 0
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% ( -- )
+%
+/serial.smenu.init {
+ "\n=== " serial.show
+ smenu .xm_title get exec serial.show
+ " ===\n\n" serial.show
+ smenu .xm_text get exec serial.show
+ "\n\n" serial.show
+
+ /serial.smenu.cnt 0 def
+ /serial.smenu.tmp 256 string def
+
+ smenu .xm_list get {
+ exec
+ serial.smenu.cnt smenu .xm_current get eq { " * " } { " " } ifelse
+ /serial.smenu.cnt inc
+ serial.smenu.cnt
+ smenu .xm_list get length 10 ge { "%2d)%s%s\n" } { "%d)%s%s\n" } ifelse
+ serial.smenu.tmp sprintf
+ serial.smenu.tmp serial.show
+ } forall
+
+ /serial.smenu.tmp xfree
+
+ "\n" serial.show
+
+ "" serial.edit.init
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Draw main menu.
+%
+% ( int1 -- int2 )
+%
+% int1: key
+% int2: key
+%
+/serial.setup.start {
+ /serial.menu.layout [
+ [ /serial.main.setup /serial.main.ok ]
+ xmenu.bits .xm_list get length 1 gt { [ /serial.bits.setup /serial.bits.ok ] } if
+ xmenu.kernelopts .undef ne { [ /serial.kernel.setup /serial.kernel.ok ] } if
+ [ /serial.options.setup /serial.options.ok ]
+ [ /serial.infobox.setup /serial.infobox.ok ]
+ ] def
+
+ % go for text mode (or use 0?)
+ xmenu.video .xm_current 1 put
+
+ "\n *** " serial.show
+ config.product serial.show
+ " ***\n\n" serial.show
+
+ /serial.setup /serial.nop def
+
+ serial.menu.again
+
+ pop 0
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Setup main menu.
+%
+% ( -- )
+%
+/serial.main.setup {
+ smenu.main .undef eq {
+ /smenu.main .xm_size array def
+
+ smenu.main .xm_current menu.entry put
+ smenu.main .xm_title "Main Menu" put
+ smenu.main .xm_text "Select a boot entry." put
+ smenu.main .xm_list [ menu.texts { menuitemmap } forall ] put
+ } if
+
+ /smenu smenu.main def
+
+ serial.smenu.init
+
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Leave main menu.
+%
+% ( -- )
+%
+/serial.main.ok {
+ serial.edit.buf to_number
+
+ menu.entry false MenuSelect
+
+ serial.smenu.select {
+ /menu.entry smenu .xm_current get def
+ serial.menu.next
+ } {
+ serial.menu.again
+ } ifelse
+
+ menu.entry true MenuSelect
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Setup kernel menu.
+%
+% ( -- )
+%
+/serial.kernel.setup {
+ xmenu.kernelopts .xm_text "Select a predefined set of kernel options." put
+
+ /smenu xmenu.kernelopts def
+
+ serial.smenu.init
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Leave kernel menu.
+%
+% ( -- )
+%
+/serial.kernel.ok {
+ serial.edit.buf to_number
+ serial.smenu.select { serial.menu.next } { serial.menu.again } ifelse
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Setup arch menu.
+%
+% ( -- )
+%
+/serial.bits.setup {
+ xmenu.bits .xm_text "32 or 64 bit?" put
+
+ /smenu xmenu.bits def
+
+ serial.smenu.init
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Leave arch menu.
+%
+% ( -- )
+%
+/serial.bits.ok {
+ serial.edit.buf to_number
+ serial.smenu.select { serial.menu.next } { serial.menu.again } ifelse
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Setup lang menu.
+%
+% ( -- )
+%
+/serial.lang.setup {
+ /smenu xmenu.lang def
+
+ serial.smenu.init
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Leave lang menu.
+%
+% ( -- )
+%
+/serial.lang.ok {
+ serial.edit.buf to_number
+ serial.smenu.select { serial.menu.next } { serial.menu.again } ifelse
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Setup options menu.
+%
+% ( -- )
+%
+/serial.options.setup {
+ "=== Boot Options ===\n" serial.show
+
+"
+Edit boot options.
+
+- lang=<locale> selects the default language
+- install=<url> sets the install repository
+- dud=<url> adds a driverupdate (option can be given more than once)
+
+"
+ serial.show
+
+ boot.ed.list buildcmdline /serial.menu_idx exch def /serial.cmdline exch def
+
+ serial.console.option dup .undef ne {
+ " %s" serial.cmdline dup length add sprintf
+ } { pop } ifelse
+
+ serial.cmdline serial.edit.init
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Options -> Boot.
+%
+% ( -- )
+%
+/serial.options.ok {
+ serial.cmdline serial.edit.buf strcpy pop
+
+ % point to infobox
+ /serial.menu.index inc
+
+ /serial.action act.boot def
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Setup infobox.
+%
+% ( -- )
+%
+/serial.infobox.setup {
+ /smenu serial.infobox def
+
+ serial.smenu.init
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Leave infobox.
+%
+% ( -- )
+%
+/serial.infobox.ok {
+ serial.edit.buf to_number
+ serial.smenu.select {
+ serial.menu.prev
+ /window.action actCloseInfo def
+ } {
+ serial.menu.again
+ } ifelse
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Do nothing.
+%
+% ( -- )
+%
+/serial.nop {
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Convert String to number.
+%
+% ( str1 -- int1 )
+%
+% Returns -1 if str1 is not a number.
+%
+/to_number {
+ dup cvn
+ dup 0 ne { exch pop return } if
+ pop
+ dup "" eq exch "0" eq or { 0 } { -1 } ifelse
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Ensure serial.menu.index has a valid value.
+%
+% ( -- )
+%
+/serial.menu.index.normalize {
+ serial.menu.index serial.menu.layout length gt { /serial.menu.index serial.menu.layout length def } if
+ serial.menu.index 0 lt { /serial.menu.index 0 def } if
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Reinit current menu.
+%
+% ( -- )
+%
+/serial.menu.again {
+ serial.menu.index.normalize
+ serial.menu.layout serial.menu.index get .sm.setup get exec
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Run 'ok' action for current menu.
+%
+% ( -- )
+%
+/serial.menu.ok {
+ serial.menu.index.normalize
+ serial.menu.layout serial.menu.index get .sm.ok get exec
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Go to next menu.
+%
+% ( -- )
+%
+/serial.menu.next {
+ /serial.menu.index inc
+ serial.menu.again
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Go to previous menu.
+%
+% ( -- )
+%
+/serial.menu.prev {
+ /serial.menu.index dec
+ serial.menu.again
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Select menu item (update smenu->.xm_current).
+%
+% ( int1 -- bool1 )
+%
+/serial.smenu.select {
+ smenu .xm_list get length over lt over 0 lt or {
+ pop
+
+ false
+ } {
+ dup 0 eq { pop smenu .xm_current get 1 add } if
+
+ 1 sub smenu .xm_current rot put
+
+ true
+ } ifelse
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Build 'console' option for kernel.
+%
+% ( -- str1 )
+%
+/serial.console.option {
+
+ /serial.tmp.bm 0 def
+ {
+ serial.line.status 1 serial.tmp.bm shl and { exit } if
+ /serial.tmp.bm inc
+ serial.tmp.bm 8 ge { /serial.tmp.bm .undef def exit } if
+ } loop
+
+ serial.tmp.bm .undef eq { .undef return } if
+ serial.lines length serial.tmp.bm le { .undef return } if
+
+ serial.lines serial.tmp.bm get 2 aget dup .undef ne {
+ serial.tmp.bm serial.getbaud exch
+ "console=%s,%d" serial.console.buf sprintf
+ serial.console.buf
+ } if
+
+} def
+
+/serial.console.buf 64 string def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Setup serial lines.
+%
+0 1 serial.lines length 1 sub {
+ serial.lines over get dup length 2 ge {
+ dup 0 get cvn exch 1 get cvn serial.setconfig
+ } {
+ pop pop
+ } ifelse
+} for
+
+serial.init
+
diff --git a/themes/openSUSE/src/speech.inc b/themes/openSUSE/src/speech.inc
new file mode 100644
index 0000000..ee06708
--- /dev/null
+++ b/themes/openSUSE/src/speech.inc
@@ -0,0 +1,97 @@
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+%
+% Speech related function.
+%
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+
+/.talk_text 0 def
+/.talk_sound 1 def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+%
+% ( text -- )
+%
+/speak {
+ % skip leading TABs
+ { dup 0 get '\x09' eq { 1 add } { exit } ifelse } loop
+
+ /last.spoken xfree
+ /last.spoken over strdup def
+
+ dup _speak { pop return } if
+ dup __ dup rot ne { _speak } if pop
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Say text.
+%
+% ( str -- bool )
+%
+% str: text
+% bool: sound sample found
+%
+/_speak {
+ talk_array {
+ dup .talk_text get 2 index eq {
+ .talk_sound get wav.playlater
+ pop true return
+ } {
+ pop
+ } ifelse
+ } forall
+ pop
+ false
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Load sound samples.
+%
+% ( -- )
+%
+/load_talk {
+ /talk_file "en.tlk" findfile def
+
+ talk_file .undef eq { return } if
+
+ talk_file getdword 0x692741e8 ne { return } if
+
+ talk_array .undef ne {
+ talk_array { free } forall
+ } if
+
+ /talk_array xfree
+
+ /talk_array [
+ 0 1 talk_file 4 add getdword 1 sub {
+ [
+ exch 8 mul 8 add talk_file add
+ dup getdword talk_file add cvs
+ exch 4 add getdword talk_file add
+ ]
+ } for
+ ] def
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Load sound samples.
+%
+% ( -- )
+%
+/load_talk_dialog {
+ window.dialog
+ dup .title "Just a second..." put
+ dup .text "Please wait while speech files are being loaded..." put
+ dup window.init window.show
+
+ load_talk
+ config.volume sound.setvolume
+
+ window.done
+} def
+
+
diff --git a/themes/openSUSE/src/system.inc b/themes/openSUSE/src/system.inc
new file mode 100644
index 0000000..2c2774b
--- /dev/null
+++ b/themes/openSUSE/src/system.inc
@@ -0,0 +1,1400 @@
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+%
+% Some basic definitions.
+%
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+
+% some key codes
+/keyEsc 0x0000001b def
+/keyEnter 0x0000000d def
+/keyTab 0x00000009 def
+/keyShiftTab 0x0f000000 def
+/keyF1 0x3b000000 def
+/keyF2 0x3c000000 def
+/keyF3 0x3d000000 def
+/keyF4 0x3e000000 def
+/keyF5 0x3f000000 def
+/keyF6 0x40000000 def
+/keyF7 0x41000000 def
+/keyF8 0x42000000 def
+/keyF9 0x43000000 def
+/keyF10 0x44000000 def
+/keyF11 0x85000000 def
+/keyF12 0x86000000 def
+/keyHome 0x47000000 def
+/keyUp 0x48000000 def
+/keyPgUp 0x49000000 def
+/keyLeft 0x4b000000 def
+/keyRight 0x4d000000 def
+/keyEnd 0x4f000000 def
+/keyDown 0x50000000 def
+/keyPgDown 0x51000000 def
+/keyIns 0x52000000 def
+/keyDel 0x53000000 def
+/keyShiftF1 0x54000000 def
+/keyShiftF2 0x55000000 def
+/keyShiftF3 0x56000000 def
+/keyShiftF4 0x57000000 def
+/keyShiftF5 0x58000000 def
+/keyShiftF6 0x59000000 def
+/keyShiftF7 0x5a000000 def
+/keyShiftF8 0x5b000000 def
+/keyShiftF9 0x5c000000 def
+/keyShiftF10 0x5d000000 def
+/keyShiftF11 0x87000000 def
+/keyShiftF12 0x88000000 def
+/keyCtrlF1 0x5e000000 def
+/keyCtrlF2 0x5f000000 def
+/keyCtrlF3 0x60000000 def
+/keyCtrlF4 0x61000000 def
+/keyCtrlF5 0x62000000 def
+/keyCtrlF6 0x63000000 def
+/keyCtrlF7 0x64000000 def
+/keyCtrlF8 0x65000000 def
+/keyCtrlF9 0x66000000 def
+/keyCtrlF10 0x67000000 def
+/keyAltF1 0x68000000 def
+/keyAltF2 0x69000000 def
+/keyAltF3 0x6a000000 def
+/keyAltF4 0x6b000000 def
+/keyAltF5 0x6c000000 def
+/keyAltF6 0x6d000000 def
+/keyAltF7 0x6e000000 def
+/keyAltF8 0x6f000000 def
+/keyAltF9 0x70000000 def
+/keyAltF10 0x71000000 def
+/keyCtrlLeft 0x73000000 def
+/keyCtrlRight 0x74000000 def
+/keyCtrlEnd 0x75000000 def
+/keyCtrlDown 0x76000000 def
+/keyCtrlHome 0x76000000 def
+/keyCtrlUp 0x84000000 def
+/keyStatus 0xff000000 def
+
+/statusAlt 0x0208 def
+/statusAltL 0x0200 def
+/statusAltR 0x0008 def
+/statusCtrl 0x0104 def
+/statusShift 0x0003 def
+
+/CapsLock { 0x417 cvp getbyte 0x40 and 0 ne } def
+
+/black 0 def
+/white 0xffffff def
+
+% input object fields
+/.inp_x 0 def % x pos
+/.inp_y 1 def % y pos
+/.inp_back 2 def % background pixmap
+/.inp_buf 3 def % input buffer
+/.inp_buf_len 4 def % input buffer length
+/.inp_int 5 def % internal state array, see below
+% optional fields
+/.inp_hidden 6 def % hidden buffer
+/.inp_label 7 def % input field label
+/.inp_visible 8 def % field is visible
+/.inp_show 9 def % field should be visible
+
+/.inp_int_cur 0 def % current edit char offset
+/.inp_int_cursor 1 def % cursor pos (pixel)
+/.inp_int_shift 2 def % input line shifted (pixel)
+/.inp_int_flags 3 def % bit 0: cursor visible
+/.inp_int_saved_cursor 4 def % saved cursor background
+
+% boot loader
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% bootloader - boot loader type
+%
+% group: system
+%
+% ( -- int1 )
+%
+% int1: boot loader type (0: lilo, 1:syslinux/isolinux, 2: grub)
+%
+/bootloader sysconfig getbyte def
+
+/lilo bootloader 0 eq def
+/syslinux bootloader 1 eq def
+/grub bootloader 2 eq def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% boot_failsafe - failsafe options the user selected (bitmask)
+%
+% group: system
+%
+% ( -- int1 )
+%
+% int1: option bitmask
+% bit 0: SHIFT pressed
+% bit 1: no graphics
+% bit 2: no monitor detection
+%
+/boot_failsafe sysconfig 3 add getbyte def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% bootdrive - drive the BIOS booted from
+%
+% group: system
+%
+% ( -- int1 )
+%
+% int1: BIOS drive id
+%
+/bootdrive sysconfig 5 add getbyte def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% mediatype - type of media we booted from
+%
+% group: system
+%
+% ( -- int1 )
+%
+% int1: media type (0 disk, 1 floppy, 2 cdrom)
+%
+/mediatype sysconfig 2 add getbyte def
+
+/m_disk 0 def
+/m_floppy 1 def
+/m_cdrom 2 def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% biosmem - BIOS reported memory size
+%
+% group: mem
+%
+% ( -- int1 )
+%
+% int1: total memory size according to BIOS
+%
+/biosmem sysconfig 20 add getdword def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% sectorsize - sector size
+%
+% group: mem system
+%
+% ( -- int1 )
+%
+% int1: sector size in bytes
+%
+/sectorsize
+ 1
+ sysconfig 1 add getbyte
+ 20 min % max. 1 MB
+ dup 0 eq { pop 9 } if
+ shl
+def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% getinfo - type of info box
+%
+% group: system
+%
+% ( int1 -- int2 )
+%
+% int1: type of info box we have to show
+% int2: some data
+%
+% Note: really weird, should be replaced by something more obvious.
+%
+/getinfo {
+ 2 shl
+ sysconfig 12 add exch add getdword
+} def
+
+
+% bool values
+/true 0 0 eq def
+/false 0 0 ne def
+
+% type values
+/t_none 0 def
+/t_int 1 def
+/t_unsigned 2 def
+/t_bool 3 def
+/t_string 4 def
+/t_code 5 def
+/t_ret 6 def
+/t_prim 7 def
+/t_sec 8 def
+/t_dict_idx 9 def
+/t_array 10 def
+/t_end 11 def
+/t_ptr 12 def
+
+/.value { t_int settype } def
+/.undef 0 t_none settype def
+/.end 0 t_end settype def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Print string (for debugging).
+%
+% ( string ) ==> ( )
+%
+/string.print {
+ dup
+ currentpoint currentpoint 5 -1 roll strsize image moveto
+ show
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Print number (for debugging).
+%
+% ( number ) ==> ( )
+%
+/number.print {
+ 32 string
+ exch over
+ "%08x" exch sprintf
+ dup string.print
+ free
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Print obj (for debugging).
+%
+% ( obj ) ==> ( )
+%
+/obj.print {
+ 64 string
+ exch dup
+ .value exch gettype
+ "%x:%08x" 3 index sprintf
+ dup string.print
+ free
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Print (for debugging).
+%
+% ( obj ) ==> ( )
+%
+/print {
+ dup gettype t_int eq { number.print return } if
+ dup gettype t_string eq { string.print return } if
+ obj.print
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Convert object to pointer.
+%
+% ( obj ) ==> ( ptr )
+%
+/cvp { t_ptr settype } def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Convert object to string.
+%
+% ( obj ) ==> ( string )
+%
+/cvs { t_string settype } def
+
+
+% base num char
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Convert object to number.
+%
+% ( obj ) ==> ( int )
+%
+/cvn {
+ dup gettype t_string eq {
+ 1 % sign
+ exch dup 0 get '-' eq {
+ exch pop 1 add -1 exch
+ } if
+ 10 % initial base
+ 0 % value
+ rot
+ {
+ dup 'a' ge { 0x20 sub } if
+ dup 'X' eq { pop pop pop 16 0 '0' } if
+ '0' sub
+ dup 9 gt { 7 sub } if
+ dup 0 lt over 4 index ge or { pop exit } if
+ exch 2 index mul add
+ } forall
+ exch pop mul
+ } {
+ t_int settype
+ } ifelse
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Arguments like snprintf.
+%
+% ( obj_1 ... obj_n string_1 string_2 ) ==> ( )
+%
+/sprintf {
+ dup cvp length exch snprintf
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Allocate new string.
+%
+% ( size ) ==> ( string )
+/string {
+ 1 add malloc cvs
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Increment variable.
+%
+% ( dict_ref ) ==> ( )
+%
+/inc {
+ dup exec 1 add def
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Decrement variable.
+%
+% ( dict_ref ) ==> ( )
+%
+/dec {
+ dup exec 1 sub def
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Copy src to dst.
+%
+% Watch overlapping src & dst!
+%
+% ( dst src ) ==> ( dst )
+%
+/strcpy {
+ "%s" 2 index sprintf
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Duplicate string.
+%
+% ( string ) ==> ( string )
+%
+/strdup {
+ dup length string exch strcpy
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Concatenate strings.
+%
+% ( string1 string2 ) ==> ( string1 )
+%
+/strcat {
+ over dup length add exch strcpy pop
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Test for AltGr.
+%
+% ( ) ==> ( bool )
+%
+/is_altGr {
+ keystat statusAltR and 0 ne keystat statusAltL and 0 eq and
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Keyboard mapping.
+%
+% ( key ) ==> ( key )
+%
+/mapkey {
+ dup 24 shr 0xff and /key.code exch def
+ is_altGr {
+ % bios is too smart...
+ key.code 0x78 ge key.code 0x83 le and { /key.code key.code 0x76 sub def } if
+ } if
+ 0 1 config.keymap length 1 sub {
+ config.keymap exch get
+ dup 0 get key.code eq {
+ 1
+ keystat statusShift and { pop 2 } if
+ is_altGr { pop 3 } if
+ get
+ exch pop
+ } {
+ pop
+ } ifelse
+ } for
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Set password mode font property.
+%
+% ( font ) ==> ( font )
+%
+/pwmode {
+ dup gettype t_ptr eq { t_int settype } if
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Test for password mode.
+%
+% ( font -- true|false )
+%
+/is.pwmode {
+ gettype t_int eq
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Show one-line string right aligned.
+%
+% ( string ) ==> ( )
+%
+/showright1 {
+ dup strsize pop neg 0 rmoveto currentpoint rot show currentpoint exch pop exch pop moveto
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Show string right aligned.
+%
+% ( string ) ==> ( )
+%
+/showright {
+ '\n' split
+ currentpoint pop
+ false 2 index
+
+ % array x not_first? array
+ {
+ % array x not_first? elem
+
+ over {
+ "\n" show
+ 2 index currentpoint exch pop moveto
+ } if
+
+ dup showright1 free
+
+ pop true
+ } forall
+ pop pop
+ free
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Show string right/left aligned.
+%
+% ( string ) ==> ( )
+%
+/show.rtl {
+ config.rtl { showright } { show } ifelse
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Show string centered.
+%
+% ( string ) ==> ( )
+%
+/showcenter {
+ dup strsize pop 2 div neg 0 rmoveto show
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Generate pseudo random number.
+% Good enough for boot loader splash screen.
+%
+% ( ) ==> ( int )
+%
+/rand {
+ rand.start 59 mul 97 add 0x7fffffff and
+ /rand.start over def
+} def
+
+% start value
+/rand.start time def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+%
+% ( date ) ==> ( weekday )
+%
+% (Monday: 0)
+%
+% d + [26*(m+1)/10] + j + [j/4] + [c/4] - 2 c - 2
+%
+/weekday {
+ dup day exch
+ dup year exch
+ month dup 2 le { 12 add exch 1 sub exch } if
+ 1 add 26 mul 10 div
+ exch dup
+ 100 mod dup 4 div add
+ exch 100 div dup 4 div exch 2 mul sub
+ add add add
+ 7 mod 12 add
+ 7 mod
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+%
+% ( date ) ==> ( day )
+%
+/day {
+ 0xff and
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+%
+% ( date ) ==> ( month )
+%
+/month {
+ 8 shr 0xff and
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+%
+% ( date ) ==> ( year )
+%
+/year {
+ 16 shr
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+%
+% Read CMOS RAM.
+%
+% ( index ) ==> ( value )
+%
+/nvram {
+ 0x70 exch outbyte
+ 0x71 inbyte
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% readsector - read sector
+%
+% group: system
+%
+% ( int1 -- ptr1 )
+%
+% int1: sector number
+% ptr1: buffer with sector data or .undef. Use @free to free the buffer.
+%
+% Note: does not return on error. Returns .undef if function is not implemented.
+%
+/readsector {
+ _readsector
+ dup .undef eq { return } if
+
+ sectorsize malloc dup rot over length memcpy
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% gfxconfig.data - return array with gfxboot config entries
+%
+% Reads and parses "gfxboot.cfg" when called first time.
+%
+% group: system
+%
+% ( -- array1 )
+%
+% array1: config values
+%
+% array1 may be empty but is never .undef.
+% Elements of array1 (if any) are arrays of three strings: [ section key value ].
+%
+/gfxconfig.data {
+
+ % read file and copy to temp string (we need the final 0)
+ "gfxboot.cfg" findfile dup .undef ne {
+ dup dup length dup string dup cvp 4 2 roll memcpy exch free
+ } {
+ pop ""
+ } ifelse
+
+ % free temp string and create temp array
+ /gfxconfig.data over '\n' split def free
+
+ % modifies gfxconfig.data
+ /gfxconfig.data [
+
+ "base" % default section
+
+ gfxconfig.data {
+
+ skipspaces
+
+ dup 0 get dup 0 eq over ';' eq or exch '#' eq or {
+ % empty or comment
+ pop
+ } {
+ dup 0 get '[' eq {
+ % [section]
+ 1 add
+ dup "]" strstr dup {
+ % put new section on stack
+ 1 sub over exch 0 put
+ exch free
+ } {
+ % wrong [section] entry
+ pop pop
+ } ifelse
+ } {
+ % key=value?
+ dup "=" strstr dup {
+ over over 1 sub over exch 0 put add
+ [ 3 index 4 2 roll ] exch
+ } {
+ % no "="
+ pop pop
+ } ifelse
+ } ifelse
+ } ifelse
+ } forall
+
+ free
+ ]
+
+ % free temp array
+ gfxconfig.data free
+
+ def
+
+ gfxconfig.data
+
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% gfxconfig.layout - return array with config file sections
+%
+% group: system
+%
+% ( -- array1 )
+%
+% array1: section names
+%
+% array1 may be empty but is never .undef.
+%
+/gfxconfig.layout {
+
+ /gfxconfig.layout [ "base" ] def
+
+ "layout" gfxconfig.array_str
+ dup .undef ne {
+ gfxconfig.layout free
+ [ exch { } forall "base" ] /gfxconfig.layout exch def
+ } {
+ pop
+ } ifelse
+
+ gfxconfig.layout
+
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% gfxconfig.getentry_s - return gfxboot config file entry
+%
+% group: system
+%
+% ( str1 str2 -- str3 )
+%
+% str1: section
+% str2: config entry key
+% str3: config value (or .undef)
+%
+/gfxconfig.getentry_s {
+ .undef
+ gfxconfig.data {
+ 3 index over 0 get eq 3 index 2 index 1 get eq and {
+ 2 get exch pop exit
+ } {
+ pop
+ } ifelse
+ } forall
+
+ exch pop exch pop
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% gfxconfig.getentry - return raw gfxboot config file entry
+%
+% group: system
+%
+% ( str1 -- str2 )
+%
+% str1: config entry key
+% str2: config value (or .undef)
+%
+/gfxconfig.getentry {
+ .undef
+
+ gfxconfig.layout {
+ 2 index gfxconfig.getentry_s
+ dup .undef eq {
+ pop
+ } {
+ exch pop
+ exit
+ } ifelse
+ } forall
+
+ exch pop
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% gfxconfig.str - return gfxboot config file entry: string
+%
+% group: system
+%
+% ( str1 -- str2 )
+%
+% str1: config entry key
+% str2: config value (or .undef)
+%
+/gfxconfig.str {
+ gfxconfig.getentry dup .undef ne { strdup dup dropspaces } if
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% gfxconfig.int - return gfxboot config file entry: integer
+%
+% group: system
+%
+% ( str1 -- int1 )
+%
+% str1: config entry key
+% int1: config value (or .undef)
+%
+/gfxconfig.int {
+ gfxconfig.getentry dup .undef ne { cvn } if
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% gfxconfig.int2 - return gfxboot config file entry: two integers
+%
+% group: system
+%
+% ( str1 -- int1 int2 )
+%
+% str1: config entry key
+% int1: first config value (or .undef)
+% int2: second config value (or .undef)
+%
+/gfxconfig.int2 {
+ gfxconfig.array_int dup .undef eq { pop [ ] } if
+ dup 0 aget over 1 aget rot free
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% gfxconfig.array_str - return gfxboot config file entry: array of strings
+%
+% group: system
+%
+% ( str1 -- array1 )
+%
+% str1: config entry key
+% array1: config value (or .undef)
+%
+/gfxconfig.array_str {
+ gfxconfig.getentry dup .undef ne { ',' split } if
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% gfxconfig.array_int - return gfxboot config file entry: array of integers
+%
+% group: system
+%
+% ( str1 -- array1 )
+%
+% str1: config entry key
+% array1: config value (or .undef)
+%
+/gfxconfig.array_int {
+ gfxconfig.array_str dup .undef ne {
+ [ exch
+ { dup .undef ne { cvn } if } forall
+ ]
+ } if
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% gfxconfig.set.str - initialize variable with gfxboot config file entry
+%
+% group: system
+%
+% ( dict1 str1 str2 -- )
+%
+% dict1: variable to modify
+% str1: config entry key
+% str2: default value
+%
+/gfxconfig.set.str {
+ exch gfxconfig.str
+ dup .undef ne { exch } if pop def
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% gfxconfig.set.int - initialize variable with gfxboot config file entry
+%
+% group: system
+%
+% ( dict1 str1 int1 -- )
+%
+% dict1: variable to modify
+% str1: config entry key
+% int1: default value
+%
+/gfxconfig.set.int {
+ exch gfxconfig.int
+ dup .undef ne { exch } if pop def
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% gfxconfig.set.int2 - initialize two variables with gfxboot config file entry
+%
+% group: system
+%
+% ( dict1 dict2 str1 int1 int2 -- )
+%
+% dict1: first variable to modify
+% dict2: second variable to modify
+% str1: config entry key
+% int1: first default value
+% int2: second default value
+%
+/gfxconfig.set.int2 {
+ rot gfxconfig.int2
+ % dict1 dict2 def1 def2 val1 val2
+ exch 4 -1 roll exch
+ % dict1 dict2 def2 val2 def1 val1
+ dup .undef ne { exch } if pop
+ 5 -1 roll exch def
+ % dict2 def2 val2
+ dup .undef ne { exch } if pop def
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% gfxconfig.set.bool - initialize variable with gfxboot config file entry
+%
+% group: system
+%
+% ( dict1 str1 bool1 -- )
+%
+% dict1: variable to modify
+% str1: config entry key
+% bool1: default value
+%
+/gfxconfig.set.bool {
+ exch gfxconfig.int
+ dup .undef ne { 0 ne exch } if pop def
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% gfxconfig.set.array_str - initialize variable with gfxboot config file entry
+%
+% group: system
+%
+% ( dict1 str1 array1 -- )
+%
+% dict1: variable to modify
+% str1: config entry key
+% array1: default value
+%
+/gfxconfig.set.array_str {
+ exch gfxconfig.array_str
+ dup .undef ne { exch } if pop def
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% gfxconfig.set.array_int - initialize variable with gfxboot config file entry
+%
+% group: system
+%
+% ( dict1 str1 array1 -- )
+%
+% dict1: variable to modify
+% str1: config entry key
+% array1: default value
+%
+/gfxconfig.set.array_int {
+ exch gfxconfig.array_int
+ dup .undef ne { exch } if pop def
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% split - split string
+%
+% group:
+%
+% ( str1 int1 -- array1 )
+%
+% str1: string
+% int1: char
+% array1: array of strings
+%
+/split {
+
+ % split does not work if str1 is in a special memory region (where
+ % 'cvp length' does not work). So we dup it first.
+
+ exch strdup dup rot
+
+ currenteotchar exch seteotchar exch
+
+ [ exch
+
+ {
+ dup strdup exch
+ dup length add
+
+ dup cvp length 1 le { pop exit } if
+
+ 1 add
+
+ } loop
+
+ ]
+
+ exch seteotchar
+
+ exch free
+
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% join - join array of strings
+%
+% group:
+%
+% ( array1 str1 -- str2 )
+%
+% array1: array of strings
+% str1: separator
+% str2: complete string
+%
+/join {
+ over length 0 eq { pop pop 0 string return } if
+
+ over length 1 sub over length mul
+ 2 index { length add } forall
+ string
+
+ % note: last element is not followed by separator because it exceeds
+ % the destination string size
+ rot {
+ strcat over strcat
+ } forall
+
+ exch pop
+
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Skip leading non-spaces.
+%
+% ( string ) ==> ( string )
+%
+/skipnonspaces {
+ { dup 0 get dup 0 ne exch ' ' ne and { 1 add } { exit } ifelse } loop
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Skip leading spaces.
+%
+% ( string ) ==> ( string )
+%
+/skipspaces {
+ { dup 0 get ' ' eq { 1 add } { exit } ifelse } loop
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Drop spaces at string end.
+% Modifies string!
+%
+% ( string ) ==> ( )
+%
+/dropspaces {
+ dup length
+ dup 0 eq {
+ pop pop
+ } {
+ 1 sub
+ -1 0 {
+ over over get ' ' eq { over exch 0 put } { pop exit } ifelse
+ } for
+ pop
+ } ifelse
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Test if string[ofs-1]/string[ofs] is a word boundary.
+%
+% ( string ofs ) ==> ( true|false )
+%
+% boundary is either space/non-space or non-space/(space|'=')
+%
+/iswordboundary {
+ dup 0 eq { pop pop true return } if
+
+ add dup 1 sub 0 get exch 0 get
+
+ over ' ' eq over ' ' gt and { pop pop true return } if
+ over ' ' gt over dup ' ' eq exch dup '=' eq exch 0 eq or or and { pop pop true return } if
+
+ pop pop false
+} def
+
+
+%% findmode - find video mode number
+%
+% group: gfx.screen
+%
+% ( int1 int2 int3 -- int4 )
+%
+% int1, int2: width, height
+% int3: color bits
+% int4: mode number (or .undef)
+%
+% example
+% 1024 768 16 findmode setmode % 1024x768, 16-bit color mode
+%
+/findmode {
+ 0 1 videomodes {
+ videomodeinfo dup .undef eq {
+ pop pop pop pop
+ } {
+ % compare width, height, colors
+ 6 index 4 index eq 6 index 4 index eq and 5 index 3 index eq and {
+ 7 1 roll 6 { pop } repeat 0xbfff and return
+ } {
+ pop pop pop pop
+ } ifelse
+ } ifelse
+ } for
+
+ pop pop pop .undef
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+%
+% Replace substring. Returns newly allocated string.
+%
+% ( str key value ) ==> ( new_str )
+%
+% Replaces first occurence of 'key' in str with 'value'.
+%
+/strreplace {
+ 2 index 2 index strstr dup 0 ne {
+ 1 sub
+ over length 3 index length sub 4 index length add string
+ dup cvp 5 index cvp 3 index memcpy
+ dup 6 1 roll over add exch 5 -1 roll exch add
+ 4 -1 roll length add 3 1 roll "%s%s" exch sprintf
+ } {
+ pop pop pop strdup
+ } ifelse
+
+
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Search for option in cmdline.
+% Returns .undef if not found.
+%
+% ( cmdline option_name ) ==> ( option_start )
+%
+/bootopt.find {
+ /_bo.opt exch def
+ /_bo.cmdline exch def
+ /_bo.= _bo.opt dup length 1 sub get '=' eq def
+
+ {
+ _bo.cmdline _bo.opt strstr
+ dup {
+ dup 1 eq {
+ true
+ } {
+ dup 2 sub _bo.cmdline exch get ' ' eq
+ } ifelse
+
+ {
+ _bo.cmdline over _bo.opt length add 1 sub get
+ dup '=' eq
+ over ' ' eq or
+ exch 0 eq or
+ _bo.= or
+ } {
+ false
+ } ifelse
+
+ _bo.cmdline rot add exch
+
+ {
+ 1 sub exit
+ } {
+ /_bo.cmdline exch def
+ } ifelse
+ } {
+ pop
+ .undef exit
+ } ifelse
+ } loop
+
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Search for second occurence of option in cmdline.
+% Returns .undef if not found.
+%
+% ( cmdline option_name ) ==> ( option_start )
+%
+/bootopt.find2 {
+ over over bootopt.find dup .undef eq {
+ pop pop pop .undef
+ } {
+ 1 add rot pop exch bootopt.find
+ } ifelse
+} def
+
+
+% Remove option from cmdline. Returns removed option or .undef.
+%
+% cmdline is modified, option_entry is allocated dynamicyll and must be
+% freed later.
+%
+% ( cmdline option_name -- option_entry )
+%
+/bootopt.remove {
+ bootopt.find dup .undef ne {
+ dup
+ skipnonspaces dup skipspaces 2 index sub rot rot over sub string over strcpy
+ rot rot
+ {
+ over over exch get
+ over over 0 exch put {
+ 1 add
+ } {
+ exit
+ } ifelse
+ } loop
+ pop pop
+ } if
+} def
+
+
+% Video memory in kb.
+%
+% ( -- int )
+%
+/video.memory {
+ /video.memory 0 sysinfo def
+ video.memory
+} def
+
+
+% Graphics card OEM info.
+%
+% ( -- string )
+%
+/video.oem {
+ /video.oem 1 sysinfo strdup def
+ video.oem
+} def
+
+
+% Graphics card vendor name.
+%
+% ( -- string )
+%
+/video.vendor {
+ /video.vendor 2 sysinfo strdup def
+ video.vendor
+} def
+
+
+% Graphics card product name.
+%
+% ( -- string )
+%
+/video.product {
+ /video.product 3 sysinfo strdup def
+ video.product
+} def
+
+
+% Graphics card revision.
+%
+% ( -- string )
+%
+/video.revision {
+ /video.revision 4 sysinfo strdup def
+ video.revision
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Free memory.
+%
+% Like free, but accepts dict entries, too.
+%
+% ( obj -- )
+%
+/xfree {
+ dup gettype
+ t_dict_idx eq {
+ dup exec exch .undef def
+ } if
+ free
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Free array and all its elements.
+%
+% If array is a dict entries, undefines it, too.
+%
+% ( array -- )
+%
+/afree {
+ dup .undef ne {
+ dup gettype t_dict_idx eq { dup exec exch .undef def } if
+ dup { free } forall
+ free
+ } {
+ pop
+ } ifelse
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Get array element.
+%
+% Like get, but returns .undef if index is outside array bounds.
+%
+% ( array index -- obj )
+%
+/aget {
+ over length over gt { get } { pop pop .undef } ifelse
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Search for array element.
+%
+% ( array key -- bool )
+%
+/iselement {
+ false rot {
+ 2 index eq { pop true exit } if
+ } forall
+ exch pop
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% pc speaker beep.
+%
+% ( freq duration -- )
+%
+% freq in Hz, duration in microseconds.
+%
+/beep {
+ exch
+ 0x61 inbyte
+ dup 3 or 0x61 exch outbyte
+ 0x43 0xb6 outbyte
+ exch 2386360 exch div
+
+ dup 0x42 exch outbyte
+ 8 shr 0x42 exch outbyte
+
+ exch usleep
+
+ 0x61 exch outbyte
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Play movie.
+%
+% ( str1 -- )
+%
+% Image filename template.
+%
+/play_movie {
+ 64 string
+
+ 0
+
+ {
+ 1 add
+ dup 3 index 3 index sprintf
+
+ over findfile dup .undef eq {
+ pop exit
+ } {
+ 10000 usleep
+ currentimage
+ over setimage 0 0 image.size image
+ setimage
+ free
+ } ifelse
+
+
+ } loop
+
+ pop free pop
+
+} def
+
+
diff --git a/themes/openSUSE/src/timeout.inc b/themes/openSUSE/src/timeout.inc
new file mode 100644
index 0000000..93027b8
--- /dev/null
+++ b/themes/openSUSE/src/timeout.inc
@@ -0,0 +1,149 @@
+%
+% include before common.inc
+%
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Boot timeout counter.
+%
+% ( timeout time ) ==> ( )
+%
+% timeout: total time in 18.2Hz steps, time: current value.
+%
+% The code below assumes we're showing seconds and some symbolic counter.
+%
+/Timeout {
+ % first time
+ timeout.current .undef eq { over timeout.init } if
+
+ ptheme { over over p.timeout.animate } if
+
+ % no counter
+ timeout.steps .undef eq { return } if
+
+ /timeout.s.last timeout.s.current def
+ /timeout.s.current over 10 mul 150 add 182 div def
+
+ /timeout.last timeout.current def
+ over sub neg timeout.steps mul exch div
+ /timeout.current exch def
+
+ timeout.current timeout.steps ge {
+ % last run
+ timeout.s.done
+ timeout.done
+ } {
+ % 0 270 moveto timeout.last print "<" print timeout.current print "<" print
+
+ timeout.s.last timeout.s.current ne { timeout.s.current timeout.s.update } if
+
+ timeout.last timeout.current ne {
+ timeout.last 1 add 1 timeout.current { timeout.update } for
+ } if
+
+ } ifelse
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Initialize timeout indicator.
+%
+% ( time ) ==> ( )
+%
+/timeout.init {
+ "timer_a.jpg" findfile /timeout.file over def dup .undef ne {
+ currentimage exch setimage
+ 0 0 image.size unpackimage /timeout.image exch def
+ setimage
+
+ /timeout.steps timeout.image imgsize div def
+
+ /timeout.width timeout.image imgsize exch pop def
+
+ /timeout.x menu.start.x menu.bar.width add 24 sub def
+ /timeout.y menu.start.y 2 sub menu.entry menu.item.height mul add def
+
+ timeout.x timeout.y moveto
+ /timeout.bg timeout.width dup savescreen def
+ % just a few buffers
+ /timeout.img_buf timeout.width dup savescreen def
+ /timeout.alpha_buf timeout.width dup savescreen def
+
+ /timeout.current 0 def
+
+ timeout.current timeout.update
+ } { pop } ifelse
+
+ /timeout.s.buf 64 string def
+ /timeout.s.x 100 def
+ /timeout.s.y 250 def
+ /timeout.s.current -1 def
+
+ pop
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Update timeout indicator.
+%
+% ( index ) ==> ( )
+%
+% index runs from 0 to timeout.steps - 1. It is guaranteed that index is
+% 1 larger than the last index. Never a step twice and no step is left out.
+%
+/timeout.update {
+ timeout.width mul 0 moveto
+ timeout.image 255 timeout.alpha_buf blend
+
+ timeout.img_buf timeout.bg dup length memcpy
+
+ 0 0 moveto
+ black timeout.alpha_buf timeout.img_buf blend
+
+ timeout.x timeout.y moveto
+ timeout.img_buf restorescreen
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Clear timeout indicator.
+%
+% ( ) ==> ( )
+%
+/timeout.done {
+ timeout.x timeout.y moveto
+ timeout.bg restorescreen
+
+ /timeout.bg timeout.bg free .undef def
+ /timeout.img_buf timeout.img_buf free .undef def
+ /timeout.alpha_buf timeout.alpha_buf free .undef def
+ /timeout.image timeout.image free .undef def
+ /timeout.file timeout.file free .undef def
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Update seconds counter.
+%
+% ( time_in_s ) ==> ( )
+%
+/timeout.s.update {
+% white setcolor
+% timeout.s.x timeout.s.y moveto -30 0 rmoveto
+% currentpoint 30 fontheight image
+% "%ds" timeout.s.buf sprintf
+% timeout.s.x timeout.s.y moveto timeout.s.buf showright
+ pop
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Clear seconds counter.
+%
+% ( ) ==> ( )
+%
+/timeout.s.done {
+% timeout.s.x timeout.s.y moveto -30 0 rmoveto
+% currentpoint 30 fontheight image
+} def
+
+
diff --git a/themes/openSUSE/src/window.inc b/themes/openSUSE/src/window.inc
new file mode 100644
index 0000000..257864f
--- /dev/null
+++ b/themes/openSUSE/src/window.inc
@@ -0,0 +1,715 @@
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+%
+% window code
+%
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+
+% public words:
+%
+% window.dialog ( ) ==> ( window )
+% - create a new dialog
+%
+% window.init ( window ) ==> ( )
+% - initialize window
+%
+% window.show ( window ) ==> ( )
+% - draw window
+%
+% window.current ( ) ==> ( window )
+% - the top level window
+%
+% window.action ( ) ==> ( action )
+% - recent window action
+%
+% window.input ( key_in ) ==> ( key_out )
+% - handle keyboard input
+%
+% window.done ( ) ==> ( )
+% - close top level window
+%
+%
+% constants:
+% - window.action
+% actNothing - do nothing
+% actExit - leave boot menu
+% actCloseInfo - close info window
+% actPassword - password entered
+% actStart - boot kernel
+% actEject - eject CD
+% actPowerOff - turn computer off
+% actReboot - reboot computer
+% actRedraw - redraw everything
+% actNoClose - don't close dialog (it's a flag)
+%
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% window related global variables
+%
+
+% all open windows are stacked here
+/window.list 8 array def
+/window.list.index 0 def
+
+% the top level window
+% /window.current
+
+% action selected by closing window
+/window.action actNothing def
+
+% window field definitions
+/widget.size 0 def
+/newfield { widget.size def /widget.size widget.size 1 add def } def
+
+/.type newfield
+/.x newfield
+/.y newfield
+/.width newfield
+/.height newfield
+/.width.min newfield
+/.position newfield
+/.color.fg newfield
+/.color.bg newfield
+/.font newfield
+/.saved newfield
+/.saved.areas newfield
+/.title newfield
+/.title.fg newfield
+/.title.bg newfield
+/.title.height newfield
+/.text newfield
+/.text.x newfield
+/.text.y newfield
+/.buttons newfield
+/.button.y newfield
+/.ed newfield
+/.ed.font newfield
+/.ed.list newfield
+/.ed.buffer.list newfield
+/.ed.text.list newfield
+/.ed.width newfield
+/.ed.focus newfield
+/.ed.pw_field newfield
+/.xmenu newfield
+/.xmenu.update newfield
+
+% window types
+/t_dialog 100 def
+/t_help 101 def
+/t_main 102 def
+/t_xmenu 103 def
+
+% actions
+/actNothing 0 def
+/actExit 1 def
+/actCloseInfo 2 def
+/actPassword 3 def
+/actStart 4 def
+/actEject 5 def
+/actPowerOff 6 def
+/actRedraw 7 def
+/actRedrawPanel 8 def
+/actInstallOK 9 def
+/actInstallCancel 10 def
+/actReboot 11 def
+/actRestore 12 def
+/actNoClose 0x100 def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Create new dialog window.
+%
+% ( ) ==> ( window )
+%
+/window.dialog {
+ widget.size array
+ dup .type t_dialog put
+ dup .position 8 put % centered at 8/10 of screen height
+ dup .x 0 put
+ dup .y 0 put
+ dup .width.min 0 put
+ dup .color.fg window.color.fg put
+ dup .color.bg window.color.bg put
+ dup .font font.normal put
+ dup .title.fg window.title.fg put
+ dup .title.bg window.title.bg put
+ dup .title.height help.title.height put
+ dup .text.x 12 put
+ dup .text.y help.title.height 10 add put
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Handle keyboard input.
+%
+% ( key_in ) ==> ( key_out )
+%
+/window.input {
+ window.current .undef ne {
+ window.current .type get
+ dup t_dialog eq { exch dialog.input exch } if
+ dup t_help eq { exch help.input exch } if
+ dup t_main eq { exch main.input dialog.input exch } if
+ dup t_xmenu eq { exch xmenu.input exch } if
+ pop
+
+ % % maybe there is an editable input field
+ % dup 0 ne {
+ % window.current .ed get .undef ne {
+ % window.current .ed.font get setfont
+ % window.current .color.fg get setcolor
+ % window.current .ed get exch edit.input
+ % 0
+ % } if
+ % } if
+
+ % only top level window gets input
+ pop 0
+
+ } if
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Initialize window.
+%
+% ( window ) ==> ( )
+%
+/window.init {
+ dup .type get
+ dup t_dialog eq { pop dialog.init return } if
+ dup t_help eq { pop help.init return } if
+ dup t_main eq { pop main.init return } if
+ dup t_xmenu eq { pop xmenu.init return } if
+ pop
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Show window.
+%
+% ( window ) ==> ( )
+%
+/window.show {
+ dup .type get
+ dup t_dialog eq { pop dialog.show return } if
+ dup t_help eq { pop help.show return } if
+ dup t_main eq { pop main.show return } if
+ dup t_xmenu eq { pop xmenu.show return } if
+ pop
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Add window to list.
+%
+% ( window ) ==> ( )
+%
+/window.push {
+ window.list.index window.list length ge { pop return } if
+ /window.current over def
+ window.list window.list.index rot put
+ /window.list.index window.list.index 1 add def
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Remove window from list.
+%
+% ( ) ==> ( window )
+%
+/window.pop {
+ window.list.index 0 eq { .undef return } if
+ /window.list.index window.list.index 1 sub def
+ window.list window.list.index get
+ window.list window.list.index .undef put
+ /window.current
+ window.list.index 0 eq { .undef } { window.list window.list.index 1 sub get } ifelse
+ def
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Close top level window.
+%
+% ( ) ==> ( )
+%
+/window.done {
+ window.current .undef ne {
+ window.current dup .type get
+ dup t_help eq { help.done } if
+ dup t_xmenu eq { xmenu.done } if
+ pop
+ % restore saved background and free bg image
+ dup .saved get .undef ne {
+ dup .x get 1 sub over .y get 1 sub moveto
+ dup .saved get dup restorescreen free
+ dup .saved .undef put
+ } if
+ % restore & free saved background areas
+ dup .saved.areas get .undef ne {
+ % list of [ x y screen ]
+ dup .saved.areas get {
+ dup { } forall
+ 3 1 roll moveto dup restorescreen free
+ free
+ } forall
+ dup .saved.areas get free
+ dup .saved.areas .undef put
+ } if
+ % free input field memory
+ dup .ed get .undef ne {
+ dup .ed get 2 get free % background
+ dup .ed get free
+ dup .ed .undef put
+ } if
+ dup .ed.text.list get free
+ dup .ed.list get dup {
+ { dup 2 get free free } forall
+ } { pop } ifelse
+ dup .ed.list get free
+ pop
+ % remove it from window list
+ window.pop
+ % free buttons & button list
+ dup .buttons get
+ dup .undef ne {
+ dup length 0 gt {
+ dup length 1 sub 0 1 rot {
+ over exch get free
+ } for
+ } if
+ } if
+ free
+ % free window
+ free
+ } if
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Handle keyboard input.
+%
+% ( key_in ) ==> ( key_out )
+%
+/dialog.input {
+ dup 0 eq { return } if
+
+ /window.buttons window.current .buttons get def
+
+ /has_buttons window.buttons .undef ne { window.buttons length 0 gt } { false } ifelse def
+
+ dup keyEnter eq has_buttons and {
+ window.buttons window.findselected
+ over over get 7 get /window.action exch exec def get
+ dup button.press 100000 usleep
+ window.action actNoClose and {
+ window.action dialog.specialaction { button.show } if
+ } {
+ pop window.done
+ } ifelse
+ pop 0
+ } if
+
+ window.current .ed.list get {
+
+ window.current .ed.list get window.current .ed.focus get get .inp_show aget false ne {
+
+ dup keyDown eq over keyTab eq or {
+ window.current .ed.focus get
+ window.current .ed.list get over get edit.hidecursor
+
+ 1 add window.current .ed.list get length mod
+ window.current .ed.list get over get .inp_show aget false ne { } { pop 0 } ifelse
+ window.current .ed.focus 2 index put
+ window.current .ed.list get exch get edit.showcursor
+ dialog.say.label
+ pop 0
+ } if
+
+ dup keyUp eq over keyShiftTab eq or {
+ window.current .ed.focus get
+ window.current .ed.list get over get edit.hidecursor
+
+ 1 sub window.current .ed.list get length exch over add exch mod
+ {
+ dup 0 eq { exit } if
+ window.current .ed.list get over get .inp_show aget false ne { exit } { 1 sub } ifelse
+ } loop
+ window.current .ed.focus 2 index put
+ window.current .ed.list get exch get edit.showcursor
+ dialog.say.label
+ pop 0
+ } if
+
+ % dup keyTab eq {
+ % window.findselected 1 add window.buttons length mod
+ % window.selectbutton
+ % pop 0
+ % } if
+
+ } if
+
+ } {
+ has_buttons {
+ dup keyTab eq over keyRight eq or over keyDown eq or {
+ window.findselected 1 add window.buttons length mod
+ window.selectbutton
+ pop 0
+ } if
+
+ dup keyShiftTab eq over keyLeft eq or over keyUp eq or {
+ window.findselected window.buttons length 1 sub add window.buttons length mod
+ window.selectbutton
+ pop 0
+ } if
+ } if
+ } ifelse
+
+ has_buttons {
+ dup window.findkey dup 0 ge {
+ window.buttons exch
+ over over get 7 get /window.action exch exec def get
+ dup button.press 100000 usleep
+ window.action actNoClose and {
+ window.action dialog.specialaction { button.show } if
+ } {
+ pop window.done
+ } ifelse
+ pop 0
+ } {
+ pop
+ } ifelse
+ } if
+
+
+ % maybe there are input fields
+ dup 0 ne {
+ window.current .ed.list get dup {
+ window.current .ed.font get
+ window.current .ed.focus get window.current .ed.pw_field get eq { pwmode } if
+ setfont
+ window.current .color.fg get setcolor
+
+ window.current .ed.focus get get dup .inp_show aget false ne {
+ exch over over edit.input
+ % only if real key
+ 24 shr 0xff and 0xff ne config.talk and currentfont is.pwmode not and {
+ edit.getleft dup 'A' ge over 'Z' le and { 0x20 add } if
+ dialog.input.tmp1 0 rot put dialog.input.tmp1 speak
+ } {
+ pop
+ } ifelse
+ } {
+ pop pop
+ } ifelse
+ 0
+ } { pop } ifelse
+ } if
+
+} def
+
+/dialog.input.tmp1 1 string def
+
+/dialog.say.label {
+ config.talk { window.current .ed.text.list get window.current .ed.focus get get speak } if
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Find selected button.
+%
+% ( ) ==> ( button_idx )
+%
+/window.findselected {
+ 0
+ 0 1 window.buttons length 1 sub {
+ dup
+ window.buttons exch get 5 get
+ {
+ exch pop exit
+ } {
+ pop
+ } ifelse
+ } for
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Find button for key.
+%
+% ( key ) ==> ( button_idx )
+%
+% button_idx = -1 if not found
+%
+/window.findkey {
+ /window.key exch def
+ -1
+ window.key 0 eq { return } if
+ 0 1 window.buttons length 1 sub {
+ dup
+ window.buttons exch get 6 get window.key eq
+ {
+ exch pop exit
+ } {
+ pop
+ } ifelse
+ } for
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Select button.
+%
+% ( button_idx ) ==> ( )
+%
+/window.selectbutton {
+ window.findselected
+ over over eq {
+ pop pop
+ } {
+ window.buttons exch get button.notdefault button.show
+ window.buttons exch get button.default button.show
+ } ifelse
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Initialize dialog window.
+%
+% ( window ) ==> ( )
+%
+/dialog.init {
+ /dialog.tmp exch def
+
+ dialog.tmp .font get setfont
+
+ dialog.tmp .text get dup "" ne { strsize } { pop 0 0 } ifelse
+ /dialog.height exch dialog.tmp .text.y get 10 add add def
+ /dialog.width exch dialog.tmp .text.x get 1 add 2 mul add dialog.tmp .width.min get max def
+
+ /dialog.width dialog.tmp .title get strsize pop dialog.tmp .text.x get 1 add 2 mul add dialog.width max def
+
+ dialog.tmp .ed.text.list get dup {
+ /dialog.width
+ dialog.tmp .ed.width get dialog.tmp .text.x get 1 add 2 mul add 8 add dialog.width max
+ def
+ {
+ strsize
+ /dialog.height exch dialog.height add def
+ /dialog.width exch dialog.tmp .text.x get 1 add 2 mul add dialog.width max def
+ } forall
+ } { pop } ifelse
+
+ dialog.tmp .ed.buffer.list get dup {
+ length lineheight 20 add mul /dialog.height exch dialog.height add def
+ } { pop } ifelse
+
+ /window.buttons dialog.tmp .buttons get def
+
+ /dialog.button.y dialog.height 5 add def
+
+ window.buttons .undef ne { window.buttons length {
+ /dialog.height window.buttons 0 get 3 get dialog.button.y add 8 add def
+ } if } if
+
+ /dialog.y screen.size exch pop dialog.tmp .position get mul 10 div dialog.height sub 2 div 10 max def
+
+ window.buttons .undef ne { window.buttons length {
+ 10
+ 0 1 window.buttons length 1 sub {
+ window.buttons exch get
+ dup 1 dialog.button.y dialog.y add put
+ 2 get 10 add add
+ } for
+
+ dialog.width max /dialog.width exch def
+ } if } if
+
+ % fit to screen size
+ /dialog.width screen.size pop 10 sub dialog.width min def
+
+ % adjust to window size
+ dialog.tmp .ed.width get .undef ne {
+ dialog.tmp .ed.width over over get dialog.width 30 sub max put
+ } if
+
+ /dialog.x screen.size pop dialog.width sub 2 div def
+
+ window.buttons .undef ne { window.buttons length {
+ % calculate button x positions
+ dialog.width 0
+ 0 1 window.buttons length 1 sub {
+ window.buttons exch get 2 get add
+ } for
+ sub window.buttons length 1 add div
+ dialog.x over add
+ 0 1 window.buttons length 1 sub {
+ window.buttons exch get
+ over over 0 rot put
+ 2 get add over add
+ } for
+ pop pop
+ } if } if
+
+ % store values
+
+ dialog.tmp
+ dup .x dialog.x put
+ dup .y dialog.y put
+ dup .width dialog.width put
+ dup .height dialog.height put
+ .button.y dialog.button.y put
+
+ /dialog.tmp .undef def
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Draw dialog window.
+%
+% ( window ) ==> ( )
+%
+/dialog.show {
+ /dialog.tmp exch def
+
+ % put into list early, so drawing functions can access it there
+ dialog.tmp window.push
+
+ % now start drawing
+
+ dialog.tmp .x get 1 sub dialog.tmp .y get 1 sub moveto
+ white black
+ dialog.tmp .width get 2 add dialog.tmp .height get 2 add
+ over over
+ savescreen
+ dialog.tmp .saved rot put
+ drawborder
+
+ dialog.tmp .color.bg get setcolor
+ dialog.tmp .x get dialog.tmp .y get moveto
+ dialog.tmp .width get dialog.tmp .height get fillrect
+
+ dialog.tmp .title.bg get setcolor
+ dialog.tmp .x get 1 add dialog.tmp .y get 1 add moveto
+ dialog.tmp .width get 2 sub dialog.tmp .title.height get 1 sub fillrect
+
+ dialog.tmp .x get 10 add dialog.tmp .y get 3 add moveto
+ dialog.tmp .title.fg get setcolor
+ dialog.tmp .title get config.rtl { dialog.tmp .width get 20 sub 0 rmoveto } if show.rtl
+
+ dialog.tmp .color.fg get setcolor
+ dialog.tmp .x get dialog.tmp .y get moveto
+ dialog.tmp .text.x get dialog.tmp .text.y get rmoveto
+
+ config.talk { dialog.tmp .title get speak } if
+
+ /dialog.tmp.x currentpoint pop def
+
+ config.rtl { dialog.tmp .text.x get -2 mul dialog.tmp .width get add 0 rmoveto } if
+
+ dialog.tmp .text get config.talk { dup speak } if show.rtl
+
+ currentpoint exch pop dialog.tmp.x exch moveto
+
+ dialog.tmp .ed.text.list get dup {
+ /dialog.tmp.idx 0 def
+ {
+ % really '2 add'?
+ config.rtl { dialog.tmp .ed.width get 2 add 0 rmoveto } if show.rtl
+ currentpoint exch pop dialog.tmp.x exch moveto
+
+ dialog.tmp .ed.buffer.list get dialog.tmp.idx get
+
+ dup {
+
+ 3 7 rmoveto
+
+ /dialog.tmp.buf [
+ currentpoint
+ dialog.tmp .ed.width get fontheight 2 add savescreen
+ 0 0
+ .undef
+ ] def
+
+ dialog.tmp.buf 3 2 index put
+ dialog.tmp.buf 4 rot cvp length put
+
+ dialog.tmp .ed.list get dialog.tmp.idx dialog.tmp.buf put
+
+ currentcolor
+ currentpoint over 1 sub over 2 sub moveto
+ black white dialog.tmp .ed.width get 2 add fontheight 5 add drawborder
+ moveto -3 lineheight 20 add 7 sub rmoveto
+ setcolor
+
+ currentfont
+ % hide text in password fields
+ dialog.tmp.idx dialog.tmp .ed.pw_field get eq {
+ dialog.tmp .ed.font get pwmode setfont
+ } if
+ dialog.tmp.buf dup 3 get edit.init
+ setfont
+
+ dialog.tmp .ed.focus get dialog.tmp.idx ne {
+ dialog.tmp.buf edit.hidecursor
+ } {
+ config.talk { dialog.tmp .ed.text.list get dialog.tmp.idx get speak } if
+ } ifelse
+
+ } { pop } ifelse
+
+ /dialog.tmp.idx inc
+ } forall
+ } { pop } ifelse
+
+ dialog.tmp .buttons get .undef ne { dialog.tmp .buttons get length {
+ 0 1 dialog.tmp .buttons get length 1 sub {
+ dialog.tmp .buttons get exch get button.show
+ } for
+ } if } if
+
+ /dialog.tmp .undef def
+
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Do something without closing the window.
+%
+% ( action ) ==> ( true|false )
+%
+% Returns whether the window still exists.
+%
+/dialog.specialaction {
+ actNoClose not and
+
+ true exch
+
+ dup actEject eq {
+ bootdrive eject pop
+ } if
+
+ dup actPowerOff eq {
+ poweroff
+ } if
+
+ dup actReboot eq {
+ reboot
+ } if
+
+ dup actInstallOK eq {
+ install.ok
+ exch not exch
+ } if
+
+% dup actInstallCancel eq {
+% install.cancel
+% exch not exch
+% } if
+
+ pop
+} def
+
+
diff --git a/themes/openSUSE/src/xmenu.inc b/themes/openSUSE/src/xmenu.inc
new file mode 100644
index 0000000..626ccbb
--- /dev/null
+++ b/themes/openSUSE/src/xmenu.inc
@@ -0,0 +1,434 @@
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+%
+% List dialog handling.
+%
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Some global vars.
+%
+/xmenu.vspace.default { xmenu .xm_list get length 15 ge { 2 } { 4 } ifelse } def
+/xmenu.hspace 12 def
+/xmenu.light white def
+/xmenu.dark black def
+/xmenu.font font.normal def
+
+% xmenu layout
+%
+% [ selected_entry string_list x y panel_x ]
+%
+/.xm_current 0 def % selected entry
+/.xm_list 1 def % string list
+/.xm_x 2 def % menu x pos
+/.xm_y 3 def % menu y pos
+/.xm_width 4 def % menu width
+/.xm_height 5 def % menu height
+/.xm_panel_x 6 def % panel entry x pos
+/.xm_vspace 7 def % vspace per menu
+/.xm_title 8 def % xmenu title
+/.xm_text 9 def % xmenu text
+/.xm_last 10 def % last selected entry
+/.xm_size 11 def % xmenu size
+
+
+% short hands
+/xmenu.x { xmenu .xm_x get } def
+/xmenu.y { xmenu .xm_y get } def
+/xmenu.width { xmenu .xm_width get } def
+/xmenu.height { xmenu .xm_height get } def
+
+/xmenu.vspace { xmenu .xm_vspace get dup .undef ne { } { pop xmenu.vspace.default } ifelse } def
+
+/xmenu.saved { xmenu.saved.areas xmenu.column get 2 get } def
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Create new xmenu.
+%
+% ( ) ==> ( window )
+%
+/window.xmenu {
+ widget.size array
+ dup .type t_xmenu put
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Handle keyboad input.
+%
+% ( key_in ) ==> ( key_out )
+%
+/xmenu.input {
+ dup 0 eq { return } if
+
+ dup keyEsc eq {
+ xmenu .xm_current over .xm_last get put
+ window.done
+ pop 0
+ } if
+
+ dup keyEnter eq {
+ window.current .xmenu.update get
+ window.done
+ exec
+ pop 0
+ } if
+
+ dup keyDown eq {
+ xmenu .xm_current get 1 add xmenu.select
+ pop 0
+ } if
+
+ dup keyUp eq {
+ xmenu .xm_current get 1 sub xmenu.select
+ pop 0
+ } if
+
+ dup keyPgDown eq {
+ xmenu .xm_current get 5 add
+ xmenu .xm_list get length 1 sub min xmenu.select
+ pop 0
+ } if
+
+ dup keyPgUp eq {
+ xmenu .xm_current get 5 sub
+ 0 max xmenu.select
+ pop 0
+ } if
+
+ dup keyHome eq {
+ 0 xmenu.select
+ pop 0
+ } if
+
+ dup keyEnd eq {
+ xmenu .xm_list get length 1 sub xmenu.select
+ pop 0
+ } if
+
+ dup config.rtl { keyLeft } { keyRight } ifelse eq {
+ xmenu .xm_current get
+ xmenu .xm_list get length over sub xmenu.maxlines lt v_impaired and {
+ pop
+ } {
+ dup xmenu.maxlines div 1 add xmenu.columns mod xmenu.maxlines mul
+ exch xmenu.maxlines mod add
+ xmenu .xm_list get length 1 sub min xmenu.select
+ } ifelse
+ pop 0
+ } if
+
+ dup config.rtl { keyRight } { keyLeft } ifelse eq {
+ xmenu .xm_current get
+ dup xmenu.maxlines lt v_impaired and {
+ pop
+ } {
+ dup xmenu.maxlines div xmenu.columns add 1 sub xmenu.columns mod xmenu.maxlines mul
+ exch xmenu.maxlines mod add
+ xmenu .xm_list get length 1 sub min xmenu.select
+ } ifelse
+ pop 0
+ } if
+
+ dup keyF1 eq {
+ show_help
+ pop 0
+ } if
+
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Calculate menu sizes.
+%
+% ( ) ==> ( )
+%
+/xmenu.sizes {
+ /xmenu.lheight xmenu.font setfont fontheight xmenu.vspace dup add add def
+
+ /xmenu.maxlines
+ panel.text.y 1 sub xmenu.lheight div
+ def
+
+ /xmenu.columns xmenu .xm_list get length xmenu.maxlines add 1 sub xmenu.maxlines div def
+
+ /xmenu.lastheight
+ xmenu .xm_list get length xmenu.maxlines xmenu.columns 1 sub mul sub xmenu.lheight mul
+ def
+
+ xmenu .xm_height
+ xmenu .xm_list get length xmenu.maxlines min xmenu.lheight mul
+ put
+
+ xmenu .xm_width
+ 0 xmenu .xm_list get {
+ exec
+ 0
+ over 0 get '\x09' eq {
+ over 1 get '\x09' eq { pop "xx\u25b6" strsize pop } if
+ } if
+ exch strsize pop add max
+ } forall xmenu.hspace 2 mul add
+ put
+
+ xmenu .xm_y panel.text.y 1 sub xmenu.height sub put
+
+ xmenu .xm_x xmenu .xm_panel_x get config.rtl { xmenu .xm_width get sub } if put
+
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Init and show menu.
+%
+% ( window ) ==> ( )
+%
+% xmenu: [ selected_entry [ text0 text1 ... ] x y ]
+%
+/xmenu.init {
+ /xmenu over .xmenu get def
+
+ xmenu.sizes
+
+ dup .saved.areas xmenu.columns array /xmenu.saved.areas over def put
+
+ 0 1 xmenu.columns 1 sub {
+ /xmenu.column exch def
+
+ dup .saved.areas get xmenu.column
+
+ [
+ xmenu.column xmenu.width 2 add mul config.rtl { neg } if xmenu.x add 1 sub xmenu.y 1 sub moveto
+ currentpoint
+
+ xmenu.light xmenu.dark
+ xmenu.width 2 add
+ xmenu.column 1 add xmenu.columns eq { xmenu.lastheight } { xmenu.height } ifelse 2 add
+ over over savescreen 5 1 roll
+ drawborder
+
+ ] put
+
+ } for
+
+ 0 1 xmenu .xm_list get length 1 sub { xmenu.viewentry } for
+
+ xmenu .xm_last over .xm_current get put
+
+ dup .x xmenu.x put
+ .y xmenu.y put
+
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Close menu.
+%
+% ( ) ==> ( )
+%
+/xmenu.done {
+ /xmenu.tmpbuf xmenu.tmpbuf free .undef def
+ /xmenu.saved.normal xmenu.saved.normal free .undef def
+ /xmenu.saved.selected xmenu.saved.selected free .undef def
+ /xmenu.saved.areas .undef def
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Draw xmenu.
+%
+% ( window ) ==> ( )
+%
+/xmenu.show {
+ window.push
+
+ config.talk {
+ xmenu .xm_title get dup .undef ne { exec speak } { pop } ifelse
+ xmenu .xm_list get xmenu .xm_current get get exec speak
+ } if
+
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Draw single entry.
+%
+% ( entry ) ==> ( )
+%
+/xmenu.viewentry {
+ dup xmenu .xm_current get eq { true } { false } ifelse /xmenu.is_selected exch def
+
+ xmenu.font setfont
+
+ dup xmenu.maxlines mod xmenu.lheight mul xmenu.y add /xmenu.pos.y exch def
+
+ dup xmenu.maxlines div /xmenu.column over def
+ xmenu.width 2 add mul config.rtl { neg } if xmenu.x add /xmenu.pos.x exch def
+
+ xmenu.pos.x xmenu.pos.y moveto
+
+ xmenu.is_selected { xmenu.saved.selected } { xmenu.saved.normal } ifelse
+
+ dup {
+ transp { pop } { restorescreen } ifelse
+ } {
+ pop
+
+ xmenu.is_selected { xmenu.selected.bg } { xmenu.normal.bg } ifelse
+ setcolor xmenu.width xmenu.lheight fillrect
+
+ dup xmenu .xm_current get eq {
+ xmenu.pos.x xmenu.pos.y moveto
+ xmenu.dark xmenu.light xmenu.width xmenu.lheight drawborder
+ } if
+
+ xmenu.is_selected { /xmenu.saved.selected } { /xmenu.saved.normal } ifelse
+ xmenu.pos.x xmenu.pos.y moveto
+ xmenu.width xmenu.lheight
+ savescreen
+ def
+ } ifelse
+
+
+ transp {
+ % copy entry to avoid reading the screen again
+ xmenu.is_selected { xmenu.saved.selected } { xmenu.saved.normal } ifelse
+ xmenu.tmpbuf .undef eq {
+ dup length malloc /xmenu.tmpbuf exch def
+ } if
+ xmenu.tmpbuf exch dup length memcpy
+
+ 0 xmenu.pos.y xmenu.y sub moveto 1 1 rmoveto
+ xmenu.saved transp xmenu.tmpbuf blend
+
+ xmenu.pos.x xmenu.pos.y moveto xmenu.tmpbuf restorescreen
+ } if
+
+ xmenu.is_selected { xmenu.selected.fg } { xmenu.normal.fg } ifelse setcolor
+
+ config.rtl {
+ xmenu.pos.x xmenu.width add xmenu.hspace sub xmenu.pos.y xmenu.vspace add moveto
+ } {
+ xmenu.pos.x xmenu.hspace add xmenu.pos.y xmenu.vspace add moveto
+ } ifelse
+
+ xmenu .xm_list get over get exec
+ dup 0 get '\x09' eq {
+ 1 add
+ currentpoint
+ currentcolor
+
+ xmenu.dark setcolor
+ xmenu.pos.x xmenu.pos.y moveto
+ xmenu.pos.x xmenu.width add xmenu.pos.y lineto
+ xmenu.light setcolor
+ xmenu.pos.x xmenu.pos.y 1 add moveto
+ xmenu.pos.x xmenu.width add xmenu.pos.y 1 add lineto
+
+ setcolor
+ moveto
+
+ dup 0 get '\x01' eq xmenu.is_selected not and { 1 add xmenu.normal.alt.fg setcolor } if
+
+ dup 0 get '\x09' eq {
+ 1 add
+ show.rtl
+ config.rtl {
+ xmenu.pos.x 8 add xmenu.pos.y 2 add moveto "\u25c0" show
+ } {
+ xmenu.pos.x xmenu.width add 8 sub xmenu.pos.y 2 add moveto "\u25b6" showright1
+ } ifelse
+ } {
+ show.rtl
+ } ifelse
+
+ } {
+ dup 0 get '\x01' eq xmenu.is_selected not and { 1 add xmenu.normal.alt.fg setcolor } if
+
+ show.rtl
+ } ifelse
+
+ pop
+
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Select menu entry.
+%
+% ( new_entry ) ==> ( )
+%
+/xmenu.select {
+ dup 0 lt { v_impaired { 1 } { xmenu .xm_list get length } ifelse add } if
+ dup xmenu .xm_list get length ge { v_impaired { 1 } { xmenu .xm_list get length } ifelse sub } if
+
+ xmenu .xm_current get over xmenu .xm_current rot put
+ xmenu.viewentry
+ xmenu.viewentry
+
+ config.talk {
+ xmenu .xm_list get xmenu .xm_current get get exec speak
+ } if
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Panel/xmenu helper function.
+%
+% ( ) => ( )
+%
+/pmenu.panel.update {
+ panel.text.moveto
+
+ xmenu .xm_panel_x currentpoint pop xmenu.hspace config.rtl { neg } if sub put
+
+ pmenu.update
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Panel/xmenu helper function.
+%
+% ( ) => ( width )
+%
+/pmenu.width {
+ 0
+
+ xmenu .xm_title get
+ dup .undef ne { exec strsize pop max } { pop } ifelse
+
+ xmenu .xm_list get xmenu .xm_current get get
+ dup .undef ne { exec strsize pop max } { pop } ifelse
+} def
+
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+% Panel/xmenu helper function.
+%
+% ( ) => ( )
+%
+/pmenu.update {
+ % note: we're always redrawing the whole panel
+
+ panel.title.fg setcolor
+ panel.font setfont
+
+ xmenu .xm_panel_x get xmenu.hspace config.rtl { neg } if add
+ panel.text.y
+ moveto
+
+ currentpoint
+
+ xmenu .xm_title get
+ dup .undef ne { exec show.rtl } { pop } ifelse
+
+ moveto 0 lineheight 4 add rmoveto
+
+ panel.normal.fg setcolor
+
+ xmenu .xm_list get xmenu .xm_current get get
+ dup .undef ne { exec show.rtl } { pop } ifelse
+
+} def
+
+
diff --git a/themes/openSUSE/talk/Makefile b/themes/openSUSE/talk/Makefile
new file mode 100644
index 0000000..6e3c989
--- /dev/null
+++ b/themes/openSUSE/talk/Makefile
@@ -0,0 +1,10 @@
+all: en.tlk
+
+en.tlk: talk.po sc
+ ./po2talk --compress $< $@
+
+sc: sc.c
+ gcc -O2 -Wall -o $@ $<
+
+clean:
+ rm -f sc *~
diff --git a/themes/openSUSE/talk/en.tlk b/themes/openSUSE/talk/en.tlk
new file mode 100644
index 0000000..e299112
--- /dev/null
+++ b/themes/openSUSE/talk/en.tlk
Binary files differ
diff --git a/themes/openSUSE/talk/po2talk b/themes/openSUSE/talk/po2talk
new file mode 100755
index 0000000..55e7d2b
--- /dev/null
+++ b/themes/openSUSE/talk/po2talk
@@ -0,0 +1,191 @@
+#! /usr/bin/perl
+
+use Getopt::Long;
+
+sub help;
+sub read_po;
+sub join_id;
+sub new_tmp_file;
+sub cleanup;
+
+GetOptions(
+ 'help' => \&help,
+ 'compress' => \$opt_compress,
+);
+
+END { cleanup }
+$SIG{INT} = \&cleanup;
+$SIG{TERM} = \&cleanup;
+
+my @tmp_files;
+
+$espeak = "espeak";
+
+$magic = 0x692741e8;
+
+help if @ARGV != 2;
+
+$po = read_po $ARGV[0];
+
+$tmp_txt = new_tmp_file;
+$tmp_wav = new_tmp_file;
+$tmp_snd = new_tmp_file;
+
+for $msg (@{$po}) {
+ $id = join_id $msg, 'id';
+ $str = join_id $msg, 'str';
+
+ next unless $id ne "";
+
+ eval '$id = "' . $id . '"';
+ eval '$str = "' . $str . '"';
+
+ $str = $id if $str eq "";
+
+ if(!$snd{$str}) {
+ open W, ">$tmp_txt";
+ print W $str;
+ close W;
+
+ $punc = length($id) == 1 ? "--punc" : "";
+
+ system "$espeak $punc -f $tmp_txt -w $tmp_wav";
+ system "sox $tmp_wav -b 8 -u -c 1 -r 16000 -t .wav $tmp_snd";
+ if($opt_compress) {
+ system "./sc $tmp_snd $tmp_snd";
+ }
+
+ open F, $tmp_snd;
+ sysread F, $snd_buf, -s $tmp_snd;
+ close F;
+
+ $snd{$str} = $snd_buf;
+ }
+
+ $snd_id{$id} = $str;
+}
+
+$file_ofs = 0;
+@snds = sort keys %snd;
+@snd_ids = sort keys %snd_id;
+
+for $snd_id (@snd_ids) {
+ $txt_ofs{$snd_id} = $file_ofs;
+ $file_ofs += length($snd_id) + 1;
+}
+
+for $snd (@snds) {
+ $snd_ofs{$snd} = $file_ofs;
+ $file_ofs += length($snd{$snd});
+}
+
+$head_size = 8 + 8 * @snd_ids;
+
+open W, ">$ARGV[1]";
+
+print W pack("VV", $magic, scalar(@snd_ids));
+for $snd_id (@snd_ids) {
+ print W pack("VV", ($txt_ofs{$snd_id} + $head_size, $snd_ofs{$snd_id{$snd_id}} + $head_size));
+}
+for $snd_id (@snd_ids) {
+ print W $snd_id, "\x00";
+}
+for $snd (@snds) {
+ print W $snd{$snd};
+}
+
+close W;
+
+
+sub help
+{
+ print STDERR
+ "Usage: po2talk [options] po_file talk_file\n" .
+ "Run po file through espeak.\n";
+
+ exit 0;
+}
+
+
+sub read_po
+{
+ local $_;
+ my ($msg, $cnt, $id, $f);
+
+ $cnt = 0;
+
+ open F, $_[0];
+ while(<F>) {
+ s/^\s*|\s*$//g;
+ next if $_ eq "";
+ if(/^#,/) {
+ s/^#,\s*//;
+ for $f (split /\s*,\s*/) {
+ ${$msg->[$cnt]{flags}{$f}} = 1 if $f ne "";
+ }
+ next
+ }
+ if(/^#(\s|$)/) { push @{$msg->[$cnt]{u_comment}}, $_ ; next }
+ if(/^#/) { push @{$msg->[$cnt]{a_comment}}, $_; next }
+ if(s/^msg(id\b|id_plural\b|str(\[\d+\])?)\s*//) {
+ $id = $1;
+ if($id eq 'id') {
+ $msg->[$cnt]{line} = $. unless exists $msg->[$cnt]{$line};
+ $cnt++;
+ }
+ }
+ if($cnt && /^"(.*)"$/) {
+ push @{$msg->[$cnt - 1]{$id}}, $1;
+ }
+ else {
+ print STDERR "$_[0]:$.: invalid po format\n";
+ return undef;
+ }
+ }
+ close F;
+
+ # trailing comments
+ pop @$msg if @$msg > 0 && !$msg->[-1]{id};
+
+ return $msg;
+}
+
+
+sub join_id
+{
+ my ($msg, $id);
+
+ ($msg, $id) = @_;
+
+ return join '', @{$msg->{$id}};
+}
+
+
+# create new temporary file
+sub new_tmp_file
+{
+ local $_;
+
+ chomp ($_ = `mktemp /tmp/po2talk.XXXXXXXXXX`);
+ die "error: mktemp failed\n" if $?;
+
+ push @tmp_files, $_;
+
+ return $_;
+}
+
+
+# remove temporary files
+sub cleanup
+{
+ local $_;
+
+ for (@tmp_files) {
+ next unless defined $_;
+ unlink;
+ $_ = undef;
+ }
+
+ undef @tmp_files;
+}
+
diff --git a/themes/openSUSE/talk/sc.c b/themes/openSUSE/talk/sc.c
new file mode 100644
index 0000000..6be9a2d
--- /dev/null
+++ b/themes/openSUSE/talk/sc.c
@@ -0,0 +1,229 @@
+#define _GNU_SOURCE
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <string.h>
+#include <inttypes.h>
+
+#define MAGIC 0x7d53b605
+
+#define MIN_REF_LEN 5
+#define MAX_REF 127 + MIN_REF_LEN
+
+typedef struct {
+ unsigned size;
+ unsigned char *data;
+ unsigned real_size;
+} file_data_t;
+
+typedef struct __attribute ((packed)) {
+ uint32_t magic;
+ uint32_t size;
+ uint32_t unpacked_size;
+ uint32_t sample_rate;
+} snd_header_t;
+
+file_data_t *read_file(char *name);
+void add_data(file_data_t *d, void *buffer, unsigned size);
+void write_data(file_data_t *d, char *name);
+
+void compr(file_data_t *fd, file_data_t *fd_compr);
+unsigned find_longest(unsigned char *data, unsigned len, unsigned start, unsigned *ofs);
+
+
+int main(int argc, char **argv)
+{
+ file_data_t *fd, fd_compr = { }, fd_samples = { };
+ snd_header_t sh;
+ unsigned sample_rate;
+
+ if(argc != 3) return 1;
+
+ fd = read_file(argv[1]);
+
+ if(fd->size <= 44) return 1;
+
+ if(
+ *((unsigned *) (fd->data + 0)) != 0x46464952 ||
+ *((unsigned *) (fd->data + 8)) != 0x45564157 ||
+ *((short *) (fd->data + 20)) != 1 ||
+ *((short *) (fd->data + 34)) != 8 ||
+ *((short *) (fd->data + 22)) != 1
+ ) {
+ fprintf(stderr, "invalid data, expecting 8bit mono wav (ms pcm) file\n");
+ return 3;
+ }
+ sample_rate = *((unsigned *) (fd->data + 24));
+
+ printf("%s: %u Hz, %u samples\n", argv[1], sample_rate, fd->size - 44);
+
+ add_data(&fd_samples, fd->data + 44, fd->size - 44);
+
+ sh.magic = MAGIC;
+ sh.unpacked_size = fd_samples.size;
+ sh.sample_rate = sample_rate;
+
+ add_data(&fd_compr, &sh, sizeof sh);
+
+ compr(&fd_samples, &fd_compr);
+
+ sh.size = fd_compr.size - sizeof (snd_header_t);
+
+ memcpy(fd_compr.data, &sh, sizeof (snd_header_t));
+
+ write_data(&fd_compr, argv[2]);
+
+ return 0;
+}
+
+
+file_data_t *read_file(char *name)
+{
+ file_data_t *fd;
+ FILE *f;
+
+ fd = calloc(1, sizeof *fd);
+
+ if(!name) return fd;
+
+ f = fopen(name, "r");
+
+ if(!f) { perror(name); return fd; }
+
+ if(fseek(f, 0, SEEK_END)) {
+ perror(name);
+ exit(30);
+ }
+
+ fd->size = fd->real_size = ftell(f);
+
+ if(fseek(f, 0, SEEK_SET)) {
+ perror(name);
+ exit(30);
+ }
+
+ if(fd->size) {
+ fd->data = calloc(1, fd->size);
+ if(!fd->data) {
+ fprintf(stderr, "malloc failed\n");
+ exit(30);
+ }
+ }
+
+ if(fread(fd->data, 1, fd->size, f) != fd->size) {
+ perror(name);
+ exit(30);
+ }
+
+ fclose(f);
+
+ return fd;
+}
+
+
+void add_data(file_data_t *d, void *buffer, unsigned size)
+{
+ if(!size || !d || !buffer) return;
+
+ if(d->size + size > d->real_size) {
+ d->real_size = d->size + size + 0x1000;
+ d->data = realloc(d->data, d->real_size);
+ if(!d->data) d->real_size = 0;
+ }
+
+ if(d->size + size <= d->real_size) {
+ memcpy(d->data + d->size, buffer, size);
+ d->size += size;
+ }
+ else {
+ fprintf(stderr, "Oops, out of memory? Aborted.\n");
+ exit(10);
+ }
+}
+
+
+void write_data(file_data_t *d, char *name)
+{
+ FILE *f;
+
+ f = strcmp(name, "-") ? fopen(name, "w") : stdout;
+
+ if(!f) {
+ perror(name);
+ return;
+ }
+
+ if(fwrite(d->data, d->size, 1, f) != 1) {
+ perror(name);
+ exit(3);
+ }
+
+ fclose(f);
+}
+
+
+void compr(file_data_t *fd, file_data_t *fd_compr)
+{
+ unsigned u, v, l, ofs;
+ unsigned char uc;
+
+ if(!fd->size) return;
+
+ for(u = 0; u < fd->size; u++) {
+ if(fd->data[u] == 0xff) fd->data[u] = 0xfe;
+ }
+
+ // printf("%5u: %02x\n", fd->size, fd->data[0]);
+ add_data(fd_compr, fd->data, 1);
+
+ for(u = 1; u < fd->size; ) {
+ l = find_longest(fd->data, fd->size, u, &ofs);
+ // printf("%u: %u bytes @ %u\n", u, l, ofs);
+ if(l >= MIN_REF_LEN) {
+ // printf("%5u: %u bytes @ %u\n", fd->size, l, ofs);
+ v = (ofs << 7) + l - MIN_REF_LEN;
+ uc = 0xff; add_data(fd_compr, &uc, 1);
+ uc = v; add_data(fd_compr, &uc, 1);
+ uc = v >> 8; add_data(fd_compr, &uc, 1);
+ uc = v >> 16; add_data(fd_compr, &uc, 1);
+ u += l;
+ }
+ else {
+ // printf("%5u: %02x\n", fd->size, fd->data[u]);
+ add_data(fd_compr, fd->data + u, 1);
+ u++;
+ }
+ }
+}
+
+
+unsigned find_longest(unsigned char *data, unsigned len, unsigned start, unsigned *ofs)
+{
+ unsigned l;
+ unsigned char *p, *p1;
+
+ p = data;
+ l = MIN_REF_LEN;
+
+ for(;;) {
+ p1 = memmem(p, data + start + l - 1 - p, data + start, l);
+ if(!p1) break;
+ p = p1;
+ l++;
+
+ if(l > MAX_REF) break;
+ }
+
+ l--;
+
+ if(l < MIN_REF_LEN) {
+ *ofs = 0;
+ return 0;
+ }
+
+ *ofs = p - data;
+ return l;
+}
+
+
diff --git a/themes/openSUSE/talk/talk.po b/themes/openSUSE/talk/talk.po
new file mode 100644
index 0000000..eea2235
--- /dev/null
+++ b/themes/openSUSE/talk/talk.po
@@ -0,0 +1,806 @@
+# main menu
+
+msgid "Boot from Hard Disk"
+msgstr ""
+
+msgid "Installation"
+msgstr ""
+
+msgid "Repair Installed System"
+msgstr ""
+
+msgid "Rescue System"
+msgstr ""
+
+msgid "Check Installation Media"
+msgstr ""
+
+msgid "Firmware Test"
+msgstr ""
+
+msgid "Memory Test"
+msgstr ""
+
+msgid "openSUSE 11.3"
+msgstr ""
+
+msgid "openSUSE 11.3 - Desktop"
+msgstr ""
+
+msgid "Hard-Disk"
+msgstr ""
+
+msgid "openSUSE Live (GNOME)"
+msgstr ""
+
+msgid "openSUSE Live (KDE)"
+msgstr ""
+
+msgid "Failsafe Settings"
+msgstr ""
+
+
+# panel texts
+
+msgid "Help"
+msgstr ""
+
+msgid "Language"
+msgstr ""
+
+msgid "Video Mode"
+msgstr ""
+
+msgid "Source"
+msgstr "Installation Source"
+
+msgid "Kernel"
+msgstr ""
+
+msgid "Driver"
+msgstr "Driver Update"
+
+msgid "Arch"
+msgstr "Architecture"
+
+msgid "Keyboard"
+msgstr ""
+
+
+# language menu
+
+msgid "Afrikaans"
+msgstr "Afrikaans"
+
+msgid "\xef\xbb\xb2\xef\xba\x91\xef\xba\xae\xef\xbb\x8b"
+msgstr "Arabic"
+
+msgid "Български"
+msgstr "Bulgarian"
+
+msgid "\xe0\xa6\xac\xe0\xa6\xbe\xe0\xa6\x82\xe0\xa6\xb2\xe0\xa6"
+msgstr "Bengali"
+
+msgid "Bosanski"
+msgstr "Bosnian"
+
+msgid "Català"
+msgstr "Catalan"
+
+msgid "Čeština"
+msgstr "Czech"
+
+msgid "Cymraeg"
+msgstr "Welsh"
+
+msgid "Dansk"
+msgstr "Danish"
+
+msgid "Deutsch"
+msgstr "German"
+
+msgid "Ελληνικά"
+msgstr "Greek"
+
+msgid "English (UK)"
+msgstr "English (UK)"
+
+msgid "English (US)"
+msgstr "English (US)"
+
+msgid "Español"
+msgstr "Spanish"
+
+msgid "Eesti"
+msgstr "Estonian"
+
+msgid "\xef\xaf\xbd\xef\xba\xb4\xd8\xb1\xef\xba\x8e\xef\xbb\x93"
+msgstr "Farsi"
+
+msgid "Suomi"
+msgstr "Finnish"
+
+msgid "Français"
+msgstr "French"
+
+msgid "Galego"
+msgstr "Galician"
+
+msgid "ქართული"
+msgstr "Kartuli"
+
+msgid "\xe0\xaa\x97\xe0\xab\x81\xe0\xaa\x9c\xe0\xaa\xb0\xe0\xaa\xbe\xe0\xaa\xa4\xe0\xab\x80"
+msgstr "Gujarati"
+
+msgid "תירבע"
+msgstr "Hebrew"
+
+msgid "\xe0\xa4\xb9\xe0\xa4\xbf\xe0\xa4\x82\xe0\xa4\xa6\xe0\xa5\x80"
+msgstr "Hindi"
+
+msgid "Hrvatski"
+msgstr "Croatian"
+
+msgid "Magyar"
+msgstr "Hungarian"
+
+msgid "Bahasa Indonesia"
+msgstr "Indonesian"
+
+msgid "Italiano"
+msgstr "Italian"
+
+msgid "日本語"
+msgstr "Japanese"
+
+msgid "Basa Jawa"
+msgstr "Javanese"
+
+msgid "Khmer"
+msgstr "Khmer"
+
+msgid "한글"
+msgstr "Korean"
+
+msgid "Кыргызча"
+msgstr "Kirghiz"
+
+msgid "\xe0\xba\x9e\xe0\xba\xb2\xe0\xba\xaa\xe0\xba\xb2\xe0\xba\xa5\xe0\xba\xb2\xe0\xba\xa7"
+msgstr "Lao"
+
+msgid "Lietuvių"
+msgstr "Lithuanian"
+
+msgid "Македонски"
+msgstr "Macedonian"
+
+msgid "\xe0\xa4\xae\xe0\xa4\xb0\xe0\xa4\xbe\xe0\xa4\xa0\xe0\xa5\x80"
+msgstr "Marathi"
+
+msgid "Norsk"
+msgstr "Norwegian"
+
+msgid "Nederlands"
+msgstr "Dutch"
+
+msgid "Nynorsk"
+msgstr "Nynorsk"
+
+msgid "\xe0\xa8\xaa\xe0\xa9\xb0\xe0\xa8\x9c\xe0\xa8\xbe\xe0\xa8\xac\xe0\xa9\x80"
+msgstr "Punjabi"
+
+msgid "Polski"
+msgstr "Polish"
+
+msgid "Português (Brasil)"
+msgstr "Portuguese (Brazilian)"
+
+msgid "Português"
+msgstr "Portuguese"
+
+msgid "Română"
+msgstr "Romanian"
+
+msgid "Русский"
+msgstr "Russian"
+
+msgid "\xe0\xb7\x83\xe0\xb7\x92\xe0\xb6\x82\xe0\xb7\x84\xe0\xb6\xbd"
+msgstr "Sinhala"
+
+msgid "Slovenčina"
+msgstr "Slovak"
+
+msgid "Slovenščina"
+msgstr "Slovenian"
+
+msgid "Srpski"
+msgstr "Serbian"
+
+msgid "Svenska"
+msgstr "Swedish"
+
+msgid "\xe0\xae\xa4\xe0\xae\xae\xe0\xae\xbf\xe0\xae\xb4\xe0\xaf\x8d"
+msgstr "Tamil"
+
+msgid "тоҷикӣ"
+msgstr "Tadjik"
+
+msgid "\xe0\xb8\xa0\xe0\xb8\xb2\xe0\xb8\xa9\xe0\xb8\xb2\xe0\xb9\x84\xe0\xb8\x97\xe0\xb8\xa2"
+msgstr "Thai"
+
+msgid "Türkçe"
+msgstr "Turkish"
+
+msgid "Українська"
+msgstr "Ukrainian"
+
+msgid "Tiếng Việt"
+msgstr "Vietnamese"
+
+msgid "Walon"
+msgstr "Walloon"
+
+msgid "isiXhosa"
+msgstr "Xhosa"
+
+msgid "简体中文"
+msgstr "Simplified Chinese"
+
+msgid "繁體中文 (台灣)"
+msgstr "Traditional Chinese"
+
+msgid "isiZulu"
+msgstr "Zulu"
+
+
+# keymap menu
+
+msgid "Arabic"
+msgstr ""
+
+msgid "Belgian"
+msgstr ""
+
+msgid "Canadian (Multilingual)"
+msgstr ""
+
+msgid "Croatian"
+msgstr ""
+
+msgid "Czech"
+msgstr ""
+
+msgid "Czech (qwerty)"
+msgstr ""
+
+msgid "Danish"
+msgstr ""
+
+msgid "Dutch"
+msgstr ""
+
+msgid "Dvorak"
+msgstr ""
+
+msgid "English (UK)"
+msgstr ""
+
+msgid "English (US)"
+msgstr ""
+
+msgid "Estonian"
+msgstr ""
+
+msgid "Finnish"
+msgstr ""
+
+msgid "French"
+msgstr ""
+
+msgid "French (Canada)"
+msgstr ""
+
+msgid "French (Switzerland)"
+msgstr ""
+
+msgid "German"
+msgstr ""
+
+msgid "German (Switzerland)"
+msgstr ""
+
+msgid "Greek"
+msgstr ""
+
+msgid "Hungarian"
+msgstr ""
+
+msgid "Icelandic"
+msgstr ""
+
+msgid "Italian"
+msgstr ""
+
+msgid "Japanese"
+msgstr ""
+
+msgid "Khmer"
+msgstr ""
+
+msgid "Korean"
+msgstr ""
+
+msgid "Lithuanian"
+msgstr ""
+
+msgid "Norwegian"
+msgstr ""
+
+msgid "Polish"
+msgstr ""
+
+msgid "Portuguese"
+msgstr ""
+
+msgid "Portuguese (Brazil)"
+msgstr ""
+
+msgid "Russian"
+msgstr ""
+
+msgid "Serbian"
+msgstr ""
+
+msgid "Slovak"
+msgstr ""
+
+msgid "Slovak (qwerty)"
+msgstr ""
+
+msgid "Slovene"
+msgstr ""
+
+msgid "Spanish"
+msgstr ""
+
+msgid "Spanish (Latin America)"
+msgstr ""
+
+msgid "Swedish"
+msgstr ""
+
+msgid "Tajik"
+msgstr ""
+
+msgid "Turkish"
+msgstr ""
+
+msgid "Ukrainian"
+msgstr ""
+
+
+# video menu
+
+msgid "Text Mode"
+msgstr ""
+
+msgid "VESA"
+msgstr ""
+
+msgid "800 x 600"
+msgstr "800 times 600"
+
+msgid "1024 x 768"
+msgstr "1024 times 768"
+
+msgid "1280 x 1024"
+msgstr "1280 times 1024"
+
+msgid "1400 x 1050"
+msgstr "1400 times 1050"
+
+msgid "1600 x 1200"
+msgstr "1600 times 1200"
+
+
+# source menu
+
+msgid "CD-ROM"
+msgstr ""
+
+msgid "DVD"
+msgstr ""
+
+msgid "Hard Disk"
+msgstr ""
+
+msgid "SLP"
+msgstr ""
+
+msgid "FTP"
+msgstr ""
+
+msgid "HTTP"
+msgstr ""
+
+msgid "NFS"
+msgstr ""
+
+msgid "SMB / CIFS"
+msgstr ""
+
+msgid "Network Config"
+msgstr ""
+
+msgid "HTTP Proxy"
+msgstr ""
+
+
+# kernel menu
+
+msgid "Default"
+msgstr ""
+
+msgid "Safe Settings"
+msgstr ""
+
+msgid "No ACPI"
+msgstr ""
+
+msgid "No Local APIC"
+msgstr ""
+
+
+# driver menu
+
+msgid "Yes"
+msgstr ""
+
+msgid "No"
+msgstr ""
+
+msgid "File"
+msgstr ""
+
+msgid "URL"
+msgstr ""
+
+
+# arch menu
+
+msgid "x86"
+msgstr ""
+
+msgid "x86-64"
+msgstr ""
+
+
+# install sources
+
+msgid "FTP Installation"
+msgstr ""
+
+msgid "NFS Installation"
+msgstr ""
+
+msgid "HTTP Installation"
+msgstr ""
+
+msgid "SMB (Windows Share) Installation"
+msgstr ""
+
+msgid "Hard Disk Installation"
+msgstr ""
+
+msgid "Server\n"
+msgstr ""
+
+msgid "Directory\n"
+msgstr ""
+
+msgid "User (Anonymous Login If Empty)\n"
+msgstr ""
+
+msgid "User (Uses \"guest\" If Empty)\n"
+msgstr ""
+
+msgid "Password\n"
+msgstr ""
+
+msgid "Domain\n"
+msgstr ""
+
+msgid "Share\n"
+msgstr ""
+
+msgid "Disk Device (Scans All Disks If Empty)\n"
+msgstr ""
+
+msgid ""
+"To load driver updates directly from CD-ROM,\n"
+"enter the driver update file names (separated\n"
+"by commas ',') here:\n"
+msgstr ""
+
+msgid "Driver Update"
+msgstr ""
+
+msgid "Download Driver Update"
+msgstr ""
+
+msgid "Enter Driver Update URL\n"
+msgstr ""
+
+msgid "Exiting..."
+msgstr ""
+
+msgid ""
+"You are leaving the graphical boot menu and\n"
+"starting the text mode interface."
+msgstr ""
+
+msgid "Power Off"
+msgstr ""
+
+msgid "Halt the system now?"
+msgstr ""
+
+
+# proxy settings
+
+msgid "Server\n"
+msgstr ""
+
+msgid "Port\n"
+msgstr ""
+
+msgid "User\n"
+msgstr ""
+
+msgid "Password\n"
+msgstr ""
+
+
+# network config
+
+msgid "No Network"
+msgstr ""
+
+msgid "DHCP"
+msgstr ""
+
+msgid "Manual"
+msgstr ""
+
+
+# manual net config
+
+msgid "Manual Network Config"
+msgstr ""
+
+msgid "Host IP\n"
+msgstr ""
+
+msgid "Netmask\n(or use '/N' notation with Host IP)\n"
+msgstr "Netmask"
+
+msgid "Gateway\n"
+msgstr ""
+
+msgid "Nameservers (separated by ',')\n"
+msgstr "Nameservers"
+
+msgid "Domain Name\n"
+msgstr ""
+
+
+
+# ascii
+
+msgid " "
+msgstr "space"
+
+msgid "!"
+msgstr ""
+
+msgid "\""
+msgstr ""
+
+msgid "#"
+msgstr ""
+
+msgid "$"
+msgstr ""
+
+msgid "%"
+msgstr ""
+
+msgid "&"
+msgstr ""
+
+msgid "'"
+msgstr ""
+
+msgid "("
+msgstr ""
+
+msgid ")"
+msgstr ""
+
+msgid "*"
+msgstr ""
+
+msgid "+"
+msgstr ""
+
+msgid ","
+msgstr ""
+
+msgid "-"
+msgstr ""
+
+msgid "."
+msgstr ""
+
+msgid "/"
+msgstr ""
+
+msgid "0"
+msgstr ""
+
+msgid "1"
+msgstr ""
+
+msgid "2"
+msgstr ""
+
+msgid "3"
+msgstr ""
+
+msgid "4"
+msgstr ""
+
+msgid "5"
+msgstr ""
+
+msgid "6"
+msgstr ""
+
+msgid "7"
+msgstr ""
+
+msgid "8"
+msgstr ""
+
+msgid "9"
+msgstr ""
+
+msgid ":"
+msgstr ""
+
+msgid ";"
+msgstr ""
+
+msgid "<"
+msgstr ""
+
+msgid "="
+msgstr ""
+
+msgid ">"
+msgstr ""
+
+msgid "?"
+msgstr ""
+
+msgid "@"
+msgstr ""
+
+msgid "["
+msgstr ""
+
+msgid "\\"
+msgstr ""
+
+msgid "]"
+msgstr ""
+
+msgid "^"
+msgstr ""
+
+msgid "_"
+msgstr ""
+
+msgid "`"
+msgstr ""
+
+msgid "a"
+msgstr ""
+
+msgid "b"
+msgstr ""
+
+msgid "c"
+msgstr ""
+
+msgid "d"
+msgstr ""
+
+msgid "e"
+msgstr ""
+
+msgid "f"
+msgstr ""
+
+msgid "g"
+msgstr ""
+
+msgid "h"
+msgstr ""
+
+msgid "i"
+msgstr ""
+
+msgid "j"
+msgstr ""
+
+msgid "k"
+msgstr ""
+
+msgid "l"
+msgstr ""
+
+msgid "m"
+msgstr ""
+
+msgid "n"
+msgstr ""
+
+msgid "o"
+msgstr ""
+
+msgid "p"
+msgstr ""
+
+msgid "q"
+msgstr ""
+
+msgid "r"
+msgstr ""
+
+msgid "s"
+msgstr ""
+
+msgid "t"
+msgstr ""
+
+msgid "u"
+msgstr ""
+
+msgid "v"
+msgstr ""
+
+msgid "w"
+msgstr ""
+
+msgid "x"
+msgstr ""
+
+msgid "y"
+msgstr ""
+
+msgid "z"
+msgstr ""
+
+msgid "{"
+msgstr ""
+
+msgid "|"
+msgstr ""
+
+msgid "}"
+msgstr ""
+
+msgid "~"
+msgstr ""
+
diff --git a/themes/upstream/Makefile b/themes/upstream/Makefile
new file mode 120000
index 0000000..de7f369
--- /dev/null
+++ b/themes/upstream/Makefile
@@ -0,0 +1 @@
+../openSUSE/Makefile \ No newline at end of file
diff --git a/themes/upstream/config b/themes/upstream/config
new file mode 100644
index 0000000..96197de
--- /dev/null
+++ b/themes/upstream/config
@@ -0,0 +1,2 @@
+product=Linux
+based_on=openSUSE
diff --git a/themes/upstream/data-boot/back.jpg b/themes/upstream/data-boot/back.jpg
new file mode 100644
index 0000000..3a1ca5a
--- /dev/null
+++ b/themes/upstream/data-boot/back.jpg
Binary files differ
diff --git a/themes/upstream/data-install/back.jpg b/themes/upstream/data-install/back.jpg
new file mode 100644
index 0000000..3a1ca5a
--- /dev/null
+++ b/themes/upstream/data-install/back.jpg
Binary files differ
diff --git a/themes/upstream/data-install/welcome.jpg b/themes/upstream/data-install/welcome.jpg
new file mode 100644
index 0000000..3a1ca5a
--- /dev/null
+++ b/themes/upstream/data-install/welcome.jpg
Binary files differ