apply FSL(Flora Software License)
authorKim Kibum <kb0929.kim@samsung.com>
Fri, 8 Jun 2012 05:54:03 +0000 (14:54 +0900)
committerKim Kibum <kb0929.kim@samsung.com>
Fri, 8 Jun 2012 05:54:03 +0000 (14:54 +0900)
238 files changed:
ABOUT-NLS [new file with mode: 0755]
AUTHORS [new file with mode: 0755]
COPYING [new file with mode: 0644]
ChangeLog [new file with mode: 0755]
INSTALL [new file with mode: 0755]
LICENSE [new file with mode: 0755]
Makefile.am [new file with mode: 0755]
NEWS [new file with mode: 0755]
NOTICE [new file with mode: 0755]
README [new file with mode: 0755]
bootstrap [new file with mode: 0755]
configure.ac [new file with mode: 0755]
control.in [new file with mode: 0755]
data/Makefile.am [new file with mode: 0755]
data/ise-default.help [new file with mode: 0755]
data/ise-default.png [new file with mode: 0755]
data/pixmaps/04_textinput_bubble_umlaut_bg.png [new file with mode: 0755]
data/pixmaps/04_textinput_symbol_arrow_left.png [new file with mode: 0755]
data/pixmaps/04_textinput_symbol_arrow_left_press.png [new file with mode: 0755]
data/pixmaps/04_textinput_symbol_arrow_right.png [new file with mode: 0755]
data/pixmaps/04_textinput_symbol_arrow_right_press.png [new file with mode: 0755]
data/pixmaps/Makefile.am [new file with mode: 0755]
data/pixmaps/fontprop.dat [new file with mode: 0755]
data/pixmaps/keypad_eng_punctuation.png [new file with mode: 0755]
data/pixmaps/language_icon_port.png [new file with mode: 0755]
data/pixmaps/language_icon_port_disable.png [new file with mode: 0755]
data/pixmaps/language_icon_port_grey.png [new file with mode: 0755]
data/pixmaps/qwerty_icon_symbol.png [new file with mode: 0755]
data/pixmaps/symbol_icon_port.png [new file with mode: 0755]
data/pixmaps/symbol_icon_thai_port.png [new file with mode: 0755]
data/pixmaps/textinput_bottom_button_function.png [new file with mode: 0755]
data/pixmaps/textinput_bottom_button_nml.png [new file with mode: 0755]
data/pixmaps/textinput_bottom_button_press.png [new file with mode: 0755]
data/pixmaps/textinput_button_symbol_left.png [new file with mode: 0755]
data/pixmaps/textinput_button_symbol_left_press.png [new file with mode: 0755]
data/pixmaps/textinput_button_symbol_right.png [new file with mode: 0755]
data/pixmaps/textinput_button_symbol_right_press.png [new file with mode: 0755]
data/pixmaps/textinput_french_icon_clear.png [new file with mode: 0755]
data/pixmaps/textinput_french_icon_shift_01.png [new file with mode: 0755]
data/pixmaps/textinput_french_icon_shift_01_disable.png [new file with mode: 0755]
data/pixmaps/textinput_french_icon_shift_02.png [new file with mode: 0755]
data/pixmaps/textinput_french_icon_shift_03.png [new file with mode: 0755]
data/pixmaps/textinput_icon_arrow_down.png [new file with mode: 0755]
data/pixmaps/textinput_icon_arrow_left.png [new file with mode: 0755]
data/pixmaps/textinput_icon_arrow_right.png [new file with mode: 0755]
data/pixmaps/textinput_icon_arrow_up.png [new file with mode: 0755]
data/pixmaps/textinput_icon_space.png [new file with mode: 0755]
data/pixmaps/textinput_icon_space_email.png [new file with mode: 0755]
data/pixmaps/textinput_icon_space_email_press.png [new file with mode: 0755]
data/pixmaps/textinput_icon_space_press.png [new file with mode: 0755]
data/pixmaps/textinput_panel_bg.png [new file with mode: 0755]
data/pixmaps/textinput_panel_dimming.png [new file with mode: 0755]
data/pixmaps/textinput_popup_bg1.png [new file with mode: 0755]
data/pixmaps/textinput_popup_bg2.png [new file with mode: 0755]
data/pixmaps/textinput_popup_bg3.png [new file with mode: 0755]
data/pixmaps/textinput_popup_button_function.png [new file with mode: 0755]
data/pixmaps/textinput_popup_button_nml.png [new file with mode: 0755]
data/pixmaps/textinput_popup_button_press.png [new file with mode: 0755]
data/pixmaps/textinput_qwerty_button_capslock_press.png [new file with mode: 0755]
data/pixmaps/textinput_qwerty_button_function.png [new file with mode: 0755]
data/pixmaps/textinput_qwerty_button_nml.png [new file with mode: 0755]
data/pixmaps/textinput_qwerty_button_press.png [new file with mode: 0755]
data/pixmaps/textinput_qwerty_icon_clear.png [new file with mode: 0755]
data/pixmaps/textinput_qwerty_icon_enter.png [new file with mode: 0755]
data/pixmaps/textinput_qwerty_icon_enter_disabled.png [new file with mode: 0755]
data/pixmaps/textinput_qwerty_icon_shift_01.png [new file with mode: 0755]
data/pixmaps/textinput_qwerty_icon_shift_01_disable.png [new file with mode: 0755]
data/pixmaps/textinput_qwerty_icon_shift_02.png [new file with mode: 0755]
data/pixmaps/textinput_qwerty_icon_shift_03.png [new file with mode: 0755]
data/pixmaps/textinput_russian_icon_clear.png [new file with mode: 0755]
data/pixmaps/textinput_russian_icon_shift_01.png [new file with mode: 0755]
data/pixmaps/textinput_russian_icon_shift_01_disable.png [new file with mode: 0755]
data/pixmaps/textinput_russian_icon_shift_02.png [new file with mode: 0755]
data/pixmaps/textinput_russian_icon_shift_03.png [new file with mode: 0755]
debian/changelog [new file with mode: 0755]
debian/compat [new file with mode: 0755]
debian/control [new file with mode: 0755]
debian/copyright [new file with mode: 0755]
debian/docs [new file with mode: 0755]
debian/ise-default.install.in [new file with mode: 0755]
debian/ise-default.postinst [new file with mode: 0755]
debian/rules [new file with mode: 0755]
ltmain.sh [new file with mode: 0755]
m4/Makefile.am [new file with mode: 0755]
m4/argz.m4 [new file with mode: 0755]
m4/codeset.m4 [new file with mode: 0755]
m4/gettext.m4 [new file with mode: 0755]
m4/glibc21.m4 [new file with mode: 0755]
m4/iconv.m4 [new file with mode: 0755]
m4/intdiv0.m4 [new file with mode: 0755]
m4/intltool.m4 [new file with mode: 0755]
m4/intmax.m4 [new file with mode: 0755]
m4/inttypes-pri.m4 [new file with mode: 0755]
m4/inttypes.m4 [new file with mode: 0755]
m4/inttypes_h.m4 [new file with mode: 0755]
m4/isc-posix.m4 [new file with mode: 0755]
m4/lcmessage.m4 [new file with mode: 0755]
m4/lib-ld.m4 [new file with mode: 0755]
m4/lib-link.m4 [new file with mode: 0755]
m4/lib-prefix.m4 [new file with mode: 0755]
m4/libtool.m4 [new file with mode: 0755]
m4/longdouble.m4 [new file with mode: 0755]
m4/longlong.m4 [new file with mode: 0755]
m4/ltdl.m4 [new file with mode: 0755]
m4/ltoptions.m4 [new file with mode: 0755]
m4/ltsugar.m4 [new file with mode: 0755]
m4/ltversion.m4 [new file with mode: 0755]
m4/lt~obsolete.m4 [new file with mode: 0755]
m4/nls.m4 [new file with mode: 0755]
m4/po.m4 [new file with mode: 0755]
m4/printf-posix.m4 [new file with mode: 0755]
m4/progtest.m4 [new file with mode: 0755]
m4/signed.m4 [new file with mode: 0755]
m4/size_max.m4 [new file with mode: 0755]
m4/stdint_h.m4 [new file with mode: 0755]
m4/uintmax_t.m4 [new file with mode: 0755]
m4/ulonglong.m4 [new file with mode: 0755]
m4/wchar_t.m4 [new file with mode: 0755]
m4/wint_t.m4 [new file with mode: 0755]
m4/xsize.m4 [new file with mode: 0755]
mcf/gwes/efl/mcfevents-efl.cpp [new file with mode: 0755]
mcf/gwes/efl/mcfevents-efl.h [new file with mode: 0755]
mcf/gwes/efl/mcfgraphics-efl.cpp [new file with mode: 0755]
mcf/gwes/efl/mcfgraphics-efl.h [new file with mode: 0755]
mcf/gwes/efl/mcfwindows-efl.cpp [new file with mode: 0755]
mcf/gwes/efl/mcfwindows-efl.h [new file with mode: 0755]
mcf/gwes/gtk/mcfevents-gtk.cpp [new file with mode: 0755]
mcf/gwes/gtk/mcfevents-gtk.h [new file with mode: 0755]
mcf/gwes/gtk/mcfgraphics-cairo.cpp [new file with mode: 0755]
mcf/gwes/gtk/mcfgraphics-cairo.h [new file with mode: 0755]
mcf/gwes/gtk/mcfgraphics-gtk.cpp [new file with mode: 0755]
mcf/gwes/gtk/mcfgraphics-gtk.h [new file with mode: 0755]
mcf/gwes/gtk/mcfwindows-gtk.cpp [new file with mode: 0755]
mcf/gwes/gtk/mcfwindows-gtk.h [new file with mode: 0755]
mcf/gwes/win32/mcfevents-win32.cpp [new file with mode: 0755]
mcf/gwes/win32/mcfevents-win32.h [new file with mode: 0755]
mcf/gwes/win32/mcfgraphics-win32.cpp [new file with mode: 0755]
mcf/gwes/win32/mcfgraphics-win32.h [new file with mode: 0755]
mcf/gwes/win32/mcfwindows-win32.cpp [new file with mode: 0755]
mcf/gwes/win32/mcfwindows-win32.h [new file with mode: 0755]
mcf/include/mcf.h [new file with mode: 0755]
mcf/include/mcfactionstate.h [new file with mode: 0755]
mcf/include/mcfconfig.h [new file with mode: 0755]
mcf/include/mcfcontext.h [new file with mode: 0755]
mcf/include/mcfcontroller.h [new file with mode: 0755]
mcf/include/mcfcore.h [new file with mode: 0755]
mcf/include/mcfdebug.h [new file with mode: 0755]
mcf/include/mcferroradjustment.h [new file with mode: 0755]
mcf/include/mcfeventcallback.h [new file with mode: 0755]
mcf/include/mcfevents.h [new file with mode: 0755]
mcf/include/mcffeedback.h [new file with mode: 0755]
mcf/include/mcffontproxy.h [new file with mode: 0755]
mcf/include/mcfgraphics.h [new file with mode: 0755]
mcf/include/mcfgwes.h [new file with mode: 0755]
mcf/include/mcfimageproxy.h [new file with mode: 0755]
mcf/include/mcfkeydefines.h [new file with mode: 0755]
mcf/include/mcfresourcecache.h [new file with mode: 0755]
mcf/include/mcfstructs.h [new file with mode: 0755]
mcf/include/mcftypes.h [new file with mode: 0755]
mcf/include/mcfuibuilder.h [new file with mode: 0755]
mcf/include/mcfutils.h [new file with mode: 0755]
mcf/include/mcfversion.h [new file with mode: 0755]
mcf/include/mcfwindows.h [new file with mode: 0755]
mcf/mcfactionstate.cpp [new file with mode: 0755]
mcf/mcfcontext.cpp [new file with mode: 0755]
mcf/mcfcontroller.cpp [new file with mode: 0755]
mcf/mcfcore.cpp [new file with mode: 0755]
mcf/mcfdebug.cpp [new file with mode: 0755]
mcf/mcferroradjustment.cpp [new file with mode: 0755]
mcf/mcfevents.cpp [new file with mode: 0755]
mcf/mcffeedback.cpp [new file with mode: 0755]
mcf/mcffontproxy.cpp [new file with mode: 0755]
mcf/mcfgraphics.cpp [new file with mode: 0755]
mcf/mcfgwes.cpp [new file with mode: 0755]
mcf/mcfimageproxy.cpp [new file with mode: 0755]
mcf/mcfresourcecache.cpp [new file with mode: 0755]
mcf/mcfuibuilder.cpp [new file with mode: 0755]
mcf/mcfutils.cpp [new file with mode: 0755]
mcf/mcfwindows.cpp [new file with mode: 0755]
mcf/utils/linux/mcfutils-linux.cpp [new file with mode: 0755]
mcf/utils/win32/mcfutils-win32.cpp [new file with mode: 0755]
missing [new file with mode: 0755]
mkinstalldirs [new file with mode: 0755]
packaging/ise-default.spec [new file with mode: 0755]
po/Makefile.in.in [new file with mode: 0755]
po/POTFILES.in [new file with mode: 0755]
po/de_DE.po [new file with mode: 0755]
po/el_GR.po [new file with mode: 0755]
po/en.po [new file with mode: 0755]
po/es_ES.po [new file with mode: 0755]
po/fr_FR.po [new file with mode: 0755]
po/it_IT.po [new file with mode: 0755]
po/ja_JP.po [new file with mode: 0755]
po/ko_KR.po [new file with mode: 0755]
po/nl_NL.po [new file with mode: 0755]
po/pt_PT.po [new file with mode: 0755]
po/ru_RU.po [new file with mode: 0755]
po/tr_TR.po [new file with mode: 0755]
po/update-po.sh [new file with mode: 0755]
po/zh_CN.po [new file with mode: 0755]
po/zh_HK.po [new file with mode: 0755]
po/zh_TW.po [new file with mode: 0755]
res/mcfresource-emoticon-popup.h [new file with mode: 0755]
res/mcfresource-popup.h [new file with mode: 0755]
res/mcfresource-port-qty-dutch.h [new file with mode: 0755]
res/mcfresource-port-qty-email.h [new file with mode: 0755]
res/mcfresource-port-qty-english.h [new file with mode: 0755]
res/mcfresource-port-qty-french.h [new file with mode: 0755]
res/mcfresource-port-qty-german.h [new file with mode: 0755]
res/mcfresource-port-qty-greek.h [new file with mode: 0755]
res/mcfresource-port-qty-italian.h [new file with mode: 0755]
res/mcfresource-port-qty-portuguese.h [new file with mode: 0755]
res/mcfresource-port-qty-russian.h [new file with mode: 0755]
res/mcfresource-port-qty-spanish.h [new file with mode: 0755]
res/mcfresource-port-qty-sym1.h [new file with mode: 0755]
res/mcfresource-port-qty-sym2.h [new file with mode: 0755]
res/mcfresource-port-qty-sym3.h [new file with mode: 0755]
res/mcfresource-port-qty-sym4.h [new file with mode: 0755]
res/mcfresource-port-qty-turkish.h [new file with mode: 0755]
res/mcfresource-port-qty-url.h [new file with mode: 0755]
res/mcfresource.cpp [new file with mode: 0755]
res/mcfresource.h [new file with mode: 0755]
res/mcfresourcekeys.h [new file with mode: 0755]
src/Makefile.am [new file with mode: 0755]
src/efl_ise_setup.cpp [new file with mode: 0755]
src/include/eflimdebug.h [new file with mode: 0755]
src/include/ise-default-setting.h [new file with mode: 0755]
src/include/ise.h [new file with mode: 0755]
src/include/isedata.h [new file with mode: 0755]
src/include/languagesetting.h [new file with mode: 0755]
src/include/perf_test.h [new file with mode: 0755]
src/include/strtbl.h [new file with mode: 0755]
src/include/window_slide_animator.h [new file with mode: 0755]
src/ise-default-setting.cpp [new file with mode: 0755]
src/ise.cpp [new file with mode: 0755]
src/isemain.cpp [new file with mode: 0755]
src/languagesetting.cpp [new file with mode: 0755]
src/window_slide_animator.cpp [new file with mode: 0755]

diff --git a/ABOUT-NLS b/ABOUT-NLS
new file mode 100755 (executable)
index 0000000..2f50c66
--- /dev/null
+++ b/ABOUT-NLS
@@ -0,0 +1,768 @@
+Notes on the Free Translation Project
+*************************************
+
+Free software is going international!  The Free Translation Project is
+a way to get maintainers of free software, translators, and users all
+together, so that will gradually become able to speak many languages.
+A few packages already provide translations for their messages.
+
+   If you found this `ABOUT-NLS' file inside a distribution, you may
+assume that the distributed package does use GNU `gettext' internally,
+itself available at your nearest GNU archive site.  But you do _not_
+need to install GNU `gettext' prior to configuring, installing or using
+this package with messages translated.
+
+   Installers will find here some useful hints.  These notes also
+explain how users should proceed for getting the programs to use the
+available translations.  They tell how people wanting to contribute and
+work at translations should contact the appropriate team.
+
+   When reporting bugs in the `intl/' directory or bugs which may be
+related to internationalization, you should tell about the version of
+`gettext' which is used.  The information can be found in the
+`intl/VERSION' file, in internationalized packages.
+
+Quick configuration advice
+==========================
+
+If you want to exploit the full power of internationalization, you
+should configure it using
+
+     ./configure --with-included-gettext
+
+to force usage of internationalizing routines provided within this
+package, despite the existence of internationalizing capabilities in the
+operating system where this package is being installed.  So far, only
+the `gettext' implementation in the GNU C library version 2 provides as
+many features (such as locale alias, message inheritance, automatic
+charset conversion or plural form handling) as the implementation here.
+It is also not possible to offer this additional functionality on top
+of a `catgets' implementation.  Future versions of GNU `gettext' will
+very likely convey even more functionality.  So it might be a good idea
+to change to GNU `gettext' as soon as possible.
+
+   So you need _not_ provide this option if you are using GNU libc 2 or
+you have installed a recent copy of the GNU gettext package with the
+included `libintl'.
+
+INSTALL Matters
+===============
+
+Some packages are "localizable" when properly installed; the programs
+they contain can be made to speak your own native language.  Most such
+packages use GNU `gettext'.  Other packages have their own ways to
+internationalization, predating GNU `gettext'.
+
+   By default, this package will be installed to allow translation of
+messages.  It will automatically detect whether the system already
+provides the GNU `gettext' functions.  If not, the GNU `gettext' own
+library will be used.  This library is wholly contained within this
+package, usually in the `intl/' subdirectory, so prior installation of
+the GNU `gettext' package is _not_ required.  Installers may use
+special options at configuration time for changing the default
+behaviour.  The commands:
+
+     ./configure --with-included-gettext
+     ./configure --disable-nls
+
+will respectively bypass any pre-existing `gettext' to use the
+internationalizing routines provided within this package, or else,
+_totally_ disable translation of messages.
+
+   When you already have GNU `gettext' installed on your system and run
+configure without an option for your new package, `configure' will
+probably detect the previously built and installed `libintl.a' file and
+will decide to use this.  This might be not what is desirable.  You
+should use the more recent version of the GNU `gettext' library.  I.e.
+if the file `intl/VERSION' shows that the library which comes with this
+package is more recent, you should use
+
+     ./configure --with-included-gettext
+
+to prevent auto-detection.
+
+   The configuration process will not test for the `catgets' function
+and therefore it will not be used.  The reason is that even an
+emulation of `gettext' on top of `catgets' could not provide all the
+extensions of the GNU `gettext' library.
+
+   Internationalized packages have usually many `po/LL.po' files, where
+LL gives an ISO 639 two-letter code identifying the language.  Unless
+translations have been forbidden at `configure' time by using the
+`--disable-nls' switch, all available translations are installed
+together with the package.  However, the environment variable `LINGUAS'
+may be set, prior to configuration, to limit the installed set.
+`LINGUAS' should then contain a space separated list of two-letter
+codes, stating which languages are allowed.
+
+Using This Package
+==================
+
+As a user, if your language has been installed for this package, you
+only have to set the `LANG' environment variable to the appropriate
+`LL_CC' combination.  Here `LL' is an ISO 639 two-letter language code,
+and `CC' is an ISO 3166 two-letter country code.  For example, let's
+suppose that you speak German and live in Germany.  At the shell
+prompt, merely execute `setenv LANG de_DE' (in `csh'),
+`export LANG; LANG=de_DE' (in `sh') or `export LANG=de_DE' (in `bash').
+This can be done from your `.login' or `.profile' file, once and for
+all.
+
+   You might think that the country code specification is redundant.
+But in fact, some languages have dialects in different countries.  For
+example, `de_AT' is used for Austria, and `pt_BR' for Brazil.  The
+country code serves to distinguish the dialects.
+
+   The locale naming convention of `LL_CC', with `LL' denoting the
+language and `CC' denoting the country, is the one use on systems based
+on GNU libc.  On other systems, some variations of this scheme are
+used, such as `LL' or `LL_CC.ENCODING'.  You can get the list of
+locales supported by your system for your country by running the command
+`locale -a | grep '^LL''.
+
+   Not all programs have translations for all languages.  By default, an
+English message is shown in place of a nonexistent translation.  If you
+understand other languages, you can set up a priority list of languages.
+This is done through a different environment variable, called
+`LANGUAGE'.  GNU `gettext' gives preference to `LANGUAGE' over `LANG'
+for the purpose of message handling, but you still need to have `LANG'
+set to the primary language; this is required by other parts of the
+system libraries.  For example, some Swedish users who would rather
+read translations in German than English for when Swedish is not
+available, set `LANGUAGE' to `sv:de' while leaving `LANG' to `sv_SE'.
+
+   Special advice for Norwegian users: The language code for Norwegian
+bokma*l changed from `no' to `nb' recently (in 2003).  During the
+transition period, while some message catalogs for this language are
+installed under `nb' and some older ones under `no', it's recommended
+for Norwegian users to set `LANGUAGE' to `nb:no' so that both newer and
+older translations are used.
+
+   In the `LANGUAGE' environment variable, but not in the `LANG'
+environment variable, `LL_CC' combinations can be abbreviated as `LL'
+to denote the language's main dialect.  For example, `de' is equivalent
+to `de_DE' (German as spoken in Germany), and `pt' to `pt_PT'
+(Portuguese as spoken in Portugal) in this context.
+
+Translating Teams
+=================
+
+For the Free Translation Project to be a success, we need interested
+people who like their own language and write it well, and who are also
+able to synergize with other translators speaking the same language.
+Each translation team has its own mailing list.  The up-to-date list of
+teams can be found at the Free Translation Project's homepage,
+`http://www.iro.umontreal.ca/contrib/po/HTML/', in the "National teams"
+area.
+
+   If you'd like to volunteer to _work_ at translating messages, you
+should become a member of the translating team for your own language.
+The subscribing address is _not_ the same as the list itself, it has
+`-request' appended.  For example, speakers of Swedish can send a
+message to `sv-request@li.org', having this message body:
+
+     subscribe
+
+   Keep in mind that team members are expected to participate
+_actively_ in translations, or at solving translational difficulties,
+rather than merely lurking around.  If your team does not exist yet and
+you want to start one, or if you are unsure about what to do or how to
+get started, please write to `translation@iro.umontreal.ca' to reach the
+coordinator for all translator teams.
+
+   The English team is special.  It works at improving and uniformizing
+the terminology in use.  Proven linguistic skill are praised more than
+programming skill, here.
+
+Available Packages
+==================
+
+Languages are not equally supported in all packages.  The following
+matrix shows the current state of internationalization, as of January
+2004.  The matrix shows, in regard of each package, for which languages
+PO files have been submitted to translation coordination, with a
+translation percentage of at least 50%.
+
+     Ready PO files       af am ar az be bg bs ca cs da de el en en_GB eo es
+                        +----------------------------------------------------+
+     a2ps               |             []             [] [] []                |
+     aegis              |                               ()                   |
+     ant-phone          |                               ()                   |
+     anubis             |                                                    |
+     ap-utils           |                                                    |
+     aspell             |             []                                     |
+     bash               |                      []       []             [] [] |
+     batchelor          |                                                    |
+     bfd                |                            []                   [] |
+     binutils           |                            []                   [] |
+     bison              |                            [] []                [] |
+     bluez-pin          | []                      []                   []    |
+     clisp              |                                                    |
+     clisp              |                               []    []          [] |
+     console-tools      |                         []    []                   |
+     coreutils          |                      []    [] []                [] |
+     cpio               |                            [] []                [] |
+     darkstat           |                []          ()                   [] |
+     diffutils          |                      [] [] [] [] []          [] [] |
+     e2fsprogs          |                         []    []                [] |
+     enscript           |                      []    [] []        []         |
+     error              |                      []    [] []        []      [] |
+     fetchmail          |                      [] () [] [] []             [] |
+     fileutils          |                            [] []                [] |
+     findutils          |             []       []    [] [] []          [] [] |
+     flex               |                      []    [] []                [] |
+     fslint             |                                                    |
+     gas                |                                                 [] |
+     gawk               |                      []    [] []                [] |
+     gbiff              |                               []                   |
+     gcal               |                      []                            |
+     gcc                |                            []                   [] |
+     gettext            |             []       []    [] []                [] |
+     gettext-examples   | []                   []       []                [] |
+     gettext-runtime    |             []       []    [] []                [] |
+     gettext-tools      |                      []       []                [] |
+     gimp-print         |                         [] [] []        []      [] |
+     gliv               |                                                    |
+     glunarclock        |                            [] []                   |
+     gnubiff            |                               []                   |
+     gnucash            |                         []    ()        []      [] |
+     gnucash-glossary   |                            [] ()                [] |
+     gnupg              |                      [] ()    [] []          [] [] |
+     gpe-aerial         |                         []                         |
+     gpe-beam           |                         []    []                   |
+     gpe-calendar       |                         []    []                   |
+     gpe-clock          |                         []    []                   |
+     gpe-conf           |                         []    []                   |
+     gpe-contacts       |                         []    []                   |
+     gpe-edit           |                         []                         |
+     gpe-go             |                         []                         |
+     gpe-login          |                         []    []                   |
+     gpe-ownerinfo      |                         []    []                   |
+     gpe-sketchbook     |                         []    []                   |
+     gpe-su             |                         []    []                   |
+     gpe-taskmanager    |                         []    []                   |
+     gpe-timesheet      |                         []                         |
+     gpe-today          |                         []    []                   |
+     gpe-todo           |                         []    []                   |
+     gphoto2            |                         [] [] []                [] |
+     gprof              |                            [] []                [] |
+     gpsdrive           |                               ()    ()          () |
+     gramadoir          |                               []                   |
+     grep               |             [] []    []       [] []             [] |
+     gretl              |                                                 [] |
+     gtick              | []                            ()                   |
+     hello              |                      []    [] [] []          [] [] |
+     id-utils           |                            [] []                   |
+     indent             |                      []       []             [] [] |
+     iso_3166           |          []    [] [] [] [] [] [] []          [] [] |
+     iso_3166_1         |                      [] [] [] [] []             [] |
+     iso_3166_2         |                                                    |
+     iso_3166_3         |                               []                   |
+     iso_4217           |                      []    [] []                [] |
+     iso_639            |                                                    |
+     jpilot             |                         [] []                   [] |
+     jtag               |                                                    |
+     jwhois             |                                                 [] |
+     kbd                |                         [] [] [] []             [] |
+     latrine            |                               ()                   |
+     ld                 |                            []                   [] |
+     libc               |                      [] [] [] [] []             [] |
+     libgpewidget       |                         []    []                   |
+     libiconv           |                      []    [] []             [] [] |
+     lifelines          |                            [] ()                   |
+     lilypond           |                               []                   |
+     lingoteach         |                                                    |
+     lingoteach_lessons |                               ()                () |
+     lynx               |                      [] [] [] []                   |
+     m4                 |                         [] [] [] []                |
+     mailutils          |                      []                         [] |
+     make               |                            [] []                [] |
+     man-db             |                      [] () [] []                () |
+     minicom            |                         []    []                [] |
+     mysecretdiary      |                            [] []                [] |
+     nano               |                      [] () [] []                [] |
+     nano_1_0           |                      [] () [] []                [] |
+     opcodes            |                                                 [] |
+     parted             |                      [] [] [] []                [] |
+     ptx                |                      []    [] []             [] [] |
+     python             |                                                    |
+     radius             |                                                 [] |
+     recode             |             []       []    [] [] []          [] [] |
+     rpm                |                         [] []                      |
+     screem             |                                                    |
+     scrollkeeper       |             []       [] [] [] []                [] |
+     sed                | []                   []    [] []             [] [] |
+     sh-utils           |                            [] []                [] |
+     shared-mime-info   |                                                    |
+     sharutils          |                      [] [] [] [] []             [] |
+     silky              |                               ()                   |
+     skencil            |                            [] ()                [] |
+     sketch             |                            [] ()                [] |
+     soundtracker       |                            [] []                [] |
+     sp                 |                               []                   |
+     tar                |                         [] [] []                [] |
+     texinfo            |                            [] []             []    |
+     textutils          |                      []    [] []                [] |
+     tin                |                               ()        ()         |
+     tp-robot           |                                                    |
+     tuxpaint           |                      [] [] [] [] []     []      [] |
+     unicode-han-tra... |                                                    |
+     unicode-transla... |                                                    |
+     util-linux         |                      [] [] [] []                [] |
+     vorbis-tools       |             []          [] []                   [] |
+     wastesedge         |                               ()                   |
+     wdiff              |                      []    [] []                [] |
+     wget               |                []    []    [] [] []             [] |
+     xchat              |                      []       [] []             [] |
+     xfree86_xkb_xml    |                         [] []                      |
+     xpad               |                                                 [] |
+                        +----------------------------------------------------+
+                          af am ar az be bg bs ca cs da de el en en_GB eo es
+                           4  0  0  1  9  4  1 40 41 60 78 17  1   5   13 68
+     
+                          et eu fa fi fr ga gl he hr hu id is it ja ko lg
+                        +-------------------------------------------------+
+     a2ps               | []       [] []                      ()    ()    |
+     aegis              |                                                 |
+     ant-phone          |             []                                  |
+     anubis             |             []                                  |
+     ap-utils           |             []                                  |
+     aspell             |             [] []                               |
+     bash               |             []             []                   |
+     batchelor          |             [] []                               |
+     bfd                |             []                                  |
+     binutils           |             []                         []       |
+     bison              | []          []                []    []          |
+     bluez-pin          |          [] [] []          [] []                |
+     clisp              |                                                 |
+     clisp              |             []                                  |
+     console-tools      |                                                 |
+     coreutils          | []       [] [] []                   [] []       |
+     cpio               |             []    []       []             []    |
+     darkstat           |             () []          [] []                |
+     diffutils          |          [] []    [] []    [] []       []       |
+     e2fsprogs          |                                                 |
+     enscript           |             []          []                      |
+     error              |          [] [] []          []                   |
+     fetchmail          |                                        []       |
+     fileutils          | []          [] []          []       [] []       |
+     findutils          | []       [] [] [] []    [] [] []    [] [] []    |
+     flex               |             [] []                         []    |
+     fslint             |             []                                  |
+     gas                |             []                                  |
+     gawk               |             []       []                []       |
+     gbiff              |             []                                  |
+     gcal               |             []                                  |
+     gcc                |             []                                  |
+     gettext            |             []                         [] []    |
+     gettext-examples   |             []                         []       |
+     gettext-runtime    |          [] []                []       [] []    |
+     gettext-tools      |             []                         [] []    |
+     gimp-print         |             []                         []       |
+     gliv               |             ()                                  |
+     glunarclock        |          []    [] []       []                   |
+     gnubiff            |             []                                  |
+     gnucash            |             ()                      []          |
+     gnucash-glossary   |                                     []          |
+     gnupg              | []       [] []    []          []    [] []       |
+     gpe-aerial         |             []                                  |
+     gpe-beam           |             []                                  |
+     gpe-calendar       |             []             [] []                |
+     gpe-clock          |             []                                  |
+     gpe-conf           |             []                                  |
+     gpe-contacts       |             []             []                   |
+     gpe-edit           |             []                []                |
+     gpe-go             |             []                                  |
+     gpe-login          |             []             []                   |
+     gpe-ownerinfo      |             []             [] []                |
+     gpe-sketchbook     |             []                                  |
+     gpe-su             |             []                                  |
+     gpe-taskmanager    |             []                                  |
+     gpe-timesheet      |             [] []             []                |
+     gpe-today          |             [] []                               |
+     gpe-todo           |             []                []                |
+     gphoto2            |             []             []          []       |
+     gprof              |             []                []                |
+     gpsdrive           |             ()                      () ()       |
+     gramadoir          |             [] []                               |
+     grep               | []       [] [] [] [] [] [] [] []    [] []       |
+     gretl              |             []                      []          |
+     gtick              |          [] [] []                               |
+     hello              | []    [] [] [] [] [] [] [] [] []    [] [] []    |
+     id-utils           |             []             [] []    []          |
+     indent             | []       [] [] [] []       [] []    [] []       |
+     iso_3166           |    []       [] []       [] [] []    []          |
+     iso_3166_1         |    []       [] []          [] []                |
+     iso_3166_2         |                                                 |
+     iso_3166_3         |                                                 |
+     iso_4217           | []          []    []       []       [] []       |
+     iso_639            |                                                 |
+     jpilot             |             []                         ()       |
+     jtag               |             []                                  |
+     jwhois             |             []             [] []    []          |
+     kbd                |             []                                  |
+     latrine            |             []                                  |
+     ld                 |             []                                  |
+     libc               |          [] []    []       []          [] []    |
+     libgpewidget       |             [] []          [] []                |
+     libiconv           | []       [] [] [] []    [] [] []    []          |
+     lifelines          |             ()                                  |
+     lilypond           |             []                                  |
+     lingoteach         |             []                []                |
+     lingoteach_lessons |                                                 |
+     lynx               | []                         []       [] []       |
+     m4                 |             []    []          []       []       |
+     mailutils          |                                                 |
+     make               |             []    [] [] []             [] []    |
+     man-db             |                                     () ()       |
+     minicom            |          [] []             []          []       |
+     mysecretdiary      |             []                []                |
+     nano               |             []    []          []    []          |
+     nano_1_0           |             []    []          []    []          |
+     opcodes            |             []                                  |
+     parted             |             []    []                   []       |
+     ptx                | []       [] [] [] []       [] []                |
+     python             |                                                 |
+     radius             |             []                                  |
+     recode             |             []    [] []    [] []    []          |
+     rpm                |             []                            []    |
+     screem             |                                                 |
+     scrollkeeper       |                            []                   |
+     sed                | []       [] [] [] []       [] []    [] []       |
+     sh-utils           | []       [] [] []          []       [] []       |
+     shared-mime-info   |          [] []             []                   |
+     sharutils          | []          []    []       []          []       |
+     silky              |          () []             ()       ()          |
+     skencil            |             []                                  |
+     sketch             |             []                                  |
+     soundtracker       |             []                      []          |
+     sp                 |             []                         ()       |
+     tar                | []       [] []    []    [] [] []    [] []       |
+     texinfo            |             []       [] []             []       |
+     textutils          |             [] [] []       []          [] []    |
+     tin                | []          ()                                  |
+     tp-robot           |             []                                  |
+     tuxpaint           |          [] []       []    [] [] [] [] [] []    |
+     unicode-han-tra... |                                                 |
+     unicode-transla... |             [] []                               |
+     util-linux         | []       [] []             []       () []       |
+     vorbis-tools       |             []                                  |
+     wastesedge         |             ()                                  |
+     wdiff              | []          [] [] []       [] []                |
+     wget               | []       [] []    []    [] []          []       |
+     xchat              | []       [] []                                  |
+     xfree86_xkb_xml    |             []             []                   |
+     xpad               |             [] []                               |
+                        +-------------------------------------------------+
+                          et eu fa fi fr ga gl he hr hu id is it ja ko lg
+                          22  2  1 26 106 28 24  8 10 41 33  1 26 33 12  0
+     
+                          lt lv mk mn ms mt nb nl nn no nso pl pt pt_BR ro ru
+                        +-----------------------------------------------------+
+     a2ps               |             []       []    ()     ()     []   [] [] |
+     aegis              |                      ()                       () () |
+     ant-phone          |                      []                       []    |
+     anubis             |             []    [] []           []          [] [] |
+     ap-utils           |                      []           ()          []    |
+     aspell             |                      []                             |
+     bash               |                                          []   [] [] |
+     batchelor          |                                               []    |
+     bfd                |                                               []    |
+     binutils           |                                                  [] |
+     bison              |             []       []                  []   [] [] |
+     bluez-pin          |                      []           []          []    |
+     clisp              |                                                     |
+     clisp              |                      []                             |
+     console-tools      |                                                  [] |
+     coreutils          |                                   []             [] |
+     cpio               |                      []           []     []   [] [] |
+     darkstat           |             []       []                  []   []    |
+     diffutils          |             []       []           []     []   [] [] |
+     e2fsprogs          |                                   []                |
+     enscript           |                      []                  []   [] [] |
+     error              |                      []                  []   []    |
+     fetchmail          |                      []           []     ()      [] |
+     fileutils          |                                   []          [] [] |
+     findutils          |                      []           []     []   [] [] |
+     flex               |                                   []     []   [] [] |
+     fslint             |                      []                       []    |
+     gas                |                                                     |
+     gawk               |                                   []     []   []    |
+     gbiff              |                      []                       []    |
+     gcal               |                                                     |
+     gcc                |                                                     |
+     gettext            |                                   []          [] [] |
+     gettext-examples   |                      []           []          []    |
+     gettext-runtime    |                      []           []          [] [] |
+     gettext-tools      |                                   []          []    |
+     gimp-print         |                      []                             |
+     gliv               |                      []                  []   []    |
+     glunarclock        |             []       []                       [] [] |
+     gnubiff            |                      []                             |
+     gnucash            |                      []              []  ()      [] |
+     gnucash-glossary   |                      []              []             |
+     gnupg              |                                               []    |
+     gpe-aerial         |                      []              []       [] [] |
+     gpe-beam           |                      []              []       [] [] |
+     gpe-calendar       |                      []              []       [] [] |
+     gpe-clock          |                      []              []       [] [] |
+     gpe-conf           |                      []              []       [] [] |
+     gpe-contacts       |                      []              []       [] [] |
+     gpe-edit           |                      []              []       [] [] |
+     gpe-go             |                      []                       [] [] |
+     gpe-login          |                      []              []       [] [] |
+     gpe-ownerinfo      |                      []              []       [] [] |
+     gpe-sketchbook     |                      []              []       [] [] |
+     gpe-su             |                      []              []       [] [] |
+     gpe-taskmanager    |                      []              []       [] [] |
+     gpe-timesheet      |                      []              []       [] [] |
+     gpe-today          |                      []              []       [] [] |
+     gpe-todo           |                      []              []       [] [] |
+     gphoto2            |                                               []    |
+     gprof              |                                          []   []    |
+     gpsdrive           |                      ()    ()                 []    |
+     gramadoir          |                      ()                       []    |
+     grep               |                                   [] []  []   [] [] |
+     gretl              |                                                     |
+     gtick              |                      []                       [] [] |
+     hello              |    []       []    [] [] [] []     []     []   [] [] |
+     id-utils           |                      []                  []   [] [] |
+     indent             |                      []                  []   [] [] |
+     iso_3166           |          []                [] []                    |
+     iso_3166_1         |                      []    []                       |
+     iso_3166_2         |                                                     |
+     iso_3166_3         |                      []                             |
+     iso_4217           |          []          [] [] []     [] []  []      [] |
+     iso_639            |          []                                         |
+     jpilot             |                      ()    ()                       |
+     jtag               |                                                     |
+     jwhois             |                      []           []     []   [] () |
+     kbd                |                      []           []          []    |
+     latrine            |                                               []    |
+     ld                 |                                                     |
+     libc               |                   []       []     []     []         |
+     libgpewidget       |                      []              []       []    |
+     libiconv           |                      []           []     []   [] [] |
+     lifelines          |                                                     |
+     lilypond           |                                                     |
+     lingoteach         |                                                     |
+     lingoteach_lessons |                                                     |
+     lynx               |                      []                  []      [] |
+     m4                 |                      []           []     []   [] [] |
+     mailutils          |                                   []          [] [] |
+     make               |                      []           []     []      [] |
+     man-db             |                                               []    |
+     minicom            |                                   []     []   [] [] |
+     mysecretdiary      |                      []                  []   []    |
+     nano               |             []       []           []          [] [] |
+     nano_1_0           |             []    []    []        []          [] [] |
+     opcodes            |                      []                       []    |
+     parted             |                         []        [] []  []         |
+     ptx                |                   [] []    []     [] []  []   [] [] |
+     python             |                                                     |
+     radius             |                                   []             [] |
+     recode             |                                   []     []   [] [] |
+     rpm                |                                   [] []          [] |
+     screem             |                                                     |
+     scrollkeeper       |                   [] []           []          [] [] |
+     sed                |                                   []     []   []    |
+     sh-utils           |                   []                             [] |
+     shared-mime-info   |                      [] []                          |
+     sharutils          |                      []                          [] |
+     silky              |                                                  () |
+     skencil            |                                      []  []         |
+     sketch             |                                      []  []         |
+     soundtracker       |                                                     |
+     sp                 |                                                     |
+     tar                |             []    []       []     []     []   []    |
+     texinfo            |                   []              []          [] [] |
+     textutils          |                   []                             [] |
+     tin                |                                                     |
+     tp-robot           |                      []                             |
+     tuxpaint           | []          []       [] []        [] []  []   []    |
+     unicode-han-tra... |                                                     |
+     unicode-transla... |                                                     |
+     util-linux         |                      []                  []      [] |
+     vorbis-tools       |                      []                       [] [] |
+     wastesedge         |                                                     |
+     wdiff              |             []                    []     []   [] [] |
+     wget               |                                   []          [] [] |
+     xchat              |    []                []                          [] |
+     xfree86_xkb_xml    |                      []                          [] |
+     xpad               |                      []                       []    |
+                        +-----------------------------------------------------+
+                          lt lv mk mn ms mt nb nl nn no nso pl pt pt_BR ro ru
+                           1  2  0  3 12  0 10 69  6  7  1  40 26  36   76 63
+     
+                          sk sl sr sv ta th tr uk ven vi wa xh zh_CN zh_TW zu
+                        +-----------------------------------------------------+
+     a2ps               |    []    []       [] []                             | 16
+     aegis              |                                                     |  0
+     ant-phone          |                                                     |  3
+     anubis             |                   [] []                             |  9
+     ap-utils           |                      ()                             |  3
+     aspell             |                                                     |  4
+     bash               |                                                     |  9
+     batchelor          |                                                     |  3
+     bfd                |          []       []                                |  6
+     binutils           |          []       []                  []            |  8
+     bison              |          []       []                                | 14
+     bluez-pin          | []       []                    []                   | 14
+     clisp              |                                                     |  0
+     clisp              |                                                     |  5
+     console-tools      |                                                     |  3
+     coreutils          |    []    []       []                        []      | 16
+     cpio               |          []                           []            | 14
+     darkstat           | []    [] []                           ()    ()      | 12
+     diffutils          |          []       []                        []      | 23
+     e2fsprogs          |          []       []                                |  6
+     enscript           |          []       []                                | 12
+     error              | []                []                        []      | 15
+     fetchmail          | []                []                                | 11
+     fileutils          |    []    []       []                  []    []      | 17
+     findutils          | [] [] [] []       []                  []            | 29
+     flex               |          []       []                                | 13
+     fslint             |                                                     |  3
+     gas                |                   []                                |  3
+     gawk               |          []       []                                | 12
+     gbiff              |                                                     |  4
+     gcal               |          []       []                                |  4
+     gcc                |                   []                                |  4
+     gettext            | [] []    []       []                        []      | 16
+     gettext-examples   | []    [] []       []                  []            | 14
+     gettext-runtime    | [] [] [] []       [] []               []    []      | 22
+     gettext-tools      | [] [] [] []       []                  []            | 14
+     gimp-print         | []       []                                         | 10
+     gliv               |                                                     |  3
+     glunarclock        |       [] []                    []                   | 13
+     gnubiff            |                                                     |  3
+     gnucash            | []                                          []      |  9
+     gnucash-glossary   | []       []                                 []      |  8
+     gnupg              | []       []       []                        []      | 17
+     gpe-aerial         |          []                                         |  7
+     gpe-beam           |          []                                         |  8
+     gpe-calendar       | []       []                    []           []      | 13
+     gpe-clock          | []    [] []                                         | 10
+     gpe-conf           | []       []                                         |  9
+     gpe-contacts       | []       []                                 []      | 11
+     gpe-edit           | []    [] []                    []           []      | 12
+     gpe-go             |                                                     |  5
+     gpe-login          | []    [] []                    []           []      | 13
+     gpe-ownerinfo      | []    [] []                                 []      | 13
+     gpe-sketchbook     | []       []                                         |  9
+     gpe-su             | []    [] []                                         | 10
+     gpe-taskmanager    | []    [] []                                         | 10
+     gpe-timesheet      | []    [] []                                 []      | 12
+     gpe-today          | []    [] []                    []           []      | 13
+     gpe-todo           | []       []                    []           []      | 12
+     gphoto2            | []       []                           []            | 11
+     gprof              |          []       []                                |  9
+     gpsdrive           | []       []                                         |  3
+     gramadoir          | []                                                  |  5
+     grep               |    [] []          [] []                             | 26
+     gretl              |                                                     |  3
+     gtick              |                                                     |  7
+     hello              | []    [] []       [] []                             | 34
+     id-utils           |          []       []                                | 12
+     indent             | []    [] []       []                                | 21
+     iso_3166           | [] [] [] []       []    []     []                   | 27
+     iso_3166_1         | [] []             []                                | 16
+     iso_3166_2         |                                                     |  0
+     iso_3166_3         |                                                     |  2
+     iso_4217           | [] []    []       [] []               []            | 24
+     iso_639            |                                                     |  1
+     jpilot             |          []       []        []        []    []      |  9
+     jtag               | []                                                  |  2
+     jwhois             |          ()       []                        []      | 11
+     kbd                |          []       []                                | 11
+     latrine            |                                                     |  2
+     ld                 |          []       []                                |  5
+     libc               | []       []       []                  []            | 20
+     libgpewidget       | []    [] []                    []                   | 13
+     libiconv           | [] [] [] []       [] []        []     []            | 27
+     lifelines          |          []                                         |  2
+     lilypond           |          []                                         |  3
+     lingoteach         |                                                     |  2
+     lingoteach_lessons |                                       ()            |  0
+     lynx               |          []       [] []                             | 14
+     m4                 |          []                           []            | 15
+     mailutils          |                                                     |  5
+     make               |          []       []                  []            | 16
+     man-db             |          []                                         |  5
+     minicom            |                                                     | 11
+     mysecretdiary      |          []       []                                | 10
+     nano               |       [] []       [] []                             | 17
+     nano_1_0           |          []       [] []                             | 17
+     opcodes            |          []       []                                |  6
+     parted             |          []       []                  []            | 15
+     ptx                |          []       []                                | 22
+     python             |                                                     |  0
+     radius             |                                                     |  4
+     recode             |    []    []       []                                | 20
+     rpm                |          []       []                                |  9
+     screem             |          []                           []            |  2
+     scrollkeeper       | []    [] []                                         | 15
+     sed                | [] [] [] []       [] []                             | 24
+     sh-utils           |    []             []                                | 14
+     shared-mime-info   |       [] []                                         |  7
+     sharutils          |       [] []       []                        []      | 17
+     silky              | ()                                                  |  3
+     skencil            |          []                                         |  6
+     sketch             |          []                                         |  6
+     soundtracker       | []       []                                         |  7
+     sp                 |                   []                                |  3
+     tar                | [] []    []       []                  []            | 24
+     texinfo            |          []       []                  []            | 14
+     textutils          |    []    []       []                        []      | 16
+     tin                |                                                     |  1
+     tp-robot           |                                                     |  2
+     tuxpaint           | []       []       []           []     []            | 29
+     unicode-han-tra... |                                                     |  0
+     unicode-transla... |                                                     |  2
+     util-linux         |          []       []                                | 15
+     vorbis-tools       |                                                     |  8
+     wastesedge         |                                                     |  0
+     wdiff              | []       []       []                                | 18
+     wget               | [] [] [] []       [] []               []    []      | 24
+     xchat              | [] [] [] []                           []            | 15
+     xfree86_xkb_xml    | []    []          [] []               []            | 11
+     xpad               |                                                     |  5
+                        +-----------------------------------------------------+
+       63 teams           sk sl sr sv ta th tr uk ven vi wa xh zh_CN zh_TW zu
+      131 domains         47 19 28 83  0  0 59 13  1   1 11  0  22    22    0  1373
+
+   Some counters in the preceding matrix are higher than the number of
+visible blocks let us expect.  This is because a few extra PO files are
+used for implementing regional variants of languages, or language
+dialects.
+
+   For a PO file in the matrix above to be effective, the package to
+which it applies should also have been internationalized and
+distributed as such by its maintainer.  There might be an observable
+lag between the mere existence a PO file and its wide availability in a
+distribution.
+
+   If January 2004 seems to be old, you may fetch a more recent copy of
+this `ABOUT-NLS' file on most GNU archive sites.  The most up-to-date
+matrix with full percentage details can be found at
+`http://www.iro.umontreal.ca/contrib/po/HTML/matrix.html'.
+
+Using `gettext' in new packages
+===============================
+
+If you are writing a freely available program and want to
+internationalize it you are welcome to use GNU `gettext' in your
+package.  Of course you have to respect the GNU Library General Public
+License which covers the use of the GNU `gettext' library.  This means
+in particular that even non-free programs can use `libintl' as a shared
+library, whereas only free software can use `libintl' as a static
+library or use modified versions of `libintl'.
+
+   Once the sources are changed appropriately and the setup can handle
+the use of `gettext' the only thing missing are the translations.  The
+Free Translation Project is also available for packages which are not
+developed inside the GNU project.  Therefore the information given above
+applies also for every other Free Software Project.  Contact
+`translation@iro.umontreal.ca' to make the `.pot' files available to
+the translation teams.
+
diff --git a/AUTHORS b/AUTHORS
new file mode 100755 (executable)
index 0000000..e69de29
diff --git a/COPYING b/COPYING
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/ChangeLog b/ChangeLog
new file mode 100755 (executable)
index 0000000..1d70c2a
--- /dev/null
+++ b/ChangeLog
@@ -0,0 +1,8 @@
+2009-01-12     19:00   Haifeng Deng <haifeng.deng@samsung.com>
+
+       Initial revision
+
+2009-01-09     19:00   Sehwan Park <sehwan@samsung.com>
+
+       Initial import.
+
diff --git a/INSTALL b/INSTALL
new file mode 100755 (executable)
index 0000000..095b1eb
--- /dev/null
+++ b/INSTALL
@@ -0,0 +1,231 @@
+Installation Instructions
+*************************
+
+Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002, 2004 Free
+Software Foundation, Inc.
+
+This file is free documentation; the Free Software Foundation gives
+unlimited permission to copy, distribute and modify it.
+
+Basic Installation
+==================
+
+These are generic installation instructions.
+
+   The `configure' shell script attempts to guess correct values for
+various system-dependent variables used during compilation.  It uses
+those values to create a `Makefile' in each directory of the package.
+It may also create one or more `.h' files containing system-dependent
+definitions.  Finally, it creates a shell script `config.status' that
+you can run in the future to recreate the current configuration, and a
+file `config.log' containing compiler output (useful mainly for
+debugging `configure').
+
+   It can also use an optional file (typically called `config.cache'
+and enabled with `--cache-file=config.cache' or simply `-C') that saves
+the results of its tests to speed up reconfiguring.  (Caching is
+disabled by default to prevent problems with accidental use of stale
+cache files.)
+
+   If you need to do unusual things to compile the package, please try
+to figure out how `configure' could check whether to do them, and mail
+diffs or instructions to the address given in the `README' so they can
+be considered for the next release.  If you are using the cache, and at
+some point `config.cache' contains results you don't want to keep, you
+may remove or edit it.
+
+   The file `configure.ac' (or `configure.in') is used to create
+`configure' by a program called `autoconf'.  You only need
+`configure.ac' if you want to change it or regenerate `configure' using
+a newer version of `autoconf'.
+
+The simplest way to compile this package is:
+
+  1. `cd' to the directory containing the package's source code and type
+     `./configure' to configure the package for your system.  If you're
+     using `csh' on an old version of System V, you might need to type
+     `sh ./configure' instead to prevent `csh' from trying to execute
+     `configure' itself.
+
+     Running `configure' takes awhile.  While running, it prints some
+     messages telling which features it is checking for.
+
+  2. Type `make' to compile the package.
+
+  3. Optionally, type `make check' to run any self-tests that come with
+     the package.
+
+  4. Type `make install' to install the programs and any data files and
+     documentation.
+
+  5. You can remove the program binaries and object files from the
+     source code directory by typing `make clean'.  To also remove the
+     files that `configure' created (so you can compile the package for
+     a different kind of computer), type `make distclean'.  There is
+     also a `make maintainer-clean' target, but that is intended mainly
+     for the package's developers.  If you use it, you may have to get
+     all sorts of other programs in order to regenerate files that came
+     with the distribution.
+
+Compilers and Options
+=====================
+
+Some systems require unusual options for compilation or linking that the
+`configure' script does not know about.  Run `./configure --help' for
+details on some of the pertinent environment variables.
+
+   You can give `configure' initial values for configuration parameters
+by setting variables in the command line or in the environment.  Here
+is an example:
+
+     ./configure CC=c89 CFLAGS=-O2 LIBS=-lposix
+
+   *Note Defining Variables::, for more details.
+
+Compiling For Multiple Architectures
+====================================
+
+You can compile the package for more than one kind of computer at the
+same time, by placing the object files for each architecture in their
+own directory.  To do this, you must use a version of `make' that
+supports the `VPATH' variable, such as GNU `make'.  `cd' to the
+directory where you want the object files and executables to go and run
+the `configure' script.  `configure' automatically checks for the
+source code in the directory that `configure' is in and in `..'.
+
+   If you have to use a `make' that does not support the `VPATH'
+variable, you have to compile the package for one architecture at a
+time in the source code directory.  After you have installed the
+package for one architecture, use `make distclean' before reconfiguring
+for another architecture.
+
+Installation Names
+==================
+
+By default, `make install' will install the package's files in
+`/usr/local/bin', `/usr/local/man', etc.  You can specify an
+installation prefix other than `/usr/local' by giving `configure' the
+option `--prefix=PREFIX'.
+
+   You can specify separate installation prefixes for
+architecture-specific files and architecture-independent files.  If you
+give `configure' the option `--exec-prefix=PREFIX', the package will
+use PREFIX as the prefix for installing programs and libraries.
+Documentation and other data files will still use the regular prefix.
+
+   In addition, if you use an unusual directory layout you can give
+options like `--bindir=DIR' to specify different values for particular
+kinds of files.  Run `configure --help' for a list of the directories
+you can set and what kinds of files go in them.
+
+   If the package supports it, you can cause programs to be installed
+with an extra prefix or suffix on their names by giving `configure' the
+option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'.
+
+Optional Features
+=================
+
+Some packages pay attention to `--enable-FEATURE' options to
+`configure', where FEATURE indicates an optional part of the package.
+They may also pay attention to `--with-PACKAGE' options, where PACKAGE
+is something like `gnu-as' or `x' (for the X Window System).  The
+`README' should mention any `--enable-' and `--with-' options that the
+package recognizes.
+
+   For packages that use the X Window System, `configure' can usually
+find the X include and library files automatically, but if it doesn't,
+you can use the `configure' options `--x-includes=DIR' and
+`--x-libraries=DIR' to specify their locations.
+
+Specifying the System Type
+==========================
+
+There may be some features `configure' cannot figure out automatically,
+but needs to determine by the type of machine the package will run on.
+Usually, assuming the package is built to be run on the _same_
+architectures, `configure' can figure that out, but if it prints a
+message saying it cannot guess the machine type, give it the
+`--build=TYPE' option.  TYPE can either be a short name for the system
+type, such as `sun4', or a canonical name which has the form:
+
+     CPU-COMPANY-SYSTEM
+
+where SYSTEM can have one of these forms:
+
+     OS KERNEL-OS
+
+   See the file `config.sub' for the possible values of each field.  If
+`config.sub' isn't included in this package, then this package doesn't
+need to know the machine type.
+
+   If you are _building_ compiler tools for cross-compiling, you should
+use the `--target=TYPE' option to select the type of system they will
+produce code for.
+
+   If you want to _use_ a cross compiler, that generates code for a
+platform different from the build platform, you should specify the
+"host" platform (i.e., that on which the generated programs will
+eventually be run) with `--host=TYPE'.
+
+Sharing Defaults
+================
+
+If you want to set default values for `configure' scripts to share, you
+can create a site shell script called `config.site' that gives default
+values for variables like `CC', `cache_file', and `prefix'.
+`configure' looks for `PREFIX/share/config.site' if it exists, then
+`PREFIX/etc/config.site' if it exists.  Or, you can set the
+`CONFIG_SITE' environment variable to the location of the site script.
+A warning: not all `configure' scripts look for a site script.
+
+Defining Variables
+==================
+
+Variables not defined in a site shell script can be set in the
+environment passed to `configure'.  However, some packages may run
+configure again during the build, and the customized values of these
+variables may be lost.  In order to avoid this problem, you should set
+them in the `configure' command line, using `VAR=value'.  For example:
+
+     ./configure CC=/usr/local2/bin/gcc
+
+will cause the specified gcc to be used as the C compiler (unless it is
+overridden in the site shell script).
+
+`configure' Invocation
+======================
+
+`configure' recognizes the following options to control how it operates.
+
+`--help'
+`-h'
+     Print a summary of the options to `configure', and exit.
+
+`--version'
+`-V'
+     Print the version of Autoconf used to generate the `configure'
+     script, and exit.
+
+`--cache-file=FILE'
+     Enable the cache: use and save the results of the tests in FILE,
+     traditionally `config.cache'.  FILE defaults to `/dev/null' to
+     disable caching.
+
+`--config-cache'
+`-C'
+     Alias for `--cache-file=config.cache'.
+
+`--quiet'
+`--silent'
+`-q'
+     Do not print messages saying which checks are being made.  To
+     suppress all normal output, redirect it to `/dev/null' (any error
+     messages will still be shown).
+
+`--srcdir=DIR'
+     Look for the package's source code in directory DIR.  Usually
+     `configure' can determine that directory automatically.
+
+`configure' also accepts some other, not widely useful, options.  Run
+`configure --help' for more details.
+
diff --git a/LICENSE b/LICENSE
new file mode 100755 (executable)
index 0000000..7ccb5b5
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,75 @@
+Flora License
+
+Version 1.0, May, 2012
+
+http://www.tizenopensource.org/license
+
+TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+1. Definitions.
+
+"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document.
+
+"Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License.
+
+"Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity.
+
+"You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License.
+
+"Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files.
+
+"Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types.
+
+"Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below).
+
+"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof.
+
+"Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution."
+
+"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work.
+
+"Tizen Certified Platform" shall mean a software platform that complies with the standards set forth in the Compatibility Definition Document and passes the Compatibility Test Suite as defined from time to time by the Tizen Technical Steering Group and certified by the Tizen Association or its designated agent.
+
+2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form.
+
+3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work solely as incorporated into a Tizen Certified Platform, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work solely as incorporated into a Tizen Certified Platform to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed.
+
+4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof pursuant to the copyright license above, in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions:
+
+  1. You must give any other recipients of the Work or Derivative Works a copy of this License; and
+
+  2. You must cause any modified files to carry prominent notices stating that You changed the files; and
+
+  3. You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and
+
+  4. If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License.
+
+5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions.
+
+6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file.
+
+7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License.
+
+8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages.
+
+9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability.
+
+END OF TERMS AND CONDITIONS
+
+APPENDIX: How to apply the Flora License to your work
+
+To apply the Flora License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives.
+
+   Copyright [yyyy] [name of copyright owner]
+
+   Licensed under the Flora License, Version 1.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.tizenopensource.org/license
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
diff --git a/Makefile.am b/Makefile.am
new file mode 100755 (executable)
index 0000000..7898d2e
--- /dev/null
@@ -0,0 +1,28 @@
+## Makefile.am -- Process this file with automake to produce Makefile.in
+## Copyright (C) 2008 SAMSUNG
+##
+
+AUX_DIST                = $(ac_aux_dir)/config.guess \
+                       $(ac_aux_dir)/config.sub \
+                       $(ac_aux_dir)/install-sh \
+                       $(ac_aux_dir)/ltconfig \
+                       $(ac_aux_dir)/ltmain.sh \
+                       $(ac_aux_dir)/missing \
+                       $(ac_aux_dir)/mkinstalldirs
+
+EXTRA_DIST             = config.rpath \
+                         mkinstalldirs \
+                         bootstrap
+
+AUTOMAKE_OPTIONS       = gnu
+SUBDIRS                = m4 po src data
+
+MAINTAINERCLEANFILES   = Makefile.in \
+                         aclocal.m4 \
+                         configure \
+                         $(AUX_DIST) 
+
+CLEANFILES             = *.bak 
+                         
+
+ACLOCAL_AMFLAGS                = -I m4
diff --git a/NEWS b/NEWS
new file mode 100755 (executable)
index 0000000..e69de29
diff --git a/NOTICE b/NOTICE
new file mode 100755 (executable)
index 0000000..ded3804
--- /dev/null
+++ b/NOTICE
@@ -0,0 +1 @@
+Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
\ No newline at end of file
diff --git a/README b/README
new file mode 100755 (executable)
index 0000000..e84d46e
--- /dev/null
+++ b/README
@@ -0,0 +1,5 @@
+Tizen keyboard
+==============
+
+It's ISE input for western european languages.
+
diff --git a/bootstrap b/bootstrap
new file mode 100755 (executable)
index 0000000..a31a4da
--- /dev/null
+++ b/bootstrap
@@ -0,0 +1,28 @@
+#! /bin/sh
+# bootstrap -- Use this script to create generated files from the CVS dist
+# Copyright (C) 2000 Gary V. Vaughan
+#
+# 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, 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.
+
+## @start 1
+#! /bin/sh
+
+set -x
+libtoolize -c --automake 
+aclocal -I m4
+autoheader
+automake --add-missing --copy --include-deps
+autoconf
+## @end 1
diff --git a/configure.ac b/configure.ac
new file mode 100755 (executable)
index 0000000..3cd9e09
--- /dev/null
@@ -0,0 +1,186 @@
+# Process this file with autoconf to produce a configure script.
+AC_INIT(ise-default, 0.1.1, dalton.lee@samsung.com)
+AC_CONFIG_SRCDIR([src/ise.cpp])
+
+ELM_VERSION=0.0.1
+
+AC_SUBST(ELM_VERSION)
+
+# libtool versioning for ISF ise-default
+
+# increment if the interface has additions, changes, removals.
+ISF_DEFAULT_CURRENT=0
+
+# increment any time the source changes; set to 0 if you increment CURRENT
+ISF_DEFAULT_REVISION=0
+
+# increment if any interfaces have been added; set to 0
+# if any interfaces have been removed. removal has 
+# precedence over adding, so set to 0 if both happened.
+ISF_DEFAULT_AGE=0
+
+AC_SUBST(ISF_DEFAULT_CURRENT)
+AC_SUBST(ISF_DEFAULT_REVISION)
+AC_SUBST(ISF_DEFAULT_AGE)
+
+GETTEXT_PACKAGE=ise-default
+AC_SUBST(GETTEXT_PACKAGE)
+AC_DEFINE_UNQUOTED(GETTEXT_PACKAGE,"$GETTEXT_PACKAGE", [The gettext domain])
+
+AC_CANONICAL_HOST
+
+# Init automake stuff
+AM_INIT_AUTOMAKE
+AM_CONFIG_HEADER([config.h])
+
+# Init gettext
+ALL_LINGUAS="ko_KR en zh_CN zh_HK zh_TW de_DE nl_NL es_ES pt_PT el_GR it_IT fr_FR tr_TR ja_JP ru_RU"
+AM_GNU_GETTEXT
+
+AC_LIBTOOL_WIN32_DLL
+AC_LIBTOOL_DLOPEN
+AC_DISABLE_STATIC
+define([AC_LIBTOOL_LANG_F77_CONFIG], [:])dnl
+AC_PROG_LIBTOOL
+
+AC_SUBST(LIBTOOL_DEPS)
+
+AC_PROG_CXX
+AC_PROG_CC
+AC_LANG(C++)
+
+AC_C_CONST
+AC_C_INLINE
+AC_TYPE_SIZE_T
+
+# Check elementary
+PKG_CHECK_MODULES(ELM, [elementary >= 0.1.0.0])
+
+# Check SLP-utilX library
+PKG_CHECK_MODULES(SLP_UTILX, [utilX >= 0.0.0.1])
+
+# Check SLP-util library
+PKG_CHECK_MODULES(HEYNOTI, [heynoti >= 0.0.0.1])
+
+# Check ecore_imf
+PKG_CHECK_MODULES(IMF, [ecore-imf >= 0.0.0.1])
+
+# Check ecore-x
+PKG_CHECK_MODULES(ECOREX, [ecore-x >= 0.0.0.1])
+
+# Check glib library
+PKG_CHECK_MODULES(GLIB, [glib-2.0 >= 0.0.0.1])
+
+# Check vconf library
+PKG_CHECK_MODULES(VCONF, [vconf >= 0.0.0.1])
+
+# Check AUL library
+PKG_CHECK_MODULES(AUL, [aul >= 0])
+
+# Check ui-gadget library
+PKG_CHECK_MODULES(UIGADGET, [ui-gadget >= 0])
+
+# Check isf library
+PKG_CHECK_MODULES(ISF, [isf >= 0])
+
+# Check X11 library
+PKG_CHECK_MODULES(X11, [x11 >= 0])
+
+# Checks for header files.
+AC_HEADER_STDC
+
+# libtool option to control which symbols are exported
+# right now, symbols starting with _ are not exported
+LIBTOOL_EXPORT_OPTIONS='-export-symbols-regex "^[[^_]].*"'
+AC_SUBST(LIBTOOL_EXPORT_OPTIONS)
+
+# Check if we have gthread
+#PKG_CHECK_MODULES(GTHREAD2,[gthread-2.0 >= 2.0.0],
+#                      [HAS_GTHREAD2=yes],
+#                      [HAS_GTHREAD2=no])
+
+case $host_cpu in
+  *arm* ) TARGET=ARM;;
+      * ) TARGET=X86;;
+esac
+AM_CONDITIONAL(ARM, test x$TARGET = xARM)
+
+# Extra args.
+AC_ARG_ENABLE(debug,
+             [  --enable-debug            Turn on debugging],
+                     enable_debug=yes,
+             enable_debug=no)
+
+if test "$enable_debug" = "yes"; then
+  AC_DEFINE(ENABLE_DEBUG,1,[Define this to enable the debug facility])
+  CFLAGS="$CFLAGS -g"
+  CXXFLAGS="$CXXFLAGS -g"
+fi
+
+ISF_ICONDIR=`$PKG_CONFIG --variable=icondir scim`
+ISF_MODULEDIR=`$PKG_CONFIG --variable=moduledir scim`
+ISF_DATADIR=`$PKG_CONFIG --variable=scimdatadir scim`
+ISF_LIBEXECDIR=`$PKG_CONFIG --variable=moduledir scim`
+ISF_INCLUDEDIR=`$PKG_CONFIG --variable=includedir scim`
+ISF_LIBDIR=`$PKG_CONFIG --variable=libdir scim --libs elementary`
+FACTORYFS_DIR="${FACTORYFS}"
+PREFIX_DIR="${PREFIX}"
+ISE_NAME="ise-default"
+
+if test "x$ISF_ICONDIR" = "x"; then
+  ISF_ICONDIR=${datadir}/scim/icons
+fi
+
+if test "x$ISF_MODULEDIR" = "x"; then
+  ISF_MODULEDIR=${libdir}/scim-1.0
+fi
+
+if test "x$ISF_DATADIR" = "x"; then
+  ISF_DATADIR=${datadir}/scim
+fi
+
+if test "x$ISF_LIBEXECDIR" = "x"; then
+  ISF_LIBEXECDIR=${libdir}/scim-1.0
+fi
+
+if test "x$ISF_INCLUDEDIR" = "x"; then
+  ISF_INCLUDEDIR=${includedir}/scim-1.0
+else
+  ISF_INCLUDEDIR=${ISF_INCLUDEDIR}/scim-1.0
+fi
+
+if test "x$ISF_LIBDIR" = "x"; then
+  ISF_LIBDIR=${libdir}
+fi
+
+AC_SUBST(ISF_ICONDIR)
+AC_SUBST(ISF_MODULEDIR)
+AC_SUBST(ISF_DATADIR)
+AC_SUBST(ISF_LIBEXECDIR)
+AC_SUBST(ISF_INCLUDEDIR)
+AC_SUBST(ISF_LIBDIR)
+AC_SUBST(FACTORYFS_DIR)
+AC_SUBST(PREFIX_DIR)
+AC_SUBST(ISE_NAME)
+
+ISF_DEFAULT_DATADIR=$ISF_DATADIR/ise-default
+ISF_DEFAULT_USER_DATADIR=/.scim/ise-default
+
+AC_SUBST(ISF_DEFAULT_DATADIR)
+AC_SUBST(ISF_DEFAULT_USER_DATADIR)
+
+# Extra arg for autoscroll
+#AC_ARG_ENABLE(autoscroll-check, [ --enable-autoscroll-check        Turn on autoscroll check], autoscroll_check=yes, autoscroll_check=no)
+autoscroll_check="yes"
+if test "x${autoscroll_check}" = "xyes"; then
+       AC_DEFINE(HAVE_CONFORMANT_AUTOSCROLL,1,[Define this to enable autoscroll checking])
+       echo "AUTOSCROLL is enabled!"
+else
+       echo "AUTOSCROLL is disabled!"
+fi
+AC_CONFIG_FILES([Makefile po/Makefile.in m4/Makefile 
+                data/Makefile
+                data/pixmaps/Makefile
+                src/Makefile])
+#               ise-default.spec])
+AC_OUTPUT
diff --git a/control.in b/control.in
new file mode 100755 (executable)
index 0000000..e00c5eb
--- /dev/null
@@ -0,0 +1,9 @@
+Package: default-@MACHINE@
+Priority: optional
+Version: @VERSION@
+Section: middleware
+Architecture: @ARCH@
+Maintainer: Sehwan <sehwan@samsung.com>
+Source: middleware/ui-plugins/ise/
+Depends:
+Description: Default ISE
diff --git a/data/Makefile.am b/data/Makefile.am
new file mode 100755 (executable)
index 0000000..dbe7de1
--- /dev/null
@@ -0,0 +1,17 @@
+## Makefile.am -- Process this file with automake to produce Makefile.in
+## Copyright (C) 2008 SAMSUNG
+##
+
+MAINTAINERCLEANFILES   = Makefile.in
+CLEANFILES              = *.bak
+
+#SUBDIRS                       = pixmaps theme
+
+SUBDIRS                        = pixmaps
+
+icondir                        = @ISF_ICONDIR@
+icon_DATA              = @ISE_NAME@.png
+
+
+helpdir                        = @ISF_MODULEDIR@/Helper
+help_DATA               = @ISE_NAME@.help
diff --git a/data/ise-default.help b/data/ise-default.help
new file mode 100755 (executable)
index 0000000..3df8577
--- /dev/null
@@ -0,0 +1,3 @@
+Default ISE:
+    Default Input Service Engine.
+    By Samsung Mobile Platform Lab.
diff --git a/data/ise-default.png b/data/ise-default.png
new file mode 100755 (executable)
index 0000000..70ad1b5
Binary files /dev/null and b/data/ise-default.png differ
diff --git a/data/pixmaps/04_textinput_bubble_umlaut_bg.png b/data/pixmaps/04_textinput_bubble_umlaut_bg.png
new file mode 100755 (executable)
index 0000000..767036a
Binary files /dev/null and b/data/pixmaps/04_textinput_bubble_umlaut_bg.png differ
diff --git a/data/pixmaps/04_textinput_symbol_arrow_left.png b/data/pixmaps/04_textinput_symbol_arrow_left.png
new file mode 100755 (executable)
index 0000000..b402bcb
Binary files /dev/null and b/data/pixmaps/04_textinput_symbol_arrow_left.png differ
diff --git a/data/pixmaps/04_textinput_symbol_arrow_left_press.png b/data/pixmaps/04_textinput_symbol_arrow_left_press.png
new file mode 100755 (executable)
index 0000000..1bb0368
Binary files /dev/null and b/data/pixmaps/04_textinput_symbol_arrow_left_press.png differ
diff --git a/data/pixmaps/04_textinput_symbol_arrow_right.png b/data/pixmaps/04_textinput_symbol_arrow_right.png
new file mode 100755 (executable)
index 0000000..3a93679
Binary files /dev/null and b/data/pixmaps/04_textinput_symbol_arrow_right.png differ
diff --git a/data/pixmaps/04_textinput_symbol_arrow_right_press.png b/data/pixmaps/04_textinput_symbol_arrow_right_press.png
new file mode 100755 (executable)
index 0000000..48c1132
Binary files /dev/null and b/data/pixmaps/04_textinput_symbol_arrow_right_press.png differ
diff --git a/data/pixmaps/Makefile.am b/data/pixmaps/Makefile.am
new file mode 100755 (executable)
index 0000000..9b21e5c
--- /dev/null
@@ -0,0 +1,60 @@
+## Makefile.am -- Process this file with automake to produce Makefile.in
+## Copyright (C) 2008 SAMSUNG
+##
+
+MAINTAINERCLEANFILES   = Makefile.in
+
+INST_ICONS     =       \
+       fontprop.dat \
+       keypad_eng_punctuation.png \
+       language_icon_port.png \
+       language_icon_port_grey.png \
+       language_icon_port_disable.png \
+       symbol_icon_port.png \
+       textinput_bottom_button_function.png \
+       textinput_bottom_button_nml.png \
+       textinput_bottom_button_press.png \
+       textinput_french_icon_clear.png \
+       textinput_french_icon_shift_01.png \
+       textinput_french_icon_shift_01_disable.png \
+       textinput_french_icon_shift_02.png \
+       textinput_french_icon_shift_03.png \
+       textinput_icon_arrow_down.png \
+       textinput_icon_arrow_left.png \
+       textinput_icon_arrow_right.png \
+       textinput_icon_arrow_up.png \
+       textinput_icon_space.png \
+       textinput_icon_space_email.png \
+       textinput_icon_space_email_press.png \
+       textinput_icon_space_press.png \
+       textinput_panel_bg.png \
+       textinput_panel_dimming.png \
+       textinput_popup_bg1.png \
+       textinput_popup_bg2.png \
+       textinput_popup_bg3.png \
+       textinput_popup_button_function.png \
+       textinput_popup_button_nml.png \
+       textinput_popup_button_press.png \
+       textinput_qwerty_button_capslock_press.png \
+       textinput_qwerty_button_function.png \
+       textinput_qwerty_button_nml.png \
+       textinput_qwerty_button_press.png \
+       textinput_qwerty_icon_clear.png \
+       textinput_qwerty_icon_enter.png \
+       textinput_qwerty_icon_enter_disabled.png \
+       textinput_qwerty_icon_shift_01.png \
+       textinput_qwerty_icon_shift_02.png \
+       textinput_qwerty_icon_shift_03.png \
+       textinput_button_symbol_left.png \
+       textinput_button_symbol_left_press.png \
+       textinput_button_symbol_right.png \
+       textinput_button_symbol_right_press.png \
+       04_textinput_symbol_arrow_left.png \
+       04_textinput_symbol_arrow_right.png \
+       04_textinput_bubble_umlaut_bg.png 
+
+
+
+westernicondir                 = @PREFIX_DIR@/share/isf/ise/ise-default/480x800/default/
+westernicon_DATA               = $(INST_ICONS)
+
diff --git a/data/pixmaps/fontprop.dat b/data/pixmaps/fontprop.dat
new file mode 100755 (executable)
index 0000000..ff188ba
--- /dev/null
@@ -0,0 +1,129 @@
+255 255 255 255 20 159 224 255 255 255 255 255 /*AUTOPOPUP_LABEL_PROP*/
+20 159 224 255 255 255 255 255 20 159 224 255 /*AUTOPOPUP_LABEL_PROP*/
+20 159 224 255 255 255 255 255 20 159 224 255 /*AUTOPOPUP_LABEL_PROP*/
+255 255 255 255 255 255 255 255 255 255 255 255 /*MAGNIFIER_LABEL_PROP*/
+20 159 224 255 20 159 224 255 20 159 224 255 /*MAGNIFIER_LABEL_PROP*/
+255 255 255 255 255 255 255 255 255 255 255 255 /*MAGNIFIER_LABEL_PROP*/
+255 255 255 255 255 255 255 255 255 255 255 255 /*MAGNIFIER_LABEL_PROP*/
+20 159 224 255 20 159 224 255 20 159 224 255 /*MAGNIFIER_LABEL_PROP*/
+255 255 255 255 255 255 255 255 255 255 255 255 /*MAGNIFIER_LABEL_PROP*/
+255 255 255 255 255 255 255 255 255 255 255 255 /*MAGNIFIER_LABEL_PROP*/
+20 159 224 255 20 159 224 255 20 159 224 255 /*MAGNIFIER_LABEL_PROP*/
+255 255 255 255 255 255 255 255 255 255 255 255 /*MAGNIFIER_LABEL_PROP*/
+255 255 255 255 226 226 226 255 88 88 88 255 /*LABEL_PROPERTIES_4X4_DEFAULT_TYPE*/
+255 255 255 255 226 226 226 255 88 88 88 255 /*LABEL_PROPERTIES_4X4_DEFAULT_TYPE*/
+255 255 255 255 226 226 226 255 88 88 88 255 /*LABEL_PROPERTIES_4X4_DEFAULT_TYPE*/
+124 124 124 255 226 226 226 255 88 88 88 255 /*LABEL_PROPERTIES_4X4_DEFAULT_TYPE*/
+124 124 124 255 226 226 226 255 88 88 88 255 /*LABEL_PROPERTIES_4X4_DEFAULT_TYPE*/
+124 124 124 255 226 226 226 255 88 88 88 255 /*LABEL_PROPERTIES_4X4_DEFAULT_TYPE*/
+255 255 255 255 255 255 255 255 88 88 88 255 /*LABEL_PROPERTIES_4X4_SIDE_BUTTON_TYPE*/
+255 255 255 255 255 255 255 255 88 88 88 255 /*LABEL_PROPERTIES_4X4_SIDE_BUTTON_TYPE*/
+255 255 255 255 255 255 255 255 88 88 88 255 /*LABEL_PROPERTIES_4X4_SIDE_BUTTON_TYPE*/ 
+88 88 88 255 88 88 88 255 88 88 88 255 /*LABEL_PROPERTIES_4X4_SIDE_UIITEM_TYPE*/
+88 88 88 255 88 88 88 255 88 88 88 255 /*LABEL_PROPERTIES_4X4_SIDE_UIITEM_TYPE*/
+88 88 88 255 88 88 88 255 88 88 88 255 /*LABEL_PROPERTIES_4X4_SIDE_UIITEM_TYPE*/
+255 255 255 255 226 226 226 255 88 88 88 255 /*LABEL_PROPERTIES_4X4_SOFTKEYBAR_TYPE*/
+255 255 255 255 226 226 226 255 88 88 88 255 /*LABEL_PROPERTIES_4X4_SOFTKEYBAR_TYPE*/
+255 255 255 255 226 226 226 255 88 88 88 255 /*LABEL_PROPERTIES_4X4_SOFTKEYBAR_TYPE*/
+255 255 255 255 226 226 226 255 88 88 88 255 /*LABEL_PROPERTIES_4X4_NUM_TYPE*/
+255 255 255 255 226 226 226 255 88 88 88 255 /*LABEL_PROPERTIES_4X4_NUM_TYPE*/
+255 255 255 255 226 226 226 255 88 88 88 255 /*LABEL_PROPERTIES_4X4_NUM_TYPE*/
+255 255 255 255 255 255 255 255 88 88 88 255 /*LABEL_PROPERTIES_4X4_SYM_PAGELABEL*/
+255 255 255 255 255 255 255 255 88 88 88 255 /*LABEL_PROPERTIES_4X4_SYM_PAGELABEL*/
+255 255 255 255 255 255 255 255 88 88 88 255 /*LABEL_PROPERTIES_4X4_SYM_PAGELABEL*/
+255 255 255 255 226 226 226 255 88 88 88 255 /*LABEL_PROPERTIES_QTY_DEFAULT_TYPE*/
+255 255 255 255 226 226 226 255 88 88 88 255 /*LABEL_PROPERTIES_QTY_DEFAULT_TYPE*/
+255 255 255 255 226 226 226 255 88 88 88 255 /*LABEL_PROPERTIES_QTY_DEFAULT_TYPE*/
+124 124 124 255 226 226 226 255 88 88 88 255 /*LABEL_PROPERTIES_QTY_DEFAULT_TYPE*/
+124 124 124 255 226 226 226 255 88 88 88 255 /*LABEL_PROPERTIES_QTY_DEFAULT_TYPE*/
+124 124 124 255 226 226 226 255 88 88 88 255 /*LABEL_PROPERTIES_QTY_DEFAULT_TYPE*/
+255 255 255 255 226 226 226 255 88 88 88 255 /*LABEL_PROPERTIES_QTY_BOTTOM_LINE_TYPE*/
+255 255 255 255 226 226 226 255 88 88 88 255 /*LABEL_PROPERTIES_QTY_BOTTOM_LINE_TYPE*/
+255 255 255 255 226 226 226 255 88 88 88 255 /*LABEL_PROPERTIES_QTY_BOTTOM_LINE_TYPE*/
+150 150 150 255 226 226 226 255 88 88 88 255 /*LABEL_PROPERTIES_QTY_BOTTOM_LINE_TYPE*/
+150 150 150 255 226 226 226 255 88 88 88 255 /*LABEL_PROPERTIES_QTY_BOTTOM_LINE_TYPE*/
+150 150 150 255 226 226 226 255 88 88 88 255 /*LABEL_PROPERTIES_QTY_BOTTOM_LINE_TYPE*/
+255 255 255 255 226 226 226 255 88 88 88 255 /*LABEL_PROPERTIES_QTY_BOTTOM_LINE_TYPE*/
+255 255 255 255 226 226 226 255 88 88 88 255 /*LABEL_PROPERTIES_QTY_BOTTOM_LINE_TYPE*/
+255 255 255 255 226 226 226 255 88 88 88 255 /*LABEL_PROPERTIES_QTY_BOTTOM_LINE_TYPE*/
+255 255 255 255 226 226 226 255 88 88 88 255 /*LABEL_PROPERTIES_QTY_BOTTOM_LINE_IMAGE_TYPE*/
+255 255 255 255 226 226 226 255 88 88 88 255 /*LABEL_PROPERTIES_QTY_BOTTOM_LINE_IMAGE_TYPE*/
+255 255 255 255 226 226 226 255 88 88 88 255 /*LABEL_PROPERTIES_QTY_BOTTOM_LINE_IMAGE_TYPE*/
+36 36 36 255 226 226 226 255 88 88 88 255 /*LABEL_PROPERTIES_TEXTMODE_POPUP_TYPE*/
+36 36 36 255 226 226 226 255 88 88 88 255 /*LABEL_PROPERTIES_TEXTMODE_POPUP_TYPE*/
+36 36 36 255 226 226 226 255 88 88 88 255 /*LABEL_PROPERTIES_TEXTMODE_POPUP_TYPE*/
+255 255 255 255 226 226 226 255 88 88 88 255 /*LABEL_PROPERTIES_4X4_ASTERISK_TYPE*/
+255 255 255 255 226 226 226 255 88 88 88 255 /*LABEL_PROPERTIES_4X4_ASTERISK_TYPE*/
+255 255 255 255 226 226 226 255 88 88 88 255 /*LABEL_PROPERTIES_4X4_ASTERISK_TYPE*/
+255 255 255 255 226 226 226 255 88 88 88 255 /*LABEL_PROPERTIES_4X4_ASTERISK_TYPE*/
+255 255 255 255 226 226 226 255 88 88 88 255 /*LABEL_PROPERTIES_4X4_ASTERISK_TYPE*/
+255 255 255 255 226 226 226 255 88 88 88 255 /*LABEL_PROPERTIES_4X4_ASTERISK_TYPE*/
+255 255 255 255 226 226 226 255 88 88 88 255 /*LABEL_PROPERTIES_4X4_ASTERISK_TYPE*/
+255 255 255 255 226 226 226 255 88 88 88 255 /*LABEL_PROPERTIES_4X4_ASTERISK_TYPE*/
+255 255 255 255 226 226 226 255 88 88 88 255 /*LABEL_PROPERTIES_4X4_ASTERISK_TYPE*/
+255 255 255 255 226 226 226 255 88 88 88 255 /*LABEL_PROPERTIES_QTY_WWW_TYPE*/
+255 255 255 255 226 226 226 255 88 88 88 255 /*LABEL_PROPERTIES_QTY_WWW_TYPE*/
+255 255 255 255 226 226 226 255 88 88 88 255 /*LABEL_PROPERTIES_QTY_WWW_TYPE*/
+255 255 255 255 226 226 226 255 88 88 88 255 /*LABEL_PROPERTIES_4x4_WWW_TYPE*/
+255 255 255 255 226 226 226 255 88 88 88 255 /*LABEL_PROPERTIES_4x4_WWW_TYPE*/
+255 255 255 255 226 226 226 255 88 88 88 255 /*LABEL_PROPERTIES_4x4_WWW_TYPE*/
+255 255 255 0 226 226 226 255 88 88 88 255 /*LABEL_PROPERTIES_LANGNAME*/
+255 255 255 0 226 226 226 255 88 88 88 255 /*LABEL_PROPERTIES_LANGNAME*/
+255 255 255 0 226 226 226 255 88 88 88 255 /*LABEL_PROPERTIES_LANGNAME*/
+255 255 255 255 226 226 226 255 88 88 88 255 /*LABEL_PROPERTIES_LAND_DEFAULT_TYPE*/
+255 255 255 255 226 226 226 255 88 88 88 255 /*LABEL_PROPERTIES_LAND_DEFAULT_TYPE*/
+255 255 255 255 226 226 226 255 88 88 88 255 /*LABEL_PROPERTIES_LAND_DEFAULT_TYPE*/
+150 150 150 255 226 226 226 255 88 88 88 255 /*LABEL_PROPERTIES_LAND_DEFAULT_TYPE*/
+150 150 150 255 226 226 226 255 88 88 88 255 /*LABEL_PROPERTIES_LAND_DEFAULT_TYPE*/
+150 150 150 255 226 226 226 255 88 88 88 255 /*LABEL_PROPERTIES_LAND_DEFAULT_TYPE*/
+255 255 255 255 226 226 226 255 88 88 88 255 /*LABEL_PROPERTIES_LAND_DEFAULT_IMAGE_TYPE*/
+255 255 255 255 226 226 226 255 88 88 88 255 /*LABEL_PROPERTIES_LAND_DEFAULT_IMAGE_TYPE*/
+255 255 255 255 226 226 226 255 88 88 88 255 /*LABEL_PROPERTIES_LAND_DEFAULT_IMAGE_TYPE*/
+255 255 255 255 226 226 226 255 88 88 88 255 /*LABEL_PROPERTIES_LAND_MODE_CHANGE_LABEL_TYPE*/
+255 255 255 255 226 226 226 255 88 88 88 255 /*LABEL_PROPERTIES_LAND_MODE_CHANGE_LABEL_TYPE*/
+255 255 255 255 226 226 226 255 88 88 88 255 /*LABEL_PROPERTIES_LAND_MODE_CHANGE_LABEL_TYPE*/
+255 255 255 255 226 226 226 255 88 88 88 255 /*LABEL_PROPERTIES_LAND_SINHALA_TYPE*/
+255 255 255 255 226 226 226 255 88 88 88 255 /*LABEL_PROPERTIES_LAND_SINHALA_TYPE*/
+255 255 255 255 226 226 226 255 88 88 88 255 /*LABEL_PROPERTIES_LAND_SINHALA_TYPE*/
+150 150 150 255 226 226 226 255 88 88 88 255 /*LABEL_PROPERTIES_LAND_SINHALA_TYPE*/
+150 150 150 255 226 226 226 255 88 88 88 255 /*LABEL_PROPERTIES_LAND_SINHALA_TYPE*/
+150 150 150 255 226 226 226 255 88 88 88 255 /*LABEL_PROPERTIES_LAND_SINHALA_TYPE*/
+255 255 255 255 226 226 226 255 88 88 88 255 /*LABEL_PROPERTIES_LAND_SYMBOL_LABEL_TYPE*/
+255 255 255 255 226 226 226 255 88 88 88 255 /*LABEL_PROPERTIES_LAND_SYMBOL_LABEL_TYPE*/
+255 255 255 255 226 226 226 255 88 88 88 255 /*LABEL_PROPERTIES_LAND_SYMBOL_LABEL_TYPE*/
+150 150 150 255 226 226 226 255 88 88 88 255 /*LABEL_PROPERTIES_LAND_SYMBOL_LABEL_TYPE*/
+150 150 150 255 226 226 226 255 88 88 88 255 /*LABEL_PROPERTIES_LAND_SYMBOL_LABEL_TYPE*/
+150 150 150 255 226 226 226 255 88 88 88 255 /*LABEL_PROPERTIES_LAND_SYMBOL_LABEL_TYPE*/
+255 255 255 255 226 226 226 255 88 88 88 255 /*LABEL_PROPERTIES_LAND_SYMBOL_LABEL_TYPE*/
+255 255 255 255 226 226 226 255 88 88 88 255 /*LABEL_PROPERTIES_LAND_SYMBOL_LABEL_TYPE*/
+255 255 255 255 226 226 226 255 88 88 88 255 /*LABEL_PROPERTIES_LAND_SYMBOL_LABEL_TYPE*/
+255 255 255 255 226 226 226 255 88 88 88 255 /*LABEL_PROPERTIES_LAND_WWW_TYPE*/
+255 255 255 255 226 226 226 255 88 88 88 255 /*LABEL_PROPERTIES_LAND_WWW_TYPE*/
+255 255 255 255 226 226 226 255 88 88 88 255 /*LABEL_PROPERTIES_LAND_WWW_TYPE*/
+255 255 255 255 226 226 226 255 88 88 88 255 /*LABEL_PROPERTIES_4X4_INDIC_TYPE*/
+255 255 255 255 226 226 226 255 88 88 88 255 /*LABEL_PROPERTIES_4X4_INDIC_TYPE*/
+255 255 255 255 226 226 226 255 88 88 88 255 /*LABEL_PROPERTIES_4X4_INDIC_TYPE*/
+150 150 150 255 226 226 226 255 88 88 88 255 /*LABEL_PROPERTIES_4X4_INDIC_TYPE*/
+150 150 150 255 226 226 226 255 88 88 88 255 /*LABEL_PROPERTIES_4X4_INDIC_TYPE*/
+150 150 150 255 226 226 226 255 88 88 88 255 /*LABEL_PROPERTIES_4X4_INDIC_TYPE*/
+255 255 255 255 226 226 226 255 88 88 88 255 /*LABEL_PROPERTIES_4X4_MONTH_TYPE*/
+255 255 255 255 226 226 226 255 88 88 88 255 /*LABEL_PROPERTIES_4X4_MONTH_TYPE*/
+255 255 255 255 226 226 226 255 88 88 88 255 /*LABEL_PROPERTIES_4X4_MONTH_TYPE*/
+255 255 255 255 226 226 226 255 88 88 88 255 /*LABEL_PROPERTIES_LAND_IP_ABC*/
+255 255 255 255 226 226 226 255 88 88 88 255 /*LABEL_PROPERTIES_LAND_IP_ABC*/
+255 255 255 255 226 226 226 255 88 88 88 255 /*LABEL_PROPERTIES_LAND_IP_ABC*/
+255 255 255 255 226 226 226 255 88 88 88 255 /*LABEL_PROPERTIES_LAND_MONTH*/
+255 255 255 255 226 226 226 255 88 88 88 255 /*LABEL_PROPERTIES_LAND_MONTH*/
+255 255 255 255 226 226 226 255 88 88 88 255 /*LABEL_PROPERTIES_LAND_MONTH*/
+255 255 255 255 226 226 226 255 88 88 88 255 /*LABEL_PROPERTIES_PUNTUATION_BUTTON_TYPE*/
+255 255 255 255 226 226 226 255 88 88 88 255 /*LABEL_PROPERTIES_PUNTUATION_BUTTON_TYPE*/
+255 255 255 255 226 226 226 255 88 88 88 255 /*LABEL_PROPERTIES_PUNTUATION_BUTTON_TYPE*/
+255 255 255 255 226 226 226 255 178 178 178 255 /*LABEL_PROPERTIES_QTY_SPACE_KEY_TYPE*/
+255 255 255 255 226 226 226 255 178 178 178 255 /*LABEL_PROPERTIES_QTY_SPACE_KEY_TYPE*/
+255 255 255 226 226 226 255 178 178 178 255 /*LABEL_PROPERTIES_QTY_SPACE_KEY_TYPE*/
+255 255 255 255 226 226 226 255 178 178 178 255 /*LABEL_PROPERTIES_QTY_SPACE_KEY_TYPE*/
+255 255 255 255 226 226 226 255 178 178 178 255 /*LABEL_PROPERTIES_QTY_SPACE_KEY_TYPE*/
+255 255 255 255 226 226 226 255 178 178 178 255 /*LABEL_PROPERTIES_QTY_SPACE_KEY_TYPE*/
+255 255 255 255 226 226 226 255 178 178 178 255 /*LABEL_PROPERTIES_QTY_SPACE_KEY_TYPE*/
+255 255 255 255 226 226 226 255 178 178 178 255 /*LABEL_PROPERTIES_QTY_SPACE_KEY_TYPE*/
+255 255 255 255 226 226 226 255 178 178 178 255 /*LABEL_PROPERTIES_QTY_SPACE_KEY_TYPE*/
\ No newline at end of file
diff --git a/data/pixmaps/keypad_eng_punctuation.png b/data/pixmaps/keypad_eng_punctuation.png
new file mode 100755 (executable)
index 0000000..ec0dbc3
Binary files /dev/null and b/data/pixmaps/keypad_eng_punctuation.png differ
diff --git a/data/pixmaps/language_icon_port.png b/data/pixmaps/language_icon_port.png
new file mode 100755 (executable)
index 0000000..0f91b26
Binary files /dev/null and b/data/pixmaps/language_icon_port.png differ
diff --git a/data/pixmaps/language_icon_port_disable.png b/data/pixmaps/language_icon_port_disable.png
new file mode 100755 (executable)
index 0000000..f818492
Binary files /dev/null and b/data/pixmaps/language_icon_port_disable.png differ
diff --git a/data/pixmaps/language_icon_port_grey.png b/data/pixmaps/language_icon_port_grey.png
new file mode 100755 (executable)
index 0000000..3ab75f0
Binary files /dev/null and b/data/pixmaps/language_icon_port_grey.png differ
diff --git a/data/pixmaps/qwerty_icon_symbol.png b/data/pixmaps/qwerty_icon_symbol.png
new file mode 100755 (executable)
index 0000000..a87592d
Binary files /dev/null and b/data/pixmaps/qwerty_icon_symbol.png differ
diff --git a/data/pixmaps/symbol_icon_port.png b/data/pixmaps/symbol_icon_port.png
new file mode 100755 (executable)
index 0000000..a87592d
Binary files /dev/null and b/data/pixmaps/symbol_icon_port.png differ
diff --git a/data/pixmaps/symbol_icon_thai_port.png b/data/pixmaps/symbol_icon_thai_port.png
new file mode 100755 (executable)
index 0000000..de9d451
Binary files /dev/null and b/data/pixmaps/symbol_icon_thai_port.png differ
diff --git a/data/pixmaps/textinput_bottom_button_function.png b/data/pixmaps/textinput_bottom_button_function.png
new file mode 100755 (executable)
index 0000000..6667263
Binary files /dev/null and b/data/pixmaps/textinput_bottom_button_function.png differ
diff --git a/data/pixmaps/textinput_bottom_button_nml.png b/data/pixmaps/textinput_bottom_button_nml.png
new file mode 100755 (executable)
index 0000000..1430475
Binary files /dev/null and b/data/pixmaps/textinput_bottom_button_nml.png differ
diff --git a/data/pixmaps/textinput_bottom_button_press.png b/data/pixmaps/textinput_bottom_button_press.png
new file mode 100755 (executable)
index 0000000..7b4a042
Binary files /dev/null and b/data/pixmaps/textinput_bottom_button_press.png differ
diff --git a/data/pixmaps/textinput_button_symbol_left.png b/data/pixmaps/textinput_button_symbol_left.png
new file mode 100755 (executable)
index 0000000..e452727
Binary files /dev/null and b/data/pixmaps/textinput_button_symbol_left.png differ
diff --git a/data/pixmaps/textinput_button_symbol_left_press.png b/data/pixmaps/textinput_button_symbol_left_press.png
new file mode 100755 (executable)
index 0000000..5ac9599
Binary files /dev/null and b/data/pixmaps/textinput_button_symbol_left_press.png differ
diff --git a/data/pixmaps/textinput_button_symbol_right.png b/data/pixmaps/textinput_button_symbol_right.png
new file mode 100755 (executable)
index 0000000..5d97dc4
Binary files /dev/null and b/data/pixmaps/textinput_button_symbol_right.png differ
diff --git a/data/pixmaps/textinput_button_symbol_right_press.png b/data/pixmaps/textinput_button_symbol_right_press.png
new file mode 100755 (executable)
index 0000000..eff0feb
Binary files /dev/null and b/data/pixmaps/textinput_button_symbol_right_press.png differ
diff --git a/data/pixmaps/textinput_french_icon_clear.png b/data/pixmaps/textinput_french_icon_clear.png
new file mode 100755 (executable)
index 0000000..964c4bd
Binary files /dev/null and b/data/pixmaps/textinput_french_icon_clear.png differ
diff --git a/data/pixmaps/textinput_french_icon_shift_01.png b/data/pixmaps/textinput_french_icon_shift_01.png
new file mode 100755 (executable)
index 0000000..7b79af3
Binary files /dev/null and b/data/pixmaps/textinput_french_icon_shift_01.png differ
diff --git a/data/pixmaps/textinput_french_icon_shift_01_disable.png b/data/pixmaps/textinput_french_icon_shift_01_disable.png
new file mode 100755 (executable)
index 0000000..3a79b98
Binary files /dev/null and b/data/pixmaps/textinput_french_icon_shift_01_disable.png differ
diff --git a/data/pixmaps/textinput_french_icon_shift_02.png b/data/pixmaps/textinput_french_icon_shift_02.png
new file mode 100755 (executable)
index 0000000..2a8bb28
Binary files /dev/null and b/data/pixmaps/textinput_french_icon_shift_02.png differ
diff --git a/data/pixmaps/textinput_french_icon_shift_03.png b/data/pixmaps/textinput_french_icon_shift_03.png
new file mode 100755 (executable)
index 0000000..6b9af69
Binary files /dev/null and b/data/pixmaps/textinput_french_icon_shift_03.png differ
diff --git a/data/pixmaps/textinput_icon_arrow_down.png b/data/pixmaps/textinput_icon_arrow_down.png
new file mode 100755 (executable)
index 0000000..f5d2ab3
Binary files /dev/null and b/data/pixmaps/textinput_icon_arrow_down.png differ
diff --git a/data/pixmaps/textinput_icon_arrow_left.png b/data/pixmaps/textinput_icon_arrow_left.png
new file mode 100755 (executable)
index 0000000..0845a6e
Binary files /dev/null and b/data/pixmaps/textinput_icon_arrow_left.png differ
diff --git a/data/pixmaps/textinput_icon_arrow_right.png b/data/pixmaps/textinput_icon_arrow_right.png
new file mode 100755 (executable)
index 0000000..8c9da37
Binary files /dev/null and b/data/pixmaps/textinput_icon_arrow_right.png differ
diff --git a/data/pixmaps/textinput_icon_arrow_up.png b/data/pixmaps/textinput_icon_arrow_up.png
new file mode 100755 (executable)
index 0000000..e2e51d7
Binary files /dev/null and b/data/pixmaps/textinput_icon_arrow_up.png differ
diff --git a/data/pixmaps/textinput_icon_space.png b/data/pixmaps/textinput_icon_space.png
new file mode 100755 (executable)
index 0000000..62f2093
Binary files /dev/null and b/data/pixmaps/textinput_icon_space.png differ
diff --git a/data/pixmaps/textinput_icon_space_email.png b/data/pixmaps/textinput_icon_space_email.png
new file mode 100755 (executable)
index 0000000..71888a4
Binary files /dev/null and b/data/pixmaps/textinput_icon_space_email.png differ
diff --git a/data/pixmaps/textinput_icon_space_email_press.png b/data/pixmaps/textinput_icon_space_email_press.png
new file mode 100755 (executable)
index 0000000..5f78942
Binary files /dev/null and b/data/pixmaps/textinput_icon_space_email_press.png differ
diff --git a/data/pixmaps/textinput_icon_space_press.png b/data/pixmaps/textinput_icon_space_press.png
new file mode 100755 (executable)
index 0000000..2af75e3
Binary files /dev/null and b/data/pixmaps/textinput_icon_space_press.png differ
diff --git a/data/pixmaps/textinput_panel_bg.png b/data/pixmaps/textinput_panel_bg.png
new file mode 100755 (executable)
index 0000000..262187a
Binary files /dev/null and b/data/pixmaps/textinput_panel_bg.png differ
diff --git a/data/pixmaps/textinput_panel_dimming.png b/data/pixmaps/textinput_panel_dimming.png
new file mode 100755 (executable)
index 0000000..cfb0142
Binary files /dev/null and b/data/pixmaps/textinput_panel_dimming.png differ
diff --git a/data/pixmaps/textinput_popup_bg1.png b/data/pixmaps/textinput_popup_bg1.png
new file mode 100755 (executable)
index 0000000..83ef2e7
Binary files /dev/null and b/data/pixmaps/textinput_popup_bg1.png differ
diff --git a/data/pixmaps/textinput_popup_bg2.png b/data/pixmaps/textinput_popup_bg2.png
new file mode 100755 (executable)
index 0000000..c53860c
Binary files /dev/null and b/data/pixmaps/textinput_popup_bg2.png differ
diff --git a/data/pixmaps/textinput_popup_bg3.png b/data/pixmaps/textinput_popup_bg3.png
new file mode 100755 (executable)
index 0000000..ffbcb0c
Binary files /dev/null and b/data/pixmaps/textinput_popup_bg3.png differ
diff --git a/data/pixmaps/textinput_popup_button_function.png b/data/pixmaps/textinput_popup_button_function.png
new file mode 100755 (executable)
index 0000000..8d8bf47
Binary files /dev/null and b/data/pixmaps/textinput_popup_button_function.png differ
diff --git a/data/pixmaps/textinput_popup_button_nml.png b/data/pixmaps/textinput_popup_button_nml.png
new file mode 100755 (executable)
index 0000000..33f6891
Binary files /dev/null and b/data/pixmaps/textinput_popup_button_nml.png differ
diff --git a/data/pixmaps/textinput_popup_button_press.png b/data/pixmaps/textinput_popup_button_press.png
new file mode 100755 (executable)
index 0000000..da80928
Binary files /dev/null and b/data/pixmaps/textinput_popup_button_press.png differ
diff --git a/data/pixmaps/textinput_qwerty_button_capslock_press.png b/data/pixmaps/textinput_qwerty_button_capslock_press.png
new file mode 100755 (executable)
index 0000000..fd7c051
Binary files /dev/null and b/data/pixmaps/textinput_qwerty_button_capslock_press.png differ
diff --git a/data/pixmaps/textinput_qwerty_button_function.png b/data/pixmaps/textinput_qwerty_button_function.png
new file mode 100755 (executable)
index 0000000..5ea7804
Binary files /dev/null and b/data/pixmaps/textinput_qwerty_button_function.png differ
diff --git a/data/pixmaps/textinput_qwerty_button_nml.png b/data/pixmaps/textinput_qwerty_button_nml.png
new file mode 100755 (executable)
index 0000000..7ec5a4c
Binary files /dev/null and b/data/pixmaps/textinput_qwerty_button_nml.png differ
diff --git a/data/pixmaps/textinput_qwerty_button_press.png b/data/pixmaps/textinput_qwerty_button_press.png
new file mode 100755 (executable)
index 0000000..2b899f8
Binary files /dev/null and b/data/pixmaps/textinput_qwerty_button_press.png differ
diff --git a/data/pixmaps/textinput_qwerty_icon_clear.png b/data/pixmaps/textinput_qwerty_icon_clear.png
new file mode 100755 (executable)
index 0000000..9c893cb
Binary files /dev/null and b/data/pixmaps/textinput_qwerty_icon_clear.png differ
diff --git a/data/pixmaps/textinput_qwerty_icon_enter.png b/data/pixmaps/textinput_qwerty_icon_enter.png
new file mode 100755 (executable)
index 0000000..eb250c3
Binary files /dev/null and b/data/pixmaps/textinput_qwerty_icon_enter.png differ
diff --git a/data/pixmaps/textinput_qwerty_icon_enter_disabled.png b/data/pixmaps/textinput_qwerty_icon_enter_disabled.png
new file mode 100755 (executable)
index 0000000..9589d1a
Binary files /dev/null and b/data/pixmaps/textinput_qwerty_icon_enter_disabled.png differ
diff --git a/data/pixmaps/textinput_qwerty_icon_shift_01.png b/data/pixmaps/textinput_qwerty_icon_shift_01.png
new file mode 100755 (executable)
index 0000000..a6ca81b
Binary files /dev/null and b/data/pixmaps/textinput_qwerty_icon_shift_01.png differ
diff --git a/data/pixmaps/textinput_qwerty_icon_shift_01_disable.png b/data/pixmaps/textinput_qwerty_icon_shift_01_disable.png
new file mode 100755 (executable)
index 0000000..fe10086
Binary files /dev/null and b/data/pixmaps/textinput_qwerty_icon_shift_01_disable.png differ
diff --git a/data/pixmaps/textinput_qwerty_icon_shift_02.png b/data/pixmaps/textinput_qwerty_icon_shift_02.png
new file mode 100755 (executable)
index 0000000..a41c2be
Binary files /dev/null and b/data/pixmaps/textinput_qwerty_icon_shift_02.png differ
diff --git a/data/pixmaps/textinput_qwerty_icon_shift_03.png b/data/pixmaps/textinput_qwerty_icon_shift_03.png
new file mode 100755 (executable)
index 0000000..5a5b1ad
Binary files /dev/null and b/data/pixmaps/textinput_qwerty_icon_shift_03.png differ
diff --git a/data/pixmaps/textinput_russian_icon_clear.png b/data/pixmaps/textinput_russian_icon_clear.png
new file mode 100755 (executable)
index 0000000..8e1d9a1
Binary files /dev/null and b/data/pixmaps/textinput_russian_icon_clear.png differ
diff --git a/data/pixmaps/textinput_russian_icon_shift_01.png b/data/pixmaps/textinput_russian_icon_shift_01.png
new file mode 100755 (executable)
index 0000000..3b770da
Binary files /dev/null and b/data/pixmaps/textinput_russian_icon_shift_01.png differ
diff --git a/data/pixmaps/textinput_russian_icon_shift_01_disable.png b/data/pixmaps/textinput_russian_icon_shift_01_disable.png
new file mode 100755 (executable)
index 0000000..a87c7a5
Binary files /dev/null and b/data/pixmaps/textinput_russian_icon_shift_01_disable.png differ
diff --git a/data/pixmaps/textinput_russian_icon_shift_02.png b/data/pixmaps/textinput_russian_icon_shift_02.png
new file mode 100755 (executable)
index 0000000..85dc1d5
Binary files /dev/null and b/data/pixmaps/textinput_russian_icon_shift_02.png differ
diff --git a/data/pixmaps/textinput_russian_icon_shift_03.png b/data/pixmaps/textinput_russian_icon_shift_03.png
new file mode 100755 (executable)
index 0000000..ec8d1e1
Binary files /dev/null and b/data/pixmaps/textinput_russian_icon_shift_03.png differ
diff --git a/debian/changelog b/debian/changelog
new file mode 100755 (executable)
index 0000000..f8fc745
--- /dev/null
@@ -0,0 +1,9 @@
+ise-default (0.2.2-68) unstable; urgency=low
+
+  * Fix the flickering on moving to text entry while auto capitalisation is on (N_SE-729)
+  * Tap & hold on key with autopoup(additional letters) the highlighted letter is not inputted on release
+  * Git: pkgs/i/ise-default
+  * Tag: ise-default_0.2.2-68
+
+ -- Ankush Dua <ankush.d@samsung.com>  Fri, 20 Apr 2012 14:53:27 +0530
+
diff --git a/debian/compat b/debian/compat
new file mode 100755 (executable)
index 0000000..7ed6ff8
--- /dev/null
@@ -0,0 +1 @@
+5
diff --git a/debian/control b/debian/control
new file mode 100755 (executable)
index 0000000..0cd6f50
--- /dev/null
@@ -0,0 +1,20 @@
+Source: ise-default
+Section: libs
+Priority: optional
+Maintainer: Ashish Malhotra <a.malhotra@samsung.com>
+Uploaders: Ji-hoon Lee <dalton.lee@samsung.com>, Jihoon Kim <jihoon48@samsung.com>, Ashish Malhotra <a.malhotra>, Janani K <janani.k@samsung.com>, Sungmin Kwak <sungmin.kwak@samsung.com>
+Build-Depends: debhelper (>= 5), autotools-dev, libelm-dev, libslp-utilx-dev, libisf-dev, libslp-setting-dev, libheynoti-dev, libdevman-haptic-dev, libaul-1-dev, libui-gadget-dev
+Standards-Version: 3.7.2
+Homepage: N/A
+
+Package: ise-default
+Section: libs
+Architecture: any
+Depends: ${shlibs:Depends}, ${misc:Depends}
+Description: Tizen keyboard
+
+Package: ise-default-dbg
+Section: debug
+Architecture: any
+Depends: ${shlibs:Depends}, ${misc:Depends}
+Description: Tizen keyboard (unstripped)
diff --git a/debian/copyright b/debian/copyright
new file mode 100755 (executable)
index 0000000..083f8b4
--- /dev/null
@@ -0,0 +1,13 @@
+Copyright 2012  Samsung Electronics Co., Ltd
+
+Licensed under the Flora License, Version 1.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.tizenopensource.org/license
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
diff --git a/debian/docs b/debian/docs
new file mode 100755 (executable)
index 0000000..50bd824
--- /dev/null
@@ -0,0 +1,2 @@
+NEWS
+README
diff --git a/debian/ise-default.install.in b/debian/ise-default.install.in
new file mode 100755 (executable)
index 0000000..28ba7a9
--- /dev/null
@@ -0,0 +1,5 @@
+usr/lib/scim-1.0/1.4.0/Helper/*
+usr/lib/scim-1.0/1.4.0/SetupUI/*
+usr/share/isf/ise/ise-default/*
+usr/share/locale/*
+usr/share/scim/icons/*
diff --git a/debian/ise-default.postinst b/debian/ise-default.postinst
new file mode 100755 (executable)
index 0000000..1a24852
--- /dev/null
@@ -0,0 +1 @@
+#!/bin/sh
diff --git a/debian/rules b/debian/rules
new file mode 100755 (executable)
index 0000000..51f5aec
--- /dev/null
@@ -0,0 +1,123 @@
+#!/usr/bin/make -f
+# -*- makefile -*-
+# Sample debian/rules that uses debhelper.
+# This file was originally written by Joey Hess and Craig Small.
+# As a special exception, when this file is copied by dh-make into a
+# dh-make output file, you may use that output file without restriction.
+# This special exception was added by Craig Small in version 0.37 of dh-make.
+
+# Uncomment this to turn on verbose mode.
+#export DH_VERBOSE=1
+
+
+# These are used for cross-compiling and for saving the configure script
+# from having to guess our platform (since we know it already)
+DEB_HOST_GNU_TYPE   ?= $(shell dpkg-architecture -qDEB_HOST_GNU_TYPE)
+DEB_BUILD_GNU_TYPE  ?= $(shell dpkg-architecture -qDEB_BUILD_GNU_TYPE)
+
+CFLAGS ?= -Wall -g
+CXXFLAGS ?= -Wall -g
+LDFLAGS ?=
+PREFIX ?= /usr
+DATADIR ?= /opt
+
+ifneq (,$(findstring noopt,$(DEB_BUILD_OPTIONS)))
+       CFLAGS += -O0
+       CXXFLAGS += -O0
+else
+       CFLAGS += -O2
+       CXXFLAGS += -O2
+endif
+
+config.status: 
+       dh_testdir
+       # Add here commands to configure the package.
+       ./bootstrap
+       PREFIX=$(PREFIX) ./configure --prefix=$(PREFIX) CFLAGS="$(CFLAGS)" CXXFLAGS="$(CXXFLAGS)" LDFLAGS="$(LDFLAGS)"
+
+
+build: build-stamp
+
+build-stamp:  config.status
+       dh_testdir
+
+       # Add here commands to compile the package.
+       $(MAKE)
+       #docbook-to-man debian/ncurses.sgml > ncurses.1
+
+       for f in `find $(CURDIR)/debian/ -name "*.in"`; do \
+               cat $$f > $${f%.in}; \
+               sed -i -e "s#@PREFIX@#$(PREFIX)#g" $${f%.in}; \
+               sed -i -e "s#@DATADIR@#$(DATADIR)#g" $${f%.in}; \
+       done
+
+       touch $@
+
+clean:
+       dh_testdir
+       dh_testroot
+       rm -f build-stamp 
+
+       # Add here commands to clean up after the build process.
+       -$(MAKE) distclean
+ifneq "$(wildcard /usr/share/misc/config.sub)" ""
+       cp -f /usr/share/misc/config.sub config.sub
+endif
+ifneq "$(wildcard /usr/share/misc/config.guess)" ""
+       cp -f /usr/share/misc/config.guess config.guess
+endif
+
+       for f in `find $(CURDIR)/debian/ -name "*.in"`; do \
+               rm -f $${f%.in}; \
+       done
+
+       dh_clean 
+
+install: build
+       dh_testdir
+       dh_testroot
+       dh_clean -k 
+       dh_installdirs
+
+       # Add here commands to install the package into debian/ncurses.
+       $(MAKE) DESTDIR=$(CURDIR)/debian/tmp install
+
+
+# Build architecture-independent files here.
+binary-indep: build install
+# We have nothing to do by default.
+
+# Build architecture-dependent files here.
+binary-arch: build install
+       dh_testdir
+       dh_testroot
+       dh_installchangelogs 
+       dh_installdocs
+       dh_installexamples
+       dh_install --sourcedir=debian/tmp
+#      dh_installmenu
+#      dh_installdebconf       
+#      dh_installlogrotate
+#      dh_installemacsen
+#      dh_installpam
+#      dh_installmime
+#      dh_python
+#      dh_installinit
+#      dh_installcron
+#      dh_installinfo
+       dh_installman
+       dh_link
+#      dh_strip
+       dh_strip --dbg-package=ise-default-dbg
+       dh_compress
+       dh_fixperms
+#      dh_perl
+#      dh_makeshlibs
+       dh_installdeb
+       dh_shlibdeps
+       dh_gencontrol
+       dh_md5sums
+       dh_builddeb
+
+binary: binary-indep binary-arch
+.PHONY: build clean binary-indep binary-arch binary install 
diff --git a/ltmain.sh b/ltmain.sh
new file mode 100755 (executable)
index 0000000..d88da2c
--- /dev/null
+++ b/ltmain.sh
@@ -0,0 +1,8413 @@
+# Generated from ltmain.m4sh.
+
+# ltmain.sh (GNU libtool) 2.2.6b
+# Written by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
+
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006, 2007 2008 Free Software Foundation, Inc.
+# This is free software; see the source for copying conditions.  There is NO
+# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+# GNU Libtool 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.
+#
+# As a special exception to the GNU General Public License,
+# if you distribute this file as part of a program or library that
+# is built using GNU Libtool, you may include this file under the
+# same distribution terms that you use for the rest of that program.
+#
+# GNU Libtool 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 GNU Libtool; see the file COPYING.  If not, a copy
+# can be downloaded from http://www.gnu.org/licenses/gpl.html,
+# or obtained by writing to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+
+# Usage: $progname [OPTION]... [MODE-ARG]...
+#
+# Provide generalized library-building support services.
+#
+#     --config             show all configuration variables
+#     --debug              enable verbose shell tracing
+# -n, --dry-run            display commands without modifying any files
+#     --features           display basic configuration information and exit
+#     --mode=MODE          use operation mode MODE
+#     --preserve-dup-deps  don't remove duplicate dependency libraries
+#     --quiet, --silent    don't print informational messages
+#     --tag=TAG            use configuration variables from tag TAG
+# -v, --verbose            print informational messages (default)
+#     --version            print version information
+# -h, --help               print short or long help message
+#
+# MODE must be one of the following:
+#
+#       clean              remove files from the build directory
+#       compile            compile a source file into a libtool object
+#       execute            automatically set library path, then run a program
+#       finish             complete the installation of libtool libraries
+#       install            install libraries or executables
+#       link               create a library or an executable
+#       uninstall          remove libraries from an installed directory
+#
+# MODE-ARGS vary depending on the MODE.
+# Try `$progname --help --mode=MODE' for a more detailed description of MODE.
+#
+# When reporting a bug, please describe a test case to reproduce it and
+# include the following information:
+#
+#       host-triplet:  $host
+#       shell:         $SHELL
+#       compiler:              $LTCC
+#       compiler flags:                $LTCFLAGS
+#       linker:                $LD (gnu? $with_gnu_ld)
+#       $progname:             (GNU libtool) 2.2.6b Debian-2.2.6b-2
+#       automake:              $automake_version
+#       autoconf:              $autoconf_version
+#
+# Report bugs to <bug-libtool@gnu.org>.
+
+PROGRAM=ltmain.sh
+PACKAGE=libtool
+VERSION="2.2.6b Debian-2.2.6b-2"
+TIMESTAMP=""
+package_revision=1.3017
+
+# Be Bourne compatible
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
+  emulate sh
+  NULLCMD=:
+  # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
+  # is contrary to our usage.  Disable this feature.
+  alias -g '${1+"$@"}'='"$@"'
+  setopt NO_GLOB_SUBST
+else
+  case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac
+fi
+BIN_SH=xpg4; export BIN_SH # for Tru64
+DUALCASE=1; export DUALCASE # for MKS sh
+
+# NLS nuisances: We save the old values to restore during execute mode.
+# Only set LANG and LC_ALL to C if already set.
+# These must not be set unconditionally because not all systems understand
+# e.g. LANG=C (notably SCO).
+lt_user_locale=
+lt_safe_locale=
+for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES
+do
+  eval "if test \"\${$lt_var+set}\" = set; then
+          save_$lt_var=\$$lt_var
+          $lt_var=C
+         export $lt_var
+         lt_user_locale=\"$lt_var=\\\$save_\$lt_var; \$lt_user_locale\"
+         lt_safe_locale=\"$lt_var=C; \$lt_safe_locale\"
+       fi"
+done
+
+$lt_unset CDPATH
+
+
+
+
+
+: ${CP="cp -f"}
+: ${ECHO="echo"}
+: ${EGREP="/bin/grep -E"}
+: ${FGREP="/bin/grep -F"}
+: ${GREP="/bin/grep"}
+: ${LN_S="ln -s"}
+: ${MAKE="make"}
+: ${MKDIR="mkdir"}
+: ${MV="mv -f"}
+: ${RM="rm -f"}
+: ${SED="/bin/sed"}
+: ${SHELL="${CONFIG_SHELL-/bin/sh}"}
+: ${Xsed="$SED -e 1s/^X//"}
+
+# Global variables:
+EXIT_SUCCESS=0
+EXIT_FAILURE=1
+EXIT_MISMATCH=63  # $? = 63 is used to indicate version mismatch to missing.
+EXIT_SKIP=77     # $? = 77 is used to indicate a skipped test to automake.
+
+exit_status=$EXIT_SUCCESS
+
+# Make sure IFS has a sensible default
+lt_nl='
+'
+IFS="  $lt_nl"
+
+dirname="s,/[^/]*$,,"
+basename="s,^.*/,,"
+
+# func_dirname_and_basename file append nondir_replacement
+# perform func_basename and func_dirname in a single function
+# call:
+#   dirname:  Compute the dirname of FILE.  If nonempty,
+#             add APPEND to the result, otherwise set result
+#             to NONDIR_REPLACEMENT.
+#             value returned in "$func_dirname_result"
+#   basename: Compute filename of FILE.
+#             value retuned in "$func_basename_result"
+# Implementation must be kept synchronized with func_dirname
+# and func_basename. For efficiency, we do not delegate to
+# those functions but instead duplicate the functionality here.
+func_dirname_and_basename ()
+{
+  # Extract subdirectory from the argument.
+  func_dirname_result=`$ECHO "X${1}" | $Xsed -e "$dirname"`
+  if test "X$func_dirname_result" = "X${1}"; then
+    func_dirname_result="${3}"
+  else
+    func_dirname_result="$func_dirname_result${2}"
+  fi
+  func_basename_result=`$ECHO "X${1}" | $Xsed -e "$basename"`
+}
+
+# Generated shell functions inserted here.
+
+# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh
+# is ksh but when the shell is invoked as "sh" and the current value of
+# the _XPG environment variable is not equal to 1 (one), the special
+# positional parameter $0, within a function call, is the name of the
+# function.
+progpath="$0"
+
+# The name of this program:
+# In the unlikely event $progname began with a '-', it would play havoc with
+# func_echo (imagine progname=-n), so we prepend ./ in that case:
+func_dirname_and_basename "$progpath"
+progname=$func_basename_result
+case $progname in
+  -*) progname=./$progname ;;
+esac
+
+# Make sure we have an absolute path for reexecution:
+case $progpath in
+  [\\/]*|[A-Za-z]:\\*) ;;
+  *[\\/]*)
+     progdir=$func_dirname_result
+     progdir=`cd "$progdir" && pwd`
+     progpath="$progdir/$progname"
+     ;;
+  *)
+     save_IFS="$IFS"
+     IFS=:
+     for progdir in $PATH; do
+       IFS="$save_IFS"
+       test -x "$progdir/$progname" && break
+     done
+     IFS="$save_IFS"
+     test -n "$progdir" || progdir=`pwd`
+     progpath="$progdir/$progname"
+     ;;
+esac
+
+# Sed substitution that helps us do robust quoting.  It backslashifies
+# metacharacters that are still active within double-quoted strings.
+Xsed="${SED}"' -e 1s/^X//'
+sed_quote_subst='s/\([`"$\\]\)/\\\1/g'
+
+# Same as above, but do not quote variable references.
+double_quote_subst='s/\(["`\\]\)/\\\1/g'
+
+# Re-`\' parameter expansions in output of double_quote_subst that were
+# `\'-ed in input to the same.  If an odd number of `\' preceded a '$'
+# in input to double_quote_subst, that '$' was protected from expansion.
+# Since each input `\' is now two `\'s, look for any number of runs of
+# four `\'s followed by two `\'s and then a '$'.  `\' that '$'.
+bs='\\'
+bs2='\\\\'
+bs4='\\\\\\\\'
+dollar='\$'
+sed_double_backslash="\
+  s/$bs4/&\\
+/g
+  s/^$bs2$dollar/$bs&/
+  s/\\([^$bs]\\)$bs2$dollar/\\1$bs2$bs$dollar/g
+  s/\n//g"
+
+# Standard options:
+opt_dry_run=false
+opt_help=false
+opt_quiet=false
+opt_verbose=false
+opt_warning=:
+
+# func_echo arg...
+# Echo program name prefixed message, along with the current mode
+# name if it has been set yet.
+func_echo ()
+{
+    $ECHO "$progname${mode+: }$mode: $*"
+}
+
+# func_verbose arg...
+# Echo program name prefixed message in verbose mode only.
+func_verbose ()
+{
+    $opt_verbose && func_echo ${1+"$@"}
+
+    # A bug in bash halts the script if the last line of a function
+    # fails when set -e is in force, so we need another command to
+    # work around that:
+    :
+}
+
+# func_error arg...
+# Echo program name prefixed message to standard error.
+func_error ()
+{
+    $ECHO "$progname${mode+: }$mode: "${1+"$@"} 1>&2
+}
+
+# func_warning arg...
+# Echo program name prefixed warning message to standard error.
+func_warning ()
+{
+    $opt_warning && $ECHO "$progname${mode+: }$mode: warning: "${1+"$@"} 1>&2
+
+    # bash bug again:
+    :
+}
+
+# func_fatal_error arg...
+# Echo program name prefixed message to standard error, and exit.
+func_fatal_error ()
+{
+    func_error ${1+"$@"}
+    exit $EXIT_FAILURE
+}
+
+# func_fatal_help arg...
+# Echo program name prefixed message to standard error, followed by
+# a help hint, and exit.
+func_fatal_help ()
+{
+    func_error ${1+"$@"}
+    func_fatal_error "$help"
+}
+help="Try \`$progname --help' for more information."  ## default
+
+
+# func_grep expression filename
+# Check whether EXPRESSION matches any line of FILENAME, without output.
+func_grep ()
+{
+    $GREP "$1" "$2" >/dev/null 2>&1
+}
+
+
+# func_mkdir_p directory-path
+# Make sure the entire path to DIRECTORY-PATH is available.
+func_mkdir_p ()
+{
+    my_directory_path="$1"
+    my_dir_list=
+
+    if test -n "$my_directory_path" && test "$opt_dry_run" != ":"; then
+
+      # Protect directory names starting with `-'
+      case $my_directory_path in
+        -*) my_directory_path="./$my_directory_path" ;;
+      esac
+
+      # While some portion of DIR does not yet exist...
+      while test ! -d "$my_directory_path"; do
+        # ...make a list in topmost first order.  Use a colon delimited
+       # list incase some portion of path contains whitespace.
+        my_dir_list="$my_directory_path:$my_dir_list"
+
+        # If the last portion added has no slash in it, the list is done
+        case $my_directory_path in */*) ;; *) break ;; esac
+
+        # ...otherwise throw away the child directory and loop
+        my_directory_path=`$ECHO "X$my_directory_path" | $Xsed -e "$dirname"`
+      done
+      my_dir_list=`$ECHO "X$my_dir_list" | $Xsed -e 's,:*$,,'`
+
+      save_mkdir_p_IFS="$IFS"; IFS=':'
+      for my_dir in $my_dir_list; do
+       IFS="$save_mkdir_p_IFS"
+        # mkdir can fail with a `File exist' error if two processes
+        # try to create one of the directories concurrently.  Don't
+        # stop in that case!
+        $MKDIR "$my_dir" 2>/dev/null || :
+      done
+      IFS="$save_mkdir_p_IFS"
+
+      # Bail out if we (or some other process) failed to create a directory.
+      test -d "$my_directory_path" || \
+        func_fatal_error "Failed to create \`$1'"
+    fi
+}
+
+
+# func_mktempdir [string]
+# Make a temporary directory that won't clash with other running
+# libtool processes, and avoids race conditions if possible.  If
+# given, STRING is the basename for that directory.
+func_mktempdir ()
+{
+    my_template="${TMPDIR-/tmp}/${1-$progname}"
+
+    if test "$opt_dry_run" = ":"; then
+      # Return a directory name, but don't create it in dry-run mode
+      my_tmpdir="${my_template}-$$"
+    else
+
+      # If mktemp works, use that first and foremost
+      my_tmpdir=`mktemp -d "${my_template}-XXXXXXXX" 2>/dev/null`
+
+      if test ! -d "$my_tmpdir"; then
+        # Failing that, at least try and use $RANDOM to avoid a race
+        my_tmpdir="${my_template}-${RANDOM-0}$$"
+
+        save_mktempdir_umask=`umask`
+        umask 0077
+        $MKDIR "$my_tmpdir"
+        umask $save_mktempdir_umask
+      fi
+
+      # If we're not in dry-run mode, bomb out on failure
+      test -d "$my_tmpdir" || \
+        func_fatal_error "cannot create temporary directory \`$my_tmpdir'"
+    fi
+
+    $ECHO "X$my_tmpdir" | $Xsed
+}
+
+
+# func_quote_for_eval arg
+# Aesthetically quote ARG to be evaled later.
+# This function returns two values: FUNC_QUOTE_FOR_EVAL_RESULT
+# is double-quoted, suitable for a subsequent eval, whereas
+# FUNC_QUOTE_FOR_EVAL_UNQUOTED_RESULT has merely all characters
+# which are still active within double quotes backslashified.
+func_quote_for_eval ()
+{
+    case $1 in
+      *[\\\`\"\$]*)
+       func_quote_for_eval_unquoted_result=`$ECHO "X$1" | $Xsed -e "$sed_quote_subst"` ;;
+      *)
+        func_quote_for_eval_unquoted_result="$1" ;;
+    esac
+
+    case $func_quote_for_eval_unquoted_result in
+      # Double-quote args containing shell metacharacters to delay
+      # word splitting, command substitution and and variable
+      # expansion for a subsequent eval.
+      # Many Bourne shells cannot handle close brackets correctly
+      # in scan sets, so we specify it separately.
+      *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \    ]*|*]*|"")
+        func_quote_for_eval_result="\"$func_quote_for_eval_unquoted_result\""
+        ;;
+      *)
+        func_quote_for_eval_result="$func_quote_for_eval_unquoted_result"
+    esac
+}
+
+
+# func_quote_for_expand arg
+# Aesthetically quote ARG to be evaled later; same as above,
+# but do not quote variable references.
+func_quote_for_expand ()
+{
+    case $1 in
+      *[\\\`\"]*)
+       my_arg=`$ECHO "X$1" | $Xsed \
+           -e "$double_quote_subst" -e "$sed_double_backslash"` ;;
+      *)
+        my_arg="$1" ;;
+    esac
+
+    case $my_arg in
+      # Double-quote args containing shell metacharacters to delay
+      # word splitting and command substitution for a subsequent eval.
+      # Many Bourne shells cannot handle close brackets correctly
+      # in scan sets, so we specify it separately.
+      *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \    ]*|*]*|"")
+        my_arg="\"$my_arg\""
+        ;;
+    esac
+
+    func_quote_for_expand_result="$my_arg"
+}
+
+
+# func_show_eval cmd [fail_exp]
+# Unless opt_silent is true, then output CMD.  Then, if opt_dryrun is
+# not true, evaluate CMD.  If the evaluation of CMD fails, and FAIL_EXP
+# is given, then evaluate it.
+func_show_eval ()
+{
+    my_cmd="$1"
+    my_fail_exp="${2-:}"
+
+    ${opt_silent-false} || {
+      func_quote_for_expand "$my_cmd"
+      eval "func_echo $func_quote_for_expand_result"
+    }
+
+    if ${opt_dry_run-false}; then :; else
+      eval "$my_cmd"
+      my_status=$?
+      if test "$my_status" -eq 0; then :; else
+       eval "(exit $my_status); $my_fail_exp"
+      fi
+    fi
+}
+
+
+# func_show_eval_locale cmd [fail_exp]
+# Unless opt_silent is true, then output CMD.  Then, if opt_dryrun is
+# not true, evaluate CMD.  If the evaluation of CMD fails, and FAIL_EXP
+# is given, then evaluate it.  Use the saved locale for evaluation.
+func_show_eval_locale ()
+{
+    my_cmd="$1"
+    my_fail_exp="${2-:}"
+
+    ${opt_silent-false} || {
+      func_quote_for_expand "$my_cmd"
+      eval "func_echo $func_quote_for_expand_result"
+    }
+
+    if ${opt_dry_run-false}; then :; else
+      eval "$lt_user_locale
+           $my_cmd"
+      my_status=$?
+      eval "$lt_safe_locale"
+      if test "$my_status" -eq 0; then :; else
+       eval "(exit $my_status); $my_fail_exp"
+      fi
+    fi
+}
+
+
+
+
+
+# func_version
+# Echo version message to standard output and exit.
+func_version ()
+{
+    $SED -n '/^# '$PROGRAM' (GNU /,/# warranty; / {
+        s/^# //
+       s/^# *$//
+        s/\((C)\)[ 0-9,-]*\( [1-9][0-9]*\)/\1\2/
+        p
+     }' < "$progpath"
+     exit $?
+}
+
+# func_usage
+# Echo short help message to standard output and exit.
+func_usage ()
+{
+    $SED -n '/^# Usage:/,/# -h/ {
+        s/^# //
+       s/^# *$//
+       s/\$progname/'$progname'/
+       p
+    }' < "$progpath"
+    $ECHO
+    $ECHO "run \`$progname --help | more' for full usage"
+    exit $?
+}
+
+# func_help
+# Echo long help message to standard output and exit.
+func_help ()
+{
+    $SED -n '/^# Usage:/,/# Report bugs to/ {
+        s/^# //
+       s/^# *$//
+       s*\$progname*'$progname'*
+       s*\$host*'"$host"'*
+       s*\$SHELL*'"$SHELL"'*
+       s*\$LTCC*'"$LTCC"'*
+       s*\$LTCFLAGS*'"$LTCFLAGS"'*
+       s*\$LD*'"$LD"'*
+       s/\$with_gnu_ld/'"$with_gnu_ld"'/
+       s/\$automake_version/'"`(automake --version) 2>/dev/null |$SED 1q`"'/
+       s/\$autoconf_version/'"`(autoconf --version) 2>/dev/null |$SED 1q`"'/
+       p
+     }' < "$progpath"
+    exit $?
+}
+
+# func_missing_arg argname
+# Echo program name prefixed message to standard error and set global
+# exit_cmd.
+func_missing_arg ()
+{
+    func_error "missing argument for $1"
+    exit_cmd=exit
+}
+
+exit_cmd=:
+
+
+
+
+
+# Check that we have a working $ECHO.
+if test "X$1" = X--no-reexec; then
+  # Discard the --no-reexec flag, and continue.
+  shift
+elif test "X$1" = X--fallback-echo; then
+  # Avoid inline document here, it may be left over
+  :
+elif test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t'; then
+  # Yippee, $ECHO works!
+  :
+else
+  # Restart under the correct shell, and then maybe $ECHO will work.
+  exec $SHELL "$progpath" --no-reexec ${1+"$@"}
+fi
+
+if test "X$1" = X--fallback-echo; then
+  # used as fallback echo
+  shift
+  cat <<EOF
+$*
+EOF
+  exit $EXIT_SUCCESS
+fi
+
+magic="%%%MAGIC variable%%%"
+magic_exe="%%%MAGIC EXE variable%%%"
+
+# Global variables.
+# $mode is unset
+nonopt=
+execute_dlfiles=
+preserve_args=
+lo2o="s/\\.lo\$/.${objext}/"
+o2lo="s/\\.${objext}\$/.lo/"
+extracted_archives=
+extracted_serial=0
+
+opt_dry_run=false
+opt_duplicate_deps=false
+opt_silent=false
+opt_debug=:
+
+# If this variable is set in any of the actions, the command in it
+# will be execed at the end.  This prevents here-documents from being
+# left over by shells.
+exec_cmd=
+
+# func_fatal_configuration arg...
+# Echo program name prefixed message to standard error, followed by
+# a configuration failure hint, and exit.
+func_fatal_configuration ()
+{
+    func_error ${1+"$@"}
+    func_error "See the $PACKAGE documentation for more information."
+    func_fatal_error "Fatal configuration error."
+}
+
+
+# func_config
+# Display the configuration for all the tags in this script.
+func_config ()
+{
+    re_begincf='^# ### BEGIN LIBTOOL'
+    re_endcf='^# ### END LIBTOOL'
+
+    # Default configuration.
+    $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath"
+
+    # Now print the configurations for the tags.
+    for tagname in $taglist; do
+      $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath"
+    done
+
+    exit $?
+}
+
+# func_features
+# Display the features supported by this script.
+func_features ()
+{
+    $ECHO "host: $host"
+    if test "$build_libtool_libs" = yes; then
+      $ECHO "enable shared libraries"
+    else
+      $ECHO "disable shared libraries"
+    fi
+    if test "$build_old_libs" = yes; then
+      $ECHO "enable static libraries"
+    else
+      $ECHO "disable static libraries"
+    fi
+
+    exit $?
+}
+
+# func_enable_tag tagname
+# Verify that TAGNAME is valid, and either flag an error and exit, or
+# enable the TAGNAME tag.  We also add TAGNAME to the global $taglist
+# variable here.
+func_enable_tag ()
+{
+  # Global variable:
+  tagname="$1"
+
+  re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$"
+  re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$"
+  sed_extractcf="/$re_begincf/,/$re_endcf/p"
+
+  # Validate tagname.
+  case $tagname in
+    *[!-_A-Za-z0-9,/]*)
+      func_fatal_error "invalid tag name: $tagname"
+      ;;
+  esac
+
+  # Don't test for the "default" C tag, as we know it's
+  # there but not specially marked.
+  case $tagname in
+    CC) ;;
+    *)
+      if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then
+       taglist="$taglist $tagname"
+
+       # Evaluate the configuration.  Be careful to quote the path
+       # and the sed script, to avoid splitting on whitespace, but
+       # also don't use non-portable quotes within backquotes within
+       # quotes we have to do it in 2 steps:
+       extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"`
+       eval "$extractedcf"
+      else
+       func_error "ignoring unknown tag $tagname"
+      fi
+      ;;
+  esac
+}
+
+# Parse options once, thoroughly.  This comes as soon as possible in
+# the script to make things like `libtool --version' happen quickly.
+{
+
+  # Shorthand for --mode=foo, only valid as the first argument
+  case $1 in
+  clean|clea|cle|cl)
+    shift; set dummy --mode clean ${1+"$@"}; shift
+    ;;
+  compile|compil|compi|comp|com|co|c)
+    shift; set dummy --mode compile ${1+"$@"}; shift
+    ;;
+  execute|execut|execu|exec|exe|ex|e)
+    shift; set dummy --mode execute ${1+"$@"}; shift
+    ;;
+  finish|finis|fini|fin|fi|f)
+    shift; set dummy --mode finish ${1+"$@"}; shift
+    ;;
+  install|instal|insta|inst|ins|in|i)
+    shift; set dummy --mode install ${1+"$@"}; shift
+    ;;
+  link|lin|li|l)
+    shift; set dummy --mode link ${1+"$@"}; shift
+    ;;
+  uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u)
+    shift; set dummy --mode uninstall ${1+"$@"}; shift
+    ;;
+  esac
+
+  # Parse non-mode specific arguments:
+  while test "$#" -gt 0; do
+    opt="$1"
+    shift
+
+    case $opt in
+      --config)                func_config                                     ;;
+
+      --debug)         preserve_args="$preserve_args $opt"
+                       func_echo "enabling shell trace mode"
+                       opt_debug='set -x'
+                       $opt_debug
+                       ;;
+
+      -dlopen)         test "$#" -eq 0 && func_missing_arg "$opt" && break
+                       execute_dlfiles="$execute_dlfiles $1"
+                       shift
+                       ;;
+
+      --dry-run | -n)  opt_dry_run=:                                   ;;
+      --features)       func_features                                  ;;
+      --finish)                mode="finish"                                   ;;
+
+      --mode)          test "$#" -eq 0 && func_missing_arg "$opt" && break
+                       case $1 in
+                         # Valid mode arguments:
+                         clean)        ;;
+                         compile)      ;;
+                         execute)      ;;
+                         finish)       ;;
+                         install)      ;;
+                         link)         ;;
+                         relink)       ;;
+                         uninstall)    ;;
+
+                         # Catch anything else as an error
+                         *) func_error "invalid argument for $opt"
+                            exit_cmd=exit
+                            break
+                            ;;
+                       esac
+
+                       mode="$1"
+                       shift
+                       ;;
+
+      --preserve-dup-deps)
+                       opt_duplicate_deps=:                            ;;
+
+      --quiet|--silent)        preserve_args="$preserve_args $opt"
+                       opt_silent=:
+                       ;;
+
+      --verbose| -v)   preserve_args="$preserve_args $opt"
+                       opt_silent=false
+                       ;;
+
+      --tag)           test "$#" -eq 0 && func_missing_arg "$opt" && break
+                       preserve_args="$preserve_args $opt $1"
+                       func_enable_tag "$1"    # tagname is set here
+                       shift
+                       ;;
+
+      # Separate optargs to long options:
+      -dlopen=*|--mode=*|--tag=*)
+                       func_opt_split "$opt"
+                       set dummy "$func_opt_split_opt" "$func_opt_split_arg" ${1+"$@"}
+                       shift
+                       ;;
+
+      -\?|-h)          func_usage                                      ;;
+      --help)          opt_help=:                                      ;;
+      --version)       func_version                                    ;;
+
+      -*)              func_fatal_help "unrecognized option \`$opt'"   ;;
+
+      *)               nonopt="$opt"
+                       break
+                       ;;
+    esac
+  done
+
+
+  case $host in
+    *cygwin* | *mingw* | *pw32* | *cegcc*)
+      # don't eliminate duplications in $postdeps and $predeps
+      opt_duplicate_compiler_generated_deps=:
+      ;;
+    *)
+      opt_duplicate_compiler_generated_deps=$opt_duplicate_deps
+      ;;
+  esac
+
+  # Having warned about all mis-specified options, bail out if
+  # anything was wrong.
+  $exit_cmd $EXIT_FAILURE
+}
+
+# func_check_version_match
+# Ensure that we are using m4 macros, and libtool script from the same
+# release of libtool.
+func_check_version_match ()
+{
+  if test "$package_revision" != "$macro_revision"; then
+    if test "$VERSION" != "$macro_version"; then
+      if test -z "$macro_version"; then
+        cat >&2 <<_LT_EOF
+$progname: Version mismatch error.  This is $PACKAGE $VERSION, but the
+$progname: definition of this LT_INIT comes from an older release.
+$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION
+$progname: and run autoconf again.
+_LT_EOF
+      else
+        cat >&2 <<_LT_EOF
+$progname: Version mismatch error.  This is $PACKAGE $VERSION, but the
+$progname: definition of this LT_INIT comes from $PACKAGE $macro_version.
+$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION
+$progname: and run autoconf again.
+_LT_EOF
+      fi
+    else
+      cat >&2 <<_LT_EOF
+$progname: Version mismatch error.  This is $PACKAGE $VERSION, revision $package_revision,
+$progname: but the definition of this LT_INIT comes from revision $macro_revision.
+$progname: You should recreate aclocal.m4 with macros from revision $package_revision
+$progname: of $PACKAGE $VERSION and run autoconf again.
+_LT_EOF
+    fi
+
+    exit $EXIT_MISMATCH
+  fi
+}
+
+
+## ----------- ##
+##    Main.    ##
+## ----------- ##
+
+$opt_help || {
+  # Sanity checks first:
+  func_check_version_match
+
+  if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then
+    func_fatal_configuration "not configured to build any kind of library"
+  fi
+
+  test -z "$mode" && func_fatal_error "error: you must specify a MODE."
+
+
+  # Darwin sucks
+  eval std_shrext=\"$shrext_cmds\"
+
+
+  # Only execute mode is allowed to have -dlopen flags.
+  if test -n "$execute_dlfiles" && test "$mode" != execute; then
+    func_error "unrecognized option \`-dlopen'"
+    $ECHO "$help" 1>&2
+    exit $EXIT_FAILURE
+  fi
+
+  # Change the help message to a mode-specific one.
+  generic_help="$help"
+  help="Try \`$progname --help --mode=$mode' for more information."
+}
+
+
+# func_lalib_p file
+# True iff FILE is a libtool `.la' library or `.lo' object file.
+# This function is only a basic sanity check; it will hardly flush out
+# determined imposters.
+func_lalib_p ()
+{
+    test -f "$1" &&
+      $SED -e 4q "$1" 2>/dev/null \
+        | $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1
+}
+
+# func_lalib_unsafe_p file
+# True iff FILE is a libtool `.la' library or `.lo' object file.
+# This function implements the same check as func_lalib_p without
+# resorting to external programs.  To this end, it redirects stdin and
+# closes it afterwards, without saving the original file descriptor.
+# As a safety measure, use it only where a negative result would be
+# fatal anyway.  Works if `file' does not exist.
+func_lalib_unsafe_p ()
+{
+    lalib_p=no
+    if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then
+       for lalib_p_l in 1 2 3 4
+       do
+           read lalib_p_line
+           case "$lalib_p_line" in
+               \#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;;
+           esac
+       done
+       exec 0<&5 5<&-
+    fi
+    test "$lalib_p" = yes
+}
+
+# func_ltwrapper_script_p file
+# True iff FILE is a libtool wrapper script
+# This function is only a basic sanity check; it will hardly flush out
+# determined imposters.
+func_ltwrapper_script_p ()
+{
+    func_lalib_p "$1"
+}
+
+# func_ltwrapper_executable_p file
+# True iff FILE is a libtool wrapper executable
+# This function is only a basic sanity check; it will hardly flush out
+# determined imposters.
+func_ltwrapper_executable_p ()
+{
+    func_ltwrapper_exec_suffix=
+    case $1 in
+    *.exe) ;;
+    *) func_ltwrapper_exec_suffix=.exe ;;
+    esac
+    $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1
+}
+
+# func_ltwrapper_scriptname file
+# Assumes file is an ltwrapper_executable
+# uses $file to determine the appropriate filename for a
+# temporary ltwrapper_script.
+func_ltwrapper_scriptname ()
+{
+    func_ltwrapper_scriptname_result=""
+    if func_ltwrapper_executable_p "$1"; then
+       func_dirname_and_basename "$1" "" "."
+       func_stripname '' '.exe' "$func_basename_result"
+       func_ltwrapper_scriptname_result="$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper"
+    fi
+}
+
+# func_ltwrapper_p file
+# True iff FILE is a libtool wrapper script or wrapper executable
+# This function is only a basic sanity check; it will hardly flush out
+# determined imposters.
+func_ltwrapper_p ()
+{
+    func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1"
+}
+
+
+# func_execute_cmds commands fail_cmd
+# Execute tilde-delimited COMMANDS.
+# If FAIL_CMD is given, eval that upon failure.
+# FAIL_CMD may read-access the current command in variable CMD!
+func_execute_cmds ()
+{
+    $opt_debug
+    save_ifs=$IFS; IFS='~'
+    for cmd in $1; do
+      IFS=$save_ifs
+      eval cmd=\"$cmd\"
+      func_show_eval "$cmd" "${2-:}"
+    done
+    IFS=$save_ifs
+}
+
+
+# func_source file
+# Source FILE, adding directory component if necessary.
+# Note that it is not necessary on cygwin/mingw to append a dot to
+# FILE even if both FILE and FILE.exe exist: automatic-append-.exe
+# behavior happens only for exec(3), not for open(2)!  Also, sourcing
+# `FILE.' does not work on cygwin managed mounts.
+func_source ()
+{
+    $opt_debug
+    case $1 in
+    */* | *\\*)        . "$1" ;;
+    *)         . "./$1" ;;
+    esac
+}
+
+
+# func_infer_tag arg
+# Infer tagged configuration to use if any are available and
+# if one wasn't chosen via the "--tag" command line option.
+# Only attempt this if the compiler in the base compile
+# command doesn't match the default compiler.
+# arg is usually of the form 'gcc ...'
+func_infer_tag ()
+{
+    $opt_debug
+    if test -n "$available_tags" && test -z "$tagname"; then
+      CC_quoted=
+      for arg in $CC; do
+        func_quote_for_eval "$arg"
+       CC_quoted="$CC_quoted $func_quote_for_eval_result"
+      done
+      case $@ in
+      # Blanks in the command may have been stripped by the calling shell,
+      # but not from the CC environment variable when configure was run.
+      " $CC "* | "$CC "* | " `$ECHO $CC` "* | "`$ECHO $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$ECHO $CC_quoted` "* | "`$ECHO $CC_quoted` "*) ;;
+      # Blanks at the start of $base_compile will cause this to fail
+      # if we don't check for them as well.
+      *)
+       for z in $available_tags; do
+         if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then
+           # Evaluate the configuration.
+           eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`"
+           CC_quoted=
+           for arg in $CC; do
+             # Double-quote args containing other shell metacharacters.
+             func_quote_for_eval "$arg"
+             CC_quoted="$CC_quoted $func_quote_for_eval_result"
+           done
+           case "$@ " in
+             " $CC "* | "$CC "* | " `$ECHO $CC` "* | "`$ECHO $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$ECHO $CC_quoted` "* | "`$ECHO $CC_quoted` "*)
+             # The compiler in the base compile command matches
+             # the one in the tagged configuration.
+             # Assume this is the tagged configuration we want.
+             tagname=$z
+             break
+             ;;
+           esac
+         fi
+       done
+       # If $tagname still isn't set, then no tagged configuration
+       # was found and let the user know that the "--tag" command
+       # line option must be used.
+       if test -z "$tagname"; then
+         func_echo "unable to infer tagged configuration"
+         func_fatal_error "specify a tag with \`--tag'"
+#      else
+#        func_verbose "using $tagname tagged configuration"
+       fi
+       ;;
+      esac
+    fi
+}
+
+
+
+# func_write_libtool_object output_name pic_name nonpic_name
+# Create a libtool object file (analogous to a ".la" file),
+# but don't create it if we're doing a dry run.
+func_write_libtool_object ()
+{
+    write_libobj=${1}
+    if test "$build_libtool_libs" = yes; then
+      write_lobj=\'${2}\'
+    else
+      write_lobj=none
+    fi
+
+    if test "$build_old_libs" = yes; then
+      write_oldobj=\'${3}\'
+    else
+      write_oldobj=none
+    fi
+
+    $opt_dry_run || {
+      cat >${write_libobj}T <<EOF
+# $write_libobj - a libtool object file
+# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
+#
+# Please DO NOT delete this file!
+# It is necessary for linking the library.
+
+# Name of the PIC object.
+pic_object=$write_lobj
+
+# Name of the non-PIC object
+non_pic_object=$write_oldobj
+
+EOF
+      $MV "${write_libobj}T" "${write_libobj}"
+    }
+}
+
+# func_mode_compile arg...
+func_mode_compile ()
+{
+    $opt_debug
+    # Get the compilation command and the source file.
+    base_compile=
+    srcfile="$nonopt"  #  always keep a non-empty value in "srcfile"
+    suppress_opt=yes
+    suppress_output=
+    arg_mode=normal
+    libobj=
+    later=
+    pie_flag=
+
+    for arg
+    do
+      case $arg_mode in
+      arg  )
+       # do not "continue".  Instead, add this to base_compile
+       lastarg="$arg"
+       arg_mode=normal
+       ;;
+
+      target )
+       libobj="$arg"
+       arg_mode=normal
+       continue
+       ;;
+
+      normal )
+       # Accept any command-line options.
+       case $arg in
+       -o)
+         test -n "$libobj" && \
+           func_fatal_error "you cannot specify \`-o' more than once"
+         arg_mode=target
+         continue
+         ;;
+
+       -pie | -fpie | -fPIE)
+          pie_flag="$pie_flag $arg"
+         continue
+         ;;
+
+       -shared | -static | -prefer-pic | -prefer-non-pic)
+         later="$later $arg"
+         continue
+         ;;
+
+       -no-suppress)
+         suppress_opt=no
+         continue
+         ;;
+
+       -Xcompiler)
+         arg_mode=arg  #  the next one goes into the "base_compile" arg list
+         continue      #  The current "srcfile" will either be retained or
+         ;;            #  replaced later.  I would guess that would be a bug.
+
+       -Wc,*)
+         func_stripname '-Wc,' '' "$arg"
+         args=$func_stripname_result
+         lastarg=
+         save_ifs="$IFS"; IFS=','
+         for arg in $args; do
+           IFS="$save_ifs"
+           func_quote_for_eval "$arg"
+           lastarg="$lastarg $func_quote_for_eval_result"
+         done
+         IFS="$save_ifs"
+         func_stripname ' ' '' "$lastarg"
+         lastarg=$func_stripname_result
+
+         # Add the arguments to base_compile.
+         base_compile="$base_compile $lastarg"
+         continue
+         ;;
+
+       *)
+         # Accept the current argument as the source file.
+         # The previous "srcfile" becomes the current argument.
+         #
+         lastarg="$srcfile"
+         srcfile="$arg"
+         ;;
+       esac  #  case $arg
+       ;;
+      esac    #  case $arg_mode
+
+      # Aesthetically quote the previous argument.
+      func_quote_for_eval "$lastarg"
+      base_compile="$base_compile $func_quote_for_eval_result"
+    done # for arg
+
+    case $arg_mode in
+    arg)
+      func_fatal_error "you must specify an argument for -Xcompile"
+      ;;
+    target)
+      func_fatal_error "you must specify a target with \`-o'"
+      ;;
+    *)
+      # Get the name of the library object.
+      test -z "$libobj" && {
+       func_basename "$srcfile"
+       libobj="$func_basename_result"
+      }
+      ;;
+    esac
+
+    # Recognize several different file suffixes.
+    # If the user specifies -o file.o, it is replaced with file.lo
+    case $libobj in
+    *.[cCFSifmso] | \
+    *.ada | *.adb | *.ads | *.asm | \
+    *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \
+    *.[fF][09]? | *.for | *.java | *.obj | *.sx)
+      func_xform "$libobj"
+      libobj=$func_xform_result
+      ;;
+    esac
+
+    case $libobj in
+    *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;;
+    *)
+      func_fatal_error "cannot determine name of library object from \`$libobj'"
+      ;;
+    esac
+
+    func_infer_tag $base_compile
+
+    for arg in $later; do
+      case $arg in
+      -shared)
+       test "$build_libtool_libs" != yes && \
+         func_fatal_configuration "can not build a shared library"
+       build_old_libs=no
+       continue
+       ;;
+
+      -static)
+       build_libtool_libs=no
+       build_old_libs=yes
+       continue
+       ;;
+
+      -prefer-pic)
+       pic_mode=yes
+       continue
+       ;;
+
+      -prefer-non-pic)
+       pic_mode=no
+       continue
+       ;;
+      esac
+    done
+
+    func_quote_for_eval "$libobj"
+    test "X$libobj" != "X$func_quote_for_eval_result" \
+      && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"'   &()|`$[]' \
+      && func_warning "libobj name \`$libobj' may not contain shell special characters."
+    func_dirname_and_basename "$obj" "/" ""
+    objname="$func_basename_result"
+    xdir="$func_dirname_result"
+    lobj=${xdir}$objdir/$objname
+
+    test -z "$base_compile" && \
+      func_fatal_help "you must specify a compilation command"
+
+    # Delete any leftover library objects.
+    if test "$build_old_libs" = yes; then
+      removelist="$obj $lobj $libobj ${libobj}T"
+    else
+      removelist="$lobj $libobj ${libobj}T"
+    fi
+
+    # On Cygwin there's no "real" PIC flag so we must build both object types
+    case $host_os in
+    cygwin* | mingw* | pw32* | os2* | cegcc*)
+      pic_mode=default
+      ;;
+    esac
+    if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then
+      # non-PIC code in shared libraries is not supported
+      pic_mode=default
+    fi
+
+    # Calculate the filename of the output object if compiler does
+    # not support -o with -c
+    if test "$compiler_c_o" = no; then
+      output_obj=`$ECHO "X$srcfile" | $Xsed -e 's%^.*/%%' -e 's%\.[^.]*$%%'`.${objext}
+      lockfile="$output_obj.lock"
+    else
+      output_obj=
+      need_locks=no
+      lockfile=
+    fi
+
+    # Lock this critical section if it is needed
+    # We use this script file to make the link, it avoids creating a new file
+    if test "$need_locks" = yes; then
+      until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do
+       func_echo "Waiting for $lockfile to be removed"
+       sleep 2
+      done
+    elif test "$need_locks" = warn; then
+      if test -f "$lockfile"; then
+       $ECHO "\
+*** ERROR, $lockfile exists and contains:
+`cat $lockfile 2>/dev/null`
+
+This indicates that another process is trying to use the same
+temporary object file, and libtool could not work around it because
+your compiler does not support \`-c' and \`-o' together.  If you
+repeat this compilation, it may succeed, by chance, but you had better
+avoid parallel builds (make -j) in this platform, or get a better
+compiler."
+
+       $opt_dry_run || $RM $removelist
+       exit $EXIT_FAILURE
+      fi
+      removelist="$removelist $output_obj"
+      $ECHO "$srcfile" > "$lockfile"
+    fi
+
+    $opt_dry_run || $RM $removelist
+    removelist="$removelist $lockfile"
+    trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15
+
+    if test -n "$fix_srcfile_path"; then
+      eval srcfile=\"$fix_srcfile_path\"
+    fi
+    func_quote_for_eval "$srcfile"
+    qsrcfile=$func_quote_for_eval_result
+
+    # Only build a PIC object if we are building libtool libraries.
+    if test "$build_libtool_libs" = yes; then
+      # Without this assignment, base_compile gets emptied.
+      fbsd_hideous_sh_bug=$base_compile
+
+      if test "$pic_mode" != no; then
+       command="$base_compile $qsrcfile $pic_flag"
+      else
+       # Don't build PIC code
+       command="$base_compile $qsrcfile"
+      fi
+
+      func_mkdir_p "$xdir$objdir"
+
+      if test -z "$output_obj"; then
+       # Place PIC objects in $objdir
+       command="$command -o $lobj"
+      fi
+
+      func_show_eval_locale "$command" \
+          'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE'
+
+      if test "$need_locks" = warn &&
+        test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then
+       $ECHO "\
+*** ERROR, $lockfile contains:
+`cat $lockfile 2>/dev/null`
+
+but it should contain:
+$srcfile
+
+This indicates that another process is trying to use the same
+temporary object file, and libtool could not work around it because
+your compiler does not support \`-c' and \`-o' together.  If you
+repeat this compilation, it may succeed, by chance, but you had better
+avoid parallel builds (make -j) in this platform, or get a better
+compiler."
+
+       $opt_dry_run || $RM $removelist
+       exit $EXIT_FAILURE
+      fi
+
+      # Just move the object if needed, then go on to compile the next one
+      if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then
+       func_show_eval '$MV "$output_obj" "$lobj"' \
+         'error=$?; $opt_dry_run || $RM $removelist; exit $error'
+      fi
+
+      # Allow error messages only from the first compilation.
+      if test "$suppress_opt" = yes; then
+       suppress_output=' >/dev/null 2>&1'
+      fi
+    fi
+
+    # Only build a position-dependent object if we build old libraries.
+    if test "$build_old_libs" = yes; then
+      if test "$pic_mode" != yes; then
+       # Don't build PIC code
+       command="$base_compile $qsrcfile$pie_flag"
+      else
+       command="$base_compile $qsrcfile $pic_flag"
+      fi
+      if test "$compiler_c_o" = yes; then
+       command="$command -o $obj"
+      fi
+
+      # Suppress compiler output if we already did a PIC compilation.
+      command="$command$suppress_output"
+      func_show_eval_locale "$command" \
+        '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE'
+
+      if test "$need_locks" = warn &&
+        test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then
+       $ECHO "\
+*** ERROR, $lockfile contains:
+`cat $lockfile 2>/dev/null`
+
+but it should contain:
+$srcfile
+
+This indicates that another process is trying to use the same
+temporary object file, and libtool could not work around it because
+your compiler does not support \`-c' and \`-o' together.  If you
+repeat this compilation, it may succeed, by chance, but you had better
+avoid parallel builds (make -j) in this platform, or get a better
+compiler."
+
+       $opt_dry_run || $RM $removelist
+       exit $EXIT_FAILURE
+      fi
+
+      # Just move the object if needed
+      if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then
+       func_show_eval '$MV "$output_obj" "$obj"' \
+         'error=$?; $opt_dry_run || $RM $removelist; exit $error'
+      fi
+    fi
+
+    $opt_dry_run || {
+      func_write_libtool_object "$libobj" "$objdir/$objname" "$objname"
+
+      # Unlock the critical section if it was locked
+      if test "$need_locks" != no; then
+       removelist=$lockfile
+        $RM "$lockfile"
+      fi
+    }
+
+    exit $EXIT_SUCCESS
+}
+
+$opt_help || {
+test "$mode" = compile && func_mode_compile ${1+"$@"}
+}
+
+func_mode_help ()
+{
+    # We need to display help for each of the modes.
+    case $mode in
+      "")
+        # Generic help is extracted from the usage comments
+        # at the start of this file.
+        func_help
+        ;;
+
+      clean)
+        $ECHO \
+"Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE...
+
+Remove files from the build directory.
+
+RM is the name of the program to use to delete files associated with each FILE
+(typically \`/bin/rm').  RM-OPTIONS are options (such as \`-f') to be passed
+to RM.
+
+If FILE is a libtool library, object or program, all the files associated
+with it are deleted. Otherwise, only FILE itself is deleted using RM."
+        ;;
+
+      compile)
+      $ECHO \
+"Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE
+
+Compile a source file into a libtool library object.
+
+This mode accepts the following additional options:
+
+  -o OUTPUT-FILE    set the output file name to OUTPUT-FILE
+  -no-suppress      do not suppress compiler output for multiple passes
+  -prefer-pic       try to building PIC objects only
+  -prefer-non-pic   try to building non-PIC objects only
+  -shared           do not build a \`.o' file suitable for static linking
+  -static           only build a \`.o' file suitable for static linking
+
+COMPILE-COMMAND is a command to be used in creating a \`standard' object file
+from the given SOURCEFILE.
+
+The output file name is determined by removing the directory component from
+SOURCEFILE, then substituting the C source code suffix \`.c' with the
+library object suffix, \`.lo'."
+        ;;
+
+      execute)
+        $ECHO \
+"Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]...
+
+Automatically set library path, then run a program.
+
+This mode accepts the following additional options:
+
+  -dlopen FILE      add the directory containing FILE to the library path
+
+This mode sets the library path environment variable according to \`-dlopen'
+flags.
+
+If any of the ARGS are libtool executable wrappers, then they are translated
+into their corresponding uninstalled binary, and any of their required library
+directories are added to the library path.
+
+Then, COMMAND is executed, with ARGS as arguments."
+        ;;
+
+      finish)
+        $ECHO \
+"Usage: $progname [OPTION]... --mode=finish [LIBDIR]...
+
+Complete the installation of libtool libraries.
+
+Each LIBDIR is a directory that contains libtool libraries.
+
+The commands that this mode executes may require superuser privileges.  Use
+the \`--dry-run' option if you just want to see what would be executed."
+        ;;
+
+      install)
+        $ECHO \
+"Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND...
+
+Install executables or libraries.
+
+INSTALL-COMMAND is the installation command.  The first component should be
+either the \`install' or \`cp' program.
+
+The following components of INSTALL-COMMAND are treated specially:
+
+  -inst-prefix PREFIX-DIR  Use PREFIX-DIR as a staging area for installation
+
+The rest of the components are interpreted as arguments to that command (only
+BSD-compatible install options are recognized)."
+        ;;
+
+      link)
+        $ECHO \
+"Usage: $progname [OPTION]... --mode=link LINK-COMMAND...
+
+Link object files or libraries together to form another library, or to
+create an executable program.
+
+LINK-COMMAND is a command using the C compiler that you would use to create
+a program from several object files.
+
+The following components of LINK-COMMAND are treated specially:
+
+  -all-static       do not do any dynamic linking at all
+  -avoid-version    do not add a version suffix if possible
+  -dlopen FILE      \`-dlpreopen' FILE if it cannot be dlopened at runtime
+  -dlpreopen FILE   link in FILE and add its symbols to lt_preloaded_symbols
+  -export-dynamic   allow symbols from OUTPUT-FILE to be resolved with dlsym(3)
+  -export-symbols SYMFILE
+                    try to export only the symbols listed in SYMFILE
+  -export-symbols-regex REGEX
+                    try to export only the symbols matching REGEX
+  -LLIBDIR          search LIBDIR for required installed libraries
+  -lNAME            OUTPUT-FILE requires the installed library libNAME
+  -module           build a library that can dlopened
+  -no-fast-install  disable the fast-install mode
+  -no-install       link a not-installable executable
+  -no-undefined     declare that a library does not refer to external symbols
+  -o OUTPUT-FILE    create OUTPUT-FILE from the specified objects
+  -objectlist FILE  Use a list of object files found in FILE to specify objects
+  -precious-files-regex REGEX
+                    don't remove output files matching REGEX
+  -release RELEASE  specify package release information
+  -rpath LIBDIR     the created library will eventually be installed in LIBDIR
+  -R[ ]LIBDIR       add LIBDIR to the runtime path of programs and libraries
+  -shared           only do dynamic linking of libtool libraries
+  -shrext SUFFIX    override the standard shared library file extension
+  -static           do not do any dynamic linking of uninstalled libtool libraries
+  -static-libtool-libs
+                    do not do any dynamic linking of libtool libraries
+  -version-info CURRENT[:REVISION[:AGE]]
+                    specify library version info [each variable defaults to 0]
+  -weak LIBNAME     declare that the target provides the LIBNAME interface
+
+All other options (arguments beginning with \`-') are ignored.
+
+Every other argument is treated as a filename.  Files ending in \`.la' are
+treated as uninstalled libtool libraries, other files are standard or library
+object files.
+
+If the OUTPUT-FILE ends in \`.la', then a libtool library is created,
+only library objects (\`.lo' files) may be specified, and \`-rpath' is
+required, except when creating a convenience library.
+
+If OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created
+using \`ar' and \`ranlib', or on Windows using \`lib'.
+
+If OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file
+is created, otherwise an executable program is created."
+        ;;
+
+      uninstall)
+        $ECHO \
+"Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE...
+
+Remove libraries from an installation directory.
+
+RM is the name of the program to use to delete files associated with each FILE
+(typically \`/bin/rm').  RM-OPTIONS are options (such as \`-f') to be passed
+to RM.
+
+If FILE is a libtool library, all the files associated with it are deleted.
+Otherwise, only FILE itself is deleted using RM."
+        ;;
+
+      *)
+        func_fatal_help "invalid operation mode \`$mode'"
+        ;;
+    esac
+
+    $ECHO
+    $ECHO "Try \`$progname --help' for more information about other modes."
+
+    exit $?
+}
+
+  # Now that we've collected a possible --mode arg, show help if necessary
+  $opt_help && func_mode_help
+
+
+# func_mode_execute arg...
+func_mode_execute ()
+{
+    $opt_debug
+    # The first argument is the command name.
+    cmd="$nonopt"
+    test -z "$cmd" && \
+      func_fatal_help "you must specify a COMMAND"
+
+    # Handle -dlopen flags immediately.
+    for file in $execute_dlfiles; do
+      test -f "$file" \
+       || func_fatal_help "\`$file' is not a file"
+
+      dir=
+      case $file in
+      *.la)
+       # Check to see that this really is a libtool archive.
+       func_lalib_unsafe_p "$file" \
+         || func_fatal_help "\`$lib' is not a valid libtool archive"
+
+       # Read the libtool library.
+       dlname=
+       library_names=
+       func_source "$file"
+
+       # Skip this library if it cannot be dlopened.
+       if test -z "$dlname"; then
+         # Warn if it was a shared library.
+         test -n "$library_names" && \
+           func_warning "\`$file' was not linked with \`-export-dynamic'"
+         continue
+       fi
+
+       func_dirname "$file" "" "."
+       dir="$func_dirname_result"
+
+       if test -f "$dir/$objdir/$dlname"; then
+         dir="$dir/$objdir"
+       else
+         if test ! -f "$dir/$dlname"; then
+           func_fatal_error "cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'"
+         fi
+       fi
+       ;;
+
+      *.lo)
+       # Just add the directory containing the .lo file.
+       func_dirname "$file" "" "."
+       dir="$func_dirname_result"
+       ;;
+
+      *)
+       func_warning "\`-dlopen' is ignored for non-libtool libraries and objects"
+       continue
+       ;;
+      esac
+
+      # Get the absolute pathname.
+      absdir=`cd "$dir" && pwd`
+      test -n "$absdir" && dir="$absdir"
+
+      # Now add the directory to shlibpath_var.
+      if eval "test -z \"\$$shlibpath_var\""; then
+       eval "$shlibpath_var=\"\$dir\""
+      else
+       eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\""
+      fi
+    done
+
+    # This variable tells wrapper scripts just to set shlibpath_var
+    # rather than running their programs.
+    libtool_execute_magic="$magic"
+
+    # Check if any of the arguments is a wrapper script.
+    args=
+    for file
+    do
+      case $file in
+      -*) ;;
+      *)
+       # Do a test to see if this is really a libtool program.
+       if func_ltwrapper_script_p "$file"; then
+         func_source "$file"
+         # Transform arg to wrapped name.
+         file="$progdir/$program"
+       elif func_ltwrapper_executable_p "$file"; then
+         func_ltwrapper_scriptname "$file"
+         func_source "$func_ltwrapper_scriptname_result"
+         # Transform arg to wrapped name.
+         file="$progdir/$program"
+       fi
+       ;;
+      esac
+      # Quote arguments (to preserve shell metacharacters).
+      func_quote_for_eval "$file"
+      args="$args $func_quote_for_eval_result"
+    done
+
+    if test "X$opt_dry_run" = Xfalse; then
+      if test -n "$shlibpath_var"; then
+       # Export the shlibpath_var.
+       eval "export $shlibpath_var"
+      fi
+
+      # Restore saved environment variables
+      for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES
+      do
+       eval "if test \"\${save_$lt_var+set}\" = set; then
+                $lt_var=\$save_$lt_var; export $lt_var
+             else
+               $lt_unset $lt_var
+             fi"
+      done
+
+      # Now prepare to actually exec the command.
+      exec_cmd="\$cmd$args"
+    else
+      # Display what would be done.
+      if test -n "$shlibpath_var"; then
+       eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\""
+       $ECHO "export $shlibpath_var"
+      fi
+      $ECHO "$cmd$args"
+      exit $EXIT_SUCCESS
+    fi
+}
+
+test "$mode" = execute && func_mode_execute ${1+"$@"}
+
+
+# func_mode_finish arg...
+func_mode_finish ()
+{
+    $opt_debug
+    libdirs="$nonopt"
+    admincmds=
+
+    if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then
+      for dir
+      do
+       libdirs="$libdirs $dir"
+      done
+
+      for libdir in $libdirs; do
+       if test -n "$finish_cmds"; then
+         # Do each command in the finish commands.
+         func_execute_cmds "$finish_cmds" 'admincmds="$admincmds
+'"$cmd"'"'
+       fi
+       if test -n "$finish_eval"; then
+         # Do the single finish_eval.
+         eval cmds=\"$finish_eval\"
+         $opt_dry_run || eval "$cmds" || admincmds="$admincmds
+       $cmds"
+       fi
+      done
+    fi
+
+    # Exit here if they wanted silent mode.
+    $opt_silent && exit $EXIT_SUCCESS
+
+    $ECHO "X----------------------------------------------------------------------" | $Xsed
+    $ECHO "Libraries have been installed in:"
+    for libdir in $libdirs; do
+      $ECHO "   $libdir"
+    done
+    $ECHO
+    $ECHO "If you ever happen to want to link against installed libraries"
+    $ECHO "in a given directory, LIBDIR, you must either use libtool, and"
+    $ECHO "specify the full pathname of the library, or use the \`-LLIBDIR'"
+    $ECHO "flag during linking and do at least one of the following:"
+    if test -n "$shlibpath_var"; then
+      $ECHO "   - add LIBDIR to the \`$shlibpath_var' environment variable"
+      $ECHO "     during execution"
+    fi
+    if test -n "$runpath_var"; then
+      $ECHO "   - add LIBDIR to the \`$runpath_var' environment variable"
+      $ECHO "     during linking"
+    fi
+    if test -n "$hardcode_libdir_flag_spec"; then
+      libdir=LIBDIR
+      eval flag=\"$hardcode_libdir_flag_spec\"
+
+      $ECHO "   - use the \`$flag' linker flag"
+    fi
+    if test -n "$admincmds"; then
+      $ECHO "   - have your system administrator run these commands:$admincmds"
+    fi
+    if test -f /etc/ld.so.conf; then
+      $ECHO "   - have your system administrator add LIBDIR to \`/etc/ld.so.conf'"
+    fi
+    $ECHO
+
+    $ECHO "See any operating system documentation about shared libraries for"
+    case $host in
+      solaris2.[6789]|solaris2.1[0-9])
+        $ECHO "more information, such as the ld(1), crle(1) and ld.so(8) manual"
+       $ECHO "pages."
+       ;;
+      *)
+        $ECHO "more information, such as the ld(1) and ld.so(8) manual pages."
+        ;;
+    esac
+    $ECHO "X----------------------------------------------------------------------" | $Xsed
+    exit $EXIT_SUCCESS
+}
+
+test "$mode" = finish && func_mode_finish ${1+"$@"}
+
+
+# func_mode_install arg...
+func_mode_install ()
+{
+    $opt_debug
+    # There may be an optional sh(1) argument at the beginning of
+    # install_prog (especially on Windows NT).
+    if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh ||
+       # Allow the use of GNU shtool's install command.
+       $ECHO "X$nonopt" | $GREP shtool >/dev/null; then
+      # Aesthetically quote it.
+      func_quote_for_eval "$nonopt"
+      install_prog="$func_quote_for_eval_result "
+      arg=$1
+      shift
+    else
+      install_prog=
+      arg=$nonopt
+    fi
+
+    # The real first argument should be the name of the installation program.
+    # Aesthetically quote it.
+    func_quote_for_eval "$arg"
+    install_prog="$install_prog$func_quote_for_eval_result"
+
+    # We need to accept at least all the BSD install flags.
+    dest=
+    files=
+    opts=
+    prev=
+    install_type=
+    isdir=no
+    stripme=
+    for arg
+    do
+      if test -n "$dest"; then
+       files="$files $dest"
+       dest=$arg
+       continue
+      fi
+
+      case $arg in
+      -d) isdir=yes ;;
+      -f)
+       case " $install_prog " in
+       *[\\\ /]cp\ *) ;;
+       *) prev=$arg ;;
+       esac
+       ;;
+      -g | -m | -o)
+       prev=$arg
+       ;;
+      -s)
+       stripme=" -s"
+       continue
+       ;;
+      -*)
+       ;;
+      *)
+       # If the previous option needed an argument, then skip it.
+       if test -n "$prev"; then
+         prev=
+       else
+         dest=$arg
+         continue
+       fi
+       ;;
+      esac
+
+      # Aesthetically quote the argument.
+      func_quote_for_eval "$arg"
+      install_prog="$install_prog $func_quote_for_eval_result"
+    done
+
+    test -z "$install_prog" && \
+      func_fatal_help "you must specify an install program"
+
+    test -n "$prev" && \
+      func_fatal_help "the \`$prev' option requires an argument"
+
+    if test -z "$files"; then
+      if test -z "$dest"; then
+       func_fatal_help "no file or destination specified"
+      else
+       func_fatal_help "you must specify a destination"
+      fi
+    fi
+
+    # Strip any trailing slash from the destination.
+    func_stripname '' '/' "$dest"
+    dest=$func_stripname_result
+
+    # Check to see that the destination is a directory.
+    test -d "$dest" && isdir=yes
+    if test "$isdir" = yes; then
+      destdir="$dest"
+      destname=
+    else
+      func_dirname_and_basename "$dest" "" "."
+      destdir="$func_dirname_result"
+      destname="$func_basename_result"
+
+      # Not a directory, so check to see that there is only one file specified.
+      set dummy $files; shift
+      test "$#" -gt 1 && \
+       func_fatal_help "\`$dest' is not a directory"
+    fi
+    case $destdir in
+    [\\/]* | [A-Za-z]:[\\/]*) ;;
+    *)
+      for file in $files; do
+       case $file in
+       *.lo) ;;
+       *)
+         func_fatal_help "\`$destdir' must be an absolute directory name"
+         ;;
+       esac
+      done
+      ;;
+    esac
+
+    # This variable tells wrapper scripts just to set variables rather
+    # than running their programs.
+    libtool_install_magic="$magic"
+
+    staticlibs=
+    future_libdirs=
+    current_libdirs=
+    for file in $files; do
+
+      # Do each installation.
+      case $file in
+      *.$libext)
+       # Do the static libraries later.
+       staticlibs="$staticlibs $file"
+       ;;
+
+      *.la)
+       # Check to see that this really is a libtool archive.
+       func_lalib_unsafe_p "$file" \
+         || func_fatal_help "\`$file' is not a valid libtool archive"
+
+       library_names=
+       old_library=
+       relink_command=
+       func_source "$file"
+
+       # Add the libdir to current_libdirs if it is the destination.
+       if test "X$destdir" = "X$libdir"; then
+         case "$current_libdirs " in
+         *" $libdir "*) ;;
+         *) current_libdirs="$current_libdirs $libdir" ;;
+         esac
+       else
+         # Note the libdir as a future libdir.
+         case "$future_libdirs " in
+         *" $libdir "*) ;;
+         *) future_libdirs="$future_libdirs $libdir" ;;
+         esac
+       fi
+
+       func_dirname "$file" "/" ""
+       dir="$func_dirname_result"
+       dir="$dir$objdir"
+
+       if test -n "$relink_command"; then
+         # Determine the prefix the user has applied to our future dir.
+         inst_prefix_dir=`$ECHO "X$destdir" | $Xsed -e "s%$libdir\$%%"`
+
+         # Don't allow the user to place us outside of our expected
+         # location b/c this prevents finding dependent libraries that
+         # are installed to the same prefix.
+         # At present, this check doesn't affect windows .dll's that
+         # are installed into $libdir/../bin (currently, that works fine)
+         # but it's something to keep an eye on.
+         test "$inst_prefix_dir" = "$destdir" && \
+           func_fatal_error "error: cannot install \`$file' to a directory not ending in $libdir"
+
+         if test -n "$inst_prefix_dir"; then
+           # Stick the inst_prefix_dir data into the link command.
+           relink_command=`$ECHO "X$relink_command" | $Xsed -e "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"`
+         else
+           relink_command=`$ECHO "X$relink_command" | $Xsed -e "s%@inst_prefix_dir@%%"`
+         fi
+
+         func_warning "relinking \`$file'"
+         func_show_eval "$relink_command" \
+           'func_fatal_error "error: relink \`$file'\'' with the above command before installing it"'
+       fi
+
+       # See the names of the shared library.
+       set dummy $library_names; shift
+       if test -n "$1"; then
+         realname="$1"
+         shift
+
+         srcname="$realname"
+         test -n "$relink_command" && srcname="$realname"T
+
+         # Install the shared library and build the symlinks.
+         func_show_eval "$install_prog $dir/$srcname $destdir/$realname" \
+             'exit $?'
+         tstripme="$stripme"
+         case $host_os in
+         cygwin* | mingw* | pw32* | cegcc*)
+           case $realname in
+           *.dll.a)
+             tstripme=""
+             ;;
+           esac
+           ;;
+         esac
+         if test -n "$tstripme" && test -n "$striplib"; then
+           func_show_eval "$striplib $destdir/$realname" 'exit $?'
+         fi
+
+         if test "$#" -gt 0; then
+           # Delete the old symlinks, and create new ones.
+           # Try `ln -sf' first, because the `ln' binary might depend on
+           # the symlink we replace!  Solaris /bin/ln does not understand -f,
+           # so we also need to try rm && ln -s.
+           for linkname
+           do
+             test "$linkname" != "$realname" \
+               && func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })"
+           done
+         fi
+
+         # Do each command in the postinstall commands.
+         lib="$destdir/$realname"
+         func_execute_cmds "$postinstall_cmds" 'exit $?'
+       fi
+
+       # Install the pseudo-library for information purposes.
+       func_basename "$file"
+       name="$func_basename_result"
+       instname="$dir/$name"i
+       func_show_eval "$install_prog $instname $destdir/$name" 'exit $?'
+
+       # Maybe install the static library, too.
+       test -n "$old_library" && staticlibs="$staticlibs $dir/$old_library"
+       ;;
+
+      *.lo)
+       # Install (i.e. copy) a libtool object.
+
+       # Figure out destination file name, if it wasn't already specified.
+       if test -n "$destname"; then
+         destfile="$destdir/$destname"
+       else
+         func_basename "$file"
+         destfile="$func_basename_result"
+         destfile="$destdir/$destfile"
+       fi
+
+       # Deduce the name of the destination old-style object file.
+       case $destfile in
+       *.lo)
+         func_lo2o "$destfile"
+         staticdest=$func_lo2o_result
+         ;;
+       *.$objext)
+         staticdest="$destfile"
+         destfile=
+         ;;
+       *)
+         func_fatal_help "cannot copy a libtool object to \`$destfile'"
+         ;;
+       esac
+
+       # Install the libtool object if requested.
+       test -n "$destfile" && \
+         func_show_eval "$install_prog $file $destfile" 'exit $?'
+
+       # Install the old object if enabled.
+       if test "$build_old_libs" = yes; then
+         # Deduce the name of the old-style object file.
+         func_lo2o "$file"
+         staticobj=$func_lo2o_result
+         func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?'
+       fi
+       exit $EXIT_SUCCESS
+       ;;
+
+      *)
+       # Figure out destination file name, if it wasn't already specified.
+       if test -n "$destname"; then
+         destfile="$destdir/$destname"
+       else
+         func_basename "$file"
+         destfile="$func_basename_result"
+         destfile="$destdir/$destfile"
+       fi
+
+       # If the file is missing, and there is a .exe on the end, strip it
+       # because it is most likely a libtool script we actually want to
+       # install
+       stripped_ext=""
+       case $file in
+         *.exe)
+           if test ! -f "$file"; then
+             func_stripname '' '.exe' "$file"
+             file=$func_stripname_result
+             stripped_ext=".exe"
+           fi
+           ;;
+       esac
+
+       # Do a test to see if this is really a libtool program.
+       case $host in
+       *cygwin* | *mingw*)
+           if func_ltwrapper_executable_p "$file"; then
+             func_ltwrapper_scriptname "$file"
+             wrapper=$func_ltwrapper_scriptname_result
+           else
+             func_stripname '' '.exe' "$file"
+             wrapper=$func_stripname_result
+           fi
+           ;;
+       *)
+           wrapper=$file
+           ;;
+       esac
+       if func_ltwrapper_script_p "$wrapper"; then
+         notinst_deplibs=
+         relink_command=
+
+         func_source "$wrapper"
+
+         # Check the variables that should have been set.
+         test -z "$generated_by_libtool_version" && \
+           func_fatal_error "invalid libtool wrapper script \`$wrapper'"
+
+         finalize=yes
+         for lib in $notinst_deplibs; do
+           # Check to see that each library is installed.
+           libdir=
+           if test -f "$lib"; then
+             func_source "$lib"
+           fi
+           libfile="$libdir/"`$ECHO "X$lib" | $Xsed -e 's%^.*/%%g'` ### testsuite: skip nested quoting test
+           if test -n "$libdir" && test ! -f "$libfile"; then
+             func_warning "\`$lib' has not been installed in \`$libdir'"
+             finalize=no
+           fi
+         done
+
+         relink_command=
+         func_source "$wrapper"
+
+         outputname=
+         if test "$fast_install" = no && test -n "$relink_command"; then
+           $opt_dry_run || {
+             if test "$finalize" = yes; then
+               tmpdir=`func_mktempdir`
+               func_basename "$file$stripped_ext"
+               file="$func_basename_result"
+               outputname="$tmpdir/$file"
+               # Replace the output file specification.
+               relink_command=`$ECHO "X$relink_command" | $Xsed -e 's%@OUTPUT@%'"$outputname"'%g'`
+
+               $opt_silent || {
+                 func_quote_for_expand "$relink_command"
+                 eval "func_echo $func_quote_for_expand_result"
+               }
+               if eval "$relink_command"; then :
+                 else
+                 func_error "error: relink \`$file' with the above command before installing it"
+                 $opt_dry_run || ${RM}r "$tmpdir"
+                 continue
+               fi
+               file="$outputname"
+             else
+               func_warning "cannot relink \`$file'"
+             fi
+           }
+         else
+           # Install the binary that we compiled earlier.
+           file=`$ECHO "X$file$stripped_ext" | $Xsed -e "s%\([^/]*\)$%$objdir/\1%"`
+         fi
+       fi
+
+       # remove .exe since cygwin /usr/bin/install will append another
+       # one anyway
+       case $install_prog,$host in
+       */usr/bin/install*,*cygwin*)
+         case $file:$destfile in
+         *.exe:*.exe)
+           # this is ok
+           ;;
+         *.exe:*)
+           destfile=$destfile.exe
+           ;;
+         *:*.exe)
+           func_stripname '' '.exe' "$destfile"
+           destfile=$func_stripname_result
+           ;;
+         esac
+         ;;
+       esac
+       func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?'
+       $opt_dry_run || if test -n "$outputname"; then
+         ${RM}r "$tmpdir"
+       fi
+       ;;
+      esac
+    done
+
+    for file in $staticlibs; do
+      func_basename "$file"
+      name="$func_basename_result"
+
+      # Set up the ranlib parameters.
+      oldlib="$destdir/$name"
+
+      func_show_eval "$install_prog \$file \$oldlib" 'exit $?'
+
+      if test -n "$stripme" && test -n "$old_striplib"; then
+       func_show_eval "$old_striplib $oldlib" 'exit $?'
+      fi
+
+      # Do each command in the postinstall commands.
+      func_execute_cmds "$old_postinstall_cmds" 'exit $?'
+    done
+
+    test -n "$future_libdirs" && \
+      func_warning "remember to run \`$progname --finish$future_libdirs'"
+
+    if test -n "$current_libdirs"; then
+      # Maybe just do a dry run.
+      $opt_dry_run && current_libdirs=" -n$current_libdirs"
+      exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs'
+    else
+      exit $EXIT_SUCCESS
+    fi
+}
+
+test "$mode" = install && func_mode_install ${1+"$@"}
+
+
+# func_generate_dlsyms outputname originator pic_p
+# Extract symbols from dlprefiles and create ${outputname}S.o with
+# a dlpreopen symbol table.
+func_generate_dlsyms ()
+{
+    $opt_debug
+    my_outputname="$1"
+    my_originator="$2"
+    my_pic_p="${3-no}"
+    my_prefix=`$ECHO "$my_originator" | sed 's%[^a-zA-Z0-9]%_%g'`
+    my_dlsyms=
+
+    if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
+      if test -n "$NM" && test -n "$global_symbol_pipe"; then
+       my_dlsyms="${my_outputname}S.c"
+      else
+       func_error "not configured to extract global symbols from dlpreopened files"
+      fi
+    fi
+
+    if test -n "$my_dlsyms"; then
+      case $my_dlsyms in
+      "") ;;
+      *.c)
+       # Discover the nlist of each of the dlfiles.
+       nlist="$output_objdir/${my_outputname}.nm"
+
+       func_show_eval "$RM $nlist ${nlist}S ${nlist}T"
+
+       # Parse the name list into a source file.
+       func_verbose "creating $output_objdir/$my_dlsyms"
+
+       $opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\
+/* $my_dlsyms - symbol resolution table for \`$my_outputname' dlsym emulation. */
+/* Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION */
+
+#ifdef __cplusplus
+extern \"C\" {
+#endif
+
+/* External symbol declarations for the compiler. */\
+"
+
+       if test "$dlself" = yes; then
+         func_verbose "generating symbol list for \`$output'"
+
+         $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist"
+
+         # Add our own program objects to the symbol list.
+         progfiles=`$ECHO "X$objs$old_deplibs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
+         for progfile in $progfiles; do
+           func_verbose "extracting global C symbols from \`$progfile'"
+           $opt_dry_run || eval "$NM $progfile | $global_symbol_pipe >> '$nlist'"
+         done
+
+         if test -n "$exclude_expsyms"; then
+           $opt_dry_run || {
+             eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T'
+             eval '$MV "$nlist"T "$nlist"'
+           }
+         fi
+
+         if test -n "$export_symbols_regex"; then
+           $opt_dry_run || {
+             eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T'
+             eval '$MV "$nlist"T "$nlist"'
+           }
+         fi
+
+         # Prepare the list of exported symbols
+         if test -z "$export_symbols"; then
+           export_symbols="$output_objdir/$outputname.exp"
+           $opt_dry_run || {
+             $RM $export_symbols
+             eval "${SED} -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"'
+             case $host in
+             *cygwin* | *mingw* | *cegcc* )
+                eval "echo EXPORTS "'> "$output_objdir/$outputname.def"'
+                eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"'
+               ;;
+             esac
+           }
+         else
+           $opt_dry_run || {
+             eval "${SED} -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"'
+             eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T'
+             eval '$MV "$nlist"T "$nlist"'
+             case $host in
+               *cygwin | *mingw* | *cegcc* )
+                 eval "echo EXPORTS "'> "$output_objdir/$outputname.def"'
+                 eval 'cat "$nlist" >> "$output_objdir/$outputname.def"'
+                 ;;
+             esac
+           }
+         fi
+       fi
+
+       for dlprefile in $dlprefiles; do
+         func_verbose "extracting global C symbols from \`$dlprefile'"
+         func_basename "$dlprefile"
+         name="$func_basename_result"
+         $opt_dry_run || {
+           eval '$ECHO ": $name " >> "$nlist"'
+           eval "$NM $dlprefile 2>/dev/null | $global_symbol_pipe >> '$nlist'"
+         }
+       done
+
+       $opt_dry_run || {
+         # Make sure we have at least an empty file.
+         test -f "$nlist" || : > "$nlist"
+
+         if test -n "$exclude_expsyms"; then
+           $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T
+           $MV "$nlist"T "$nlist"
+         fi
+
+         # Try sorting and uniquifying the output.
+         if $GREP -v "^: " < "$nlist" |
+             if sort -k 3 </dev/null >/dev/null 2>&1; then
+               sort -k 3
+             else
+               sort +2
+             fi |
+             uniq > "$nlist"S; then
+           :
+         else
+           $GREP -v "^: " < "$nlist" > "$nlist"S
+         fi
+
+         if test -f "$nlist"S; then
+           eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"'
+         else
+           $ECHO '/* NONE */' >> "$output_objdir/$my_dlsyms"
+         fi
+
+         $ECHO >> "$output_objdir/$my_dlsyms" "\
+
+/* The mapping between symbol names and symbols.  */
+typedef struct {
+  const char *name;
+  void *address;
+} lt_dlsymlist;
+"
+         case $host in
+         *cygwin* | *mingw* | *cegcc* )
+           $ECHO >> "$output_objdir/$my_dlsyms" "\
+/* DATA imports from DLLs on WIN32 con't be const, because
+   runtime relocations are performed -- see ld's documentation
+   on pseudo-relocs.  */"
+           lt_dlsym_const= ;;
+         *osf5*)
+           echo >> "$output_objdir/$my_dlsyms" "\
+/* This system does not cope well with relocations in const data */"
+           lt_dlsym_const= ;;
+         *)
+           lt_dlsym_const=const ;;
+         esac
+
+         $ECHO >> "$output_objdir/$my_dlsyms" "\
+extern $lt_dlsym_const lt_dlsymlist
+lt_${my_prefix}_LTX_preloaded_symbols[];
+$lt_dlsym_const lt_dlsymlist
+lt_${my_prefix}_LTX_preloaded_symbols[] =
+{\
+  { \"$my_originator\", (void *) 0 },"
+
+         case $need_lib_prefix in
+         no)
+           eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms"
+           ;;
+         *)
+           eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms"
+           ;;
+         esac
+         $ECHO >> "$output_objdir/$my_dlsyms" "\
+  {0, (void *) 0}
+};
+
+/* This works around a problem in FreeBSD linker */
+#ifdef FREEBSD_WORKAROUND
+static const void *lt_preloaded_setup() {
+  return lt_${my_prefix}_LTX_preloaded_symbols;
+}
+#endif
+
+#ifdef __cplusplus
+}
+#endif\
+"
+       } # !$opt_dry_run
+
+       pic_flag_for_symtable=
+       case "$compile_command " in
+       *" -static "*) ;;
+       *)
+         case $host in
+         # compiling the symbol table file with pic_flag works around
+         # a FreeBSD bug that causes programs to crash when -lm is
+         # linked before any other PIC object.  But we must not use
+         # pic_flag when linking with -static.  The problem exists in
+         # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1.
+         *-*-freebsd2*|*-*-freebsd3.0*|*-*-freebsdelf3.0*)
+           pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;;
+         *-*-hpux*)
+           pic_flag_for_symtable=" $pic_flag"  ;;
+         *)
+           if test "X$my_pic_p" != Xno; then
+             pic_flag_for_symtable=" $pic_flag"
+           fi
+           ;;
+         esac
+         ;;
+       esac
+       symtab_cflags=
+       for arg in $LTCFLAGS; do
+         case $arg in
+         -pie | -fpie | -fPIE) ;;
+         *) symtab_cflags="$symtab_cflags $arg" ;;
+         esac
+       done
+
+       # Now compile the dynamic symbol file.
+       func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?'
+
+       # Clean up the generated files.
+       func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T"'
+
+       # Transform the symbol file into the correct name.
+       symfileobj="$output_objdir/${my_outputname}S.$objext"
+       case $host in
+       *cygwin* | *mingw* | *cegcc* )
+         if test -f "$output_objdir/$my_outputname.def"; then
+           compile_command=`$ECHO "X$compile_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"`
+           finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"`
+         else
+           compile_command=`$ECHO "X$compile_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"`
+           finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"`
+         fi
+         ;;
+       *)
+         compile_command=`$ECHO "X$compile_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"`
+         finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"`
+         ;;
+       esac
+       ;;
+      *)
+       func_fatal_error "unknown suffix for \`$my_dlsyms'"
+       ;;
+      esac
+    else
+      # We keep going just in case the user didn't refer to
+      # lt_preloaded_symbols.  The linker will fail if global_symbol_pipe
+      # really was required.
+
+      # Nullify the symbol file.
+      compile_command=`$ECHO "X$compile_command" | $Xsed -e "s% @SYMFILE@%%"`
+      finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s% @SYMFILE@%%"`
+    fi
+}
+
+# func_win32_libid arg
+# return the library type of file 'arg'
+#
+# Need a lot of goo to handle *both* DLLs and import libs
+# Has to be a shell function in order to 'eat' the argument
+# that is supplied when $file_magic_command is called.
+func_win32_libid ()
+{
+  $opt_debug
+  win32_libid_type="unknown"
+  win32_fileres=`file -L $1 2>/dev/null`
+  case $win32_fileres in
+  *ar\ archive\ import\ library*) # definitely import
+    win32_libid_type="x86 archive import"
+    ;;
+  *ar\ archive*) # could be an import, or static
+    if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null |
+       $EGREP 'file format pe-i386(.*architecture: i386)?' >/dev/null ; then
+      win32_nmres=`eval $NM -f posix -A $1 |
+       $SED -n -e '
+           1,100{
+               / I /{
+                   s,.*,import,
+                   p
+                   q
+               }
+           }'`
+      case $win32_nmres in
+      import*)  win32_libid_type="x86 archive import";;
+      *)        win32_libid_type="x86 archive static";;
+      esac
+    fi
+    ;;
+  *DLL*)
+    win32_libid_type="x86 DLL"
+    ;;
+  *executable*) # but shell scripts are "executable" too...
+    case $win32_fileres in
+    *MS\ Windows\ PE\ Intel*)
+      win32_libid_type="x86 DLL"
+      ;;
+    esac
+    ;;
+  esac
+  $ECHO "$win32_libid_type"
+}
+
+
+
+# func_extract_an_archive dir oldlib
+func_extract_an_archive ()
+{
+    $opt_debug
+    f_ex_an_ar_dir="$1"; shift
+    f_ex_an_ar_oldlib="$1"
+    func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" 'exit $?'
+    if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then
+     :
+    else
+      func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib"
+    fi
+}
+
+
+# func_extract_archives gentop oldlib ...
+func_extract_archives ()
+{
+    $opt_debug
+    my_gentop="$1"; shift
+    my_oldlibs=${1+"$@"}
+    my_oldobjs=""
+    my_xlib=""
+    my_xabs=""
+    my_xdir=""
+
+    for my_xlib in $my_oldlibs; do
+      # Extract the objects.
+      case $my_xlib in
+       [\\/]* | [A-Za-z]:[\\/]*) my_xabs="$my_xlib" ;;
+       *) my_xabs=`pwd`"/$my_xlib" ;;
+      esac
+      func_basename "$my_xlib"
+      my_xlib="$func_basename_result"
+      my_xlib_u=$my_xlib
+      while :; do
+        case " $extracted_archives " in
+       *" $my_xlib_u "*)
+         func_arith $extracted_serial + 1
+         extracted_serial=$func_arith_result
+         my_xlib_u=lt$extracted_serial-$my_xlib ;;
+       *) break ;;
+       esac
+      done
+      extracted_archives="$extracted_archives $my_xlib_u"
+      my_xdir="$my_gentop/$my_xlib_u"
+
+      func_mkdir_p "$my_xdir"
+
+      case $host in
+      *-darwin*)
+       func_verbose "Extracting $my_xabs"
+       # Do not bother doing anything if just a dry run
+       $opt_dry_run || {
+         darwin_orig_dir=`pwd`
+         cd $my_xdir || exit $?
+         darwin_archive=$my_xabs
+         darwin_curdir=`pwd`
+         darwin_base_archive=`basename "$darwin_archive"`
+         darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true`
+         if test -n "$darwin_arches"; then
+           darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'`
+           darwin_arch=
+           func_verbose "$darwin_base_archive has multiple architectures $darwin_arches"
+           for darwin_arch in  $darwin_arches ; do
+             func_mkdir_p "unfat-$$/${darwin_base_archive}-${darwin_arch}"
+             $LIPO -thin $darwin_arch -output "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" "${darwin_archive}"
+             cd "unfat-$$/${darwin_base_archive}-${darwin_arch}"
+             func_extract_an_archive "`pwd`" "${darwin_base_archive}"
+             cd "$darwin_curdir"
+             $RM "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}"
+           done # $darwin_arches
+            ## Okay now we've a bunch of thin objects, gotta fatten them up :)
+           darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$basename" | sort -u`
+           darwin_file=
+           darwin_files=
+           for darwin_file in $darwin_filelist; do
+             darwin_files=`find unfat-$$ -name $darwin_file -print | $NL2SP`
+             $LIPO -create -output "$darwin_file" $darwin_files
+           done # $darwin_filelist
+           $RM -rf unfat-$$
+           cd "$darwin_orig_dir"
+         else
+           cd $darwin_orig_dir
+           func_extract_an_archive "$my_xdir" "$my_xabs"
+         fi # $darwin_arches
+       } # !$opt_dry_run
+       ;;
+      *)
+        func_extract_an_archive "$my_xdir" "$my_xabs"
+       ;;
+      esac
+      my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | $NL2SP`
+    done
+
+    func_extract_archives_result="$my_oldobjs"
+}
+
+
+
+# func_emit_wrapper_part1 [arg=no]
+#
+# Emit the first part of a libtool wrapper script on stdout.
+# For more information, see the description associated with
+# func_emit_wrapper(), below.
+func_emit_wrapper_part1 ()
+{
+       func_emit_wrapper_part1_arg1=no
+       if test -n "$1" ; then
+         func_emit_wrapper_part1_arg1=$1
+       fi
+
+       $ECHO "\
+#! $SHELL
+
+# $output - temporary wrapper script for $objdir/$outputname
+# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
+#
+# The $output program cannot be directly executed until all the libtool
+# libraries that it depends on are installed.
+#
+# This wrapper script should never be moved out of the build directory.
+# If it is, it will not operate correctly.
+
+# Sed substitution that helps us do robust quoting.  It backslashifies
+# metacharacters that are still active within double-quoted strings.
+Xsed='${SED} -e 1s/^X//'
+sed_quote_subst='$sed_quote_subst'
+
+# Be Bourne compatible
+if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then
+  emulate sh
+  NULLCMD=:
+  # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which
+  # is contrary to our usage.  Disable this feature.
+  alias -g '\${1+\"\$@\"}'='\"\$@\"'
+  setopt NO_GLOB_SUBST
+else
+  case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac
+fi
+BIN_SH=xpg4; export BIN_SH # for Tru64
+DUALCASE=1; export DUALCASE # for MKS sh
+
+# The HP-UX ksh and POSIX shell print the target directory to stdout
+# if CDPATH is set.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+relink_command=\"$relink_command\"
+
+# This environment variable determines our operation mode.
+if test \"\$libtool_install_magic\" = \"$magic\"; then
+  # install mode needs the following variables:
+  generated_by_libtool_version='$macro_version'
+  notinst_deplibs='$notinst_deplibs'
+else
+  # When we are sourced in execute mode, \$file and \$ECHO are already set.
+  if test \"\$libtool_execute_magic\" != \"$magic\"; then
+    ECHO=\"$qecho\"
+    file=\"\$0\"
+    # Make sure echo works.
+    if test \"X\$1\" = X--no-reexec; then
+      # Discard the --no-reexec flag, and continue.
+      shift
+    elif test \"X\`{ \$ECHO '\t'; } 2>/dev/null\`\" = 'X\t'; then
+      # Yippee, \$ECHO works!
+      :
+    else
+      # Restart under the correct shell, and then maybe \$ECHO will work.
+      exec $SHELL \"\$0\" --no-reexec \${1+\"\$@\"}
+    fi
+  fi\
+"
+       $ECHO "\
+
+  # Find the directory that this script lives in.
+  thisdir=\`\$ECHO \"X\$file\" | \$Xsed -e 's%/[^/]*$%%'\`
+  test \"x\$thisdir\" = \"x\$file\" && thisdir=.
+
+  # Follow symbolic links until we get to the real thisdir.
+  file=\`ls -ld \"\$file\" | ${SED} -n 's/.*-> //p'\`
+  while test -n \"\$file\"; do
+    destdir=\`\$ECHO \"X\$file\" | \$Xsed -e 's%/[^/]*\$%%'\`
+
+    # If there was a directory component, then change thisdir.
+    if test \"x\$destdir\" != \"x\$file\"; then
+      case \"\$destdir\" in
+      [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;;
+      *) thisdir=\"\$thisdir/\$destdir\" ;;
+      esac
+    fi
+
+    file=\`\$ECHO \"X\$file\" | \$Xsed -e 's%^.*/%%'\`
+    file=\`ls -ld \"\$thisdir/\$file\" | ${SED} -n 's/.*-> //p'\`
+  done
+"
+}
+# end: func_emit_wrapper_part1
+
+# func_emit_wrapper_part2 [arg=no]
+#
+# Emit the second part of a libtool wrapper script on stdout.
+# For more information, see the description associated with
+# func_emit_wrapper(), below.
+func_emit_wrapper_part2 ()
+{
+       func_emit_wrapper_part2_arg1=no
+       if test -n "$1" ; then
+         func_emit_wrapper_part2_arg1=$1
+       fi
+
+       $ECHO "\
+
+  # Usually 'no', except on cygwin/mingw when embedded into
+  # the cwrapper.
+  WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_part2_arg1
+  if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then
+    # special case for '.'
+    if test \"\$thisdir\" = \".\"; then
+      thisdir=\`pwd\`
+    fi
+    # remove .libs from thisdir
+    case \"\$thisdir\" in
+    *[\\\\/]$objdir ) thisdir=\`\$ECHO \"X\$thisdir\" | \$Xsed -e 's%[\\\\/][^\\\\/]*$%%'\` ;;
+    $objdir )   thisdir=. ;;
+    esac
+  fi
+
+  # Try to get the absolute directory name.
+  absdir=\`cd \"\$thisdir\" && pwd\`
+  test -n \"\$absdir\" && thisdir=\"\$absdir\"
+"
+
+       if test "$fast_install" = yes; then
+         $ECHO "\
+  program=lt-'$outputname'$exeext
+  progdir=\"\$thisdir/$objdir\"
+
+  if test ! -f \"\$progdir/\$program\" ||
+     { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\
+       test \"X\$file\" != \"X\$progdir/\$program\"; }; then
+
+    file=\"\$\$-\$program\"
+
+    if test ! -d \"\$progdir\"; then
+      $MKDIR \"\$progdir\"
+    else
+      $RM \"\$progdir/\$file\"
+    fi"
+
+         $ECHO "\
+
+    # relink executable if necessary
+    if test -n \"\$relink_command\"; then
+      if relink_command_output=\`eval \$relink_command 2>&1\`; then :
+      else
+       $ECHO \"\$relink_command_output\" >&2
+       $RM \"\$progdir/\$file\"
+       exit 1
+      fi
+    fi
+
+    $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null ||
+    { $RM \"\$progdir/\$program\";
+      $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; }
+    $RM \"\$progdir/\$file\"
+  fi"
+       else
+         $ECHO "\
+  program='$outputname'
+  progdir=\"\$thisdir/$objdir\"
+"
+       fi
+
+       $ECHO "\
+
+  if test -f \"\$progdir/\$program\"; then"
+
+       # Export our shlibpath_var if we have one.
+       if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then
+         $ECHO "\
+    # Add our own library path to $shlibpath_var
+    $shlibpath_var=\"$temp_rpath\$$shlibpath_var\"
+
+    # Some systems cannot cope with colon-terminated $shlibpath_var
+    # The second colon is a workaround for a bug in BeOS R4 sed
+    $shlibpath_var=\`\$ECHO \"X\$$shlibpath_var\" | \$Xsed -e 's/::*\$//'\`
+
+    export $shlibpath_var
+"
+       fi
+
+       # fixup the dll searchpath if we need to.
+       if test -n "$dllsearchpath"; then
+         $ECHO "\
+    # Add the dll search path components to the executable PATH
+    PATH=$dllsearchpath:\$PATH
+"
+       fi
+
+       $ECHO "\
+    if test \"\$libtool_execute_magic\" != \"$magic\"; then
+      # Run the actual program with our arguments.
+"
+       case $host in
+       # Backslashes separate directories on plain windows
+       *-*-mingw | *-*-os2* | *-cegcc*)
+         $ECHO "\
+      exec \"\$progdir\\\\\$program\" \${1+\"\$@\"}
+"
+         ;;
+
+       *)
+         $ECHO "\
+      exec \"\$progdir/\$program\" \${1+\"\$@\"}
+"
+         ;;
+       esac
+       $ECHO "\
+      \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2
+      exit 1
+    fi
+  else
+    # The program doesn't exist.
+    \$ECHO \"\$0: error: \\\`\$progdir/\$program' does not exist\" 1>&2
+    \$ECHO \"This script is just a wrapper for \$program.\" 1>&2
+    $ECHO \"See the $PACKAGE documentation for more information.\" 1>&2
+    exit 1
+  fi
+fi\
+"
+}
+# end: func_emit_wrapper_part2
+
+
+# func_emit_wrapper [arg=no]
+#
+# Emit a libtool wrapper script on stdout.
+# Don't directly open a file because we may want to
+# incorporate the script contents within a cygwin/mingw
+# wrapper executable.  Must ONLY be called from within
+# func_mode_link because it depends on a number of variables
+# set therein.
+#
+# ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR
+# variable will take.  If 'yes', then the emitted script
+# will assume that the directory in which it is stored is
+# the $objdir directory.  This is a cygwin/mingw-specific
+# behavior.
+func_emit_wrapper ()
+{
+       func_emit_wrapper_arg1=no
+       if test -n "$1" ; then
+         func_emit_wrapper_arg1=$1
+       fi
+
+       # split this up so that func_emit_cwrapperexe_src
+       # can call each part independently.
+       func_emit_wrapper_part1 "${func_emit_wrapper_arg1}"
+       func_emit_wrapper_part2 "${func_emit_wrapper_arg1}"
+}
+
+
+# func_to_host_path arg
+#
+# Convert paths to host format when used with build tools.
+# Intended for use with "native" mingw (where libtool itself
+# is running under the msys shell), or in the following cross-
+# build environments:
+#    $build          $host
+#    mingw (msys)    mingw  [e.g. native]
+#    cygwin          mingw
+#    *nix + wine     mingw
+# where wine is equipped with the `winepath' executable.
+# In the native mingw case, the (msys) shell automatically
+# converts paths for any non-msys applications it launches,
+# but that facility isn't available from inside the cwrapper.
+# Similar accommodations are necessary for $host mingw and
+# $build cygwin.  Calling this function does no harm for other
+# $host/$build combinations not listed above.
+#
+# ARG is the path (on $build) that should be converted to
+# the proper representation for $host. The result is stored
+# in $func_to_host_path_result.
+func_to_host_path ()
+{
+  func_to_host_path_result="$1"
+  if test -n "$1" ; then
+    case $host in
+      *mingw* )
+        lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g'
+        case $build in
+          *mingw* ) # actually, msys
+            # awkward: cmd appends spaces to result
+            lt_sed_strip_trailing_spaces="s/[ ]*\$//"
+            func_to_host_path_tmp1=`( cmd //c echo "$1" |\
+              $SED -e "$lt_sed_strip_trailing_spaces" ) 2>/dev/null || echo ""`
+            func_to_host_path_result=`echo "$func_to_host_path_tmp1" |\
+              $SED -e "$lt_sed_naive_backslashify"`
+            ;;
+          *cygwin* )
+            func_to_host_path_tmp1=`cygpath -w "$1"`
+            func_to_host_path_result=`echo "$func_to_host_path_tmp1" |\
+              $SED -e "$lt_sed_naive_backslashify"`
+            ;;
+          * )
+            # Unfortunately, winepath does not exit with a non-zero
+            # error code, so we are forced to check the contents of
+            # stdout. On the other hand, if the command is not
+            # found, the shell will set an exit code of 127 and print
+            # *an error message* to stdout. So we must check for both
+            # error code of zero AND non-empty stdout, which explains
+            # the odd construction:
+            func_to_host_path_tmp1=`winepath -w "$1" 2>/dev/null`
+            if test "$?" -eq 0 && test -n "${func_to_host_path_tmp1}"; then
+              func_to_host_path_result=`echo "$func_to_host_path_tmp1" |\
+                $SED -e "$lt_sed_naive_backslashify"`
+            else
+              # Allow warning below.
+              func_to_host_path_result=""
+            fi
+            ;;
+        esac
+        if test -z "$func_to_host_path_result" ; then
+          func_error "Could not determine host path corresponding to"
+          func_error "  '$1'"
+          func_error "Continuing, but uninstalled executables may not work."
+          # Fallback:
+          func_to_host_path_result="$1"
+        fi
+        ;;
+    esac
+  fi
+}
+# end: func_to_host_path
+
+# func_to_host_pathlist arg
+#
+# Convert pathlists to host format when used with build tools.
+# See func_to_host_path(), above. This function supports the
+# following $build/$host combinations (but does no harm for
+# combinations not listed here):
+#    $build          $host
+#    mingw (msys)    mingw  [e.g. native]
+#    cygwin          mingw
+#    *nix + wine     mingw
+#
+# Path separators are also converted from $build format to
+# $host format. If ARG begins or ends with a path separator
+# character, it is preserved (but converted to $host format)
+# on output.
+#
+# ARG is a pathlist (on $build) that should be converted to
+# the proper representation on $host. The result is stored
+# in $func_to_host_pathlist_result.
+func_to_host_pathlist ()
+{
+  func_to_host_pathlist_result="$1"
+  if test -n "$1" ; then
+    case $host in
+      *mingw* )
+        lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g'
+        # Remove leading and trailing path separator characters from
+        # ARG. msys behavior is inconsistent here, cygpath turns them
+        # into '.;' and ';.', and winepath ignores them completely.
+        func_to_host_pathlist_tmp2="$1"
+        # Once set for this call, this variable should not be
+        # reassigned. It is used in tha fallback case.
+        func_to_host_pathlist_tmp1=`echo "$func_to_host_pathlist_tmp2" |\
+          $SED -e 's|^:*||' -e 's|:*$||'`
+        case $build in
+          *mingw* ) # Actually, msys.
+            # Awkward: cmd appends spaces to result.
+            lt_sed_strip_trailing_spaces="s/[ ]*\$//"
+            func_to_host_pathlist_tmp2=`( cmd //c echo "$func_to_host_pathlist_tmp1" |\
+              $SED -e "$lt_sed_strip_trailing_spaces" ) 2>/dev/null || echo ""`
+            func_to_host_pathlist_result=`echo "$func_to_host_pathlist_tmp2" |\
+              $SED -e "$lt_sed_naive_backslashify"`
+            ;;
+          *cygwin* )
+            func_to_host_pathlist_tmp2=`cygpath -w -p "$func_to_host_pathlist_tmp1"`
+            func_to_host_pathlist_result=`echo "$func_to_host_pathlist_tmp2" |\
+              $SED -e "$lt_sed_naive_backslashify"`
+            ;;
+          * )
+            # unfortunately, winepath doesn't convert pathlists
+            func_to_host_pathlist_result=""
+            func_to_host_pathlist_oldIFS=$IFS
+            IFS=:
+            for func_to_host_pathlist_f in $func_to_host_pathlist_tmp1 ; do
+              IFS=$func_to_host_pathlist_oldIFS
+              if test -n "$func_to_host_pathlist_f" ; then
+                func_to_host_path "$func_to_host_pathlist_f"
+                if test -n "$func_to_host_path_result" ; then
+                  if test -z "$func_to_host_pathlist_result" ; then
+                    func_to_host_pathlist_result="$func_to_host_path_result"
+                  else
+                    func_to_host_pathlist_result="$func_to_host_pathlist_result;$func_to_host_path_result"
+                  fi
+                fi
+              fi
+              IFS=:
+            done
+            IFS=$func_to_host_pathlist_oldIFS
+            ;;
+        esac
+        if test -z "$func_to_host_pathlist_result" ; then
+          func_error "Could not determine the host path(s) corresponding to"
+          func_error "  '$1'"
+          func_error "Continuing, but uninstalled executables may not work."
+          # Fallback. This may break if $1 contains DOS-style drive
+          # specifications. The fix is not to complicate the expression
+          # below, but for the user to provide a working wine installation
+          # with winepath so that path translation in the cross-to-mingw
+          # case works properly.
+          lt_replace_pathsep_nix_to_dos="s|:|;|g"
+          func_to_host_pathlist_result=`echo "$func_to_host_pathlist_tmp1" |\
+            $SED -e "$lt_replace_pathsep_nix_to_dos"`
+        fi
+        # Now, add the leading and trailing path separators back
+        case "$1" in
+          :* ) func_to_host_pathlist_result=";$func_to_host_pathlist_result"
+            ;;
+        esac
+        case "$1" in
+          *: ) func_to_host_pathlist_result="$func_to_host_pathlist_result;"
+            ;;
+        esac
+        ;;
+    esac
+  fi
+}
+# end: func_to_host_pathlist
+
+# func_emit_cwrapperexe_src
+# emit the source code for a wrapper executable on stdout
+# Must ONLY be called from within func_mode_link because
+# it depends on a number of variable set therein.
+func_emit_cwrapperexe_src ()
+{
+       cat <<EOF
+
+/* $cwrappersource - temporary wrapper executable for $objdir/$outputname
+   Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
+
+   The $output program cannot be directly executed until all the libtool
+   libraries that it depends on are installed.
+
+   This wrapper executable should never be moved out of the build directory.
+   If it is, it will not operate correctly.
+
+   Currently, it simply execs the wrapper *script* "$SHELL $output",
+   but could eventually absorb all of the scripts functionality and
+   exec $objdir/$outputname directly.
+*/
+EOF
+           cat <<"EOF"
+#include <stdio.h>
+#include <stdlib.h>
+#ifdef _MSC_VER
+# include <direct.h>
+# include <process.h>
+# include <io.h>
+# define setmode _setmode
+#else
+# include <unistd.h>
+# include <stdint.h>
+# ifdef __CYGWIN__
+#  include <io.h>
+#  define HAVE_SETENV
+#  ifdef __STRICT_ANSI__
+char *realpath (const char *, char *);
+int putenv (char *);
+int setenv (const char *, const char *, int);
+#  endif
+# endif
+#endif
+#include <malloc.h>
+#include <stdarg.h>
+#include <assert.h>
+#include <string.h>
+#include <ctype.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <sys/stat.h>
+
+#if defined(PATH_MAX)
+# define LT_PATHMAX PATH_MAX
+#elif defined(MAXPATHLEN)
+# define LT_PATHMAX MAXPATHLEN
+#else
+# define LT_PATHMAX 1024
+#endif
+
+#ifndef S_IXOTH
+# define S_IXOTH 0
+#endif
+#ifndef S_IXGRP
+# define S_IXGRP 0
+#endif
+
+#ifdef _MSC_VER
+# define S_IXUSR _S_IEXEC
+# define stat _stat
+# ifndef _INTPTR_T_DEFINED
+#  define intptr_t int
+# endif
+#endif
+
+#ifndef DIR_SEPARATOR
+# define DIR_SEPARATOR '/'
+# define PATH_SEPARATOR ':'
+#endif
+
+#if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \
+  defined (__OS2__)
+# define HAVE_DOS_BASED_FILE_SYSTEM
+# define FOPEN_WB "wb"
+# ifndef DIR_SEPARATOR_2
+#  define DIR_SEPARATOR_2 '\\'
+# endif
+# ifndef PATH_SEPARATOR_2
+#  define PATH_SEPARATOR_2 ';'
+# endif
+#endif
+
+#ifndef DIR_SEPARATOR_2
+# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR)
+#else /* DIR_SEPARATOR_2 */
+# define IS_DIR_SEPARATOR(ch) \
+       (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2))
+#endif /* DIR_SEPARATOR_2 */
+
+#ifndef PATH_SEPARATOR_2
+# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR)
+#else /* PATH_SEPARATOR_2 */
+# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2)
+#endif /* PATH_SEPARATOR_2 */
+
+#ifdef __CYGWIN__
+# define FOPEN_WB "wb"
+#endif
+
+#ifndef FOPEN_WB
+# define FOPEN_WB "w"
+#endif
+#ifndef _O_BINARY
+# define _O_BINARY 0
+#endif
+
+#define XMALLOC(type, num)      ((type *) xmalloc ((num) * sizeof(type)))
+#define XFREE(stale) do { \
+  if (stale) { free ((void *) stale); stale = 0; } \
+} while (0)
+
+#undef LTWRAPPER_DEBUGPRINTF
+#if defined DEBUGWRAPPER
+# define LTWRAPPER_DEBUGPRINTF(args) ltwrapper_debugprintf args
+static void
+ltwrapper_debugprintf (const char *fmt, ...)
+{
+    va_list args;
+    va_start (args, fmt);
+    (void) vfprintf (stderr, fmt, args);
+    va_end (args);
+}
+#else
+# define LTWRAPPER_DEBUGPRINTF(args)
+#endif
+
+const char *program_name = NULL;
+
+void *xmalloc (size_t num);
+char *xstrdup (const char *string);
+const char *base_name (const char *name);
+char *find_executable (const char *wrapper);
+char *chase_symlinks (const char *pathspec);
+int make_executable (const char *path);
+int check_executable (const char *path);
+char *strendzap (char *str, const char *pat);
+void lt_fatal (const char *message, ...);
+void lt_setenv (const char *name, const char *value);
+char *lt_extend_str (const char *orig_value, const char *add, int to_end);
+void lt_opt_process_env_set (const char *arg);
+void lt_opt_process_env_prepend (const char *arg);
+void lt_opt_process_env_append (const char *arg);
+int lt_split_name_value (const char *arg, char** name, char** value);
+void lt_update_exe_path (const char *name, const char *value);
+void lt_update_lib_path (const char *name, const char *value);
+
+static const char *script_text_part1 =
+EOF
+
+           func_emit_wrapper_part1 yes |
+               $SED -e 's/\([\\"]\)/\\\1/g' \
+                    -e 's/^/  "/' -e 's/$/\\n"/'
+           echo ";"
+           cat <<EOF
+
+static const char *script_text_part2 =
+EOF
+           func_emit_wrapper_part2 yes |
+               $SED -e 's/\([\\"]\)/\\\1/g' \
+                    -e 's/^/  "/' -e 's/$/\\n"/'
+           echo ";"
+
+           cat <<EOF
+const char * MAGIC_EXE = "$magic_exe";
+const char * LIB_PATH_VARNAME = "$shlibpath_var";
+EOF
+
+           if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then
+              func_to_host_pathlist "$temp_rpath"
+             cat <<EOF
+const char * LIB_PATH_VALUE   = "$func_to_host_pathlist_result";
+EOF
+           else
+             cat <<"EOF"
+const char * LIB_PATH_VALUE   = "";
+EOF
+           fi
+
+           if test -n "$dllsearchpath"; then
+              func_to_host_pathlist "$dllsearchpath:"
+             cat <<EOF
+const char * EXE_PATH_VARNAME = "PATH";
+const char * EXE_PATH_VALUE   = "$func_to_host_pathlist_result";
+EOF
+           else
+             cat <<"EOF"
+const char * EXE_PATH_VARNAME = "";
+const char * EXE_PATH_VALUE   = "";
+EOF
+           fi
+
+           if test "$fast_install" = yes; then
+             cat <<EOF
+const char * TARGET_PROGRAM_NAME = "lt-$outputname"; /* hopefully, no .exe */
+EOF
+           else
+             cat <<EOF
+const char * TARGET_PROGRAM_NAME = "$outputname"; /* hopefully, no .exe */
+EOF
+           fi
+
+
+           cat <<"EOF"
+
+#define LTWRAPPER_OPTION_PREFIX         "--lt-"
+#define LTWRAPPER_OPTION_PREFIX_LENGTH  5
+
+static const size_t opt_prefix_len         = LTWRAPPER_OPTION_PREFIX_LENGTH;
+static const char *ltwrapper_option_prefix = LTWRAPPER_OPTION_PREFIX;
+
+static const char *dumpscript_opt       = LTWRAPPER_OPTION_PREFIX "dump-script";
+
+static const size_t env_set_opt_len     = LTWRAPPER_OPTION_PREFIX_LENGTH + 7;
+static const char *env_set_opt          = LTWRAPPER_OPTION_PREFIX "env-set";
+  /* argument is putenv-style "foo=bar", value of foo is set to bar */
+
+static const size_t env_prepend_opt_len = LTWRAPPER_OPTION_PREFIX_LENGTH + 11;
+static const char *env_prepend_opt      = LTWRAPPER_OPTION_PREFIX "env-prepend";
+  /* argument is putenv-style "foo=bar", new value of foo is bar${foo} */
+
+static const size_t env_append_opt_len  = LTWRAPPER_OPTION_PREFIX_LENGTH + 10;
+static const char *env_append_opt       = LTWRAPPER_OPTION_PREFIX "env-append";
+  /* argument is putenv-style "foo=bar", new value of foo is ${foo}bar */
+
+int
+main (int argc, char *argv[])
+{
+  char **newargz;
+  int  newargc;
+  char *tmp_pathspec;
+  char *actual_cwrapper_path;
+  char *actual_cwrapper_name;
+  char *target_name;
+  char *lt_argv_zero;
+  intptr_t rval = 127;
+
+  int i;
+
+  program_name = (char *) xstrdup (base_name (argv[0]));
+  LTWRAPPER_DEBUGPRINTF (("(main) argv[0]      : %s\n", argv[0]));
+  LTWRAPPER_DEBUGPRINTF (("(main) program_name : %s\n", program_name));
+
+  /* very simple arg parsing; don't want to rely on getopt */
+  for (i = 1; i < argc; i++)
+    {
+      if (strcmp (argv[i], dumpscript_opt) == 0)
+       {
+EOF
+           case "$host" in
+             *mingw* | *cygwin* )
+               # make stdout use "unix" line endings
+               echo "          setmode(1,_O_BINARY);"
+               ;;
+             esac
+
+           cat <<"EOF"
+         printf ("%s", script_text_part1);
+         printf ("%s", script_text_part2);
+         return 0;
+       }
+    }
+
+  newargz = XMALLOC (char *, argc + 1);
+  tmp_pathspec = find_executable (argv[0]);
+  if (tmp_pathspec == NULL)
+    lt_fatal ("Couldn't find %s", argv[0]);
+  LTWRAPPER_DEBUGPRINTF (("(main) found exe (before symlink chase) at : %s\n",
+                         tmp_pathspec));
+
+  actual_cwrapper_path = chase_symlinks (tmp_pathspec);
+  LTWRAPPER_DEBUGPRINTF (("(main) found exe (after symlink chase) at : %s\n",
+                         actual_cwrapper_path));
+  XFREE (tmp_pathspec);
+
+  actual_cwrapper_name = xstrdup( base_name (actual_cwrapper_path));
+  strendzap (actual_cwrapper_path, actual_cwrapper_name);
+
+  /* wrapper name transforms */
+  strendzap (actual_cwrapper_name, ".exe");
+  tmp_pathspec = lt_extend_str (actual_cwrapper_name, ".exe", 1);
+  XFREE (actual_cwrapper_name);
+  actual_cwrapper_name = tmp_pathspec;
+  tmp_pathspec = 0;
+
+  /* target_name transforms -- use actual target program name; might have lt- prefix */
+  target_name = xstrdup (base_name (TARGET_PROGRAM_NAME));
+  strendzap (target_name, ".exe");
+  tmp_pathspec = lt_extend_str (target_name, ".exe", 1);
+  XFREE (target_name);
+  target_name = tmp_pathspec;
+  tmp_pathspec = 0;
+
+  LTWRAPPER_DEBUGPRINTF (("(main) libtool target name: %s\n",
+                         target_name));
+EOF
+
+           cat <<EOF
+  newargz[0] =
+    XMALLOC (char, (strlen (actual_cwrapper_path) +
+                   strlen ("$objdir") + 1 + strlen (actual_cwrapper_name) + 1));
+  strcpy (newargz[0], actual_cwrapper_path);
+  strcat (newargz[0], "$objdir");
+  strcat (newargz[0], "/");
+EOF
+
+           cat <<"EOF"
+  /* stop here, and copy so we don't have to do this twice */
+  tmp_pathspec = xstrdup (newargz[0]);
+
+  /* do NOT want the lt- prefix here, so use actual_cwrapper_name */
+  strcat (newargz[0], actual_cwrapper_name);
+
+  /* DO want the lt- prefix here if it exists, so use target_name */
+  lt_argv_zero = lt_extend_str (tmp_pathspec, target_name, 1);
+  XFREE (tmp_pathspec);
+  tmp_pathspec = NULL;
+EOF
+
+           case $host_os in
+             mingw*)
+           cat <<"EOF"
+  {
+    char* p;
+    while ((p = strchr (newargz[0], '\\')) != NULL)
+      {
+       *p = '/';
+      }
+    while ((p = strchr (lt_argv_zero, '\\')) != NULL)
+      {
+       *p = '/';
+      }
+  }
+EOF
+           ;;
+           esac
+
+           cat <<"EOF"
+  XFREE (target_name);
+  XFREE (actual_cwrapper_path);
+  XFREE (actual_cwrapper_name);
+
+  lt_setenv ("BIN_SH", "xpg4"); /* for Tru64 */
+  lt_setenv ("DUALCASE", "1");  /* for MSK sh */
+  lt_update_lib_path (LIB_PATH_VARNAME, LIB_PATH_VALUE);
+  lt_update_exe_path (EXE_PATH_VARNAME, EXE_PATH_VALUE);
+
+  newargc=0;
+  for (i = 1; i < argc; i++)
+    {
+      if (strncmp (argv[i], env_set_opt, env_set_opt_len) == 0)
+        {
+          if (argv[i][env_set_opt_len] == '=')
+            {
+              const char *p = argv[i] + env_set_opt_len + 1;
+              lt_opt_process_env_set (p);
+            }
+          else if (argv[i][env_set_opt_len] == '\0' && i + 1 < argc)
+            {
+              lt_opt_process_env_set (argv[++i]); /* don't copy */
+            }
+          else
+            lt_fatal ("%s missing required argument", env_set_opt);
+          continue;
+        }
+      if (strncmp (argv[i], env_prepend_opt, env_prepend_opt_len) == 0)
+        {
+          if (argv[i][env_prepend_opt_len] == '=')
+            {
+              const char *p = argv[i] + env_prepend_opt_len + 1;
+              lt_opt_process_env_prepend (p);
+            }
+          else if (argv[i][env_prepend_opt_len] == '\0' && i + 1 < argc)
+            {
+              lt_opt_process_env_prepend (argv[++i]); /* don't copy */
+            }
+          else
+            lt_fatal ("%s missing required argument", env_prepend_opt);
+          continue;
+        }
+      if (strncmp (argv[i], env_append_opt, env_append_opt_len) == 0)
+        {
+          if (argv[i][env_append_opt_len] == '=')
+            {
+              const char *p = argv[i] + env_append_opt_len + 1;
+              lt_opt_process_env_append (p);
+            }
+          else if (argv[i][env_append_opt_len] == '\0' && i + 1 < argc)
+            {
+              lt_opt_process_env_append (argv[++i]); /* don't copy */
+            }
+          else
+            lt_fatal ("%s missing required argument", env_append_opt);
+          continue;
+        }
+      if (strncmp (argv[i], ltwrapper_option_prefix, opt_prefix_len) == 0)
+        {
+          /* however, if there is an option in the LTWRAPPER_OPTION_PREFIX
+             namespace, but it is not one of the ones we know about and
+             have already dealt with, above (inluding dump-script), then
+             report an error. Otherwise, targets might begin to believe
+             they are allowed to use options in the LTWRAPPER_OPTION_PREFIX
+             namespace. The first time any user complains about this, we'll
+             need to make LTWRAPPER_OPTION_PREFIX a configure-time option
+             or a configure.ac-settable value.
+           */
+          lt_fatal ("Unrecognized option in %s namespace: '%s'",
+                    ltwrapper_option_prefix, argv[i]);
+        }
+      /* otherwise ... */
+      newargz[++newargc] = xstrdup (argv[i]);
+    }
+  newargz[++newargc] = NULL;
+
+  LTWRAPPER_DEBUGPRINTF     (("(main) lt_argv_zero : %s\n", (lt_argv_zero ? lt_argv_zero : "<NULL>")));
+  for (i = 0; i < newargc; i++)
+    {
+      LTWRAPPER_DEBUGPRINTF (("(main) newargz[%d]   : %s\n", i, (newargz[i] ? newargz[i] : "<NULL>")));
+    }
+
+EOF
+
+           case $host_os in
+             mingw*)
+               cat <<"EOF"
+  /* execv doesn't actually work on mingw as expected on unix */
+  rval = _spawnv (_P_WAIT, lt_argv_zero, (const char * const *) newargz);
+  if (rval == -1)
+    {
+      /* failed to start process */
+      LTWRAPPER_DEBUGPRINTF (("(main) failed to launch target \"%s\": errno = %d\n", lt_argv_zero, errno));
+      return 127;
+    }
+  return rval;
+EOF
+               ;;
+             *)
+               cat <<"EOF"
+  execv (lt_argv_zero, newargz);
+  return rval; /* =127, but avoids unused variable warning */
+EOF
+               ;;
+           esac
+
+           cat <<"EOF"
+}
+
+void *
+xmalloc (size_t num)
+{
+  void *p = (void *) malloc (num);
+  if (!p)
+    lt_fatal ("Memory exhausted");
+
+  return p;
+}
+
+char *
+xstrdup (const char *string)
+{
+  return string ? strcpy ((char *) xmalloc (strlen (string) + 1),
+                         string) : NULL;
+}
+
+const char *
+base_name (const char *name)
+{
+  const char *base;
+
+#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
+  /* Skip over the disk name in MSDOS pathnames. */
+  if (isalpha ((unsigned char) name[0]) && name[1] == ':')
+    name += 2;
+#endif
+
+  for (base = name; *name; name++)
+    if (IS_DIR_SEPARATOR (*name))
+      base = name + 1;
+  return base;
+}
+
+int
+check_executable (const char *path)
+{
+  struct stat st;
+
+  LTWRAPPER_DEBUGPRINTF (("(check_executable)  : %s\n",
+                         path ? (*path ? path : "EMPTY!") : "NULL!"));
+  if ((!path) || (!*path))
+    return 0;
+
+  if ((stat (path, &st) >= 0)
+      && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH)))
+    return 1;
+  else
+    return 0;
+}
+
+int
+make_executable (const char *path)
+{
+  int rval = 0;
+  struct stat st;
+
+  LTWRAPPER_DEBUGPRINTF (("(make_executable)   : %s\n",
+                         path ? (*path ? path : "EMPTY!") : "NULL!"));
+  if ((!path) || (!*path))
+    return 0;
+
+  if (stat (path, &st) >= 0)
+    {
+      rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR);
+    }
+  return rval;
+}
+
+/* Searches for the full path of the wrapper.  Returns
+   newly allocated full path name if found, NULL otherwise
+   Does not chase symlinks, even on platforms that support them.
+*/
+char *
+find_executable (const char *wrapper)
+{
+  int has_slash = 0;
+  const char *p;
+  const char *p_next;
+  /* static buffer for getcwd */
+  char tmp[LT_PATHMAX + 1];
+  int tmp_len;
+  char *concat_name;
+
+  LTWRAPPER_DEBUGPRINTF (("(find_executable)   : %s\n",
+                         wrapper ? (*wrapper ? wrapper : "EMPTY!") : "NULL!"));
+
+  if ((wrapper == NULL) || (*wrapper == '\0'))
+    return NULL;
+
+  /* Absolute path? */
+#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
+  if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':')
+    {
+      concat_name = xstrdup (wrapper);
+      if (check_executable (concat_name))
+       return concat_name;
+      XFREE (concat_name);
+    }
+  else
+    {
+#endif
+      if (IS_DIR_SEPARATOR (wrapper[0]))
+       {
+         concat_name = xstrdup (wrapper);
+         if (check_executable (concat_name))
+           return concat_name;
+         XFREE (concat_name);
+       }
+#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
+    }
+#endif
+
+  for (p = wrapper; *p; p++)
+    if (*p == '/')
+      {
+       has_slash = 1;
+       break;
+      }
+  if (!has_slash)
+    {
+      /* no slashes; search PATH */
+      const char *path = getenv ("PATH");
+      if (path != NULL)
+       {
+         for (p = path; *p; p = p_next)
+           {
+             const char *q;
+             size_t p_len;
+             for (q = p; *q; q++)
+               if (IS_PATH_SEPARATOR (*q))
+                 break;
+             p_len = q - p;
+             p_next = (*q == '\0' ? q : q + 1);
+             if (p_len == 0)
+               {
+                 /* empty path: current directory */
+                 if (getcwd (tmp, LT_PATHMAX) == NULL)
+                   lt_fatal ("getcwd failed");
+                 tmp_len = strlen (tmp);
+                 concat_name =
+                   XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1);
+                 memcpy (concat_name, tmp, tmp_len);
+                 concat_name[tmp_len] = '/';
+                 strcpy (concat_name + tmp_len + 1, wrapper);
+               }
+             else
+               {
+                 concat_name =
+                   XMALLOC (char, p_len + 1 + strlen (wrapper) + 1);
+                 memcpy (concat_name, p, p_len);
+                 concat_name[p_len] = '/';
+                 strcpy (concat_name + p_len + 1, wrapper);
+               }
+             if (check_executable (concat_name))
+               return concat_name;
+             XFREE (concat_name);
+           }
+       }
+      /* not found in PATH; assume curdir */
+    }
+  /* Relative path | not found in path: prepend cwd */
+  if (getcwd (tmp, LT_PATHMAX) == NULL)
+    lt_fatal ("getcwd failed");
+  tmp_len = strlen (tmp);
+  concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1);
+  memcpy (concat_name, tmp, tmp_len);
+  concat_name[tmp_len] = '/';
+  strcpy (concat_name + tmp_len + 1, wrapper);
+
+  if (check_executable (concat_name))
+    return concat_name;
+  XFREE (concat_name);
+  return NULL;
+}
+
+char *
+chase_symlinks (const char *pathspec)
+{
+#ifndef S_ISLNK
+  return xstrdup (pathspec);
+#else
+  char buf[LT_PATHMAX];
+  struct stat s;
+  char *tmp_pathspec = xstrdup (pathspec);
+  char *p;
+  int has_symlinks = 0;
+  while (strlen (tmp_pathspec) && !has_symlinks)
+    {
+      LTWRAPPER_DEBUGPRINTF (("checking path component for symlinks: %s\n",
+                             tmp_pathspec));
+      if (lstat (tmp_pathspec, &s) == 0)
+       {
+         if (S_ISLNK (s.st_mode) != 0)
+           {
+             has_symlinks = 1;
+             break;
+           }
+
+         /* search backwards for last DIR_SEPARATOR */
+         p = tmp_pathspec + strlen (tmp_pathspec) - 1;
+         while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p)))
+           p--;
+         if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p)))
+           {
+             /* no more DIR_SEPARATORS left */
+             break;
+           }
+         *p = '\0';
+       }
+      else
+       {
+         char *errstr = strerror (errno);
+         lt_fatal ("Error accessing file %s (%s)", tmp_pathspec, errstr);
+       }
+    }
+  XFREE (tmp_pathspec);
+
+  if (!has_symlinks)
+    {
+      return xstrdup (pathspec);
+    }
+
+  tmp_pathspec = realpath (pathspec, buf);
+  if (tmp_pathspec == 0)
+    {
+      lt_fatal ("Could not follow symlinks for %s", pathspec);
+    }
+  return xstrdup (tmp_pathspec);
+#endif
+}
+
+char *
+strendzap (char *str, const char *pat)
+{
+  size_t len, patlen;
+
+  assert (str != NULL);
+  assert (pat != NULL);
+
+  len = strlen (str);
+  patlen = strlen (pat);
+
+  if (patlen <= len)
+    {
+      str += len - patlen;
+      if (strcmp (str, pat) == 0)
+       *str = '\0';
+    }
+  return str;
+}
+
+static void
+lt_error_core (int exit_status, const char *mode,
+              const char *message, va_list ap)
+{
+  fprintf (stderr, "%s: %s: ", program_name, mode);
+  vfprintf (stderr, message, ap);
+  fprintf (stderr, ".\n");
+
+  if (exit_status >= 0)
+    exit (exit_status);
+}
+
+void
+lt_fatal (const char *message, ...)
+{
+  va_list ap;
+  va_start (ap, message);
+  lt_error_core (EXIT_FAILURE, "FATAL", message, ap);
+  va_end (ap);
+}
+
+void
+lt_setenv (const char *name, const char *value)
+{
+  LTWRAPPER_DEBUGPRINTF (("(lt_setenv) setting '%s' to '%s'\n",
+                          (name ? name : "<NULL>"),
+                          (value ? value : "<NULL>")));
+  {
+#ifdef HAVE_SETENV
+    /* always make a copy, for consistency with !HAVE_SETENV */
+    char *str = xstrdup (value);
+    setenv (name, str, 1);
+#else
+    int len = strlen (name) + 1 + strlen (value) + 1;
+    char *str = XMALLOC (char, len);
+    sprintf (str, "%s=%s", name, value);
+    if (putenv (str) != EXIT_SUCCESS)
+      {
+        XFREE (str);
+      }
+#endif
+  }
+}
+
+char *
+lt_extend_str (const char *orig_value, const char *add, int to_end)
+{
+  char *new_value;
+  if (orig_value && *orig_value)
+    {
+      int orig_value_len = strlen (orig_value);
+      int add_len = strlen (add);
+      new_value = XMALLOC (char, add_len + orig_value_len + 1);
+      if (to_end)
+        {
+          strcpy (new_value, orig_value);
+          strcpy (new_value + orig_value_len, add);
+        }
+      else
+        {
+          strcpy (new_value, add);
+          strcpy (new_value + add_len, orig_value);
+        }
+    }
+  else
+    {
+      new_value = xstrdup (add);
+    }
+  return new_value;
+}
+
+int
+lt_split_name_value (const char *arg, char** name, char** value)
+{
+  const char *p;
+  int len;
+  if (!arg || !*arg)
+    return 1;
+
+  p = strchr (arg, (int)'=');
+
+  if (!p)
+    return 1;
+
+  *value = xstrdup (++p);
+
+  len = strlen (arg) - strlen (*value);
+  *name = XMALLOC (char, len);
+  strncpy (*name, arg, len-1);
+  (*name)[len - 1] = '\0';
+
+  return 0;
+}
+
+void
+lt_opt_process_env_set (const char *arg)
+{
+  char *name = NULL;
+  char *value = NULL;
+
+  if (lt_split_name_value (arg, &name, &value) != 0)
+    {
+      XFREE (name);
+      XFREE (value);
+      lt_fatal ("bad argument for %s: '%s'", env_set_opt, arg);
+    }
+
+  lt_setenv (name, value);
+  XFREE (name);
+  XFREE (value);
+}
+
+void
+lt_opt_process_env_prepend (const char *arg)
+{
+  char *name = NULL;
+  char *value = NULL;
+  char *new_value = NULL;
+
+  if (lt_split_name_value (arg, &name, &value) != 0)
+    {
+      XFREE (name);
+      XFREE (value);
+      lt_fatal ("bad argument for %s: '%s'", env_prepend_opt, arg);
+    }
+
+  new_value = lt_extend_str (getenv (name), value, 0);
+  lt_setenv (name, new_value);
+  XFREE (new_value);
+  XFREE (name);
+  XFREE (value);
+}
+
+void
+lt_opt_process_env_append (const char *arg)
+{
+  char *name = NULL;
+  char *value = NULL;
+  char *new_value = NULL;
+
+  if (lt_split_name_value (arg, &name, &value) != 0)
+    {
+      XFREE (name);
+      XFREE (value);
+      lt_fatal ("bad argument for %s: '%s'", env_append_opt, arg);
+    }
+
+  new_value = lt_extend_str (getenv (name), value, 1);
+  lt_setenv (name, new_value);
+  XFREE (new_value);
+  XFREE (name);
+  XFREE (value);
+}
+
+void
+lt_update_exe_path (const char *name, const char *value)
+{
+  LTWRAPPER_DEBUGPRINTF (("(lt_update_exe_path) modifying '%s' by prepending '%s'\n",
+                          (name ? name : "<NULL>"),
+                          (value ? value : "<NULL>")));
+
+  if (name && *name && value && *value)
+    {
+      char *new_value = lt_extend_str (getenv (name), value, 0);
+      /* some systems can't cope with a ':'-terminated path #' */
+      int len = strlen (new_value);
+      while (((len = strlen (new_value)) > 0) && IS_PATH_SEPARATOR (new_value[len-1]))
+        {
+          new_value[len-1] = '\0';
+        }
+      lt_setenv (name, new_value);
+      XFREE (new_value);
+    }
+}
+
+void
+lt_update_lib_path (const char *name, const char *value)
+{
+  LTWRAPPER_DEBUGPRINTF (("(lt_update_lib_path) modifying '%s' by prepending '%s'\n",
+                          (name ? name : "<NULL>"),
+                          (value ? value : "<NULL>")));
+
+  if (name && *name && value && *value)
+    {
+      char *new_value = lt_extend_str (getenv (name), value, 0);
+      lt_setenv (name, new_value);
+      XFREE (new_value);
+    }
+}
+
+
+EOF
+}
+# end: func_emit_cwrapperexe_src
+
+# func_mode_link arg...
+func_mode_link ()
+{
+    $opt_debug
+    case $host in
+    *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
+      # It is impossible to link a dll without this setting, and
+      # we shouldn't force the makefile maintainer to figure out
+      # which system we are compiling for in order to pass an extra
+      # flag for every libtool invocation.
+      # allow_undefined=no
+
+      # FIXME: Unfortunately, there are problems with the above when trying
+      # to make a dll which has undefined symbols, in which case not
+      # even a static library is built.  For now, we need to specify
+      # -no-undefined on the libtool link line when we can be certain
+      # that all symbols are satisfied, otherwise we get a static library.
+      allow_undefined=yes
+      ;;
+    *)
+      allow_undefined=yes
+      ;;
+    esac
+    libtool_args=$nonopt
+    base_compile="$nonopt $@"
+    compile_command=$nonopt
+    finalize_command=$nonopt
+
+    compile_rpath=
+    finalize_rpath=
+    compile_shlibpath=
+    finalize_shlibpath=
+    convenience=
+    old_convenience=
+    deplibs=
+    old_deplibs=
+    compiler_flags=
+    linker_flags=
+    dllsearchpath=
+    lib_search_path=`pwd`
+    inst_prefix_dir=
+    new_inherited_linker_flags=
+
+    avoid_version=no
+    dlfiles=
+    dlprefiles=
+    dlself=no
+    export_dynamic=no
+    export_symbols=
+    export_symbols_regex=
+    generated=
+    libobjs=
+    ltlibs=
+    module=no
+    no_install=no
+    objs=
+    non_pic_objects=
+    precious_files_regex=
+    prefer_static_libs=no
+    preload=no
+    prev=
+    prevarg=
+    release=
+    rpath=
+    xrpath=
+    perm_rpath=
+    temp_rpath=
+    thread_safe=no
+    vinfo=
+    vinfo_number=no
+    weak_libs=
+    single_module="${wl}-single_module"
+    func_infer_tag $base_compile
+
+    # We need to know -static, to get the right output filenames.
+    for arg
+    do
+      case $arg in
+      -shared)
+       test "$build_libtool_libs" != yes && \
+         func_fatal_configuration "can not build a shared library"
+       build_old_libs=no
+       break
+       ;;
+      -all-static | -static | -static-libtool-libs)
+       case $arg in
+       -all-static)
+         if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then
+           func_warning "complete static linking is impossible in this configuration"
+         fi
+         if test -n "$link_static_flag"; then
+           dlopen_self=$dlopen_self_static
+         fi
+         prefer_static_libs=yes
+         ;;
+       -static)
+         if test -z "$pic_flag" && test -n "$link_static_flag"; then
+           dlopen_self=$dlopen_self_static
+         fi
+         prefer_static_libs=built
+         ;;
+       -static-libtool-libs)
+         if test -z "$pic_flag" && test -n "$link_static_flag"; then
+           dlopen_self=$dlopen_self_static
+         fi
+         prefer_static_libs=yes
+         ;;
+       esac
+       build_libtool_libs=no
+       build_old_libs=yes
+       break
+       ;;
+      esac
+    done
+
+    # See if our shared archives depend on static archives.
+    test -n "$old_archive_from_new_cmds" && build_old_libs=yes
+
+    # Go through the arguments, transforming them on the way.
+    while test "$#" -gt 0; do
+      arg="$1"
+      shift
+      func_quote_for_eval "$arg"
+      qarg=$func_quote_for_eval_unquoted_result
+      func_append libtool_args " $func_quote_for_eval_result"
+
+      # If the previous option needs an argument, assign it.
+      if test -n "$prev"; then
+       case $prev in
+       output)
+         func_append compile_command " @OUTPUT@"
+         func_append finalize_command " @OUTPUT@"
+         ;;
+       esac
+
+       case $prev in
+       dlfiles|dlprefiles)
+         if test "$preload" = no; then
+           # Add the symbol object into the linking commands.
+           func_append compile_command " @SYMFILE@"
+           func_append finalize_command " @SYMFILE@"
+           preload=yes
+         fi
+         case $arg in
+         *.la | *.lo) ;;  # We handle these cases below.
+         force)
+           if test "$dlself" = no; then
+             dlself=needless
+             export_dynamic=yes
+           fi
+           prev=
+           continue
+           ;;
+         self)
+           if test "$prev" = dlprefiles; then
+             dlself=yes
+           elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then
+             dlself=yes
+           else
+             dlself=needless
+             export_dynamic=yes
+           fi
+           prev=
+           continue
+           ;;
+         *)
+           if test "$prev" = dlfiles; then
+             dlfiles="$dlfiles $arg"
+           else
+             dlprefiles="$dlprefiles $arg"
+           fi
+           prev=
+           continue
+           ;;
+         esac
+         ;;
+       expsyms)
+         export_symbols="$arg"
+         test -f "$arg" \
+           || func_fatal_error "symbol file \`$arg' does not exist"
+         prev=
+         continue
+         ;;
+       expsyms_regex)
+         export_symbols_regex="$arg"
+         prev=
+         continue
+         ;;
+       framework)
+         case $host in
+           *-*-darwin*)
+             case "$deplibs " in
+               *" $qarg.ltframework "*) ;;
+               *) deplibs="$deplibs $qarg.ltframework" # this is fixed later
+                  ;;
+             esac
+             ;;
+         esac
+         prev=
+         continue
+         ;;
+       inst_prefix)
+         inst_prefix_dir="$arg"
+         prev=
+         continue
+         ;;
+       objectlist)
+         if test -f "$arg"; then
+           save_arg=$arg
+           moreargs=
+           for fil in `cat "$save_arg"`
+           do
+#            moreargs="$moreargs $fil"
+             arg=$fil
+             # A libtool-controlled object.
+
+             # Check to see that this really is a libtool object.
+             if func_lalib_unsafe_p "$arg"; then
+               pic_object=
+               non_pic_object=
+
+               # Read the .lo file
+               func_source "$arg"
+
+               if test -z "$pic_object" ||
+                  test -z "$non_pic_object" ||
+                  test "$pic_object" = none &&
+                  test "$non_pic_object" = none; then
+                 func_fatal_error "cannot find name of object for \`$arg'"
+               fi
+
+               # Extract subdirectory from the argument.
+               func_dirname "$arg" "/" ""
+               xdir="$func_dirname_result"
+
+               if test "$pic_object" != none; then
+                 # Prepend the subdirectory the object is found in.
+                 pic_object="$xdir$pic_object"
+
+                 if test "$prev" = dlfiles; then
+                   if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then
+                     dlfiles="$dlfiles $pic_object"
+                     prev=
+                     continue
+                   else
+                     # If libtool objects are unsupported, then we need to preload.
+                     prev=dlprefiles
+                   fi
+                 fi
+
+                 # CHECK ME:  I think I busted this.  -Ossama
+                 if test "$prev" = dlprefiles; then
+                   # Preload the old-style object.
+                   dlprefiles="$dlprefiles $pic_object"
+                   prev=
+                 fi
+
+                 # A PIC object.
+                 func_append libobjs " $pic_object"
+                 arg="$pic_object"
+               fi
+
+               # Non-PIC object.
+               if test "$non_pic_object" != none; then
+                 # Prepend the subdirectory the object is found in.
+                 non_pic_object="$xdir$non_pic_object"
+
+                 # A standard non-PIC object
+                 func_append non_pic_objects " $non_pic_object"
+                 if test -z "$pic_object" || test "$pic_object" = none ; then
+                   arg="$non_pic_object"
+                 fi
+               else
+                 # If the PIC object exists, use it instead.
+                 # $xdir was prepended to $pic_object above.
+                 non_pic_object="$pic_object"
+                 func_append non_pic_objects " $non_pic_object"
+               fi
+             else
+               # Only an error if not doing a dry-run.
+               if $opt_dry_run; then
+                 # Extract subdirectory from the argument.
+                 func_dirname "$arg" "/" ""
+                 xdir="$func_dirname_result"
+
+                 func_lo2o "$arg"
+                 pic_object=$xdir$objdir/$func_lo2o_result
+                 non_pic_object=$xdir$func_lo2o_result
+                 func_append libobjs " $pic_object"
+                 func_append non_pic_objects " $non_pic_object"
+               else
+                 func_fatal_error "\`$arg' is not a valid libtool object"
+               fi
+             fi
+           done
+         else
+           func_fatal_error "link input file \`$arg' does not exist"
+         fi
+         arg=$save_arg
+         prev=
+         continue
+         ;;
+       precious_regex)
+         precious_files_regex="$arg"
+         prev=
+         continue
+         ;;
+       release)
+         release="-$arg"
+         prev=
+         continue
+         ;;
+       rpath | xrpath)
+         # We need an absolute path.
+         case $arg in
+         [\\/]* | [A-Za-z]:[\\/]*) ;;
+         *)
+           func_fatal_error "only absolute run-paths are allowed"
+           ;;
+         esac
+         if test "$prev" = rpath; then
+           case "$rpath " in
+           *" $arg "*) ;;
+           *) rpath="$rpath $arg" ;;
+           esac
+         else
+           case "$xrpath " in
+           *" $arg "*) ;;
+           *) xrpath="$xrpath $arg" ;;
+           esac
+         fi
+         prev=
+         continue
+         ;;
+       shrext)
+         shrext_cmds="$arg"
+         prev=
+         continue
+         ;;
+       weak)
+         weak_libs="$weak_libs $arg"
+         prev=
+         continue
+         ;;
+       xcclinker)
+         linker_flags="$linker_flags $qarg"
+         compiler_flags="$compiler_flags $qarg"
+         prev=
+         func_append compile_command " $qarg"
+         func_append finalize_command " $qarg"
+         continue
+         ;;
+       xcompiler)
+         compiler_flags="$compiler_flags $qarg"
+         prev=
+         func_append compile_command " $qarg"
+         func_append finalize_command " $qarg"
+         continue
+         ;;
+       xlinker)
+         linker_flags="$linker_flags $qarg"
+         compiler_flags="$compiler_flags $wl$qarg"
+         prev=
+         func_append compile_command " $wl$qarg"
+         func_append finalize_command " $wl$qarg"
+         continue
+         ;;
+       *)
+         eval "$prev=\"\$arg\""
+         prev=
+         continue
+         ;;
+       esac
+      fi # test -n "$prev"
+
+      prevarg="$arg"
+
+      case $arg in
+      -all-static)
+       if test -n "$link_static_flag"; then
+         # See comment for -static flag below, for more details.
+         func_append compile_command " $link_static_flag"
+         func_append finalize_command " $link_static_flag"
+       fi
+       continue
+       ;;
+
+      -allow-undefined)
+       # FIXME: remove this flag sometime in the future.
+       func_fatal_error "\`-allow-undefined' must not be used because it is the default"
+       ;;
+
+      -avoid-version)
+       avoid_version=yes
+       continue
+       ;;
+
+      -dlopen)
+       prev=dlfiles
+       continue
+       ;;
+
+      -dlpreopen)
+       prev=dlprefiles
+       continue
+       ;;
+
+      -export-dynamic)
+       export_dynamic=yes
+       continue
+       ;;
+
+      -export-symbols | -export-symbols-regex)
+       if test -n "$export_symbols" || test -n "$export_symbols_regex"; then
+         func_fatal_error "more than one -exported-symbols argument is not allowed"
+       fi
+       if test "X$arg" = "X-export-symbols"; then
+         prev=expsyms
+       else
+         prev=expsyms_regex
+       fi
+       continue
+       ;;
+
+      -framework)
+       prev=framework
+       continue
+       ;;
+
+      -inst-prefix-dir)
+       prev=inst_prefix
+       continue
+       ;;
+
+      # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:*
+      # so, if we see these flags be careful not to treat them like -L
+      -L[A-Z][A-Z]*:*)
+       case $with_gcc/$host in
+       no/*-*-irix* | /*-*-irix*)
+         func_append compile_command " $arg"
+         func_append finalize_command " $arg"
+         ;;
+       esac
+       continue
+       ;;
+
+      -L*)
+       func_stripname '-L' '' "$arg"
+       dir=$func_stripname_result
+       if test -z "$dir"; then
+         if test "$#" -gt 0; then
+           func_fatal_error "require no space between \`-L' and \`$1'"
+         else
+           func_fatal_error "need path for \`-L' option"
+         fi
+       fi
+       # We need an absolute path.
+       case $dir in
+       [\\/]* | [A-Za-z]:[\\/]*) ;;
+       *)
+         absdir=`cd "$dir" && pwd`
+         test -z "$absdir" && \
+           func_fatal_error "cannot determine absolute directory name of \`$dir'"
+         dir="$absdir"
+         ;;
+       esac
+       case "$deplibs " in
+       *" -L$dir "*) ;;
+       *)
+         deplibs="$deplibs -L$dir"
+         lib_search_path="$lib_search_path $dir"
+         ;;
+       esac
+       case $host in
+       *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
+         testbindir=`$ECHO "X$dir" | $Xsed -e 's*/lib$*/bin*'`
+         case :$dllsearchpath: in
+         *":$dir:"*) ;;
+         ::) dllsearchpath=$dir;;
+         *) dllsearchpath="$dllsearchpath:$dir";;
+         esac
+         case :$dllsearchpath: in
+         *":$testbindir:"*) ;;
+         ::) dllsearchpath=$testbindir;;
+         *) dllsearchpath="$dllsearchpath:$testbindir";;
+         esac
+         ;;
+       esac
+       continue
+       ;;
+
+      -l*)
+       if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then
+         case $host in
+         *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc*)
+           # These systems don't actually have a C or math library (as such)
+           continue
+           ;;
+         *-*-os2*)
+           # These systems don't actually have a C library (as such)
+           test "X$arg" = "X-lc" && continue
+           ;;
+         *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
+           # Do not include libc due to us having libc/libc_r.
+           test "X$arg" = "X-lc" && continue
+           ;;
+         *-*-rhapsody* | *-*-darwin1.[012])
+           # Rhapsody C and math libraries are in the System framework
+           deplibs="$deplibs System.ltframework"
+           continue
+           ;;
+         *-*-sco3.2v5* | *-*-sco5v6*)
+           # Causes problems with __ctype
+           test "X$arg" = "X-lc" && continue
+           ;;
+         *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*)
+           # Compiler inserts libc in the correct place for threads to work
+           test "X$arg" = "X-lc" && continue
+           ;;
+         esac
+       elif test "X$arg" = "X-lc_r"; then
+        case $host in
+        *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
+          # Do not include libc_r directly, use -pthread flag.
+          continue
+          ;;
+        esac
+       fi
+       deplibs="$deplibs $arg"
+       continue
+       ;;
+
+      -module)
+       module=yes
+       continue
+       ;;
+
+      # Tru64 UNIX uses -model [arg] to determine the layout of C++
+      # classes, name mangling, and exception handling.
+      # Darwin uses the -arch flag to determine output architecture.
+      -model|-arch|-isysroot)
+       compiler_flags="$compiler_flags $arg"
+       func_append compile_command " $arg"
+       func_append finalize_command " $arg"
+       prev=xcompiler
+       continue
+       ;;
+
+      -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads)
+       compiler_flags="$compiler_flags $arg"
+       func_append compile_command " $arg"
+       func_append finalize_command " $arg"
+       case "$new_inherited_linker_flags " in
+           *" $arg "*) ;;
+           * ) new_inherited_linker_flags="$new_inherited_linker_flags $arg" ;;
+       esac
+       continue
+       ;;
+
+      -multi_module)
+       single_module="${wl}-multi_module"
+       continue
+       ;;
+
+      -no-fast-install)
+       fast_install=no
+       continue
+       ;;
+
+      -no-install)
+       case $host in
+       *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*)
+         # The PATH hackery in wrapper scripts is required on Windows
+         # and Darwin in order for the loader to find any dlls it needs.
+         func_warning "\`-no-install' is ignored for $host"
+         func_warning "assuming \`-no-fast-install' instead"
+         fast_install=no
+         ;;
+       *) no_install=yes ;;
+       esac
+       continue
+       ;;
+
+      -no-undefined)
+       allow_undefined=no
+       continue
+       ;;
+
+      -objectlist)
+       prev=objectlist
+       continue
+       ;;
+
+      -o) prev=output ;;
+
+      -precious-files-regex)
+       prev=precious_regex
+       continue
+       ;;
+
+      -release)
+       prev=release
+       continue
+       ;;
+
+      -rpath)
+       prev=rpath
+       continue
+       ;;
+
+      -R)
+       prev=xrpath
+       continue
+       ;;
+
+      -R*)
+       func_stripname '-R' '' "$arg"
+       dir=$func_stripname_result
+       # We need an absolute path.
+       case $dir in
+       [\\/]* | [A-Za-z]:[\\/]*) ;;
+       *)
+         func_fatal_error "only absolute run-paths are allowed"
+         ;;
+       esac
+       case "$xrpath " in
+       *" $dir "*) ;;
+       *) xrpath="$xrpath $dir" ;;
+       esac
+       continue
+       ;;
+
+      -shared)
+       # The effects of -shared are defined in a previous loop.
+       continue
+       ;;
+
+      -shrext)
+       prev=shrext
+       continue
+       ;;
+
+      -static | -static-libtool-libs)
+       # The effects of -static are defined in a previous loop.
+       # We used to do the same as -all-static on platforms that
+       # didn't have a PIC flag, but the assumption that the effects
+       # would be equivalent was wrong.  It would break on at least
+       # Digital Unix and AIX.
+       continue
+       ;;
+
+      -thread-safe)
+       thread_safe=yes
+       continue
+       ;;
+
+      -version-info)
+       prev=vinfo
+       continue
+       ;;
+
+      -version-number)
+       prev=vinfo
+       vinfo_number=yes
+       continue
+       ;;
+
+      -weak)
+        prev=weak
+       continue
+       ;;
+
+      -Wc,*)
+       func_stripname '-Wc,' '' "$arg"
+       args=$func_stripname_result
+       arg=
+       save_ifs="$IFS"; IFS=','
+       for flag in $args; do
+         IFS="$save_ifs"
+          func_quote_for_eval "$flag"
+         arg="$arg $wl$func_quote_for_eval_result"
+         compiler_flags="$compiler_flags $func_quote_for_eval_result"
+       done
+       IFS="$save_ifs"
+       func_stripname ' ' '' "$arg"
+       arg=$func_stripname_result
+       ;;
+
+      -Wl,*)
+       func_stripname '-Wl,' '' "$arg"
+       args=$func_stripname_result
+       arg=
+       save_ifs="$IFS"; IFS=','
+       for flag in $args; do
+         IFS="$save_ifs"
+          func_quote_for_eval "$flag"
+         arg="$arg $wl$func_quote_for_eval_result"
+         compiler_flags="$compiler_flags $wl$func_quote_for_eval_result"
+         linker_flags="$linker_flags $func_quote_for_eval_result"
+       done
+       IFS="$save_ifs"
+       func_stripname ' ' '' "$arg"
+       arg=$func_stripname_result
+       ;;
+
+      -Xcompiler)
+       prev=xcompiler
+       continue
+       ;;
+
+      -Xlinker)
+       prev=xlinker
+       continue
+       ;;
+
+      -XCClinker)
+       prev=xcclinker
+       continue
+       ;;
+
+      # -msg_* for osf cc
+      -msg_*)
+       func_quote_for_eval "$arg"
+       arg="$func_quote_for_eval_result"
+       ;;
+
+      # -64, -mips[0-9] enable 64-bit mode on the SGI compiler
+      # -r[0-9][0-9]* specifies the processor on the SGI compiler
+      # -xarch=*, -xtarget=* enable 64-bit mode on the Sun compiler
+      # +DA*, +DD* enable 64-bit mode on the HP compiler
+      # -q* pass through compiler args for the IBM compiler
+      # -m*, -t[45]*, -txscale* pass through architecture-specific
+      # compiler args for GCC
+      # -F/path gives path to uninstalled frameworks, gcc on darwin
+      # -p, -pg, --coverage, -fprofile-* pass through profiling flag for GCC
+      # @file GCC response files
+      -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \
+      -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*)
+        func_quote_for_eval "$arg"
+       arg="$func_quote_for_eval_result"
+        func_append compile_command " $arg"
+        func_append finalize_command " $arg"
+        compiler_flags="$compiler_flags $arg"
+        continue
+        ;;
+
+      # Some other compiler flag.
+      -* | +*)
+        func_quote_for_eval "$arg"
+       arg="$func_quote_for_eval_result"
+       ;;
+
+      *.$objext)
+       # A standard object.
+       objs="$objs $arg"
+       ;;
+
+      *.lo)
+       # A libtool-controlled object.
+
+       # Check to see that this really is a libtool object.
+       if func_lalib_unsafe_p "$arg"; then
+         pic_object=
+         non_pic_object=
+
+         # Read the .lo file
+         func_source "$arg"
+
+         if test -z "$pic_object" ||
+            test -z "$non_pic_object" ||
+            test "$pic_object" = none &&
+            test "$non_pic_object" = none; then
+           func_fatal_error "cannot find name of object for \`$arg'"
+         fi
+
+         # Extract subdirectory from the argument.
+         func_dirname "$arg" "/" ""
+         xdir="$func_dirname_result"
+
+         if test "$pic_object" != none; then
+           # Prepend the subdirectory the object is found in.
+           pic_object="$xdir$pic_object"
+
+           if test "$prev" = dlfiles; then
+             if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then
+               dlfiles="$dlfiles $pic_object"
+               prev=
+               continue
+             else
+               # If libtool objects are unsupported, then we need to preload.
+               prev=dlprefiles
+             fi
+           fi
+
+           # CHECK ME:  I think I busted this.  -Ossama
+           if test "$prev" = dlprefiles; then
+             # Preload the old-style object.
+             dlprefiles="$dlprefiles $pic_object"
+             prev=
+           fi
+
+           # A PIC object.
+           func_append libobjs " $pic_object"
+           arg="$pic_object"
+         fi
+
+         # Non-PIC object.
+         if test "$non_pic_object" != none; then
+           # Prepend the subdirectory the object is found in.
+           non_pic_object="$xdir$non_pic_object"
+
+           # A standard non-PIC object
+           func_append non_pic_objects " $non_pic_object"
+           if test -z "$pic_object" || test "$pic_object" = none ; then
+             arg="$non_pic_object"
+           fi
+         else
+           # If the PIC object exists, use it instead.
+           # $xdir was prepended to $pic_object above.
+           non_pic_object="$pic_object"
+           func_append non_pic_objects " $non_pic_object"
+         fi
+       else
+         # Only an error if not doing a dry-run.
+         if $opt_dry_run; then
+           # Extract subdirectory from the argument.
+           func_dirname "$arg" "/" ""
+           xdir="$func_dirname_result"
+
+           func_lo2o "$arg"
+           pic_object=$xdir$objdir/$func_lo2o_result
+           non_pic_object=$xdir$func_lo2o_result
+           func_append libobjs " $pic_object"
+           func_append non_pic_objects " $non_pic_object"
+         else
+           func_fatal_error "\`$arg' is not a valid libtool object"
+         fi
+       fi
+       ;;
+
+      *.$libext)
+       # An archive.
+       deplibs="$deplibs $arg"
+       old_deplibs="$old_deplibs $arg"
+       continue
+       ;;
+
+      *.la)
+       # A libtool-controlled library.
+
+       if test "$prev" = dlfiles; then
+         # This library was specified with -dlopen.
+         dlfiles="$dlfiles $arg"
+         prev=
+       elif test "$prev" = dlprefiles; then
+         # The library was specified with -dlpreopen.
+         dlprefiles="$dlprefiles $arg"
+         prev=
+       else
+         deplibs="$deplibs $arg"
+       fi
+       continue
+       ;;
+
+      # Some other compiler argument.
+      *)
+       # Unknown arguments in both finalize_command and compile_command need
+       # to be aesthetically quoted because they are evaled later.
+       func_quote_for_eval "$arg"
+       arg="$func_quote_for_eval_result"
+       ;;
+      esac # arg
+
+      # Now actually substitute the argument into the commands.
+      if test -n "$arg"; then
+       func_append compile_command " $arg"
+       func_append finalize_command " $arg"
+      fi
+    done # argument parsing loop
+
+    test -n "$prev" && \
+      func_fatal_help "the \`$prevarg' option requires an argument"
+
+    if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then
+      eval arg=\"$export_dynamic_flag_spec\"
+      func_append compile_command " $arg"
+      func_append finalize_command " $arg"
+    fi
+
+    oldlibs=
+    # calculate the name of the file, without its directory
+    func_basename "$output"
+    outputname="$func_basename_result"
+    libobjs_save="$libobjs"
+
+    if test -n "$shlibpath_var"; then
+      # get the directories listed in $shlibpath_var
+      eval shlib_search_path=\`\$ECHO \"X\${$shlibpath_var}\" \| \$Xsed -e \'s/:/ /g\'\`
+    else
+      shlib_search_path=
+    fi
+    eval sys_lib_search_path=\"$sys_lib_search_path_spec\"
+    eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\"
+
+    func_dirname "$output" "/" ""
+    output_objdir="$func_dirname_result$objdir"
+    # Create the object directory.
+    func_mkdir_p "$output_objdir"
+
+    # Determine the type of output
+    case $output in
+    "")
+      func_fatal_help "you must specify an output file"
+      ;;
+    *.$libext) linkmode=oldlib ;;
+    *.lo | *.$objext) linkmode=obj ;;
+    *.la) linkmode=lib ;;
+    *) linkmode=prog ;; # Anything else should be a program.
+    esac
+
+    specialdeplibs=
+
+    libs=
+    # Find all interdependent deplibs by searching for libraries
+    # that are linked more than once (e.g. -la -lb -la)
+    for deplib in $deplibs; do
+      if $opt_duplicate_deps ; then
+       case "$libs " in
+       *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
+       esac
+      fi
+      libs="$libs $deplib"
+    done
+
+    if test "$linkmode" = lib; then
+      libs="$predeps $libs $compiler_lib_search_path $postdeps"
+
+      # Compute libraries that are listed more than once in $predeps
+      # $postdeps and mark them as special (i.e., whose duplicates are
+      # not to be eliminated).
+      pre_post_deps=
+      if $opt_duplicate_compiler_generated_deps; then
+       for pre_post_dep in $predeps $postdeps; do
+         case "$pre_post_deps " in
+         *" $pre_post_dep "*) specialdeplibs="$specialdeplibs $pre_post_deps" ;;
+         esac
+         pre_post_deps="$pre_post_deps $pre_post_dep"
+       done
+      fi
+      pre_post_deps=
+    fi
+
+    deplibs=
+    newdependency_libs=
+    newlib_search_path=
+    need_relink=no # whether we're linking any uninstalled libtool libraries
+    notinst_deplibs= # not-installed libtool libraries
+    notinst_path= # paths that contain not-installed libtool libraries
+
+    case $linkmode in
+    lib)
+       passes="conv dlpreopen link"
+       for file in $dlfiles $dlprefiles; do
+         case $file in
+         *.la) ;;
+         *)
+           func_fatal_help "libraries can \`-dlopen' only libtool libraries: $file"
+           ;;
+         esac
+       done
+       ;;
+    prog)
+       compile_deplibs=
+       finalize_deplibs=
+       alldeplibs=no
+       newdlfiles=
+       newdlprefiles=
+       passes="conv scan dlopen dlpreopen link"
+       ;;
+    *)  passes="conv"
+       ;;
+    esac
+
+    for pass in $passes; do
+      # The preopen pass in lib mode reverses $deplibs; put it back here
+      # so that -L comes before libs that need it for instance...
+      if test "$linkmode,$pass" = "lib,link"; then
+       ## FIXME: Find the place where the list is rebuilt in the wrong
+       ##        order, and fix it there properly
+        tmp_deplibs=
+       for deplib in $deplibs; do
+         tmp_deplibs="$deplib $tmp_deplibs"
+       done
+       deplibs="$tmp_deplibs"
+      fi
+
+      if test "$linkmode,$pass" = "lib,link" ||
+        test "$linkmode,$pass" = "prog,scan"; then
+       libs="$deplibs"
+       deplibs=
+      fi
+      if test "$linkmode" = prog; then
+       case $pass in
+       dlopen) libs="$dlfiles" ;;
+       dlpreopen) libs="$dlprefiles" ;;
+       link)
+         libs="$deplibs %DEPLIBS%"
+         test "X$link_all_deplibs" != Xno && libs="$libs $dependency_libs"
+         ;;
+       esac
+      fi
+      if test "$linkmode,$pass" = "lib,dlpreopen"; then
+       # Collect and forward deplibs of preopened libtool libs
+       for lib in $dlprefiles; do
+         # Ignore non-libtool-libs
+         dependency_libs=
+         case $lib in
+         *.la) func_source "$lib" ;;
+         esac
+
+         # Collect preopened libtool deplibs, except any this library
+         # has declared as weak libs
+         for deplib in $dependency_libs; do
+            deplib_base=`$ECHO "X$deplib" | $Xsed -e "$basename"`
+           case " $weak_libs " in
+           *" $deplib_base "*) ;;
+           *) deplibs="$deplibs $deplib" ;;
+           esac
+         done
+       done
+       libs="$dlprefiles"
+      fi
+      if test "$pass" = dlopen; then
+       # Collect dlpreopened libraries
+       save_deplibs="$deplibs"
+       deplibs=
+      fi
+
+      for deplib in $libs; do
+       lib=
+       found=no
+       case $deplib in
+       -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads)
+         if test "$linkmode,$pass" = "prog,link"; then
+           compile_deplibs="$deplib $compile_deplibs"
+           finalize_deplibs="$deplib $finalize_deplibs"
+         else
+           compiler_flags="$compiler_flags $deplib"
+           if test "$linkmode" = lib ; then
+               case "$new_inherited_linker_flags " in
+                   *" $deplib "*) ;;
+                   * ) new_inherited_linker_flags="$new_inherited_linker_flags $deplib" ;;
+               esac
+           fi
+         fi
+         continue
+         ;;
+       -l*)
+         if test "$linkmode" != lib && test "$linkmode" != prog; then
+           func_warning "\`-l' is ignored for archives/objects"
+           continue
+         fi
+         func_stripname '-l' '' "$deplib"
+         name=$func_stripname_result
+         if test "$linkmode" = lib; then
+           searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path"
+         else
+           searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path"
+         fi
+         for searchdir in $searchdirs; do
+           for search_ext in .la $std_shrext .so .a; do
+             # Search the libtool library
+             lib="$searchdir/lib${name}${search_ext}"
+             if test -f "$lib"; then
+               if test "$search_ext" = ".la"; then
+                 found=yes
+               else
+                 found=no
+               fi
+               break 2
+             fi
+           done
+         done
+         if test "$found" != yes; then
+           # deplib doesn't seem to be a libtool library
+           if test "$linkmode,$pass" = "prog,link"; then
+             compile_deplibs="$deplib $compile_deplibs"
+             finalize_deplibs="$deplib $finalize_deplibs"
+           else
+             deplibs="$deplib $deplibs"
+             test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs"
+           fi
+           continue
+         else # deplib is a libtool library
+           # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib,
+           # We need to do some special things here, and not later.
+           if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
+             case " $predeps $postdeps " in
+             *" $deplib "*)
+               if func_lalib_p "$lib"; then
+                 library_names=
+                 old_library=
+                 func_source "$lib"
+                 for l in $old_library $library_names; do
+                   ll="$l"
+                 done
+                 if test "X$ll" = "X$old_library" ; then # only static version available
+                   found=no
+                   func_dirname "$lib" "" "."
+                   ladir="$func_dirname_result"
+                   lib=$ladir/$old_library
+                   if test "$linkmode,$pass" = "prog,link"; then
+                     compile_deplibs="$deplib $compile_deplibs"
+                     finalize_deplibs="$deplib $finalize_deplibs"
+                   else
+                     deplibs="$deplib $deplibs"
+                     test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs"
+                   fi
+                   continue
+                 fi
+               fi
+               ;;
+             *) ;;
+             esac
+           fi
+         fi
+         ;; # -l
+       *.ltframework)
+         if test "$linkmode,$pass" = "prog,link"; then
+           compile_deplibs="$deplib $compile_deplibs"
+           finalize_deplibs="$deplib $finalize_deplibs"
+         else
+           deplibs="$deplib $deplibs"
+           if test "$linkmode" = lib ; then
+               case "$new_inherited_linker_flags " in
+                   *" $deplib "*) ;;
+                   * ) new_inherited_linker_flags="$new_inherited_linker_flags $deplib" ;;
+               esac
+           fi
+         fi
+         continue
+         ;;
+       -L*)
+         case $linkmode in
+         lib)
+           deplibs="$deplib $deplibs"
+           test "$pass" = conv && continue
+           newdependency_libs="$deplib $newdependency_libs"
+           func_stripname '-L' '' "$deplib"
+           newlib_search_path="$newlib_search_path $func_stripname_result"
+           ;;
+         prog)
+           if test "$pass" = conv; then
+             deplibs="$deplib $deplibs"
+             continue
+           fi
+           if test "$pass" = scan; then
+             deplibs="$deplib $deplibs"
+           else
+             compile_deplibs="$deplib $compile_deplibs"
+             finalize_deplibs="$deplib $finalize_deplibs"
+           fi
+           func_stripname '-L' '' "$deplib"
+           newlib_search_path="$newlib_search_path $func_stripname_result"
+           ;;
+         *)
+           func_warning "\`-L' is ignored for archives/objects"
+           ;;
+         esac # linkmode
+         continue
+         ;; # -L
+       -R*)
+         if test "$pass" = link; then
+           func_stripname '-R' '' "$deplib"
+           dir=$func_stripname_result
+           # Make sure the xrpath contains only unique directories.
+           case "$xrpath " in
+           *" $dir "*) ;;
+           *) xrpath="$xrpath $dir" ;;
+           esac
+         fi
+         deplibs="$deplib $deplibs"
+         continue
+         ;;
+       *.la) lib="$deplib" ;;
+       *.$libext)
+         if test "$pass" = conv; then
+           deplibs="$deplib $deplibs"
+           continue
+         fi
+         case $linkmode in
+         lib)
+           # Linking convenience modules into shared libraries is allowed,
+           # but linking other static libraries is non-portable.
+           case " $dlpreconveniencelibs " in
+           *" $deplib "*) ;;
+           *)
+             valid_a_lib=no
+             case $deplibs_check_method in
+               match_pattern*)
+                 set dummy $deplibs_check_method; shift
+                 match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
+                 if eval "\$ECHO \"X$deplib\"" 2>/dev/null | $Xsed -e 10q \
+                   | $EGREP "$match_pattern_regex" > /dev/null; then
+                   valid_a_lib=yes
+                 fi
+               ;;
+               pass_all)
+                 valid_a_lib=yes
+               ;;
+             esac
+             if test "$valid_a_lib" != yes; then
+               $ECHO
+               $ECHO "*** Warning: Trying to link with static lib archive $deplib."
+               $ECHO "*** I have the capability to make that library automatically link in when"
+               $ECHO "*** you link to this library.  But I can only do this if you have a"
+               $ECHO "*** shared version of the library, which you do not appear to have"
+               $ECHO "*** because the file extensions .$libext of this argument makes me believe"
+               $ECHO "*** that it is just a static archive that I should not use here."
+             else
+               $ECHO
+               $ECHO "*** Warning: Linking the shared library $output against the"
+               $ECHO "*** static library $deplib is not portable!"
+               deplibs="$deplib $deplibs"
+             fi
+             ;;
+           esac
+           continue
+           ;;
+         prog)
+           if test "$pass" != link; then
+             deplibs="$deplib $deplibs"
+           else
+             compile_deplibs="$deplib $compile_deplibs"
+             finalize_deplibs="$deplib $finalize_deplibs"
+           fi
+           continue
+           ;;
+         esac # linkmode
+         ;; # *.$libext
+       *.lo | *.$objext)
+         if test "$pass" = conv; then
+           deplibs="$deplib $deplibs"
+         elif test "$linkmode" = prog; then
+           if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then
+             # If there is no dlopen support or we're linking statically,
+             # we need to preload.
+             newdlprefiles="$newdlprefiles $deplib"
+             compile_deplibs="$deplib $compile_deplibs"
+             finalize_deplibs="$deplib $finalize_deplibs"
+           else
+             newdlfiles="$newdlfiles $deplib"
+           fi
+         fi
+         continue
+         ;;
+       %DEPLIBS%)
+         alldeplibs=yes
+         continue
+         ;;
+       esac # case $deplib
+
+       if test "$found" = yes || test -f "$lib"; then :
+       else
+         func_fatal_error "cannot find the library \`$lib' or unhandled argument \`$deplib'"
+       fi
+
+       # Check to see that this really is a libtool archive.
+       func_lalib_unsafe_p "$lib" \
+         || func_fatal_error "\`$lib' is not a valid libtool archive"
+
+       func_dirname "$lib" "" "."
+       ladir="$func_dirname_result"
+
+       dlname=
+       dlopen=
+       dlpreopen=
+       libdir=
+       library_names=
+       old_library=
+       inherited_linker_flags=
+       # If the library was installed with an old release of libtool,
+       # it will not redefine variables installed, or shouldnotlink
+       installed=yes
+       shouldnotlink=no
+       avoidtemprpath=
+
+
+       # Read the .la file
+       func_source "$lib"
+
+       # Convert "-framework foo" to "foo.ltframework"
+       if test -n "$inherited_linker_flags"; then
+         tmp_inherited_linker_flags=`$ECHO "X$inherited_linker_flags" | $Xsed -e 's/-framework \([^ $]*\)/\1.ltframework/g'`
+         for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do
+           case " $new_inherited_linker_flags " in
+             *" $tmp_inherited_linker_flag "*) ;;
+             *) new_inherited_linker_flags="$new_inherited_linker_flags $tmp_inherited_linker_flag";;
+           esac
+         done
+       fi
+       dependency_libs=`$ECHO "X $dependency_libs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'`
+       if test "$linkmode,$pass" = "lib,link" ||
+          test "$linkmode,$pass" = "prog,scan" ||
+          { test "$linkmode" != prog && test "$linkmode" != lib; }; then
+         test -n "$dlopen" && dlfiles="$dlfiles $dlopen"
+         test -n "$dlpreopen" && dlprefiles="$dlprefiles $dlpreopen"
+       fi
+
+       if test "$pass" = conv; then
+         # Only check for convenience libraries
+         deplibs="$lib $deplibs"
+         if test -z "$libdir"; then
+           if test -z "$old_library"; then
+             func_fatal_error "cannot find name of link library for \`$lib'"
+           fi
+           # It is a libtool convenience library, so add in its objects.
+           convenience="$convenience $ladir/$objdir/$old_library"
+           old_convenience="$old_convenience $ladir/$objdir/$old_library"
+           tmp_libs=
+           for deplib in $dependency_libs; do
+             deplibs="$deplib $deplibs"
+             if $opt_duplicate_deps ; then
+               case "$tmp_libs " in
+               *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
+               esac
+             fi
+             tmp_libs="$tmp_libs $deplib"
+           done
+         elif test "$linkmode" != prog && test "$linkmode" != lib; then
+           func_fatal_error "\`$lib' is not a convenience library"
+         fi
+         continue
+       fi # $pass = conv
+
+
+       # Get the name of the library we link against.
+       linklib=
+       for l in $old_library $library_names; do
+         linklib="$l"
+       done
+       if test -z "$linklib"; then
+         func_fatal_error "cannot find name of link library for \`$lib'"
+       fi
+
+       # This library was specified with -dlopen.
+       if test "$pass" = dlopen; then
+         if test -z "$libdir"; then
+           func_fatal_error "cannot -dlopen a convenience library: \`$lib'"
+         fi
+         if test -z "$dlname" ||
+            test "$dlopen_support" != yes ||
+            test "$build_libtool_libs" = no; then
+           # If there is no dlname, no dlopen support or we're linking
+           # statically, we need to preload.  We also need to preload any
+           # dependent libraries so libltdl's deplib preloader doesn't
+           # bomb out in the load deplibs phase.
+           dlprefiles="$dlprefiles $lib $dependency_libs"
+         else
+           newdlfiles="$newdlfiles $lib"
+         fi
+         continue
+       fi # $pass = dlopen
+
+       # We need an absolute path.
+       case $ladir in
+       [\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;;
+       *)
+         abs_ladir=`cd "$ladir" && pwd`
+         if test -z "$abs_ladir"; then
+           func_warning "cannot determine absolute directory name of \`$ladir'"
+           func_warning "passing it literally to the linker, although it might fail"
+           abs_ladir="$ladir"
+         fi
+         ;;
+       esac
+       func_basename "$lib"
+       laname="$func_basename_result"
+
+       # Find the relevant object directory and library name.
+       if test "X$installed" = Xyes; then
+         if test ! -f "$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then
+           func_warning "library \`$lib' was moved."
+           dir="$ladir"
+           absdir="$abs_ladir"
+           libdir="$abs_ladir"
+         else
+           dir="$libdir"
+           absdir="$libdir"
+         fi
+         test "X$hardcode_automatic" = Xyes && avoidtemprpath=yes
+       else
+         if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then
+           dir="$ladir"
+           absdir="$abs_ladir"
+           # Remove this search path later
+           notinst_path="$notinst_path $abs_ladir"
+         else
+           dir="$ladir/$objdir"
+           absdir="$abs_ladir/$objdir"
+           # Remove this search path later
+           notinst_path="$notinst_path $abs_ladir"
+         fi
+       fi # $installed = yes
+       func_stripname 'lib' '.la' "$laname"
+       name=$func_stripname_result
+
+       # This library was specified with -dlpreopen.
+       if test "$pass" = dlpreopen; then
+         if test -z "$libdir" && test "$linkmode" = prog; then
+           func_fatal_error "only libraries may -dlpreopen a convenience library: \`$lib'"
+         fi
+         # Prefer using a static library (so that no silly _DYNAMIC symbols
+         # are required to link).
+         if test -n "$old_library"; then
+           newdlprefiles="$newdlprefiles $dir/$old_library"
+           # Keep a list of preopened convenience libraries to check
+           # that they are being used correctly in the link pass.
+           test -z "$libdir" && \
+               dlpreconveniencelibs="$dlpreconveniencelibs $dir/$old_library"
+         # Otherwise, use the dlname, so that lt_dlopen finds it.
+         elif test -n "$dlname"; then
+           newdlprefiles="$newdlprefiles $dir/$dlname"
+         else
+           newdlprefiles="$newdlprefiles $dir/$linklib"
+         fi
+       fi # $pass = dlpreopen
+
+       if test -z "$libdir"; then
+         # Link the convenience library
+         if test "$linkmode" = lib; then
+           deplibs="$dir/$old_library $deplibs"
+         elif test "$linkmode,$pass" = "prog,link"; then
+           compile_deplibs="$dir/$old_library $compile_deplibs"
+           finalize_deplibs="$dir/$old_library $finalize_deplibs"
+         else
+           deplibs="$lib $deplibs" # used for prog,scan pass
+         fi
+         continue
+       fi
+
+
+       if test "$linkmode" = prog && test "$pass" != link; then
+         newlib_search_path="$newlib_search_path $ladir"
+         deplibs="$lib $deplibs"
+
+         linkalldeplibs=no
+         if test "$link_all_deplibs" != no || test -z "$library_names" ||
+            test "$build_libtool_libs" = no; then
+           linkalldeplibs=yes
+         fi
+
+         tmp_libs=
+         for deplib in $dependency_libs; do
+           case $deplib in
+           -L*) func_stripname '-L' '' "$deplib"
+                newlib_search_path="$newlib_search_path $func_stripname_result"
+                ;;
+           esac
+           # Need to link against all dependency_libs?
+           if test "$linkalldeplibs" = yes; then
+             deplibs="$deplib $deplibs"
+           else
+             # Need to hardcode shared library paths
+             # or/and link against static libraries
+             newdependency_libs="$deplib $newdependency_libs"
+           fi
+           if $opt_duplicate_deps ; then
+             case "$tmp_libs " in
+             *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
+             esac
+           fi
+           tmp_libs="$tmp_libs $deplib"
+         done # for deplib
+         continue
+       fi # $linkmode = prog...
+
+       if test "$linkmode,$pass" = "prog,link"; then
+         if test -n "$library_names" &&
+            { { test "$prefer_static_libs" = no ||
+                test "$prefer_static_libs,$installed" = "built,yes"; } ||
+              test -z "$old_library"; }; then
+           # We need to hardcode the library path
+           if test -n "$shlibpath_var" && test -z "$avoidtemprpath" ; then
+             # Make sure the rpath contains only unique directories.
+             case "$temp_rpath:" in
+             *"$absdir:"*) ;;
+             *) temp_rpath="$temp_rpath$absdir:" ;;
+             esac
+           fi
+
+           # Hardcode the library path.
+           # Skip directories that are in the system default run-time
+           # search path.
+           case " $sys_lib_dlsearch_path " in
+           *" $absdir "*) ;;
+           *)
+             case "$compile_rpath " in
+             *" $absdir "*) ;;
+             *) compile_rpath="$compile_rpath $absdir"
+             esac
+             ;;
+           esac
+           case " $sys_lib_dlsearch_path " in
+           *" $libdir "*) ;;
+           *)
+             case "$finalize_rpath " in
+             *" $libdir "*) ;;
+             *) finalize_rpath="$finalize_rpath $libdir"
+             esac
+             ;;
+           esac
+         fi # $linkmode,$pass = prog,link...
+
+         if test "$alldeplibs" = yes &&
+            { test "$deplibs_check_method" = pass_all ||
+              { test "$build_libtool_libs" = yes &&
+                test -n "$library_names"; }; }; then
+           # We only need to search for static libraries
+           continue
+         fi
+       fi
+
+       link_static=no # Whether the deplib will be linked statically
+       use_static_libs=$prefer_static_libs
+       if test "$use_static_libs" = built && test "$installed" = yes; then
+         use_static_libs=no
+       fi
+       if test -n "$library_names" &&
+          { test "$use_static_libs" = no || test -z "$old_library"; }; then
+         case $host in
+         *cygwin* | *mingw* | *cegcc*)
+             # No point in relinking DLLs because paths are not encoded
+             notinst_deplibs="$notinst_deplibs $lib"
+             need_relink=no
+           ;;
+         *)
+           if test "$installed" = no; then
+             notinst_deplibs="$notinst_deplibs $lib"
+             need_relink=yes
+           fi
+           ;;
+         esac
+         # This is a shared library
+
+         # Warn about portability, can't link against -module's on some
+         # systems (darwin).  Don't bleat about dlopened modules though!
+         dlopenmodule=""
+         for dlpremoduletest in $dlprefiles; do
+           if test "X$dlpremoduletest" = "X$lib"; then
+             dlopenmodule="$dlpremoduletest"
+             break
+           fi
+         done
+         if test -z "$dlopenmodule" && test "$shouldnotlink" = yes && test "$pass" = link; then
+           $ECHO
+           if test "$linkmode" = prog; then
+             $ECHO "*** Warning: Linking the executable $output against the loadable module"
+           else
+             $ECHO "*** Warning: Linking the shared library $output against the loadable module"
+           fi
+           $ECHO "*** $linklib is not portable!"
+         fi
+         if test "$linkmode" = lib &&
+            test "$hardcode_into_libs" = yes; then
+           # Hardcode the library path.
+           # Skip directories that are in the system default run-time
+           # search path.
+           case " $sys_lib_dlsearch_path " in
+           *" $absdir "*) ;;
+           *)
+             case "$compile_rpath " in
+             *" $absdir "*) ;;
+             *) compile_rpath="$compile_rpath $absdir"
+             esac
+             ;;
+           esac
+           case " $sys_lib_dlsearch_path " in
+           *" $libdir "*) ;;
+           *)
+             case "$finalize_rpath " in
+             *" $libdir "*) ;;
+             *) finalize_rpath="$finalize_rpath $libdir"
+             esac
+             ;;
+           esac
+         fi
+
+         if test -n "$old_archive_from_expsyms_cmds"; then
+           # figure out the soname
+           set dummy $library_names
+           shift
+           realname="$1"
+           shift
+           libname=`eval "\\$ECHO \"$libname_spec\""`
+           # use dlname if we got it. it's perfectly good, no?
+           if test -n "$dlname"; then
+             soname="$dlname"
+           elif test -n "$soname_spec"; then
+             # bleh windows
+             case $host in
+             *cygwin* | mingw* | *cegcc*)
+               func_arith $current - $age
+               major=$func_arith_result
+               versuffix="-$major"
+               ;;
+             esac
+             eval soname=\"$soname_spec\"
+           else
+             soname="$realname"
+           fi
+
+           # Make a new name for the extract_expsyms_cmds to use
+           soroot="$soname"
+           func_basename "$soroot"
+           soname="$func_basename_result"
+           func_stripname 'lib' '.dll' "$soname"
+           newlib=libimp-$func_stripname_result.a
+
+           # If the library has no export list, then create one now
+           if test -f "$output_objdir/$soname-def"; then :
+           else
+             func_verbose "extracting exported symbol list from \`$soname'"
+             func_execute_cmds "$extract_expsyms_cmds" 'exit $?'
+           fi
+
+           # Create $newlib
+           if test -f "$output_objdir/$newlib"; then :; else
+             func_verbose "generating import library for \`$soname'"
+             func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?'
+           fi
+           # make sure the library variables are pointing to the new library
+           dir=$output_objdir
+           linklib=$newlib
+         fi # test -n "$old_archive_from_expsyms_cmds"
+
+         if test "$linkmode" = prog || test "$mode" != relink; then
+           add_shlibpath=
+           add_dir=
+           add=
+           lib_linked=yes
+           case $hardcode_action in
+           immediate | unsupported)
+             if test "$hardcode_direct" = no; then
+               add="$dir/$linklib"
+               case $host in
+                 *-*-sco3.2v5.0.[024]*) add_dir="-L$dir" ;;
+                 *-*-sysv4*uw2*) add_dir="-L$dir" ;;
+                 *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \
+                   *-*-unixware7*) add_dir="-L$dir" ;;
+                 *-*-darwin* )
+                   # if the lib is a (non-dlopened) module then we can not
+                   # link against it, someone is ignoring the earlier warnings
+                   if /usr/bin/file -L $add 2> /dev/null |
+                        $GREP ": [^:]* bundle" >/dev/null ; then
+                     if test "X$dlopenmodule" != "X$lib"; then
+                       $ECHO "*** Warning: lib $linklib is a module, not a shared library"
+                       if test -z "$old_library" ; then
+                         $ECHO
+                         $ECHO "*** And there doesn't seem to be a static archive available"
+                         $ECHO "*** The link will probably fail, sorry"
+                       else
+                         add="$dir/$old_library"
+                       fi
+                     elif test -n "$old_library"; then
+                       add="$dir/$old_library"
+                     fi
+                   fi
+               esac
+             elif test "$hardcode_minus_L" = no; then
+               case $host in
+               *-*-sunos*) add_shlibpath="$dir" ;;
+               esac
+               add_dir="-L$dir"
+               add="-l$name"
+             elif test "$hardcode_shlibpath_var" = no; then
+               add_shlibpath="$dir"
+               add="-l$name"
+             else
+               lib_linked=no
+             fi
+             ;;
+           relink)
+             if test "$hardcode_direct" = yes &&
+                test "$hardcode_direct_absolute" = no; then
+               add="$dir/$linklib"
+             elif test "$hardcode_minus_L" = yes; then
+               add_dir="-L$dir"
+               # Try looking first in the location we're being installed to.
+               if test -n "$inst_prefix_dir"; then
+                 case $libdir in
+                   [\\/]*)
+                     add_dir="$add_dir -L$inst_prefix_dir$libdir"
+                     ;;
+                 esac
+               fi
+               add="-l$name"
+             elif test "$hardcode_shlibpath_var" = yes; then
+               add_shlibpath="$dir"
+               add="-l$name"
+             else
+               lib_linked=no
+             fi
+             ;;
+           *) lib_linked=no ;;
+           esac
+
+           if test "$lib_linked" != yes; then
+             func_fatal_configuration "unsupported hardcode properties"
+           fi
+
+           if test -n "$add_shlibpath"; then
+             case :$compile_shlibpath: in
+             *":$add_shlibpath:"*) ;;
+             *) compile_shlibpath="$compile_shlibpath$add_shlibpath:" ;;
+             esac
+           fi
+           if test "$linkmode" = prog; then
+             test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs"
+             test -n "$add" && compile_deplibs="$add $compile_deplibs"
+           else
+             test -n "$add_dir" && deplibs="$add_dir $deplibs"
+             test -n "$add" && deplibs="$add $deplibs"
+             if test "$hardcode_direct" != yes &&
+                test "$hardcode_minus_L" != yes &&
+                test "$hardcode_shlibpath_var" = yes; then
+               case :$finalize_shlibpath: in
+               *":$libdir:"*) ;;
+               *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;;
+               esac
+             fi
+           fi
+         fi
+
+         if test "$linkmode" = prog || test "$mode" = relink; then
+           add_shlibpath=
+           add_dir=
+           add=
+           # Finalize command for both is simple: just hardcode it.
+           if test "$hardcode_direct" = yes &&
+              test "$hardcode_direct_absolute" = no; then
+             add="$libdir/$linklib"
+           elif test "$hardcode_minus_L" = yes; then
+             add_dir="-L$libdir"
+             add="-l$name"
+           elif test "$hardcode_shlibpath_var" = yes; then
+             case :$finalize_shlibpath: in
+             *":$libdir:"*) ;;
+             *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;;
+             esac
+             add="-l$name"
+           elif test "$hardcode_automatic" = yes; then
+             if test -n "$inst_prefix_dir" &&
+                test -f "$inst_prefix_dir$libdir/$linklib" ; then
+               add="$inst_prefix_dir$libdir/$linklib"
+             else
+               add="$libdir/$linklib"
+             fi
+           else
+             # We cannot seem to hardcode it, guess we'll fake it.
+             add_dir="-L$libdir"
+             # Try looking first in the location we're being installed to.
+             if test -n "$inst_prefix_dir"; then
+               case $libdir in
+                 [\\/]*)
+                   add_dir="$add_dir -L$inst_prefix_dir$libdir"
+                   ;;
+               esac
+             fi
+             add="-l$name"
+           fi
+
+           if test "$linkmode" = prog; then
+             test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs"
+             test -n "$add" && finalize_deplibs="$add $finalize_deplibs"
+           else
+             test -n "$add_dir" && deplibs="$add_dir $deplibs"
+             test -n "$add" && deplibs="$add $deplibs"
+           fi
+         fi
+       elif test "$linkmode" = prog; then
+         # Here we assume that one of hardcode_direct or hardcode_minus_L
+         # is not unsupported.  This is valid on all known static and
+         # shared platforms.
+         if test "$hardcode_direct" != unsupported; then
+           test -n "$old_library" && linklib="$old_library"
+           compile_deplibs="$dir/$linklib $compile_deplibs"
+           finalize_deplibs="$dir/$linklib $finalize_deplibs"
+         else
+           compile_deplibs="-l$name -L$dir $compile_deplibs"
+           finalize_deplibs="-l$name -L$dir $finalize_deplibs"
+         fi
+       elif test "$build_libtool_libs" = yes; then
+         # Not a shared library
+         if test "$deplibs_check_method" != pass_all; then
+           # We're trying link a shared library against a static one
+           # but the system doesn't support it.
+
+           # Just print a warning and add the library to dependency_libs so
+           # that the program can be linked against the static library.
+           $ECHO
+           $ECHO "*** Warning: This system can not link to static lib archive $lib."
+           $ECHO "*** I have the capability to make that library automatically link in when"
+           $ECHO "*** you link to this library.  But I can only do this if you have a"
+           $ECHO "*** shared version of the library, which you do not appear to have."
+           if test "$module" = yes; then
+             $ECHO "*** But as you try to build a module library, libtool will still create "
+             $ECHO "*** a static module, that should work as long as the dlopening application"
+             $ECHO "*** is linked with the -dlopen flag to resolve symbols at runtime."
+             if test -z "$global_symbol_pipe"; then
+               $ECHO
+               $ECHO "*** However, this would only work if libtool was able to extract symbol"
+               $ECHO "*** lists from a program, using \`nm' or equivalent, but libtool could"
+               $ECHO "*** not find such a program.  So, this module is probably useless."
+               $ECHO "*** \`nm' from GNU binutils and a full rebuild may help."
+             fi
+             if test "$build_old_libs" = no; then
+               build_libtool_libs=module
+               build_old_libs=yes
+             else
+               build_libtool_libs=no
+             fi
+           fi
+         else
+           deplibs="$dir/$old_library $deplibs"
+           link_static=yes
+         fi
+       fi # link shared/static library?
+
+       if test "$linkmode" = lib; then
+         if test -n "$dependency_libs" &&
+            { test "$hardcode_into_libs" != yes ||
+              test "$build_old_libs" = yes ||
+              test "$link_static" = yes; }; then
+           # Extract -R from dependency_libs
+           temp_deplibs=
+           for libdir in $dependency_libs; do
+             case $libdir in
+             -R*) func_stripname '-R' '' "$libdir"
+                  temp_xrpath=$func_stripname_result
+                  case " $xrpath " in
+                  *" $temp_xrpath "*) ;;
+                  *) xrpath="$xrpath $temp_xrpath";;
+                  esac;;
+             *) temp_deplibs="$temp_deplibs $libdir";;
+             esac
+           done
+           dependency_libs="$temp_deplibs"
+         fi
+
+         newlib_search_path="$newlib_search_path $absdir"
+         # Link against this library
+         test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs"
+         # ... and its dependency_libs
+         tmp_libs=
+         for deplib in $dependency_libs; do
+           newdependency_libs="$deplib $newdependency_libs"
+           if $opt_duplicate_deps ; then
+             case "$tmp_libs " in
+             *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
+             esac
+           fi
+           tmp_libs="$tmp_libs $deplib"
+         done
+
+         if test "$link_all_deplibs" != no; then
+           # Add the search paths of all dependency libraries
+           for deplib in $dependency_libs; do
+             path=
+             case $deplib in
+             -L*) path="$deplib" ;;
+             *.la)
+               func_dirname "$deplib" "" "."
+               dir="$func_dirname_result"
+               # We need an absolute path.
+               case $dir in
+               [\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;;
+               *)
+                 absdir=`cd "$dir" && pwd`
+                 if test -z "$absdir"; then
+                   func_warning "cannot determine absolute directory name of \`$dir'"
+                   absdir="$dir"
+                 fi
+                 ;;
+               esac
+               if $GREP "^installed=no" $deplib > /dev/null; then
+               case $host in
+               *-*-darwin*)
+                 depdepl=
+                 eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib`
+                 if test -n "$deplibrary_names" ; then
+                   for tmp in $deplibrary_names ; do
+                     depdepl=$tmp
+                   done
+                   if test -f "$absdir/$objdir/$depdepl" ; then
+                     depdepl="$absdir/$objdir/$depdepl"
+                     darwin_install_name=`${OTOOL} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'`
+                      if test -z "$darwin_install_name"; then
+                          darwin_install_name=`${OTOOL64} -L $depdepl  | awk '{if (NR == 2) {print $1;exit}}'`
+                      fi
+                     compiler_flags="$compiler_flags ${wl}-dylib_file ${wl}${darwin_install_name}:${depdepl}"
+                     linker_flags="$linker_flags -dylib_file ${darwin_install_name}:${depdepl}"
+                     path=
+                   fi
+                 fi
+                 ;;
+               *)
+                 path="-L$absdir/$objdir"
+                 ;;
+               esac
+               else
+                 eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
+                 test -z "$libdir" && \
+                   func_fatal_error "\`$deplib' is not a valid libtool archive"
+                 test "$absdir" != "$libdir" && \
+                   func_warning "\`$deplib' seems to be moved"
+
+                 path="-L$absdir"
+               fi
+               ;;
+             esac
+             case " $deplibs " in
+             *" $path "*) ;;
+             *) deplibs="$path $deplibs" ;;
+             esac
+           done
+         fi # link_all_deplibs != no
+       fi # linkmode = lib
+      done # for deplib in $libs
+      if test "$pass" = link; then
+       if test "$linkmode" = "prog"; then
+         compile_deplibs="$new_inherited_linker_flags $compile_deplibs"
+         finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs"
+       else
+         compiler_flags="$compiler_flags "`$ECHO "X $new_inherited_linker_flags" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'`
+       fi
+      fi
+      dependency_libs="$newdependency_libs"
+      if test "$pass" = dlpreopen; then
+       # Link the dlpreopened libraries before other libraries
+       for deplib in $save_deplibs; do
+         deplibs="$deplib $deplibs"
+       done
+      fi
+      if test "$pass" != dlopen; then
+       if test "$pass" != conv; then
+         # Make sure lib_search_path contains only unique directories.
+         lib_search_path=
+         for dir in $newlib_search_path; do
+           case "$lib_search_path " in
+           *" $dir "*) ;;
+           *) lib_search_path="$lib_search_path $dir" ;;
+           esac
+         done
+         newlib_search_path=
+       fi
+
+       if test "$linkmode,$pass" != "prog,link"; then
+         vars="deplibs"
+       else
+         vars="compile_deplibs finalize_deplibs"
+       fi
+       for var in $vars dependency_libs; do
+         # Add libraries to $var in reverse order
+         eval tmp_libs=\"\$$var\"
+         new_libs=
+         for deplib in $tmp_libs; do
+           # FIXME: Pedantically, this is the right thing to do, so
+           #        that some nasty dependency loop isn't accidentally
+           #        broken:
+           #new_libs="$deplib $new_libs"
+           # Pragmatically, this seems to cause very few problems in
+           # practice:
+           case $deplib in
+           -L*) new_libs="$deplib $new_libs" ;;
+           -R*) ;;
+           *)
+             # And here is the reason: when a library appears more
+             # than once as an explicit dependence of a library, or
+             # is implicitly linked in more than once by the
+             # compiler, it is considered special, and multiple
+             # occurrences thereof are not removed.  Compare this
+             # with having the same library being listed as a
+             # dependency of multiple other libraries: in this case,
+             # we know (pedantically, we assume) the library does not
+             # need to be listed more than once, so we keep only the
+             # last copy.  This is not always right, but it is rare
+             # enough that we require users that really mean to play
+             # such unportable linking tricks to link the library
+             # using -Wl,-lname, so that libtool does not consider it
+             # for duplicate removal.
+             case " $specialdeplibs " in
+             *" $deplib "*) new_libs="$deplib $new_libs" ;;
+             *)
+               case " $new_libs " in
+               *" $deplib "*) ;;
+               *) new_libs="$deplib $new_libs" ;;
+               esac
+               ;;
+             esac
+             ;;
+           esac
+         done
+         tmp_libs=
+         for deplib in $new_libs; do
+           case $deplib in
+           -L*)
+             case " $tmp_libs " in
+             *" $deplib "*) ;;
+             *) tmp_libs="$tmp_libs $deplib" ;;
+             esac
+             ;;
+           *) tmp_libs="$tmp_libs $deplib" ;;
+           esac
+         done
+         eval $var=\"$tmp_libs\"
+       done # for var
+      fi
+      # Last step: remove runtime libs from dependency_libs
+      # (they stay in deplibs)
+      tmp_libs=
+      for i in $dependency_libs ; do
+       case " $predeps $postdeps $compiler_lib_search_path " in
+       *" $i "*)
+         i=""
+         ;;
+       esac
+       if test -n "$i" ; then
+         tmp_libs="$tmp_libs $i"
+       fi
+      done
+      dependency_libs=$tmp_libs
+    done # for pass
+    if test "$linkmode" = prog; then
+      dlfiles="$newdlfiles"
+    fi
+    if test "$linkmode" = prog || test "$linkmode" = lib; then
+      dlprefiles="$newdlprefiles"
+    fi
+
+    case $linkmode in
+    oldlib)
+      if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
+       func_warning "\`-dlopen' is ignored for archives"
+      fi
+
+      case " $deplibs" in
+      *\ -l* | *\ -L*)
+       func_warning "\`-l' and \`-L' are ignored for archives" ;;
+      esac
+
+      test -n "$rpath" && \
+       func_warning "\`-rpath' is ignored for archives"
+
+      test -n "$xrpath" && \
+       func_warning "\`-R' is ignored for archives"
+
+      test -n "$vinfo" && \
+       func_warning "\`-version-info/-version-number' is ignored for archives"
+
+      test -n "$release" && \
+       func_warning "\`-release' is ignored for archives"
+
+      test -n "$export_symbols$export_symbols_regex" && \
+       func_warning "\`-export-symbols' is ignored for archives"
+
+      # Now set the variables for building old libraries.
+      build_libtool_libs=no
+      oldlibs="$output"
+      objs="$objs$old_deplibs"
+      ;;
+
+    lib)
+      # Make sure we only generate libraries of the form `libNAME.la'.
+      case $outputname in
+      lib*)
+       func_stripname 'lib' '.la' "$outputname"
+       name=$func_stripname_result
+       eval shared_ext=\"$shrext_cmds\"
+       eval libname=\"$libname_spec\"
+       ;;
+      *)
+       test "$module" = no && \
+         func_fatal_help "libtool library \`$output' must begin with \`lib'"
+
+       if test "$need_lib_prefix" != no; then
+         # Add the "lib" prefix for modules if required
+         func_stripname '' '.la' "$outputname"
+         name=$func_stripname_result
+         eval shared_ext=\"$shrext_cmds\"
+         eval libname=\"$libname_spec\"
+       else
+         func_stripname '' '.la' "$outputname"
+         libname=$func_stripname_result
+       fi
+       ;;
+      esac
+
+      if test -n "$objs"; then
+       if test "$deplibs_check_method" != pass_all; then
+         func_fatal_error "cannot build libtool library \`$output' from non-libtool objects on this host:$objs"
+       else
+         $ECHO
+         $ECHO "*** Warning: Linking the shared library $output against the non-libtool"
+         $ECHO "*** objects $objs is not portable!"
+         libobjs="$libobjs $objs"
+       fi
+      fi
+
+      test "$dlself" != no && \
+       func_warning "\`-dlopen self' is ignored for libtool libraries"
+
+      set dummy $rpath
+      shift
+      test "$#" -gt 1 && \
+       func_warning "ignoring multiple \`-rpath's for a libtool library"
+
+      install_libdir="$1"
+
+      oldlibs=
+      if test -z "$rpath"; then
+       if test "$build_libtool_libs" = yes; then
+         # Building a libtool convenience library.
+         # Some compilers have problems with a `.al' extension so
+         # convenience libraries should have the same extension an
+         # archive normally would.
+         oldlibs="$output_objdir/$libname.$libext $oldlibs"
+         build_libtool_libs=convenience
+         build_old_libs=yes
+       fi
+
+       test -n "$vinfo" && \
+         func_warning "\`-version-info/-version-number' is ignored for convenience libraries"
+
+       test -n "$release" && \
+         func_warning "\`-release' is ignored for convenience libraries"
+      else
+
+       # Parse the version information argument.
+       save_ifs="$IFS"; IFS=':'
+       set dummy $vinfo 0 0 0
+       shift
+       IFS="$save_ifs"
+
+       test -n "$7" && \
+         func_fatal_help "too many parameters to \`-version-info'"
+
+       # convert absolute version numbers to libtool ages
+       # this retains compatibility with .la files and attempts
+       # to make the code below a bit more comprehensible
+
+       case $vinfo_number in
+       yes)
+         number_major="$1"
+         number_minor="$2"
+         number_revision="$3"
+         #
+         # There are really only two kinds -- those that
+         # use the current revision as the major version
+         # and those that subtract age and use age as
+         # a minor version.  But, then there is irix
+         # which has an extra 1 added just for fun
+         #
+         case $version_type in
+         darwin|linux|osf|windows|none)
+           func_arith $number_major + $number_minor
+           current=$func_arith_result
+           age="$number_minor"
+           revision="$number_revision"
+           ;;
+         freebsd-aout|freebsd-elf|sunos)
+           current="$number_major"
+           revision="$number_minor"
+           age="0"
+           ;;
+         irix|nonstopux)
+           func_arith $number_major + $number_minor
+           current=$func_arith_result
+           age="$number_minor"
+           revision="$number_minor"
+           lt_irix_increment=no
+           ;;
+         *)
+           func_fatal_configuration "$modename: unknown library version type \`$version_type'"
+           ;;
+         esac
+         ;;
+       no)
+         current="$1"
+         revision="$2"
+         age="$3"
+         ;;
+       esac
+
+       # Check that each of the things are valid numbers.
+       case $current in
+       0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;;
+       *)
+         func_error "CURRENT \`$current' must be a nonnegative integer"
+         func_fatal_error "\`$vinfo' is not valid version information"
+         ;;
+       esac
+
+       case $revision in
+       0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;;
+       *)
+         func_error "REVISION \`$revision' must be a nonnegative integer"
+         func_fatal_error "\`$vinfo' is not valid version information"
+         ;;
+       esac
+
+       case $age in
+       0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;;
+       *)
+         func_error "AGE \`$age' must be a nonnegative integer"
+         func_fatal_error "\`$vinfo' is not valid version information"
+         ;;
+       esac
+
+       if test "$age" -gt "$current"; then
+         func_error "AGE \`$age' is greater than the current interface number \`$current'"
+         func_fatal_error "\`$vinfo' is not valid version information"
+       fi
+
+       # Calculate the version variables.
+       major=
+       versuffix=
+       verstring=
+       case $version_type in
+       none) ;;
+
+       darwin)
+         # Like Linux, but with the current version available in
+         # verstring for coding it into the library header
+         func_arith $current - $age
+         major=.$func_arith_result
+         versuffix="$major.$age.$revision"
+         # Darwin ld doesn't like 0 for these options...
+         func_arith $current + 1
+         minor_current=$func_arith_result
+         xlcverstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision"
+         verstring="-compatibility_version $minor_current -current_version $minor_current.$revision"
+         ;;
+
+       freebsd-aout)
+         major=".$current"
+         versuffix=".$current.$revision";
+         ;;
+
+       freebsd-elf)
+         major=".$current"
+         versuffix=".$current"
+         ;;
+
+       irix | nonstopux)
+         if test "X$lt_irix_increment" = "Xno"; then
+           func_arith $current - $age
+         else
+           func_arith $current - $age + 1
+         fi
+         major=$func_arith_result
+
+         case $version_type in
+           nonstopux) verstring_prefix=nonstopux ;;
+           *)         verstring_prefix=sgi ;;
+         esac
+         verstring="$verstring_prefix$major.$revision"
+
+         # Add in all the interfaces that we are compatible with.
+         loop=$revision
+         while test "$loop" -ne 0; do
+           func_arith $revision - $loop
+           iface=$func_arith_result
+           func_arith $loop - 1
+           loop=$func_arith_result
+           verstring="$verstring_prefix$major.$iface:$verstring"
+         done
+
+         # Before this point, $major must not contain `.'.
+         major=.$major
+         versuffix="$major.$revision"
+         ;;
+
+       linux)
+         func_arith $current - $age
+         major=.$func_arith_result
+         versuffix="$major.$age.$revision"
+         ;;
+
+       osf)
+         func_arith $current - $age
+         major=.$func_arith_result
+         versuffix=".$current.$age.$revision"
+         verstring="$current.$age.$revision"
+
+         # Add in all the interfaces that we are compatible with.
+         loop=$age
+         while test "$loop" -ne 0; do
+           func_arith $current - $loop
+           iface=$func_arith_result
+           func_arith $loop - 1
+           loop=$func_arith_result
+           verstring="$verstring:${iface}.0"
+         done
+
+         # Make executables depend on our current version.
+         verstring="$verstring:${current}.0"
+         ;;
+
+       qnx)
+         major=".$current"
+         versuffix=".$current"
+         ;;
+
+       sunos)
+         major=".$current"
+         versuffix=".$current.$revision"
+         ;;
+
+       windows)
+         # Use '-' rather than '.', since we only want one
+         # extension on DOS 8.3 filesystems.
+         func_arith $current - $age
+         major=$func_arith_result
+         versuffix="-$major"
+         ;;
+
+       *)
+         func_fatal_configuration "unknown library version type \`$version_type'"
+         ;;
+       esac
+
+       # Clear the version info if we defaulted, and they specified a release.
+       if test -z "$vinfo" && test -n "$release"; then
+         major=
+         case $version_type in
+         darwin)
+           # we can't check for "0.0" in archive_cmds due to quoting
+           # problems, so we reset it completely
+           verstring=
+           ;;
+         *)
+           verstring="0.0"
+           ;;
+         esac
+         if test "$need_version" = no; then
+           versuffix=
+         else
+           versuffix=".0.0"
+         fi
+       fi
+
+       # Remove version info from name if versioning should be avoided
+       if test "$avoid_version" = yes && test "$need_version" = no; then
+         major=
+         versuffix=
+         verstring=""
+       fi
+
+       # Check to see if the archive will have undefined symbols.
+       if test "$allow_undefined" = yes; then
+         if test "$allow_undefined_flag" = unsupported; then
+           func_warning "undefined symbols not allowed in $host shared libraries"
+           build_libtool_libs=no
+           build_old_libs=yes
+         fi
+       else
+         # Don't allow undefined symbols.
+         allow_undefined_flag="$no_undefined_flag"
+       fi
+
+      fi
+
+      func_generate_dlsyms "$libname" "$libname" "yes"
+      libobjs="$libobjs $symfileobj"
+      test "X$libobjs" = "X " && libobjs=
+
+      if test "$mode" != relink; then
+       # Remove our outputs, but don't remove object files since they
+       # may have been created when compiling PIC objects.
+       removelist=
+       tempremovelist=`$ECHO "$output_objdir/*"`
+       for p in $tempremovelist; do
+         case $p in
+           *.$objext | *.gcno)
+              ;;
+           $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*)
+              if test "X$precious_files_regex" != "X"; then
+                if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1
+                then
+                  continue
+                fi
+              fi
+              removelist="$removelist $p"
+              ;;
+           *) ;;
+         esac
+       done
+       test -n "$removelist" && \
+         func_show_eval "${RM}r \$removelist"
+      fi
+
+      # Now set the variables for building old libraries.
+      if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then
+       oldlibs="$oldlibs $output_objdir/$libname.$libext"
+
+       # Transform .lo files to .o files.
+       oldobjs="$objs "`$ECHO "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}'$/d' -e "$lo2o" | $NL2SP`
+      fi
+
+      # Eliminate all temporary directories.
+      #for path in $notinst_path; do
+      #        lib_search_path=`$ECHO "X$lib_search_path " | $Xsed -e "s% $path % %g"`
+      #        deplibs=`$ECHO "X$deplibs " | $Xsed -e "s% -L$path % %g"`
+      #        dependency_libs=`$ECHO "X$dependency_libs " | $Xsed -e "s% -L$path % %g"`
+      #done
+
+      if test -n "$xrpath"; then
+       # If the user specified any rpath flags, then add them.
+       temp_xrpath=
+       for libdir in $xrpath; do
+         temp_xrpath="$temp_xrpath -R$libdir"
+         case "$finalize_rpath " in
+         *" $libdir "*) ;;
+         *) finalize_rpath="$finalize_rpath $libdir" ;;
+         esac
+       done
+       if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then
+         dependency_libs="$temp_xrpath $dependency_libs"
+       fi
+      fi
+
+      # Make sure dlfiles contains only unique files that won't be dlpreopened
+      old_dlfiles="$dlfiles"
+      dlfiles=
+      for lib in $old_dlfiles; do
+       case " $dlprefiles $dlfiles " in
+       *" $lib "*) ;;
+       *) dlfiles="$dlfiles $lib" ;;
+       esac
+      done
+
+      # Make sure dlprefiles contains only unique files
+      old_dlprefiles="$dlprefiles"
+      dlprefiles=
+      for lib in $old_dlprefiles; do
+       case "$dlprefiles " in
+       *" $lib "*) ;;
+       *) dlprefiles="$dlprefiles $lib" ;;
+       esac
+      done
+
+      if test "$build_libtool_libs" = yes; then
+       if test -n "$rpath"; then
+         case $host in
+         *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc*)
+           # these systems don't actually have a c library (as such)!
+           ;;
+         *-*-rhapsody* | *-*-darwin1.[012])
+           # Rhapsody C library is in the System framework
+           deplibs="$deplibs System.ltframework"
+           ;;
+         *-*-netbsd*)
+           # Don't link with libc until the a.out ld.so is fixed.
+           ;;
+         *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
+           # Do not include libc due to us having libc/libc_r.
+           ;;
+         *-*-sco3.2v5* | *-*-sco5v6*)
+           # Causes problems with __ctype
+           ;;
+         *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*)
+           # Compiler inserts libc in the correct place for threads to work
+           ;;
+         *)
+           # Add libc to deplibs on all other systems if necessary.
+           if test "$build_libtool_need_lc" = "yes"; then
+             deplibs="$deplibs -lc"
+           fi
+           ;;
+         esac
+       fi
+
+       # Transform deplibs into only deplibs that can be linked in shared.
+       name_save=$name
+       libname_save=$libname
+       release_save=$release
+       versuffix_save=$versuffix
+       major_save=$major
+       # I'm not sure if I'm treating the release correctly.  I think
+       # release should show up in the -l (ie -lgmp5) so we don't want to
+       # add it in twice.  Is that correct?
+       release=""
+       versuffix=""
+       major=""
+       newdeplibs=
+       droppeddeps=no
+       case $deplibs_check_method in
+       pass_all)
+         # Don't check for shared/static.  Everything works.
+         # This might be a little naive.  We might want to check
+         # whether the library exists or not.  But this is on
+         # osf3 & osf4 and I'm not really sure... Just
+         # implementing what was already the behavior.
+         newdeplibs=$deplibs
+         ;;
+       test_compile)
+         # This code stresses the "libraries are programs" paradigm to its
+         # limits. Maybe even breaks it.  We compile a program, linking it
+         # against the deplibs as a proxy for the library.  Then we can check
+         # whether they linked in statically or dynamically with ldd.
+         $opt_dry_run || $RM conftest.c
+         cat > conftest.c <<EOF
+         int main() { return 0; }
+EOF
+         $opt_dry_run || $RM conftest
+         if $LTCC $LTCFLAGS -o conftest conftest.c $deplibs; then
+           ldd_output=`ldd conftest`
+           for i in $deplibs; do
+             case $i in
+             -l*)
+               func_stripname -l '' "$i"
+               name=$func_stripname_result
+               if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
+                 case " $predeps $postdeps " in
+                 *" $i "*)
+                   newdeplibs="$newdeplibs $i"
+                   i=""
+                   ;;
+                 esac
+               fi
+               if test -n "$i" ; then
+                 libname=`eval "\\$ECHO \"$libname_spec\""`
+                 deplib_matches=`eval "\\$ECHO \"$library_names_spec\""`
+                 set dummy $deplib_matches; shift
+                 deplib_match=$1
+                 if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then
+                   newdeplibs="$newdeplibs $i"
+                 else
+                   droppeddeps=yes
+                   $ECHO
+                   $ECHO "*** Warning: dynamic linker does not accept needed library $i."
+                   $ECHO "*** I have the capability to make that library automatically link in when"
+                   $ECHO "*** you link to this library.  But I can only do this if you have a"
+                   $ECHO "*** shared version of the library, which I believe you do not have"
+                   $ECHO "*** because a test_compile did reveal that the linker did not use it for"
+                   $ECHO "*** its dynamic dependency list that programs get resolved with at runtime."
+                 fi
+               fi
+               ;;
+             *)
+               newdeplibs="$newdeplibs $i"
+               ;;
+             esac
+           done
+         else
+           # Error occurred in the first compile.  Let's try to salvage
+           # the situation: Compile a separate program for each library.
+           for i in $deplibs; do
+             case $i in
+             -l*)
+               func_stripname -l '' "$i"
+               name=$func_stripname_result
+               $opt_dry_run || $RM conftest
+               if $LTCC $LTCFLAGS -o conftest conftest.c $i; then
+                 ldd_output=`ldd conftest`
+                 if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
+                   case " $predeps $postdeps " in
+                   *" $i "*)
+                     newdeplibs="$newdeplibs $i"
+                     i=""
+                     ;;
+                   esac
+                 fi
+                 if test -n "$i" ; then
+                   libname=`eval "\\$ECHO \"$libname_spec\""`
+                   deplib_matches=`eval "\\$ECHO \"$library_names_spec\""`
+                   set dummy $deplib_matches; shift
+                   deplib_match=$1
+                   if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then
+                     newdeplibs="$newdeplibs $i"
+                   else
+                     droppeddeps=yes
+                     $ECHO
+                     $ECHO "*** Warning: dynamic linker does not accept needed library $i."
+                     $ECHO "*** I have the capability to make that library automatically link in when"
+                     $ECHO "*** you link to this library.  But I can only do this if you have a"
+                     $ECHO "*** shared version of the library, which you do not appear to have"
+                     $ECHO "*** because a test_compile did reveal that the linker did not use this one"
+                     $ECHO "*** as a dynamic dependency that programs can get resolved with at runtime."
+                   fi
+                 fi
+               else
+                 droppeddeps=yes
+                 $ECHO
+                 $ECHO "*** Warning!  Library $i is needed by this library but I was not able to"
+                 $ECHO "*** make it link in!  You will probably need to install it or some"
+                 $ECHO "*** library that it depends on before this library will be fully"
+                 $ECHO "*** functional.  Installing it before continuing would be even better."
+               fi
+               ;;
+             *)
+               newdeplibs="$newdeplibs $i"
+               ;;
+             esac
+           done
+         fi
+         ;;
+       file_magic*)
+         set dummy $deplibs_check_method; shift
+         file_magic_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
+         for a_deplib in $deplibs; do
+           case $a_deplib in
+           -l*)
+             func_stripname -l '' "$a_deplib"
+             name=$func_stripname_result
+             if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
+               case " $predeps $postdeps " in
+               *" $a_deplib "*)
+                 newdeplibs="$newdeplibs $a_deplib"
+                 a_deplib=""
+                 ;;
+               esac
+             fi
+             if test -n "$a_deplib" ; then
+               libname=`eval "\\$ECHO \"$libname_spec\""`
+               for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
+                 potential_libs=`ls $i/$libname[.-]* 2>/dev/null`
+                 for potent_lib in $potential_libs; do
+                     # Follow soft links.
+                     if ls -lLd "$potent_lib" 2>/dev/null |
+                        $GREP " -> " >/dev/null; then
+                       continue
+                     fi
+                     # The statement above tries to avoid entering an
+                     # endless loop below, in case of cyclic links.
+                     # We might still enter an endless loop, since a link
+                     # loop can be closed while we follow links,
+                     # but so what?
+                     potlib="$potent_lib"
+                     while test -h "$potlib" 2>/dev/null; do
+                       potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'`
+                       case $potliblink in
+                       [\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";;
+                       *) potlib=`$ECHO "X$potlib" | $Xsed -e 's,[^/]*$,,'`"$potliblink";;
+                       esac
+                     done
+                     if eval $file_magic_cmd \"\$potlib\" 2>/dev/null |
+                        $SED -e 10q |
+                        $EGREP "$file_magic_regex" > /dev/null; then
+                       newdeplibs="$newdeplibs $a_deplib"
+                       a_deplib=""
+                       break 2
+                     fi
+                 done
+               done
+             fi
+             if test -n "$a_deplib" ; then
+               droppeddeps=yes
+               $ECHO
+               $ECHO "*** Warning: linker path does not have real file for library $a_deplib."
+               $ECHO "*** I have the capability to make that library automatically link in when"
+               $ECHO "*** you link to this library.  But I can only do this if you have a"
+               $ECHO "*** shared version of the library, which you do not appear to have"
+               $ECHO "*** because I did check the linker path looking for a file starting"
+               if test -z "$potlib" ; then
+                 $ECHO "*** with $libname but no candidates were found. (...for file magic test)"
+               else
+                 $ECHO "*** with $libname and none of the candidates passed a file format test"
+                 $ECHO "*** using a file magic. Last file checked: $potlib"
+               fi
+             fi
+             ;;
+           *)
+             # Add a -L argument.
+             newdeplibs="$newdeplibs $a_deplib"
+             ;;
+           esac
+         done # Gone through all deplibs.
+         ;;
+       match_pattern*)
+         set dummy $deplibs_check_method; shift
+         match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
+         for a_deplib in $deplibs; do
+           case $a_deplib in
+           -l*)
+             func_stripname -l '' "$a_deplib"
+             name=$func_stripname_result
+             if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
+               case " $predeps $postdeps " in
+               *" $a_deplib "*)
+                 newdeplibs="$newdeplibs $a_deplib"
+                 a_deplib=""
+                 ;;
+               esac
+             fi
+             if test -n "$a_deplib" ; then
+               libname=`eval "\\$ECHO \"$libname_spec\""`
+               for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
+                 potential_libs=`ls $i/$libname[.-]* 2>/dev/null`
+                 for potent_lib in $potential_libs; do
+                   potlib="$potent_lib" # see symlink-check above in file_magic test
+                   if eval "\$ECHO \"X$potent_lib\"" 2>/dev/null | $Xsed -e 10q | \
+                      $EGREP "$match_pattern_regex" > /dev/null; then
+                     newdeplibs="$newdeplibs $a_deplib"
+                     a_deplib=""
+                     break 2
+                   fi
+                 done
+               done
+             fi
+             if test -n "$a_deplib" ; then
+               droppeddeps=yes
+               $ECHO
+               $ECHO "*** Warning: linker path does not have real file for library $a_deplib."
+               $ECHO "*** I have the capability to make that library automatically link in when"
+               $ECHO "*** you link to this library.  But I can only do this if you have a"
+               $ECHO "*** shared version of the library, which you do not appear to have"
+               $ECHO "*** because I did check the linker path looking for a file starting"
+               if test -z "$potlib" ; then
+                 $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)"
+               else
+                 $ECHO "*** with $libname and none of the candidates passed a file format test"
+                 $ECHO "*** using a regex pattern. Last file checked: $potlib"
+               fi
+             fi
+             ;;
+           *)
+             # Add a -L argument.
+             newdeplibs="$newdeplibs $a_deplib"
+             ;;
+           esac
+         done # Gone through all deplibs.
+         ;;
+       none | unknown | *)
+         newdeplibs=""
+         tmp_deplibs=`$ECHO "X $deplibs" | $Xsed \
+             -e 's/ -lc$//' -e 's/ -[LR][^ ]*//g'`
+         if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
+           for i in $predeps $postdeps ; do
+             # can't use Xsed below, because $i might contain '/'
+             tmp_deplibs=`$ECHO "X $tmp_deplibs" | $Xsed -e "s,$i,,"`
+           done
+         fi
+         if $ECHO "X $tmp_deplibs" | $Xsed -e 's/[      ]//g' |
+            $GREP . >/dev/null; then
+           $ECHO
+           if test "X$deplibs_check_method" = "Xnone"; then
+             $ECHO "*** Warning: inter-library dependencies are not supported in this platform."
+           else
+             $ECHO "*** Warning: inter-library dependencies are not known to be supported."
+           fi
+           $ECHO "*** All declared inter-library dependencies are being dropped."
+           droppeddeps=yes
+         fi
+         ;;
+       esac
+       versuffix=$versuffix_save
+       major=$major_save
+       release=$release_save
+       libname=$libname_save
+       name=$name_save
+
+       case $host in
+       *-*-rhapsody* | *-*-darwin1.[012])
+         # On Rhapsody replace the C library with the System framework
+         newdeplibs=`$ECHO "X $newdeplibs" | $Xsed -e 's/ -lc / System.ltframework /'`
+         ;;
+       esac
+
+       if test "$droppeddeps" = yes; then
+         if test "$module" = yes; then
+           $ECHO
+           $ECHO "*** Warning: libtool could not satisfy all declared inter-library"
+           $ECHO "*** dependencies of module $libname.  Therefore, libtool will create"
+           $ECHO "*** a static module, that should work as long as the dlopening"
+           $ECHO "*** application is linked with the -dlopen flag."
+           if test -z "$global_symbol_pipe"; then
+             $ECHO
+             $ECHO "*** However, this would only work if libtool was able to extract symbol"
+             $ECHO "*** lists from a program, using \`nm' or equivalent, but libtool could"
+             $ECHO "*** not find such a program.  So, this module is probably useless."
+             $ECHO "*** \`nm' from GNU binutils and a full rebuild may help."
+           fi
+           if test "$build_old_libs" = no; then
+             oldlibs="$output_objdir/$libname.$libext"
+             build_libtool_libs=module
+             build_old_libs=yes
+           else
+             build_libtool_libs=no
+           fi
+         else
+           $ECHO "*** The inter-library dependencies that have been dropped here will be"
+           $ECHO "*** automatically added whenever a program is linked with this library"
+           $ECHO "*** or is declared to -dlopen it."
+
+           if test "$allow_undefined" = no; then
+             $ECHO
+             $ECHO "*** Since this library must not contain undefined symbols,"
+             $ECHO "*** because either the platform does not support them or"
+             $ECHO "*** it was explicitly requested with -no-undefined,"
+             $ECHO "*** libtool will only create a static version of it."
+             if test "$build_old_libs" = no; then
+               oldlibs="$output_objdir/$libname.$libext"
+               build_libtool_libs=module
+               build_old_libs=yes
+             else
+               build_libtool_libs=no
+             fi
+           fi
+         fi
+       fi
+       # Done checking deplibs!
+       deplibs=$newdeplibs
+      fi
+      # Time to change all our "foo.ltframework" stuff back to "-framework foo"
+      case $host in
+       *-*-darwin*)
+         newdeplibs=`$ECHO "X $newdeplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'`
+         new_inherited_linker_flags=`$ECHO "X $new_inherited_linker_flags" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'`
+         deplibs=`$ECHO "X $deplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'`
+         ;;
+      esac
+
+      # move library search paths that coincide with paths to not yet
+      # installed libraries to the beginning of the library search list
+      new_libs=
+      for path in $notinst_path; do
+       case " $new_libs " in
+       *" -L$path/$objdir "*) ;;
+       *)
+         case " $deplibs " in
+         *" -L$path/$objdir "*)
+           new_libs="$new_libs -L$path/$objdir" ;;
+         esac
+         ;;
+       esac
+      done
+      for deplib in $deplibs; do
+       case $deplib in
+       -L*)
+         case " $new_libs " in
+         *" $deplib "*) ;;
+         *) new_libs="$new_libs $deplib" ;;
+         esac
+         ;;
+       *) new_libs="$new_libs $deplib" ;;
+       esac
+      done
+      deplibs="$new_libs"
+
+      # All the library-specific variables (install_libdir is set above).
+      library_names=
+      old_library=
+      dlname=
+
+      # Test again, we may have decided not to build it any more
+      if test "$build_libtool_libs" = yes; then
+       if test "$hardcode_into_libs" = yes; then
+         # Hardcode the library paths
+         hardcode_libdirs=
+         dep_rpath=
+         rpath="$finalize_rpath"
+         test "$mode" != relink && rpath="$compile_rpath$rpath"
+         for libdir in $rpath; do
+           if test -n "$hardcode_libdir_flag_spec"; then
+             if test -n "$hardcode_libdir_separator"; then
+               if test -z "$hardcode_libdirs"; then
+                 hardcode_libdirs="$libdir"
+               else
+                 # Just accumulate the unique libdirs.
+                 case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
+                 *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
+                   ;;
+                 *)
+                   hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir"
+                   ;;
+                 esac
+               fi
+             else
+               eval flag=\"$hardcode_libdir_flag_spec\"
+               dep_rpath="$dep_rpath $flag"
+             fi
+           elif test -n "$runpath_var"; then
+             case "$perm_rpath " in
+             *" $libdir "*) ;;
+             *) perm_rpath="$perm_rpath $libdir" ;;
+             esac
+           fi
+         done
+         # Substitute the hardcoded libdirs into the rpath.
+         if test -n "$hardcode_libdir_separator" &&
+            test -n "$hardcode_libdirs"; then
+           libdir="$hardcode_libdirs"
+           if test -n "$hardcode_libdir_flag_spec_ld"; then
+             eval dep_rpath=\"$hardcode_libdir_flag_spec_ld\"
+           else
+             eval dep_rpath=\"$hardcode_libdir_flag_spec\"
+           fi
+         fi
+         if test -n "$runpath_var" && test -n "$perm_rpath"; then
+           # We should set the runpath_var.
+           rpath=
+           for dir in $perm_rpath; do
+             rpath="$rpath$dir:"
+           done
+           eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var"
+         fi
+         test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs"
+       fi
+
+       shlibpath="$finalize_shlibpath"
+       test "$mode" != relink && shlibpath="$compile_shlibpath$shlibpath"
+       if test -n "$shlibpath"; then
+         eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var"
+       fi
+
+       # Get the real and link names of the library.
+       eval shared_ext=\"$shrext_cmds\"
+       eval library_names=\"$library_names_spec\"
+       set dummy $library_names
+       shift
+       realname="$1"
+       shift
+
+       if test -n "$soname_spec"; then
+         eval soname=\"$soname_spec\"
+       else
+         soname="$realname"
+       fi
+       if test -z "$dlname"; then
+         dlname=$soname
+       fi
+
+       lib="$output_objdir/$realname"
+       linknames=
+       for link
+       do
+         linknames="$linknames $link"
+       done
+
+       # Use standard objects if they are pic
+       test -z "$pic_flag" && libobjs=`$ECHO "X$libobjs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
+       test "X$libobjs" = "X " && libobjs=
+
+       delfiles=
+       if test -n "$export_symbols" && test -n "$include_expsyms"; then
+         $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp"
+         export_symbols="$output_objdir/$libname.uexp"
+         delfiles="$delfiles $export_symbols"
+       fi
+
+       orig_export_symbols=
+       case $host_os in
+       cygwin* | mingw* | cegcc*)
+         if test -n "$export_symbols" && test -z "$export_symbols_regex"; then
+           # exporting using user supplied symfile
+           if test "x`$SED 1q $export_symbols`" != xEXPORTS; then
+             # and it's NOT already a .def file. Must figure out
+             # which of the given symbols are data symbols and tag
+             # them as such. So, trigger use of export_symbols_cmds.
+             # export_symbols gets reassigned inside the "prepare
+             # the list of exported symbols" if statement, so the
+             # include_expsyms logic still works.
+             orig_export_symbols="$export_symbols"
+             export_symbols=
+             always_export_symbols=yes
+           fi
+         fi
+         ;;
+       esac
+
+       # Prepare the list of exported symbols
+       if test -z "$export_symbols"; then
+         if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then
+           func_verbose "generating symbol list for \`$libname.la'"
+           export_symbols="$output_objdir/$libname.exp"
+           $opt_dry_run || $RM $export_symbols
+           cmds=$export_symbols_cmds
+           save_ifs="$IFS"; IFS='~'
+           for cmd in $cmds; do
+             IFS="$save_ifs"
+             eval cmd=\"$cmd\"
+             func_len " $cmd"
+             len=$func_len_result
+             if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then
+               func_show_eval "$cmd" 'exit $?'
+               skipped_export=false
+             else
+               # The command line is too long to execute in one step.
+               func_verbose "using reloadable object file for export list..."
+               skipped_export=:
+               # Break out early, otherwise skipped_export may be
+               # set to false by a later but shorter cmd.
+               break
+             fi
+           done
+           IFS="$save_ifs"
+           if test -n "$export_symbols_regex" && test "X$skipped_export" != "X:"; then
+             func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"'
+             func_show_eval '$MV "${export_symbols}T" "$export_symbols"'
+           fi
+         fi
+       fi
+
+       if test -n "$export_symbols" && test -n "$include_expsyms"; then
+         tmp_export_symbols="$export_symbols"
+         test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols"
+         $opt_dry_run || eval '$ECHO "X$include_expsyms" | $Xsed | $SP2NL >> "$tmp_export_symbols"'
+       fi
+
+       if test "X$skipped_export" != "X:" && test -n "$orig_export_symbols"; then
+         # The given exports_symbols file has to be filtered, so filter it.
+         func_verbose "filter symbol list for \`$libname.la' to tag DATA exports"
+         # FIXME: $output_objdir/$libname.filter potentially contains lots of
+         # 's' commands which not all seds can handle. GNU sed should be fine
+         # though. Also, the filter scales superlinearly with the number of
+         # global variables. join(1) would be nice here, but unfortunately
+         # isn't a blessed tool.
+         $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter
+         delfiles="$delfiles $export_symbols $output_objdir/$libname.filter"
+         export_symbols=$output_objdir/$libname.def
+         $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols
+       fi
+
+       tmp_deplibs=
+       for test_deplib in $deplibs; do
+         case " $convenience " in
+         *" $test_deplib "*) ;;
+         *)
+           tmp_deplibs="$tmp_deplibs $test_deplib"
+           ;;
+         esac
+       done
+       deplibs="$tmp_deplibs"
+
+       if test -n "$convenience"; then
+         if test -n "$whole_archive_flag_spec" &&
+           test "$compiler_needs_object" = yes &&
+           test -z "$libobjs"; then
+           # extract the archives, so we have objects to list.
+           # TODO: could optimize this to just extract one archive.
+           whole_archive_flag_spec=
+         fi
+         if test -n "$whole_archive_flag_spec"; then
+           save_libobjs=$libobjs
+           eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
+           test "X$libobjs" = "X " && libobjs=
+         else
+           gentop="$output_objdir/${outputname}x"
+           generated="$generated $gentop"
+
+           func_extract_archives $gentop $convenience
+           libobjs="$libobjs $func_extract_archives_result"
+           test "X$libobjs" = "X " && libobjs=
+         fi
+       fi
+
+       if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then
+         eval flag=\"$thread_safe_flag_spec\"
+         linker_flags="$linker_flags $flag"
+       fi
+
+       # Make a backup of the uninstalled library when relinking
+       if test "$mode" = relink; then
+         $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $?
+       fi
+
+       # Do each of the archive commands.
+       if test "$module" = yes && test -n "$module_cmds" ; then
+         if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then
+           eval test_cmds=\"$module_expsym_cmds\"
+           cmds=$module_expsym_cmds
+         else
+           eval test_cmds=\"$module_cmds\"
+           cmds=$module_cmds
+         fi
+       else
+         if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
+           eval test_cmds=\"$archive_expsym_cmds\"
+           cmds=$archive_expsym_cmds
+         else
+           eval test_cmds=\"$archive_cmds\"
+           cmds=$archive_cmds
+         fi
+       fi
+
+       if test "X$skipped_export" != "X:" &&
+          func_len " $test_cmds" &&
+          len=$func_len_result &&
+          test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then
+         :
+       else
+         # The command line is too long to link in one step, link piecewise
+         # or, if using GNU ld and skipped_export is not :, use a linker
+         # script.
+
+         # Save the value of $output and $libobjs because we want to
+         # use them later.  If we have whole_archive_flag_spec, we
+         # want to use save_libobjs as it was before
+         # whole_archive_flag_spec was expanded, because we can't
+         # assume the linker understands whole_archive_flag_spec.
+         # This may have to be revisited, in case too many
+         # convenience libraries get linked in and end up exceeding
+         # the spec.
+         if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then
+           save_libobjs=$libobjs
+         fi
+         save_output=$output
+         output_la=`$ECHO "X$output" | $Xsed -e "$basename"`
+
+         # Clear the reloadable object creation command queue and
+         # initialize k to one.
+         test_cmds=
+         concat_cmds=
+         objlist=
+         last_robj=
+         k=1
+
+         if test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "$with_gnu_ld" = yes; then
+           output=${output_objdir}/${output_la}.lnkscript
+           func_verbose "creating GNU ld script: $output"
+           $ECHO 'INPUT (' > $output
+           for obj in $save_libobjs
+           do
+             $ECHO "$obj" >> $output
+           done
+           $ECHO ')' >> $output
+           delfiles="$delfiles $output"
+         elif test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "X$file_list_spec" != X; then
+           output=${output_objdir}/${output_la}.lnk
+           func_verbose "creating linker input file list: $output"
+           : > $output
+           set x $save_libobjs
+           shift
+           firstobj=
+           if test "$compiler_needs_object" = yes; then
+             firstobj="$1 "
+             shift
+           fi
+           for obj
+           do
+             $ECHO "$obj" >> $output
+           done
+           delfiles="$delfiles $output"
+           output=$firstobj\"$file_list_spec$output\"
+         else
+           if test -n "$save_libobjs"; then
+             func_verbose "creating reloadable object files..."
+             output=$output_objdir/$output_la-${k}.$objext
+             eval test_cmds=\"$reload_cmds\"
+             func_len " $test_cmds"
+             len0=$func_len_result
+             len=$len0
+
+             # Loop over the list of objects to be linked.
+             for obj in $save_libobjs
+             do
+               func_len " $obj"
+               func_arith $len + $func_len_result
+               len=$func_arith_result
+               if test "X$objlist" = X ||
+                  test "$len" -lt "$max_cmd_len"; then
+                 func_append objlist " $obj"
+               else
+                 # The command $test_cmds is almost too long, add a
+                 # command to the queue.
+                 if test "$k" -eq 1 ; then
+                   # The first file doesn't have a previous command to add.
+                   eval concat_cmds=\"$reload_cmds $objlist $last_robj\"
+                 else
+                   # All subsequent reloadable object files will link in
+                   # the last one created.
+                   eval concat_cmds=\"\$concat_cmds~$reload_cmds $objlist $last_robj~\$RM $last_robj\"
+                 fi
+                 last_robj=$output_objdir/$output_la-${k}.$objext
+                 func_arith $k + 1
+                 k=$func_arith_result
+                 output=$output_objdir/$output_la-${k}.$objext
+                 objlist=$obj
+                 func_len " $last_robj"
+                 func_arith $len0 + $func_len_result
+                 len=$func_arith_result
+               fi
+             done
+             # Handle the remaining objects by creating one last
+             # reloadable object file.  All subsequent reloadable object
+             # files will link in the last one created.
+             test -z "$concat_cmds" || concat_cmds=$concat_cmds~
+             eval concat_cmds=\"\${concat_cmds}$reload_cmds $objlist $last_robj\"
+             if test -n "$last_robj"; then
+               eval concat_cmds=\"\${concat_cmds}~\$RM $last_robj\"
+             fi
+             delfiles="$delfiles $output"
+
+           else
+             output=
+           fi
+
+           if ${skipped_export-false}; then
+             func_verbose "generating symbol list for \`$libname.la'"
+             export_symbols="$output_objdir/$libname.exp"
+             $opt_dry_run || $RM $export_symbols
+             libobjs=$output
+             # Append the command to create the export file.
+             test -z "$concat_cmds" || concat_cmds=$concat_cmds~
+             eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\"
+             if test -n "$last_robj"; then
+               eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\"
+             fi
+           fi
+
+           test -n "$save_libobjs" &&
+             func_verbose "creating a temporary reloadable object file: $output"
+
+           # Loop through the commands generated above and execute them.
+           save_ifs="$IFS"; IFS='~'
+           for cmd in $concat_cmds; do
+             IFS="$save_ifs"
+             $opt_silent || {
+                 func_quote_for_expand "$cmd"
+                 eval "func_echo $func_quote_for_expand_result"
+             }
+             $opt_dry_run || eval "$cmd" || {
+               lt_exit=$?
+
+               # Restore the uninstalled library and exit
+               if test "$mode" = relink; then
+                 ( cd "$output_objdir" && \
+                   $RM "${realname}T" && \
+                   $MV "${realname}U" "$realname" )
+               fi
+
+               exit $lt_exit
+             }
+           done
+           IFS="$save_ifs"
+
+           if test -n "$export_symbols_regex" && ${skipped_export-false}; then
+             func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"'
+             func_show_eval '$MV "${export_symbols}T" "$export_symbols"'
+           fi
+         fi
+
+          if ${skipped_export-false}; then
+           if test -n "$export_symbols" && test -n "$include_expsyms"; then
+             tmp_export_symbols="$export_symbols"
+             test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols"
+             $opt_dry_run || eval '$ECHO "X$include_expsyms" | $Xsed | $SP2NL >> "$tmp_export_symbols"'
+           fi
+
+           if test -n "$orig_export_symbols"; then
+             # The given exports_symbols file has to be filtered, so filter it.
+             func_verbose "filter symbol list for \`$libname.la' to tag DATA exports"
+             # FIXME: $output_objdir/$libname.filter potentially contains lots of
+             # 's' commands which not all seds can handle. GNU sed should be fine
+             # though. Also, the filter scales superlinearly with the number of
+             # global variables. join(1) would be nice here, but unfortunately
+             # isn't a blessed tool.
+             $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter
+             delfiles="$delfiles $export_symbols $output_objdir/$libname.filter"
+             export_symbols=$output_objdir/$libname.def
+             $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols
+           fi
+         fi
+
+         libobjs=$output
+         # Restore the value of output.
+         output=$save_output
+
+         if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then
+           eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
+           test "X$libobjs" = "X " && libobjs=
+         fi
+         # Expand the library linking commands again to reset the
+         # value of $libobjs for piecewise linking.
+
+         # Do each of the archive commands.
+         if test "$module" = yes && test -n "$module_cmds" ; then
+           if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then
+             cmds=$module_expsym_cmds
+           else
+             cmds=$module_cmds
+           fi
+         else
+           if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
+             cmds=$archive_expsym_cmds
+           else
+             cmds=$archive_cmds
+           fi
+         fi
+       fi
+
+       if test -n "$delfiles"; then
+         # Append the command to remove temporary files to $cmds.
+         eval cmds=\"\$cmds~\$RM $delfiles\"
+       fi
+
+       # Add any objects from preloaded convenience libraries
+       if test -n "$dlprefiles"; then
+         gentop="$output_objdir/${outputname}x"
+         generated="$generated $gentop"
+
+         func_extract_archives $gentop $dlprefiles
+         libobjs="$libobjs $func_extract_archives_result"
+         test "X$libobjs" = "X " && libobjs=
+       fi
+
+       save_ifs="$IFS"; IFS='~'
+       for cmd in $cmds; do
+         IFS="$save_ifs"
+         eval cmd=\"$cmd\"
+         $opt_silent || {
+           func_quote_for_expand "$cmd"
+           eval "func_echo $func_quote_for_expand_result"
+         }
+         $opt_dry_run || eval "$cmd" || {
+           lt_exit=$?
+
+           # Restore the uninstalled library and exit
+           if test "$mode" = relink; then
+             ( cd "$output_objdir" && \
+               $RM "${realname}T" && \
+               $MV "${realname}U" "$realname" )
+           fi
+
+           exit $lt_exit
+         }
+       done
+       IFS="$save_ifs"
+
+       # Restore the uninstalled library and exit
+       if test "$mode" = relink; then
+         $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $?
+
+         if test -n "$convenience"; then
+           if test -z "$whole_archive_flag_spec"; then
+             func_show_eval '${RM}r "$gentop"'
+           fi
+         fi
+
+         exit $EXIT_SUCCESS
+       fi
+
+       # Create links to the real library.
+       for linkname in $linknames; do
+         if test "$realname" != "$linkname"; then
+           func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?'
+         fi
+       done
+
+       # If -module or -export-dynamic was specified, set the dlname.
+       if test "$module" = yes || test "$export_dynamic" = yes; then
+         # On all known operating systems, these are identical.
+         dlname="$soname"
+       fi
+      fi
+      ;;
+
+    obj)
+      if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
+       func_warning "\`-dlopen' is ignored for objects"
+      fi
+
+      case " $deplibs" in
+      *\ -l* | *\ -L*)
+       func_warning "\`-l' and \`-L' are ignored for objects" ;;
+      esac
+
+      test -n "$rpath" && \
+       func_warning "\`-rpath' is ignored for objects"
+
+      test -n "$xrpath" && \
+       func_warning "\`-R' is ignored for objects"
+
+      test -n "$vinfo" && \
+       func_warning "\`-version-info' is ignored for objects"
+
+      test -n "$release" && \
+       func_warning "\`-release' is ignored for objects"
+
+      case $output in
+      *.lo)
+       test -n "$objs$old_deplibs" && \
+         func_fatal_error "cannot build library object \`$output' from non-libtool objects"
+
+       libobj=$output
+       func_lo2o "$libobj"
+       obj=$func_lo2o_result
+       ;;
+      *)
+       libobj=
+       obj="$output"
+       ;;
+      esac
+
+      # Delete the old objects.
+      $opt_dry_run || $RM $obj $libobj
+
+      # Objects from convenience libraries.  This assumes
+      # single-version convenience libraries.  Whenever we create
+      # different ones for PIC/non-PIC, this we'll have to duplicate
+      # the extraction.
+      reload_conv_objs=
+      gentop=
+      # reload_cmds runs $LD directly, so let us get rid of
+      # -Wl from whole_archive_flag_spec and hope we can get by with
+      # turning comma into space..
+      wl=
+
+      if test -n "$convenience"; then
+       if test -n "$whole_archive_flag_spec"; then
+         eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\"
+         reload_conv_objs=$reload_objs\ `$ECHO "X$tmp_whole_archive_flags" | $Xsed -e 's|,| |g'`
+       else
+         gentop="$output_objdir/${obj}x"
+         generated="$generated $gentop"
+
+         func_extract_archives $gentop $convenience
+         reload_conv_objs="$reload_objs $func_extract_archives_result"
+       fi
+      fi
+
+      # Create the old-style object.
+      reload_objs="$objs$old_deplibs "`$ECHO "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}$'/d' -e '/\.lib$/d' -e "$lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test
+
+      output="$obj"
+      func_execute_cmds "$reload_cmds" 'exit $?'
+
+      # Exit if we aren't doing a library object file.
+      if test -z "$libobj"; then
+       if test -n "$gentop"; then
+         func_show_eval '${RM}r "$gentop"'
+       fi
+
+       exit $EXIT_SUCCESS
+      fi
+
+      if test "$build_libtool_libs" != yes; then
+       if test -n "$gentop"; then
+         func_show_eval '${RM}r "$gentop"'
+       fi
+
+       # Create an invalid libtool object if no PIC, so that we don't
+       # accidentally link it into a program.
+       # $show "echo timestamp > $libobj"
+       # $opt_dry_run || eval "echo timestamp > $libobj" || exit $?
+       exit $EXIT_SUCCESS
+      fi
+
+      if test -n "$pic_flag" || test "$pic_mode" != default; then
+       # Only do commands if we really have different PIC objects.
+       reload_objs="$libobjs $reload_conv_objs"
+       output="$libobj"
+       func_execute_cmds "$reload_cmds" 'exit $?'
+      fi
+
+      if test -n "$gentop"; then
+       func_show_eval '${RM}r "$gentop"'
+      fi
+
+      exit $EXIT_SUCCESS
+      ;;
+
+    prog)
+      case $host in
+       *cygwin*) func_stripname '' '.exe' "$output"
+                 output=$func_stripname_result.exe;;
+      esac
+      test -n "$vinfo" && \
+       func_warning "\`-version-info' is ignored for programs"
+
+      test -n "$release" && \
+       func_warning "\`-release' is ignored for programs"
+
+      test "$preload" = yes \
+        && test "$dlopen_support" = unknown \
+       && test "$dlopen_self" = unknown \
+       && test "$dlopen_self_static" = unknown && \
+         func_warning "\`LT_INIT([dlopen])' not used. Assuming no dlopen support."
+
+      case $host in
+      *-*-rhapsody* | *-*-darwin1.[012])
+       # On Rhapsody replace the C library is the System framework
+       compile_deplibs=`$ECHO "X $compile_deplibs" | $Xsed -e 's/ -lc / System.ltframework /'`
+       finalize_deplibs=`$ECHO "X $finalize_deplibs" | $Xsed -e 's/ -lc / System.ltframework /'`
+       ;;
+      esac
+
+      case $host in
+      *-*-darwin*)
+       # Don't allow lazy linking, it breaks C++ global constructors
+       # But is supposedly fixed on 10.4 or later (yay!).
+       if test "$tagname" = CXX ; then
+         case ${MACOSX_DEPLOYMENT_TARGET-10.0} in
+           10.[0123])
+             compile_command="$compile_command ${wl}-bind_at_load"
+             finalize_command="$finalize_command ${wl}-bind_at_load"
+           ;;
+         esac
+       fi
+       # Time to change all our "foo.ltframework" stuff back to "-framework foo"
+       compile_deplibs=`$ECHO "X $compile_deplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'`
+       finalize_deplibs=`$ECHO "X $finalize_deplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'`
+       ;;
+      esac
+
+
+      # move library search paths that coincide with paths to not yet
+      # installed libraries to the beginning of the library search list
+      new_libs=
+      for path in $notinst_path; do
+       case " $new_libs " in
+       *" -L$path/$objdir "*) ;;
+       *)
+         case " $compile_deplibs " in
+         *" -L$path/$objdir "*)
+           new_libs="$new_libs -L$path/$objdir" ;;
+         esac
+         ;;
+       esac
+      done
+      for deplib in $compile_deplibs; do
+       case $deplib in
+       -L*)
+         case " $new_libs " in
+         *" $deplib "*) ;;
+         *) new_libs="$new_libs $deplib" ;;
+         esac
+         ;;
+       *) new_libs="$new_libs $deplib" ;;
+       esac
+      done
+      compile_deplibs="$new_libs"
+
+
+      compile_command="$compile_command $compile_deplibs"
+      finalize_command="$finalize_command $finalize_deplibs"
+
+      if test -n "$rpath$xrpath"; then
+       # If the user specified any rpath flags, then add them.
+       for libdir in $rpath $xrpath; do
+         # This is the magic to use -rpath.
+         case "$finalize_rpath " in
+         *" $libdir "*) ;;
+         *) finalize_rpath="$finalize_rpath $libdir" ;;
+         esac
+       done
+      fi
+
+      # Now hardcode the library paths
+      rpath=
+      hardcode_libdirs=
+      for libdir in $compile_rpath $finalize_rpath; do
+       if test -n "$hardcode_libdir_flag_spec"; then
+         if test -n "$hardcode_libdir_separator"; then
+           if test -z "$hardcode_libdirs"; then
+             hardcode_libdirs="$libdir"
+           else
+             # Just accumulate the unique libdirs.
+             case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
+             *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
+               ;;
+             *)
+               hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir"
+               ;;
+             esac
+           fi
+         else
+           eval flag=\"$hardcode_libdir_flag_spec\"
+           rpath="$rpath $flag"
+         fi
+       elif test -n "$runpath_var"; then
+         case "$perm_rpath " in
+         *" $libdir "*) ;;
+         *) perm_rpath="$perm_rpath $libdir" ;;
+         esac
+       fi
+       case $host in
+       *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
+         testbindir=`${ECHO} "$libdir" | ${SED} -e 's*/lib$*/bin*'`
+         case :$dllsearchpath: in
+         *":$libdir:"*) ;;
+         ::) dllsearchpath=$libdir;;
+         *) dllsearchpath="$dllsearchpath:$libdir";;
+         esac
+         case :$dllsearchpath: in
+         *":$testbindir:"*) ;;
+         ::) dllsearchpath=$testbindir;;
+         *) dllsearchpath="$dllsearchpath:$testbindir";;
+         esac
+         ;;
+       esac
+      done
+      # Substitute the hardcoded libdirs into the rpath.
+      if test -n "$hardcode_libdir_separator" &&
+        test -n "$hardcode_libdirs"; then
+       libdir="$hardcode_libdirs"
+       eval rpath=\" $hardcode_libdir_flag_spec\"
+      fi
+      compile_rpath="$rpath"
+
+      rpath=
+      hardcode_libdirs=
+      for libdir in $finalize_rpath; do
+       if test -n "$hardcode_libdir_flag_spec"; then
+         if test -n "$hardcode_libdir_separator"; then
+           if test -z "$hardcode_libdirs"; then
+             hardcode_libdirs="$libdir"
+           else
+             # Just accumulate the unique libdirs.
+             case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
+             *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
+               ;;
+             *)
+               hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir"
+               ;;
+             esac
+           fi
+         else
+           eval flag=\"$hardcode_libdir_flag_spec\"
+           rpath="$rpath $flag"
+         fi
+       elif test -n "$runpath_var"; then
+         case "$finalize_perm_rpath " in
+         *" $libdir "*) ;;
+         *) finalize_perm_rpath="$finalize_perm_rpath $libdir" ;;
+         esac
+       fi
+      done
+      # Substitute the hardcoded libdirs into the rpath.
+      if test -n "$hardcode_libdir_separator" &&
+        test -n "$hardcode_libdirs"; then
+       libdir="$hardcode_libdirs"
+       eval rpath=\" $hardcode_libdir_flag_spec\"
+      fi
+      finalize_rpath="$rpath"
+
+      if test -n "$libobjs" && test "$build_old_libs" = yes; then
+       # Transform all the library objects into standard objects.
+       compile_command=`$ECHO "X$compile_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
+       finalize_command=`$ECHO "X$finalize_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
+      fi
+
+      func_generate_dlsyms "$outputname" "@PROGRAM@" "no"
+
+      # template prelinking step
+      if test -n "$prelink_cmds"; then
+       func_execute_cmds "$prelink_cmds" 'exit $?'
+      fi
+
+      wrappers_required=yes
+      case $host in
+      *cygwin* | *mingw* )
+        if test "$build_libtool_libs" != yes; then
+          wrappers_required=no
+        fi
+        ;;
+      *cegcc)
+        # Disable wrappers for cegcc, we are cross compiling anyway.
+        wrappers_required=no
+        ;;
+      *)
+        if test "$need_relink" = no || test "$build_libtool_libs" != yes; then
+          wrappers_required=no
+        fi
+        ;;
+      esac
+      if test "$wrappers_required" = no; then
+       # Replace the output file specification.
+       compile_command=`$ECHO "X$compile_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'`
+       link_command="$compile_command$compile_rpath"
+
+       # We have no uninstalled library dependencies, so finalize right now.
+       exit_status=0
+       func_show_eval "$link_command" 'exit_status=$?'
+
+       # Delete the generated files.
+       if test -f "$output_objdir/${outputname}S.${objext}"; then
+         func_show_eval '$RM "$output_objdir/${outputname}S.${objext}"'
+       fi
+
+       exit $exit_status
+      fi
+
+      if test -n "$compile_shlibpath$finalize_shlibpath"; then
+       compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command"
+      fi
+      if test -n "$finalize_shlibpath"; then
+       finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command"
+      fi
+
+      compile_var=
+      finalize_var=
+      if test -n "$runpath_var"; then
+       if test -n "$perm_rpath"; then
+         # We should set the runpath_var.
+         rpath=
+         for dir in $perm_rpath; do
+           rpath="$rpath$dir:"
+         done
+         compile_var="$runpath_var=\"$rpath\$$runpath_var\" "
+       fi
+       if test -n "$finalize_perm_rpath"; then
+         # We should set the runpath_var.
+         rpath=
+         for dir in $finalize_perm_rpath; do
+           rpath="$rpath$dir:"
+         done
+         finalize_var="$runpath_var=\"$rpath\$$runpath_var\" "
+       fi
+      fi
+
+      if test "$no_install" = yes; then
+       # We don't need to create a wrapper script.
+       link_command="$compile_var$compile_command$compile_rpath"
+       # Replace the output file specification.
+       link_command=`$ECHO "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'`
+       # Delete the old output file.
+       $opt_dry_run || $RM $output
+       # Link the executable and exit
+       func_show_eval "$link_command" 'exit $?'
+       exit $EXIT_SUCCESS
+      fi
+
+      if test "$hardcode_action" = relink; then
+       # Fast installation is not supported
+       link_command="$compile_var$compile_command$compile_rpath"
+       relink_command="$finalize_var$finalize_command$finalize_rpath"
+
+       func_warning "this platform does not like uninstalled shared libraries"
+       func_warning "\`$output' will be relinked during installation"
+      else
+       if test "$fast_install" != no; then
+         link_command="$finalize_var$compile_command$finalize_rpath"
+         if test "$fast_install" = yes; then
+           relink_command=`$ECHO "X$compile_var$compile_command$compile_rpath" | $Xsed -e 's%@OUTPUT@%\$progdir/\$file%g'`
+         else
+           # fast_install is set to needless
+           relink_command=
+         fi
+       else
+         link_command="$compile_var$compile_command$compile_rpath"
+         relink_command="$finalize_var$finalize_command$finalize_rpath"
+       fi
+      fi
+
+      # Replace the output file specification.
+      link_command=`$ECHO "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'`
+
+      # Delete the old output files.
+      $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname
+
+      func_show_eval "$link_command" 'exit $?'
+
+      # Now create the wrapper script.
+      func_verbose "creating $output"
+
+      # Quote the relink command for shipping.
+      if test -n "$relink_command"; then
+       # Preserve any variables that may affect compiler behavior
+       for var in $variables_saved_for_relink; do
+         if eval test -z \"\${$var+set}\"; then
+           relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command"
+         elif eval var_value=\$$var; test -z "$var_value"; then
+           relink_command="$var=; export $var; $relink_command"
+         else
+           func_quote_for_eval "$var_value"
+           relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command"
+         fi
+       done
+       relink_command="(cd `pwd`; $relink_command)"
+       relink_command=`$ECHO "X$relink_command" | $Xsed -e "$sed_quote_subst"`
+      fi
+
+      # Quote $ECHO for shipping.
+      if test "X$ECHO" = "X$SHELL $progpath --fallback-echo"; then
+       case $progpath in
+       [\\/]* | [A-Za-z]:[\\/]*) qecho="$SHELL $progpath --fallback-echo";;
+       *) qecho="$SHELL `pwd`/$progpath --fallback-echo";;
+       esac
+       qecho=`$ECHO "X$qecho" | $Xsed -e "$sed_quote_subst"`
+      else
+       qecho=`$ECHO "X$ECHO" | $Xsed -e "$sed_quote_subst"`
+      fi
+
+      # Only actually do things if not in dry run mode.
+      $opt_dry_run || {
+       # win32 will think the script is a binary if it has
+       # a .exe suffix, so we strip it off here.
+       case $output in
+         *.exe) func_stripname '' '.exe' "$output"
+                output=$func_stripname_result ;;
+       esac
+       # test for cygwin because mv fails w/o .exe extensions
+       case $host in
+         *cygwin*)
+           exeext=.exe
+           func_stripname '' '.exe' "$outputname"
+           outputname=$func_stripname_result ;;
+         *) exeext= ;;
+       esac
+       case $host in
+         *cygwin* | *mingw* )
+           func_dirname_and_basename "$output" "" "."
+           output_name=$func_basename_result
+           output_path=$func_dirname_result
+           cwrappersource="$output_path/$objdir/lt-$output_name.c"
+           cwrapper="$output_path/$output_name.exe"
+           $RM $cwrappersource $cwrapper
+           trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15
+
+           func_emit_cwrapperexe_src > $cwrappersource
+
+           # The wrapper executable is built using the $host compiler,
+           # because it contains $host paths and files. If cross-
+           # compiling, it, like the target executable, must be
+           # executed on the $host or under an emulation environment.
+           $opt_dry_run || {
+             $LTCC $LTCFLAGS -o $cwrapper $cwrappersource
+             $STRIP $cwrapper
+           }
+
+           # Now, create the wrapper script for func_source use:
+           func_ltwrapper_scriptname $cwrapper
+           $RM $func_ltwrapper_scriptname_result
+           trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15
+           $opt_dry_run || {
+             # note: this script will not be executed, so do not chmod.
+             if test "x$build" = "x$host" ; then
+               $cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result
+             else
+               func_emit_wrapper no > $func_ltwrapper_scriptname_result
+             fi
+           }
+         ;;
+         * )
+           $RM $output
+           trap "$RM $output; exit $EXIT_FAILURE" 1 2 15
+
+           func_emit_wrapper no > $output
+           chmod +x $output
+         ;;
+       esac
+      }
+      exit $EXIT_SUCCESS
+      ;;
+    esac
+
+    # See if we need to build an old-fashioned archive.
+    for oldlib in $oldlibs; do
+
+      if test "$build_libtool_libs" = convenience; then
+       oldobjs="$libobjs_save $symfileobj"
+       addlibs="$convenience"
+       build_libtool_libs=no
+      else
+       if test "$build_libtool_libs" = module; then
+         oldobjs="$libobjs_save"
+         build_libtool_libs=no
+       else
+         oldobjs="$old_deplibs $non_pic_objects"
+         if test "$preload" = yes && test -f "$symfileobj"; then
+           oldobjs="$oldobjs $symfileobj"
+         fi
+       fi
+       addlibs="$old_convenience"
+      fi
+
+      if test -n "$addlibs"; then
+       gentop="$output_objdir/${outputname}x"
+       generated="$generated $gentop"
+
+       func_extract_archives $gentop $addlibs
+       oldobjs="$oldobjs $func_extract_archives_result"
+      fi
+
+      # Do each command in the archive commands.
+      if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then
+       cmds=$old_archive_from_new_cmds
+      else
+
+       # Add any objects from preloaded convenience libraries
+       if test -n "$dlprefiles"; then
+         gentop="$output_objdir/${outputname}x"
+         generated="$generated $gentop"
+
+         func_extract_archives $gentop $dlprefiles
+         oldobjs="$oldobjs $func_extract_archives_result"
+       fi
+
+       # POSIX demands no paths to be encoded in archives.  We have
+       # to avoid creating archives with duplicate basenames if we
+       # might have to extract them afterwards, e.g., when creating a
+       # static archive out of a convenience library, or when linking
+       # the entirety of a libtool archive into another (currently
+       # not supported by libtool).
+       if (for obj in $oldobjs
+           do
+             func_basename "$obj"
+             $ECHO "$func_basename_result"
+           done | sort | sort -uc >/dev/null 2>&1); then
+         :
+       else
+         $ECHO "copying selected object files to avoid basename conflicts..."
+         gentop="$output_objdir/${outputname}x"
+         generated="$generated $gentop"
+         func_mkdir_p "$gentop"
+         save_oldobjs=$oldobjs
+         oldobjs=
+         counter=1
+         for obj in $save_oldobjs
+         do
+           func_basename "$obj"
+           objbase="$func_basename_result"
+           case " $oldobjs " in
+           " ") oldobjs=$obj ;;
+           *[\ /]"$objbase "*)
+             while :; do
+               # Make sure we don't pick an alternate name that also
+               # overlaps.
+               newobj=lt$counter-$objbase
+               func_arith $counter + 1
+               counter=$func_arith_result
+               case " $oldobjs " in
+               *[\ /]"$newobj "*) ;;
+               *) if test ! -f "$gentop/$newobj"; then break; fi ;;
+               esac
+             done
+             func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj"
+             oldobjs="$oldobjs $gentop/$newobj"
+             ;;
+           *) oldobjs="$oldobjs $obj" ;;
+           esac
+         done
+       fi
+       eval cmds=\"$old_archive_cmds\"
+
+       func_len " $cmds"
+       len=$func_len_result
+       if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then
+         cmds=$old_archive_cmds
+       else
+         # the command line is too long to link in one step, link in parts
+         func_verbose "using piecewise archive linking..."
+         save_RANLIB=$RANLIB
+         RANLIB=:
+         objlist=
+         concat_cmds=
+         save_oldobjs=$oldobjs
+         oldobjs=
+         # Is there a better way of finding the last object in the list?
+         for obj in $save_oldobjs
+         do
+           last_oldobj=$obj
+         done
+         eval test_cmds=\"$old_archive_cmds\"
+         func_len " $test_cmds"
+         len0=$func_len_result
+         len=$len0
+         for obj in $save_oldobjs
+         do
+           func_len " $obj"
+           func_arith $len + $func_len_result
+           len=$func_arith_result
+           func_append objlist " $obj"
+           if test "$len" -lt "$max_cmd_len"; then
+             :
+           else
+             # the above command should be used before it gets too long
+             oldobjs=$objlist
+             if test "$obj" = "$last_oldobj" ; then
+               RANLIB=$save_RANLIB
+             fi
+             test -z "$concat_cmds" || concat_cmds=$concat_cmds~
+             eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\"
+             objlist=
+             len=$len0
+           fi
+         done
+         RANLIB=$save_RANLIB
+         oldobjs=$objlist
+         if test "X$oldobjs" = "X" ; then
+           eval cmds=\"\$concat_cmds\"
+         else
+           eval cmds=\"\$concat_cmds~\$old_archive_cmds\"
+         fi
+       fi
+      fi
+      func_execute_cmds "$cmds" 'exit $?'
+    done
+
+    test -n "$generated" && \
+      func_show_eval "${RM}r$generated"
+
+    # Now create the libtool archive.
+    case $output in
+    *.la)
+      old_library=
+      test "$build_old_libs" = yes && old_library="$libname.$libext"
+      func_verbose "creating $output"
+
+      # Preserve any variables that may affect compiler behavior
+      for var in $variables_saved_for_relink; do
+       if eval test -z \"\${$var+set}\"; then
+         relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command"
+       elif eval var_value=\$$var; test -z "$var_value"; then
+         relink_command="$var=; export $var; $relink_command"
+       else
+         func_quote_for_eval "$var_value"
+         relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command"
+       fi
+      done
+      # Quote the link command for shipping.
+      relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)"
+      relink_command=`$ECHO "X$relink_command" | $Xsed -e "$sed_quote_subst"`
+      if test "$hardcode_automatic" = yes ; then
+       relink_command=
+      fi
+
+      # Only create the output if not a dry run.
+      $opt_dry_run || {
+       for installed in no yes; do
+         if test "$installed" = yes; then
+           if test -z "$install_libdir"; then
+             break
+           fi
+           output="$output_objdir/$outputname"i
+           # Replace all uninstalled libtool libraries with the installed ones
+           newdependency_libs=
+           for deplib in $dependency_libs; do
+             case $deplib in
+             *.la)
+               func_basename "$deplib"
+               name="$func_basename_result"
+               eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
+               test -z "$libdir" && \
+                 func_fatal_error "\`$deplib' is not a valid libtool archive"
+               newdependency_libs="$newdependency_libs $libdir/$name"
+               ;;
+             *) newdependency_libs="$newdependency_libs $deplib" ;;
+             esac
+           done
+           dependency_libs="$newdependency_libs"
+           newdlfiles=
+
+           for lib in $dlfiles; do
+             case $lib in
+             *.la)
+               func_basename "$lib"
+               name="$func_basename_result"
+               eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
+               test -z "$libdir" && \
+                 func_fatal_error "\`$lib' is not a valid libtool archive"
+               newdlfiles="$newdlfiles $libdir/$name"
+               ;;
+             *) newdlfiles="$newdlfiles $lib" ;;
+             esac
+           done
+           dlfiles="$newdlfiles"
+           newdlprefiles=
+           for lib in $dlprefiles; do
+             case $lib in
+             *.la)
+               # Only pass preopened files to the pseudo-archive (for
+               # eventual linking with the app. that links it) if we
+               # didn't already link the preopened objects directly into
+               # the library:
+               func_basename "$lib"
+               name="$func_basename_result"
+               eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
+               test -z "$libdir" && \
+                 func_fatal_error "\`$lib' is not a valid libtool archive"
+               newdlprefiles="$newdlprefiles $libdir/$name"
+               ;;
+             esac
+           done
+           dlprefiles="$newdlprefiles"
+         else
+           newdlfiles=
+           for lib in $dlfiles; do
+             case $lib in
+               [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;;
+               *) abs=`pwd`"/$lib" ;;
+             esac
+             newdlfiles="$newdlfiles $abs"
+           done
+           dlfiles="$newdlfiles"
+           newdlprefiles=
+           for lib in $dlprefiles; do
+             case $lib in
+               [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;;
+               *) abs=`pwd`"/$lib" ;;
+             esac
+             newdlprefiles="$newdlprefiles $abs"
+           done
+           dlprefiles="$newdlprefiles"
+         fi
+         $RM $output
+         # place dlname in correct position for cygwin
+         tdlname=$dlname
+         case $host,$output,$installed,$module,$dlname in
+           *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll) tdlname=../bin/$dlname ;;
+         esac
+         $ECHO > $output "\
+# $outputname - a libtool library file
+# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
+#
+# Please DO NOT delete this file!
+# It is necessary for linking the library.
+
+# The name that we can dlopen(3).
+dlname='$tdlname'
+
+# Names of this library.
+library_names='$library_names'
+
+# The name of the static archive.
+old_library='$old_library'
+
+# Linker flags that can not go in dependency_libs.
+inherited_linker_flags='$new_inherited_linker_flags'
+
+# Libraries that this one depends upon.
+dependency_libs='$dependency_libs'
+
+# Names of additional weak libraries provided by this library
+weak_library_names='$weak_libs'
+
+# Version information for $libname.
+current=$current
+age=$age
+revision=$revision
+
+# Is this an already installed library?
+installed=$installed
+
+# Should we warn about portability when linking against -modules?
+shouldnotlink=$module
+
+# Files to dlopen/dlpreopen
+dlopen='$dlfiles'
+dlpreopen='$dlprefiles'
+
+# Directory that this library needs to be installed in:
+libdir='$install_libdir'"
+         if test "$installed" = no && test "$need_relink" = yes; then
+           $ECHO >> $output "\
+relink_command=\"$relink_command\""
+         fi
+       done
+      }
+
+      # Do a symbolic link so that the libtool archive can be found in
+      # LD_LIBRARY_PATH before the program is installed.
+      func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?'
+      ;;
+    esac
+    exit $EXIT_SUCCESS
+}
+
+{ test "$mode" = link || test "$mode" = relink; } &&
+    func_mode_link ${1+"$@"}
+
+
+# func_mode_uninstall arg...
+func_mode_uninstall ()
+{
+    $opt_debug
+    RM="$nonopt"
+    files=
+    rmforce=
+    exit_status=0
+
+    # This variable tells wrapper scripts just to set variables rather
+    # than running their programs.
+    libtool_install_magic="$magic"
+
+    for arg
+    do
+      case $arg in
+      -f) RM="$RM $arg"; rmforce=yes ;;
+      -*) RM="$RM $arg" ;;
+      *) files="$files $arg" ;;
+      esac
+    done
+
+    test -z "$RM" && \
+      func_fatal_help "you must specify an RM program"
+
+    rmdirs=
+
+    origobjdir="$objdir"
+    for file in $files; do
+      func_dirname "$file" "" "."
+      dir="$func_dirname_result"
+      if test "X$dir" = X.; then
+       objdir="$origobjdir"
+      else
+       objdir="$dir/$origobjdir"
+      fi
+      func_basename "$file"
+      name="$func_basename_result"
+      test "$mode" = uninstall && objdir="$dir"
+
+      # Remember objdir for removal later, being careful to avoid duplicates
+      if test "$mode" = clean; then
+       case " $rmdirs " in
+         *" $objdir "*) ;;
+         *) rmdirs="$rmdirs $objdir" ;;
+       esac
+      fi
+
+      # Don't error if the file doesn't exist and rm -f was used.
+      if { test -L "$file"; } >/dev/null 2>&1 ||
+        { test -h "$file"; } >/dev/null 2>&1 ||
+        test -f "$file"; then
+       :
+      elif test -d "$file"; then
+       exit_status=1
+       continue
+      elif test "$rmforce" = yes; then
+       continue
+      fi
+
+      rmfiles="$file"
+
+      case $name in
+      *.la)
+       # Possibly a libtool archive, so verify it.
+       if func_lalib_p "$file"; then
+         func_source $dir/$name
+
+         # Delete the libtool libraries and symlinks.
+         for n in $library_names; do
+           rmfiles="$rmfiles $objdir/$n"
+         done
+         test -n "$old_library" && rmfiles="$rmfiles $objdir/$old_library"
+
+         case "$mode" in
+         clean)
+           case "  $library_names " in
+           # "  " in the beginning catches empty $dlname
+           *" $dlname "*) ;;
+           *) rmfiles="$rmfiles $objdir/$dlname" ;;
+           esac
+           test -n "$libdir" && rmfiles="$rmfiles $objdir/$name $objdir/${name}i"
+           ;;
+         uninstall)
+           if test -n "$library_names"; then
+             # Do each command in the postuninstall commands.
+             func_execute_cmds "$postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1'
+           fi
+
+           if test -n "$old_library"; then
+             # Do each command in the old_postuninstall commands.
+             func_execute_cmds "$old_postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1'
+           fi
+           # FIXME: should reinstall the best remaining shared library.
+           ;;
+         esac
+       fi
+       ;;
+
+      *.lo)
+       # Possibly a libtool object, so verify it.
+       if func_lalib_p "$file"; then
+
+         # Read the .lo file
+         func_source $dir/$name
+
+         # Add PIC object to the list of files to remove.
+         if test -n "$pic_object" &&
+            test "$pic_object" != none; then
+           rmfiles="$rmfiles $dir/$pic_object"
+         fi
+
+         # Add non-PIC object to the list of files to remove.
+         if test -n "$non_pic_object" &&
+            test "$non_pic_object" != none; then
+           rmfiles="$rmfiles $dir/$non_pic_object"
+         fi
+       fi
+       ;;
+
+      *)
+       if test "$mode" = clean ; then
+         noexename=$name
+         case $file in
+         *.exe)
+           func_stripname '' '.exe' "$file"
+           file=$func_stripname_result
+           func_stripname '' '.exe' "$name"
+           noexename=$func_stripname_result
+           # $file with .exe has already been added to rmfiles,
+           # add $file without .exe
+           rmfiles="$rmfiles $file"
+           ;;
+         esac
+         # Do a test to see if this is a libtool program.
+         if func_ltwrapper_p "$file"; then
+           if func_ltwrapper_executable_p "$file"; then
+             func_ltwrapper_scriptname "$file"
+             relink_command=
+             func_source $func_ltwrapper_scriptname_result
+             rmfiles="$rmfiles $func_ltwrapper_scriptname_result"
+           else
+             relink_command=
+             func_source $dir/$noexename
+           fi
+
+           # note $name still contains .exe if it was in $file originally
+           # as does the version of $file that was added into $rmfiles
+           rmfiles="$rmfiles $objdir/$name $objdir/${name}S.${objext}"
+           if test "$fast_install" = yes && test -n "$relink_command"; then
+             rmfiles="$rmfiles $objdir/lt-$name"
+           fi
+           if test "X$noexename" != "X$name" ; then
+             rmfiles="$rmfiles $objdir/lt-${noexename}.c"
+           fi
+         fi
+       fi
+       ;;
+      esac
+      func_show_eval "$RM $rmfiles" 'exit_status=1'
+    done
+    objdir="$origobjdir"
+
+    # Try to remove the ${objdir}s in the directories where we deleted files
+    for dir in $rmdirs; do
+      if test -d "$dir"; then
+       func_show_eval "rmdir $dir >/dev/null 2>&1"
+      fi
+    done
+
+    exit $exit_status
+}
+
+{ test "$mode" = uninstall || test "$mode" = clean; } &&
+    func_mode_uninstall ${1+"$@"}
+
+test -z "$mode" && {
+  help="$generic_help"
+  func_fatal_help "you must specify a MODE"
+}
+
+test -z "$exec_cmd" && \
+  func_fatal_help "invalid operation mode \`$mode'"
+
+if test -n "$exec_cmd"; then
+  eval exec "$exec_cmd"
+  exit $EXIT_FAILURE
+fi
+
+exit $exit_status
+
+
+# The TAGs below are defined such that we never get into a situation
+# in which we disable both kinds of libraries.  Given conflicting
+# choices, we go for a static library, that is the most portable,
+# since we can't tell whether shared libraries were disabled because
+# the user asked for that or because the platform doesn't support
+# them.  This is particularly important on AIX, because we don't
+# support having both static and shared libraries enabled at the same
+# time on that platform, so we default to a shared-only configuration.
+# If a disable-shared tag is given, we'll fallback to a static-only
+# configuration.  But we'll never go from static-only to shared-only.
+
+# ### BEGIN LIBTOOL TAG CONFIG: disable-shared
+build_libtool_libs=no
+build_old_libs=yes
+# ### END LIBTOOL TAG CONFIG: disable-shared
+
+# ### BEGIN LIBTOOL TAG CONFIG: disable-static
+build_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac`
+# ### END LIBTOOL TAG CONFIG: disable-static
+
+# Local Variables:
+# mode:shell-script
+# sh-indentation:2
+# End:
+# vi:sw=2
+
diff --git a/m4/Makefile.am b/m4/Makefile.am
new file mode 100755 (executable)
index 0000000..602fdbb
--- /dev/null
@@ -0,0 +1,3 @@
+MAINTAINERCLEANFILES   = Makefile.in
+
+EXTRA_DIST = codeset.m4 gettext.m4 glibc21.m4 iconv.m4 intdiv0.m4 intmax.m4 inttypes.m4 inttypes_h.m4 inttypes-pri.m4 isc-posix.m4 lcmessage.m4 lib-ld.m4 lib-link.m4 lib-prefix.m4 longdouble.m4 longlong.m4 nls.m4 po.m4 printf-posix.m4 progtest.m4 signed.m4 size_max.m4 stdint_h.m4 uintmax_t.m4 ulonglong.m4 wchar_t.m4 wint_t.m4 xsize.m4 intltool.m4
diff --git a/m4/argz.m4 b/m4/argz.m4
new file mode 100755 (executable)
index 0000000..edc99bb
--- /dev/null
@@ -0,0 +1,79 @@
+# Portability macros for glibc argz.                    -*- Autoconf -*-
+#
+#   Copyright (C) 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
+#   Written by Gary V. Vaughan <gary@gnu.org>
+#
+# This file is free software; the Free Software Foundation gives
+# unlimited permission to copy and/or distribute it, with or without
+# modifications, as long as this notice is preserved.
+
+# serial 5 argz.m4
+
+AC_DEFUN([gl_FUNC_ARGZ],
+[gl_PREREQ_ARGZ
+
+AC_CHECK_HEADERS([argz.h], [], [], [AC_INCLUDES_DEFAULT])
+
+AC_CHECK_TYPES([error_t],
+  [],
+  [AC_DEFINE([error_t], [int],
+   [Define to a type to use for `error_t' if it is not otherwise available.])
+   AC_DEFINE([__error_t_defined], [1], [Define so that glibc/gnulib argp.h
+    does not typedef error_t.])],
+  [#if defined(HAVE_ARGZ_H)
+#  include <argz.h>
+#endif])
+
+ARGZ_H=
+AC_CHECK_FUNCS([argz_add argz_append argz_count argz_create_sep argz_insert \
+       argz_next argz_stringify], [], [ARGZ_H=argz.h; AC_LIBOBJ([argz])])
+
+dnl if have system argz functions, allow forced use of 
+dnl libltdl-supplied implementation (and default to do so
+dnl on "known bad" systems). Could use a runtime check, but
+dnl (a) detecting malloc issues is notoriously unreliable
+dnl (b) only known system that declares argz functions,
+dnl     provides them, yet they are broken, is cygwin
+dnl     releases prior to 16-Mar-2007 (1.5.24 and earlier)
+dnl So, it's more straightforward simply to special case 
+dnl this for known bad systems.
+AS_IF([test -z "$ARGZ_H"],
+    [AC_CACHE_CHECK(
+        [if argz actually works],
+        [lt_cv_sys_argz_works],
+        [[case $host_os in #(
+        *cygwin*)
+          lt_cv_sys_argz_works=no
+          if test "$cross_compiling" != no; then
+            lt_cv_sys_argz_works="guessing no"
+          else
+            lt_sed_extract_leading_digits='s/^\([0-9\.]*\).*/\1/'
+            save_IFS=$IFS
+            IFS=-.
+            set x `uname -r | sed -e "$lt_sed_extract_leading_digits"`
+            IFS=$save_IFS
+            lt_os_major=${2-0}
+            lt_os_minor=${3-0}
+            lt_os_micro=${4-0}
+            if test "$lt_os_major" -gt 1 \
+               || { test "$lt_os_major" -eq 1 \
+                 && { test "$lt_os_minor" -gt 5 \
+                   || { test "$lt_os_minor" -eq 5 \
+                     && test "$lt_os_micro" -gt 24; }; }; }; then
+              lt_cv_sys_argz_works=yes
+            fi
+          fi
+          ;; #(
+        *) lt_cv_sys_argz_works=yes ;;
+        esac]])
+     AS_IF([test $lt_cv_sys_argz_works = yes],
+        [AC_DEFINE([HAVE_WORKING_ARGZ], 1,
+                   [This value is set to 1 to indicate that the system argz facility works])],
+        [ARGZ_H=argz.h
+        AC_LIBOBJ([argz])])])
+
+AC_SUBST([ARGZ_H])
+])
+
+# Prerequisites of lib/argz.c.
+AC_DEFUN([gl_PREREQ_ARGZ], [:])
diff --git a/m4/codeset.m4 b/m4/codeset.m4
new file mode 100755 (executable)
index 0000000..59535eb
--- /dev/null
@@ -0,0 +1,23 @@
+# codeset.m4 serial AM1 (gettext-0.10.40)
+dnl Copyright (C) 2000-2002 Free Software Foundation, Inc.
+dnl This file is free software, distributed under the terms of the GNU
+dnl General Public License.  As a special exception to the GNU General
+dnl Public License, this file may be distributed as part of a program
+dnl that contains a configuration script generated by Autoconf, under
+dnl the same distribution terms as the rest of that program.
+
+dnl From Bruno Haible.
+
+AC_DEFUN([AM_LANGINFO_CODESET],
+[
+  AC_CACHE_CHECK([for nl_langinfo and CODESET], am_cv_langinfo_codeset,
+    [AC_TRY_LINK([#include <langinfo.h>],
+      [char* cs = nl_langinfo(CODESET);],
+      am_cv_langinfo_codeset=yes,
+      am_cv_langinfo_codeset=no)
+    ])
+  if test $am_cv_langinfo_codeset = yes; then
+    AC_DEFINE(HAVE_LANGINFO_CODESET, 1,
+      [Define if you have <langinfo.h> and nl_langinfo(CODESET).])
+  fi
+])
diff --git a/m4/gettext.m4 b/m4/gettext.m4
new file mode 100755 (executable)
index 0000000..a374f03
--- /dev/null
@@ -0,0 +1,487 @@
+# gettext.m4 serial 28 (gettext-0.13)
+dnl Copyright (C) 1995-2003 Free Software Foundation, Inc.
+dnl This file is free software, distributed under the terms of the GNU
+dnl General Public License.  As a special exception to the GNU General
+dnl Public License, this file may be distributed as part of a program
+dnl that contains a configuration script generated by Autoconf, under
+dnl the same distribution terms as the rest of that program.
+dnl
+dnl This file can can be used in projects which are not available under
+dnl the GNU General Public License or the GNU Library General Public
+dnl License but which still want to provide support for the GNU gettext
+dnl functionality.
+dnl Please note that the actual code of the GNU gettext library is covered
+dnl by the GNU Library General Public License, and the rest of the GNU
+dnl gettext package package is covered by the GNU General Public License.
+dnl They are *not* in the public domain.
+
+dnl Authors:
+dnl   Ulrich Drepper <drepper@cygnus.com>, 1995-2000.
+dnl   Bruno Haible <haible@clisp.cons.org>, 2000-2003.
+
+dnl Macro to add for using GNU gettext.
+
+dnl Usage: AM_GNU_GETTEXT([INTLSYMBOL], [NEEDSYMBOL], [INTLDIR]).
+dnl INTLSYMBOL can be one of 'external', 'no-libtool', 'use-libtool'. The
+dnl    default (if it is not specified or empty) is 'no-libtool'.
+dnl    INTLSYMBOL should be 'external' for packages with no intl directory,
+dnl    and 'no-libtool' or 'use-libtool' for packages with an intl directory.
+dnl    If INTLSYMBOL is 'use-libtool', then a libtool library
+dnl    $(top_builddir)/intl/libintl.la will be created (shared and/or static,
+dnl    depending on --{enable,disable}-{shared,static} and on the presence of
+dnl    AM-DISABLE-SHARED). If INTLSYMBOL is 'no-libtool', a static library
+dnl    $(top_builddir)/intl/libintl.a will be created.
+dnl If NEEDSYMBOL is specified and is 'need-ngettext', then GNU gettext
+dnl    implementations (in libc or libintl) without the ngettext() function
+dnl    will be ignored.  If NEEDSYMBOL is specified and is
+dnl    'need-formatstring-macros', then GNU gettext implementations that don't
+dnl    support the ISO C 99 <inttypes.h> formatstring macros will be ignored.
+dnl INTLDIR is used to find the intl libraries.  If empty,
+dnl    the value `$(top_builddir)/intl/' is used.
+dnl
+dnl The result of the configuration is one of three cases:
+dnl 1) GNU gettext, as included in the intl subdirectory, will be compiled
+dnl    and used.
+dnl    Catalog format: GNU --> install in $(datadir)
+dnl    Catalog extension: .mo after installation, .gmo in source tree
+dnl 2) GNU gettext has been found in the system's C library.
+dnl    Catalog format: GNU --> install in $(datadir)
+dnl    Catalog extension: .mo after installation, .gmo in source tree
+dnl 3) No internationalization, always use English msgid.
+dnl    Catalog format: none
+dnl    Catalog extension: none
+dnl If INTLSYMBOL is 'external', only cases 2 and 3 can occur.
+dnl The use of .gmo is historical (it was needed to avoid overwriting the
+dnl GNU format catalogs when building on a platform with an X/Open gettext),
+dnl but we keep it in order not to force irrelevant filename changes on the
+dnl maintainers.
+dnl
+AC_DEFUN([AM_GNU_GETTEXT],
+[
+  dnl Argument checking.
+  ifelse([$1], [], , [ifelse([$1], [external], , [ifelse([$1], [no-libtool], , [ifelse([$1], [use-libtool], ,
+    [errprint([ERROR: invalid first argument to AM_GNU_GETTEXT
+])])])])])
+  ifelse([$2], [], , [ifelse([$2], [need-ngettext], , [ifelse([$2], [need-formatstring-macros], ,
+    [errprint([ERROR: invalid second argument to AM_GNU_GETTEXT
+])])])])
+  define(gt_included_intl, ifelse([$1], [external], [no], [yes]))
+  define(gt_libtool_suffix_prefix, ifelse([$1], [use-libtool], [l], []))
+
+  AC_REQUIRE([AM_PO_SUBDIRS])dnl
+  ifelse(gt_included_intl, yes, [
+    AC_REQUIRE([AM_INTL_SUBDIR])dnl
+  ])
+
+  dnl Prerequisites of AC_LIB_LINKFLAGS_BODY.
+  AC_REQUIRE([AC_LIB_PREPARE_PREFIX])
+  AC_REQUIRE([AC_LIB_RPATH])
+
+  dnl Sometimes libintl requires libiconv, so first search for libiconv.
+  dnl Ideally we would do this search only after the
+  dnl      if test "$USE_NLS" = "yes"; then
+  dnl        if test "$gt_cv_func_gnugettext_libc" != "yes"; then
+  dnl tests. But if configure.in invokes AM_ICONV after AM_GNU_GETTEXT
+  dnl the configure script would need to contain the same shell code
+  dnl again, outside any 'if'. There are two solutions:
+  dnl - Invoke AM_ICONV_LINKFLAGS_BODY here, outside any 'if'.
+  dnl - Control the expansions in more detail using AC_PROVIDE_IFELSE.
+  dnl Since AC_PROVIDE_IFELSE is only in autoconf >= 2.52 and not
+  dnl documented, we avoid it.
+  ifelse(gt_included_intl, yes, , [
+    AC_REQUIRE([AM_ICONV_LINKFLAGS_BODY])
+  ])
+
+  dnl Set USE_NLS.
+  AM_NLS
+
+  ifelse(gt_included_intl, yes, [
+    BUILD_INCLUDED_LIBINTL=no
+    USE_INCLUDED_LIBINTL=no
+  ])
+  LIBINTL=
+  LTLIBINTL=
+  POSUB=
+
+  dnl If we use NLS figure out what method
+  if test "$USE_NLS" = "yes"; then
+    gt_use_preinstalled_gnugettext=no
+    ifelse(gt_included_intl, yes, [
+      AC_MSG_CHECKING([whether included gettext is requested])
+      AC_ARG_WITH(included-gettext,
+        [  --with-included-gettext use the GNU gettext library included here],
+        nls_cv_force_use_gnu_gettext=$withval,
+        nls_cv_force_use_gnu_gettext=no)
+      AC_MSG_RESULT($nls_cv_force_use_gnu_gettext)
+
+      nls_cv_use_gnu_gettext="$nls_cv_force_use_gnu_gettext"
+      if test "$nls_cv_force_use_gnu_gettext" != "yes"; then
+    ])
+        dnl User does not insist on using GNU NLS library.  Figure out what
+        dnl to use.  If GNU gettext is available we use this.  Else we have
+        dnl to fall back to GNU NLS library.
+
+        dnl Add a version number to the cache macros.
+        define([gt_api_version], ifelse([$2], [need-formatstring-macros], 3, ifelse([$2], [need-ngettext], 2, 1)))
+        define([gt_cv_func_gnugettext_libc], [gt_cv_func_gnugettext]gt_api_version[_libc])
+        define([gt_cv_func_gnugettext_libintl], [gt_cv_func_gnugettext]gt_api_version[_libintl])
+
+        AC_CACHE_CHECK([for GNU gettext in libc], gt_cv_func_gnugettext_libc,
+         [AC_TRY_LINK([#include <libintl.h>
+]ifelse([$2], [need-formatstring-macros],
+[#ifndef __GNU_GETTEXT_SUPPORTED_REVISION
+#define __GNU_GETTEXT_SUPPORTED_REVISION(major) ((major) == 0 ? 0 : -1)
+#endif
+changequote(,)dnl
+typedef int array [2 * (__GNU_GETTEXT_SUPPORTED_REVISION(0) >= 1) - 1];
+changequote([,])dnl
+], [])[extern int _nl_msg_cat_cntr;
+extern int *_nl_domain_bindings;],
+            [bindtextdomain ("", "");
+return (int) gettext ("")]ifelse([$2], [need-ngettext], [ + (int) ngettext ("", "", 0)], [])[ + _nl_msg_cat_cntr + *_nl_domain_bindings],
+            gt_cv_func_gnugettext_libc=yes,
+            gt_cv_func_gnugettext_libc=no)])
+
+        if test "$gt_cv_func_gnugettext_libc" != "yes"; then
+          dnl Sometimes libintl requires libiconv, so first search for libiconv.
+          ifelse(gt_included_intl, yes, , [
+            AM_ICONV_LINK
+          ])
+          dnl Search for libintl and define LIBINTL, LTLIBINTL and INCINTL
+          dnl accordingly. Don't use AC_LIB_LINKFLAGS_BODY([intl],[iconv])
+          dnl because that would add "-liconv" to LIBINTL and LTLIBINTL
+          dnl even if libiconv doesn't exist.
+          AC_LIB_LINKFLAGS_BODY([intl])
+          AC_CACHE_CHECK([for GNU gettext in libintl],
+            gt_cv_func_gnugettext_libintl,
+           [gt_save_CPPFLAGS="$CPPFLAGS"
+            CPPFLAGS="$CPPFLAGS $INCINTL"
+            gt_save_LIBS="$LIBS"
+            LIBS="$LIBS $LIBINTL"
+            dnl Now see whether libintl exists and does not depend on libiconv.
+            AC_TRY_LINK([#include <libintl.h>
+]ifelse([$2], [need-formatstring-macros],
+[#ifndef __GNU_GETTEXT_SUPPORTED_REVISION
+#define __GNU_GETTEXT_SUPPORTED_REVISION(major) ((major) == 0 ? 0 : -1)
+#endif
+changequote(,)dnl
+typedef int array [2 * (__GNU_GETTEXT_SUPPORTED_REVISION(0) >= 1) - 1];
+changequote([,])dnl
+], [])[extern int _nl_msg_cat_cntr;
+extern
+#ifdef __cplusplus
+"C"
+#endif
+const char *_nl_expand_alias ();],
+              [bindtextdomain ("", "");
+return (int) gettext ("")]ifelse([$2], [need-ngettext], [ + (int) ngettext ("", "", 0)], [])[ + _nl_msg_cat_cntr + *_nl_expand_alias (0)],
+              gt_cv_func_gnugettext_libintl=yes,
+              gt_cv_func_gnugettext_libintl=no)
+            dnl Now see whether libintl exists and depends on libiconv.
+            if test "$gt_cv_func_gnugettext_libintl" != yes && test -n "$LIBICONV"; then
+              LIBS="$LIBS $LIBICONV"
+              AC_TRY_LINK([#include <libintl.h>
+]ifelse([$2], [need-formatstring-macros],
+[#ifndef __GNU_GETTEXT_SUPPORTED_REVISION
+#define __GNU_GETTEXT_SUPPORTED_REVISION(major) ((major) == 0 ? 0 : -1)
+#endif
+changequote(,)dnl
+typedef int array [2 * (__GNU_GETTEXT_SUPPORTED_REVISION(0) >= 1) - 1];
+changequote([,])dnl
+], [])[extern int _nl_msg_cat_cntr;
+extern
+#ifdef __cplusplus
+"C"
+#endif
+const char *_nl_expand_alias ();],
+                [bindtextdomain ("", "");
+return (int) gettext ("")]ifelse([$2], [need-ngettext], [ + (int) ngettext ("", "", 0)], [])[ + _nl_msg_cat_cntr + *_nl_expand_alias (0)],
+               [LIBINTL="$LIBINTL $LIBICONV"
+                LTLIBINTL="$LTLIBINTL $LTLIBICONV"
+                gt_cv_func_gnugettext_libintl=yes
+               ])
+            fi
+            CPPFLAGS="$gt_save_CPPFLAGS"
+            LIBS="$gt_save_LIBS"])
+        fi
+
+        dnl If an already present or preinstalled GNU gettext() is found,
+        dnl use it.  But if this macro is used in GNU gettext, and GNU
+        dnl gettext is already preinstalled in libintl, we update this
+        dnl libintl.  (Cf. the install rule in intl/Makefile.in.)
+        if test "$gt_cv_func_gnugettext_libc" = "yes" \
+           || { test "$gt_cv_func_gnugettext_libintl" = "yes" \
+                && test "$PACKAGE" != gettext-runtime \
+                && test "$PACKAGE" != gettext-tools; }; then
+          gt_use_preinstalled_gnugettext=yes
+        else
+          dnl Reset the values set by searching for libintl.
+          LIBINTL=
+          LTLIBINTL=
+          INCINTL=
+        fi
+
+    ifelse(gt_included_intl, yes, [
+        if test "$gt_use_preinstalled_gnugettext" != "yes"; then
+          dnl GNU gettext is not found in the C library.
+          dnl Fall back on included GNU gettext library.
+          nls_cv_use_gnu_gettext=yes
+        fi
+      fi
+
+      if test "$nls_cv_use_gnu_gettext" = "yes"; then
+        dnl Mark actions used to generate GNU NLS library.
+        BUILD_INCLUDED_LIBINTL=yes
+        USE_INCLUDED_LIBINTL=yes
+        LIBINTL="ifelse([$3],[],\${top_builddir}/intl,[$3])/libintl.[]gt_libtool_suffix_prefix[]a $LIBICONV"
+        LTLIBINTL="ifelse([$3],[],\${top_builddir}/intl,[$3])/libintl.[]gt_libtool_suffix_prefix[]a $LTLIBICONV"
+        LIBS=`echo " $LIBS " | sed -e 's/ -lintl / /' -e 's/^ //' -e 's/ $//'`
+      fi
+
+      if test "$gt_use_preinstalled_gnugettext" = "yes" \
+         || test "$nls_cv_use_gnu_gettext" = "yes"; then
+        dnl Mark actions to use GNU gettext tools.
+        CATOBJEXT=.gmo
+      fi
+    ])
+
+    if test "$gt_use_preinstalled_gnugettext" = "yes" \
+       || test "$nls_cv_use_gnu_gettext" = "yes"; then
+      AC_DEFINE(ENABLE_NLS, 1,
+        [Define to 1 if translation of program messages to the user's native language
+   is requested.])
+    else
+      USE_NLS=no
+    fi
+  fi
+
+  AC_MSG_CHECKING([whether to use NLS])
+  AC_MSG_RESULT([$USE_NLS])
+  if test "$USE_NLS" = "yes"; then
+    AC_MSG_CHECKING([where the gettext function comes from])
+    if test "$gt_use_preinstalled_gnugettext" = "yes"; then
+      if test "$gt_cv_func_gnugettext_libintl" = "yes"; then
+        gt_source="external libintl"
+      else
+        gt_source="libc"
+      fi
+    else
+      gt_source="included intl directory"
+    fi
+    AC_MSG_RESULT([$gt_source])
+  fi
+
+  if test "$USE_NLS" = "yes"; then
+
+    if test "$gt_use_preinstalled_gnugettext" = "yes"; then
+      if test "$gt_cv_func_gnugettext_libintl" = "yes"; then
+        AC_MSG_CHECKING([how to link with libintl])
+        AC_MSG_RESULT([$LIBINTL])
+        AC_LIB_APPENDTOVAR([CPPFLAGS], [$INCINTL])
+      fi
+
+      dnl For backward compatibility. Some packages may be using this.
+      AC_DEFINE(HAVE_GETTEXT, 1,
+       [Define if the GNU gettext() function is already present or preinstalled.])
+      AC_DEFINE(HAVE_DCGETTEXT, 1,
+       [Define if the GNU dcgettext() function is already present or preinstalled.])
+    fi
+
+    dnl We need to process the po/ directory.
+    POSUB=po
+  fi
+
+  ifelse(gt_included_intl, yes, [
+    dnl If this is used in GNU gettext we have to set BUILD_INCLUDED_LIBINTL
+    dnl to 'yes' because some of the testsuite requires it.
+    if test "$PACKAGE" = gettext-runtime || test "$PACKAGE" = gettext-tools; then
+      BUILD_INCLUDED_LIBINTL=yes
+    fi
+
+    dnl Make all variables we use known to autoconf.
+    AC_SUBST(BUILD_INCLUDED_LIBINTL)
+    AC_SUBST(USE_INCLUDED_LIBINTL)
+    AC_SUBST(CATOBJEXT)
+
+    dnl For backward compatibility. Some configure.ins may be using this.
+    nls_cv_header_intl=
+    nls_cv_header_libgt=
+
+    dnl For backward compatibility. Some Makefiles may be using this.
+    DATADIRNAME=share
+    AC_SUBST(DATADIRNAME)
+
+    dnl For backward compatibility. Some Makefiles may be using this.
+    INSTOBJEXT=.mo
+    AC_SUBST(INSTOBJEXT)
+
+    dnl For backward compatibility. Some Makefiles may be using this.
+    GENCAT=gencat
+    AC_SUBST(GENCAT)
+
+    dnl For backward compatibility. Some Makefiles may be using this.
+    if test "$USE_INCLUDED_LIBINTL" = yes; then
+      INTLOBJS="\$(GETTOBJS)"
+    fi
+    AC_SUBST(INTLOBJS)
+
+    dnl Enable libtool support if the surrounding package wishes it.
+    INTL_LIBTOOL_SUFFIX_PREFIX=gt_libtool_suffix_prefix
+    AC_SUBST(INTL_LIBTOOL_SUFFIX_PREFIX)
+  ])
+
+  dnl For backward compatibility. Some Makefiles may be using this.
+  INTLLIBS="$LIBINTL"
+  AC_SUBST(INTLLIBS)
+
+  dnl Make all documented variables known to autoconf.
+  AC_SUBST(LIBINTL)
+  AC_SUBST(LTLIBINTL)
+  AC_SUBST(POSUB)
+])
+
+
+dnl Checks for all prerequisites of the intl subdirectory,
+dnl except for INTL_LIBTOOL_SUFFIX_PREFIX (and possibly LIBTOOL), INTLOBJS,
+dnl            USE_INCLUDED_LIBINTL, BUILD_INCLUDED_LIBINTL.
+AC_DEFUN([AM_INTL_SUBDIR],
+[
+  AC_REQUIRE([AC_PROG_INSTALL])dnl
+  AC_REQUIRE([AM_MKINSTALLDIRS])dnl
+  AC_REQUIRE([AC_PROG_CC])dnl
+  AC_REQUIRE([AC_CANONICAL_HOST])dnl
+  AC_REQUIRE([AC_PROG_RANLIB])dnl
+  AC_REQUIRE([AC_ISC_POSIX])dnl
+  AC_REQUIRE([AC_HEADER_STDC])dnl
+  AC_REQUIRE([AC_C_CONST])dnl
+  AC_REQUIRE([bh_C_SIGNED])dnl
+  AC_REQUIRE([AC_C_INLINE])dnl
+  AC_REQUIRE([AC_TYPE_OFF_T])dnl
+  AC_REQUIRE([AC_TYPE_SIZE_T])dnl
+  AC_REQUIRE([jm_AC_TYPE_LONG_LONG])dnl
+  AC_REQUIRE([gt_TYPE_LONGDOUBLE])dnl
+  AC_REQUIRE([gt_TYPE_WCHAR_T])dnl
+  AC_REQUIRE([gt_TYPE_WINT_T])dnl
+  AC_REQUIRE([jm_AC_HEADER_INTTYPES_H])
+  AC_REQUIRE([jm_AC_HEADER_STDINT_H])
+  AC_REQUIRE([gt_TYPE_INTMAX_T])
+  AC_REQUIRE([gt_PRINTF_POSIX])
+  AC_REQUIRE([AC_FUNC_ALLOCA])dnl
+  AC_REQUIRE([AC_FUNC_MMAP])dnl
+  AC_REQUIRE([jm_GLIBC21])dnl
+  AC_REQUIRE([gt_INTDIV0])dnl
+  AC_REQUIRE([jm_AC_TYPE_UINTMAX_T])dnl
+  AC_REQUIRE([gt_HEADER_INTTYPES_H])dnl
+  AC_REQUIRE([gt_INTTYPES_PRI])dnl
+  AC_REQUIRE([gl_XSIZE])dnl
+
+  AC_CHECK_TYPE([ptrdiff_t], ,
+    [AC_DEFINE([ptrdiff_t], [long],
+       [Define as the type of the result of subtracting two pointers, if the system doesn't define it.])
+    ])
+  AC_CHECK_HEADERS([argz.h limits.h locale.h nl_types.h malloc.h stddef.h \
+stdlib.h string.h unistd.h sys/param.h])
+  AC_CHECK_FUNCS([asprintf fwprintf getcwd getegid geteuid getgid getuid \
+mempcpy munmap putenv setenv setlocale snprintf stpcpy strcasecmp strdup \
+strtoul tsearch wcslen __argz_count __argz_stringify __argz_next \
+__fsetlocking])
+
+  dnl Use the _snprintf function only if it is declared (because on NetBSD it
+  dnl is defined as a weak alias of snprintf; we prefer to use the latter).
+  gt_CHECK_DECL(_snprintf, [#include <stdio.h>])
+  gt_CHECK_DECL(_snwprintf, [#include <stdio.h>])
+
+  dnl Use the *_unlocked functions only if they are declared.
+  dnl (because some of them were defined without being declared in Solaris
+  dnl 2.5.1 but were removed in Solaris 2.6, whereas we want binaries built
+  dnl on Solaris 2.5.1 to run on Solaris 2.6).
+  dnl Don't use AC_CHECK_DECLS because it isn't supported in autoconf-2.13.
+  gt_CHECK_DECL(feof_unlocked, [#include <stdio.h>])
+  gt_CHECK_DECL(fgets_unlocked, [#include <stdio.h>])
+  gt_CHECK_DECL(getc_unlocked, [#include <stdio.h>])
+
+  case $gt_cv_func_printf_posix in
+    *yes) HAVE_POSIX_PRINTF=1 ;;
+    *) HAVE_POSIX_PRINTF=0 ;;
+  esac
+  AC_SUBST([HAVE_POSIX_PRINTF])
+  if test "$ac_cv_func_asprintf" = yes; then
+    HAVE_ASPRINTF=1
+  else
+    HAVE_ASPRINTF=0
+  fi
+  AC_SUBST([HAVE_ASPRINTF])
+  if test "$ac_cv_func_snprintf" = yes; then
+    HAVE_SNPRINTF=1
+  else
+    HAVE_SNPRINTF=0
+  fi
+  AC_SUBST([HAVE_SNPRINTF])
+  if test "$ac_cv_func_wprintf" = yes; then
+    HAVE_WPRINTF=1
+  else
+    HAVE_WPRINTF=0
+  fi
+  AC_SUBST([HAVE_WPRINTF])
+
+  AM_ICONV
+  AM_LANGINFO_CODESET
+  if test $ac_cv_header_locale_h = yes; then
+    AM_LC_MESSAGES
+  fi
+
+  dnl intl/plural.c is generated from intl/plural.y. It requires bison,
+  dnl because plural.y uses bison specific features. It requires at least
+  dnl bison-1.26 because earlier versions generate a plural.c that doesn't
+  dnl compile.
+  dnl bison is only needed for the maintainer (who touches plural.y). But in
+  dnl order to avoid separate Makefiles or --enable-maintainer-mode, we put
+  dnl the rule in general Makefile. Now, some people carelessly touch the
+  dnl files or have a broken "make" program, hence the plural.c rule will
+  dnl sometimes fire. To avoid an error, defines BISON to ":" if it is not
+  dnl present or too old.
+  AC_CHECK_PROGS([INTLBISON], [bison])
+  if test -z "$INTLBISON"; then
+    ac_verc_fail=yes
+  else
+    dnl Found it, now check the version.
+    AC_MSG_CHECKING([version of bison])
+changequote(<<,>>)dnl
+    ac_prog_version=`$INTLBISON --version 2>&1 | sed -n 's/^.*GNU Bison.* \([0-9]*\.[0-9.]*\).*$/\1/p'`
+    case $ac_prog_version in
+      '') ac_prog_version="v. ?.??, bad"; ac_verc_fail=yes;;
+      1.2[6-9]* | 1.[3-9][0-9]* | [2-9].*)
+changequote([,])dnl
+         ac_prog_version="$ac_prog_version, ok"; ac_verc_fail=no;;
+      *) ac_prog_version="$ac_prog_version, bad"; ac_verc_fail=yes;;
+    esac
+    AC_MSG_RESULT([$ac_prog_version])
+  fi
+  if test $ac_verc_fail = yes; then
+    INTLBISON=:
+  fi
+])
+
+
+dnl gt_CHECK_DECL(FUNC, INCLUDES)
+dnl Check whether a function is declared.
+AC_DEFUN([gt_CHECK_DECL],
+[
+  AC_CACHE_CHECK([whether $1 is declared], ac_cv_have_decl_$1,
+    [AC_TRY_COMPILE([$2], [
+#ifndef $1
+  char *p = (char *) $1;
+#endif
+], ac_cv_have_decl_$1=yes, ac_cv_have_decl_$1=no)])
+  if test $ac_cv_have_decl_$1 = yes; then
+    gt_value=1
+  else
+    gt_value=0
+  fi
+  AC_DEFINE_UNQUOTED([HAVE_DECL_]translit($1, [a-z], [A-Z]), [$gt_value],
+    [Define to 1 if you have the declaration of `$1', and to 0 if you don't.])
+])
+
+
+dnl Usage: AM_GNU_GETTEXT_VERSION([gettext-version])
+AC_DEFUN([AM_GNU_GETTEXT_VERSION], [])
diff --git a/m4/glibc21.m4 b/m4/glibc21.m4
new file mode 100755 (executable)
index 0000000..9c9f3db
--- /dev/null
@@ -0,0 +1,32 @@
+# glibc21.m4 serial 2 (fileutils-4.1.3, gettext-0.10.40)
+dnl Copyright (C) 2000-2002 Free Software Foundation, Inc.
+dnl This file is free software, distributed under the terms of the GNU
+dnl General Public License.  As a special exception to the GNU General
+dnl Public License, this file may be distributed as part of a program
+dnl that contains a configuration script generated by Autoconf, under
+dnl the same distribution terms as the rest of that program.
+
+# Test for the GNU C Library, version 2.1 or newer.
+# From Bruno Haible.
+
+AC_DEFUN([jm_GLIBC21],
+  [
+    AC_CACHE_CHECK(whether we are using the GNU C Library 2.1 or newer,
+      ac_cv_gnu_library_2_1,
+      [AC_EGREP_CPP([Lucky GNU user],
+       [
+#include <features.h>
+#ifdef __GNU_LIBRARY__
+ #if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 1) || (__GLIBC__ > 2)
+  Lucky GNU user
+ #endif
+#endif
+       ],
+       ac_cv_gnu_library_2_1=yes,
+       ac_cv_gnu_library_2_1=no)
+      ]
+    )
+    AC_SUBST(GLIBC21)
+    GLIBC21="$ac_cv_gnu_library_2_1"
+  ]
+)
diff --git a/m4/iconv.m4 b/m4/iconv.m4
new file mode 100755 (executable)
index 0000000..c5f3579
--- /dev/null
@@ -0,0 +1,103 @@
+# iconv.m4 serial AM4 (gettext-0.11.3)
+dnl Copyright (C) 2000-2002 Free Software Foundation, Inc.
+dnl This file is free software, distributed under the terms of the GNU
+dnl General Public License.  As a special exception to the GNU General
+dnl Public License, this file may be distributed as part of a program
+dnl that contains a configuration script generated by Autoconf, under
+dnl the same distribution terms as the rest of that program.
+
+dnl From Bruno Haible.
+
+AC_DEFUN([AM_ICONV_LINKFLAGS_BODY],
+[
+  dnl Prerequisites of AC_LIB_LINKFLAGS_BODY.
+  AC_REQUIRE([AC_LIB_PREPARE_PREFIX])
+  AC_REQUIRE([AC_LIB_RPATH])
+
+  dnl Search for libiconv and define LIBICONV, LTLIBICONV and INCICONV
+  dnl accordingly.
+  AC_LIB_LINKFLAGS_BODY([iconv])
+])
+
+AC_DEFUN([AM_ICONV_LINK],
+[
+  dnl Some systems have iconv in libc, some have it in libiconv (OSF/1 and
+  dnl those with the standalone portable GNU libiconv installed).
+
+  dnl Search for libiconv and define LIBICONV, LTLIBICONV and INCICONV
+  dnl accordingly.
+  AC_REQUIRE([AM_ICONV_LINKFLAGS_BODY])
+
+  dnl Add $INCICONV to CPPFLAGS before performing the following checks,
+  dnl because if the user has installed libiconv and not disabled its use
+  dnl via --without-libiconv-prefix, he wants to use it. The first
+  dnl AC_TRY_LINK will then fail, the second AC_TRY_LINK will succeed.
+  am_save_CPPFLAGS="$CPPFLAGS"
+  AC_LIB_APPENDTOVAR([CPPFLAGS], [$INCICONV])
+
+  AC_CACHE_CHECK(for iconv, am_cv_func_iconv, [
+    am_cv_func_iconv="no, consider installing GNU libiconv"
+    am_cv_lib_iconv=no
+    AC_TRY_LINK([#include <stdlib.h>
+#include <iconv.h>],
+      [iconv_t cd = iconv_open("","");
+       iconv(cd,NULL,NULL,NULL,NULL);
+       iconv_close(cd);],
+      am_cv_func_iconv=yes)
+    if test "$am_cv_func_iconv" != yes; then
+      am_save_LIBS="$LIBS"
+      LIBS="$LIBS $LIBICONV"
+      AC_TRY_LINK([#include <stdlib.h>
+#include <iconv.h>],
+        [iconv_t cd = iconv_open("","");
+         iconv(cd,NULL,NULL,NULL,NULL);
+         iconv_close(cd);],
+        am_cv_lib_iconv=yes
+        am_cv_func_iconv=yes)
+      LIBS="$am_save_LIBS"
+    fi
+  ])
+  if test "$am_cv_func_iconv" = yes; then
+    AC_DEFINE(HAVE_ICONV, 1, [Define if you have the iconv() function.])
+  fi
+  if test "$am_cv_lib_iconv" = yes; then
+    AC_MSG_CHECKING([how to link with libiconv])
+    AC_MSG_RESULT([$LIBICONV])
+  else
+    dnl If $LIBICONV didn't lead to a usable library, we don't need $INCICONV
+    dnl either.
+    CPPFLAGS="$am_save_CPPFLAGS"
+    LIBICONV=
+    LTLIBICONV=
+  fi
+  AC_SUBST(LIBICONV)
+  AC_SUBST(LTLIBICONV)
+])
+
+AC_DEFUN([AM_ICONV],
+[
+  AM_ICONV_LINK
+  if test "$am_cv_func_iconv" = yes; then
+    AC_MSG_CHECKING([for iconv declaration])
+    AC_CACHE_VAL(am_cv_proto_iconv, [
+      AC_TRY_COMPILE([
+#include <stdlib.h>
+#include <iconv.h>
+extern
+#ifdef __cplusplus
+"C"
+#endif
+#if defined(__STDC__) || defined(__cplusplus)
+size_t iconv (iconv_t cd, char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);
+#else
+size_t iconv();
+#endif
+], [], am_cv_proto_iconv_arg1="", am_cv_proto_iconv_arg1="const")
+      am_cv_proto_iconv="extern size_t iconv (iconv_t cd, $am_cv_proto_iconv_arg1 char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);"])
+    am_cv_proto_iconv=`echo "[$]am_cv_proto_iconv" | tr -s ' ' | sed -e 's/( /(/'`
+    AC_MSG_RESULT([$]{ac_t:-
+         }[$]am_cv_proto_iconv)
+    AC_DEFINE_UNQUOTED(ICONV_CONST, $am_cv_proto_iconv_arg1,
+      [Define as const if the declaration of iconv() needs const.])
+  fi
+])
diff --git a/m4/intdiv0.m4 b/m4/intdiv0.m4
new file mode 100755 (executable)
index 0000000..55dddcf
--- /dev/null
@@ -0,0 +1,72 @@
+# intdiv0.m4 serial 1 (gettext-0.11.3)
+dnl Copyright (C) 2002 Free Software Foundation, Inc.
+dnl This file is free software, distributed under the terms of the GNU
+dnl General Public License.  As a special exception to the GNU General
+dnl Public License, this file may be distributed as part of a program
+dnl that contains a configuration script generated by Autoconf, under
+dnl the same distribution terms as the rest of that program.
+
+dnl From Bruno Haible.
+
+AC_DEFUN([gt_INTDIV0],
+[
+  AC_REQUIRE([AC_PROG_CC])dnl
+  AC_REQUIRE([AC_CANONICAL_HOST])dnl
+
+  AC_CACHE_CHECK([whether integer division by zero raises SIGFPE],
+    gt_cv_int_divbyzero_sigfpe,
+    [
+      AC_TRY_RUN([
+#include <stdlib.h>
+#include <signal.h>
+
+static void
+#ifdef __cplusplus
+sigfpe_handler (int sig)
+#else
+sigfpe_handler (sig) int sig;
+#endif
+{
+  /* Exit with code 0 if SIGFPE, with code 1 if any other signal.  */
+  exit (sig != SIGFPE);
+}
+
+int x = 1;
+int y = 0;
+int z;
+int nan;
+
+int main ()
+{
+  signal (SIGFPE, sigfpe_handler);
+/* IRIX and AIX (when "xlc -qcheck" is used) yield signal SIGTRAP.  */
+#if (defined (__sgi) || defined (_AIX)) && defined (SIGTRAP)
+  signal (SIGTRAP, sigfpe_handler);
+#endif
+/* Linux/SPARC yields signal SIGILL.  */
+#if defined (__sparc__) && defined (__linux__)
+  signal (SIGILL, sigfpe_handler);
+#endif
+
+  z = x / y;
+  nan = y / y;
+  exit (1);
+}
+], gt_cv_int_divbyzero_sigfpe=yes, gt_cv_int_divbyzero_sigfpe=no,
+        [
+          # Guess based on the CPU.
+          case "$host_cpu" in
+            alpha* | i[34567]86 | m68k | s390*)
+              gt_cv_int_divbyzero_sigfpe="guessing yes";;
+            *)
+              gt_cv_int_divbyzero_sigfpe="guessing no";;
+          esac
+        ])
+    ])
+  case "$gt_cv_int_divbyzero_sigfpe" in
+    *yes) value=1;;
+    *) value=0;;
+  esac
+  AC_DEFINE_UNQUOTED(INTDIV0_RAISES_SIGFPE, $value,
+    [Define if integer division by zero raises signal SIGFPE.])
+])
diff --git a/m4/intltool.m4 b/m4/intltool.m4
new file mode 100755 (executable)
index 0000000..4297ba9
--- /dev/null
@@ -0,0 +1,215 @@
+## intltool.m4 - Configure intltool for the target system. -*-Shell-script-*-
+## Copyright (C) 2001 Eazel, Inc.
+## Author: Maciej Stachowiak <mjs@noisehavoc.org>
+##         Kenneth Christiansen <kenneth@gnu.org>
+##
+## This program is free software; you can redistribute it and/or modify
+## it under the terms of the GNU General Public License as published by
+## the Free Software Foundation; either version 2 of the License, or
+## (at your option) any later version.
+##
+## This program is distributed in the hope that it will be useful, but
+## WITHOUT ANY WARRANTY; without even the implied warranty of
+## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+## General Public License for more details.
+##
+## You should have received a copy of the GNU General Public License
+## along with this program; if not, write to the Free Software
+## Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+##
+## As a special exception to the GNU General Public License, if you
+## distribute this file as part of a program that contains a
+## configuration script generated by Autoconf, you may include it under
+## the same distribution terms that you use for the rest of that program.
+
+dnl IT_PROG_INTLTOOL([MINIMUM-VERSION], [no-xml])
+# serial 2 IT_PROG_INTLTOOL
+AC_DEFUN([IT_PROG_INTLTOOL],
+[
+
+if test -n "$1"; then
+    AC_MSG_CHECKING(for intltool >= $1)
+
+    INTLTOOL_REQUIRED_VERSION_AS_INT=`echo $1 | awk -F. '{ printf "%d", $[1] * 100 + $[2]; }'`
+    INTLTOOL_APPLIED_VERSION=`awk -F\" '/\\$VERSION / { printf $[2]; }'  < ${ac_aux_dir}/intltool-update.in`
+    changequote({{,}})
+    INTLTOOL_APPLIED_VERSION_AS_INT=`awk -F\" '/\\$VERSION / { split(${{2}}, VERSION, "."); printf "%d\n", VERSION[1] * 100 + VERSION[2];}' < ${ac_aux_dir}/intltool-update.in`
+    changequote([,])
+
+    if test "$INTLTOOL_APPLIED_VERSION_AS_INT" -ge "$INTLTOOL_REQUIRED_VERSION_AS_INT"; then
+       AC_MSG_RESULT([$INTLTOOL_APPLIED_VERSION found])
+    else
+       AC_MSG_RESULT([$INTLTOOL_APPLIED_VERSION found. Your intltool is too old.  You need intltool $1 or later.])
+       exit 1
+    fi
+fi
+
+  INTLTOOL_DESKTOP_RULE='%.desktop:   %.desktop.in   $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' 
+INTLTOOL_DIRECTORY_RULE='%.directory: %.directory.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' 
+     INTLTOOL_KEYS_RULE='%.keys:      %.keys.in      $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -k -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' 
+     INTLTOOL_PROP_RULE='%.prop:      %.prop.in      $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' 
+      INTLTOOL_OAF_RULE='%.oaf:       %.oaf.in       $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -o -p $(top_srcdir)/po $< [$]@'
+     INTLTOOL_PONG_RULE='%.pong:      %.pong.in      $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' 
+   INTLTOOL_SERVER_RULE='%.server:    %.server.in    $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -o -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' 
+    INTLTOOL_SHEET_RULE='%.sheet:     %.sheet.in     $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' 
+INTLTOOL_SOUNDLIST_RULE='%.soundlist: %.soundlist.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' 
+       INTLTOOL_UI_RULE='%.ui:        %.ui.in        $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' 
+      INTLTOOL_XML_RULE='%.xml:       %.xml.in       $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' 
+      INTLTOOL_XML_NOMERGE_RULE='%.xml:       %.xml.in       $(INTLTOOL_MERGE) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u /tmp $< [$]@' 
+      INTLTOOL_XAM_RULE='%.xam:       %.xml.in       $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' 
+      INTLTOOL_KBD_RULE='%.kbd:       %.kbd.in       $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u -m -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' 
+    INTLTOOL_CAVES_RULE='%.caves:     %.caves.in     $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' 
+  INTLTOOL_SCHEMAS_RULE='%.schemas:   %.schemas.in   $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -s -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' 
+    INTLTOOL_THEME_RULE='%.theme:     %.theme.in     $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' 
+
+AC_SUBST(INTLTOOL_DESKTOP_RULE)
+AC_SUBST(INTLTOOL_DIRECTORY_RULE)
+AC_SUBST(INTLTOOL_KEYS_RULE)
+AC_SUBST(INTLTOOL_PROP_RULE)
+AC_SUBST(INTLTOOL_OAF_RULE)
+AC_SUBST(INTLTOOL_PONG_RULE)
+AC_SUBST(INTLTOOL_SERVER_RULE)
+AC_SUBST(INTLTOOL_SHEET_RULE)
+AC_SUBST(INTLTOOL_SOUNDLIST_RULE)
+AC_SUBST(INTLTOOL_UI_RULE)
+AC_SUBST(INTLTOOL_XAM_RULE)
+AC_SUBST(INTLTOOL_KBD_RULE)
+AC_SUBST(INTLTOOL_XML_RULE)
+AC_SUBST(INTLTOOL_XML_NOMERGE_RULE)
+AC_SUBST(INTLTOOL_CAVES_RULE)
+AC_SUBST(INTLTOOL_SCHEMAS_RULE)
+AC_SUBST(INTLTOOL_THEME_RULE)
+
+# Use the tools built into the package, not the ones that are installed.
+
+INTLTOOL_EXTRACT='$(top_builddir)/intltool-extract'
+INTLTOOL_MERGE='$(top_builddir)/intltool-merge'
+INTLTOOL_UPDATE='$(top_builddir)/intltool-update'
+
+AC_SUBST(INTLTOOL_EXTRACT)
+AC_SUBST(INTLTOOL_MERGE)
+AC_SUBST(INTLTOOL_UPDATE)
+
+AC_PATH_PROG(INTLTOOL_PERL, perl)
+if test -z "$INTLTOOL_PERL"; then
+   AC_MSG_ERROR([perl not found; required for intltool])
+fi
+if test -z "`$INTLTOOL_PERL -v | fgrep '5.' 2> /dev/null`"; then
+   AC_MSG_ERROR([perl 5.x required for intltool])
+fi
+if test "x$2" != "xno-xml"; then
+   AC_MSG_CHECKING([for XML::Parser])
+   if `$INTLTOOL_PERL -e "require XML::Parser" 2>/dev/null`; then
+       AC_MSG_RESULT([ok])
+   else
+       AC_MSG_ERROR([XML::Parser perl module is required for intltool])
+   fi
+fi
+
+AC_PATH_PROG(INTLTOOL_ICONV, iconv, iconv)
+AC_PATH_PROG(INTLTOOL_MSGFMT, msgfmt, msgfmt)
+AC_PATH_PROG(INTLTOOL_MSGMERGE, msgmerge, msgmerge)
+AC_PATH_PROG(INTLTOOL_XGETTEXT, xgettext, xgettext)
+
+# Remove file type tags (using []) from po/POTFILES.
+
+ifdef([AC_DIVERSION_ICMDS],[
+  AC_DIVERT_PUSH(AC_DIVERSION_ICMDS)
+      changequote(,)
+      mv -f po/POTFILES po/POTFILES.tmp
+      sed -e '/\[encoding.*\]/d' -e 's/\[.*\] *//' < po/POTFILES.tmp > po/POTFILES
+      rm -f po/POTFILES.tmp
+      changequote([,])
+  AC_DIVERT_POP()
+],[
+  ifdef([AC_CONFIG_COMMANDS_PRE],[
+    AC_CONFIG_COMMANDS_PRE([
+        changequote(,)
+        mv -f po/POTFILES po/POTFILES.tmp
+        sed -e '/\[encoding.*\]/d' -e 's/\[.*\] *//' < po/POTFILES.tmp > po/POTFILES
+        rm -f po/POTFILES.tmp
+        changequote([,])
+    ])
+  ])
+
+############################################################################
+## Take this bit from AM_PROG_MKDIR_P to set mkdir_p for automake 1.4 users
+############################################################################
+if mkdir -p --version . >/dev/null 2>&1 && test ! -d ./--version; then
+  # Keeping the `.' argument allows $(mkdir_p) to be used without
+  # argument.  Indeed, we sometimes output rules like
+  #   $(mkdir_p) $(somedir)
+  # where $(somedir) is conditionally defined.
+  # (`test -n '$(somedir)' && $(mkdir_p) $(somedir)' is a more
+  # expensive solution, as it forces Make to start a sub-shell.)
+  mkdir_p='mkdir -p -- .'
+else
+  # On NextStep and OpenStep, the `mkdir' command does not
+  # recognize any option.  It will interpret all options as
+  # directories to create, and then abort because `.' already
+  # exists.
+  for d in ./-p ./--version;
+  do
+    test -d $d && rmdir $d
+  done
+  # $(mkinstalldirs) is defined by Automake if mkinstalldirs exists.
+  if test -f "$ac_aux_dir/mkinstalldirs"; then
+    mkdir_p='$(mkinstalldirs)'
+  else
+    mkdir_p='$(install_sh) -d'
+  fi
+fi
+AC_SUBST([mkdir_p])
+])
+
+# Manually sed perl in so people don't have to put the intltool scripts in AC_OUTPUT.
+
+AC_CONFIG_COMMANDS([intltool], [
+
+intltool_edit="-e 's#@INTLTOOL_EXTRACT@#`pwd`/intltool-extract#g' \
+               -e 's#@INTLTOOL_ICONV@#${INTLTOOL_ICONV}#g' \
+               -e 's#@INTLTOOL_MSGFMT@#${INTLTOOL_MSGFMT}#g' \
+               -e 's#@INTLTOOL_MSGMERGE@#${INTLTOOL_MSGMERGE}#g' \
+               -e 's#@INTLTOOL_XGETTEXT@#${INTLTOOL_XGETTEXT}#g' \
+               -e 's#@INTLTOOL_PERL@#${INTLTOOL_PERL}#g'"
+
+eval sed ${intltool_edit} < ${ac_aux_dir}/intltool-extract.in \
+  > intltool-extract.out
+if cmp -s intltool-extract intltool-extract.out 2>/dev/null; then
+  rm -f intltool-extract.out
+else
+  mv -f intltool-extract.out intltool-extract
+fi
+chmod ugo+x intltool-extract
+chmod u+w intltool-extract
+
+eval sed ${intltool_edit} < ${ac_aux_dir}/intltool-merge.in \
+  > intltool-merge.out
+if cmp -s intltool-merge intltool-merge.out 2>/dev/null; then
+  rm -f intltool-merge.out
+else
+  mv -f intltool-merge.out intltool-merge
+fi
+chmod ugo+x intltool-merge
+chmod u+w intltool-merge
+
+eval sed ${intltool_edit} < ${ac_aux_dir}/intltool-update.in \
+  > intltool-update.out
+if cmp -s intltool-update intltool-update.out 2>/dev/null; then
+  rm -f intltool-update.out
+else
+  mv -f intltool-update.out intltool-update
+fi
+chmod ugo+x intltool-update
+chmod u+w intltool-update
+
+], INTLTOOL_PERL='${INTLTOOL_PERL}' ac_aux_dir=${ac_aux_dir}
+INTLTOOL_EXTRACT='${INTLTOOL_EXTRACT}' ICONV='${INTLTOOL_ICONV}'
+MSGFMT='${INTLTOOL_MSGFMT}' MSGMERGE='${INTLTOOL_MSGMERGE}'
+XGETTEXT='${INTLTOOL_XGETTEXT}')
+
+])
+
+# deprecated macros
+AC_DEFUN([AC_PROG_INTLTOOL], [IT_PROG_INTLTOOL($@)])
+
diff --git a/m4/intmax.m4 b/m4/intmax.m4
new file mode 100755 (executable)
index 0000000..dfb08cc
--- /dev/null
@@ -0,0 +1,32 @@
+# intmax.m4 serial 1 (gettext-0.12)
+dnl Copyright (C) 2002-2003 Free Software Foundation, Inc.
+dnl This file is free software, distributed under the terms of the GNU
+dnl General Public License.  As a special exception to the GNU General
+dnl Public License, this file may be distributed as part of a program
+dnl that contains a configuration script generated by Autoconf, under
+dnl the same distribution terms as the rest of that program.
+
+dnl From Bruno Haible.
+dnl Test whether the system has the 'intmax_t' type, but don't attempt to
+dnl find a replacement if it is lacking.
+
+AC_DEFUN([gt_TYPE_INTMAX_T],
+[
+  AC_REQUIRE([jm_AC_HEADER_INTTYPES_H])
+  AC_REQUIRE([jm_AC_HEADER_STDINT_H])
+  AC_CACHE_CHECK(for intmax_t, gt_cv_c_intmax_t,
+    [AC_TRY_COMPILE([
+#include <stddef.h> 
+#include <stdlib.h>
+#if HAVE_STDINT_H_WITH_UINTMAX
+#include <stdint.h>
+#endif
+#if HAVE_INTTYPES_H_WITH_UINTMAX
+#include <inttypes.h>
+#endif
+], [intmax_t x = -1;], gt_cv_c_intmax_t=yes, gt_cv_c_intmax_t=no)])
+  if test $gt_cv_c_intmax_t = yes; then
+    AC_DEFINE(HAVE_INTMAX_T, 1,
+      [Define if you have the 'intmax_t' type in <stdint.h> or <inttypes.h>.])
+  fi
+])
diff --git a/m4/inttypes-pri.m4 b/m4/inttypes-pri.m4
new file mode 100755 (executable)
index 0000000..fd007c3
--- /dev/null
@@ -0,0 +1,32 @@
+# inttypes-pri.m4 serial 1 (gettext-0.11.4)
+dnl Copyright (C) 1997-2002 Free Software Foundation, Inc.
+dnl This file is free software, distributed under the terms of the GNU
+dnl General Public License.  As a special exception to the GNU General
+dnl Public License, this file may be distributed as part of a program
+dnl that contains a configuration script generated by Autoconf, under
+dnl the same distribution terms as the rest of that program.
+
+dnl From Bruno Haible.
+
+# Define PRI_MACROS_BROKEN if <inttypes.h> exists and defines the PRI*
+# macros to non-string values.  This is the case on AIX 4.3.3.
+
+AC_DEFUN([gt_INTTYPES_PRI],
+[
+  AC_REQUIRE([gt_HEADER_INTTYPES_H])
+  if test $gt_cv_header_inttypes_h = yes; then
+    AC_CACHE_CHECK([whether the inttypes.h PRIxNN macros are broken],
+      gt_cv_inttypes_pri_broken,
+      [
+        AC_TRY_COMPILE([#include <inttypes.h>
+#ifdef PRId32
+char *p = PRId32;
+#endif
+], [], gt_cv_inttypes_pri_broken=no, gt_cv_inttypes_pri_broken=yes)
+      ])
+  fi
+  if test "$gt_cv_inttypes_pri_broken" = yes; then
+    AC_DEFINE_UNQUOTED(PRI_MACROS_BROKEN, 1,
+      [Define if <inttypes.h> exists and defines unusable PRI* macros.])
+  fi
+])
diff --git a/m4/inttypes.m4 b/m4/inttypes.m4
new file mode 100755 (executable)
index 0000000..ab370ff
--- /dev/null
@@ -0,0 +1,27 @@
+# inttypes.m4 serial 1 (gettext-0.11.4)
+dnl Copyright (C) 1997-2002 Free Software Foundation, Inc.
+dnl This file is free software, distributed under the terms of the GNU
+dnl General Public License.  As a special exception to the GNU General
+dnl Public License, this file may be distributed as part of a program
+dnl that contains a configuration script generated by Autoconf, under
+dnl the same distribution terms as the rest of that program.
+
+dnl From Paul Eggert.
+
+# Define HAVE_INTTYPES_H if <inttypes.h> exists and doesn't clash with
+# <sys/types.h>.
+
+AC_DEFUN([gt_HEADER_INTTYPES_H],
+[
+  AC_CACHE_CHECK([for inttypes.h], gt_cv_header_inttypes_h,
+  [
+    AC_TRY_COMPILE(
+      [#include <sys/types.h>
+#include <inttypes.h>],
+      [], gt_cv_header_inttypes_h=yes, gt_cv_header_inttypes_h=no)
+  ])
+  if test $gt_cv_header_inttypes_h = yes; then
+    AC_DEFINE_UNQUOTED(HAVE_INTTYPES_H, 1,
+      [Define if <inttypes.h> exists and doesn't clash with <sys/types.h>.])
+  fi
+])
diff --git a/m4/inttypes_h.m4 b/m4/inttypes_h.m4
new file mode 100755 (executable)
index 0000000..f342eba
--- /dev/null
@@ -0,0 +1,28 @@
+# inttypes_h.m4 serial 5 (gettext-0.12)
+dnl Copyright (C) 1997-2003 Free Software Foundation, Inc.
+dnl This file is free software, distributed under the terms of the GNU
+dnl General Public License.  As a special exception to the GNU General
+dnl Public License, this file may be distributed as part of a program
+dnl that contains a configuration script generated by Autoconf, under
+dnl the same distribution terms as the rest of that program.
+
+dnl From Paul Eggert.
+
+# Define HAVE_INTTYPES_H_WITH_UINTMAX if <inttypes.h> exists,
+# doesn't clash with <sys/types.h>, and declares uintmax_t.
+
+AC_DEFUN([jm_AC_HEADER_INTTYPES_H],
+[
+  AC_CACHE_CHECK([for inttypes.h], jm_ac_cv_header_inttypes_h,
+  [AC_TRY_COMPILE(
+    [#include <sys/types.h>
+#include <inttypes.h>],
+    [uintmax_t i = (uintmax_t) -1;],
+    jm_ac_cv_header_inttypes_h=yes,
+    jm_ac_cv_header_inttypes_h=no)])
+  if test $jm_ac_cv_header_inttypes_h = yes; then
+    AC_DEFINE_UNQUOTED(HAVE_INTTYPES_H_WITH_UINTMAX, 1,
+      [Define if <inttypes.h> exists, doesn't clash with <sys/types.h>,
+       and declares uintmax_t. ])
+  fi
+])
diff --git a/m4/isc-posix.m4 b/m4/isc-posix.m4
new file mode 100755 (executable)
index 0000000..1319dd1
--- /dev/null
@@ -0,0 +1,26 @@
+# isc-posix.m4 serial 2 (gettext-0.11.2)
+dnl Copyright (C) 1995-2002 Free Software Foundation, Inc.
+dnl This file is free software, distributed under the terms of the GNU
+dnl General Public License.  As a special exception to the GNU General
+dnl Public License, this file may be distributed as part of a program
+dnl that contains a configuration script generated by Autoconf, under
+dnl the same distribution terms as the rest of that program.
+
+# This file is not needed with autoconf-2.53 and newer.  Remove it in 2005.
+
+# This test replaces the one in autoconf.
+# Currently this macro should have the same name as the autoconf macro
+# because gettext's gettext.m4 (distributed in the automake package)
+# still uses it.  Otherwise, the use in gettext.m4 makes autoheader
+# give these diagnostics:
+#   configure.in:556: AC_TRY_COMPILE was called before AC_ISC_POSIX
+#   configure.in:556: AC_TRY_RUN was called before AC_ISC_POSIX
+
+undefine([AC_ISC_POSIX])
+
+AC_DEFUN([AC_ISC_POSIX],
+  [
+    dnl This test replaces the obsolescent AC_ISC_POSIX kludge.
+    AC_CHECK_LIB(cposix, strerror, [LIBS="$LIBS -lcposix"])
+  ]
+)
diff --git a/m4/lcmessage.m4 b/m4/lcmessage.m4
new file mode 100755 (executable)
index 0000000..ffd4008
--- /dev/null
@@ -0,0 +1,32 @@
+# lcmessage.m4 serial 3 (gettext-0.11.3)
+dnl Copyright (C) 1995-2002 Free Software Foundation, Inc.
+dnl This file is free software, distributed under the terms of the GNU
+dnl General Public License.  As a special exception to the GNU General
+dnl Public License, this file may be distributed as part of a program
+dnl that contains a configuration script generated by Autoconf, under
+dnl the same distribution terms as the rest of that program.
+dnl
+dnl This file can can be used in projects which are not available under
+dnl the GNU General Public License or the GNU Library General Public
+dnl License but which still want to provide support for the GNU gettext
+dnl functionality.
+dnl Please note that the actual code of the GNU gettext library is covered
+dnl by the GNU Library General Public License, and the rest of the GNU
+dnl gettext package package is covered by the GNU General Public License.
+dnl They are *not* in the public domain.
+
+dnl Authors:
+dnl   Ulrich Drepper <drepper@cygnus.com>, 1995.
+
+# Check whether LC_MESSAGES is available in <locale.h>.
+
+AC_DEFUN([AM_LC_MESSAGES],
+[
+  AC_CACHE_CHECK([for LC_MESSAGES], am_cv_val_LC_MESSAGES,
+    [AC_TRY_LINK([#include <locale.h>], [return LC_MESSAGES],
+       am_cv_val_LC_MESSAGES=yes, am_cv_val_LC_MESSAGES=no)])
+  if test $am_cv_val_LC_MESSAGES = yes; then
+    AC_DEFINE(HAVE_LC_MESSAGES, 1,
+      [Define if your <locale.h> file defines LC_MESSAGES.])
+  fi
+])
diff --git a/m4/lib-ld.m4 b/m4/lib-ld.m4
new file mode 100755 (executable)
index 0000000..38aeaec
--- /dev/null
@@ -0,0 +1,112 @@
+# lib-ld.m4 serial 3 (gettext-0.13)
+dnl Copyright (C) 1996-2003 Free Software Foundation, Inc.
+dnl This file is free software, distributed under the terms of the GNU
+dnl General Public License.  As a special exception to the GNU General
+dnl Public License, this file may be distributed as part of a program
+dnl that contains a configuration script generated by Autoconf, under
+dnl the same distribution terms as the rest of that program.
+
+dnl Subroutines of libtool.m4,
+dnl with replacements s/AC_/AC_LIB/ and s/lt_cv/acl_cv/ to avoid collision
+dnl with libtool.m4.
+
+dnl From libtool-1.4. Sets the variable with_gnu_ld to yes or no.
+AC_DEFUN([AC_LIB_PROG_LD_GNU],
+[AC_CACHE_CHECK([if the linker ($LD) is GNU ld], acl_cv_prog_gnu_ld,
+[# I'd rather use --version here, but apparently some GNU ld's only accept -v.
+case `$LD -v 2>&1 </dev/null` in
+*GNU* | *'with BFD'*)
+  acl_cv_prog_gnu_ld=yes ;;
+*)
+  acl_cv_prog_gnu_ld=no ;;
+esac])
+with_gnu_ld=$acl_cv_prog_gnu_ld
+])
+
+dnl From libtool-1.4. Sets the variable LD.
+AC_DEFUN([AC_LIB_PROG_LD],
+[AC_ARG_WITH(gnu-ld,
+[  --with-gnu-ld           assume the C compiler uses GNU ld [default=no]],
+test "$withval" = no || with_gnu_ld=yes, with_gnu_ld=no)
+AC_REQUIRE([AC_PROG_CC])dnl
+AC_REQUIRE([AC_CANONICAL_HOST])dnl
+# Prepare PATH_SEPARATOR.
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+  echo "#! /bin/sh" >conf$$.sh
+  echo  "exit 0"   >>conf$$.sh
+  chmod +x conf$$.sh
+  if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
+    PATH_SEPARATOR=';'
+  else
+    PATH_SEPARATOR=:
+  fi
+  rm -f conf$$.sh
+fi
+ac_prog=ld
+if test "$GCC" = yes; then
+  # Check if gcc -print-prog-name=ld gives a path.
+  AC_MSG_CHECKING([for ld used by GCC])
+  case $host in
+  *-*-mingw*)
+    # gcc leaves a trailing carriage return which upsets mingw
+    ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
+  *)
+    ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
+  esac
+  case $ac_prog in
+    # Accept absolute paths.
+    [[\\/]* | [A-Za-z]:[\\/]*)]
+      [re_direlt='/[^/][^/]*/\.\./']
+      # Canonicalize the path of ld
+      ac_prog=`echo $ac_prog| sed 's%\\\\%/%g'`
+      while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do
+       ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"`
+      done
+      test -z "$LD" && LD="$ac_prog"
+      ;;
+  "")
+    # If it fails, then pretend we aren't using GCC.
+    ac_prog=ld
+    ;;
+  *)
+    # If it is relative, then search for the first ld in PATH.
+    with_gnu_ld=unknown
+    ;;
+  esac
+elif test "$with_gnu_ld" = yes; then
+  AC_MSG_CHECKING([for GNU ld])
+else
+  AC_MSG_CHECKING([for non-GNU ld])
+fi
+AC_CACHE_VAL(acl_cv_path_LD,
+[if test -z "$LD"; then
+  IFS="${IFS=  }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}"
+  for ac_dir in $PATH; do
+    test -z "$ac_dir" && ac_dir=.
+    if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
+      acl_cv_path_LD="$ac_dir/$ac_prog"
+      # Check to see if the program is GNU ld.  I'd rather use --version,
+      # but apparently some GNU ld's only accept -v.
+      # Break only if it was the GNU/non-GNU ld that we prefer.
+      case `"$acl_cv_path_LD" -v 2>&1 < /dev/null` in
+      *GNU* | *'with BFD'*)
+       test "$with_gnu_ld" != no && break ;;
+      *)
+       test "$with_gnu_ld" != yes && break ;;
+      esac
+    fi
+  done
+  IFS="$ac_save_ifs"
+else
+  acl_cv_path_LD="$LD" # Let the user override the test with a path.
+fi])
+LD="$acl_cv_path_LD"
+if test -n "$LD"; then
+  AC_MSG_RESULT($LD)
+else
+  AC_MSG_RESULT(no)
+fi
+test -z "$LD" && AC_MSG_ERROR([no acceptable ld found in \$PATH])
+AC_LIB_PROG_LD_GNU
+])
diff --git a/m4/lib-link.m4 b/m4/lib-link.m4
new file mode 100755 (executable)
index 0000000..eeb200d
--- /dev/null
@@ -0,0 +1,551 @@
+# lib-link.m4 serial 4 (gettext-0.12)
+dnl Copyright (C) 2001-2003 Free Software Foundation, Inc.
+dnl This file is free software, distributed under the terms of the GNU
+dnl General Public License.  As a special exception to the GNU General
+dnl Public License, this file may be distributed as part of a program
+dnl that contains a configuration script generated by Autoconf, under
+dnl the same distribution terms as the rest of that program.
+
+dnl From Bruno Haible.
+
+dnl AC_LIB_LINKFLAGS(name [, dependencies]) searches for libname and
+dnl the libraries corresponding to explicit and implicit dependencies.
+dnl Sets and AC_SUBSTs the LIB${NAME} and LTLIB${NAME} variables and
+dnl augments the CPPFLAGS variable.
+AC_DEFUN([AC_LIB_LINKFLAGS],
+[
+  AC_REQUIRE([AC_LIB_PREPARE_PREFIX])
+  AC_REQUIRE([AC_LIB_RPATH])
+  define([Name],[translit([$1],[./-], [___])])
+  define([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-],
+                               [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])])
+  AC_CACHE_CHECK([how to link with lib[]$1], [ac_cv_lib[]Name[]_libs], [
+    AC_LIB_LINKFLAGS_BODY([$1], [$2])
+    ac_cv_lib[]Name[]_libs="$LIB[]NAME"
+    ac_cv_lib[]Name[]_ltlibs="$LTLIB[]NAME"
+    ac_cv_lib[]Name[]_cppflags="$INC[]NAME"
+  ])
+  LIB[]NAME="$ac_cv_lib[]Name[]_libs"
+  LTLIB[]NAME="$ac_cv_lib[]Name[]_ltlibs"
+  INC[]NAME="$ac_cv_lib[]Name[]_cppflags"
+  AC_LIB_APPENDTOVAR([CPPFLAGS], [$INC]NAME)
+  AC_SUBST([LIB]NAME)
+  AC_SUBST([LTLIB]NAME)
+  dnl Also set HAVE_LIB[]NAME so that AC_LIB_HAVE_LINKFLAGS can reuse the
+  dnl results of this search when this library appears as a dependency.
+  HAVE_LIB[]NAME=yes
+  undefine([Name])
+  undefine([NAME])
+])
+
+dnl AC_LIB_HAVE_LINKFLAGS(name, dependencies, includes, testcode)
+dnl searches for libname and the libraries corresponding to explicit and
+dnl implicit dependencies, together with the specified include files and
+dnl the ability to compile and link the specified testcode. If found, it
+dnl sets and AC_SUBSTs HAVE_LIB${NAME}=yes and the LIB${NAME} and
+dnl LTLIB${NAME} variables and augments the CPPFLAGS variable, and
+dnl #defines HAVE_LIB${NAME} to 1. Otherwise, it sets and AC_SUBSTs
+dnl HAVE_LIB${NAME}=no and LIB${NAME} and LTLIB${NAME} to empty.
+AC_DEFUN([AC_LIB_HAVE_LINKFLAGS],
+[
+  AC_REQUIRE([AC_LIB_PREPARE_PREFIX])
+  AC_REQUIRE([AC_LIB_RPATH])
+  define([Name],[translit([$1],[./-], [___])])
+  define([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-],
+                               [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])])
+
+  dnl Search for lib[]Name and define LIB[]NAME, LTLIB[]NAME and INC[]NAME
+  dnl accordingly.
+  AC_LIB_LINKFLAGS_BODY([$1], [$2])
+
+  dnl Add $INC[]NAME to CPPFLAGS before performing the following checks,
+  dnl because if the user has installed lib[]Name and not disabled its use
+  dnl via --without-lib[]Name-prefix, he wants to use it.
+  ac_save_CPPFLAGS="$CPPFLAGS"
+  AC_LIB_APPENDTOVAR([CPPFLAGS], [$INC]NAME)
+
+  AC_CACHE_CHECK([for lib[]$1], [ac_cv_lib[]Name], [
+    ac_save_LIBS="$LIBS"
+    LIBS="$LIBS $LIB[]NAME"
+    AC_TRY_LINK([$3], [$4], [ac_cv_lib[]Name=yes], [ac_cv_lib[]Name=no])
+    LIBS="$ac_save_LIBS"
+  ])
+  if test "$ac_cv_lib[]Name" = yes; then
+    HAVE_LIB[]NAME=yes
+    AC_DEFINE([HAVE_LIB]NAME, 1, [Define if you have the $1 library.])
+    AC_MSG_CHECKING([how to link with lib[]$1])
+    AC_MSG_RESULT([$LIB[]NAME])
+  else
+    HAVE_LIB[]NAME=no
+    dnl If $LIB[]NAME didn't lead to a usable library, we don't need
+    dnl $INC[]NAME either.
+    CPPFLAGS="$ac_save_CPPFLAGS"
+    LIB[]NAME=
+    LTLIB[]NAME=
+  fi
+  AC_SUBST([HAVE_LIB]NAME)
+  AC_SUBST([LIB]NAME)
+  AC_SUBST([LTLIB]NAME)
+  undefine([Name])
+  undefine([NAME])
+])
+
+dnl Determine the platform dependent parameters needed to use rpath:
+dnl libext, shlibext, hardcode_libdir_flag_spec, hardcode_libdir_separator,
+dnl hardcode_direct, hardcode_minus_L.
+AC_DEFUN([AC_LIB_RPATH],
+[
+  AC_REQUIRE([AC_PROG_CC])                dnl we use $CC, $GCC, $LDFLAGS
+  AC_REQUIRE([AC_LIB_PROG_LD])            dnl we use $LD, $with_gnu_ld
+  AC_REQUIRE([AC_CANONICAL_HOST])         dnl we use $host
+  AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT]) dnl we use $ac_aux_dir
+  AC_CACHE_CHECK([for shared library run path origin], acl_cv_rpath, [
+    CC="$CC" GCC="$GCC" LDFLAGS="$LDFLAGS" LD="$LD" with_gnu_ld="$with_gnu_ld" \
+    ${CONFIG_SHELL-/bin/sh} "$ac_aux_dir/config.rpath" "$host" > conftest.sh
+    . ./conftest.sh
+    rm -f ./conftest.sh
+    acl_cv_rpath=done
+  ])
+  wl="$acl_cv_wl"
+  libext="$acl_cv_libext"
+  shlibext="$acl_cv_shlibext"
+  hardcode_libdir_flag_spec="$acl_cv_hardcode_libdir_flag_spec"
+  hardcode_libdir_separator="$acl_cv_hardcode_libdir_separator"
+  hardcode_direct="$acl_cv_hardcode_direct"
+  hardcode_minus_L="$acl_cv_hardcode_minus_L"
+  dnl Determine whether the user wants rpath handling at all.
+  AC_ARG_ENABLE(rpath,
+    [  --disable-rpath         do not hardcode runtime library paths],
+    :, enable_rpath=yes)
+])
+
+dnl AC_LIB_LINKFLAGS_BODY(name [, dependencies]) searches for libname and
+dnl the libraries corresponding to explicit and implicit dependencies.
+dnl Sets the LIB${NAME}, LTLIB${NAME} and INC${NAME} variables.
+AC_DEFUN([AC_LIB_LINKFLAGS_BODY],
+[
+  define([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-],
+                               [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])])
+  dnl By default, look in $includedir and $libdir.
+  use_additional=yes
+  AC_LIB_WITH_FINAL_PREFIX([
+    eval additional_includedir=\"$includedir\"
+    eval additional_libdir=\"$libdir\"
+  ])
+  AC_LIB_ARG_WITH([lib$1-prefix],
+[  --with-lib$1-prefix[=DIR]  search for lib$1 in DIR/include and DIR/lib
+  --without-lib$1-prefix     don't search for lib$1 in includedir and libdir],
+[
+    if test "X$withval" = "Xno"; then
+      use_additional=no
+    else
+      if test "X$withval" = "X"; then
+        AC_LIB_WITH_FINAL_PREFIX([
+          eval additional_includedir=\"$includedir\"
+          eval additional_libdir=\"$libdir\"
+        ])
+      else
+        additional_includedir="$withval/include"
+        additional_libdir="$withval/lib"
+      fi
+    fi
+])
+  dnl Search the library and its dependencies in $additional_libdir and
+  dnl $LDFLAGS. Using breadth-first-seach.
+  LIB[]NAME=
+  LTLIB[]NAME=
+  INC[]NAME=
+  rpathdirs=
+  ltrpathdirs=
+  names_already_handled=
+  names_next_round='$1 $2'
+  while test -n "$names_next_round"; do
+    names_this_round="$names_next_round"
+    names_next_round=
+    for name in $names_this_round; do
+      already_handled=
+      for n in $names_already_handled; do
+        if test "$n" = "$name"; then
+          already_handled=yes
+          break
+        fi
+      done
+      if test -z "$already_handled"; then
+        names_already_handled="$names_already_handled $name"
+        dnl See if it was already located by an earlier AC_LIB_LINKFLAGS
+        dnl or AC_LIB_HAVE_LINKFLAGS call.
+        uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./-|ABCDEFGHIJKLMNOPQRSTUVWXYZ___|'`
+        eval value=\"\$HAVE_LIB$uppername\"
+        if test -n "$value"; then
+          if test "$value" = yes; then
+            eval value=\"\$LIB$uppername\"
+            test -z "$value" || LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$value"
+            eval value=\"\$LTLIB$uppername\"
+            test -z "$value" || LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }$value"
+          else
+            dnl An earlier call to AC_LIB_HAVE_LINKFLAGS has determined
+            dnl that this library doesn't exist. So just drop it.
+            :
+          fi
+        else
+          dnl Search the library lib$name in $additional_libdir and $LDFLAGS
+          dnl and the already constructed $LIBNAME/$LTLIBNAME.
+          found_dir=
+          found_la=
+          found_so=
+          found_a=
+          if test $use_additional = yes; then
+            if test -n "$shlibext" && test -f "$additional_libdir/lib$name.$shlibext"; then
+              found_dir="$additional_libdir"
+              found_so="$additional_libdir/lib$name.$shlibext"
+              if test -f "$additional_libdir/lib$name.la"; then
+                found_la="$additional_libdir/lib$name.la"
+              fi
+            else
+              if test -f "$additional_libdir/lib$name.$libext"; then
+                found_dir="$additional_libdir"
+                found_a="$additional_libdir/lib$name.$libext"
+                if test -f "$additional_libdir/lib$name.la"; then
+                  found_la="$additional_libdir/lib$name.la"
+                fi
+              fi
+            fi
+          fi
+          if test "X$found_dir" = "X"; then
+            for x in $LDFLAGS $LTLIB[]NAME; do
+              AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
+              case "$x" in
+                -L*)
+                  dir=`echo "X$x" | sed -e 's/^X-L//'`
+                  if test -n "$shlibext" && test -f "$dir/lib$name.$shlibext"; then
+                    found_dir="$dir"
+                    found_so="$dir/lib$name.$shlibext"
+                    if test -f "$dir/lib$name.la"; then
+                      found_la="$dir/lib$name.la"
+                    fi
+                  else
+                    if test -f "$dir/lib$name.$libext"; then
+                      found_dir="$dir"
+                      found_a="$dir/lib$name.$libext"
+                      if test -f "$dir/lib$name.la"; then
+                        found_la="$dir/lib$name.la"
+                      fi
+                    fi
+                  fi
+                  ;;
+              esac
+              if test "X$found_dir" != "X"; then
+                break
+              fi
+            done
+          fi
+          if test "X$found_dir" != "X"; then
+            dnl Found the library.
+            LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$found_dir -l$name"
+            if test "X$found_so" != "X"; then
+              dnl Linking with a shared library. We attempt to hardcode its
+              dnl directory into the executable's runpath, unless it's the
+              dnl standard /usr/lib.
+              if test "$enable_rpath" = no || test "X$found_dir" = "X/usr/lib"; then
+                dnl No hardcoding is needed.
+                LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so"
+              else
+                dnl Use an explicit option to hardcode DIR into the resulting
+                dnl binary.
+                dnl Potentially add DIR to ltrpathdirs.
+                dnl The ltrpathdirs will be appended to $LTLIBNAME at the end.
+                haveit=
+                for x in $ltrpathdirs; do
+                  if test "X$x" = "X$found_dir"; then
+                    haveit=yes
+                    break
+                  fi
+                done
+                if test -z "$haveit"; then
+                  ltrpathdirs="$ltrpathdirs $found_dir"
+                fi
+                dnl The hardcoding into $LIBNAME is system dependent.
+                if test "$hardcode_direct" = yes; then
+                  dnl Using DIR/libNAME.so during linking hardcodes DIR into the
+                  dnl resulting binary.
+                  LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so"
+                else
+                  if test -n "$hardcode_libdir_flag_spec" && test "$hardcode_minus_L" = no; then
+                    dnl Use an explicit option to hardcode DIR into the resulting
+                    dnl binary.
+                    LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so"
+                    dnl Potentially add DIR to rpathdirs.
+                    dnl The rpathdirs will be appended to $LIBNAME at the end.
+                    haveit=
+                    for x in $rpathdirs; do
+                      if test "X$x" = "X$found_dir"; then
+                        haveit=yes
+                        break
+                      fi
+                    done
+                    if test -z "$haveit"; then
+                      rpathdirs="$rpathdirs $found_dir"
+                    fi
+                  else
+                    dnl Rely on "-L$found_dir".
+                    dnl But don't add it if it's already contained in the LDFLAGS
+                    dnl or the already constructed $LIBNAME
+                    haveit=
+                    for x in $LDFLAGS $LIB[]NAME; do
+                      AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
+                      if test "X$x" = "X-L$found_dir"; then
+                        haveit=yes
+                        break
+                      fi
+                    done
+                    if test -z "$haveit"; then
+                      LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$found_dir"
+                    fi
+                    if test "$hardcode_minus_L" != no; then
+                      dnl FIXME: Not sure whether we should use
+                      dnl "-L$found_dir -l$name" or "-L$found_dir $found_so"
+                      dnl here.
+                      LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so"
+                    else
+                      dnl We cannot use $hardcode_runpath_var and LD_RUN_PATH
+                      dnl here, because this doesn't fit in flags passed to the
+                      dnl compiler. So give up. No hardcoding. This affects only
+                      dnl very old systems.
+                      dnl FIXME: Not sure whether we should use
+                      dnl "-L$found_dir -l$name" or "-L$found_dir $found_so"
+                      dnl here.
+                      LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-l$name"
+                    fi
+                  fi
+                fi
+              fi
+            else
+              if test "X$found_a" != "X"; then
+                dnl Linking with a static library.
+                LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_a"
+              else
+                dnl We shouldn't come here, but anyway it's good to have a
+                dnl fallback.
+                LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$found_dir -l$name"
+              fi
+            fi
+            dnl Assume the include files are nearby.
+            additional_includedir=
+            case "$found_dir" in
+              */lib | */lib/)
+                basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e 's,/lib/*$,,'`
+                additional_includedir="$basedir/include"
+                ;;
+            esac
+            if test "X$additional_includedir" != "X"; then
+              dnl Potentially add $additional_includedir to $INCNAME.
+              dnl But don't add it
+              dnl   1. if it's the standard /usr/include,
+              dnl   2. if it's /usr/local/include and we are using GCC on Linux,
+              dnl   3. if it's already present in $CPPFLAGS or the already
+              dnl      constructed $INCNAME,
+              dnl   4. if it doesn't exist as a directory.
+              if test "X$additional_includedir" != "X/usr/include"; then
+                haveit=
+                if test "X$additional_includedir" = "X/usr/local/include"; then
+                  if test -n "$GCC"; then
+                    case $host_os in
+                      linux*) haveit=yes;;
+                    esac
+                  fi
+                fi
+                if test -z "$haveit"; then
+                  for x in $CPPFLAGS $INC[]NAME; do
+                    AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
+                    if test "X$x" = "X-I$additional_includedir"; then
+                      haveit=yes
+                      break
+                    fi
+                  done
+                  if test -z "$haveit"; then
+                    if test -d "$additional_includedir"; then
+                      dnl Really add $additional_includedir to $INCNAME.
+                      INC[]NAME="${INC[]NAME}${INC[]NAME:+ }-I$additional_includedir"
+                    fi
+                  fi
+                fi
+              fi
+            fi
+            dnl Look for dependencies.
+            if test -n "$found_la"; then
+              dnl Read the .la file. It defines the variables
+              dnl dlname, library_names, old_library, dependency_libs, current,
+              dnl age, revision, installed, dlopen, dlpreopen, libdir.
+              save_libdir="$libdir"
+              case "$found_la" in
+                */* | *\\*) . "$found_la" ;;
+                *) . "./$found_la" ;;
+              esac
+              libdir="$save_libdir"
+              dnl We use only dependency_libs.
+              for dep in $dependency_libs; do
+                case "$dep" in
+                  -L*)
+                    additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'`
+                    dnl Potentially add $additional_libdir to $LIBNAME and $LTLIBNAME.
+                    dnl But don't add it
+                    dnl   1. if it's the standard /usr/lib,
+                    dnl   2. if it's /usr/local/lib and we are using GCC on Linux,
+                    dnl   3. if it's already present in $LDFLAGS or the already
+                    dnl      constructed $LIBNAME,
+                    dnl   4. if it doesn't exist as a directory.
+                    if test "X$additional_libdir" != "X/usr/lib"; then
+                      haveit=
+                      if test "X$additional_libdir" = "X/usr/local/lib"; then
+                        if test -n "$GCC"; then
+                          case $host_os in
+                            linux*) haveit=yes;;
+                          esac
+                        fi
+                      fi
+                      if test -z "$haveit"; then
+                        haveit=
+                        for x in $LDFLAGS $LIB[]NAME; do
+                          AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
+                          if test "X$x" = "X-L$additional_libdir"; then
+                            haveit=yes
+                            break
+                          fi
+                        done
+                        if test -z "$haveit"; then
+                          if test -d "$additional_libdir"; then
+                            dnl Really add $additional_libdir to $LIBNAME.
+                            LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$additional_libdir"
+                          fi
+                        fi
+                        haveit=
+                        for x in $LDFLAGS $LTLIB[]NAME; do
+                          AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
+                          if test "X$x" = "X-L$additional_libdir"; then
+                            haveit=yes
+                            break
+                          fi
+                        done
+                        if test -z "$haveit"; then
+                          if test -d "$additional_libdir"; then
+                            dnl Really add $additional_libdir to $LTLIBNAME.
+                            LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$additional_libdir"
+                          fi
+                        fi
+                      fi
+                    fi
+                    ;;
+                  -R*)
+                    dir=`echo "X$dep" | sed -e 's/^X-R//'`
+                    if test "$enable_rpath" != no; then
+                      dnl Potentially add DIR to rpathdirs.
+                      dnl The rpathdirs will be appended to $LIBNAME at the end.
+                      haveit=
+                      for x in $rpathdirs; do
+                        if test "X$x" = "X$dir"; then
+                          haveit=yes
+                          break
+                        fi
+                      done
+                      if test -z "$haveit"; then
+                        rpathdirs="$rpathdirs $dir"
+                      fi
+                      dnl Potentially add DIR to ltrpathdirs.
+                      dnl The ltrpathdirs will be appended to $LTLIBNAME at the end.
+                      haveit=
+                      for x in $ltrpathdirs; do
+                        if test "X$x" = "X$dir"; then
+                          haveit=yes
+                          break
+                        fi
+                      done
+                      if test -z "$haveit"; then
+                        ltrpathdirs="$ltrpathdirs $dir"
+                      fi
+                    fi
+                    ;;
+                  -l*)
+                    dnl Handle this in the next round.
+                    names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'`
+                    ;;
+                  *.la)
+                    dnl Handle this in the next round. Throw away the .la's
+                    dnl directory; it is already contained in a preceding -L
+                    dnl option.
+                    names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'`
+                    ;;
+                  *)
+                    dnl Most likely an immediate library name.
+                    LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$dep"
+                    LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }$dep"
+                    ;;
+                esac
+              done
+            fi
+          else
+            dnl Didn't find the library; assume it is in the system directories
+            dnl known to the linker and runtime loader. (All the system
+            dnl directories known to the linker should also be known to the
+            dnl runtime loader, otherwise the system is severely misconfigured.)
+            LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-l$name"
+            LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-l$name"
+          fi
+        fi
+      fi
+    done
+  done
+  if test "X$rpathdirs" != "X"; then
+    if test -n "$hardcode_libdir_separator"; then
+      dnl Weird platform: only the last -rpath option counts, the user must
+      dnl pass all path elements in one option. We can arrange that for a
+      dnl single library, but not when more than one $LIBNAMEs are used.
+      alldirs=
+      for found_dir in $rpathdirs; do
+        alldirs="${alldirs}${alldirs:+$hardcode_libdir_separator}$found_dir"
+      done
+      dnl Note: hardcode_libdir_flag_spec uses $libdir and $wl.
+      acl_save_libdir="$libdir"
+      libdir="$alldirs"
+      eval flag=\"$hardcode_libdir_flag_spec\"
+      libdir="$acl_save_libdir"
+      LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag"
+    else
+      dnl The -rpath options are cumulative.
+      for found_dir in $rpathdirs; do
+        acl_save_libdir="$libdir"
+        libdir="$found_dir"
+        eval flag=\"$hardcode_libdir_flag_spec\"
+        libdir="$acl_save_libdir"
+        LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag"
+      done
+    fi
+  fi
+  if test "X$ltrpathdirs" != "X"; then
+    dnl When using libtool, the option that works for both libraries and
+    dnl executables is -R. The -R options are cumulative.
+    for found_dir in $ltrpathdirs; do
+      LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-R$found_dir"
+    done
+  fi
+])
+
+dnl AC_LIB_APPENDTOVAR(VAR, CONTENTS) appends the elements of CONTENTS to VAR,
+dnl unless already present in VAR.
+dnl Works only for CPPFLAGS, not for LIB* variables because that sometimes
+dnl contains two or three consecutive elements that belong together.
+AC_DEFUN([AC_LIB_APPENDTOVAR],
+[
+  for element in [$2]; do
+    haveit=
+    for x in $[$1]; do
+      AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
+      if test "X$x" = "X$element"; then
+        haveit=yes
+        break
+      fi
+    done
+    if test -z "$haveit"; then
+      [$1]="${[$1]}${[$1]:+ }$element"
+    fi
+  done
+])
diff --git a/m4/lib-prefix.m4 b/m4/lib-prefix.m4
new file mode 100755 (executable)
index 0000000..8aff5a9
--- /dev/null
@@ -0,0 +1,155 @@
+# lib-prefix.m4 serial 3 (gettext-0.13)
+dnl Copyright (C) 2001-2003 Free Software Foundation, Inc.
+dnl This file is free software, distributed under the terms of the GNU
+dnl General Public License.  As a special exception to the GNU General
+dnl Public License, this file may be distributed as part of a program
+dnl that contains a configuration script generated by Autoconf, under
+dnl the same distribution terms as the rest of that program.
+
+dnl From Bruno Haible.
+
+dnl AC_LIB_ARG_WITH is synonymous to AC_ARG_WITH in autoconf-2.13, and
+dnl similar to AC_ARG_WITH in autoconf 2.52...2.57 except that is doesn't
+dnl require excessive bracketing.
+ifdef([AC_HELP_STRING],
+[AC_DEFUN([AC_LIB_ARG_WITH], [AC_ARG_WITH([$1],[[$2]],[$3],[$4])])],
+[AC_DEFUN([AC_][LIB_ARG_WITH], [AC_ARG_WITH([$1],[$2],[$3],[$4])])])
+
+dnl AC_LIB_PREFIX adds to the CPPFLAGS and LDFLAGS the flags that are needed
+dnl to access previously installed libraries. The basic assumption is that
+dnl a user will want packages to use other packages he previously installed
+dnl with the same --prefix option.
+dnl This macro is not needed if only AC_LIB_LINKFLAGS is used to locate
+dnl libraries, but is otherwise very convenient.
+AC_DEFUN([AC_LIB_PREFIX],
+[
+  AC_BEFORE([$0], [AC_LIB_LINKFLAGS])
+  AC_REQUIRE([AC_PROG_CC])
+  AC_REQUIRE([AC_CANONICAL_HOST])
+  AC_REQUIRE([AC_LIB_PREPARE_PREFIX])
+  dnl By default, look in $includedir and $libdir.
+  use_additional=yes
+  AC_LIB_WITH_FINAL_PREFIX([
+    eval additional_includedir=\"$includedir\"
+    eval additional_libdir=\"$libdir\"
+  ])
+  AC_LIB_ARG_WITH([lib-prefix],
+[  --with-lib-prefix[=DIR] search for libraries in DIR/include and DIR/lib
+  --without-lib-prefix    don't search for libraries in includedir and libdir],
+[
+    if test "X$withval" = "Xno"; then
+      use_additional=no
+    else
+      if test "X$withval" = "X"; then
+        AC_LIB_WITH_FINAL_PREFIX([
+          eval additional_includedir=\"$includedir\"
+          eval additional_libdir=\"$libdir\"
+        ])
+      else
+        additional_includedir="$withval/include"
+        additional_libdir="$withval/lib"
+      fi
+    fi
+])
+  if test $use_additional = yes; then
+    dnl Potentially add $additional_includedir to $CPPFLAGS.
+    dnl But don't add it
+    dnl   1. if it's the standard /usr/include,
+    dnl   2. if it's already present in $CPPFLAGS,
+    dnl   3. if it's /usr/local/include and we are using GCC on Linux,
+    dnl   4. if it doesn't exist as a directory.
+    if test "X$additional_includedir" != "X/usr/include"; then
+      haveit=
+      for x in $CPPFLAGS; do
+        AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
+        if test "X$x" = "X-I$additional_includedir"; then
+          haveit=yes
+          break
+        fi
+      done
+      if test -z "$haveit"; then
+        if test "X$additional_includedir" = "X/usr/local/include"; then
+          if test -n "$GCC"; then
+            case $host_os in
+              linux*) haveit=yes;;
+            esac
+          fi
+        fi
+        if test -z "$haveit"; then
+          if test -d "$additional_includedir"; then
+            dnl Really add $additional_includedir to $CPPFLAGS.
+            CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }-I$additional_includedir"
+          fi
+        fi
+      fi
+    fi
+    dnl Potentially add $additional_libdir to $LDFLAGS.
+    dnl But don't add it
+    dnl   1. if it's the standard /usr/lib,
+    dnl   2. if it's already present in $LDFLAGS,
+    dnl   3. if it's /usr/local/lib and we are using GCC on Linux,
+    dnl   4. if it doesn't exist as a directory.
+    if test "X$additional_libdir" != "X/usr/lib"; then
+      haveit=
+      for x in $LDFLAGS; do
+        AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
+        if test "X$x" = "X-L$additional_libdir"; then
+          haveit=yes
+          break
+        fi
+      done
+      if test -z "$haveit"; then
+        if test "X$additional_libdir" = "X/usr/local/lib"; then
+          if test -n "$GCC"; then
+            case $host_os in
+              linux*) haveit=yes;;
+            esac
+          fi
+        fi
+        if test -z "$haveit"; then
+          if test -d "$additional_libdir"; then
+            dnl Really add $additional_libdir to $LDFLAGS.
+            LDFLAGS="${LDFLAGS}${LDFLAGS:+ }-L$additional_libdir"
+          fi
+        fi
+      fi
+    fi
+  fi
+])
+
+dnl AC_LIB_PREPARE_PREFIX creates variables acl_final_prefix,
+dnl acl_final_exec_prefix, containing the values to which $prefix and
+dnl $exec_prefix will expand at the end of the configure script.
+AC_DEFUN([AC_LIB_PREPARE_PREFIX],
+[
+  dnl Unfortunately, prefix and exec_prefix get only finally determined
+  dnl at the end of configure.
+  if test "X$prefix" = "XNONE"; then
+    acl_final_prefix="$ac_default_prefix"
+  else
+    acl_final_prefix="$prefix"
+  fi
+  if test "X$exec_prefix" = "XNONE"; then
+    acl_final_exec_prefix='${prefix}'
+  else
+    acl_final_exec_prefix="$exec_prefix"
+  fi
+  acl_save_prefix="$prefix"
+  prefix="$acl_final_prefix"
+  eval acl_final_exec_prefix=\"$acl_final_exec_prefix\"
+  prefix="$acl_save_prefix"
+])
+
+dnl AC_LIB_WITH_FINAL_PREFIX([statement]) evaluates statement, with the
+dnl variables prefix and exec_prefix bound to the values they will have
+dnl at the end of the configure script.
+AC_DEFUN([AC_LIB_WITH_FINAL_PREFIX],
+[
+  acl_save_prefix="$prefix"
+  prefix="$acl_final_prefix"
+  acl_save_exec_prefix="$exec_prefix"
+  exec_prefix="$acl_final_exec_prefix"
+  $1
+  exec_prefix="$acl_save_exec_prefix"
+  prefix="$acl_save_prefix"
+])
diff --git a/m4/libtool.m4 b/m4/libtool.m4
new file mode 100755 (executable)
index 0000000..4ceb7f1
--- /dev/null
@@ -0,0 +1,7309 @@
+# libtool.m4 - Configure libtool for the host system. -*-Autoconf-*-
+#
+#   Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005,
+#                 2006, 2007, 2008 Free Software Foundation, Inc.
+#   Written by Gordon Matzigkeit, 1996
+#
+# This file is free software; the Free Software Foundation gives
+# unlimited permission to copy and/or distribute it, with or without
+# modifications, as long as this notice is preserved.
+
+m4_define([_LT_COPYING], [dnl
+#   Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005,
+#                 2006, 2007, 2008 Free Software Foundation, Inc.
+#   Written by Gordon Matzigkeit, 1996
+#
+#   This file is part of GNU Libtool.
+#
+# GNU Libtool 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.
+#
+# As a special exception to the GNU General Public License,
+# if you distribute this file as part of a program or library that
+# is built using GNU Libtool, you may include this file under the
+# same distribution terms that you use for the rest of that program.
+#
+# GNU Libtool 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 GNU Libtool; see the file COPYING.  If not, a copy
+# can be downloaded from http://www.gnu.org/licenses/gpl.html, or
+# obtained by writing to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+])
+
+# serial 56 LT_INIT
+
+
+# LT_PREREQ(VERSION)
+# ------------------
+# Complain and exit if this libtool version is less that VERSION.
+m4_defun([LT_PREREQ],
+[m4_if(m4_version_compare(m4_defn([LT_PACKAGE_VERSION]), [$1]), -1,
+       [m4_default([$3],
+                  [m4_fatal([Libtool version $1 or higher is required],
+                            63)])],
+       [$2])])
+
+
+# _LT_CHECK_BUILDDIR
+# ------------------
+# Complain if the absolute build directory name contains unusual characters
+m4_defun([_LT_CHECK_BUILDDIR],
+[case `pwd` in
+  *\ * | *\    *)
+    AC_MSG_WARN([Libtool does not cope well with whitespace in `pwd`]) ;;
+esac
+])
+
+
+# LT_INIT([OPTIONS])
+# ------------------
+AC_DEFUN([LT_INIT],
+[AC_PREREQ([2.58])dnl We use AC_INCLUDES_DEFAULT
+AC_BEFORE([$0], [LT_LANG])dnl
+AC_BEFORE([$0], [LT_OUTPUT])dnl
+AC_BEFORE([$0], [LTDL_INIT])dnl
+m4_require([_LT_CHECK_BUILDDIR])dnl
+
+dnl Autoconf doesn't catch unexpanded LT_ macros by default:
+m4_pattern_forbid([^_?LT_[A-Z_]+$])dnl
+m4_pattern_allow([^(_LT_EOF|LT_DLGLOBAL|LT_DLLAZY_OR_NOW|LT_MULTI_MODULE)$])dnl
+dnl aclocal doesn't pull ltoptions.m4, ltsugar.m4, or ltversion.m4
+dnl unless we require an AC_DEFUNed macro:
+AC_REQUIRE([LTOPTIONS_VERSION])dnl
+AC_REQUIRE([LTSUGAR_VERSION])dnl
+AC_REQUIRE([LTVERSION_VERSION])dnl
+AC_REQUIRE([LTOBSOLETE_VERSION])dnl
+m4_require([_LT_PROG_LTMAIN])dnl
+
+dnl Parse OPTIONS
+_LT_SET_OPTIONS([$0], [$1])
+
+# This can be used to rebuild libtool when needed
+LIBTOOL_DEPS="$ltmain"
+
+# Always use our own libtool.
+LIBTOOL='$(SHELL) $(top_builddir)/libtool'
+AC_SUBST(LIBTOOL)dnl
+
+_LT_SETUP
+
+# Only expand once:
+m4_define([LT_INIT])
+])# LT_INIT
+
+# Old names:
+AU_ALIAS([AC_PROG_LIBTOOL], [LT_INIT])
+AU_ALIAS([AM_PROG_LIBTOOL], [LT_INIT])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_PROG_LIBTOOL], [])
+dnl AC_DEFUN([AM_PROG_LIBTOOL], [])
+
+
+# _LT_CC_BASENAME(CC)
+# -------------------
+# Calculate cc_basename.  Skip known compiler wrappers and cross-prefix.
+m4_defun([_LT_CC_BASENAME],
+[for cc_temp in $1""; do
+  case $cc_temp in
+    compile | *[[\\/]]compile | ccache | *[[\\/]]ccache ) ;;
+    distcc | *[[\\/]]distcc | purify | *[[\\/]]purify ) ;;
+    \-*) ;;
+    *) break;;
+  esac
+done
+cc_basename=`$ECHO "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"`
+])
+
+
+# _LT_FILEUTILS_DEFAULTS
+# ----------------------
+# It is okay to use these file commands and assume they have been set
+# sensibly after `m4_require([_LT_FILEUTILS_DEFAULTS])'.
+m4_defun([_LT_FILEUTILS_DEFAULTS],
+[: ${CP="cp -f"}
+: ${MV="mv -f"}
+: ${RM="rm -f"}
+])# _LT_FILEUTILS_DEFAULTS
+
+
+# _LT_SETUP
+# ---------
+m4_defun([_LT_SETUP],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+AC_REQUIRE([AC_CANONICAL_BUILD])dnl
+_LT_DECL([], [host_alias], [0], [The host system])dnl
+_LT_DECL([], [host], [0])dnl
+_LT_DECL([], [host_os], [0])dnl
+dnl
+_LT_DECL([], [build_alias], [0], [The build system])dnl
+_LT_DECL([], [build], [0])dnl
+_LT_DECL([], [build_os], [0])dnl
+dnl
+AC_REQUIRE([AC_PROG_CC])dnl
+AC_REQUIRE([LT_PATH_LD])dnl
+AC_REQUIRE([LT_PATH_NM])dnl
+dnl
+AC_REQUIRE([AC_PROG_LN_S])dnl
+test -z "$LN_S" && LN_S="ln -s"
+_LT_DECL([], [LN_S], [1], [Whether we need soft or hard links])dnl
+dnl
+AC_REQUIRE([LT_CMD_MAX_LEN])dnl
+_LT_DECL([objext], [ac_objext], [0], [Object file suffix (normally "o")])dnl
+_LT_DECL([], [exeext], [0], [Executable file suffix (normally "")])dnl
+dnl
+m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+m4_require([_LT_CHECK_SHELL_FEATURES])dnl
+m4_require([_LT_CMD_RELOAD])dnl
+m4_require([_LT_CHECK_MAGIC_METHOD])dnl
+m4_require([_LT_CMD_OLD_ARCHIVE])dnl
+m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl
+
+_LT_CONFIG_LIBTOOL_INIT([
+# See if we are running on zsh, and set the options which allow our
+# commands through without removal of \ escapes INIT.
+if test -n "\${ZSH_VERSION+set}" ; then
+   setopt NO_GLOB_SUBST
+fi
+])
+if test -n "${ZSH_VERSION+set}" ; then
+   setopt NO_GLOB_SUBST
+fi
+
+_LT_CHECK_OBJDIR
+
+m4_require([_LT_TAG_COMPILER])dnl
+_LT_PROG_ECHO_BACKSLASH
+
+case $host_os in
+aix3*)
+  # AIX sometimes has problems with the GCC collect2 program.  For some
+  # reason, if we set the COLLECT_NAMES environment variable, the problems
+  # vanish in a puff of smoke.
+  if test "X${COLLECT_NAMES+set}" != Xset; then
+    COLLECT_NAMES=
+    export COLLECT_NAMES
+  fi
+  ;;
+esac
+
+# Sed substitution that helps us do robust quoting.  It backslashifies
+# metacharacters that are still active within double-quoted strings.
+sed_quote_subst='s/\([["`$\\]]\)/\\\1/g'
+
+# Same as above, but do not quote variable references.
+double_quote_subst='s/\([["`\\]]\)/\\\1/g'
+
+# Sed substitution to delay expansion of an escaped shell variable in a
+# double_quote_subst'ed string.
+delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g'
+
+# Sed substitution to delay expansion of an escaped single quote.
+delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g'
+
+# Sed substitution to avoid accidental globbing in evaled expressions
+no_glob_subst='s/\*/\\\*/g'
+
+# Global variables:
+ofile=libtool
+can_build_shared=yes
+
+# All known linkers require a `.a' archive for static linking (except MSVC,
+# which needs '.lib').
+libext=a
+
+with_gnu_ld="$lt_cv_prog_gnu_ld"
+
+old_CC="$CC"
+old_CFLAGS="$CFLAGS"
+
+# Set sane defaults for various variables
+test -z "$CC" && CC=cc
+test -z "$LTCC" && LTCC=$CC
+test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS
+test -z "$LD" && LD=ld
+test -z "$ac_objext" && ac_objext=o
+
+_LT_CC_BASENAME([$compiler])
+
+# Only perform the check for file, if the check method requires it
+test -z "$MAGIC_CMD" && MAGIC_CMD=file
+case $deplibs_check_method in
+file_magic*)
+  if test "$file_magic_cmd" = '$MAGIC_CMD'; then
+    _LT_PATH_MAGIC
+  fi
+  ;;
+esac
+
+# Use C for the default configuration in the libtool script
+LT_SUPPORTED_TAG([CC])
+_LT_LANG_C_CONFIG
+_LT_LANG_DEFAULT_CONFIG
+_LT_CONFIG_COMMANDS
+])# _LT_SETUP
+
+
+# _LT_PROG_LTMAIN
+# ---------------
+# Note that this code is called both from `configure', and `config.status'
+# now that we use AC_CONFIG_COMMANDS to generate libtool.  Notably,
+# `config.status' has no value for ac_aux_dir unless we are using Automake,
+# so we pass a copy along to make sure it has a sensible value anyway.
+m4_defun([_LT_PROG_LTMAIN],
+[m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([ltmain.sh])])dnl
+_LT_CONFIG_LIBTOOL_INIT([ac_aux_dir='$ac_aux_dir'])
+ltmain="$ac_aux_dir/ltmain.sh"
+])# _LT_PROG_LTMAIN
+
+
+## ------------------------------------- ##
+## Accumulate code for creating libtool. ##
+## ------------------------------------- ##
+
+# So that we can recreate a full libtool script including additional
+# tags, we accumulate the chunks of code to send to AC_CONFIG_COMMANDS
+# in macros and then make a single call at the end using the `libtool'
+# label.
+
+
+# _LT_CONFIG_LIBTOOL_INIT([INIT-COMMANDS])
+# ----------------------------------------
+# Register INIT-COMMANDS to be passed to AC_CONFIG_COMMANDS later.
+m4_define([_LT_CONFIG_LIBTOOL_INIT],
+[m4_ifval([$1],
+          [m4_append([_LT_OUTPUT_LIBTOOL_INIT],
+                     [$1
+])])])
+
+# Initialize.
+m4_define([_LT_OUTPUT_LIBTOOL_INIT])
+
+
+# _LT_CONFIG_LIBTOOL([COMMANDS])
+# ------------------------------
+# Register COMMANDS to be passed to AC_CONFIG_COMMANDS later.
+m4_define([_LT_CONFIG_LIBTOOL],
+[m4_ifval([$1],
+          [m4_append([_LT_OUTPUT_LIBTOOL_COMMANDS],
+                     [$1
+])])])
+
+# Initialize.
+m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS])
+
+
+# _LT_CONFIG_SAVE_COMMANDS([COMMANDS], [INIT_COMMANDS])
+# -----------------------------------------------------
+m4_defun([_LT_CONFIG_SAVE_COMMANDS],
+[_LT_CONFIG_LIBTOOL([$1])
+_LT_CONFIG_LIBTOOL_INIT([$2])
+])
+
+
+# _LT_FORMAT_COMMENT([COMMENT])
+# -----------------------------
+# Add leading comment marks to the start of each line, and a trailing
+# full-stop to the whole comment if one is not present already.
+m4_define([_LT_FORMAT_COMMENT],
+[m4_ifval([$1], [
+m4_bpatsubst([m4_bpatsubst([$1], [^ *], [# ])],
+              [['`$\]], [\\\&])]m4_bmatch([$1], [[!?.]$], [], [.])
+)])
+
+
+
+## ------------------------ ##
+## FIXME: Eliminate VARNAME ##
+## ------------------------ ##
+
+
+# _LT_DECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION], [IS-TAGGED?])
+# -------------------------------------------------------------------
+# CONFIGNAME is the name given to the value in the libtool script.
+# VARNAME is the (base) name used in the configure script.
+# VALUE may be 0, 1 or 2 for a computed quote escaped value based on
+# VARNAME.  Any other value will be used directly.
+m4_define([_LT_DECL],
+[lt_if_append_uniq([lt_decl_varnames], [$2], [, ],
+    [lt_dict_add_subkey([lt_decl_dict], [$2], [libtool_name],
+       [m4_ifval([$1], [$1], [$2])])
+    lt_dict_add_subkey([lt_decl_dict], [$2], [value], [$3])
+    m4_ifval([$4],
+       [lt_dict_add_subkey([lt_decl_dict], [$2], [description], [$4])])
+    lt_dict_add_subkey([lt_decl_dict], [$2],
+       [tagged?], [m4_ifval([$5], [yes], [no])])])
+])
+
+
+# _LT_TAGDECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION])
+# --------------------------------------------------------
+m4_define([_LT_TAGDECL], [_LT_DECL([$1], [$2], [$3], [$4], [yes])])
+
+
+# lt_decl_tag_varnames([SEPARATOR], [VARNAME1...])
+# ------------------------------------------------
+m4_define([lt_decl_tag_varnames],
+[_lt_decl_filter([tagged?], [yes], $@)])
+
+
+# _lt_decl_filter(SUBKEY, VALUE, [SEPARATOR], [VARNAME1..])
+# ---------------------------------------------------------
+m4_define([_lt_decl_filter],
+[m4_case([$#],
+  [0], [m4_fatal([$0: too few arguments: $#])],
+  [1], [m4_fatal([$0: too few arguments: $#: $1])],
+  [2], [lt_dict_filter([lt_decl_dict], [$1], [$2], [], lt_decl_varnames)],
+  [3], [lt_dict_filter([lt_decl_dict], [$1], [$2], [$3], lt_decl_varnames)],
+  [lt_dict_filter([lt_decl_dict], $@)])[]dnl
+])
+
+
+# lt_decl_quote_varnames([SEPARATOR], [VARNAME1...])
+# --------------------------------------------------
+m4_define([lt_decl_quote_varnames],
+[_lt_decl_filter([value], [1], $@)])
+
+
+# lt_decl_dquote_varnames([SEPARATOR], [VARNAME1...])
+# ---------------------------------------------------
+m4_define([lt_decl_dquote_varnames],
+[_lt_decl_filter([value], [2], $@)])
+
+
+# lt_decl_varnames_tagged([SEPARATOR], [VARNAME1...])
+# ---------------------------------------------------
+m4_define([lt_decl_varnames_tagged],
+[_$0(m4_quote(m4_default([$1], [[, ]])),
+     m4_quote(m4_if([$2], [],
+                    m4_quote(lt_decl_tag_varnames),
+                 m4_quote(m4_shift($@)))),
+     m4_split(m4_normalize(m4_quote(_LT_TAGS))))])
+m4_define([_lt_decl_varnames_tagged], [lt_combine([$1], [$2], [_], $3)])
+
+
+# lt_decl_all_varnames([SEPARATOR], [VARNAME1...])
+# ------------------------------------------------
+m4_define([lt_decl_all_varnames],
+[_$0(m4_quote(m4_default([$1], [[, ]])),
+     m4_if([$2], [],
+          m4_quote(lt_decl_varnames),
+       m4_quote(m4_shift($@))))[]dnl
+])
+m4_define([_lt_decl_all_varnames],
+[lt_join($@, lt_decl_varnames_tagged([$1],
+                       lt_decl_tag_varnames([[, ]], m4_shift($@))))dnl
+])
+
+
+# _LT_CONFIG_STATUS_DECLARE([VARNAME])
+# ------------------------------------
+# Quote a variable value, and forward it to `config.status' so that its
+# declaration there will have the same value as in `configure'.  VARNAME
+# must have a single quote delimited value for this to work.
+m4_define([_LT_CONFIG_STATUS_DECLARE],
+[$1='`$ECHO "X$][$1" | $Xsed -e "$delay_single_quote_subst"`'])
+
+
+# _LT_CONFIG_STATUS_DECLARATIONS
+# ------------------------------
+# We delimit libtool config variables with single quotes, so when
+# we write them to config.status, we have to be sure to quote all
+# embedded single quotes properly.  In configure, this macro expands
+# each variable declared with _LT_DECL (and _LT_TAGDECL) into:
+#
+#    <var>='`$ECHO "X$<var>" | $Xsed -e "$delay_single_quote_subst"`'
+m4_defun([_LT_CONFIG_STATUS_DECLARATIONS],
+[m4_foreach([_lt_var], m4_quote(lt_decl_all_varnames),
+    [m4_n([_LT_CONFIG_STATUS_DECLARE(_lt_var)])])])
+
+
+# _LT_LIBTOOL_TAGS
+# ----------------
+# Output comment and list of tags supported by the script
+m4_defun([_LT_LIBTOOL_TAGS],
+[_LT_FORMAT_COMMENT([The names of the tagged configurations supported by this script])dnl
+available_tags="_LT_TAGS"dnl
+])
+
+
+# _LT_LIBTOOL_DECLARE(VARNAME, [TAG])
+# -----------------------------------
+# Extract the dictionary values for VARNAME (optionally with TAG) and
+# expand to a commented shell variable setting:
+#
+#    # Some comment about what VAR is for.
+#    visible_name=$lt_internal_name
+m4_define([_LT_LIBTOOL_DECLARE],
+[_LT_FORMAT_COMMENT(m4_quote(lt_dict_fetch([lt_decl_dict], [$1],
+                                          [description])))[]dnl
+m4_pushdef([_libtool_name],
+    m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [libtool_name])))[]dnl
+m4_case(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [value])),
+    [0], [_libtool_name=[$]$1],
+    [1], [_libtool_name=$lt_[]$1],
+    [2], [_libtool_name=$lt_[]$1],
+    [_libtool_name=lt_dict_fetch([lt_decl_dict], [$1], [value])])[]dnl
+m4_ifval([$2], [_$2])[]m4_popdef([_libtool_name])[]dnl
+])
+
+
+# _LT_LIBTOOL_CONFIG_VARS
+# -----------------------
+# Produce commented declarations of non-tagged libtool config variables
+# suitable for insertion in the LIBTOOL CONFIG section of the `libtool'
+# script.  Tagged libtool config variables (even for the LIBTOOL CONFIG
+# section) are produced by _LT_LIBTOOL_TAG_VARS.
+m4_defun([_LT_LIBTOOL_CONFIG_VARS],
+[m4_foreach([_lt_var],
+    m4_quote(_lt_decl_filter([tagged?], [no], [], lt_decl_varnames)),
+    [m4_n([_LT_LIBTOOL_DECLARE(_lt_var)])])])
+
+
+# _LT_LIBTOOL_TAG_VARS(TAG)
+# -------------------------
+m4_define([_LT_LIBTOOL_TAG_VARS],
+[m4_foreach([_lt_var], m4_quote(lt_decl_tag_varnames),
+    [m4_n([_LT_LIBTOOL_DECLARE(_lt_var, [$1])])])])
+
+
+# _LT_TAGVAR(VARNAME, [TAGNAME])
+# ------------------------------
+m4_define([_LT_TAGVAR], [m4_ifval([$2], [$1_$2], [$1])])
+
+
+# _LT_CONFIG_COMMANDS
+# -------------------
+# Send accumulated output to $CONFIG_STATUS.  Thanks to the lists of
+# variables for single and double quote escaping we saved from calls
+# to _LT_DECL, we can put quote escaped variables declarations
+# into `config.status', and then the shell code to quote escape them in
+# for loops in `config.status'.  Finally, any additional code accumulated
+# from calls to _LT_CONFIG_LIBTOOL_INIT is expanded.
+m4_defun([_LT_CONFIG_COMMANDS],
+[AC_PROVIDE_IFELSE([LT_OUTPUT],
+       dnl If the libtool generation code has been placed in $CONFIG_LT,
+       dnl instead of duplicating it all over again into config.status,
+       dnl then we will have config.status run $CONFIG_LT later, so it
+       dnl needs to know what name is stored there:
+        [AC_CONFIG_COMMANDS([libtool],
+            [$SHELL $CONFIG_LT || AS_EXIT(1)], [CONFIG_LT='$CONFIG_LT'])],
+    dnl If the libtool generation code is destined for config.status,
+    dnl expand the accumulated commands and init code now:
+    [AC_CONFIG_COMMANDS([libtool],
+        [_LT_OUTPUT_LIBTOOL_COMMANDS], [_LT_OUTPUT_LIBTOOL_COMMANDS_INIT])])
+])#_LT_CONFIG_COMMANDS
+
+
+# Initialize.
+m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS_INIT],
+[
+
+# The HP-UX ksh and POSIX shell print the target directory to stdout
+# if CDPATH is set.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+sed_quote_subst='$sed_quote_subst'
+double_quote_subst='$double_quote_subst'
+delay_variable_subst='$delay_variable_subst'
+_LT_CONFIG_STATUS_DECLARATIONS
+LTCC='$LTCC'
+LTCFLAGS='$LTCFLAGS'
+compiler='$compiler_DEFAULT'
+
+# Quote evaled strings.
+for var in lt_decl_all_varnames([[ \
+]], lt_decl_quote_varnames); do
+    case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in
+    *[[\\\\\\\`\\"\\\$]]*)
+      eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$sed_quote_subst\\"\\\`\\\\\\""
+      ;;
+    *)
+      eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
+      ;;
+    esac
+done
+
+# Double-quote double-evaled strings.
+for var in lt_decl_all_varnames([[ \
+]], lt_decl_dquote_varnames); do
+    case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in
+    *[[\\\\\\\`\\"\\\$]]*)
+      eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\""
+      ;;
+    *)
+      eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
+      ;;
+    esac
+done
+
+# Fix-up fallback echo if it was mangled by the above quoting rules.
+case \$lt_ECHO in
+*'\\\[$]0 --fallback-echo"')dnl "
+  lt_ECHO=\`\$ECHO "X\$lt_ECHO" | \$Xsed -e 's/\\\\\\\\\\\\\\\[$]0 --fallback-echo"\[$]/\[$]0 --fallback-echo"/'\`
+  ;;
+esac
+
+_LT_OUTPUT_LIBTOOL_INIT
+])
+
+
+# LT_OUTPUT
+# ---------
+# This macro allows early generation of the libtool script (before
+# AC_OUTPUT is called), incase it is used in configure for compilation
+# tests.
+AC_DEFUN([LT_OUTPUT],
+[: ${CONFIG_LT=./config.lt}
+AC_MSG_NOTICE([creating $CONFIG_LT])
+cat >"$CONFIG_LT" <<_LTEOF
+#! $SHELL
+# Generated by $as_me.
+# Run this file to recreate a libtool stub with the current configuration.
+
+lt_cl_silent=false
+SHELL=\${CONFIG_SHELL-$SHELL}
+_LTEOF
+
+cat >>"$CONFIG_LT" <<\_LTEOF
+AS_SHELL_SANITIZE
+_AS_PREPARE
+
+exec AS_MESSAGE_FD>&1
+exec AS_MESSAGE_LOG_FD>>config.log
+{
+  echo
+  AS_BOX([Running $as_me.])
+} >&AS_MESSAGE_LOG_FD
+
+lt_cl_help="\
+\`$as_me' creates a local libtool stub from the current configuration,
+for use in further configure time tests before the real libtool is
+generated.
+
+Usage: $[0] [[OPTIONS]]
+
+  -h, --help      print this help, then exit
+  -V, --version   print version number, then exit
+  -q, --quiet     do not print progress messages
+  -d, --debug     don't remove temporary files
+
+Report bugs to <bug-libtool@gnu.org>."
+
+lt_cl_version="\
+m4_ifset([AC_PACKAGE_NAME], [AC_PACKAGE_NAME ])config.lt[]dnl
+m4_ifset([AC_PACKAGE_VERSION], [ AC_PACKAGE_VERSION])
+configured by $[0], generated by m4_PACKAGE_STRING.
+
+Copyright (C) 2008 Free Software Foundation, Inc.
+This config.lt script is free software; the Free Software Foundation
+gives unlimited permision to copy, distribute and modify it."
+
+while test $[#] != 0
+do
+  case $[1] in
+    --version | --v* | -V )
+      echo "$lt_cl_version"; exit 0 ;;
+    --help | --h* | -h )
+      echo "$lt_cl_help"; exit 0 ;;
+    --debug | --d* | -d )
+      debug=: ;;
+    --quiet | --q* | --silent | --s* | -q )
+      lt_cl_silent=: ;;
+
+    -*) AC_MSG_ERROR([unrecognized option: $[1]
+Try \`$[0] --help' for more information.]) ;;
+
+    *) AC_MSG_ERROR([unrecognized argument: $[1]
+Try \`$[0] --help' for more information.]) ;;
+  esac
+  shift
+done
+
+if $lt_cl_silent; then
+  exec AS_MESSAGE_FD>/dev/null
+fi
+_LTEOF
+
+cat >>"$CONFIG_LT" <<_LTEOF
+_LT_OUTPUT_LIBTOOL_COMMANDS_INIT
+_LTEOF
+
+cat >>"$CONFIG_LT" <<\_LTEOF
+AC_MSG_NOTICE([creating $ofile])
+_LT_OUTPUT_LIBTOOL_COMMANDS
+AS_EXIT(0)
+_LTEOF
+chmod +x "$CONFIG_LT"
+
+# configure is writing to config.log, but config.lt does its own redirection,
+# appending to config.log, which fails on DOS, as config.log is still kept
+# open by configure.  Here we exec the FD to /dev/null, effectively closing
+# config.log, so it can be properly (re)opened and appended to by config.lt.
+if test "$no_create" != yes; then
+  lt_cl_success=:
+  test "$silent" = yes &&
+    lt_config_lt_args="$lt_config_lt_args --quiet"
+  exec AS_MESSAGE_LOG_FD>/dev/null
+  $SHELL "$CONFIG_LT" $lt_config_lt_args || lt_cl_success=false
+  exec AS_MESSAGE_LOG_FD>>config.log
+  $lt_cl_success || AS_EXIT(1)
+fi
+])# LT_OUTPUT
+
+
+# _LT_CONFIG(TAG)
+# ---------------
+# If TAG is the built-in tag, create an initial libtool script with a
+# default configuration from the untagged config vars.  Otherwise add code
+# to config.status for appending the configuration named by TAG from the
+# matching tagged config vars.
+m4_defun([_LT_CONFIG],
+[m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+_LT_CONFIG_SAVE_COMMANDS([
+  m4_define([_LT_TAG], m4_if([$1], [], [C], [$1]))dnl
+  m4_if(_LT_TAG, [C], [
+    # See if we are running on zsh, and set the options which allow our
+    # commands through without removal of \ escapes.
+    if test -n "${ZSH_VERSION+set}" ; then
+      setopt NO_GLOB_SUBST
+    fi
+
+    cfgfile="${ofile}T"
+    trap "$RM \"$cfgfile\"; exit 1" 1 2 15
+    $RM "$cfgfile"
+
+    cat <<_LT_EOF >> "$cfgfile"
+#! $SHELL
+
+# `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services.
+# Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION
+# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
+# NOTE: Changes made to this file will be lost: look at ltmain.sh.
+#
+_LT_COPYING
+_LT_LIBTOOL_TAGS
+
+# ### BEGIN LIBTOOL CONFIG
+_LT_LIBTOOL_CONFIG_VARS
+_LT_LIBTOOL_TAG_VARS
+# ### END LIBTOOL CONFIG
+
+_LT_EOF
+
+  case $host_os in
+  aix3*)
+    cat <<\_LT_EOF >> "$cfgfile"
+# AIX sometimes has problems with the GCC collect2 program.  For some
+# reason, if we set the COLLECT_NAMES environment variable, the problems
+# vanish in a puff of smoke.
+if test "X${COLLECT_NAMES+set}" != Xset; then
+  COLLECT_NAMES=
+  export COLLECT_NAMES
+fi
+_LT_EOF
+    ;;
+  esac
+
+  _LT_PROG_LTMAIN
+
+  # We use sed instead of cat because bash on DJGPP gets confused if
+  # if finds mixed CR/LF and LF-only lines.  Since sed operates in
+  # text mode, it properly converts lines to CR/LF.  This bash problem
+  # is reportedly fixed, but why not run on old versions too?
+  sed '/^# Generated shell functions inserted here/q' "$ltmain" >> "$cfgfile" \
+    || (rm -f "$cfgfile"; exit 1)
+
+  _LT_PROG_XSI_SHELLFNS
+
+  sed -n '/^# Generated shell functions inserted here/,$p' "$ltmain" >> "$cfgfile" \
+    || (rm -f "$cfgfile"; exit 1)
+
+  mv -f "$cfgfile" "$ofile" ||
+    (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile")
+  chmod +x "$ofile"
+],
+[cat <<_LT_EOF >> "$ofile"
+
+dnl Unfortunately we have to use $1 here, since _LT_TAG is not expanded
+dnl in a comment (ie after a #).
+# ### BEGIN LIBTOOL TAG CONFIG: $1
+_LT_LIBTOOL_TAG_VARS(_LT_TAG)
+# ### END LIBTOOL TAG CONFIG: $1
+_LT_EOF
+])dnl /m4_if
+],
+[m4_if([$1], [], [
+    PACKAGE='$PACKAGE'
+    VERSION='$VERSION'
+    TIMESTAMP='$TIMESTAMP'
+    RM='$RM'
+    ofile='$ofile'], [])
+])dnl /_LT_CONFIG_SAVE_COMMANDS
+])# _LT_CONFIG
+
+
+# LT_SUPPORTED_TAG(TAG)
+# ---------------------
+# Trace this macro to discover what tags are supported by the libtool
+# --tag option, using:
+#    autoconf --trace 'LT_SUPPORTED_TAG:$1'
+AC_DEFUN([LT_SUPPORTED_TAG], [])
+
+
+# C support is built-in for now
+m4_define([_LT_LANG_C_enabled], [])
+m4_define([_LT_TAGS], [])
+
+
+# LT_LANG(LANG)
+# -------------
+# Enable libtool support for the given language if not already enabled.
+AC_DEFUN([LT_LANG],
+[AC_BEFORE([$0], [LT_OUTPUT])dnl
+m4_case([$1],
+  [C],                 [_LT_LANG(C)],
+  [C++],               [_LT_LANG(CXX)],
+  [Java],              [_LT_LANG(GCJ)],
+  [Fortran 77],                [_LT_LANG(F77)],
+  [Fortran],           [_LT_LANG(FC)],
+  [Windows Resource],  [_LT_LANG(RC)],
+  [m4_ifdef([_LT_LANG_]$1[_CONFIG],
+    [_LT_LANG($1)],
+    [m4_fatal([$0: unsupported language: "$1"])])])dnl
+])# LT_LANG
+
+
+# _LT_LANG(LANGNAME)
+# ------------------
+m4_defun([_LT_LANG],
+[m4_ifdef([_LT_LANG_]$1[_enabled], [],
+  [LT_SUPPORTED_TAG([$1])dnl
+  m4_append([_LT_TAGS], [$1 ])dnl
+  m4_define([_LT_LANG_]$1[_enabled], [])dnl
+  _LT_LANG_$1_CONFIG($1)])dnl
+])# _LT_LANG
+
+
+# _LT_LANG_DEFAULT_CONFIG
+# -----------------------
+m4_defun([_LT_LANG_DEFAULT_CONFIG],
+[AC_PROVIDE_IFELSE([AC_PROG_CXX],
+  [LT_LANG(CXX)],
+  [m4_define([AC_PROG_CXX], defn([AC_PROG_CXX])[LT_LANG(CXX)])])
+
+AC_PROVIDE_IFELSE([AC_PROG_F77],
+  [LT_LANG(F77)],
+  [m4_define([AC_PROG_F77], defn([AC_PROG_F77])[LT_LANG(F77)])])
+
+AC_PROVIDE_IFELSE([AC_PROG_FC],
+  [LT_LANG(FC)],
+  [m4_define([AC_PROG_FC], defn([AC_PROG_FC])[LT_LANG(FC)])])
+
+dnl The call to [A][M_PROG_GCJ] is quoted like that to stop aclocal
+dnl pulling things in needlessly.
+AC_PROVIDE_IFELSE([AC_PROG_GCJ],
+  [LT_LANG(GCJ)],
+  [AC_PROVIDE_IFELSE([A][M_PROG_GCJ],
+    [LT_LANG(GCJ)],
+    [AC_PROVIDE_IFELSE([LT_PROG_GCJ],
+      [LT_LANG(GCJ)],
+      [m4_ifdef([AC_PROG_GCJ],
+       [m4_define([AC_PROG_GCJ], defn([AC_PROG_GCJ])[LT_LANG(GCJ)])])
+       m4_ifdef([A][M_PROG_GCJ],
+       [m4_define([A][M_PROG_GCJ], defn([A][M_PROG_GCJ])[LT_LANG(GCJ)])])
+       m4_ifdef([LT_PROG_GCJ],
+       [m4_define([LT_PROG_GCJ], defn([LT_PROG_GCJ])[LT_LANG(GCJ)])])])])])
+
+AC_PROVIDE_IFELSE([LT_PROG_RC],
+  [LT_LANG(RC)],
+  [m4_define([LT_PROG_RC], defn([LT_PROG_RC])[LT_LANG(RC)])])
+])# _LT_LANG_DEFAULT_CONFIG
+
+# Obsolete macros:
+AU_DEFUN([AC_LIBTOOL_CXX], [LT_LANG(C++)])
+AU_DEFUN([AC_LIBTOOL_F77], [LT_LANG(Fortran 77)])
+AU_DEFUN([AC_LIBTOOL_FC], [LT_LANG(Fortran)])
+AU_DEFUN([AC_LIBTOOL_GCJ], [LT_LANG(Java)])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_CXX], [])
+dnl AC_DEFUN([AC_LIBTOOL_F77], [])
+dnl AC_DEFUN([AC_LIBTOOL_FC], [])
+dnl AC_DEFUN([AC_LIBTOOL_GCJ], [])
+
+
+# _LT_TAG_COMPILER
+# ----------------
+m4_defun([_LT_TAG_COMPILER],
+[AC_REQUIRE([AC_PROG_CC])dnl
+
+_LT_DECL([LTCC], [CC], [1], [A C compiler])dnl
+_LT_DECL([LTCFLAGS], [CFLAGS], [1], [LTCC compiler flags])dnl
+_LT_TAGDECL([CC], [compiler], [1], [A language specific compiler])dnl
+_LT_TAGDECL([with_gcc], [GCC], [0], [Is the compiler the GNU compiler?])dnl
+
+# If no C compiler was specified, use CC.
+LTCC=${LTCC-"$CC"}
+
+# If no C compiler flags were specified, use CFLAGS.
+LTCFLAGS=${LTCFLAGS-"$CFLAGS"}
+
+# Allow CC to be a program name with arguments.
+compiler=$CC
+])# _LT_TAG_COMPILER
+
+
+# _LT_COMPILER_BOILERPLATE
+# ------------------------
+# Check for compiler boilerplate output or warnings with
+# the simple compiler test code.
+m4_defun([_LT_COMPILER_BOILERPLATE],
+[m4_require([_LT_DECL_SED])dnl
+ac_outfile=conftest.$ac_objext
+echo "$lt_simple_compile_test_code" >conftest.$ac_ext
+eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
+_lt_compiler_boilerplate=`cat conftest.err`
+$RM conftest*
+])# _LT_COMPILER_BOILERPLATE
+
+
+# _LT_LINKER_BOILERPLATE
+# ----------------------
+# Check for linker boilerplate output or warnings with
+# the simple link test code.
+m4_defun([_LT_LINKER_BOILERPLATE],
+[m4_require([_LT_DECL_SED])dnl
+ac_outfile=conftest.$ac_objext
+echo "$lt_simple_link_test_code" >conftest.$ac_ext
+eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
+_lt_linker_boilerplate=`cat conftest.err`
+$RM -r conftest*
+])# _LT_LINKER_BOILERPLATE
+
+# _LT_REQUIRED_DARWIN_CHECKS
+# -------------------------
+m4_defun_once([_LT_REQUIRED_DARWIN_CHECKS],[
+  case $host_os in
+    rhapsody* | darwin*)
+    AC_CHECK_TOOL([DSYMUTIL], [dsymutil], [:])
+    AC_CHECK_TOOL([NMEDIT], [nmedit], [:])
+    AC_CHECK_TOOL([LIPO], [lipo], [:])
+    AC_CHECK_TOOL([OTOOL], [otool], [:])
+    AC_CHECK_TOOL([OTOOL64], [otool64], [:])
+    _LT_DECL([], [DSYMUTIL], [1],
+      [Tool to manipulate archived DWARF debug symbol files on Mac OS X])
+    _LT_DECL([], [NMEDIT], [1],
+      [Tool to change global to local symbols on Mac OS X])
+    _LT_DECL([], [LIPO], [1],
+      [Tool to manipulate fat objects and archives on Mac OS X])
+    _LT_DECL([], [OTOOL], [1],
+      [ldd/readelf like tool for Mach-O binaries on Mac OS X])
+    _LT_DECL([], [OTOOL64], [1],
+      [ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4])
+
+    AC_CACHE_CHECK([for -single_module linker flag],[lt_cv_apple_cc_single_mod],
+      [lt_cv_apple_cc_single_mod=no
+      if test -z "${LT_MULTI_MODULE}"; then
+       # By default we will add the -single_module flag. You can override
+       # by either setting the environment variable LT_MULTI_MODULE
+       # non-empty at configure time, or by adding -multi_module to the
+       # link flags.
+       rm -rf libconftest.dylib*
+       echo "int foo(void){return 1;}" > conftest.c
+       echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \
+-dynamiclib -Wl,-single_module conftest.c" >&AS_MESSAGE_LOG_FD
+       $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \
+         -dynamiclib -Wl,-single_module conftest.c 2>conftest.err
+        _lt_result=$?
+       if test -f libconftest.dylib && test ! -s conftest.err && test $_lt_result = 0; then
+         lt_cv_apple_cc_single_mod=yes
+       else
+         cat conftest.err >&AS_MESSAGE_LOG_FD
+       fi
+       rm -rf libconftest.dylib*
+       rm -f conftest.*
+      fi])
+    AC_CACHE_CHECK([for -exported_symbols_list linker flag],
+      [lt_cv_ld_exported_symbols_list],
+      [lt_cv_ld_exported_symbols_list=no
+      save_LDFLAGS=$LDFLAGS
+      echo "_main" > conftest.sym
+      LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym"
+      AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])],
+       [lt_cv_ld_exported_symbols_list=yes],
+       [lt_cv_ld_exported_symbols_list=no])
+       LDFLAGS="$save_LDFLAGS"
+    ])
+    case $host_os in
+    rhapsody* | darwin1.[[012]])
+      _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;;
+    darwin1.*)
+      _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;;
+    darwin*) # darwin 5.x on 
+      # if running on 10.5 or later, the deployment target defaults
+      # to the OS version, if on x86, and 10.4, the deployment
+      # target defaults to 10.4. Don't you love it? 
+      case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in
+       10.0,*86*-darwin8*|10.0,*-darwin[[91]]*)
+         _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;;
+       10.[[012]]*)
+         _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;;
+       10.*)
+         _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;;
+      esac
+    ;;
+  esac
+    if test "$lt_cv_apple_cc_single_mod" = "yes"; then
+      _lt_dar_single_mod='$single_module'
+    fi
+    if test "$lt_cv_ld_exported_symbols_list" = "yes"; then
+      _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym'
+    else
+      _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}'
+    fi
+    if test "$DSYMUTIL" != ":"; then
+      _lt_dsymutil='~$DSYMUTIL $lib || :'
+    else
+      _lt_dsymutil=
+    fi
+    ;;
+  esac
+])
+
+
+# _LT_DARWIN_LINKER_FEATURES
+# --------------------------
+# Checks for linker and compiler features on darwin
+m4_defun([_LT_DARWIN_LINKER_FEATURES],
+[
+  m4_require([_LT_REQUIRED_DARWIN_CHECKS])
+  _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+  _LT_TAGVAR(hardcode_direct, $1)=no
+  _LT_TAGVAR(hardcode_automatic, $1)=yes
+  _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
+  _LT_TAGVAR(whole_archive_flag_spec, $1)=''
+  _LT_TAGVAR(link_all_deplibs, $1)=yes
+  _LT_TAGVAR(allow_undefined_flag, $1)="$_lt_dar_allow_undefined"
+  if test "$GCC" = "yes"; then
+    output_verbose_link_cmd=echo
+    _LT_TAGVAR(archive_cmds, $1)="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}"
+    _LT_TAGVAR(module_cmds, $1)="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}"
+    _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}"
+    _LT_TAGVAR(module_expsym_cmds, $1)="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}"
+    m4_if([$1], [CXX],
+[   if test "$lt_cv_apple_cc_single_mod" != "yes"; then
+      _LT_TAGVAR(archive_cmds, $1)="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dsymutil}"
+      _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dar_export_syms}${_lt_dsymutil}"
+    fi
+],[])
+  else
+  _LT_TAGVAR(ld_shlibs, $1)=no
+  fi
+])
+
+# _LT_SYS_MODULE_PATH_AIX
+# -----------------------
+# Links a minimal program and checks the executable
+# for the system default hardcoded library path. In most cases,
+# this is /usr/lib:/lib, but when the MPI compilers are used
+# the location of the communication and MPI libs are included too.
+# If we don't find anything, use the default library path according
+# to the aix ld manual.
+m4_defun([_LT_SYS_MODULE_PATH_AIX],
+[m4_require([_LT_DECL_SED])dnl
+AC_LINK_IFELSE(AC_LANG_PROGRAM,[
+lt_aix_libpath_sed='
+    /Import File Strings/,/^$/ {
+       /^0/ {
+           s/^0  *\(.*\)$/\1/
+           p
+       }
+    }'
+aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+# Check for a 64-bit object if we didn't find anything.
+if test -z "$aix_libpath"; then
+  aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+fi],[])
+if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+])# _LT_SYS_MODULE_PATH_AIX
+
+
+# _LT_SHELL_INIT(ARG)
+# -------------------
+m4_define([_LT_SHELL_INIT],
+[ifdef([AC_DIVERSION_NOTICE],
+            [AC_DIVERT_PUSH(AC_DIVERSION_NOTICE)],
+        [AC_DIVERT_PUSH(NOTICE)])
+$1
+AC_DIVERT_POP
+])# _LT_SHELL_INIT
+
+
+# _LT_PROG_ECHO_BACKSLASH
+# -----------------------
+# Add some code to the start of the generated configure script which
+# will find an echo command which doesn't interpret backslashes.
+m4_defun([_LT_PROG_ECHO_BACKSLASH],
+[_LT_SHELL_INIT([
+# Check that we are running under the correct shell.
+SHELL=${CONFIG_SHELL-/bin/sh}
+
+case X$lt_ECHO in
+X*--fallback-echo)
+  # Remove one level of quotation (which was required for Make).
+  ECHO=`echo "$lt_ECHO" | sed 's,\\\\\[$]\\[$]0,'[$]0','`
+  ;;
+esac
+
+ECHO=${lt_ECHO-echo}
+if test "X[$]1" = X--no-reexec; then
+  # Discard the --no-reexec flag, and continue.
+  shift
+elif test "X[$]1" = X--fallback-echo; then
+  # Avoid inline document here, it may be left over
+  :
+elif test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' ; then
+  # Yippee, $ECHO works!
+  :
+else
+  # Restart under the correct shell.
+  exec $SHELL "[$]0" --no-reexec ${1+"[$]@"}
+fi
+
+if test "X[$]1" = X--fallback-echo; then
+  # used as fallback echo
+  shift
+  cat <<_LT_EOF
+[$]*
+_LT_EOF
+  exit 0
+fi
+
+# The HP-UX ksh and POSIX shell print the target directory to stdout
+# if CDPATH is set.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+if test -z "$lt_ECHO"; then
+  if test "X${echo_test_string+set}" != Xset; then
+    # find a string as large as possible, as long as the shell can cope with it
+    for cmd in 'sed 50q "[$]0"' 'sed 20q "[$]0"' 'sed 10q "[$]0"' 'sed 2q "[$]0"' 'echo test'; do
+      # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ...
+      if { echo_test_string=`eval $cmd`; } 2>/dev/null &&
+        { test "X$echo_test_string" = "X$echo_test_string"; } 2>/dev/null
+      then
+        break
+      fi
+    done
+  fi
+
+  if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' &&
+     echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` &&
+     test "X$echo_testing_string" = "X$echo_test_string"; then
+    :
+  else
+    # The Solaris, AIX, and Digital Unix default echo programs unquote
+    # backslashes.  This makes it impossible to quote backslashes using
+    #   echo "$something" | sed 's/\\/\\\\/g'
+    #
+    # So, first we look for a working echo in the user's PATH.
+
+    lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+    for dir in $PATH /usr/ucb; do
+      IFS="$lt_save_ifs"
+      if (test -f $dir/echo || test -f $dir/echo$ac_exeext) &&
+         test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' &&
+         echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` &&
+         test "X$echo_testing_string" = "X$echo_test_string"; then
+        ECHO="$dir/echo"
+        break
+      fi
+    done
+    IFS="$lt_save_ifs"
+
+    if test "X$ECHO" = Xecho; then
+      # We didn't find a better echo, so look for alternatives.
+      if test "X`{ print -r '\t'; } 2>/dev/null`" = 'X\t' &&
+         echo_testing_string=`{ print -r "$echo_test_string"; } 2>/dev/null` &&
+         test "X$echo_testing_string" = "X$echo_test_string"; then
+        # This shell has a builtin print -r that does the trick.
+        ECHO='print -r'
+      elif { test -f /bin/ksh || test -f /bin/ksh$ac_exeext; } &&
+          test "X$CONFIG_SHELL" != X/bin/ksh; then
+        # If we have ksh, try running configure again with it.
+        ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh}
+        export ORIGINAL_CONFIG_SHELL
+        CONFIG_SHELL=/bin/ksh
+        export CONFIG_SHELL
+        exec $CONFIG_SHELL "[$]0" --no-reexec ${1+"[$]@"}
+      else
+        # Try using printf.
+        ECHO='printf %s\n'
+        if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' &&
+          echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` &&
+          test "X$echo_testing_string" = "X$echo_test_string"; then
+         # Cool, printf works
+         :
+        elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` &&
+            test "X$echo_testing_string" = 'X\t' &&
+            echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
+            test "X$echo_testing_string" = "X$echo_test_string"; then
+         CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL
+         export CONFIG_SHELL
+         SHELL="$CONFIG_SHELL"
+         export SHELL
+         ECHO="$CONFIG_SHELL [$]0 --fallback-echo"
+        elif echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` &&
+            test "X$echo_testing_string" = 'X\t' &&
+            echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
+            test "X$echo_testing_string" = "X$echo_test_string"; then
+         ECHO="$CONFIG_SHELL [$]0 --fallback-echo"
+        else
+         # maybe with a smaller string...
+         prev=:
+
+         for cmd in 'echo test' 'sed 2q "[$]0"' 'sed 10q "[$]0"' 'sed 20q "[$]0"' 'sed 50q "[$]0"'; do
+           if { test "X$echo_test_string" = "X`eval $cmd`"; } 2>/dev/null
+           then
+             break
+           fi
+           prev="$cmd"
+         done
+
+         if test "$prev" != 'sed 50q "[$]0"'; then
+           echo_test_string=`eval $prev`
+           export echo_test_string
+           exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "[$]0" ${1+"[$]@"}
+         else
+           # Oops.  We lost completely, so just stick with echo.
+           ECHO=echo
+         fi
+        fi
+      fi
+    fi
+  fi
+fi
+
+# Copy echo and quote the copy suitably for passing to libtool from
+# the Makefile, instead of quoting the original, which is used later.
+lt_ECHO=$ECHO
+if test "X$lt_ECHO" = "X$CONFIG_SHELL [$]0 --fallback-echo"; then
+   lt_ECHO="$CONFIG_SHELL \\\$\[$]0 --fallback-echo"
+fi
+
+AC_SUBST(lt_ECHO)
+])
+_LT_DECL([], [SHELL], [1], [Shell to use when invoking shell scripts])
+_LT_DECL([], [ECHO], [1],
+    [An echo program that does not interpret backslashes])
+])# _LT_PROG_ECHO_BACKSLASH
+
+
+# _LT_ENABLE_LOCK
+# ---------------
+m4_defun([_LT_ENABLE_LOCK],
+[AC_ARG_ENABLE([libtool-lock],
+  [AS_HELP_STRING([--disable-libtool-lock],
+    [avoid locking (might break parallel builds)])])
+test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes
+
+# Some flags need to be propagated to the compiler or linker for good
+# libtool support.
+case $host in
+ia64-*-hpux*)
+  # Find out which ABI we are using.
+  echo 'int i;' > conftest.$ac_ext
+  if AC_TRY_EVAL(ac_compile); then
+    case `/usr/bin/file conftest.$ac_objext` in
+      *ELF-32*)
+       HPUX_IA64_MODE="32"
+       ;;
+      *ELF-64*)
+       HPUX_IA64_MODE="64"
+       ;;
+    esac
+  fi
+  rm -rf conftest*
+  ;;
+*-*-irix6*)
+  # Find out which ABI we are using.
+  echo '[#]line __oline__ "configure"' > conftest.$ac_ext
+  if AC_TRY_EVAL(ac_compile); then
+    if test "$lt_cv_prog_gnu_ld" = yes; then
+      case `/usr/bin/file conftest.$ac_objext` in
+       *32-bit*)
+         LD="${LD-ld} -melf32bsmip"
+         ;;
+       *N32*)
+         LD="${LD-ld} -melf32bmipn32"
+         ;;
+       *64-bit*)
+         LD="${LD-ld} -melf64bmip"
+       ;;
+      esac
+    else
+      case `/usr/bin/file conftest.$ac_objext` in
+       *32-bit*)
+         LD="${LD-ld} -32"
+         ;;
+       *N32*)
+         LD="${LD-ld} -n32"
+         ;;
+       *64-bit*)
+         LD="${LD-ld} -64"
+         ;;
+      esac
+    fi
+  fi
+  rm -rf conftest*
+  ;;
+
+x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \
+s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
+  # Find out which ABI we are using.
+  echo 'int i;' > conftest.$ac_ext
+  if AC_TRY_EVAL(ac_compile); then
+    case `/usr/bin/file conftest.o` in
+      *32-bit*)
+       case $host in
+         x86_64-*kfreebsd*-gnu)
+           LD="${LD-ld} -m elf_i386_fbsd"
+           ;;
+         x86_64-*linux*)
+           LD="${LD-ld} -m elf_i386"
+           ;;
+         ppc64-*linux*|powerpc64-*linux*)
+           LD="${LD-ld} -m elf32ppclinux"
+           ;;
+         s390x-*linux*)
+           LD="${LD-ld} -m elf_s390"
+           ;;
+         sparc64-*linux*)
+           LD="${LD-ld} -m elf32_sparc"
+           ;;
+       esac
+       ;;
+      *64-bit*)
+       case $host in
+         x86_64-*kfreebsd*-gnu)
+           LD="${LD-ld} -m elf_x86_64_fbsd"
+           ;;
+         x86_64-*linux*)
+           LD="${LD-ld} -m elf_x86_64"
+           ;;
+         ppc*-*linux*|powerpc*-*linux*)
+           LD="${LD-ld} -m elf64ppc"
+           ;;
+         s390*-*linux*|s390*-*tpf*)
+           LD="${LD-ld} -m elf64_s390"
+           ;;
+         sparc*-*linux*)
+           LD="${LD-ld} -m elf64_sparc"
+           ;;
+       esac
+       ;;
+    esac
+  fi
+  rm -rf conftest*
+  ;;
+
+*-*-sco3.2v5*)
+  # On SCO OpenServer 5, we need -belf to get full-featured binaries.
+  SAVE_CFLAGS="$CFLAGS"
+  CFLAGS="$CFLAGS -belf"
+  AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf,
+    [AC_LANG_PUSH(C)
+     AC_LINK_IFELSE([AC_LANG_PROGRAM([[]],[[]])],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no])
+     AC_LANG_POP])
+  if test x"$lt_cv_cc_needs_belf" != x"yes"; then
+    # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf
+    CFLAGS="$SAVE_CFLAGS"
+  fi
+  ;;
+sparc*-*solaris*)
+  # Find out which ABI we are using.
+  echo 'int i;' > conftest.$ac_ext
+  if AC_TRY_EVAL(ac_compile); then
+    case `/usr/bin/file conftest.o` in
+    *64-bit*)
+      case $lt_cv_prog_gnu_ld in
+      yes*) LD="${LD-ld} -m elf64_sparc" ;;
+      *)
+       if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then
+         LD="${LD-ld} -64"
+       fi
+       ;;
+      esac
+      ;;
+    esac
+  fi
+  rm -rf conftest*
+  ;;
+esac
+
+need_locks="$enable_libtool_lock"
+])# _LT_ENABLE_LOCK
+
+
+# _LT_CMD_OLD_ARCHIVE
+# -------------------
+m4_defun([_LT_CMD_OLD_ARCHIVE],
+[AC_CHECK_TOOL(AR, ar, false)
+test -z "$AR" && AR=ar
+test -z "$AR_FLAGS" && AR_FLAGS=cru
+_LT_DECL([], [AR], [1], [The archiver])
+_LT_DECL([], [AR_FLAGS], [1])
+
+AC_CHECK_TOOL(STRIP, strip, :)
+test -z "$STRIP" && STRIP=:
+_LT_DECL([], [STRIP], [1], [A symbol stripping program])
+
+AC_CHECK_TOOL(RANLIB, ranlib, :)
+test -z "$RANLIB" && RANLIB=:
+_LT_DECL([], [RANLIB], [1],
+    [Commands used to install an old-style archive])
+
+# Determine commands to create old-style static archives.
+old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs'
+old_postinstall_cmds='chmod 644 $oldlib'
+old_postuninstall_cmds=
+
+if test -n "$RANLIB"; then
+  case $host_os in
+  openbsd*)
+    old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$oldlib"
+    ;;
+  *)
+    old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$oldlib"
+    ;;
+  esac
+  old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib"
+fi
+_LT_DECL([], [old_postinstall_cmds], [2])
+_LT_DECL([], [old_postuninstall_cmds], [2])
+_LT_TAGDECL([], [old_archive_cmds], [2],
+    [Commands used to build an old-style archive])
+])# _LT_CMD_OLD_ARCHIVE
+
+
+# _LT_COMPILER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS,
+#              [OUTPUT-FILE], [ACTION-SUCCESS], [ACTION-FAILURE])
+# ----------------------------------------------------------------
+# Check whether the given compiler option works
+AC_DEFUN([_LT_COMPILER_OPTION],
+[m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+m4_require([_LT_DECL_SED])dnl
+AC_CACHE_CHECK([$1], [$2],
+  [$2=no
+   m4_if([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4])
+   echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+   lt_compiler_flag="$3"
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   # The option is referenced via a variable to avoid confusing sed.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+   -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&AS_MESSAGE_LOG_FD)
+   (eval "$lt_compile" 2>conftest.err)
+   ac_status=$?
+   cat conftest.err >&AS_MESSAGE_LOG_FD
+   echo "$as_me:__oline__: \$? = $ac_status" >&AS_MESSAGE_LOG_FD
+   if (exit $ac_status) && test -s "$ac_outfile"; then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings other than the usual output.
+     $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp
+     $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+     if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
+       $2=yes
+     fi
+   fi
+   $RM conftest*
+])
+
+if test x"[$]$2" = xyes; then
+    m4_if([$5], , :, [$5])
+else
+    m4_if([$6], , :, [$6])
+fi
+])# _LT_COMPILER_OPTION
+
+# Old name:
+AU_ALIAS([AC_LIBTOOL_COMPILER_OPTION], [_LT_COMPILER_OPTION])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION], [])
+
+
+# _LT_LINKER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS,
+#                  [ACTION-SUCCESS], [ACTION-FAILURE])
+# ----------------------------------------------------
+# Check whether the given linker option works
+AC_DEFUN([_LT_LINKER_OPTION],
+[m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+m4_require([_LT_DECL_SED])dnl
+AC_CACHE_CHECK([$1], [$2],
+  [$2=no
+   save_LDFLAGS="$LDFLAGS"
+   LDFLAGS="$LDFLAGS $3"
+   echo "$lt_simple_link_test_code" > conftest.$ac_ext
+   if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
+     # The linker can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     if test -s conftest.err; then
+       # Append any errors to the config.log.
+       cat conftest.err 1>&AS_MESSAGE_LOG_FD
+       $ECHO "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp
+       $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+       if diff conftest.exp conftest.er2 >/dev/null; then
+         $2=yes
+       fi
+     else
+       $2=yes
+     fi
+   fi
+   $RM -r conftest*
+   LDFLAGS="$save_LDFLAGS"
+])
+
+if test x"[$]$2" = xyes; then
+    m4_if([$4], , :, [$4])
+else
+    m4_if([$5], , :, [$5])
+fi
+])# _LT_LINKER_OPTION
+
+# Old name:
+AU_ALIAS([AC_LIBTOOL_LINKER_OPTION], [_LT_LINKER_OPTION])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_LINKER_OPTION], [])
+
+
+# LT_CMD_MAX_LEN
+#---------------
+AC_DEFUN([LT_CMD_MAX_LEN],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+# find the maximum length of command line arguments
+AC_MSG_CHECKING([the maximum length of command line arguments])
+AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl
+  i=0
+  teststring="ABCD"
+
+  case $build_os in
+  msdosdjgpp*)
+    # On DJGPP, this test can blow up pretty badly due to problems in libc
+    # (any single argument exceeding 2000 bytes causes a buffer overrun
+    # during glob expansion).  Even if it were fixed, the result of this
+    # check would be larger than it should be.
+    lt_cv_sys_max_cmd_len=12288;    # 12K is about right
+    ;;
+
+  gnu*)
+    # Under GNU Hurd, this test is not required because there is
+    # no limit to the length of command line arguments.
+    # Libtool will interpret -1 as no limit whatsoever
+    lt_cv_sys_max_cmd_len=-1;
+    ;;
+
+  cygwin* | mingw*)
+    # On Win9x/ME, this test blows up -- it succeeds, but takes
+    # about 5 minutes as the teststring grows exponentially.
+    # Worse, since 9x/ME are not pre-emptively multitasking,
+    # you end up with a "frozen" computer, even though with patience
+    # the test eventually succeeds (with a max line length of 256k).
+    # Instead, let's just punt: use the minimum linelength reported by
+    # all of the supported platforms: 8192 (on NT/2K/XP).
+    lt_cv_sys_max_cmd_len=8192;
+    ;;
+
+  amigaos*)
+    # On AmigaOS with pdksh, this test takes hours, literally.
+    # So we just punt and use a minimum line length of 8192.
+    lt_cv_sys_max_cmd_len=8192;
+    ;;
+
+  netbsd* | freebsd* | openbsd* | darwin* | dragonfly*)
+    # This has been around since 386BSD, at least.  Likely further.
+    if test -x /sbin/sysctl; then
+      lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax`
+    elif test -x /usr/sbin/sysctl; then
+      lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax`
+    else
+      lt_cv_sys_max_cmd_len=65536      # usable default for all BSDs
+    fi
+    # And add a safety zone
+    lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
+    lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
+    ;;
+
+  interix*)
+    # We know the value 262144 and hardcode it with a safety zone (like BSD)
+    lt_cv_sys_max_cmd_len=196608
+    ;;
+
+  osf*)
+    # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure
+    # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not
+    # nice to cause kernel panics so lets avoid the loop below.
+    # First set a reasonable default.
+    lt_cv_sys_max_cmd_len=16384
+    #
+    if test -x /sbin/sysconfig; then
+      case `/sbin/sysconfig -q proc exec_disable_arg_limit` in
+        *1*) lt_cv_sys_max_cmd_len=-1 ;;
+      esac
+    fi
+    ;;
+  sco3.2v5*)
+    lt_cv_sys_max_cmd_len=102400
+    ;;
+  sysv5* | sco5v6* | sysv4.2uw2*)
+    kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null`
+    if test -n "$kargmax"; then
+      lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[[        ]]//'`
+    else
+      lt_cv_sys_max_cmd_len=32768
+    fi
+    ;;
+  *)
+    lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null`
+    if test -n "$lt_cv_sys_max_cmd_len"; then
+      lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
+      lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
+    else
+      # Make teststring a little bigger before we do anything with it.
+      # a 1K string should be a reasonable start.
+      for i in 1 2 3 4 5 6 7 8 ; do
+        teststring=$teststring$teststring
+      done
+      SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}}
+      # If test is not a shell built-in, we'll probably end up computing a
+      # maximum length that is only half of the actual maximum length, but
+      # we can't tell.
+      while { test "X"`$SHELL [$]0 --fallback-echo "X$teststring$teststring" 2>/dev/null` \
+                = "XX$teststring$teststring"; } >/dev/null 2>&1 &&
+             test $i != 17 # 1/2 MB should be enough
+      do
+        i=`expr $i + 1`
+        teststring=$teststring$teststring
+      done
+      # Only check the string length outside the loop.
+      lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1`
+      teststring=
+      # Add a significant safety factor because C++ compilers can tack on
+      # massive amounts of additional arguments before passing them to the
+      # linker.  It appears as though 1/2 is a usable value.
+      lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2`
+    fi
+    ;;
+  esac
+])
+if test -n $lt_cv_sys_max_cmd_len ; then
+  AC_MSG_RESULT($lt_cv_sys_max_cmd_len)
+else
+  AC_MSG_RESULT(none)
+fi
+max_cmd_len=$lt_cv_sys_max_cmd_len
+_LT_DECL([], [max_cmd_len], [0],
+    [What is the maximum length of a command?])
+])# LT_CMD_MAX_LEN
+
+# Old name:
+AU_ALIAS([AC_LIBTOOL_SYS_MAX_CMD_LEN], [LT_CMD_MAX_LEN])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN], [])
+
+
+# _LT_HEADER_DLFCN
+# ----------------
+m4_defun([_LT_HEADER_DLFCN],
+[AC_CHECK_HEADERS([dlfcn.h], [], [], [AC_INCLUDES_DEFAULT])dnl
+])# _LT_HEADER_DLFCN
+
+
+# _LT_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE,
+#                      ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING)
+# ----------------------------------------------------------------
+m4_defun([_LT_TRY_DLOPEN_SELF],
+[m4_require([_LT_HEADER_DLFCN])dnl
+if test "$cross_compiling" = yes; then :
+  [$4]
+else
+  lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+  lt_status=$lt_dlunknown
+  cat > conftest.$ac_ext <<_LT_EOF
+[#line __oline__ "configure"
+#include "confdefs.h"
+
+#if HAVE_DLFCN_H
+#include <dlfcn.h>
+#endif
+
+#include <stdio.h>
+
+#ifdef RTLD_GLOBAL
+#  define LT_DLGLOBAL          RTLD_GLOBAL
+#else
+#  ifdef DL_GLOBAL
+#    define LT_DLGLOBAL                DL_GLOBAL
+#  else
+#    define LT_DLGLOBAL                0
+#  endif
+#endif
+
+/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
+   find out it does not work in some platform. */
+#ifndef LT_DLLAZY_OR_NOW
+#  ifdef RTLD_LAZY
+#    define LT_DLLAZY_OR_NOW           RTLD_LAZY
+#  else
+#    ifdef DL_LAZY
+#      define LT_DLLAZY_OR_NOW         DL_LAZY
+#    else
+#      ifdef RTLD_NOW
+#        define LT_DLLAZY_OR_NOW       RTLD_NOW
+#      else
+#        ifdef DL_NOW
+#          define LT_DLLAZY_OR_NOW     DL_NOW
+#        else
+#          define LT_DLLAZY_OR_NOW     0
+#        endif
+#      endif
+#    endif
+#  endif
+#endif
+
+#ifdef __cplusplus
+extern "C" void exit (int);
+#endif
+
+void fnord() { int i=42;}
+int main ()
+{
+  void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
+  int status = $lt_dlunknown;
+
+  if (self)
+    {
+      if (dlsym (self,"fnord"))       status = $lt_dlno_uscore;
+      else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
+      /* dlclose (self); */
+    }
+  else
+    puts (dlerror ());
+
+    exit (status);
+}]
+_LT_EOF
+  if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext} 2>/dev/null; then
+    (./conftest; exit; ) >&AS_MESSAGE_LOG_FD 2>/dev/null
+    lt_status=$?
+    case x$lt_status in
+      x$lt_dlno_uscore) $1 ;;
+      x$lt_dlneed_uscore) $2 ;;
+      x$lt_dlunknown|x*) $3 ;;
+    esac
+  else :
+    # compilation failed
+    $3
+  fi
+fi
+rm -fr conftest*
+])# _LT_TRY_DLOPEN_SELF
+
+
+# LT_SYS_DLOPEN_SELF
+# ------------------
+AC_DEFUN([LT_SYS_DLOPEN_SELF],
+[m4_require([_LT_HEADER_DLFCN])dnl
+if test "x$enable_dlopen" != xyes; then
+  enable_dlopen=unknown
+  enable_dlopen_self=unknown
+  enable_dlopen_self_static=unknown
+else
+  lt_cv_dlopen=no
+  lt_cv_dlopen_libs=
+
+  case $host_os in
+  beos*)
+    lt_cv_dlopen="load_add_on"
+    lt_cv_dlopen_libs=
+    lt_cv_dlopen_self=yes
+    ;;
+
+  mingw* | pw32*)
+    lt_cv_dlopen="LoadLibrary"
+    lt_cv_dlopen_libs=
+    ;;
+
+  cygwin*)
+    lt_cv_dlopen="dlopen"
+    lt_cv_dlopen_libs=
+    ;;
+
+  darwin*)
+  # if libdl is installed we need to link against it
+    AC_CHECK_LIB([dl], [dlopen],
+               [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],[
+    lt_cv_dlopen="dyld"
+    lt_cv_dlopen_libs=
+    lt_cv_dlopen_self=yes
+    ])
+    ;;
+
+  *)
+    AC_CHECK_FUNC([shl_load],
+         [lt_cv_dlopen="shl_load"],
+      [AC_CHECK_LIB([dld], [shl_load],
+           [lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld"],
+       [AC_CHECK_FUNC([dlopen],
+             [lt_cv_dlopen="dlopen"],
+         [AC_CHECK_LIB([dl], [dlopen],
+               [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],
+           [AC_CHECK_LIB([svld], [dlopen],
+                 [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"],
+             [AC_CHECK_LIB([dld], [dld_link],
+                   [lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld"])
+             ])
+           ])
+         ])
+       ])
+      ])
+    ;;
+  esac
+
+  if test "x$lt_cv_dlopen" != xno; then
+    enable_dlopen=yes
+  else
+    enable_dlopen=no
+  fi
+
+  case $lt_cv_dlopen in
+  dlopen)
+    save_CPPFLAGS="$CPPFLAGS"
+    test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H"
+
+    save_LDFLAGS="$LDFLAGS"
+    wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\"
+
+    save_LIBS="$LIBS"
+    LIBS="$lt_cv_dlopen_libs $LIBS"
+
+    AC_CACHE_CHECK([whether a program can dlopen itself],
+         lt_cv_dlopen_self, [dnl
+         _LT_TRY_DLOPEN_SELF(
+           lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes,
+           lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross)
+    ])
+
+    if test "x$lt_cv_dlopen_self" = xyes; then
+      wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\"
+      AC_CACHE_CHECK([whether a statically linked program can dlopen itself],
+         lt_cv_dlopen_self_static, [dnl
+         _LT_TRY_DLOPEN_SELF(
+           lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes,
+           lt_cv_dlopen_self_static=no,  lt_cv_dlopen_self_static=cross)
+      ])
+    fi
+
+    CPPFLAGS="$save_CPPFLAGS"
+    LDFLAGS="$save_LDFLAGS"
+    LIBS="$save_LIBS"
+    ;;
+  esac
+
+  case $lt_cv_dlopen_self in
+  yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;;
+  *) enable_dlopen_self=unknown ;;
+  esac
+
+  case $lt_cv_dlopen_self_static in
+  yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;;
+  *) enable_dlopen_self_static=unknown ;;
+  esac
+fi
+_LT_DECL([dlopen_support], [enable_dlopen], [0],
+        [Whether dlopen is supported])
+_LT_DECL([dlopen_self], [enable_dlopen_self], [0],
+        [Whether dlopen of programs is supported])
+_LT_DECL([dlopen_self_static], [enable_dlopen_self_static], [0],
+        [Whether dlopen of statically linked programs is supported])
+])# LT_SYS_DLOPEN_SELF
+
+# Old name:
+AU_ALIAS([AC_LIBTOOL_DLOPEN_SELF], [LT_SYS_DLOPEN_SELF])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF], [])
+
+
+# _LT_COMPILER_C_O([TAGNAME])
+# ---------------------------
+# Check to see if options -c and -o are simultaneously supported by compiler.
+# This macro does not hard code the compiler like AC_PROG_CC_C_O.
+m4_defun([_LT_COMPILER_C_O],
+[m4_require([_LT_DECL_SED])dnl
+m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+m4_require([_LT_TAG_COMPILER])dnl
+AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext],
+  [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)],
+  [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=no
+   $RM -r conftest 2>/dev/null
+   mkdir conftest
+   cd conftest
+   mkdir out
+   echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+   lt_compiler_flag="-o out/conftest2.$ac_objext"
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+   -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&AS_MESSAGE_LOG_FD)
+   (eval "$lt_compile" 2>out/conftest.err)
+   ac_status=$?
+   cat out/conftest.err >&AS_MESSAGE_LOG_FD
+   echo "$as_me:__oline__: \$? = $ac_status" >&AS_MESSAGE_LOG_FD
+   if (exit $ac_status) && test -s out/conftest2.$ac_objext
+   then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp
+     $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
+     if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
+       _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes
+     fi
+   fi
+   chmod u+w . 2>&AS_MESSAGE_LOG_FD
+   $RM conftest*
+   # SGI C++ compiler will create directory out/ii_files/ for
+   # template instantiation
+   test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files
+   $RM out/* && rmdir out
+   cd ..
+   $RM -r conftest
+   $RM conftest*
+])
+_LT_TAGDECL([compiler_c_o], [lt_cv_prog_compiler_c_o], [1],
+       [Does compiler simultaneously support -c and -o options?])
+])# _LT_COMPILER_C_O
+
+
+# _LT_COMPILER_FILE_LOCKS([TAGNAME])
+# ----------------------------------
+# Check to see if we can do hard links to lock some files if needed
+m4_defun([_LT_COMPILER_FILE_LOCKS],
+[m4_require([_LT_ENABLE_LOCK])dnl
+m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+_LT_COMPILER_C_O([$1])
+
+hard_links="nottested"
+if test "$_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)" = no && test "$need_locks" != no; then
+  # do not overwrite the value of need_locks provided by the user
+  AC_MSG_CHECKING([if we can lock with hard links])
+  hard_links=yes
+  $RM conftest*
+  ln conftest.a conftest.b 2>/dev/null && hard_links=no
+  touch conftest.a
+  ln conftest.a conftest.b 2>&5 || hard_links=no
+  ln conftest.a conftest.b 2>/dev/null && hard_links=no
+  AC_MSG_RESULT([$hard_links])
+  if test "$hard_links" = no; then
+    AC_MSG_WARN([`$CC' does not support `-c -o', so `make -j' may be unsafe])
+    need_locks=warn
+  fi
+else
+  need_locks=no
+fi
+_LT_DECL([], [need_locks], [1], [Must we lock files when doing compilation?])
+])# _LT_COMPILER_FILE_LOCKS
+
+
+# _LT_CHECK_OBJDIR
+# ----------------
+m4_defun([_LT_CHECK_OBJDIR],
+[AC_CACHE_CHECK([for objdir], [lt_cv_objdir],
+[rm -f .libs 2>/dev/null
+mkdir .libs 2>/dev/null
+if test -d .libs; then
+  lt_cv_objdir=.libs
+else
+  # MS-DOS does not allow filenames that begin with a dot.
+  lt_cv_objdir=_libs
+fi
+rmdir .libs 2>/dev/null])
+objdir=$lt_cv_objdir
+_LT_DECL([], [objdir], [0],
+         [The name of the directory that contains temporary libtool files])dnl
+m4_pattern_allow([LT_OBJDIR])dnl
+AC_DEFINE_UNQUOTED(LT_OBJDIR, "$lt_cv_objdir/",
+  [Define to the sub-directory in which libtool stores uninstalled libraries.])
+])# _LT_CHECK_OBJDIR
+
+
+# _LT_LINKER_HARDCODE_LIBPATH([TAGNAME])
+# --------------------------------------
+# Check hardcoding attributes.
+m4_defun([_LT_LINKER_HARDCODE_LIBPATH],
+[AC_MSG_CHECKING([how to hardcode library paths into programs])
+_LT_TAGVAR(hardcode_action, $1)=
+if test -n "$_LT_TAGVAR(hardcode_libdir_flag_spec, $1)" ||
+   test -n "$_LT_TAGVAR(runpath_var, $1)" ||
+   test "X$_LT_TAGVAR(hardcode_automatic, $1)" = "Xyes" ; then
+
+  # We can hardcode non-existent directories.
+  if test "$_LT_TAGVAR(hardcode_direct, $1)" != no &&
+     # If the only mechanism to avoid hardcoding is shlibpath_var, we
+     # have to relink, otherwise we might link with an installed library
+     # when we should be linking with a yet-to-be-installed one
+     ## test "$_LT_TAGVAR(hardcode_shlibpath_var, $1)" != no &&
+     test "$_LT_TAGVAR(hardcode_minus_L, $1)" != no; then
+    # Linking always hardcodes the temporary library directory.
+    _LT_TAGVAR(hardcode_action, $1)=relink
+  else
+    # We can link without hardcoding, and we can hardcode nonexisting dirs.
+    _LT_TAGVAR(hardcode_action, $1)=immediate
+  fi
+else
+  # We cannot hardcode anything, or else we can only hardcode existing
+  # directories.
+  _LT_TAGVAR(hardcode_action, $1)=unsupported
+fi
+AC_MSG_RESULT([$_LT_TAGVAR(hardcode_action, $1)])
+
+if test "$_LT_TAGVAR(hardcode_action, $1)" = relink ||
+   test "$_LT_TAGVAR(inherit_rpath, $1)" = yes; then
+  # Fast installation is not supported
+  enable_fast_install=no
+elif test "$shlibpath_overrides_runpath" = yes ||
+     test "$enable_shared" = no; then
+  # Fast installation is not necessary
+  enable_fast_install=needless
+fi
+_LT_TAGDECL([], [hardcode_action], [0],
+    [How to hardcode a shared library path into an executable])
+])# _LT_LINKER_HARDCODE_LIBPATH
+
+
+# _LT_CMD_STRIPLIB
+# ----------------
+m4_defun([_LT_CMD_STRIPLIB],
+[m4_require([_LT_DECL_EGREP])
+striplib=
+old_striplib=
+AC_MSG_CHECKING([whether stripping libraries is possible])
+if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then
+  test -z "$old_striplib" && old_striplib="$STRIP --strip-debug"
+  test -z "$striplib" && striplib="$STRIP --strip-unneeded"
+  AC_MSG_RESULT([yes])
+else
+# FIXME - insert some real tests, host_os isn't really good enough
+  case $host_os in
+  darwin*)
+    if test -n "$STRIP" ; then
+      striplib="$STRIP -x"
+      old_striplib="$STRIP -S"
+      AC_MSG_RESULT([yes])
+    else
+      AC_MSG_RESULT([no])
+    fi
+    ;;
+  *)
+    AC_MSG_RESULT([no])
+    ;;
+  esac
+fi
+_LT_DECL([], [old_striplib], [1], [Commands to strip libraries])
+_LT_DECL([], [striplib], [1])
+])# _LT_CMD_STRIPLIB
+
+
+# _LT_SYS_DYNAMIC_LINKER([TAG])
+# -----------------------------
+# PORTME Fill in your ld.so characteristics
+m4_defun([_LT_SYS_DYNAMIC_LINKER],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+m4_require([_LT_DECL_EGREP])dnl
+m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+m4_require([_LT_DECL_SED])dnl
+AC_MSG_CHECKING([dynamic linker characteristics])
+m4_if([$1],
+       [], [
+if test "$GCC" = yes; then
+  case $host_os in
+    darwin*) lt_awk_arg="/^libraries:/,/LR/" ;;
+    *) lt_awk_arg="/^libraries:/" ;;
+  esac
+  lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e "s,=/,/,g"`
+  if $ECHO "$lt_search_path_spec" | $GREP ';' >/dev/null ; then
+    # if the path contains ";" then we assume it to be the separator
+    # otherwise default to the standard path separator (i.e. ":") - it is
+    # assumed that no part of a normal pathname contains ";" but that should
+    # okay in the real world where ";" in dirpaths is itself problematic.
+    lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED -e 's/;/ /g'`
+  else
+    lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED  -e "s/$PATH_SEPARATOR/ /g"`
+  fi
+  # Ok, now we have the path, separated by spaces, we can step through it
+  # and add multilib dir if necessary.
+  lt_tmp_lt_search_path_spec=
+  lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null`
+  for lt_sys_path in $lt_search_path_spec; do
+    if test -d "$lt_sys_path/$lt_multi_os_dir"; then
+      lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir"
+    else
+      test -d "$lt_sys_path" && \
+       lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path"
+    fi
+  done
+  lt_search_path_spec=`$ECHO $lt_tmp_lt_search_path_spec | awk '
+BEGIN {RS=" "; FS="/|\n";} {
+  lt_foo="";
+  lt_count=0;
+  for (lt_i = NF; lt_i > 0; lt_i--) {
+    if ($lt_i != "" && $lt_i != ".") {
+      if ($lt_i == "..") {
+        lt_count++;
+      } else {
+        if (lt_count == 0) {
+          lt_foo="/" $lt_i lt_foo;
+        } else {
+          lt_count--;
+        }
+      }
+    }
+  }
+  if (lt_foo != "") { lt_freq[[lt_foo]]++; }
+  if (lt_freq[[lt_foo]] == 1) { print lt_foo; }
+}'`
+  sys_lib_search_path_spec=`$ECHO $lt_search_path_spec`
+else
+  sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
+fi])
+library_names_spec=
+libname_spec='lib$name'
+soname_spec=
+shrext_cmds=".so"
+postinstall_cmds=
+postuninstall_cmds=
+finish_cmds=
+finish_eval=
+shlibpath_var=
+shlibpath_overrides_runpath=unknown
+version_type=none
+dynamic_linker="$host_os ld.so"
+sys_lib_dlsearch_path_spec="/lib /usr/lib"
+need_lib_prefix=unknown
+hardcode_into_libs=no
+
+# when you set need_version to no, make sure it does not cause -set_version
+# flags to be left without arguments
+need_version=unknown
+
+case $host_os in
+aix3*)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a'
+  shlibpath_var=LIBPATH
+
+  # AIX 3 has no versioning support, so we append a major version to the name.
+  soname_spec='${libname}${release}${shared_ext}$major'
+  ;;
+
+aix[[4-9]]*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  hardcode_into_libs=yes
+  if test "$host_cpu" = ia64; then
+    # AIX 5 supports IA64
+    library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}'
+    shlibpath_var=LD_LIBRARY_PATH
+  else
+    # With GCC up to 2.95.x, collect2 would create an import file
+    # for dependence libraries.  The import file would start with
+    # the line `#! .'.  This would cause the generated library to
+    # depend on `.', always an invalid library.  This was fixed in
+    # development snapshots of GCC prior to 3.0.
+    case $host_os in
+      aix4 | aix4.[[01]] | aix4.[[01]].*)
+      if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'
+          echo ' yes '
+          echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then
+       :
+      else
+       can_build_shared=no
+      fi
+      ;;
+    esac
+    # AIX (on Power*) has no versioning support, so currently we can not hardcode correct
+    # soname into executable. Probably we can add versioning support to
+    # collect2, so additional links can be useful in future.
+    if test "$aix_use_runtimelinking" = yes; then
+      # If using run time linking (on AIX 4.2 or later) use lib<name>.so
+      # instead of lib<name>.a to let people know that these are not
+      # typical AIX shared libraries.
+      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    else
+      # We preserve .a as extension for shared libraries through AIX4.2
+      # and later when we are not doing run time linking.
+      library_names_spec='${libname}${release}.a $libname.a'
+      soname_spec='${libname}${release}${shared_ext}$major'
+    fi
+    shlibpath_var=LIBPATH
+  fi
+  ;;
+
+amigaos*)
+  case $host_cpu in
+  powerpc)
+    # Since July 2007 AmigaOS4 officially supports .so libraries.
+    # When compiling the executable, add -use-dynld -Lsobjs: to the compileline.
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    ;;
+  m68k)
+    library_names_spec='$libname.ixlibrary $libname.a'
+    # Create ${libname}_ixlibrary.a entries in /sys/libs.
+    finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$ECHO "X$lib" | $Xsed -e '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done'
+    ;;
+  esac
+  ;;
+
+beos*)
+  library_names_spec='${libname}${shared_ext}'
+  dynamic_linker="$host_os ld.so"
+  shlibpath_var=LIBRARY_PATH
+  ;;
+
+bsdi[[45]]*)
+  version_type=linux
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
+  sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
+  # the default ld.so.conf also contains /usr/contrib/lib and
+  # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow
+  # libtool to hard-code these into programs
+  ;;
+
+cygwin* | mingw* | pw32*)
+  version_type=windows
+  shrext_cmds=".dll"
+  need_version=no
+  need_lib_prefix=no
+
+  case $GCC,$host_os in
+  yes,cygwin* | yes,mingw* | yes,pw32*)
+    library_names_spec='$libname.dll.a'
+    # DLL is installed to $(libdir)/../bin by postinstall_cmds
+    postinstall_cmds='base_file=`basename \${file}`~
+      dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~
+      dldir=$destdir/`dirname \$dlpath`~
+      test -d \$dldir || mkdir -p \$dldir~
+      $install_prog $dir/$dlname \$dldir/$dlname~
+      chmod a+x \$dldir/$dlname~
+      if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then
+        eval '\''$striplib \$dldir/$dlname'\'' || exit \$?;
+      fi'
+    postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
+      dlpath=$dir/\$dldll~
+       $RM \$dlpath'
+    shlibpath_overrides_runpath=yes
+
+    case $host_os in
+    cygwin*)
+      # Cygwin DLLs use 'cyg' prefix rather than 'lib'
+      soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'
+      sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib"
+      ;;
+    mingw*)
+      # MinGW DLLs use traditional 'lib' prefix
+      soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'
+      sys_lib_search_path_spec=`$CC -print-search-dirs | $GREP "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"`
+      if $ECHO "$sys_lib_search_path_spec" | [$GREP ';[c-zC-Z]:/' >/dev/null]; then
+        # It is most probably a Windows format PATH printed by
+        # mingw gcc, but we are running on Cygwin. Gcc prints its search
+        # path with ; separators, and with drive letters. We can handle the
+        # drive letters (cygwin fileutils understands them), so leave them,
+        # especially as we might pass files found there to a mingw objdump,
+        # which wouldn't understand a cygwinified path. Ahh.
+        sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
+      else
+        sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED  -e "s/$PATH_SEPARATOR/ /g"`
+      fi
+      ;;
+    pw32*)
+      # pw32 DLLs use 'pw' prefix rather than 'lib'
+      library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'
+      ;;
+    esac
+    ;;
+
+  *)
+    library_names_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext} $libname.lib'
+    ;;
+  esac
+  dynamic_linker='Win32 ld.exe'
+  # FIXME: first we should search . and the directory the executable is in
+  shlibpath_var=PATH
+  ;;
+
+darwin* | rhapsody*)
+  dynamic_linker="$host_os dyld"
+  version_type=darwin
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext'
+  soname_spec='${libname}${release}${major}$shared_ext'
+  shlibpath_overrides_runpath=yes
+  shlibpath_var=DYLD_LIBRARY_PATH
+  shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`'
+m4_if([$1], [],[
+  sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"])
+  sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib'
+  ;;
+
+dgux*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  ;;
+
+freebsd1*)
+  dynamic_linker=no
+  ;;
+
+freebsd* | dragonfly*)
+  # DragonFly does not have aout.  When/if they implement a new
+  # versioning mechanism, adjust this.
+  if test -x /usr/bin/objformat; then
+    objformat=`/usr/bin/objformat`
+  else
+    case $host_os in
+    freebsd[[123]]*) objformat=aout ;;
+    *) objformat=elf ;;
+    esac
+  fi
+  version_type=freebsd-$objformat
+  case $version_type in
+    freebsd-elf*)
+      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
+      need_version=no
+      need_lib_prefix=no
+      ;;
+    freebsd-*)
+      library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix'
+      need_version=yes
+      ;;
+  esac
+  shlibpath_var=LD_LIBRARY_PATH
+  case $host_os in
+  freebsd2*)
+    shlibpath_overrides_runpath=yes
+    ;;
+  freebsd3.[[01]]* | freebsdelf3.[[01]]*)
+    shlibpath_overrides_runpath=yes
+    hardcode_into_libs=yes
+    ;;
+  freebsd3.[[2-9]]* | freebsdelf3.[[2-9]]* | \
+  freebsd4.[[0-5]] | freebsdelf4.[[0-5]] | freebsd4.1.1 | freebsdelf4.1.1)
+    shlibpath_overrides_runpath=no
+    hardcode_into_libs=yes
+    ;;
+  *) # from 4.6 on, and DragonFly
+    shlibpath_overrides_runpath=yes
+    hardcode_into_libs=yes
+    ;;
+  esac
+  ;;
+
+gnu*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  hardcode_into_libs=yes
+  ;;
+
+hpux9* | hpux10* | hpux11*)
+  # Give a soname corresponding to the major version so that dld.sl refuses to
+  # link against other versions.
+  version_type=sunos
+  need_lib_prefix=no
+  need_version=no
+  case $host_cpu in
+  ia64*)
+    shrext_cmds='.so'
+    hardcode_into_libs=yes
+    dynamic_linker="$host_os dld.so"
+    shlibpath_var=LD_LIBRARY_PATH
+    shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    if test "X$HPUX_IA64_MODE" = X32; then
+      sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib"
+    else
+      sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64"
+    fi
+    sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+    ;;
+  hppa*64*)
+    shrext_cmds='.sl'
+    hardcode_into_libs=yes
+    dynamic_linker="$host_os dld.sl"
+    shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH
+    shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64"
+    sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+    ;;
+  *)
+    shrext_cmds='.sl'
+    dynamic_linker="$host_os dld.sl"
+    shlibpath_var=SHLIB_PATH
+    shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    ;;
+  esac
+  # HP-UX runs *really* slowly unless shared libraries are mode 555.
+  postinstall_cmds='chmod 555 $lib'
+  ;;
+
+interix[[3-9]]*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  ;;
+
+irix5* | irix6* | nonstopux*)
+  case $host_os in
+    nonstopux*) version_type=nonstopux ;;
+    *)
+       if test "$lt_cv_prog_gnu_ld" = yes; then
+               version_type=linux
+       else
+               version_type=irix
+       fi ;;
+  esac
+  need_lib_prefix=no
+  need_version=no
+  soname_spec='${libname}${release}${shared_ext}$major'
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}'
+  case $host_os in
+  irix5* | nonstopux*)
+    libsuff= shlibsuff=
+    ;;
+  *)
+    case $LD in # libtool.m4 will add one of these switches to LD
+    *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ")
+      libsuff= shlibsuff= libmagic=32-bit;;
+    *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ")
+      libsuff=32 shlibsuff=N32 libmagic=N32;;
+    *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ")
+      libsuff=64 shlibsuff=64 libmagic=64-bit;;
+    *) libsuff= shlibsuff= libmagic=never-match;;
+    esac
+    ;;
+  esac
+  shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
+  shlibpath_overrides_runpath=no
+  sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}"
+  sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}"
+  hardcode_into_libs=yes
+  ;;
+
+# No shared lib support for Linux oldld, aout, or coff.
+linux*oldld* | linux*aout* | linux*coff*)
+  dynamic_linker=no
+  ;;
+
+# This must be Linux ELF.
+linux* | k*bsd*-gnu)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  # Some binutils ld are patched to set DT_RUNPATH
+  save_LDFLAGS=$LDFLAGS
+  save_libdir=$libdir
+  eval "libdir=/foo; wl=\"$_LT_TAGVAR(lt_prog_compiler_wl, $1)\"; \
+       LDFLAGS=\"\$LDFLAGS $_LT_TAGVAR(hardcode_libdir_flag_spec, $1)\""
+  AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])],
+    [AS_IF([ ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null],
+       [shlibpath_overrides_runpath=yes])])
+  LDFLAGS=$save_LDFLAGS
+  libdir=$save_libdir
+
+  # This implies no fast_install, which is unacceptable.
+  # Some rework will be needed to allow for fast_install
+  # before this can be enabled.
+  hardcode_into_libs=yes
+
+  # Append ld.so.conf contents to the search path
+  if test -f /etc/ld.so.conf; then
+    lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[  ]*hwcap[        ]/d;s/[:,      ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '`
+    sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra"
+  fi
+
+  # We used to test for /lib/ld.so.1 and disable shared libraries on
+  # powerpc, because MkLinux only supported shared libraries with the
+  # GNU dynamic linker.  Since this was broken with cross compilers,
+  # most powerpc-linux boxes support dynamic linking these days and
+  # people can always --disable-shared, the test was removed, and we
+  # assume the GNU/Linux dynamic linker is in use.
+  dynamic_linker='GNU/Linux ld.so'
+  ;;
+
+netbsd*)
+  version_type=sunos
+  need_lib_prefix=no
+  need_version=no
+  if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+    finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+    dynamic_linker='NetBSD (a.out) ld.so'
+  else
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    dynamic_linker='NetBSD ld.elf_so'
+  fi
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  ;;
+
+newsos6)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  ;;
+
+*nto* | *qnx*)
+  version_type=qnx
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  dynamic_linker='ldqnx.so'
+  ;;
+
+openbsd*)
+  version_type=sunos
+  sys_lib_dlsearch_path_spec="/usr/lib"
+  need_lib_prefix=no
+  # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs.
+  case $host_os in
+    openbsd3.3 | openbsd3.3.*) need_version=yes ;;
+    *)                         need_version=no  ;;
+  esac
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+    case $host_os in
+      openbsd2.[[89]] | openbsd2.[[89]].*)
+       shlibpath_overrides_runpath=no
+       ;;
+      *)
+       shlibpath_overrides_runpath=yes
+       ;;
+      esac
+  else
+    shlibpath_overrides_runpath=yes
+  fi
+  ;;
+
+os2*)
+  libname_spec='$name'
+  shrext_cmds=".dll"
+  need_lib_prefix=no
+  library_names_spec='$libname${shared_ext} $libname.a'
+  dynamic_linker='OS/2 ld.exe'
+  shlibpath_var=LIBPATH
+  ;;
+
+osf3* | osf4* | osf5*)
+  version_type=osf
+  need_lib_prefix=no
+  need_version=no
+  soname_spec='${libname}${release}${shared_ext}$major'
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  shlibpath_var=LD_LIBRARY_PATH
+  sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
+  sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec"
+  ;;
+
+rdos*)
+  dynamic_linker=no
+  ;;
+
+solaris*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  # ldd complains unless libraries are executable
+  postinstall_cmds='chmod +x $lib'
+  ;;
+
+sunos4*)
+  version_type=sunos
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+  finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  if test "$with_gnu_ld" = yes; then
+    need_lib_prefix=no
+  fi
+  need_version=yes
+  ;;
+
+sysv4 | sysv4.3*)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  case $host_vendor in
+    sni)
+      shlibpath_overrides_runpath=no
+      need_lib_prefix=no
+      runpath_var=LD_RUN_PATH
+      ;;
+    siemens)
+      need_lib_prefix=no
+      ;;
+    motorola)
+      need_lib_prefix=no
+      need_version=no
+      shlibpath_overrides_runpath=no
+      sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'
+      ;;
+  esac
+  ;;
+
+sysv4*MP*)
+  if test -d /usr/nec ;then
+    version_type=linux
+    library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}'
+    soname_spec='$libname${shared_ext}.$major'
+    shlibpath_var=LD_LIBRARY_PATH
+  fi
+  ;;
+
+sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
+  version_type=freebsd-elf
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  if test "$with_gnu_ld" = yes; then
+    sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib'
+  else
+    sys_lib_search_path_spec='/usr/ccs/lib /usr/lib'
+    case $host_os in
+      sco3.2v5*)
+        sys_lib_search_path_spec="$sys_lib_search_path_spec /lib"
+       ;;
+    esac
+  fi
+  sys_lib_dlsearch_path_spec='/usr/lib'
+  ;;
+
+tpf*)
+  # TPF is a cross-target only.  Preferred cross-host = GNU/Linux.
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_name_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  ;;
+
+uts4*)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  ;;
+
+*)
+  dynamic_linker=no
+  ;;
+esac
+AC_MSG_RESULT([$dynamic_linker])
+test "$dynamic_linker" = no && can_build_shared=no
+
+variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
+if test "$GCC" = yes; then
+  variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
+fi
+if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then
+  sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec"
+fi
+if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then
+  sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec"
+fi
+
+_LT_DECL([], [variables_saved_for_relink], [1],
+    [Variables whose values should be saved in libtool wrapper scripts and
+    restored at link time])
+_LT_DECL([], [need_lib_prefix], [0],
+    [Do we need the "lib" prefix for modules?])
+_LT_DECL([], [need_version], [0], [Do we need a version for libraries?])
+_LT_DECL([], [version_type], [0], [Library versioning type])
+_LT_DECL([], [runpath_var], [0],  [Shared library runtime path variable])
+_LT_DECL([], [shlibpath_var], [0],[Shared library path variable])
+_LT_DECL([], [shlibpath_overrides_runpath], [0],
+    [Is shlibpath searched before the hard-coded library search path?])
+_LT_DECL([], [libname_spec], [1], [Format of library name prefix])
+_LT_DECL([], [library_names_spec], [1],
+    [[List of archive names.  First name is the real one, the rest are links.
+    The last name is the one that the linker finds with -lNAME]])
+_LT_DECL([], [soname_spec], [1],
+    [[The coded name of the library, if different from the real name]])
+_LT_DECL([], [postinstall_cmds], [2],
+    [Command to use after installation of a shared archive])
+_LT_DECL([], [postuninstall_cmds], [2],
+    [Command to use after uninstallation of a shared archive])
+_LT_DECL([], [finish_cmds], [2],
+    [Commands used to finish a libtool library installation in a directory])
+_LT_DECL([], [finish_eval], [1],
+    [[As "finish_cmds", except a single script fragment to be evaled but
+    not shown]])
+_LT_DECL([], [hardcode_into_libs], [0],
+    [Whether we should hardcode library paths into libraries])
+_LT_DECL([], [sys_lib_search_path_spec], [2],
+    [Compile-time system search path for libraries])
+_LT_DECL([], [sys_lib_dlsearch_path_spec], [2],
+    [Run-time system search path for libraries])
+])# _LT_SYS_DYNAMIC_LINKER
+
+
+# _LT_PATH_TOOL_PREFIX(TOOL)
+# --------------------------
+# find a file program which can recognize shared library
+AC_DEFUN([_LT_PATH_TOOL_PREFIX],
+[m4_require([_LT_DECL_EGREP])dnl
+AC_MSG_CHECKING([for $1])
+AC_CACHE_VAL(lt_cv_path_MAGIC_CMD,
+[case $MAGIC_CMD in
+[[\\/*] |  ?:[\\/]*])
+  lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path.
+  ;;
+*)
+  lt_save_MAGIC_CMD="$MAGIC_CMD"
+  lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+dnl $ac_dummy forces splitting on constant user-supplied paths.
+dnl POSIX.2 word splitting is done only on the output of word expansions,
+dnl not every word.  This closes a longstanding sh security hole.
+  ac_dummy="m4_if([$2], , $PATH, [$2])"
+  for ac_dir in $ac_dummy; do
+    IFS="$lt_save_ifs"
+    test -z "$ac_dir" && ac_dir=.
+    if test -f $ac_dir/$1; then
+      lt_cv_path_MAGIC_CMD="$ac_dir/$1"
+      if test -n "$file_magic_test_file"; then
+       case $deplibs_check_method in
+       "file_magic "*)
+         file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"`
+         MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+         if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
+           $EGREP "$file_magic_regex" > /dev/null; then
+           :
+         else
+           cat <<_LT_EOF 1>&2
+
+*** Warning: the command libtool uses to detect shared libraries,
+*** $file_magic_cmd, produces output that libtool cannot recognize.
+*** The result is that libtool may fail to recognize shared libraries
+*** as such.  This will affect the creation of libtool libraries that
+*** depend on shared libraries, but programs linked with such libtool
+*** libraries will work regardless of this problem.  Nevertheless, you
+*** may want to report the problem to your system manager and/or to
+*** bug-libtool@gnu.org
+
+_LT_EOF
+         fi ;;
+       esac
+      fi
+      break
+    fi
+  done
+  IFS="$lt_save_ifs"
+  MAGIC_CMD="$lt_save_MAGIC_CMD"
+  ;;
+esac])
+MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+if test -n "$MAGIC_CMD"; then
+  AC_MSG_RESULT($MAGIC_CMD)
+else
+  AC_MSG_RESULT(no)
+fi
+_LT_DECL([], [MAGIC_CMD], [0],
+        [Used to examine libraries when file_magic_cmd begins with "file"])dnl
+])# _LT_PATH_TOOL_PREFIX
+
+# Old name:
+AU_ALIAS([AC_PATH_TOOL_PREFIX], [_LT_PATH_TOOL_PREFIX])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_PATH_TOOL_PREFIX], [])
+
+
+# _LT_PATH_MAGIC
+# --------------
+# find a file program which can recognize a shared library
+m4_defun([_LT_PATH_MAGIC],
+[_LT_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin$PATH_SEPARATOR$PATH)
+if test -z "$lt_cv_path_MAGIC_CMD"; then
+  if test -n "$ac_tool_prefix"; then
+    _LT_PATH_TOOL_PREFIX(file, /usr/bin$PATH_SEPARATOR$PATH)
+  else
+    MAGIC_CMD=:
+  fi
+fi
+])# _LT_PATH_MAGIC
+
+
+# LT_PATH_LD
+# ----------
+# find the pathname to the GNU or non-GNU linker
+AC_DEFUN([LT_PATH_LD],
+[AC_REQUIRE([AC_PROG_CC])dnl
+AC_REQUIRE([AC_CANONICAL_HOST])dnl
+AC_REQUIRE([AC_CANONICAL_BUILD])dnl
+m4_require([_LT_DECL_SED])dnl
+m4_require([_LT_DECL_EGREP])dnl
+
+AC_ARG_WITH([gnu-ld],
+    [AS_HELP_STRING([--with-gnu-ld],
+       [assume the C compiler uses GNU ld @<:@default=no@:>@])],
+    [test "$withval" = no || with_gnu_ld=yes],
+    [with_gnu_ld=no])dnl
+
+ac_prog=ld
+if test "$GCC" = yes; then
+  # Check if gcc -print-prog-name=ld gives a path.
+  AC_MSG_CHECKING([for ld used by $CC])
+  case $host in
+  *-*-mingw*)
+    # gcc leaves a trailing carriage return which upsets mingw
+    ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
+  *)
+    ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
+  esac
+  case $ac_prog in
+    # Accept absolute paths.
+    [[\\/]]* | ?:[[\\/]]*)
+      re_direlt='/[[^/]][[^/]]*/\.\./'
+      # Canonicalize the pathname of ld
+      ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'`
+      while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do
+       ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"`
+      done
+      test -z "$LD" && LD="$ac_prog"
+      ;;
+  "")
+    # If it fails, then pretend we aren't using GCC.
+    ac_prog=ld
+    ;;
+  *)
+    # If it is relative, then search for the first ld in PATH.
+    with_gnu_ld=unknown
+    ;;
+  esac
+elif test "$with_gnu_ld" = yes; then
+  AC_MSG_CHECKING([for GNU ld])
+else
+  AC_MSG_CHECKING([for non-GNU ld])
+fi
+AC_CACHE_VAL(lt_cv_path_LD,
+[if test -z "$LD"; then
+  lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+  for ac_dir in $PATH; do
+    IFS="$lt_save_ifs"
+    test -z "$ac_dir" && ac_dir=.
+    if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
+      lt_cv_path_LD="$ac_dir/$ac_prog"
+      # Check to see if the program is GNU ld.  I'd rather use --version,
+      # but apparently some variants of GNU ld only accept -v.
+      # Break only if it was the GNU/non-GNU ld that we prefer.
+      case `"$lt_cv_path_LD" -v 2>&1 </dev/null` in
+      *GNU* | *'with BFD'*)
+       test "$with_gnu_ld" != no && break
+       ;;
+      *)
+       test "$with_gnu_ld" != yes && break
+       ;;
+      esac
+    fi
+  done
+  IFS="$lt_save_ifs"
+else
+  lt_cv_path_LD="$LD" # Let the user override the test with a path.
+fi])
+LD="$lt_cv_path_LD"
+if test -n "$LD"; then
+  AC_MSG_RESULT($LD)
+else
+  AC_MSG_RESULT(no)
+fi
+test -z "$LD" && AC_MSG_ERROR([no acceptable ld found in \$PATH])
+_LT_PATH_LD_GNU
+AC_SUBST([LD])
+
+_LT_TAGDECL([], [LD], [1], [The linker used to build libraries])
+])# LT_PATH_LD
+
+# Old names:
+AU_ALIAS([AM_PROG_LD], [LT_PATH_LD])
+AU_ALIAS([AC_PROG_LD], [LT_PATH_LD])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AM_PROG_LD], [])
+dnl AC_DEFUN([AC_PROG_LD], [])
+
+
+# _LT_PATH_LD_GNU
+#- --------------
+m4_defun([_LT_PATH_LD_GNU],
+[AC_CACHE_CHECK([if the linker ($LD) is GNU ld], lt_cv_prog_gnu_ld,
+[# I'd rather use --version here, but apparently some GNU lds only accept -v.
+case `$LD -v 2>&1 </dev/null` in
+*GNU* | *'with BFD'*)
+  lt_cv_prog_gnu_ld=yes
+  ;;
+*)
+  lt_cv_prog_gnu_ld=no
+  ;;
+esac])
+with_gnu_ld=$lt_cv_prog_gnu_ld
+])# _LT_PATH_LD_GNU
+
+
+# _LT_CMD_RELOAD
+# --------------
+# find reload flag for linker
+#   -- PORTME Some linkers may need a different reload flag.
+m4_defun([_LT_CMD_RELOAD],
+[AC_CACHE_CHECK([for $LD option to reload object files],
+  lt_cv_ld_reload_flag,
+  [lt_cv_ld_reload_flag='-r'])
+reload_flag=$lt_cv_ld_reload_flag
+case $reload_flag in
+"" | " "*) ;;
+*) reload_flag=" $reload_flag" ;;
+esac
+reload_cmds='$LD$reload_flag -o $output$reload_objs'
+case $host_os in
+  darwin*)
+    if test "$GCC" = yes; then
+      reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs'
+    else
+      reload_cmds='$LD$reload_flag -o $output$reload_objs'
+    fi
+    ;;
+esac
+_LT_DECL([], [reload_flag], [1], [How to create reloadable object files])dnl
+_LT_DECL([], [reload_cmds], [2])dnl
+])# _LT_CMD_RELOAD
+
+
+# _LT_CHECK_MAGIC_METHOD
+# ----------------------
+# how to check for library dependencies
+#  -- PORTME fill in with the dynamic library characteristics
+m4_defun([_LT_CHECK_MAGIC_METHOD],
+[m4_require([_LT_DECL_EGREP])
+AC_CACHE_CHECK([how to recognize dependent libraries],
+lt_cv_deplibs_check_method,
+[lt_cv_file_magic_cmd='$MAGIC_CMD'
+lt_cv_file_magic_test_file=
+lt_cv_deplibs_check_method='unknown'
+# Need to set the preceding variable on all platforms that support
+# interlibrary dependencies.
+# 'none' -- dependencies not supported.
+# `unknown' -- same as none, but documents that we really don't know.
+# 'pass_all' -- all dependencies passed with no checks.
+# 'test_compile' -- check by making test program.
+# 'file_magic [[regex]]' -- check by looking for files in library path
+# which responds to the $file_magic_cmd with a given extended regex.
+# If you have `file' or equivalent on your system and you're not sure
+# whether `pass_all' will *always* work, you probably want this one.
+
+case $host_os in
+aix[[4-9]]*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+beos*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+bsdi[[45]]*)
+  lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib)'
+  lt_cv_file_magic_cmd='/usr/bin/file -L'
+  lt_cv_file_magic_test_file=/shlib/libc.so
+  ;;
+
+cygwin*)
+  # func_win32_libid is a shell function defined in ltmain.sh
+  lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
+  lt_cv_file_magic_cmd='func_win32_libid'
+  ;;
+
+mingw* | pw32*)
+  # Base MSYS/MinGW do not provide the 'file' command needed by
+  # func_win32_libid shell function, so use a weaker test based on 'objdump',
+  # unless we find 'file', for example because we are cross-compiling.
+  if ( file / ) >/dev/null 2>&1; then
+    lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
+    lt_cv_file_magic_cmd='func_win32_libid'
+  else
+    lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?'
+    lt_cv_file_magic_cmd='$OBJDUMP -f'
+  fi
+  ;;
+
+darwin* | rhapsody*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+freebsd* | dragonfly*)
+  if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
+    case $host_cpu in
+    i*86 )
+      # Not sure whether the presence of OpenBSD here was a mistake.
+      # Let's accept both of them until this is cleared up.
+      lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[[3-9]]86 (compact )?demand paged shared library'
+      lt_cv_file_magic_cmd=/usr/bin/file
+      lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*`
+      ;;
+    esac
+  else
+    lt_cv_deplibs_check_method=pass_all
+  fi
+  ;;
+
+gnu*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+hpux10.20* | hpux11*)
+  lt_cv_file_magic_cmd=/usr/bin/file
+  case $host_cpu in
+  ia64*)
+    lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|ELF-[[0-9]][[0-9]]) shared object file - IA64'
+    lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so
+    ;;
+  hppa*64*)
+    [lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - PA-RISC [0-9].[0-9]']
+    lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl
+    ;;
+  *)
+    lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]].[[0-9]]) shared library'
+    lt_cv_file_magic_test_file=/usr/lib/libc.sl
+    ;;
+  esac
+  ;;
+
+interix[[3-9]]*)
+  # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here
+  lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|\.a)$'
+  ;;
+
+irix5* | irix6* | nonstopux*)
+  case $LD in
+  *-32|*"-32 ") libmagic=32-bit;;
+  *-n32|*"-n32 ") libmagic=N32;;
+  *-64|*"-64 ") libmagic=64-bit;;
+  *) libmagic=never-match;;
+  esac
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+# This must be Linux ELF.
+linux* | k*bsd*-gnu)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+netbsd*)
+  if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
+    lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$'
+  else
+    lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|_pic\.a)$'
+  fi
+  ;;
+
+newos6*)
+  lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (executable|dynamic lib)'
+  lt_cv_file_magic_cmd=/usr/bin/file
+  lt_cv_file_magic_test_file=/usr/lib/libnls.so
+  ;;
+
+*nto* | *qnx*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+openbsd*)
+  if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+    lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|\.so|_pic\.a)$'
+  else
+    lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$'
+  fi
+  ;;
+
+osf3* | osf4* | osf5*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+rdos*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+solaris*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+sysv4 | sysv4.3*)
+  case $host_vendor in
+  motorola)
+    lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib) M[[0-9]][[0-9]]* Version [[0-9]]'
+    lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*`
+    ;;
+  ncr)
+    lt_cv_deplibs_check_method=pass_all
+    ;;
+  sequent)
+    lt_cv_file_magic_cmd='/bin/file'
+    lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )'
+    ;;
+  sni)
+    lt_cv_file_magic_cmd='/bin/file'
+    lt_cv_deplibs_check_method="file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB dynamic lib"
+    lt_cv_file_magic_test_file=/lib/libc.so
+    ;;
+  siemens)
+    lt_cv_deplibs_check_method=pass_all
+    ;;
+  pc)
+    lt_cv_deplibs_check_method=pass_all
+    ;;
+  esac
+  ;;
+
+tpf*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+esac
+])
+file_magic_cmd=$lt_cv_file_magic_cmd
+deplibs_check_method=$lt_cv_deplibs_check_method
+test -z "$deplibs_check_method" && deplibs_check_method=unknown
+
+_LT_DECL([], [deplibs_check_method], [1],
+    [Method to check whether dependent libraries are shared objects])
+_LT_DECL([], [file_magic_cmd], [1],
+    [Command to use when deplibs_check_method == "file_magic"])
+])# _LT_CHECK_MAGIC_METHOD
+
+
+# LT_PATH_NM
+# ----------
+# find the pathname to a BSD- or MS-compatible name lister
+AC_DEFUN([LT_PATH_NM],
+[AC_REQUIRE([AC_PROG_CC])dnl
+AC_CACHE_CHECK([for BSD- or MS-compatible name lister (nm)], lt_cv_path_NM,
+[if test -n "$NM"; then
+  # Let the user override the test.
+  lt_cv_path_NM="$NM"
+else
+  lt_nm_to_check="${ac_tool_prefix}nm"
+  if test -n "$ac_tool_prefix" && test "$build" = "$host"; then
+    lt_nm_to_check="$lt_nm_to_check nm"
+  fi
+  for lt_tmp_nm in $lt_nm_to_check; do
+    lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+    for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do
+      IFS="$lt_save_ifs"
+      test -z "$ac_dir" && ac_dir=.
+      tmp_nm="$ac_dir/$lt_tmp_nm"
+      if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then
+       # Check to see if the nm accepts a BSD-compat flag.
+       # Adding the `sed 1q' prevents false positives on HP-UX, which says:
+       #   nm: unknown option "B" ignored
+       # Tru64's nm complains that /dev/null is an invalid object file
+       case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in
+       */dev/null* | *'Invalid file or object type'*)
+         lt_cv_path_NM="$tmp_nm -B"
+         break
+         ;;
+       *)
+         case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in
+         */dev/null*)
+           lt_cv_path_NM="$tmp_nm -p"
+           break
+           ;;
+         *)
+           lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but
+           continue # so that we can try to find one that supports BSD flags
+           ;;
+         esac
+         ;;
+       esac
+      fi
+    done
+    IFS="$lt_save_ifs"
+  done
+  : ${lt_cv_path_NM=no}
+fi])
+if test "$lt_cv_path_NM" != "no"; then
+  NM="$lt_cv_path_NM"
+else
+  # Didn't find any BSD compatible name lister, look for dumpbin.
+  AC_CHECK_TOOLS(DUMPBIN, ["dumpbin -symbols" "link -dump -symbols"], :)
+  AC_SUBST([DUMPBIN])
+  if test "$DUMPBIN" != ":"; then
+    NM="$DUMPBIN"
+  fi
+fi
+test -z "$NM" && NM=nm
+AC_SUBST([NM])
+_LT_DECL([], [NM], [1], [A BSD- or MS-compatible name lister])dnl
+
+AC_CACHE_CHECK([the name lister ($NM) interface], [lt_cv_nm_interface],
+  [lt_cv_nm_interface="BSD nm"
+  echo "int some_variable = 0;" > conftest.$ac_ext
+  (eval echo "\"\$as_me:__oline__: $ac_compile\"" >&AS_MESSAGE_LOG_FD)
+  (eval "$ac_compile" 2>conftest.err)
+  cat conftest.err >&AS_MESSAGE_LOG_FD
+  (eval echo "\"\$as_me:__oline__: $NM \\\"conftest.$ac_objext\\\"\"" >&AS_MESSAGE_LOG_FD)
+  (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out)
+  cat conftest.err >&AS_MESSAGE_LOG_FD
+  (eval echo "\"\$as_me:__oline__: output\"" >&AS_MESSAGE_LOG_FD)
+  cat conftest.out >&AS_MESSAGE_LOG_FD
+  if $GREP 'External.*some_variable' conftest.out > /dev/null; then
+    lt_cv_nm_interface="MS dumpbin"
+  fi
+  rm -f conftest*])
+])# LT_PATH_NM
+
+# Old names:
+AU_ALIAS([AM_PROG_NM], [LT_PATH_NM])
+AU_ALIAS([AC_PROG_NM], [LT_PATH_NM])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AM_PROG_NM], [])
+dnl AC_DEFUN([AC_PROG_NM], [])
+
+
+# LT_LIB_M
+# --------
+# check for math library
+AC_DEFUN([LT_LIB_M],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+LIBM=
+case $host in
+*-*-beos* | *-*-cygwin* | *-*-pw32* | *-*-darwin*)
+  # These system don't have libm, or don't need it
+  ;;
+*-ncr-sysv4.3*)
+  AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw")
+  AC_CHECK_LIB(m, cos, LIBM="$LIBM -lm")
+  ;;
+*)
+  AC_CHECK_LIB(m, cos, LIBM="-lm")
+  ;;
+esac
+AC_SUBST([LIBM])
+])# LT_LIB_M
+
+# Old name:
+AU_ALIAS([AC_CHECK_LIBM], [LT_LIB_M])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_CHECK_LIBM], [])
+
+
+# _LT_COMPILER_NO_RTTI([TAGNAME])
+# -------------------------------
+m4_defun([_LT_COMPILER_NO_RTTI],
+[m4_require([_LT_TAG_COMPILER])dnl
+
+_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=
+
+if test "$GCC" = yes; then
+  _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin'
+
+  _LT_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions],
+    lt_cv_prog_compiler_rtti_exceptions,
+    [-fno-rtti -fno-exceptions], [],
+    [_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)="$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) -fno-rtti -fno-exceptions"])
+fi
+_LT_TAGDECL([no_builtin_flag], [lt_prog_compiler_no_builtin_flag], [1],
+       [Compiler flag to turn off builtin functions])
+])# _LT_COMPILER_NO_RTTI
+
+
+# _LT_CMD_GLOBAL_SYMBOLS
+# ----------------------
+m4_defun([_LT_CMD_GLOBAL_SYMBOLS],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+AC_REQUIRE([AC_PROG_CC])dnl
+AC_REQUIRE([LT_PATH_NM])dnl
+AC_REQUIRE([LT_PATH_LD])dnl
+m4_require([_LT_DECL_SED])dnl
+m4_require([_LT_DECL_EGREP])dnl
+m4_require([_LT_TAG_COMPILER])dnl
+
+# Check for command to grab the raw symbol name followed by C symbol from nm.
+AC_MSG_CHECKING([command to parse $NM output from $compiler object])
+AC_CACHE_VAL([lt_cv_sys_global_symbol_pipe],
+[
+# These are sane defaults that work on at least a few old systems.
+# [They come from Ultrix.  What could be older than Ultrix?!! ;)]
+
+# Character class describing NM global symbol codes.
+symcode='[[BCDEGRST]]'
+
+# Regexp to match symbols that can be accessed directly from C.
+sympat='\([[_A-Za-z]][[_A-Za-z0-9]]*\)'
+
+# Define system-specific variables.
+case $host_os in
+aix*)
+  symcode='[[BCDT]]'
+  ;;
+cygwin* | mingw* | pw32*)
+  symcode='[[ABCDGISTW]]'
+  ;;
+hpux*)
+  if test "$host_cpu" = ia64; then
+    symcode='[[ABCDEGRST]]'
+  fi
+  ;;
+irix* | nonstopux*)
+  symcode='[[BCDEGRST]]'
+  ;;
+osf*)
+  symcode='[[BCDEGQRST]]'
+  ;;
+solaris*)
+  symcode='[[BDRT]]'
+  ;;
+sco3.2v5*)
+  symcode='[[DT]]'
+  ;;
+sysv4.2uw2*)
+  symcode='[[DT]]'
+  ;;
+sysv5* | sco5v6* | unixware* | OpenUNIX*)
+  symcode='[[ABDT]]'
+  ;;
+sysv4)
+  symcode='[[DFNSTU]]'
+  ;;
+esac
+
+# If we're using GNU nm, then use its standard symbol codes.
+case `$NM -V 2>&1` in
+*GNU* | *'with BFD'*)
+  symcode='[[ABCDGIRSTW]]' ;;
+esac
+
+# Transform an extracted symbol line into a proper C declaration.
+# Some systems (esp. on ia64) link data and code symbols differently,
+# so use this general approach.
+lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'"
+
+# Transform an extracted symbol line into symbol name and symbol address
+lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\) $/  {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/  {\"\2\", (void *) \&\2},/p'"
+lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([[^ ]]*\) $/  {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \(lib[[^ ]]*\)$/  {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/  {\"lib\2\", (void *) \&\2},/p'"
+
+# Handle CRLF in mingw tool chain
+opt_cr=
+case $build_os in
+mingw*)
+  opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp
+  ;;
+esac
+
+# Try without a prefix underscore, then with it.
+for ac_symprfx in "" "_"; do
+
+  # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol.
+  symxfrm="\\1 $ac_symprfx\\2 \\2"
+
+  # Write the raw and C identifiers.
+  if test "$lt_cv_nm_interface" = "MS dumpbin"; then
+    # Fake it for dumpbin and say T for any non-static function
+    # and D for any global variable.
+    # Also find C++ and __fastcall symbols from MSVC++,
+    # which start with @ or ?.
+    lt_cv_sys_global_symbol_pipe="$AWK ['"\
+"     {last_section=section; section=\$ 3};"\
+"     /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\
+"     \$ 0!~/External *\|/{next};"\
+"     / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\
+"     {if(hide[section]) next};"\
+"     {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\
+"     {split(\$ 0, a, /\||\r/); split(a[2], s)};"\
+"     s[1]~/^[@?]/{print s[1], s[1]; next};"\
+"     s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\
+"     ' prfx=^$ac_symprfx]"
+  else
+    lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[    ]]\($symcode$symcode*\)[[       ]][[    ]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'"
+  fi
+
+  # Check to see that the pipe works correctly.
+  pipe_works=no
+
+  rm -f conftest*
+  cat > conftest.$ac_ext <<_LT_EOF
+#ifdef __cplusplus
+extern "C" {
+#endif
+char nm_test_var;
+void nm_test_func(void);
+void nm_test_func(void){}
+#ifdef __cplusplus
+}
+#endif
+int main(){nm_test_var='a';nm_test_func();return(0);}
+_LT_EOF
+
+  if AC_TRY_EVAL(ac_compile); then
+    # Now try to grab the symbols.
+    nlist=conftest.nm
+    if AC_TRY_EVAL(NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist) && test -s "$nlist"; then
+      # Try sorting and uniquifying the output.
+      if sort "$nlist" | uniq > "$nlist"T; then
+       mv -f "$nlist"T "$nlist"
+      else
+       rm -f "$nlist"T
+      fi
+
+      # Make sure that we snagged all the symbols we need.
+      if $GREP ' nm_test_var$' "$nlist" >/dev/null; then
+       if $GREP ' nm_test_func$' "$nlist" >/dev/null; then
+         cat <<_LT_EOF > conftest.$ac_ext
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+_LT_EOF
+         # Now generate the symbol file.
+         eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext'
+
+         cat <<_LT_EOF >> conftest.$ac_ext
+
+/* The mapping between symbol names and symbols.  */
+const struct {
+  const char *name;
+  void       *address;
+}
+lt__PROGRAM__LTX_preloaded_symbols[[]] =
+{
+  { "@PROGRAM@", (void *) 0 },
+_LT_EOF
+         $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/  {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext
+         cat <<\_LT_EOF >> conftest.$ac_ext
+  {0, (void *) 0}
+};
+
+/* This works around a problem in FreeBSD linker */
+#ifdef FREEBSD_WORKAROUND
+static const void *lt_preloaded_setup() {
+  return lt__PROGRAM__LTX_preloaded_symbols;
+}
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+_LT_EOF
+         # Now try linking the two files.
+         mv conftest.$ac_objext conftstm.$ac_objext
+         lt_save_LIBS="$LIBS"
+         lt_save_CFLAGS="$CFLAGS"
+         LIBS="conftstm.$ac_objext"
+         CFLAGS="$CFLAGS$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)"
+         if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext}; then
+           pipe_works=yes
+         fi
+         LIBS="$lt_save_LIBS"
+         CFLAGS="$lt_save_CFLAGS"
+       else
+         echo "cannot find nm_test_func in $nlist" >&AS_MESSAGE_LOG_FD
+       fi
+      else
+       echo "cannot find nm_test_var in $nlist" >&AS_MESSAGE_LOG_FD
+      fi
+    else
+      echo "cannot run $lt_cv_sys_global_symbol_pipe" >&AS_MESSAGE_LOG_FD
+    fi
+  else
+    echo "$progname: failed program was:" >&AS_MESSAGE_LOG_FD
+    cat conftest.$ac_ext >&5
+  fi
+  rm -rf conftest* conftst*
+
+  # Do not use the global_symbol_pipe unless it works.
+  if test "$pipe_works" = yes; then
+    break
+  else
+    lt_cv_sys_global_symbol_pipe=
+  fi
+done
+])
+if test -z "$lt_cv_sys_global_symbol_pipe"; then
+  lt_cv_sys_global_symbol_to_cdecl=
+fi
+if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then
+  AC_MSG_RESULT(failed)
+else
+  AC_MSG_RESULT(ok)
+fi
+
+_LT_DECL([global_symbol_pipe], [lt_cv_sys_global_symbol_pipe], [1],
+    [Take the output of nm and produce a listing of raw symbols and C names])
+_LT_DECL([global_symbol_to_cdecl], [lt_cv_sys_global_symbol_to_cdecl], [1],
+    [Transform the output of nm in a proper C declaration])
+_LT_DECL([global_symbol_to_c_name_address],
+    [lt_cv_sys_global_symbol_to_c_name_address], [1],
+    [Transform the output of nm in a C name address pair])
+_LT_DECL([global_symbol_to_c_name_address_lib_prefix],
+    [lt_cv_sys_global_symbol_to_c_name_address_lib_prefix], [1],
+    [Transform the output of nm in a C name address pair when lib prefix is needed])
+]) # _LT_CMD_GLOBAL_SYMBOLS
+
+
+# _LT_COMPILER_PIC([TAGNAME])
+# ---------------------------
+m4_defun([_LT_COMPILER_PIC],
+[m4_require([_LT_TAG_COMPILER])dnl
+_LT_TAGVAR(lt_prog_compiler_wl, $1)=
+_LT_TAGVAR(lt_prog_compiler_pic, $1)=
+_LT_TAGVAR(lt_prog_compiler_static, $1)=
+
+AC_MSG_CHECKING([for $compiler option to produce PIC])
+m4_if([$1], [CXX], [
+  # C++ specific cases for pic, static, wl, etc.
+  if test "$GXX" = yes; then
+    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+    _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+
+    case $host_os in
+    aix*)
+      # All AIX code is PIC.
+      if test "$host_cpu" = ia64; then
+       # AIX 5 now supports IA64 processor
+       _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      fi
+      ;;
+
+    amigaos*)
+      case $host_cpu in
+      powerpc)
+            # see comment about AmigaOS4 .so support
+            _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+        ;;
+      m68k)
+            # FIXME: we need at least 68020 code to build shared libraries, but
+            # adding the `-m68020' flag to GCC prevents building anything better,
+            # like `-m68040'.
+            _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4'
+        ;;
+      esac
+      ;;
+
+    beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
+      # PIC is the default for these OSes.
+      ;;
+    mingw* | cygwin* | os2* | pw32*)
+      # This hack is so that the source file can tell whether it is being
+      # built for inclusion in a dll (and should export symbols for example).
+      # Although the cygwin gcc ignores -fPIC, still need this for old-style
+      # (--disable-auto-import) libraries
+      m4_if([$1], [GCJ], [],
+       [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'])
+      ;;
+    darwin* | rhapsody*)
+      # PIC is the default on this platform
+      # Common symbols not allowed in MH_DYLIB files
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common'
+      ;;
+    *djgpp*)
+      # DJGPP does not support shared libraries at all
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)=
+      ;;
+    interix[[3-9]]*)
+      # Interix 3.x gcc -fpic/-fPIC options generate broken code.
+      # Instead, we relocate shared libraries at runtime.
+      ;;
+    sysv4*MP*)
+      if test -d /usr/nec; then
+       _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic
+      fi
+      ;;
+    hpux*)
+      # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
+      # not for PA HP-UX.
+      case $host_cpu in
+      hppa*64*|ia64*)
+       ;;
+      *)
+       _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+       ;;
+      esac
+      ;;
+    *qnx* | *nto*)
+      # QNX uses GNU C++, but need to define -shared option too, otherwise
+      # it will coredump.
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared'
+      ;;
+    *)
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+      ;;
+    esac
+  else
+    case $host_os in
+      aix[[4-9]]*)
+       # All AIX code is PIC.
+       if test "$host_cpu" = ia64; then
+         # AIX 5 now supports IA64 processor
+         _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+       else
+         _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp'
+       fi
+       ;;
+      chorus*)
+       case $cc_basename in
+       cxch68*)
+         # Green Hills C++ Compiler
+         # _LT_TAGVAR(lt_prog_compiler_static, $1)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a"
+         ;;
+       esac
+       ;;
+      dgux*)
+       case $cc_basename in
+         ec++*)
+           _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+           ;;
+         ghcx*)
+           # Green Hills C++ Compiler
+           _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+           ;;
+         *)
+           ;;
+       esac
+       ;;
+      freebsd* | dragonfly*)
+       # FreeBSD uses GNU C++
+       ;;
+      hpux9* | hpux10* | hpux11*)
+       case $cc_basename in
+         CC*)
+           _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+           _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive'
+           if test "$host_cpu" != ia64; then
+             _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z'
+           fi
+           ;;
+         aCC*)
+           _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+           _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive'
+           case $host_cpu in
+           hppa*64*|ia64*)
+             # +Z the default
+             ;;
+           *)
+             _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z'
+             ;;
+           esac
+           ;;
+         *)
+           ;;
+       esac
+       ;;
+      interix*)
+       # This is c89, which is MS Visual C++ (no shared libs)
+       # Anyone wants to do a port?
+       ;;
+      irix5* | irix6* | nonstopux*)
+       case $cc_basename in
+         CC*)
+           _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+           _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+           # CC pic flag -KPIC is the default.
+           ;;
+         *)
+           ;;
+       esac
+       ;;
+      linux* | k*bsd*-gnu)
+       case $cc_basename in
+         KCC*)
+           # KAI C++ Compiler
+           _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,'
+           _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+           ;;
+         icpc* | ecpc* )
+           # Intel C++
+           _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+           _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+           _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+           ;;
+         pgCC* | pgcpp*)
+           # Portland Group C++ compiler
+           _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+           _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic'
+           _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+           ;;
+         cxx*)
+           # Compaq C++
+           # Make sure the PIC flag is empty.  It appears that all Alpha
+           # Linux and Compaq Tru64 Unix objects are PIC.
+           _LT_TAGVAR(lt_prog_compiler_pic, $1)=
+           _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+           ;;
+         xlc* | xlC*)
+           # IBM XL 8.0 on PPC
+           _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+           _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic'
+           _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink'
+           ;;
+         *)
+           case `$CC -V 2>&1 | sed 5q` in
+           *Sun\ C*)
+             # Sun C++ 5.9
+             _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+             _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+             _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '
+             ;;
+           esac
+           ;;
+       esac
+       ;;
+      lynxos*)
+       ;;
+      m88k*)
+       ;;
+      mvs*)
+       case $cc_basename in
+         cxx*)
+           _LT_TAGVAR(lt_prog_compiler_pic, $1)='-W c,exportall'
+           ;;
+         *)
+           ;;
+       esac
+       ;;
+      netbsd*)
+       ;;
+      *qnx* | *nto*)
+        # QNX uses GNU C++, but need to define -shared option too, otherwise
+        # it will coredump.
+        _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared'
+        ;;
+      osf3* | osf4* | osf5*)
+       case $cc_basename in
+         KCC*)
+           _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,'
+           ;;
+         RCC*)
+           # Rational C++ 2.4.1
+           _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+           ;;
+         cxx*)
+           # Digital/Compaq C++
+           _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+           # Make sure the PIC flag is empty.  It appears that all Alpha
+           # Linux and Compaq Tru64 Unix objects are PIC.
+           _LT_TAGVAR(lt_prog_compiler_pic, $1)=
+           _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+           ;;
+         *)
+           ;;
+       esac
+       ;;
+      psos*)
+       ;;
+      solaris*)
+       case $cc_basename in
+         CC*)
+           # Sun C++ 4.2, 5.x and Centerline C++
+           _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+           _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+           _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '
+           ;;
+         gcx*)
+           # Green Hills C++ Compiler
+           _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC'
+           ;;
+         *)
+           ;;
+       esac
+       ;;
+      sunos4*)
+       case $cc_basename in
+         CC*)
+           # Sun C++ 4.x
+           _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+           _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+           ;;
+         lcc*)
+           # Lucid
+           _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+           ;;
+         *)
+           ;;
+       esac
+       ;;
+      sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
+       case $cc_basename in
+         CC*)
+           _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+           _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+           _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+           ;;
+       esac
+       ;;
+      tandem*)
+       case $cc_basename in
+         NCC*)
+           # NonStop-UX NCC 3.20
+           _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+           ;;
+         *)
+           ;;
+       esac
+       ;;
+      vxworks*)
+       ;;
+      *)
+       _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
+       ;;
+    esac
+  fi
+],
+[
+  if test "$GCC" = yes; then
+    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+    _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+
+    case $host_os in
+      aix*)
+      # All AIX code is PIC.
+      if test "$host_cpu" = ia64; then
+       # AIX 5 now supports IA64 processor
+       _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      fi
+      ;;
+
+    amigaos*)
+      case $host_cpu in
+      powerpc)
+            # see comment about AmigaOS4 .so support
+            _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+        ;;
+      m68k)
+            # FIXME: we need at least 68020 code to build shared libraries, but
+            # adding the `-m68020' flag to GCC prevents building anything better,
+            # like `-m68040'.
+            _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4'
+        ;;
+      esac
+      ;;
+
+    beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
+      # PIC is the default for these OSes.
+      ;;
+
+    mingw* | cygwin* | pw32* | os2*)
+      # This hack is so that the source file can tell whether it is being
+      # built for inclusion in a dll (and should export symbols for example).
+      # Although the cygwin gcc ignores -fPIC, still need this for old-style
+      # (--disable-auto-import) libraries
+      m4_if([$1], [GCJ], [],
+       [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'])
+      ;;
+
+    darwin* | rhapsody*)
+      # PIC is the default on this platform
+      # Common symbols not allowed in MH_DYLIB files
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common'
+      ;;
+
+    hpux*)
+      # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
+      # not for PA HP-UX.
+      case $host_cpu in
+      hppa*64*|ia64*)
+       # +Z the default
+       ;;
+      *)
+       _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+       ;;
+      esac
+      ;;
+
+    interix[[3-9]]*)
+      # Interix 3.x gcc -fpic/-fPIC options generate broken code.
+      # Instead, we relocate shared libraries at runtime.
+      ;;
+
+    msdosdjgpp*)
+      # Just because we use GCC doesn't mean we suddenly get shared libraries
+      # on systems that don't support them.
+      _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
+      enable_shared=no
+      ;;
+
+    *nto* | *qnx*)
+      # QNX uses GNU C++, but need to define -shared option too, otherwise
+      # it will coredump.
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared'
+      ;;
+
+    sysv4*MP*)
+      if test -d /usr/nec; then
+       _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic
+      fi
+      ;;
+
+    *)
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+      ;;
+    esac
+  else
+    # PORTME Check for flag to pass linker flags through the system compiler.
+    case $host_os in
+    aix*)
+      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+      if test "$host_cpu" = ia64; then
+       # AIX 5 now supports IA64 processor
+       _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      else
+       _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp'
+      fi
+      ;;
+
+    mingw* | cygwin* | pw32* | os2*)
+      # This hack is so that the source file can tell whether it is being
+      # built for inclusion in a dll (and should export symbols for example).
+      m4_if([$1], [GCJ], [],
+       [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'])
+      ;;
+
+    hpux9* | hpux10* | hpux11*)
+      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+      # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
+      # not for PA HP-UX.
+      case $host_cpu in
+      hppa*64*|ia64*)
+       # +Z the default
+       ;;
+      *)
+       _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z'
+       ;;
+      esac
+      # Is there a better lt_prog_compiler_static that works with the bundled CC?
+      _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive'
+      ;;
+
+    irix5* | irix6* | nonstopux*)
+      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+      # PIC (with -KPIC) is the default.
+      _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+      ;;
+
+    linux* | k*bsd*-gnu)
+      case $cc_basename in
+      icc* | ecc* | ifort*)
+       _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+       _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+       _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+        ;;
+      pgcc* | pgf77* | pgf90* | pgf95*)
+        # Portland Group compilers (*not* the Pentium gcc compiler,
+       # which looks to be a dead project)
+       _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+       _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic'
+       _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+        ;;
+      ccc*)
+        _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+        # All Alpha code is PIC.
+        _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+        ;;
+      xl*)
+       # IBM XL C 8.0/Fortran 10.1 on PPC
+       _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+       _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic'
+       _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink'
+       ;;
+      *)
+       case `$CC -V 2>&1 | sed 5q` in
+       *Sun\ C*)
+         # Sun C 5.9
+         _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+         _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+         _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+         ;;
+       *Sun\ F*)
+         # Sun Fortran 8.3 passes all unrecognized flags to the linker
+         _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+         _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+         _LT_TAGVAR(lt_prog_compiler_wl, $1)=''
+         ;;
+       esac
+       ;;
+      esac
+      ;;
+
+    newsos6)
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      ;;
+
+    *nto* | *qnx*)
+      # QNX uses GNU C++, but need to define -shared option too, otherwise
+      # it will coredump.
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared'
+      ;;
+
+    osf3* | osf4* | osf5*)
+      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+      # All OSF/1 code is PIC.
+      _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+      ;;
+
+    rdos*)
+      _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+      ;;
+
+    solaris*)
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      case $cc_basename in
+      f77* | f90* | f95*)
+       _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ';;
+      *)
+       _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,';;
+      esac
+      ;;
+
+    sunos4*)
+      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC'
+      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      ;;
+
+    sysv4 | sysv4.2uw2* | sysv4.3*)
+      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      ;;
+
+    sysv4*MP*)
+      if test -d /usr/nec ;then
+       _LT_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic'
+       _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      fi
+      ;;
+
+    sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
+      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      ;;
+
+    unicos*)
+      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+      _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
+      ;;
+
+    uts4*)
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      ;;
+
+    *)
+      _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
+      ;;
+    esac
+  fi
+])
+case $host_os in
+  # For platforms which do not support PIC, -DPIC is meaningless:
+  *djgpp*)
+    _LT_TAGVAR(lt_prog_compiler_pic, $1)=
+    ;;
+  *)
+    _LT_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])"
+    ;;
+esac
+AC_MSG_RESULT([$_LT_TAGVAR(lt_prog_compiler_pic, $1)])
+_LT_TAGDECL([wl], [lt_prog_compiler_wl], [1],
+       [How to pass a linker flag through the compiler])
+
+#
+# Check to make sure the PIC flag actually works.
+#
+if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then
+  _LT_COMPILER_OPTION([if $compiler PIC flag $_LT_TAGVAR(lt_prog_compiler_pic, $1) works],
+    [_LT_TAGVAR(lt_cv_prog_compiler_pic_works, $1)],
+    [$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])], [],
+    [case $_LT_TAGVAR(lt_prog_compiler_pic, $1) in
+     "" | " "*) ;;
+     *) _LT_TAGVAR(lt_prog_compiler_pic, $1)=" $_LT_TAGVAR(lt_prog_compiler_pic, $1)" ;;
+     esac],
+    [_LT_TAGVAR(lt_prog_compiler_pic, $1)=
+     _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no])
+fi
+_LT_TAGDECL([pic_flag], [lt_prog_compiler_pic], [1],
+       [Additional compiler flags for building library objects])
+
+#
+# Check to make sure the static flag actually works.
+#
+wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) eval lt_tmp_static_flag=\"$_LT_TAGVAR(lt_prog_compiler_static, $1)\"
+_LT_LINKER_OPTION([if $compiler static flag $lt_tmp_static_flag works],
+  _LT_TAGVAR(lt_cv_prog_compiler_static_works, $1),
+  $lt_tmp_static_flag,
+  [],
+  [_LT_TAGVAR(lt_prog_compiler_static, $1)=])
+_LT_TAGDECL([link_static_flag], [lt_prog_compiler_static], [1],
+       [Compiler flag to prevent dynamic linking])
+])# _LT_COMPILER_PIC
+
+
+# _LT_LINKER_SHLIBS([TAGNAME])
+# ----------------------------
+# See if the linker supports building shared libraries.
+m4_defun([_LT_LINKER_SHLIBS],
+[AC_REQUIRE([LT_PATH_LD])dnl
+AC_REQUIRE([LT_PATH_NM])dnl
+m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+m4_require([_LT_DECL_EGREP])dnl
+m4_require([_LT_DECL_SED])dnl
+m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl
+m4_require([_LT_TAG_COMPILER])dnl
+AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries])
+m4_if([$1], [CXX], [
+  _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+  case $host_os in
+  aix[[4-9]]*)
+    # If we're using GNU nm, then we don't want the "-C" option.
+    # -C means demangle to AIX nm, but means don't demangle with GNU nm
+    if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then
+      _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+    else
+      _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+    fi
+    ;;
+  pw32*)
+    _LT_TAGVAR(export_symbols_cmds, $1)="$ltdll_cmds"
+  ;;
+  cygwin* | mingw*)
+    _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;/^.*[[ ]]__nm__/s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols'
+  ;;
+  *)
+    _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+  ;;
+  esac
+  _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*']
+], [
+  runpath_var=
+  _LT_TAGVAR(allow_undefined_flag, $1)=
+  _LT_TAGVAR(always_export_symbols, $1)=no
+  _LT_TAGVAR(archive_cmds, $1)=
+  _LT_TAGVAR(archive_expsym_cmds, $1)=
+  _LT_TAGVAR(compiler_needs_object, $1)=no
+  _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no
+  _LT_TAGVAR(export_dynamic_flag_spec, $1)=
+  _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+  _LT_TAGVAR(hardcode_automatic, $1)=no
+  _LT_TAGVAR(hardcode_direct, $1)=no
+  _LT_TAGVAR(hardcode_direct_absolute, $1)=no
+  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
+  _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
+  _LT_TAGVAR(hardcode_libdir_separator, $1)=
+  _LT_TAGVAR(hardcode_minus_L, $1)=no
+  _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
+  _LT_TAGVAR(inherit_rpath, $1)=no
+  _LT_TAGVAR(link_all_deplibs, $1)=unknown
+  _LT_TAGVAR(module_cmds, $1)=
+  _LT_TAGVAR(module_expsym_cmds, $1)=
+  _LT_TAGVAR(old_archive_from_new_cmds, $1)=
+  _LT_TAGVAR(old_archive_from_expsyms_cmds, $1)=
+  _LT_TAGVAR(thread_safe_flag_spec, $1)=
+  _LT_TAGVAR(whole_archive_flag_spec, $1)=
+  # include_expsyms should be a list of space-separated symbols to be *always*
+  # included in the symbol list
+  _LT_TAGVAR(include_expsyms, $1)=
+  # exclude_expsyms can be an extended regexp of symbols to exclude
+  # it will be wrapped by ` (' and `)$', so one must not match beginning or
+  # end of line.  Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc',
+  # as well as any symbol that contains `d'.
+  _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*']
+  # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out
+  # platforms (ab)use it in PIC code, but their linkers get confused if
+  # the symbol is explicitly referenced.  Since portable code cannot
+  # rely on this symbol name, it's probably fine to never include it in
+  # preloaded symbol tables.
+  # Exclude shared library initialization/finalization symbols.
+dnl Note also adjust exclude_expsyms for C++ above.
+  extract_expsyms_cmds=
+
+  case $host_os in
+  cygwin* | mingw* | pw32*)
+    # FIXME: the MSVC++ port hasn't been tested in a loooong time
+    # When not using gcc, we currently assume that we are using
+    # Microsoft Visual C++.
+    if test "$GCC" != yes; then
+      with_gnu_ld=no
+    fi
+    ;;
+  interix*)
+    # we just hope/assume this is gcc and not c89 (= MSVC++)
+    with_gnu_ld=yes
+    ;;
+  openbsd*)
+    with_gnu_ld=no
+    ;;
+  esac
+
+  _LT_TAGVAR(ld_shlibs, $1)=yes
+  if test "$with_gnu_ld" = yes; then
+    # If archive_cmds runs LD, not CC, wlarc should be empty
+    wlarc='${wl}'
+
+    # Set some defaults for GNU ld with shared library support. These
+    # are reset later if shared libraries are not supported. Putting them
+    # here allows them to be overridden if necessary.
+    runpath_var=LD_RUN_PATH
+    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+    _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+    # ancient GNU ld didn't support --whole-archive et. al.
+    if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then
+      _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+    else
+      _LT_TAGVAR(whole_archive_flag_spec, $1)=
+    fi
+    supports_anon_versioning=no
+    case `$LD -v 2>&1` in
+      *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11
+      *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ...
+      *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ...
+      *\ 2.11.*) ;; # other 2.11 versions
+      *) supports_anon_versioning=yes ;;
+    esac
+
+    # See if GNU ld supports shared libraries.
+    case $host_os in
+    aix[[3-9]]*)
+      # On AIX/PPC, the GNU linker is very broken
+      if test "$host_cpu" != ia64; then
+       _LT_TAGVAR(ld_shlibs, $1)=no
+       cat <<_LT_EOF 1>&2
+
+*** Warning: the GNU linker, at least up to release 2.9.1, is reported
+*** to be unable to reliably create shared libraries on AIX.
+*** Therefore, libtool is disabling shared libraries support.  If you
+*** really care for shared libraries, you may want to modify your PATH
+*** so that a non-GNU linker is found, and then restart.
+
+_LT_EOF
+      fi
+      ;;
+
+    amigaos*)
+      case $host_cpu in
+      powerpc)
+            # see comment about AmigaOS4 .so support
+            _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+            _LT_TAGVAR(archive_expsym_cmds, $1)=''
+        ;;
+      m68k)
+            _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+            _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+            _LT_TAGVAR(hardcode_minus_L, $1)=yes
+        ;;
+      esac
+      ;;
+
+    beos*)
+      if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+       _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+       # Joseph Beckenbach <jrb3@best.com> says some releases of gcc
+       # support --undefined.  This deserves some investigation.  FIXME
+       _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+      else
+       _LT_TAGVAR(ld_shlibs, $1)=no
+      fi
+      ;;
+
+    cygwin* | mingw* | pw32*)
+      # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless,
+      # as there is no search path for DLLs.
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+      _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+      _LT_TAGVAR(always_export_symbols, $1)=no
+      _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+      _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/'\'' | $SED -e '\''/^[[AITW]][[ ]]/s/.*[[ ]]//'\'' | sort | uniq > $export_symbols'
+
+      if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
+        _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+       # If the export-symbols file already is a .def file (1st line
+       # is EXPORTS), use it as is; otherwise, prepend...
+       _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+         cp $export_symbols $output_objdir/$soname.def;
+       else
+         echo EXPORTS > $output_objdir/$soname.def;
+         cat $export_symbols >> $output_objdir/$soname.def;
+       fi~
+       $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+      else
+       _LT_TAGVAR(ld_shlibs, $1)=no
+      fi
+      ;;
+
+    interix[[3-9]]*)
+      _LT_TAGVAR(hardcode_direct, $1)=no
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+      _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+      # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
+      # Instead, shared libraries are loaded at an image base (0x10000000 by
+      # default) and relocated if they conflict, which is a slow very memory
+      # consuming and fragmenting process.  To avoid this, we pick a random,
+      # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
+      # time.  Moving up from 0x10000000 also allows more sbrk(2) space.
+      _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+      _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+      ;;
+
+    gnu* | linux* | tpf* | k*bsd*-gnu)
+      tmp_diet=no
+      if test "$host_os" = linux-dietlibc; then
+       case $cc_basename in
+         diet\ *) tmp_diet=yes;;       # linux-dietlibc with static linking (!diet-dyn)
+       esac
+      fi
+      if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \
+        && test "$tmp_diet" = no
+      then
+       tmp_addflag=
+       tmp_sharedflag='-shared'
+       case $cc_basename,$host_cpu in
+        pgcc*)                         # Portland Group C compiler
+         _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
+         tmp_addflag=' $pic_flag'
+         ;;
+       pgf77* | pgf90* | pgf95*)       # Portland Group f77 and f90 compilers
+         _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
+         tmp_addflag=' $pic_flag -Mnomain' ;;
+       ecc*,ia64* | icc*,ia64*)        # Intel C compiler on ia64
+         tmp_addflag=' -i_dynamic' ;;
+       efc*,ia64* | ifort*,ia64*)      # Intel Fortran compiler on ia64
+         tmp_addflag=' -i_dynamic -nofor_main' ;;
+       ifc* | ifort*)                  # Intel Fortran compiler
+         tmp_addflag=' -nofor_main' ;;
+       xl[[cC]]*)                      # IBM XL C 8.0 on PPC (deal with xlf below)
+         tmp_sharedflag='-qmkshrobj'
+         tmp_addflag= ;;
+       esac
+       case `$CC -V 2>&1 | sed 5q` in
+       *Sun\ C*)                       # Sun C 5.9
+         _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
+         _LT_TAGVAR(compiler_needs_object, $1)=yes
+         tmp_sharedflag='-G' ;;
+       *Sun\ F*)                       # Sun Fortran 8.3
+         tmp_sharedflag='-G' ;;
+       esac
+       _LT_TAGVAR(archive_cmds, $1)='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+
+        if test "x$supports_anon_versioning" = xyes; then
+          _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~
+           cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+           echo "local: *; };" >> $output_objdir/$libname.ver~
+           $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
+        fi
+
+       case $cc_basename in
+       xlf*)
+         # IBM XL Fortran 10.1 on PPC cannot create shared libs itself
+         _LT_TAGVAR(whole_archive_flag_spec, $1)='--whole-archive$convenience --no-whole-archive'
+         _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
+         _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='-rpath $libdir'
+         _LT_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $compiler_flags -soname $soname -o $lib'
+         if test "x$supports_anon_versioning" = xyes; then
+           _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~
+             cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+             echo "local: *; };" >> $output_objdir/$libname.ver~
+             $LD -shared $libobjs $deplibs $compiler_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib'
+         fi
+         ;;
+       esac
+      else
+        _LT_TAGVAR(ld_shlibs, $1)=no
+      fi
+      ;;
+
+    netbsd*)
+      if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+       _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
+       wlarc=
+      else
+       _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+       _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+      fi
+      ;;
+
+    solaris*)
+      if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then
+       _LT_TAGVAR(ld_shlibs, $1)=no
+       cat <<_LT_EOF 1>&2
+
+*** Warning: The releases 2.8.* of the GNU linker cannot reliably
+*** create shared libraries on Solaris systems.  Therefore, libtool
+*** is disabling shared libraries support.  We urge you to upgrade GNU
+*** binutils to release 2.9.1 or newer.  Another option is to modify
+*** your PATH or compiler configuration so that the native linker is
+*** used, and then restart.
+
+_LT_EOF
+      elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+       _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+       _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+      else
+       _LT_TAGVAR(ld_shlibs, $1)=no
+      fi
+      ;;
+
+    sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*)
+      case `$LD -v 2>&1` in
+        *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.1[[0-5]].*)
+       _LT_TAGVAR(ld_shlibs, $1)=no
+       cat <<_LT_EOF 1>&2
+
+*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not
+*** reliably create shared libraries on SCO systems.  Therefore, libtool
+*** is disabling shared libraries support.  We urge you to upgrade GNU
+*** binutils to release 2.16.91.0.3 or newer.  Another option is to modify
+*** your PATH or compiler configuration so that the native linker is
+*** used, and then restart.
+
+_LT_EOF
+       ;;
+       *)
+         # For security reasons, it is highly recommended that you always
+         # use absolute paths for naming shared libraries, and exclude the
+         # DT_RUNPATH tag from executables and libraries.  But doing so
+         # requires that you compile everything twice, which is a pain.
+         if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+           _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+           _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+           _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+         else
+           _LT_TAGVAR(ld_shlibs, $1)=no
+         fi
+       ;;
+      esac
+      ;;
+
+    sunos4*)
+      _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+      wlarc=
+      _LT_TAGVAR(hardcode_direct, $1)=yes
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    *)
+      if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+       _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+       _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+      else
+       _LT_TAGVAR(ld_shlibs, $1)=no
+      fi
+      ;;
+    esac
+
+    if test "$_LT_TAGVAR(ld_shlibs, $1)" = no; then
+      runpath_var=
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
+      _LT_TAGVAR(export_dynamic_flag_spec, $1)=
+      _LT_TAGVAR(whole_archive_flag_spec, $1)=
+    fi
+  else
+    # PORTME fill in a description of your system's linker (not GNU ld)
+    case $host_os in
+    aix3*)
+      _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+      _LT_TAGVAR(always_export_symbols, $1)=yes
+      _LT_TAGVAR(archive_expsym_cmds, $1)='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname'
+      # Note: this linker hardcodes the directories in LIBPATH if there
+      # are no directories specified by -L.
+      _LT_TAGVAR(hardcode_minus_L, $1)=yes
+      if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then
+       # Neither direct hardcoding nor static linking is supported with a
+       # broken collect2.
+       _LT_TAGVAR(hardcode_direct, $1)=unsupported
+      fi
+      ;;
+
+    aix[[4-9]]*)
+      if test "$host_cpu" = ia64; then
+       # On IA64, the linker does run time linking by default, so we don't
+       # have to do anything special.
+       aix_use_runtimelinking=no
+       exp_sym_flag='-Bexport'
+       no_entry_flag=""
+      else
+       # If we're using GNU nm, then we don't want the "-C" option.
+       # -C means demangle to AIX nm, but means don't demangle with GNU nm
+       if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then
+         _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+       else
+         _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+       fi
+       aix_use_runtimelinking=no
+
+       # Test if we are trying to use run time linking or normal
+       # AIX style linking. If -brtl is somewhere in LDFLAGS, we
+       # need to do runtime linking.
+       case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*)
+         for ld_flag in $LDFLAGS; do
+         if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then
+           aix_use_runtimelinking=yes
+           break
+         fi
+         done
+         ;;
+       esac
+
+       exp_sym_flag='-bexport'
+       no_entry_flag='-bnoentry'
+      fi
+
+      # When large executables or shared objects are built, AIX ld can
+      # have problems creating the table of contents.  If linking a library
+      # or program results in "error TOC overflow" add -mminimal-toc to
+      # CXXFLAGS/CFLAGS for g++/gcc.  In the cases where that is not
+      # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
+
+      _LT_TAGVAR(archive_cmds, $1)=''
+      _LT_TAGVAR(hardcode_direct, $1)=yes
+      _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+      _LT_TAGVAR(hardcode_libdir_separator, $1)=':'
+      _LT_TAGVAR(link_all_deplibs, $1)=yes
+      _LT_TAGVAR(file_list_spec, $1)='${wl}-f,'
+
+      if test "$GCC" = yes; then
+       case $host_os in aix4.[[012]]|aix4.[[012]].*)
+       # We only want to do this on AIX 4.2 and lower, the check
+       # below for broken collect2 doesn't work under 4.3+
+         collect2name=`${CC} -print-prog-name=collect2`
+         if test -f "$collect2name" &&
+          strings "$collect2name" | $GREP resolve_lib_name >/dev/null
+         then
+         # We have reworked collect2
+         :
+         else
+         # We have old collect2
+         _LT_TAGVAR(hardcode_direct, $1)=unsupported
+         # It fails to find uninstalled libraries when the uninstalled
+         # path is not listed in the libpath.  Setting hardcode_minus_L
+         # to unsupported forces relinking
+         _LT_TAGVAR(hardcode_minus_L, $1)=yes
+         _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+         _LT_TAGVAR(hardcode_libdir_separator, $1)=
+         fi
+         ;;
+       esac
+       shared_flag='-shared'
+       if test "$aix_use_runtimelinking" = yes; then
+         shared_flag="$shared_flag "'${wl}-G'
+       fi
+      else
+       # not using gcc
+       if test "$host_cpu" = ia64; then
+       # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
+       # chokes on -Wl,-G. The following line is correct:
+         shared_flag='-G'
+       else
+         if test "$aix_use_runtimelinking" = yes; then
+           shared_flag='${wl}-G'
+         else
+           shared_flag='${wl}-bM:SRE'
+         fi
+       fi
+      fi
+
+      # It seems that -bexpall does not export symbols beginning with
+      # underscore (_), so it is better to generate a list of symbols to export.
+      _LT_TAGVAR(always_export_symbols, $1)=yes
+      if test "$aix_use_runtimelinking" = yes; then
+       # Warning - without using the other runtime loading flags (-brtl),
+       # -berok will link without error, but may produce a broken library.
+       _LT_TAGVAR(allow_undefined_flag, $1)='-berok'
+        # Determine the default libpath from the value encoded in an
+        # empty executable.
+        _LT_SYS_MODULE_PATH_AIX
+        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
+        _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then $ECHO "X${wl}${allow_undefined_flag}" | $Xsed; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+      else
+       if test "$host_cpu" = ia64; then
+         _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib'
+         _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs"
+         _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols"
+       else
+        # Determine the default libpath from the value encoded in an
+        # empty executable.
+        _LT_SYS_MODULE_PATH_AIX
+        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
+         # Warning - without using the other run time loading flags,
+         # -berok will link without error, but may produce a broken library.
+         _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok'
+         _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok'
+         # Exported symbols can be pulled into shared objects from archives
+         _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience'
+         _LT_TAGVAR(archive_cmds_need_lc, $1)=yes
+         # This is similar to how AIX traditionally builds its shared libraries.
+         _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
+       fi
+      fi
+      ;;
+
+    amigaos*)
+      case $host_cpu in
+      powerpc)
+            # see comment about AmigaOS4 .so support
+            _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+            _LT_TAGVAR(archive_expsym_cmds, $1)=''
+        ;;
+      m68k)
+            _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+            _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+            _LT_TAGVAR(hardcode_minus_L, $1)=yes
+        ;;
+      esac
+      ;;
+
+    bsdi[[45]]*)
+      _LT_TAGVAR(export_dynamic_flag_spec, $1)=-rdynamic
+      ;;
+
+    cygwin* | mingw* | pw32*)
+      # When not using gcc, we currently assume that we are using
+      # Microsoft Visual C++.
+      # hardcode_libdir_flag_spec is actually meaningless, as there is
+      # no search path for DLLs.
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' '
+      _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+      # Tell ltmain to make .lib files, not .a files.
+      libext=lib
+      # Tell ltmain to make .dll files, not .so files.
+      shrext_cmds=".dll"
+      # FIXME: Setting linknames here is a bad hack.
+      _LT_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `$ECHO "X$deplibs" | $Xsed -e '\''s/ -lc$//'\''` -link -dll~linknames='
+      # The linker will automatically build a .lib file if we build a DLL.
+      _LT_TAGVAR(old_archive_from_new_cmds, $1)='true'
+      # FIXME: Should let the user specify the lib program.
+      _LT_TAGVAR(old_archive_cmds, $1)='lib -OUT:$oldlib$oldobjs$old_deplibs'
+      _LT_TAGVAR(fix_srcfile_path, $1)='`cygpath -w "$srcfile"`'
+      _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+      ;;
+
+    darwin* | rhapsody*)
+      _LT_DARWIN_LINKER_FEATURES($1)
+      ;;
+
+    dgux*)
+      _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    freebsd1*)
+      _LT_TAGVAR(ld_shlibs, $1)=no
+      ;;
+
+    # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor
+    # support.  Future versions do this automatically, but an explicit c++rt0.o
+    # does not break anything, and helps significantly (at the cost of a little
+    # extra space).
+    freebsd2.2*)
+      _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o'
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+      _LT_TAGVAR(hardcode_direct, $1)=yes
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    # Unfortunately, older versions of FreeBSD 2 do not have this feature.
+    freebsd2*)
+      _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+      _LT_TAGVAR(hardcode_direct, $1)=yes
+      _LT_TAGVAR(hardcode_minus_L, $1)=yes
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
+    freebsd* | dragonfly*)
+      _LT_TAGVAR(archive_cmds, $1)='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+      _LT_TAGVAR(hardcode_direct, $1)=yes
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    hpux9*)
+      if test "$GCC" = yes; then
+       _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+      else
+       _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+      fi
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+      _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+      _LT_TAGVAR(hardcode_direct, $1)=yes
+
+      # hardcode_minus_L: Not really in the search PATH,
+      # but as the default location of the library.
+      _LT_TAGVAR(hardcode_minus_L, $1)=yes
+      _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+      ;;
+
+    hpux10*)
+      if test "$GCC" = yes -a "$with_gnu_ld" = no; then
+       _LT_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+      else
+       _LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
+      fi
+      if test "$with_gnu_ld" = no; then
+       _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+       _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='+b $libdir'
+       _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+       _LT_TAGVAR(hardcode_direct, $1)=yes
+       _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+       _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+       # hardcode_minus_L: Not really in the search PATH,
+       # but as the default location of the library.
+       _LT_TAGVAR(hardcode_minus_L, $1)=yes
+      fi
+      ;;
+
+    hpux11*)
+      if test "$GCC" = yes -a "$with_gnu_ld" = no; then
+       case $host_cpu in
+       hppa*64*)
+         _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+         ;;
+       ia64*)
+         _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+         ;;
+       *)
+         _LT_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+         ;;
+       esac
+      else
+       case $host_cpu in
+       hppa*64*)
+         _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+         ;;
+       ia64*)
+         _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+         ;;
+       *)
+         _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+         ;;
+       esac
+      fi
+      if test "$with_gnu_ld" = no; then
+       _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+       _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+
+       case $host_cpu in
+       hppa*64*|ia64*)
+         _LT_TAGVAR(hardcode_direct, $1)=no
+         _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+         ;;
+       *)
+         _LT_TAGVAR(hardcode_direct, $1)=yes
+         _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+         _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+
+         # hardcode_minus_L: Not really in the search PATH,
+         # but as the default location of the library.
+         _LT_TAGVAR(hardcode_minus_L, $1)=yes
+         ;;
+       esac
+      fi
+      ;;
+
+    irix5* | irix6* | nonstopux*)
+      if test "$GCC" = yes; then
+       _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+       # Try to use the -exported_symbol ld option, if it does not
+       # work, assume that -exports_file does not work either and
+       # implicitly export all symbols.
+        save_LDFLAGS="$LDFLAGS"
+        LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null"
+        AC_LINK_IFELSE(int foo(void) {},
+          _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib'
+        )
+        LDFLAGS="$save_LDFLAGS"
+      else
+       _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+       _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib'
+      fi
+      _LT_TAGVAR(archive_cmds_need_lc, $1)='no'
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+      _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+      _LT_TAGVAR(inherit_rpath, $1)=yes
+      _LT_TAGVAR(link_all_deplibs, $1)=yes
+      ;;
+
+    netbsd*)
+      if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+       _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'  # a.out
+      else
+       _LT_TAGVAR(archive_cmds, $1)='$LD -shared -o $lib $libobjs $deplibs $linker_flags'      # ELF
+      fi
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+      _LT_TAGVAR(hardcode_direct, $1)=yes
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    newsos6)
+      _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      _LT_TAGVAR(hardcode_direct, $1)=yes
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+      _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    *nto* | *qnx*)
+      ;;
+
+    openbsd*)
+      if test -f /usr/libexec/ld.so; then
+       _LT_TAGVAR(hardcode_direct, $1)=yes
+       _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+       _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+       if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+         _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+         _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols'
+         _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+         _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+       else
+         case $host_os in
+          openbsd[[01]].* | openbsd2.[[0-7]] | openbsd2.[[0-7]].*)
+            _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+            _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+            ;;
+          *)
+            _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+            _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+            ;;
+         esac
+       fi
+      else
+       _LT_TAGVAR(ld_shlibs, $1)=no
+      fi
+      ;;
+
+    os2*)
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+      _LT_TAGVAR(hardcode_minus_L, $1)=yes
+      _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+      _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$ECHO DATA >> $output_objdir/$libname.def~$ECHO " SINGLE NONSHARED" >> $output_objdir/$libname.def~$ECHO EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def'
+      _LT_TAGVAR(old_archive_from_new_cmds, $1)='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def'
+      ;;
+
+    osf3*)
+      if test "$GCC" = yes; then
+       _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
+       _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+      else
+       _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
+       _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+      fi
+      _LT_TAGVAR(archive_cmds_need_lc, $1)='no'
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+      _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+      ;;
+
+    osf4* | osf5*)     # as osf3* with the addition of -msym flag
+      if test "$GCC" = yes; then
+       _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
+       _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+       _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+      else
+       _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
+       _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+       _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~
+       $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp'
+
+       # Both c and cxx compiler support -rpath directly
+       _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
+      fi
+      _LT_TAGVAR(archive_cmds_need_lc, $1)='no'
+      _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+      ;;
+
+    solaris*)
+      _LT_TAGVAR(no_undefined_flag, $1)=' -z defs'
+      if test "$GCC" = yes; then
+       wlarc='${wl}'
+       _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+       _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+         $CC -shared ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
+      else
+       case `$CC -V 2>&1` in
+       *"Compilers 5.0"*)
+         wlarc=''
+         _LT_TAGVAR(archive_cmds, $1)='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
+         _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+         $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp'
+         ;;
+       *)
+         wlarc='${wl}'
+         _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags'
+         _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+         $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
+         ;;
+       esac
+      fi
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      case $host_os in
+      solaris2.[[0-5]] | solaris2.[[0-5]].*) ;;
+      *)
+       # The compiler driver will combine and reorder linker options,
+       # but understands `-z linker_flag'.  GCC discards it without `$wl',
+       # but is careful enough not to reorder.
+       # Supported since Solaris 2.6 (maybe 2.5.1?)
+       if test "$GCC" = yes; then
+         _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract'
+       else
+         _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract'
+       fi
+       ;;
+      esac
+      _LT_TAGVAR(link_all_deplibs, $1)=yes
+      ;;
+
+    sunos4*)
+      if test "x$host_vendor" = xsequent; then
+       # Use $CC to link under sequent, because it throws in some extra .o
+       # files that make .init and .fini sections work.
+       _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags'
+      else
+       _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags'
+      fi
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+      _LT_TAGVAR(hardcode_direct, $1)=yes
+      _LT_TAGVAR(hardcode_minus_L, $1)=yes
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    sysv4)
+      case $host_vendor in
+       sni)
+         _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+         _LT_TAGVAR(hardcode_direct, $1)=yes # is this really true???
+       ;;
+       siemens)
+         ## LD is ld it makes a PLAMLIB
+         ## CC just makes a GrossModule.
+         _LT_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags'
+         _LT_TAGVAR(reload_cmds, $1)='$CC -r -o $output$reload_objs'
+         _LT_TAGVAR(hardcode_direct, $1)=no
+        ;;
+       motorola)
+         _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+         _LT_TAGVAR(hardcode_direct, $1)=no #Motorola manual says yes, but my tests say they lie
+       ;;
+      esac
+      runpath_var='LD_RUN_PATH'
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    sysv4.3*)
+      _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      _LT_TAGVAR(export_dynamic_flag_spec, $1)='-Bexport'
+      ;;
+
+    sysv4*MP*)
+      if test -d /usr/nec; then
+       _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+       _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+       runpath_var=LD_RUN_PATH
+       hardcode_runpath_var=yes
+       _LT_TAGVAR(ld_shlibs, $1)=yes
+      fi
+      ;;
+
+    sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*)
+      _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'
+      _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      runpath_var='LD_RUN_PATH'
+
+      if test "$GCC" = yes; then
+       _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+       _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+      else
+       _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+       _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+      fi
+      ;;
+
+    sysv5* | sco3.2v5* | sco5v6*)
+      # Note: We can NOT use -z defs as we might desire, because we do not
+      # link with -lc, and that would cause any symbols used from libc to
+      # always be unresolved, which means just about no library would
+      # ever link correctly.  If we're not using GNU ld we use -z text
+      # though, which does catch some bad symbols but isn't as heavy-handed
+      # as -z defs.
+      _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'
+      _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs'
+      _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir'
+      _LT_TAGVAR(hardcode_libdir_separator, $1)=':'
+      _LT_TAGVAR(link_all_deplibs, $1)=yes
+      _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport'
+      runpath_var='LD_RUN_PATH'
+
+      if test "$GCC" = yes; then
+       _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+       _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+      else
+       _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+       _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+      fi
+      ;;
+
+    uts4*)
+      _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    *)
+      _LT_TAGVAR(ld_shlibs, $1)=no
+      ;;
+    esac
+
+    if test x$host_vendor = xsni; then
+      case $host in
+      sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+       _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Blargedynsym'
+       ;;
+      esac
+    fi
+  fi
+])
+AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)])
+test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no
+
+_LT_TAGVAR(with_gnu_ld, $1)=$with_gnu_ld
+
+_LT_DECL([], [libext], [0], [Old archive suffix (normally "a")])dnl
+_LT_DECL([], [shrext_cmds], [1], [Shared library suffix (normally ".so")])dnl
+_LT_DECL([], [extract_expsyms_cmds], [2],
+    [The commands to extract the exported symbol list from a shared archive])
+
+#
+# Do we need to explicitly link libc?
+#
+case "x$_LT_TAGVAR(archive_cmds_need_lc, $1)" in
+x|xyes)
+  # Assume -lc should be added
+  _LT_TAGVAR(archive_cmds_need_lc, $1)=yes
+
+  if test "$enable_shared" = yes && test "$GCC" = yes; then
+    case $_LT_TAGVAR(archive_cmds, $1) in
+    *'~'*)
+      # FIXME: we may have to deal with multi-command sequences.
+      ;;
+    '$CC '*)
+      # Test whether the compiler implicitly links with -lc since on some
+      # systems, -lgcc has to come before -lc. If gcc already passes -lc
+      # to ld, don't add -lc before -lgcc.
+      AC_MSG_CHECKING([whether -lc should be explicitly linked in])
+      $RM conftest*
+      echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+      if AC_TRY_EVAL(ac_compile) 2>conftest.err; then
+        soname=conftest
+        lib=conftest
+        libobjs=conftest.$ac_objext
+        deplibs=
+        wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1)
+       pic_flag=$_LT_TAGVAR(lt_prog_compiler_pic, $1)
+        compiler_flags=-v
+        linker_flags=-v
+        verstring=
+        output_objdir=.
+        libname=conftest
+        lt_save_allow_undefined_flag=$_LT_TAGVAR(allow_undefined_flag, $1)
+        _LT_TAGVAR(allow_undefined_flag, $1)=
+        if AC_TRY_EVAL(_LT_TAGVAR(archive_cmds, $1) 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1)
+        then
+         _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+        else
+         _LT_TAGVAR(archive_cmds_need_lc, $1)=yes
+        fi
+        _LT_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag
+      else
+        cat conftest.err 1>&5
+      fi
+      $RM conftest*
+      AC_MSG_RESULT([$_LT_TAGVAR(archive_cmds_need_lc, $1)])
+      ;;
+    esac
+  fi
+  ;;
+esac
+
+_LT_TAGDECL([build_libtool_need_lc], [archive_cmds_need_lc], [0],
+    [Whether or not to add -lc for building shared libraries])
+_LT_TAGDECL([allow_libtool_libs_with_static_runtimes],
+    [enable_shared_with_static_runtimes], [0],
+    [Whether or not to disallow shared libs when runtime libs are static])
+_LT_TAGDECL([], [export_dynamic_flag_spec], [1],
+    [Compiler flag to allow reflexive dlopens])
+_LT_TAGDECL([], [whole_archive_flag_spec], [1],
+    [Compiler flag to generate shared objects directly from archives])
+_LT_TAGDECL([], [compiler_needs_object], [1],
+    [Whether the compiler copes with passing no objects directly])
+_LT_TAGDECL([], [old_archive_from_new_cmds], [2],
+    [Create an old-style archive from a shared archive])
+_LT_TAGDECL([], [old_archive_from_expsyms_cmds], [2],
+    [Create a temporary old-style archive to link instead of a shared archive])
+_LT_TAGDECL([], [archive_cmds], [2], [Commands used to build a shared archive])
+_LT_TAGDECL([], [archive_expsym_cmds], [2])
+_LT_TAGDECL([], [module_cmds], [2],
+    [Commands used to build a loadable module if different from building
+    a shared archive.])
+_LT_TAGDECL([], [module_expsym_cmds], [2])
+_LT_TAGDECL([], [with_gnu_ld], [1],
+    [Whether we are building with GNU ld or not])
+_LT_TAGDECL([], [allow_undefined_flag], [1],
+    [Flag that allows shared libraries with undefined symbols to be built])
+_LT_TAGDECL([], [no_undefined_flag], [1],
+    [Flag that enforces no undefined symbols])
+_LT_TAGDECL([], [hardcode_libdir_flag_spec], [1],
+    [Flag to hardcode $libdir into a binary during linking.
+    This must work even if $libdir does not exist])
+_LT_TAGDECL([], [hardcode_libdir_flag_spec_ld], [1],
+    [[If ld is used when linking, flag to hardcode $libdir into a binary
+    during linking.  This must work even if $libdir does not exist]])
+_LT_TAGDECL([], [hardcode_libdir_separator], [1],
+    [Whether we need a single "-rpath" flag with a separated argument])
+_LT_TAGDECL([], [hardcode_direct], [0],
+    [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes
+    DIR into the resulting binary])
+_LT_TAGDECL([], [hardcode_direct_absolute], [0],
+    [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes
+    DIR into the resulting binary and the resulting library dependency is
+    "absolute", i.e impossible to change by setting ${shlibpath_var} if the
+    library is relocated])
+_LT_TAGDECL([], [hardcode_minus_L], [0],
+    [Set to "yes" if using the -LDIR flag during linking hardcodes DIR
+    into the resulting binary])
+_LT_TAGDECL([], [hardcode_shlibpath_var], [0],
+    [Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR
+    into the resulting binary])
+_LT_TAGDECL([], [hardcode_automatic], [0],
+    [Set to "yes" if building a shared library automatically hardcodes DIR
+    into the library and all subsequent libraries and executables linked
+    against it])
+_LT_TAGDECL([], [inherit_rpath], [0],
+    [Set to yes if linker adds runtime paths of dependent libraries
+    to runtime path list])
+_LT_TAGDECL([], [link_all_deplibs], [0],
+    [Whether libtool must link a program against all its dependency libraries])
+_LT_TAGDECL([], [fix_srcfile_path], [1],
+    [Fix the shell variable $srcfile for the compiler])
+_LT_TAGDECL([], [always_export_symbols], [0],
+    [Set to "yes" if exported symbols are required])
+_LT_TAGDECL([], [export_symbols_cmds], [2],
+    [The commands to list exported symbols])
+_LT_TAGDECL([], [exclude_expsyms], [1],
+    [Symbols that should not be listed in the preloaded symbols])
+_LT_TAGDECL([], [include_expsyms], [1],
+    [Symbols that must always be exported])
+_LT_TAGDECL([], [prelink_cmds], [2],
+    [Commands necessary for linking programs (against libraries) with templates])
+_LT_TAGDECL([], [file_list_spec], [1],
+    [Specify filename containing input files])
+dnl FIXME: Not yet implemented
+dnl _LT_TAGDECL([], [thread_safe_flag_spec], [1],
+dnl    [Compiler flag to generate thread safe objects])
+])# _LT_LINKER_SHLIBS
+
+
+# _LT_LANG_C_CONFIG([TAG])
+# ------------------------
+# Ensure that the configuration variables for a C compiler are suitably
+# defined.  These variables are subsequently used by _LT_CONFIG to write
+# the compiler configuration to `libtool'.
+m4_defun([_LT_LANG_C_CONFIG],
+[m4_require([_LT_DECL_EGREP])dnl
+lt_save_CC="$CC"
+AC_LANG_PUSH(C)
+
+# Source file extension for C test sources.
+ac_ext=c
+
+# Object file extension for compiled C test sources.
+objext=o
+_LT_TAGVAR(objext, $1)=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code="int some_variable = 0;"
+
+# Code to be used in simple link tests
+lt_simple_link_test_code='int main(){return(0);}'
+
+_LT_TAG_COMPILER
+# Save the default compiler, since it gets overwritten when the other
+# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP.
+compiler_DEFAULT=$CC
+
+# save warnings/boilerplate of simple test code
+_LT_COMPILER_BOILERPLATE
+_LT_LINKER_BOILERPLATE
+
+## CAVEAT EMPTOR:
+## There is no encapsulation within the following macros, do not change
+## the running order or otherwise move them around unless you know exactly
+## what you are doing...
+if test -n "$compiler"; then
+  _LT_COMPILER_NO_RTTI($1)
+  _LT_COMPILER_PIC($1)
+  _LT_COMPILER_C_O($1)
+  _LT_COMPILER_FILE_LOCKS($1)
+  _LT_LINKER_SHLIBS($1)
+  _LT_SYS_DYNAMIC_LINKER($1)
+  _LT_LINKER_HARDCODE_LIBPATH($1)
+  LT_SYS_DLOPEN_SELF
+  _LT_CMD_STRIPLIB
+
+  # Report which library types will actually be built
+  AC_MSG_CHECKING([if libtool supports shared libraries])
+  AC_MSG_RESULT([$can_build_shared])
+
+  AC_MSG_CHECKING([whether to build shared libraries])
+  test "$can_build_shared" = "no" && enable_shared=no
+
+  # On AIX, shared libraries and static libraries use the same namespace, and
+  # are all built from PIC.
+  case $host_os in
+  aix3*)
+    test "$enable_shared" = yes && enable_static=no
+    if test -n "$RANLIB"; then
+      archive_cmds="$archive_cmds~\$RANLIB \$lib"
+      postinstall_cmds='$RANLIB $lib'
+    fi
+    ;;
+
+  aix[[4-9]]*)
+    if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
+      test "$enable_shared" = yes && enable_static=no
+    fi
+    ;;
+  esac
+  AC_MSG_RESULT([$enable_shared])
+
+  AC_MSG_CHECKING([whether to build static libraries])
+  # Make sure either enable_shared or enable_static is yes.
+  test "$enable_shared" = yes || enable_static=yes
+  AC_MSG_RESULT([$enable_static])
+
+  _LT_CONFIG($1)
+fi
+AC_LANG_POP
+CC="$lt_save_CC"
+])# _LT_LANG_C_CONFIG
+
+
+# _LT_PROG_CXX
+# ------------
+# Since AC_PROG_CXX is broken, in that it returns g++ if there is no c++
+# compiler, we have our own version here.
+m4_defun([_LT_PROG_CXX],
+[
+pushdef([AC_MSG_ERROR], [_lt_caught_CXX_error=yes])
+AC_PROG_CXX
+if test -n "$CXX" && ( test "X$CXX" != "Xno" &&
+    ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) ||
+    (test "X$CXX" != "Xg++"))) ; then
+  AC_PROG_CXXCPP
+else
+  _lt_caught_CXX_error=yes
+fi
+popdef([AC_MSG_ERROR])
+])# _LT_PROG_CXX
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([_LT_PROG_CXX], [])
+
+
+# _LT_LANG_CXX_CONFIG([TAG])
+# --------------------------
+# Ensure that the configuration variables for a C++ compiler are suitably
+# defined.  These variables are subsequently used by _LT_CONFIG to write
+# the compiler configuration to `libtool'.
+m4_defun([_LT_LANG_CXX_CONFIG],
+[AC_REQUIRE([_LT_PROG_CXX])dnl
+m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+m4_require([_LT_DECL_EGREP])dnl
+
+AC_LANG_PUSH(C++)
+_LT_TAGVAR(archive_cmds_need_lc, $1)=no
+_LT_TAGVAR(allow_undefined_flag, $1)=
+_LT_TAGVAR(always_export_symbols, $1)=no
+_LT_TAGVAR(archive_expsym_cmds, $1)=
+_LT_TAGVAR(compiler_needs_object, $1)=no
+_LT_TAGVAR(export_dynamic_flag_spec, $1)=
+_LT_TAGVAR(hardcode_direct, $1)=no
+_LT_TAGVAR(hardcode_direct_absolute, $1)=no
+_LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
+_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
+_LT_TAGVAR(hardcode_libdir_separator, $1)=
+_LT_TAGVAR(hardcode_minus_L, $1)=no
+_LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
+_LT_TAGVAR(hardcode_automatic, $1)=no
+_LT_TAGVAR(inherit_rpath, $1)=no
+_LT_TAGVAR(module_cmds, $1)=
+_LT_TAGVAR(module_expsym_cmds, $1)=
+_LT_TAGVAR(link_all_deplibs, $1)=unknown
+_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
+_LT_TAGVAR(no_undefined_flag, $1)=
+_LT_TAGVAR(whole_archive_flag_spec, $1)=
+_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no
+
+# Source file extension for C++ test sources.
+ac_ext=cpp
+
+# Object file extension for compiled C++ test sources.
+objext=o
+_LT_TAGVAR(objext, $1)=$objext
+
+# No sense in running all these tests if we already determined that
+# the CXX compiler isn't working.  Some variables (like enable_shared)
+# are currently assumed to apply to all compilers on this platform,
+# and will be corrupted by setting them based on a non-working compiler.
+if test "$_lt_caught_CXX_error" != yes; then
+  # Code to be used in simple compile tests
+  lt_simple_compile_test_code="int some_variable = 0;"
+
+  # Code to be used in simple link tests
+  lt_simple_link_test_code='int main(int, char *[[]]) { return(0); }'
+
+  # ltmain only uses $CC for tagged configurations so make sure $CC is set.
+  _LT_TAG_COMPILER
+
+  # save warnings/boilerplate of simple test code
+  _LT_COMPILER_BOILERPLATE
+  _LT_LINKER_BOILERPLATE
+
+  # Allow CC to be a program name with arguments.
+  lt_save_CC=$CC
+  lt_save_LD=$LD
+  lt_save_GCC=$GCC
+  GCC=$GXX
+  lt_save_with_gnu_ld=$with_gnu_ld
+  lt_save_path_LD=$lt_cv_path_LD
+  if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then
+    lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx
+  else
+    $as_unset lt_cv_prog_gnu_ld
+  fi
+  if test -n "${lt_cv_path_LDCXX+set}"; then
+    lt_cv_path_LD=$lt_cv_path_LDCXX
+  else
+    $as_unset lt_cv_path_LD
+  fi
+  test -z "${LDCXX+set}" || LD=$LDCXX
+  CC=${CXX-"c++"}
+  compiler=$CC
+  _LT_TAGVAR(compiler, $1)=$CC
+  _LT_CC_BASENAME([$compiler])
+
+  if test -n "$compiler"; then
+    # We don't want -fno-exception when compiling C++ code, so set the
+    # no_builtin_flag separately
+    if test "$GXX" = yes; then
+      _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin'
+    else
+      _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=
+    fi
+
+    if test "$GXX" = yes; then
+      # Set up default GNU C++ configuration
+
+      LT_PATH_LD
+
+      # Check if GNU C++ uses GNU ld as the underlying linker, since the
+      # archiving commands below assume that GNU ld is being used.
+      if test "$with_gnu_ld" = yes; then
+        _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
+        _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+
+        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+        _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+
+        # If archive_cmds runs LD, not CC, wlarc should be empty
+        # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to
+        #     investigate it a little bit more. (MM)
+        wlarc='${wl}'
+
+        # ancient GNU ld didn't support --whole-archive et. al.
+        if eval "`$CC -print-prog-name=ld` --help 2>&1" |
+         $GREP 'no-whole-archive' > /dev/null; then
+          _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+        else
+          _LT_TAGVAR(whole_archive_flag_spec, $1)=
+        fi
+      else
+        with_gnu_ld=no
+        wlarc=
+
+        # A generic and very simple default shared library creation
+        # command for GNU C++ for the case where it uses the native
+        # linker, instead of GNU ld.  If possible, this setting should
+        # overridden to take advantage of the native linker features on
+        # the platform it is being used on.
+        _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib'
+      fi
+
+      # Commands to make compiler produce verbose output that lists
+      # what "hidden" libraries, object files and flags are used when
+      # linking a shared library.
+      output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"'
+
+    else
+      GXX=no
+      with_gnu_ld=no
+      wlarc=
+    fi
+
+    # PORTME: fill in a description of your system's C++ link characteristics
+    AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries])
+    _LT_TAGVAR(ld_shlibs, $1)=yes
+    case $host_os in
+      aix3*)
+        # FIXME: insert proper C++ library support
+        _LT_TAGVAR(ld_shlibs, $1)=no
+        ;;
+      aix[[4-9]]*)
+        if test "$host_cpu" = ia64; then
+          # On IA64, the linker does run time linking by default, so we don't
+          # have to do anything special.
+          aix_use_runtimelinking=no
+          exp_sym_flag='-Bexport'
+          no_entry_flag=""
+        else
+          aix_use_runtimelinking=no
+
+          # Test if we are trying to use run time linking or normal
+          # AIX style linking. If -brtl is somewhere in LDFLAGS, we
+          # need to do runtime linking.
+          case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*)
+           for ld_flag in $LDFLAGS; do
+             case $ld_flag in
+             *-brtl*)
+               aix_use_runtimelinking=yes
+               break
+               ;;
+             esac
+           done
+           ;;
+          esac
+
+          exp_sym_flag='-bexport'
+          no_entry_flag='-bnoentry'
+        fi
+
+        # When large executables or shared objects are built, AIX ld can
+        # have problems creating the table of contents.  If linking a library
+        # or program results in "error TOC overflow" add -mminimal-toc to
+        # CXXFLAGS/CFLAGS for g++/gcc.  In the cases where that is not
+        # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
+
+        _LT_TAGVAR(archive_cmds, $1)=''
+        _LT_TAGVAR(hardcode_direct, $1)=yes
+        _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+        _LT_TAGVAR(hardcode_libdir_separator, $1)=':'
+        _LT_TAGVAR(link_all_deplibs, $1)=yes
+        _LT_TAGVAR(file_list_spec, $1)='${wl}-f,'
+
+        if test "$GXX" = yes; then
+          case $host_os in aix4.[[012]]|aix4.[[012]].*)
+          # We only want to do this on AIX 4.2 and lower, the check
+          # below for broken collect2 doesn't work under 4.3+
+         collect2name=`${CC} -print-prog-name=collect2`
+         if test -f "$collect2name" &&
+            strings "$collect2name" | $GREP resolve_lib_name >/dev/null
+         then
+           # We have reworked collect2
+           :
+         else
+           # We have old collect2
+           _LT_TAGVAR(hardcode_direct, $1)=unsupported
+           # It fails to find uninstalled libraries when the uninstalled
+           # path is not listed in the libpath.  Setting hardcode_minus_L
+           # to unsupported forces relinking
+           _LT_TAGVAR(hardcode_minus_L, $1)=yes
+           _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+           _LT_TAGVAR(hardcode_libdir_separator, $1)=
+         fi
+          esac
+          shared_flag='-shared'
+         if test "$aix_use_runtimelinking" = yes; then
+           shared_flag="$shared_flag "'${wl}-G'
+         fi
+        else
+          # not using gcc
+          if test "$host_cpu" = ia64; then
+         # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
+         # chokes on -Wl,-G. The following line is correct:
+         shared_flag='-G'
+          else
+           if test "$aix_use_runtimelinking" = yes; then
+             shared_flag='${wl}-G'
+           else
+             shared_flag='${wl}-bM:SRE'
+           fi
+          fi
+        fi
+
+        # It seems that -bexpall does not export symbols beginning with
+        # underscore (_), so it is better to generate a list of symbols to
+       # export.
+        _LT_TAGVAR(always_export_symbols, $1)=yes
+        if test "$aix_use_runtimelinking" = yes; then
+          # Warning - without using the other runtime loading flags (-brtl),
+          # -berok will link without error, but may produce a broken library.
+          _LT_TAGVAR(allow_undefined_flag, $1)='-berok'
+          # Determine the default libpath from the value encoded in an empty
+          # executable.
+          _LT_SYS_MODULE_PATH_AIX
+          _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
+
+          _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then $ECHO "X${wl}${allow_undefined_flag}" | $Xsed; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+        else
+          if test "$host_cpu" = ia64; then
+           _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib'
+           _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs"
+           _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols"
+          else
+           # Determine the default libpath from the value encoded in an
+           # empty executable.
+           _LT_SYS_MODULE_PATH_AIX
+           _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
+           # Warning - without using the other run time loading flags,
+           # -berok will link without error, but may produce a broken library.
+           _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok'
+           _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok'
+           # Exported symbols can be pulled into shared objects from archives
+           _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience'
+           _LT_TAGVAR(archive_cmds_need_lc, $1)=yes
+           # This is similar to how AIX traditionally builds its shared
+           # libraries.
+           _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
+          fi
+        fi
+        ;;
+
+      beos*)
+       if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+         _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+         # Joseph Beckenbach <jrb3@best.com> says some releases of gcc
+         # support --undefined.  This deserves some investigation.  FIXME
+         _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+       else
+         _LT_TAGVAR(ld_shlibs, $1)=no
+       fi
+       ;;
+
+      chorus*)
+        case $cc_basename in
+          *)
+         # FIXME: insert proper C++ library support
+         _LT_TAGVAR(ld_shlibs, $1)=no
+         ;;
+        esac
+        ;;
+
+      cygwin* | mingw* | pw32*)
+        # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless,
+        # as there is no search path for DLLs.
+        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+        _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+        _LT_TAGVAR(always_export_symbols, $1)=no
+        _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+
+        if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
+          _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+          # If the export-symbols file already is a .def file (1st line
+          # is EXPORTS), use it as is; otherwise, prepend...
+          _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+           cp $export_symbols $output_objdir/$soname.def;
+          else
+           echo EXPORTS > $output_objdir/$soname.def;
+           cat $export_symbols >> $output_objdir/$soname.def;
+          fi~
+          $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+        else
+          _LT_TAGVAR(ld_shlibs, $1)=no
+        fi
+        ;;
+      darwin* | rhapsody*)
+        _LT_DARWIN_LINKER_FEATURES($1)
+       ;;
+
+      dgux*)
+        case $cc_basename in
+          ec++*)
+           # FIXME: insert proper C++ library support
+           _LT_TAGVAR(ld_shlibs, $1)=no
+           ;;
+          ghcx*)
+           # Green Hills C++ Compiler
+           # FIXME: insert proper C++ library support
+           _LT_TAGVAR(ld_shlibs, $1)=no
+           ;;
+          *)
+           # FIXME: insert proper C++ library support
+           _LT_TAGVAR(ld_shlibs, $1)=no
+           ;;
+        esac
+        ;;
+
+      freebsd[[12]]*)
+        # C++ shared libraries reported to be fairly broken before
+       # switch to ELF
+        _LT_TAGVAR(ld_shlibs, $1)=no
+        ;;
+
+      freebsd-elf*)
+        _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+        ;;
+
+      freebsd* | dragonfly*)
+        # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF
+        # conventions
+        _LT_TAGVAR(ld_shlibs, $1)=yes
+        ;;
+
+      gnu*)
+        ;;
+
+      hpux9*)
+        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+        _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+        _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+        _LT_TAGVAR(hardcode_direct, $1)=yes
+        _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH,
+                                            # but as the default
+                                            # location of the library.
+
+        case $cc_basename in
+          CC*)
+            # FIXME: insert proper C++ library support
+            _LT_TAGVAR(ld_shlibs, $1)=no
+            ;;
+          aCC*)
+            _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+            # Commands to make compiler produce verbose output that lists
+            # what "hidden" libraries, object files and flags are used when
+            # linking a shared library.
+            #
+            # There doesn't appear to be a way to prevent this compiler from
+            # explicitly linking system object files so we need to strip them
+            # from the output so that they don't get included in the library
+            # dependencies.
+            output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
+            ;;
+          *)
+            if test "$GXX" = yes; then
+              _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -nostdlib -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+            else
+              # FIXME: insert proper C++ library support
+              _LT_TAGVAR(ld_shlibs, $1)=no
+            fi
+            ;;
+        esac
+        ;;
+
+      hpux10*|hpux11*)
+        if test $with_gnu_ld = no; then
+         _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+         _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+
+          case $host_cpu in
+            hppa*64*|ia64*)
+              ;;
+            *)
+             _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+              ;;
+          esac
+        fi
+        case $host_cpu in
+          hppa*64*|ia64*)
+            _LT_TAGVAR(hardcode_direct, $1)=no
+            _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+            ;;
+          *)
+            _LT_TAGVAR(hardcode_direct, $1)=yes
+            _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+            _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH,
+                                                # but as the default
+                                                # location of the library.
+            ;;
+        esac
+
+        case $cc_basename in
+          CC*)
+           # FIXME: insert proper C++ library support
+           _LT_TAGVAR(ld_shlibs, $1)=no
+           ;;
+          aCC*)
+           case $host_cpu in
+             hppa*64*)
+               _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+               ;;
+             ia64*)
+               _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+               ;;
+             *)
+               _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+               ;;
+           esac
+           # Commands to make compiler produce verbose output that lists
+           # what "hidden" libraries, object files and flags are used when
+           # linking a shared library.
+           #
+           # There doesn't appear to be a way to prevent this compiler from
+           # explicitly linking system object files so we need to strip them
+           # from the output so that they don't get included in the library
+           # dependencies.
+           output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
+           ;;
+          *)
+           if test "$GXX" = yes; then
+             if test $with_gnu_ld = no; then
+               case $host_cpu in
+                 hppa*64*)
+                   _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+                   ;;
+                 ia64*)
+                   _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+                   ;;
+                 *)
+                   _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+                   ;;
+               esac
+             fi
+           else
+             # FIXME: insert proper C++ library support
+             _LT_TAGVAR(ld_shlibs, $1)=no
+           fi
+           ;;
+        esac
+        ;;
+
+      interix[[3-9]]*)
+       _LT_TAGVAR(hardcode_direct, $1)=no
+       _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+       _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+       _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+       # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
+       # Instead, shared libraries are loaded at an image base (0x10000000 by
+       # default) and relocated if they conflict, which is a slow very memory
+       # consuming and fragmenting process.  To avoid this, we pick a random,
+       # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
+       # time.  Moving up from 0x10000000 also allows more sbrk(2) space.
+       _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+       _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+       ;;
+      irix5* | irix6*)
+        case $cc_basename in
+          CC*)
+           # SGI C++
+           _LT_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+
+           # Archives containing C++ object files must be created using
+           # "CC -ar", where "CC" is the IRIX C++ compiler.  This is
+           # necessary to make sure instantiated templates are included
+           # in the archive.
+           _LT_TAGVAR(old_archive_cmds, $1)='$CC -ar -WR,-u -o $oldlib $oldobjs'
+           ;;
+          *)
+           if test "$GXX" = yes; then
+             if test "$with_gnu_ld" = no; then
+               _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+             else
+               _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` -o $lib'
+             fi
+           fi
+           _LT_TAGVAR(link_all_deplibs, $1)=yes
+           ;;
+        esac
+        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+        _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+        _LT_TAGVAR(inherit_rpath, $1)=yes
+        ;;
+
+      linux* | k*bsd*-gnu)
+        case $cc_basename in
+          KCC*)
+           # Kuck and Associates, Inc. (KAI) C++ Compiler
+
+           # KCC will only create a shared library if the output file
+           # ends with ".so" (or ".sl" for HP-UX), so rename the library
+           # to its proper name (with version) after linking.
+           _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
+           _LT_TAGVAR(archive_expsym_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib'
+           # Commands to make compiler produce verbose output that lists
+           # what "hidden" libraries, object files and flags are used when
+           # linking a shared library.
+           #
+           # There doesn't appear to be a way to prevent this compiler from
+           # explicitly linking system object files so we need to strip them
+           # from the output so that they don't get included in the library
+           # dependencies.
+           output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
+
+           _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+           _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+
+           # Archives containing C++ object files must be created using
+           # "CC -Bstatic", where "CC" is the KAI C++ compiler.
+           _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs'
+           ;;
+         icpc* | ecpc* )
+           # Intel C++
+           with_gnu_ld=yes
+           # version 8.0 and above of icpc choke on multiply defined symbols
+           # if we add $predep_objects and $postdep_objects, however 7.1 and
+           # earlier do not add the objects themselves.
+           case `$CC -V 2>&1` in
+             *"Version 7."*)
+               _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
+               _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+               ;;
+             *)  # Version 8.0 or newer
+               tmp_idyn=
+               case $host_cpu in
+                 ia64*) tmp_idyn=' -i_dynamic';;
+               esac
+               _LT_TAGVAR(archive_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+               _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+               ;;
+           esac
+           _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+           _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+           _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+           _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive'
+           ;;
+          pgCC* | pgcpp*)
+            # Portland Group C++ compiler
+           case `$CC -V` in
+           *pgCC\ [[1-5]]* | *pgcpp\ [[1-5]]*)
+             _LT_TAGVAR(prelink_cmds, $1)='tpldir=Template.dir~
+               rm -rf $tpldir~
+               $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~
+               compile_command="$compile_command `find $tpldir -name \*.o | $NL2SP`"'
+             _LT_TAGVAR(old_archive_cmds, $1)='tpldir=Template.dir~
+               rm -rf $tpldir~
+               $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~
+               $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | $NL2SP`~
+               $RANLIB $oldlib'
+             _LT_TAGVAR(archive_cmds, $1)='tpldir=Template.dir~
+               rm -rf $tpldir~
+               $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~
+               $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib'
+             _LT_TAGVAR(archive_expsym_cmds, $1)='tpldir=Template.dir~
+               rm -rf $tpldir~
+               $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~
+               $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib'
+             ;;
+           *) # Version 6 will use weak symbols
+             _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib'
+             _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib'
+             ;;
+           esac
+
+           _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir'
+           _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+           _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
+            ;;
+         cxx*)
+           # Compaq C++
+           _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
+           _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname  -o $lib ${wl}-retain-symbols-file $wl$export_symbols'
+
+           runpath_var=LD_RUN_PATH
+           _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
+           _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+
+           # Commands to make compiler produce verbose output that lists
+           # what "hidden" libraries, object files and flags are used when
+           # linking a shared library.
+           #
+           # There doesn't appear to be a way to prevent this compiler from
+           # explicitly linking system object files so we need to strip them
+           # from the output so that they don't get included in the library
+           # dependencies.
+           output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`$ECHO "X$templist" | $Xsed -e "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
+           ;;
+         xl*)
+           # IBM XL 8.0 on PPC, with GNU ld
+           _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+           _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+           _LT_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+           if test "x$supports_anon_versioning" = xyes; then
+             _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~
+               cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+               echo "local: *; };" >> $output_objdir/$libname.ver~
+               $CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
+           fi
+           ;;
+         *)
+           case `$CC -V 2>&1 | sed 5q` in
+           *Sun\ C*)
+             # Sun C++ 5.9
+             _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs'
+             _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+             _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols'
+             _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+             _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
+             _LT_TAGVAR(compiler_needs_object, $1)=yes
+
+             # Not sure whether something based on
+             # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1
+             # would be better.
+             output_verbose_link_cmd='echo'
+
+             # Archives containing C++ object files must be created using
+             # "CC -xar", where "CC" is the Sun C++ compiler.  This is
+             # necessary to make sure instantiated templates are included
+             # in the archive.
+             _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs'
+             ;;
+           esac
+           ;;
+       esac
+       ;;
+
+      lynxos*)
+        # FIXME: insert proper C++ library support
+       _LT_TAGVAR(ld_shlibs, $1)=no
+       ;;
+
+      m88k*)
+        # FIXME: insert proper C++ library support
+        _LT_TAGVAR(ld_shlibs, $1)=no
+       ;;
+
+      mvs*)
+        case $cc_basename in
+          cxx*)
+           # FIXME: insert proper C++ library support
+           _LT_TAGVAR(ld_shlibs, $1)=no
+           ;;
+         *)
+           # FIXME: insert proper C++ library support
+           _LT_TAGVAR(ld_shlibs, $1)=no
+           ;;
+       esac
+       ;;
+
+      netbsd*)
+        if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+         _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable  -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags'
+         wlarc=
+         _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+         _LT_TAGVAR(hardcode_direct, $1)=yes
+         _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+       fi
+       # Workaround some broken pre-1.5 toolchains
+       output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"'
+       ;;
+
+      *nto* | *qnx*)
+        _LT_TAGVAR(ld_shlibs, $1)=yes
+       ;;
+
+      openbsd2*)
+        # C++ shared libraries are fairly broken
+       _LT_TAGVAR(ld_shlibs, $1)=no
+       ;;
+
+      openbsd*)
+       if test -f /usr/libexec/ld.so; then
+         _LT_TAGVAR(hardcode_direct, $1)=yes
+         _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+         _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+         _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib'
+         _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+         if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+           _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib'
+           _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+           _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+         fi
+         output_verbose_link_cmd=echo
+       else
+         _LT_TAGVAR(ld_shlibs, $1)=no
+       fi
+       ;;
+
+      osf3* | osf4* | osf5*)
+        case $cc_basename in
+          KCC*)
+           # Kuck and Associates, Inc. (KAI) C++ Compiler
+
+           # KCC will only create a shared library if the output file
+           # ends with ".so" (or ".sl" for HP-UX), so rename the library
+           # to its proper name (with version) after linking.
+           _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
+
+           _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+           _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+
+           # Archives containing C++ object files must be created using
+           # the KAI C++ compiler.
+           case $host in
+             osf3*) _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;;
+             *) _LT_TAGVAR(old_archive_cmds, $1)='$CC -o $oldlib $oldobjs' ;;
+           esac
+           ;;
+          RCC*)
+           # Rational C++ 2.4.1
+           # FIXME: insert proper C++ library support
+           _LT_TAGVAR(ld_shlibs, $1)=no
+           ;;
+          cxx*)
+           case $host in
+             osf3*)
+               _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
+               _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && $ECHO "X${wl}-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+               _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+               ;;
+             *)
+               _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
+               _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+               _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~
+                 echo "-hidden">> $lib.exp~
+                 $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname ${wl}-input ${wl}$lib.exp  `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib~
+                 $RM $lib.exp'
+               _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
+               ;;
+           esac
+
+           _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+
+           # Commands to make compiler produce verbose output that lists
+           # what "hidden" libraries, object files and flags are used when
+           # linking a shared library.
+           #
+           # There doesn't appear to be a way to prevent this compiler from
+           # explicitly linking system object files so we need to strip them
+           # from the output so that they don't get included in the library
+           # dependencies.
+           output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`$ECHO "X$templist" | $Xsed -e "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
+           ;;
+         *)
+           if test "$GXX" = yes && test "$with_gnu_ld" = no; then
+             _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
+             case $host in
+               osf3*)
+                 _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+                 ;;
+               *)
+                 _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+                 ;;
+             esac
+
+             _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+             _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+
+             # Commands to make compiler produce verbose output that lists
+             # what "hidden" libraries, object files and flags are used when
+             # linking a shared library.
+             output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"'
+
+           else
+             # FIXME: insert proper C++ library support
+             _LT_TAGVAR(ld_shlibs, $1)=no
+           fi
+           ;;
+        esac
+        ;;
+
+      psos*)
+        # FIXME: insert proper C++ library support
+        _LT_TAGVAR(ld_shlibs, $1)=no
+        ;;
+
+      sunos4*)
+        case $cc_basename in
+          CC*)
+           # Sun C++ 4.x
+           # FIXME: insert proper C++ library support
+           _LT_TAGVAR(ld_shlibs, $1)=no
+           ;;
+          lcc*)
+           # Lucid
+           # FIXME: insert proper C++ library support
+           _LT_TAGVAR(ld_shlibs, $1)=no
+           ;;
+          *)
+           # FIXME: insert proper C++ library support
+           _LT_TAGVAR(ld_shlibs, $1)=no
+           ;;
+        esac
+        ;;
+
+      solaris*)
+        case $cc_basename in
+          CC*)
+           # Sun C++ 4.2, 5.x and Centerline C++
+            _LT_TAGVAR(archive_cmds_need_lc,$1)=yes
+           _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs'
+           _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag}  -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+           _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+             $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
+
+           _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+           _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+           case $host_os in
+             solaris2.[[0-5]] | solaris2.[[0-5]].*) ;;
+             *)
+               # The compiler driver will combine and reorder linker options,
+               # but understands `-z linker_flag'.
+               # Supported since Solaris 2.6 (maybe 2.5.1?)
+               _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract'
+               ;;
+           esac
+           _LT_TAGVAR(link_all_deplibs, $1)=yes
+
+           output_verbose_link_cmd='echo'
+
+           # Archives containing C++ object files must be created using
+           # "CC -xar", where "CC" is the Sun C++ compiler.  This is
+           # necessary to make sure instantiated templates are included
+           # in the archive.
+           _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs'
+           ;;
+          gcx*)
+           # Green Hills C++ Compiler
+           _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
+
+           # The C++ compiler must be used to create the archive.
+           _LT_TAGVAR(old_archive_cmds, $1)='$CC $LDFLAGS -archive -o $oldlib $oldobjs'
+           ;;
+          *)
+           # GNU C++ compiler with Solaris linker
+           if test "$GXX" = yes && test "$with_gnu_ld" = no; then
+             _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-z ${wl}defs'
+             if $CC --version | $GREP -v '^2\.7' > /dev/null; then
+               _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
+               _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+                 $CC -shared -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
+
+               # Commands to make compiler produce verbose output that lists
+               # what "hidden" libraries, object files and flags are used when
+               # linking a shared library.
+               output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"'
+             else
+               # g++ 2.7 appears to require `-G' NOT `-shared' on this
+               # platform.
+               _LT_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
+               _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+                 $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
+
+               # Commands to make compiler produce verbose output that lists
+               # what "hidden" libraries, object files and flags are used when
+               # linking a shared library.
+               output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"'
+             fi
+
+             _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $wl$libdir'
+             case $host_os in
+               solaris2.[[0-5]] | solaris2.[[0-5]].*) ;;
+               *)
+                 _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract'
+                 ;;
+             esac
+           fi
+           ;;
+        esac
+        ;;
+
+    sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*)
+      _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'
+      _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      runpath_var='LD_RUN_PATH'
+
+      case $cc_basename in
+        CC*)
+         _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+         _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+         ;;
+       *)
+         _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+         _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+         ;;
+      esac
+      ;;
+
+      sysv5* | sco3.2v5* | sco5v6*)
+       # Note: We can NOT use -z defs as we might desire, because we do not
+       # link with -lc, and that would cause any symbols used from libc to
+       # always be unresolved, which means just about no library would
+       # ever link correctly.  If we're not using GNU ld we use -z text
+       # though, which does catch some bad symbols but isn't as heavy-handed
+       # as -z defs.
+       _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'
+       _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs'
+       _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+       _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+       _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir'
+       _LT_TAGVAR(hardcode_libdir_separator, $1)=':'
+       _LT_TAGVAR(link_all_deplibs, $1)=yes
+       _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport'
+       runpath_var='LD_RUN_PATH'
+
+       case $cc_basename in
+          CC*)
+           _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+           _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+           ;;
+         *)
+           _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+           _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+           ;;
+       esac
+      ;;
+
+      tandem*)
+        case $cc_basename in
+          NCC*)
+           # NonStop-UX NCC 3.20
+           # FIXME: insert proper C++ library support
+           _LT_TAGVAR(ld_shlibs, $1)=no
+           ;;
+          *)
+           # FIXME: insert proper C++ library support
+           _LT_TAGVAR(ld_shlibs, $1)=no
+           ;;
+        esac
+        ;;
+
+      vxworks*)
+        # FIXME: insert proper C++ library support
+        _LT_TAGVAR(ld_shlibs, $1)=no
+        ;;
+
+      *)
+        # FIXME: insert proper C++ library support
+        _LT_TAGVAR(ld_shlibs, $1)=no
+        ;;
+    esac
+
+    AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)])
+    test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no
+
+    _LT_TAGVAR(GCC, $1)="$GXX"
+    _LT_TAGVAR(LD, $1)="$LD"
+
+    ## CAVEAT EMPTOR:
+    ## There is no encapsulation within the following macros, do not change
+    ## the running order or otherwise move them around unless you know exactly
+    ## what you are doing...
+    _LT_SYS_HIDDEN_LIBDEPS($1)
+    _LT_COMPILER_PIC($1)
+    _LT_COMPILER_C_O($1)
+    _LT_COMPILER_FILE_LOCKS($1)
+    _LT_LINKER_SHLIBS($1)
+    _LT_SYS_DYNAMIC_LINKER($1)
+    _LT_LINKER_HARDCODE_LIBPATH($1)
+
+    _LT_CONFIG($1)
+  fi # test -n "$compiler"
+
+  CC=$lt_save_CC
+  LDCXX=$LD
+  LD=$lt_save_LD
+  GCC=$lt_save_GCC
+  with_gnu_ld=$lt_save_with_gnu_ld
+  lt_cv_path_LDCXX=$lt_cv_path_LD
+  lt_cv_path_LD=$lt_save_path_LD
+  lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld
+  lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld
+fi # test "$_lt_caught_CXX_error" != yes
+
+AC_LANG_POP
+])# _LT_LANG_CXX_CONFIG
+
+
+# _LT_SYS_HIDDEN_LIBDEPS([TAGNAME])
+# ---------------------------------
+# Figure out "hidden" library dependencies from verbose
+# compiler output when linking a shared library.
+# Parse the compiler output and extract the necessary
+# objects, libraries and library flags.
+m4_defun([_LT_SYS_HIDDEN_LIBDEPS],
+[m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+# Dependencies to place before and after the object being linked:
+_LT_TAGVAR(predep_objects, $1)=
+_LT_TAGVAR(postdep_objects, $1)=
+_LT_TAGVAR(predeps, $1)=
+_LT_TAGVAR(postdeps, $1)=
+_LT_TAGVAR(compiler_lib_search_path, $1)=
+
+dnl we can't use the lt_simple_compile_test_code here,
+dnl because it contains code intended for an executable,
+dnl not a library.  It's possible we should let each
+dnl tag define a new lt_????_link_test_code variable,
+dnl but it's only used here...
+m4_if([$1], [], [cat > conftest.$ac_ext <<_LT_EOF
+int a;
+void foo (void) { a = 0; }
+_LT_EOF
+], [$1], [CXX], [cat > conftest.$ac_ext <<_LT_EOF
+class Foo
+{
+public:
+  Foo (void) { a = 0; }
+private:
+  int a;
+};
+_LT_EOF
+], [$1], [F77], [cat > conftest.$ac_ext <<_LT_EOF
+      subroutine foo
+      implicit none
+      integer*4 a
+      a=0
+      return
+      end
+_LT_EOF
+], [$1], [FC], [cat > conftest.$ac_ext <<_LT_EOF
+      subroutine foo
+      implicit none
+      integer a
+      a=0
+      return
+      end
+_LT_EOF
+], [$1], [GCJ], [cat > conftest.$ac_ext <<_LT_EOF
+public class foo {
+  private int a;
+  public void bar (void) {
+    a = 0;
+  }
+};
+_LT_EOF
+])
+dnl Parse the compiler output and extract the necessary
+dnl objects, libraries and library flags.
+if AC_TRY_EVAL(ac_compile); then
+  # Parse the compiler output and extract the necessary
+  # objects, libraries and library flags.
+
+  # Sentinel used to keep track of whether or not we are before
+  # the conftest object file.
+  pre_test_object_deps_done=no
+
+  for p in `eval "$output_verbose_link_cmd"`; do
+    case $p in
+
+    -L* | -R* | -l*)
+       # Some compilers place space between "-{L,R}" and the path.
+       # Remove the space.
+       if test $p = "-L" ||
+          test $p = "-R"; then
+        prev=$p
+        continue
+       else
+        prev=
+       fi
+
+       if test "$pre_test_object_deps_done" = no; then
+        case $p in
+        -L* | -R*)
+          # Internal compiler library paths should come after those
+          # provided the user.  The postdeps already come after the
+          # user supplied libs so there is no need to process them.
+          if test -z "$_LT_TAGVAR(compiler_lib_search_path, $1)"; then
+            _LT_TAGVAR(compiler_lib_search_path, $1)="${prev}${p}"
+          else
+            _LT_TAGVAR(compiler_lib_search_path, $1)="${_LT_TAGVAR(compiler_lib_search_path, $1)} ${prev}${p}"
+          fi
+          ;;
+        # The "-l" case would never come before the object being
+        # linked, so don't bother handling this case.
+        esac
+       else
+        if test -z "$_LT_TAGVAR(postdeps, $1)"; then
+          _LT_TAGVAR(postdeps, $1)="${prev}${p}"
+        else
+          _LT_TAGVAR(postdeps, $1)="${_LT_TAGVAR(postdeps, $1)} ${prev}${p}"
+        fi
+       fi
+       ;;
+
+    *.$objext)
+       # This assumes that the test object file only shows up
+       # once in the compiler output.
+       if test "$p" = "conftest.$objext"; then
+        pre_test_object_deps_done=yes
+        continue
+       fi
+
+       if test "$pre_test_object_deps_done" = no; then
+        if test -z "$_LT_TAGVAR(predep_objects, $1)"; then
+          _LT_TAGVAR(predep_objects, $1)="$p"
+        else
+          _LT_TAGVAR(predep_objects, $1)="$_LT_TAGVAR(predep_objects, $1) $p"
+        fi
+       else
+        if test -z "$_LT_TAGVAR(postdep_objects, $1)"; then
+          _LT_TAGVAR(postdep_objects, $1)="$p"
+        else
+          _LT_TAGVAR(postdep_objects, $1)="$_LT_TAGVAR(postdep_objects, $1) $p"
+        fi
+       fi
+       ;;
+
+    *) ;; # Ignore the rest.
+
+    esac
+  done
+
+  # Clean up.
+  rm -f a.out a.exe
+else
+  echo "libtool.m4: error: problem compiling $1 test program"
+fi
+
+$RM -f confest.$objext
+
+# PORTME: override above test on systems where it is broken
+m4_if([$1], [CXX],
+[case $host_os in
+interix[[3-9]]*)
+  # Interix 3.5 installs completely hosed .la files for C++, so rather than
+  # hack all around it, let's just trust "g++" to DTRT.
+  _LT_TAGVAR(predep_objects,$1)=
+  _LT_TAGVAR(postdep_objects,$1)=
+  _LT_TAGVAR(postdeps,$1)=
+  ;;
+
+linux*)
+  case `$CC -V 2>&1 | sed 5q` in
+  *Sun\ C*)
+    # Sun C++ 5.9
+
+    # The more standards-conforming stlport4 library is
+    # incompatible with the Cstd library. Avoid specifying
+    # it if it's in CXXFLAGS. Ignore libCrun as
+    # -library=stlport4 depends on it.
+    case " $CXX $CXXFLAGS " in
+    *" -library=stlport4 "*)
+      solaris_use_stlport4=yes
+      ;;
+    esac
+
+    if test "$solaris_use_stlport4" != yes; then
+      _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun'
+    fi
+    ;;
+  esac
+  ;;
+
+solaris*)
+  case $cc_basename in
+  CC*)
+    # The more standards-conforming stlport4 library is
+    # incompatible with the Cstd library. Avoid specifying
+    # it if it's in CXXFLAGS. Ignore libCrun as
+    # -library=stlport4 depends on it.
+    case " $CXX $CXXFLAGS " in
+    *" -library=stlport4 "*)
+      solaris_use_stlport4=yes
+      ;;
+    esac
+
+    # Adding this requires a known-good setup of shared libraries for
+    # Sun compiler versions before 5.6, else PIC objects from an old
+    # archive will be linked into the output, leading to subtle bugs.
+    if test "$solaris_use_stlport4" != yes; then
+      _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun'
+    fi
+    ;;
+  esac
+  ;;
+esac
+])
+
+case " $_LT_TAGVAR(postdeps, $1) " in
+*" -lc "*) _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;;
+esac
+ _LT_TAGVAR(compiler_lib_search_dirs, $1)=
+if test -n "${_LT_TAGVAR(compiler_lib_search_path, $1)}"; then
+ _LT_TAGVAR(compiler_lib_search_dirs, $1)=`echo " ${_LT_TAGVAR(compiler_lib_search_path, $1)}" | ${SED} -e 's! -L! !g' -e 's!^ !!'`
+fi
+_LT_TAGDECL([], [compiler_lib_search_dirs], [1],
+    [The directories searched by this compiler when creating a shared library])
+_LT_TAGDECL([], [predep_objects], [1],
+    [Dependencies to place before and after the objects being linked to
+    create a shared library])
+_LT_TAGDECL([], [postdep_objects], [1])
+_LT_TAGDECL([], [predeps], [1])
+_LT_TAGDECL([], [postdeps], [1])
+_LT_TAGDECL([], [compiler_lib_search_path], [1],
+    [The library search path used internally by the compiler when linking
+    a shared library])
+])# _LT_SYS_HIDDEN_LIBDEPS
+
+
+# _LT_PROG_F77
+# ------------
+# Since AC_PROG_F77 is broken, in that it returns the empty string
+# if there is no fortran compiler, we have our own version here.
+m4_defun([_LT_PROG_F77],
+[
+pushdef([AC_MSG_ERROR], [_lt_disable_F77=yes])
+AC_PROG_F77
+if test -z "$F77" || test "X$F77" = "Xno"; then
+  _lt_disable_F77=yes
+fi
+popdef([AC_MSG_ERROR])
+])# _LT_PROG_F77
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([_LT_PROG_F77], [])
+
+
+# _LT_LANG_F77_CONFIG([TAG])
+# --------------------------
+# Ensure that the configuration variables for a Fortran 77 compiler are
+# suitably defined.  These variables are subsequently used by _LT_CONFIG
+# to write the compiler configuration to `libtool'.
+m4_defun([_LT_LANG_F77_CONFIG],
+[AC_REQUIRE([_LT_PROG_F77])dnl
+AC_LANG_PUSH(Fortran 77)
+
+_LT_TAGVAR(archive_cmds_need_lc, $1)=no
+_LT_TAGVAR(allow_undefined_flag, $1)=
+_LT_TAGVAR(always_export_symbols, $1)=no
+_LT_TAGVAR(archive_expsym_cmds, $1)=
+_LT_TAGVAR(export_dynamic_flag_spec, $1)=
+_LT_TAGVAR(hardcode_direct, $1)=no
+_LT_TAGVAR(hardcode_direct_absolute, $1)=no
+_LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
+_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
+_LT_TAGVAR(hardcode_libdir_separator, $1)=
+_LT_TAGVAR(hardcode_minus_L, $1)=no
+_LT_TAGVAR(hardcode_automatic, $1)=no
+_LT_TAGVAR(inherit_rpath, $1)=no
+_LT_TAGVAR(module_cmds, $1)=
+_LT_TAGVAR(module_expsym_cmds, $1)=
+_LT_TAGVAR(link_all_deplibs, $1)=unknown
+_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
+_LT_TAGVAR(no_undefined_flag, $1)=
+_LT_TAGVAR(whole_archive_flag_spec, $1)=
+_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no
+
+# Source file extension for f77 test sources.
+ac_ext=f
+
+# Object file extension for compiled f77 test sources.
+objext=o
+_LT_TAGVAR(objext, $1)=$objext
+
+# No sense in running all these tests if we already determined that
+# the F77 compiler isn't working.  Some variables (like enable_shared)
+# are currently assumed to apply to all compilers on this platform,
+# and will be corrupted by setting them based on a non-working compiler.
+if test "$_lt_disable_F77" != yes; then
+  # Code to be used in simple compile tests
+  lt_simple_compile_test_code="\
+      subroutine t
+      return
+      end
+"
+
+  # Code to be used in simple link tests
+  lt_simple_link_test_code="\
+      program t
+      end
+"
+
+  # ltmain only uses $CC for tagged configurations so make sure $CC is set.
+  _LT_TAG_COMPILER
+
+  # save warnings/boilerplate of simple test code
+  _LT_COMPILER_BOILERPLATE
+  _LT_LINKER_BOILERPLATE
+
+  # Allow CC to be a program name with arguments.
+  lt_save_CC="$CC"
+  lt_save_GCC=$GCC
+  CC=${F77-"f77"}
+  compiler=$CC
+  _LT_TAGVAR(compiler, $1)=$CC
+  _LT_CC_BASENAME([$compiler])
+  GCC=$G77
+  if test -n "$compiler"; then
+    AC_MSG_CHECKING([if libtool supports shared libraries])
+    AC_MSG_RESULT([$can_build_shared])
+
+    AC_MSG_CHECKING([whether to build shared libraries])
+    test "$can_build_shared" = "no" && enable_shared=no
+
+    # On AIX, shared libraries and static libraries use the same namespace, and
+    # are all built from PIC.
+    case $host_os in
+      aix3*)
+        test "$enable_shared" = yes && enable_static=no
+        if test -n "$RANLIB"; then
+          archive_cmds="$archive_cmds~\$RANLIB \$lib"
+          postinstall_cmds='$RANLIB $lib'
+        fi
+        ;;
+      aix[[4-9]]*)
+       if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
+         test "$enable_shared" = yes && enable_static=no
+       fi
+        ;;
+    esac
+    AC_MSG_RESULT([$enable_shared])
+
+    AC_MSG_CHECKING([whether to build static libraries])
+    # Make sure either enable_shared or enable_static is yes.
+    test "$enable_shared" = yes || enable_static=yes
+    AC_MSG_RESULT([$enable_static])
+
+    _LT_TAGVAR(GCC, $1)="$G77"
+    _LT_TAGVAR(LD, $1)="$LD"
+
+    ## CAVEAT EMPTOR:
+    ## There is no encapsulation within the following macros, do not change
+    ## the running order or otherwise move them around unless you know exactly
+    ## what you are doing...
+    _LT_COMPILER_PIC($1)
+    _LT_COMPILER_C_O($1)
+    _LT_COMPILER_FILE_LOCKS($1)
+    _LT_LINKER_SHLIBS($1)
+    _LT_SYS_DYNAMIC_LINKER($1)
+    _LT_LINKER_HARDCODE_LIBPATH($1)
+
+    _LT_CONFIG($1)
+  fi # test -n "$compiler"
+
+  GCC=$lt_save_GCC
+  CC="$lt_save_CC"
+fi # test "$_lt_disable_F77" != yes
+
+AC_LANG_POP
+])# _LT_LANG_F77_CONFIG
+
+
+# _LT_PROG_FC
+# -----------
+# Since AC_PROG_FC is broken, in that it returns the empty string
+# if there is no fortran compiler, we have our own version here.
+m4_defun([_LT_PROG_FC],
+[
+pushdef([AC_MSG_ERROR], [_lt_disable_FC=yes])
+AC_PROG_FC
+if test -z "$FC" || test "X$FC" = "Xno"; then
+  _lt_disable_FC=yes
+fi
+popdef([AC_MSG_ERROR])
+])# _LT_PROG_FC
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([_LT_PROG_FC], [])
+
+
+# _LT_LANG_FC_CONFIG([TAG])
+# -------------------------
+# Ensure that the configuration variables for a Fortran compiler are
+# suitably defined.  These variables are subsequently used by _LT_CONFIG
+# to write the compiler configuration to `libtool'.
+m4_defun([_LT_LANG_FC_CONFIG],
+[AC_REQUIRE([_LT_PROG_FC])dnl
+AC_LANG_PUSH(Fortran)
+
+_LT_TAGVAR(archive_cmds_need_lc, $1)=no
+_LT_TAGVAR(allow_undefined_flag, $1)=
+_LT_TAGVAR(always_export_symbols, $1)=no
+_LT_TAGVAR(archive_expsym_cmds, $1)=
+_LT_TAGVAR(export_dynamic_flag_spec, $1)=
+_LT_TAGVAR(hardcode_direct, $1)=no
+_LT_TAGVAR(hardcode_direct_absolute, $1)=no
+_LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
+_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
+_LT_TAGVAR(hardcode_libdir_separator, $1)=
+_LT_TAGVAR(hardcode_minus_L, $1)=no
+_LT_TAGVAR(hardcode_automatic, $1)=no
+_LT_TAGVAR(inherit_rpath, $1)=no
+_LT_TAGVAR(module_cmds, $1)=
+_LT_TAGVAR(module_expsym_cmds, $1)=
+_LT_TAGVAR(link_all_deplibs, $1)=unknown
+_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
+_LT_TAGVAR(no_undefined_flag, $1)=
+_LT_TAGVAR(whole_archive_flag_spec, $1)=
+_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no
+
+# Source file extension for fc test sources.
+ac_ext=${ac_fc_srcext-f}
+
+# Object file extension for compiled fc test sources.
+objext=o
+_LT_TAGVAR(objext, $1)=$objext
+
+# No sense in running all these tests if we already determined that
+# the FC compiler isn't working.  Some variables (like enable_shared)
+# are currently assumed to apply to all compilers on this platform,
+# and will be corrupted by setting them based on a non-working compiler.
+if test "$_lt_disable_FC" != yes; then
+  # Code to be used in simple compile tests
+  lt_simple_compile_test_code="\
+      subroutine t
+      return
+      end
+"
+
+  # Code to be used in simple link tests
+  lt_simple_link_test_code="\
+      program t
+      end
+"
+
+  # ltmain only uses $CC for tagged configurations so make sure $CC is set.
+  _LT_TAG_COMPILER
+
+  # save warnings/boilerplate of simple test code
+  _LT_COMPILER_BOILERPLATE
+  _LT_LINKER_BOILERPLATE
+
+  # Allow CC to be a program name with arguments.
+  lt_save_CC="$CC"
+  lt_save_GCC=$GCC
+  CC=${FC-"f95"}
+  compiler=$CC
+  GCC=$ac_cv_fc_compiler_gnu
+
+  _LT_TAGVAR(compiler, $1)=$CC
+  _LT_CC_BASENAME([$compiler])
+
+  if test -n "$compiler"; then
+    AC_MSG_CHECKING([if libtool supports shared libraries])
+    AC_MSG_RESULT([$can_build_shared])
+
+    AC_MSG_CHECKING([whether to build shared libraries])
+    test "$can_build_shared" = "no" && enable_shared=no
+
+    # On AIX, shared libraries and static libraries use the same namespace, and
+    # are all built from PIC.
+    case $host_os in
+      aix3*)
+        test "$enable_shared" = yes && enable_static=no
+        if test -n "$RANLIB"; then
+          archive_cmds="$archive_cmds~\$RANLIB \$lib"
+          postinstall_cmds='$RANLIB $lib'
+        fi
+        ;;
+      aix[[4-9]]*)
+       if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
+         test "$enable_shared" = yes && enable_static=no
+       fi
+        ;;
+    esac
+    AC_MSG_RESULT([$enable_shared])
+
+    AC_MSG_CHECKING([whether to build static libraries])
+    # Make sure either enable_shared or enable_static is yes.
+    test "$enable_shared" = yes || enable_static=yes
+    AC_MSG_RESULT([$enable_static])
+
+    _LT_TAGVAR(GCC, $1)="$ac_cv_fc_compiler_gnu"
+    _LT_TAGVAR(LD, $1)="$LD"
+
+    ## CAVEAT EMPTOR:
+    ## There is no encapsulation within the following macros, do not change
+    ## the running order or otherwise move them around unless you know exactly
+    ## what you are doing...
+    _LT_SYS_HIDDEN_LIBDEPS($1)
+    _LT_COMPILER_PIC($1)
+    _LT_COMPILER_C_O($1)
+    _LT_COMPILER_FILE_LOCKS($1)
+    _LT_LINKER_SHLIBS($1)
+    _LT_SYS_DYNAMIC_LINKER($1)
+    _LT_LINKER_HARDCODE_LIBPATH($1)
+
+    _LT_CONFIG($1)
+  fi # test -n "$compiler"
+
+  GCC=$lt_save_GCC
+  CC="$lt_save_CC"
+fi # test "$_lt_disable_FC" != yes
+
+AC_LANG_POP
+])# _LT_LANG_FC_CONFIG
+
+
+# _LT_LANG_GCJ_CONFIG([TAG])
+# --------------------------
+# Ensure that the configuration variables for the GNU Java Compiler compiler
+# are suitably defined.  These variables are subsequently used by _LT_CONFIG
+# to write the compiler configuration to `libtool'.
+m4_defun([_LT_LANG_GCJ_CONFIG],
+[AC_REQUIRE([LT_PROG_GCJ])dnl
+AC_LANG_SAVE
+
+# Source file extension for Java test sources.
+ac_ext=java
+
+# Object file extension for compiled Java test sources.
+objext=o
+_LT_TAGVAR(objext, $1)=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code="class foo {}"
+
+# Code to be used in simple link tests
+lt_simple_link_test_code='public class conftest { public static void main(String[[]] argv) {}; }'
+
+# ltmain only uses $CC for tagged configurations so make sure $CC is set.
+_LT_TAG_COMPILER
+
+# save warnings/boilerplate of simple test code
+_LT_COMPILER_BOILERPLATE
+_LT_LINKER_BOILERPLATE
+
+# Allow CC to be a program name with arguments.
+lt_save_CC="$CC"
+lt_save_GCC=$GCC
+GCC=yes
+CC=${GCJ-"gcj"}
+compiler=$CC
+_LT_TAGVAR(compiler, $1)=$CC
+_LT_TAGVAR(LD, $1)="$LD"
+_LT_CC_BASENAME([$compiler])
+
+# GCJ did not exist at the time GCC didn't implicitly link libc in.
+_LT_TAGVAR(archive_cmds_need_lc, $1)=no
+
+_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
+
+## CAVEAT EMPTOR:
+## There is no encapsulation within the following macros, do not change
+## the running order or otherwise move them around unless you know exactly
+## what you are doing...
+if test -n "$compiler"; then
+  _LT_COMPILER_NO_RTTI($1)
+  _LT_COMPILER_PIC($1)
+  _LT_COMPILER_C_O($1)
+  _LT_COMPILER_FILE_LOCKS($1)
+  _LT_LINKER_SHLIBS($1)
+  _LT_LINKER_HARDCODE_LIBPATH($1)
+
+  _LT_CONFIG($1)
+fi
+
+AC_LANG_RESTORE
+
+GCC=$lt_save_GCC
+CC="$lt_save_CC"
+])# _LT_LANG_GCJ_CONFIG
+
+
+# _LT_LANG_RC_CONFIG([TAG])
+# -------------------------
+# Ensure that the configuration variables for the Windows resource compiler
+# are suitably defined.  These variables are subsequently used by _LT_CONFIG
+# to write the compiler configuration to `libtool'.
+m4_defun([_LT_LANG_RC_CONFIG],
+[AC_REQUIRE([LT_PROG_RC])dnl
+AC_LANG_SAVE
+
+# Source file extension for RC test sources.
+ac_ext=rc
+
+# Object file extension for compiled RC test sources.
+objext=o
+_LT_TAGVAR(objext, $1)=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }'
+
+# Code to be used in simple link tests
+lt_simple_link_test_code="$lt_simple_compile_test_code"
+
+# ltmain only uses $CC for tagged configurations so make sure $CC is set.
+_LT_TAG_COMPILER
+
+# save warnings/boilerplate of simple test code
+_LT_COMPILER_BOILERPLATE
+_LT_LINKER_BOILERPLATE
+
+# Allow CC to be a program name with arguments.
+lt_save_CC="$CC"
+lt_save_GCC=$GCC
+GCC=
+CC=${RC-"windres"}
+compiler=$CC
+_LT_TAGVAR(compiler, $1)=$CC
+_LT_CC_BASENAME([$compiler])
+_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes
+
+if test -n "$compiler"; then
+  :
+  _LT_CONFIG($1)
+fi
+
+GCC=$lt_save_GCC
+AC_LANG_RESTORE
+CC="$lt_save_CC"
+])# _LT_LANG_RC_CONFIG
+
+
+# LT_PROG_GCJ
+# -----------
+AC_DEFUN([LT_PROG_GCJ],
+[m4_ifdef([AC_PROG_GCJ], [AC_PROG_GCJ],
+  [m4_ifdef([A][M_PROG_GCJ], [A][M_PROG_GCJ],
+    [AC_CHECK_TOOL(GCJ, gcj,)
+      test "x${GCJFLAGS+set}" = xset || GCJFLAGS="-g -O2"
+      AC_SUBST(GCJFLAGS)])])[]dnl
+])
+
+# Old name:
+AU_ALIAS([LT_AC_PROG_GCJ], [LT_PROG_GCJ])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([LT_AC_PROG_GCJ], [])
+
+
+# LT_PROG_RC
+# ----------
+AC_DEFUN([LT_PROG_RC],
+[AC_CHECK_TOOL(RC, windres,)
+])
+
+# Old name:
+AU_ALIAS([LT_AC_PROG_RC], [LT_PROG_RC])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([LT_AC_PROG_RC], [])
+
+
+# _LT_DECL_EGREP
+# --------------
+# If we don't have a new enough Autoconf to choose the best grep
+# available, choose the one first in the user's PATH.
+m4_defun([_LT_DECL_EGREP],
+[AC_REQUIRE([AC_PROG_EGREP])dnl
+AC_REQUIRE([AC_PROG_FGREP])dnl
+test -z "$GREP" && GREP=grep
+_LT_DECL([], [GREP], [1], [A grep program that handles long lines])
+_LT_DECL([], [EGREP], [1], [An ERE matcher])
+_LT_DECL([], [FGREP], [1], [A literal string matcher])
+dnl Non-bleeding-edge autoconf doesn't subst GREP, so do it here too
+AC_SUBST([GREP])
+])
+
+
+# _LT_DECL_SED
+# ------------
+# Check for a fully-functional sed program, that truncates
+# as few characters as possible.  Prefer GNU sed if found.
+m4_defun([_LT_DECL_SED],
+[AC_PROG_SED
+test -z "$SED" && SED=sed
+Xsed="$SED -e 1s/^X//"
+_LT_DECL([], [SED], [1], [A sed program that does not truncate output])
+_LT_DECL([], [Xsed], ["\$SED -e 1s/^X//"],
+    [Sed that helps us avoid accidentally triggering echo(1) options like -n])
+])# _LT_DECL_SED
+
+m4_ifndef([AC_PROG_SED], [
+############################################################
+# NOTE: This macro has been submitted for inclusion into   #
+#  GNU Autoconf as AC_PROG_SED.  When it is available in   #
+#  a released version of Autoconf we should remove this    #
+#  macro and use it instead.                               #
+############################################################
+
+m4_defun([AC_PROG_SED],
+[AC_MSG_CHECKING([for a sed that does not truncate output])
+AC_CACHE_VAL(lt_cv_path_SED,
+[# Loop through the user's path and test for sed and gsed.
+# Then use that list of sed's as ones to test for truncation.
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for lt_ac_prog in sed gsed; do
+    for ac_exec_ext in '' $ac_executable_extensions; do
+      if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then
+        lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext"
+      fi
+    done
+  done
+done
+IFS=$as_save_IFS
+lt_ac_max=0
+lt_ac_count=0
+# Add /usr/xpg4/bin/sed as it is typically found on Solaris
+# along with /bin/sed that truncates output.
+for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do
+  test ! -f $lt_ac_sed && continue
+  cat /dev/null > conftest.in
+  lt_ac_count=0
+  echo $ECHO_N "0123456789$ECHO_C" >conftest.in
+  # Check for GNU sed and select it if it is found.
+  if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then
+    lt_cv_path_SED=$lt_ac_sed
+    break
+  fi
+  while true; do
+    cat conftest.in conftest.in >conftest.tmp
+    mv conftest.tmp conftest.in
+    cp conftest.in conftest.nl
+    echo >>conftest.nl
+    $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break
+    cmp -s conftest.out conftest.nl || break
+    # 10000 chars as input seems more than enough
+    test $lt_ac_count -gt 10 && break
+    lt_ac_count=`expr $lt_ac_count + 1`
+    if test $lt_ac_count -gt $lt_ac_max; then
+      lt_ac_max=$lt_ac_count
+      lt_cv_path_SED=$lt_ac_sed
+    fi
+  done
+done
+])
+SED=$lt_cv_path_SED
+AC_SUBST([SED])
+AC_MSG_RESULT([$SED])
+])#AC_PROG_SED
+])#m4_ifndef
+
+# Old name:
+AU_ALIAS([LT_AC_PROG_SED], [AC_PROG_SED])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([LT_AC_PROG_SED], [])
+
+
+# _LT_CHECK_SHELL_FEATURES
+# ------------------------
+# Find out whether the shell is Bourne or XSI compatible,
+# or has some other useful features.
+m4_defun([_LT_CHECK_SHELL_FEATURES],
+[AC_MSG_CHECKING([whether the shell understands some XSI constructs])
+# Try some XSI features
+xsi_shell=no
+( _lt_dummy="a/b/c"
+  test "${_lt_dummy##*/},${_lt_dummy%/*},"${_lt_dummy%"$_lt_dummy"}, \
+      = c,a/b,, \
+    && eval 'test $(( 1 + 1 )) -eq 2 \
+    && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \
+  && xsi_shell=yes
+AC_MSG_RESULT([$xsi_shell])
+_LT_CONFIG_LIBTOOL_INIT([xsi_shell='$xsi_shell'])
+
+AC_MSG_CHECKING([whether the shell understands "+="])
+lt_shell_append=no
+( foo=bar; set foo baz; eval "$[1]+=\$[2]" && test "$foo" = barbaz ) \
+    >/dev/null 2>&1 \
+  && lt_shell_append=yes
+AC_MSG_RESULT([$lt_shell_append])
+_LT_CONFIG_LIBTOOL_INIT([lt_shell_append='$lt_shell_append'])
+
+if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
+  lt_unset=unset
+else
+  lt_unset=false
+fi
+_LT_DECL([], [lt_unset], [0], [whether the shell understands "unset"])dnl
+
+# test EBCDIC or ASCII
+case `echo X|tr X '\101'` in
+ A) # ASCII based system
+    # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr
+  lt_SP2NL='tr \040 \012'
+  lt_NL2SP='tr \015\012 \040\040'
+  ;;
+ *) # EBCDIC based system
+  lt_SP2NL='tr \100 \n'
+  lt_NL2SP='tr \r\n \100\100'
+  ;;
+esac
+_LT_DECL([SP2NL], [lt_SP2NL], [1], [turn spaces into newlines])dnl
+_LT_DECL([NL2SP], [lt_NL2SP], [1], [turn newlines into spaces])dnl
+])# _LT_CHECK_SHELL_FEATURES
+
+
+# _LT_PROG_XSI_SHELLFNS
+# ---------------------
+# Bourne and XSI compatible variants of some useful shell functions.
+m4_defun([_LT_PROG_XSI_SHELLFNS],
+[case $xsi_shell in
+  yes)
+    cat << \_LT_EOF >> "$cfgfile"
+
+# func_dirname file append nondir_replacement
+# Compute the dirname of FILE.  If nonempty, add APPEND to the result,
+# otherwise set result to NONDIR_REPLACEMENT.
+func_dirname ()
+{
+  case ${1} in
+    */*) func_dirname_result="${1%/*}${2}" ;;
+    *  ) func_dirname_result="${3}" ;;
+  esac
+}
+
+# func_basename file
+func_basename ()
+{
+  func_basename_result="${1##*/}"
+}
+
+# func_dirname_and_basename file append nondir_replacement
+# perform func_basename and func_dirname in a single function
+# call:
+#   dirname:  Compute the dirname of FILE.  If nonempty,
+#             add APPEND to the result, otherwise set result
+#             to NONDIR_REPLACEMENT.
+#             value returned in "$func_dirname_result"
+#   basename: Compute filename of FILE.
+#             value retuned in "$func_basename_result"
+# Implementation must be kept synchronized with func_dirname
+# and func_basename. For efficiency, we do not delegate to
+# those functions but instead duplicate the functionality here.
+func_dirname_and_basename ()
+{
+  case ${1} in
+    */*) func_dirname_result="${1%/*}${2}" ;;
+    *  ) func_dirname_result="${3}" ;;
+  esac
+  func_basename_result="${1##*/}"
+}
+
+# func_stripname prefix suffix name
+# strip PREFIX and SUFFIX off of NAME.
+# PREFIX and SUFFIX must not contain globbing or regex special
+# characters, hashes, percent signs, but SUFFIX may contain a leading
+# dot (in which case that matches only a dot).
+func_stripname ()
+{
+  # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are
+  # positional parameters, so assign one to ordinary parameter first.
+  func_stripname_result=${3}
+  func_stripname_result=${func_stripname_result#"${1}"}
+  func_stripname_result=${func_stripname_result%"${2}"}
+}
+
+# func_opt_split
+func_opt_split ()
+{
+  func_opt_split_opt=${1%%=*}
+  func_opt_split_arg=${1#*=}
+}
+
+# func_lo2o object
+func_lo2o ()
+{
+  case ${1} in
+    *.lo) func_lo2o_result=${1%.lo}.${objext} ;;
+    *)    func_lo2o_result=${1} ;;
+  esac
+}
+
+# func_xform libobj-or-source
+func_xform ()
+{
+  func_xform_result=${1%.*}.lo
+}
+
+# func_arith arithmetic-term...
+func_arith ()
+{
+  func_arith_result=$(( $[*] ))
+}
+
+# func_len string
+# STRING may not start with a hyphen.
+func_len ()
+{
+  func_len_result=${#1}
+}
+
+_LT_EOF
+    ;;
+  *) # Bourne compatible functions.
+    cat << \_LT_EOF >> "$cfgfile"
+
+# func_dirname file append nondir_replacement
+# Compute the dirname of FILE.  If nonempty, add APPEND to the result,
+# otherwise set result to NONDIR_REPLACEMENT.
+func_dirname ()
+{
+  # Extract subdirectory from the argument.
+  func_dirname_result=`$ECHO "X${1}" | $Xsed -e "$dirname"`
+  if test "X$func_dirname_result" = "X${1}"; then
+    func_dirname_result="${3}"
+  else
+    func_dirname_result="$func_dirname_result${2}"
+  fi
+}
+
+# func_basename file
+func_basename ()
+{
+  func_basename_result=`$ECHO "X${1}" | $Xsed -e "$basename"`
+}
+
+dnl func_dirname_and_basename
+dnl A portable version of this function is already defined in general.m4sh
+dnl so there is no need for it here.
+
+# func_stripname prefix suffix name
+# strip PREFIX and SUFFIX off of NAME.
+# PREFIX and SUFFIX must not contain globbing or regex special
+# characters, hashes, percent signs, but SUFFIX may contain a leading
+# dot (in which case that matches only a dot).
+# func_strip_suffix prefix name
+func_stripname ()
+{
+  case ${2} in
+    .*) func_stripname_result=`$ECHO "X${3}" \
+           | $Xsed -e "s%^${1}%%" -e "s%\\\\${2}\$%%"`;;
+    *)  func_stripname_result=`$ECHO "X${3}" \
+           | $Xsed -e "s%^${1}%%" -e "s%${2}\$%%"`;;
+  esac
+}
+
+# sed scripts:
+my_sed_long_opt='1s/^\(-[[^=]]*\)=.*/\1/;q'
+my_sed_long_arg='1s/^-[[^=]]*=//'
+
+# func_opt_split
+func_opt_split ()
+{
+  func_opt_split_opt=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_opt"`
+  func_opt_split_arg=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_arg"`
+}
+
+# func_lo2o object
+func_lo2o ()
+{
+  func_lo2o_result=`$ECHO "X${1}" | $Xsed -e "$lo2o"`
+}
+
+# func_xform libobj-or-source
+func_xform ()
+{
+  func_xform_result=`$ECHO "X${1}" | $Xsed -e 's/\.[[^.]]*$/.lo/'`
+}
+
+# func_arith arithmetic-term...
+func_arith ()
+{
+  func_arith_result=`expr "$[@]"`
+}
+
+# func_len string
+# STRING may not start with a hyphen.
+func_len ()
+{
+  func_len_result=`expr "$[1]" : ".*" 2>/dev/null || echo $max_cmd_len`
+}
+
+_LT_EOF
+esac
+
+case $lt_shell_append in
+  yes)
+    cat << \_LT_EOF >> "$cfgfile"
+
+# func_append var value
+# Append VALUE to the end of shell variable VAR.
+func_append ()
+{
+  eval "$[1]+=\$[2]"
+}
+_LT_EOF
+    ;;
+  *)
+    cat << \_LT_EOF >> "$cfgfile"
+
+# func_append var value
+# Append VALUE to the end of shell variable VAR.
+func_append ()
+{
+  eval "$[1]=\$$[1]\$[2]"
+}
+
+_LT_EOF
+    ;;
+  esac
+])
diff --git a/m4/longdouble.m4 b/m4/longdouble.m4
new file mode 100755 (executable)
index 0000000..1333d2f
--- /dev/null
@@ -0,0 +1,30 @@
+# longdouble.m4 serial 1 (gettext-0.12)
+dnl Copyright (C) 2002-2003 Free Software Foundation, Inc.
+dnl This file is free software, distributed under the terms of the GNU
+dnl General Public License.  As a special exception to the GNU General
+dnl Public License, this file may be distributed as part of a program
+dnl that contains a configuration script generated by Autoconf, under
+dnl the same distribution terms as the rest of that program.
+
+dnl From Bruno Haible.
+dnl Test whether the compiler supports the 'long double' type.
+dnl Prerequisite: AC_PROG_CC
+
+AC_DEFUN([gt_TYPE_LONGDOUBLE],
+[
+  AC_CACHE_CHECK([for long double], gt_cv_c_long_double,
+    [if test "$GCC" = yes; then
+       gt_cv_c_long_double=yes
+     else
+       AC_TRY_COMPILE([
+         /* The Stardent Vistra knows sizeof(long double), but does not support it.  */
+         long double foo = 0.0;
+         /* On Ultrix 4.3 cc, long double is 4 and double is 8.  */
+         int array [2*(sizeof(long double) >= sizeof(double)) - 1];
+         ], ,
+         gt_cv_c_long_double=yes, gt_cv_c_long_double=no)
+     fi])
+  if test $gt_cv_c_long_double = yes; then
+    AC_DEFINE(HAVE_LONG_DOUBLE, 1, [Define if you have the 'long double' type.])
+  fi
+])
diff --git a/m4/longlong.m4 b/m4/longlong.m4
new file mode 100755 (executable)
index 0000000..d7d7350
--- /dev/null
@@ -0,0 +1,25 @@
+# longlong.m4 serial 4
+dnl Copyright (C) 1999-2003 Free Software Foundation, Inc.
+dnl This file is free software, distributed under the terms of the GNU
+dnl General Public License.  As a special exception to the GNU General
+dnl Public License, this file may be distributed as part of a program
+dnl that contains a configuration script generated by Autoconf, under
+dnl the same distribution terms as the rest of that program.
+
+dnl From Paul Eggert.
+
+# Define HAVE_LONG_LONG if 'long long' works.
+
+AC_DEFUN([jm_AC_TYPE_LONG_LONG],
+[
+  AC_CACHE_CHECK([for long long], ac_cv_type_long_long,
+  [AC_TRY_LINK([long long ll = 1LL; int i = 63;],
+    [long long llmax = (long long) -1;
+     return ll << i | ll >> i | llmax / ll | llmax % ll;],
+    ac_cv_type_long_long=yes,
+    ac_cv_type_long_long=no)])
+  if test $ac_cv_type_long_long = yes; then
+    AC_DEFINE(HAVE_LONG_LONG, 1,
+      [Define if you have the 'long long' type.])
+  fi
+])
diff --git a/m4/ltdl.m4 b/m4/ltdl.m4
new file mode 100755 (executable)
index 0000000..aeae738
--- /dev/null
@@ -0,0 +1,804 @@
+# ltdl.m4 - Configure ltdl for the target system. -*-Autoconf-*-
+#
+#   Copyright (C) 1999-2006, 2007, 2008 Free Software Foundation, Inc.
+#   Written by Thomas Tanner, 1999
+#
+# This file is free software; the Free Software Foundation gives
+# unlimited permission to copy and/or distribute it, with or without
+# modifications, as long as this notice is preserved.
+
+# serial 17 LTDL_INIT
+
+# LT_CONFIG_LTDL_DIR(DIRECTORY, [LTDL-MODE])
+# ------------------------------------------
+# DIRECTORY contains the libltdl sources.  It is okay to call this
+# function multiple times, as long as the same DIRECTORY is always given.
+AC_DEFUN([LT_CONFIG_LTDL_DIR],
+[AC_BEFORE([$0], [LTDL_INIT])
+_$0($*)
+])# LT_CONFIG_LTDL_DIR
+
+# We break this out into a separate macro, so that we can call it safely
+# internally without being caught accidentally by the sed scan in libtoolize.
+m4_defun([_LT_CONFIG_LTDL_DIR],
+[dnl remove trailing slashes
+m4_pushdef([_ARG_DIR], m4_bpatsubst([$1], [/*$]))
+m4_case(_LTDL_DIR,
+       [], [dnl only set lt_ltdl_dir if _ARG_DIR is not simply `.'
+            m4_if(_ARG_DIR, [.],
+                    [],
+                [m4_define([_LTDL_DIR], _ARG_DIR)
+                 _LT_SHELL_INIT([lt_ltdl_dir=']_ARG_DIR['])])],
+    [m4_if(_ARG_DIR, _LTDL_DIR,
+           [],
+       [m4_fatal([multiple libltdl directories: `]_LTDL_DIR[', `]_ARG_DIR['])])])
+m4_popdef([_ARG_DIR])
+])# _LT_CONFIG_LTDL_DIR
+
+# Initialise:
+m4_define([_LTDL_DIR], [])
+
+
+# _LT_BUILD_PREFIX
+# ----------------
+# If Autoconf is new enough, expand to `${top_build_prefix}', otherwise
+# to `${top_builddir}/'.
+m4_define([_LT_BUILD_PREFIX],
+[m4_ifdef([AC_AUTOCONF_VERSION],
+   [m4_if(m4_version_compare(m4_defn([AC_AUTOCONF_VERSION]), [2.62]),
+         [-1], [m4_ifdef([_AC_HAVE_TOP_BUILD_PREFIX],
+                         [${top_build_prefix}],
+                         [${top_builddir}/])],
+         [${top_build_prefix}])],
+   [${top_builddir}/])[]dnl
+])
+
+
+# LTDL_CONVENIENCE
+# ----------------
+# sets LIBLTDL to the link flags for the libltdl convenience library and
+# LTDLINCL to the include flags for the libltdl header and adds
+# --enable-ltdl-convenience to the configure arguments.  Note that
+# AC_CONFIG_SUBDIRS is not called here.  LIBLTDL will be prefixed with
+# '${top_build_prefix}' if available, otherwise with '${top_builddir}/',
+# and LTDLINCL will be prefixed with '${top_srcdir}/' (note the single
+# quotes!).  If your package is not flat and you're not using automake,
+# define top_build_prefix, top_builddir, and top_srcdir appropriately
+# in your Makefiles.
+AC_DEFUN([LTDL_CONVENIENCE],
+[AC_BEFORE([$0], [LTDL_INIT])dnl
+dnl Although the argument is deprecated and no longer documented,
+dnl LTDL_CONVENIENCE used to take a DIRECTORY orgument, if we have one
+dnl here make sure it is the same as any other declaration of libltdl's
+dnl location!  This also ensures lt_ltdl_dir is set when configure.ac is
+dnl not yet using an explicit LT_CONFIG_LTDL_DIR.
+m4_ifval([$1], [_LT_CONFIG_LTDL_DIR([$1])])dnl
+_$0()
+])# LTDL_CONVENIENCE
+
+# AC_LIBLTDL_CONVENIENCE accepted a directory argument in older libtools,
+# now we have LT_CONFIG_LTDL_DIR:
+AU_DEFUN([AC_LIBLTDL_CONVENIENCE],
+[_LT_CONFIG_LTDL_DIR([m4_default([$1], [libltdl])])
+_LTDL_CONVENIENCE])
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBLTDL_CONVENIENCE], [])
+
+
+# _LTDL_CONVENIENCE
+# -----------------
+# Code shared by LTDL_CONVENIENCE and LTDL_INIT([convenience]).
+m4_defun([_LTDL_CONVENIENCE],
+[case $enable_ltdl_convenience in
+  no) AC_MSG_ERROR([this package needs a convenience libltdl]) ;;
+  "") enable_ltdl_convenience=yes
+      ac_configure_args="$ac_configure_args --enable-ltdl-convenience" ;;
+esac
+LIBLTDL='_LT_BUILD_PREFIX'"${lt_ltdl_dir+$lt_ltdl_dir/}libltdlc.la"
+LTDLDEPS=$LIBLTDL
+LTDLINCL='-I${top_srcdir}'"${lt_ltdl_dir+/$lt_ltdl_dir}"
+
+AC_SUBST([LIBLTDL])
+AC_SUBST([LTDLDEPS])
+AC_SUBST([LTDLINCL])
+
+# For backwards non-gettext consistent compatibility...
+INCLTDL="$LTDLINCL"
+AC_SUBST([INCLTDL])
+])# _LTDL_CONVENIENCE
+
+
+# LTDL_INSTALLABLE
+# ----------------
+# sets LIBLTDL to the link flags for the libltdl installable library
+# and LTDLINCL to the include flags for the libltdl header and adds
+# --enable-ltdl-install to the configure arguments.  Note that
+# AC_CONFIG_SUBDIRS is not called from here.  If an installed libltdl
+# is not found, LIBLTDL will be prefixed with '${top_build_prefix}' if
+# available, otherwise with '${top_builddir}/', and LTDLINCL will be
+# prefixed with '${top_srcdir}/' (note the single quotes!).  If your
+# package is not flat and you're not using automake, define top_build_prefix,
+# top_builddir, and top_srcdir appropriately in your Makefiles.
+# In the future, this macro may have to be called after LT_INIT.
+AC_DEFUN([LTDL_INSTALLABLE],
+[AC_BEFORE([$0], [LTDL_INIT])dnl
+dnl Although the argument is deprecated and no longer documented,
+dnl LTDL_INSTALLABLE used to take a DIRECTORY orgument, if we have one
+dnl here make sure it is the same as any other declaration of libltdl's
+dnl location!  This also ensures lt_ltdl_dir is set when configure.ac is
+dnl not yet using an explicit LT_CONFIG_LTDL_DIR.
+m4_ifval([$1], [_LT_CONFIG_LTDL_DIR([$1])])dnl
+_$0()
+])# LTDL_INSTALLABLE
+
+# AC_LIBLTDL_INSTALLABLE accepted a directory argument in older libtools,
+# now we have LT_CONFIG_LTDL_DIR:
+AU_DEFUN([AC_LIBLTDL_INSTALLABLE],
+[_LT_CONFIG_LTDL_DIR([m4_default([$1], [libltdl])])
+_LTDL_INSTALLABLE])
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBLTDL_INSTALLABLE], [])
+
+
+# _LTDL_INSTALLABLE
+# -----------------
+# Code shared by LTDL_INSTALLABLE and LTDL_INIT([installable]).
+m4_defun([_LTDL_INSTALLABLE],
+[if test -f $prefix/lib/libltdl.la; then
+  lt_save_LDFLAGS="$LDFLAGS"
+  LDFLAGS="-L$prefix/lib $LDFLAGS"
+  AC_CHECK_LIB([ltdl], [lt_dlinit], [lt_lib_ltdl=yes])
+  LDFLAGS="$lt_save_LDFLAGS"
+  if test x"${lt_lib_ltdl-no}" = xyes; then
+    if test x"$enable_ltdl_install" != xyes; then
+      # Don't overwrite $prefix/lib/libltdl.la without --enable-ltdl-install
+      AC_MSG_WARN([not overwriting libltdl at $prefix, force with `--enable-ltdl-install'])
+      enable_ltdl_install=no
+    fi
+  elif test x"$enable_ltdl_install" = xno; then
+    AC_MSG_WARN([libltdl not installed, but installation disabled])
+  fi
+fi
+
+# If configure.ac declared an installable ltdl, and the user didn't override
+# with --disable-ltdl-install, we will install the shipped libltdl.
+case $enable_ltdl_install in
+  no) ac_configure_args="$ac_configure_args --enable-ltdl-install=no"
+      LIBLTDL="-lltdl"
+      LTDLDEPS=
+      LTDLINCL=
+      ;;
+  *)  enable_ltdl_install=yes
+      ac_configure_args="$ac_configure_args --enable-ltdl-install"
+      LIBLTDL='_LT_BUILD_PREFIX'"${lt_ltdl_dir+$lt_ltdl_dir/}libltdl.la"
+      LTDLDEPS=$LIBLTDL
+      LTDLINCL='-I${top_srcdir}'"${lt_ltdl_dir+/$lt_ltdl_dir}"
+      ;;
+esac
+
+AC_SUBST([LIBLTDL])
+AC_SUBST([LTDLDEPS])
+AC_SUBST([LTDLINCL])
+
+# For backwards non-gettext consistent compatibility...
+INCLTDL="$LTDLINCL"
+AC_SUBST([INCLTDL])
+])# LTDL_INSTALLABLE
+
+
+# _LTDL_MODE_DISPATCH
+# -------------------
+m4_define([_LTDL_MODE_DISPATCH],
+[dnl If _LTDL_DIR is `.', then we are configuring libltdl itself:
+m4_if(_LTDL_DIR, [],
+       [],
+    dnl if _LTDL_MODE was not set already, the default value is `subproject':
+    [m4_case(m4_default(_LTDL_MODE, [subproject]),
+         [subproject], [AC_CONFIG_SUBDIRS(_LTDL_DIR)
+                         _LT_SHELL_INIT([lt_dlopen_dir="$lt_ltdl_dir"])],
+         [nonrecursive], [_LT_SHELL_INIT([lt_dlopen_dir="$lt_ltdl_dir"; lt_libobj_prefix="$lt_ltdl_dir/"])],
+         [recursive], [],
+       [m4_fatal([unknown libltdl mode: ]_LTDL_MODE)])])dnl
+dnl Be careful not to expand twice:
+m4_define([$0], [])
+])# _LTDL_MODE_DISPATCH
+
+
+# _LT_LIBOBJ(MODULE_NAME)
+# -----------------------
+# Like AC_LIBOBJ, except that MODULE_NAME goes into _LT_LIBOBJS instead
+# of into LIBOBJS.
+AC_DEFUN([_LT_LIBOBJ], [
+  m4_pattern_allow([^_LT_LIBOBJS$])
+  _LT_LIBOBJS="$_LT_LIBOBJS $1.$ac_objext"
+])# _LT_LIBOBJS
+
+
+# LTDL_INIT([OPTIONS])
+# --------------------
+# Clients of libltdl can use this macro to allow the installer to
+# choose between a shipped copy of the ltdl sources or a preinstalled
+# version of the library.  If the shipped ltdl sources are not in a
+# subdirectory named libltdl, the directory name must be given by
+# LT_CONFIG_LTDL_DIR.
+AC_DEFUN([LTDL_INIT],
+[dnl Parse OPTIONS
+_LT_SET_OPTIONS([$0], [$1])
+
+dnl We need to keep our own list of libobjs separate from our parent project,
+dnl and the easiest way to do that is redefine the AC_LIBOBJs macro while
+dnl we look for our own LIBOBJs.
+m4_pushdef([AC_LIBOBJ], m4_defn([_LT_LIBOBJ]))
+m4_pushdef([AC_LIBSOURCES])
+
+dnl If not otherwise defined, default to the 1.5.x compatible subproject mode:
+m4_if(_LTDL_MODE, [],
+        [m4_define([_LTDL_MODE], m4_default([$2], [subproject]))
+        m4_if([-1], [m4_bregexp(_LTDL_MODE, [\(subproject\|\(non\)?recursive\)])],
+                [m4_fatal([unknown libltdl mode: ]_LTDL_MODE)])])
+
+AC_ARG_WITH([included_ltdl],
+    [AS_HELP_STRING([--with-included-ltdl],
+                    [use the GNU ltdl sources included here])])
+
+if test "x$with_included_ltdl" != xyes; then
+  # We are not being forced to use the included libltdl sources, so
+  # decide whether there is a useful installed version we can use.
+  AC_CHECK_HEADER([ltdl.h],
+      [AC_CHECK_DECL([lt_dlinterface_register],
+          [AC_CHECK_LIB([ltdl], [lt_dladvise_preload],
+              [with_included_ltdl=no],
+              [with_included_ltdl=yes])],
+          [with_included_ltdl=yes],
+          [AC_INCLUDES_DEFAULT
+           #include <ltdl.h>])],
+      [with_included_ltdl=yes],
+      [AC_INCLUDES_DEFAULT]
+  )
+fi
+
+dnl If neither LT_CONFIG_LTDL_DIR, LTDL_CONVENIENCE nor LTDL_INSTALLABLE
+dnl was called yet, then for old times' sake, we assume libltdl is in an
+dnl eponymous directory:
+AC_PROVIDE_IFELSE([LT_CONFIG_LTDL_DIR], [], [_LT_CONFIG_LTDL_DIR([libltdl])])
+
+AC_ARG_WITH([ltdl_include],
+    [AS_HELP_STRING([--with-ltdl-include=DIR],
+                    [use the ltdl headers installed in DIR])])
+
+if test -n "$with_ltdl_include"; then
+  if test -f "$with_ltdl_include/ltdl.h"; then :
+  else
+    AC_MSG_ERROR([invalid ltdl include directory: `$with_ltdl_include'])
+  fi
+else
+  with_ltdl_include=no
+fi
+
+AC_ARG_WITH([ltdl_lib],
+    [AS_HELP_STRING([--with-ltdl-lib=DIR],
+                    [use the libltdl.la installed in DIR])])
+
+if test -n "$with_ltdl_lib"; then
+  if test -f "$with_ltdl_lib/libltdl.la"; then :
+  else
+    AC_MSG_ERROR([invalid ltdl library directory: `$with_ltdl_lib'])
+  fi
+else
+  with_ltdl_lib=no
+fi
+
+case ,$with_included_ltdl,$with_ltdl_include,$with_ltdl_lib, in
+  ,yes,no,no,)
+       m4_case(m4_default(_LTDL_TYPE, [convenience]),
+           [convenience], [_LTDL_CONVENIENCE],
+           [installable], [_LTDL_INSTALLABLE],
+         [m4_fatal([unknown libltdl build type: ]_LTDL_TYPE)])
+       ;;
+  ,no,no,no,)
+       # If the included ltdl is not to be used, then use the
+       # preinstalled libltdl we found.
+       AC_DEFINE([HAVE_LTDL], [1],
+         [Define this if a modern libltdl is already installed])
+       LIBLTDL=-lltdl
+       LTDLDEPS=
+       LTDLINCL=
+       ;;
+  ,no*,no,*)
+       AC_MSG_ERROR([`--with-ltdl-include' and `--with-ltdl-lib' options must be used together])
+       ;;
+  *)   with_included_ltdl=no
+       LIBLTDL="-L$with_ltdl_lib -lltdl"
+       LTDLDEPS=
+       LTDLINCL="-I$with_ltdl_include"
+       ;;
+esac
+INCLTDL="$LTDLINCL"
+
+# Report our decision...
+AC_MSG_CHECKING([where to find libltdl headers])
+AC_MSG_RESULT([$LTDLINCL])
+AC_MSG_CHECKING([where to find libltdl library])
+AC_MSG_RESULT([$LIBLTDL])
+
+_LTDL_SETUP
+
+dnl restore autoconf definition.
+m4_popdef([AC_LIBOBJ])
+m4_popdef([AC_LIBSOURCES])
+
+AC_CONFIG_COMMANDS_PRE([
+    _ltdl_libobjs=
+    _ltdl_ltlibobjs=
+    if test -n "$_LT_LIBOBJS"; then
+      # Remove the extension.
+      _lt_sed_drop_objext='s/\.o$//;s/\.obj$//'
+      for i in `for i in $_LT_LIBOBJS; do echo "$i"; done | sed "$_lt_sed_drop_objext" | sort -u`; do
+        _ltdl_libobjs="$_ltdl_libobjs $lt_libobj_prefix$i.$ac_objext"
+        _ltdl_ltlibobjs="$_ltdl_ltlibobjs $lt_libobj_prefix$i.lo"
+      done
+    fi
+    AC_SUBST([ltdl_LIBOBJS], [$_ltdl_libobjs])
+    AC_SUBST([ltdl_LTLIBOBJS], [$_ltdl_ltlibobjs])
+])
+
+# Only expand once:
+m4_define([LTDL_INIT])
+])# LTDL_INIT
+
+# Old names:
+AU_DEFUN([AC_LIB_LTDL], [LTDL_INIT($@)])
+AU_DEFUN([AC_WITH_LTDL], [LTDL_INIT($@)])
+AU_DEFUN([LT_WITH_LTDL], [LTDL_INIT($@)])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIB_LTDL], [])
+dnl AC_DEFUN([AC_WITH_LTDL], [])
+dnl AC_DEFUN([LT_WITH_LTDL], [])
+
+
+# _LTDL_SETUP
+# -----------
+# Perform all the checks necessary for compilation of the ltdl objects
+#  -- including compiler checks and header checks.  This is a public
+# interface  mainly for the benefit of libltdl's own configure.ac, most
+# other users should call LTDL_INIT instead.
+AC_DEFUN([_LTDL_SETUP],
+[AC_REQUIRE([AC_PROG_CC])dnl
+AC_REQUIRE([LT_SYS_MODULE_EXT])dnl
+AC_REQUIRE([LT_SYS_MODULE_PATH])dnl
+AC_REQUIRE([LT_SYS_DLSEARCH_PATH])dnl
+AC_REQUIRE([LT_LIB_DLLOAD])dnl
+AC_REQUIRE([LT_SYS_SYMBOL_USCORE])dnl
+AC_REQUIRE([LT_FUNC_DLSYM_USCORE])dnl
+AC_REQUIRE([LT_SYS_DLOPEN_DEPLIBS])dnl
+AC_REQUIRE([gl_FUNC_ARGZ])dnl
+
+m4_require([_LT_CHECK_OBJDIR])dnl
+m4_require([_LT_HEADER_DLFCN])dnl
+m4_require([_LT_CHECK_DLPREOPEN])dnl
+m4_require([_LT_DECL_SED])dnl
+
+dnl Don't require this, or it will be expanded earlier than the code
+dnl that sets the variables it relies on:
+_LT_ENABLE_INSTALL
+
+dnl _LTDL_MODE specific code must be called at least once:
+_LTDL_MODE_DISPATCH
+
+# In order that ltdl.c can compile, find out the first AC_CONFIG_HEADERS
+# the user used.  This is so that ltdl.h can pick up the parent projects
+# config.h file, The first file in AC_CONFIG_HEADERS must contain the
+# definitions required by ltdl.c.
+# FIXME: Remove use of undocumented AC_LIST_HEADERS (2.59 compatibility).
+AC_CONFIG_COMMANDS_PRE([dnl
+m4_pattern_allow([^LT_CONFIG_H$])dnl
+m4_ifset([AH_HEADER],
+    [LT_CONFIG_H=AH_HEADER],
+    [m4_ifset([AC_LIST_HEADERS],
+           [LT_CONFIG_H=`echo "AC_LIST_HEADERS" | $SED 's,^[[      ]]*,,;s,[[ :]].*$,,'`],
+       [])])])
+AC_SUBST([LT_CONFIG_H])
+
+AC_CHECK_HEADERS([unistd.h dl.h sys/dl.h dld.h mach-o/dyld.h dirent.h],
+       [], [], [AC_INCLUDES_DEFAULT])
+
+AC_CHECK_FUNCS([closedir opendir readdir], [], [AC_LIBOBJ([lt__dirent])])
+AC_CHECK_FUNCS([strlcat strlcpy], [], [AC_LIBOBJ([lt__strl])])
+
+AC_DEFINE_UNQUOTED([LT_LIBEXT],["$libext"],[The archive extension])
+
+name=ltdl
+LTDLOPEN=`eval "\\$ECHO \"$libname_spec\""`
+AC_SUBST([LTDLOPEN])
+])# _LTDL_SETUP
+
+
+# _LT_ENABLE_INSTALL
+# ------------------
+m4_define([_LT_ENABLE_INSTALL],
+[AC_ARG_ENABLE([ltdl-install],
+    [AS_HELP_STRING([--enable-ltdl-install], [install libltdl])])
+
+case ,${enable_ltdl_install},${enable_ltdl_convenience} in
+  *yes*) ;;
+  *) enable_ltdl_convenience=yes ;;
+esac
+
+m4_ifdef([AM_CONDITIONAL],
+[AM_CONDITIONAL(INSTALL_LTDL, test x"${enable_ltdl_install-no}" != xno)
+ AM_CONDITIONAL(CONVENIENCE_LTDL, test x"${enable_ltdl_convenience-no}" != xno)])
+])# _LT_ENABLE_INSTALL
+
+
+# LT_SYS_DLOPEN_DEPLIBS
+# ---------------------
+AC_DEFUN([LT_SYS_DLOPEN_DEPLIBS],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+AC_CACHE_CHECK([whether deplibs are loaded by dlopen],
+  [lt_cv_sys_dlopen_deplibs],
+  [# PORTME does your system automatically load deplibs for dlopen?
+  # or its logical equivalent (e.g. shl_load for HP-UX < 11)
+  # For now, we just catch OSes we know something about -- in the
+  # future, we'll try test this programmatically.
+  lt_cv_sys_dlopen_deplibs=unknown
+  case $host_os in
+  aix3*|aix4.1.*|aix4.2.*)
+    # Unknown whether this is true for these versions of AIX, but
+    # we want this `case' here to explicitly catch those versions.
+    lt_cv_sys_dlopen_deplibs=unknown
+    ;;
+  aix[[4-9]]*)
+    lt_cv_sys_dlopen_deplibs=yes
+    ;;
+  amigaos*)
+    case $host_cpu in
+    powerpc)
+      lt_cv_sys_dlopen_deplibs=no
+      ;;
+    esac
+    ;;
+  darwin*)
+    # Assuming the user has installed a libdl from somewhere, this is true
+    # If you are looking for one http://www.opendarwin.org/projects/dlcompat
+    lt_cv_sys_dlopen_deplibs=yes
+    ;;
+  freebsd* | dragonfly*)
+    lt_cv_sys_dlopen_deplibs=yes
+    ;;
+  gnu* | linux* | k*bsd*-gnu | kopensolaris*-gnu)
+    # GNU and its variants, using gnu ld.so (Glibc)
+    lt_cv_sys_dlopen_deplibs=yes
+    ;;
+  hpux10*|hpux11*)
+    lt_cv_sys_dlopen_deplibs=yes
+    ;;
+  interix*)
+    lt_cv_sys_dlopen_deplibs=yes
+    ;;
+  irix[[12345]]*|irix6.[[01]]*)
+    # Catch all versions of IRIX before 6.2, and indicate that we don't
+    # know how it worked for any of those versions.
+    lt_cv_sys_dlopen_deplibs=unknown
+    ;;
+  irix*)
+    # The case above catches anything before 6.2, and it's known that
+    # at 6.2 and later dlopen does load deplibs.
+    lt_cv_sys_dlopen_deplibs=yes
+    ;;
+  netbsd* | netbsdelf*-gnu)
+    lt_cv_sys_dlopen_deplibs=yes
+    ;;
+  openbsd*)
+    lt_cv_sys_dlopen_deplibs=yes
+    ;;
+  osf[[1234]]*)
+    # dlopen did load deplibs (at least at 4.x), but until the 5.x series,
+    # it did *not* use an RPATH in a shared library to find objects the
+    # library depends on, so we explicitly say `no'.
+    lt_cv_sys_dlopen_deplibs=no
+    ;;
+  osf5.0|osf5.0a|osf5.1)
+    # dlopen *does* load deplibs and with the right loader patch applied
+    # it even uses RPATH in a shared library to search for shared objects
+    # that the library depends on, but there's no easy way to know if that
+    # patch is installed.  Since this is the case, all we can really
+    # say is unknown -- it depends on the patch being installed.  If
+    # it is, this changes to `yes'.  Without it, it would be `no'.
+    lt_cv_sys_dlopen_deplibs=unknown
+    ;;
+  osf*)
+    # the two cases above should catch all versions of osf <= 5.1.  Read
+    # the comments above for what we know about them.
+    # At > 5.1, deplibs are loaded *and* any RPATH in a shared library
+    # is used to find them so we can finally say `yes'.
+    lt_cv_sys_dlopen_deplibs=yes
+    ;;
+  qnx*)
+    lt_cv_sys_dlopen_deplibs=yes
+    ;;
+  solaris*)
+    lt_cv_sys_dlopen_deplibs=yes
+    ;;
+  sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
+    libltdl_cv_sys_dlopen_deplibs=yes
+    ;;
+  esac
+  ])
+if test "$lt_cv_sys_dlopen_deplibs" != yes; then
+ AC_DEFINE([LTDL_DLOPEN_DEPLIBS], [1],
+    [Define if the OS needs help to load dependent libraries for dlopen().])
+fi
+])# LT_SYS_DLOPEN_DEPLIBS
+
+# Old name:
+AU_ALIAS([AC_LTDL_SYS_DLOPEN_DEPLIBS], [LT_SYS_DLOPEN_DEPLIBS])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LTDL_SYS_DLOPEN_DEPLIBS], [])
+
+
+# LT_SYS_MODULE_EXT
+# -----------------
+AC_DEFUN([LT_SYS_MODULE_EXT],
+[m4_require([_LT_SYS_DYNAMIC_LINKER])dnl
+AC_CACHE_CHECK([which extension is used for runtime loadable modules],
+  [libltdl_cv_shlibext],
+[
+module=yes
+eval libltdl_cv_shlibext=$shrext_cmds
+  ])
+if test -n "$libltdl_cv_shlibext"; then
+  m4_pattern_allow([LT_MODULE_EXT])dnl
+  AC_DEFINE_UNQUOTED([LT_MODULE_EXT], ["$libltdl_cv_shlibext"],
+    [Define to the extension used for runtime loadable modules, say, ".so".])
+fi
+])# LT_SYS_MODULE_EXT
+
+# Old name:
+AU_ALIAS([AC_LTDL_SHLIBEXT], [LT_SYS_MODULE_EXT])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LTDL_SHLIBEXT], [])
+
+
+# LT_SYS_MODULE_PATH
+# ------------------
+AC_DEFUN([LT_SYS_MODULE_PATH],
+[m4_require([_LT_SYS_DYNAMIC_LINKER])dnl
+AC_CACHE_CHECK([which variable specifies run-time module search path],
+  [lt_cv_module_path_var], [lt_cv_module_path_var="$shlibpath_var"])
+if test -n "$lt_cv_module_path_var"; then
+  m4_pattern_allow([LT_MODULE_PATH_VAR])dnl
+  AC_DEFINE_UNQUOTED([LT_MODULE_PATH_VAR], ["$lt_cv_module_path_var"],
+    [Define to the name of the environment variable that determines the run-time module search path.])
+fi
+])# LT_SYS_MODULE_PATH
+
+# Old name:
+AU_ALIAS([AC_LTDL_SHLIBPATH], [LT_SYS_MODULE_PATH])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LTDL_SHLIBPATH], [])
+
+
+# LT_SYS_DLSEARCH_PATH
+# --------------------
+AC_DEFUN([LT_SYS_DLSEARCH_PATH],
+[m4_require([_LT_SYS_DYNAMIC_LINKER])dnl
+AC_CACHE_CHECK([for the default library search path],
+  [lt_cv_sys_dlsearch_path],
+  [lt_cv_sys_dlsearch_path="$sys_lib_dlsearch_path_spec"])
+if test -n "$lt_cv_sys_dlsearch_path"; then
+  sys_dlsearch_path=
+  for dir in $lt_cv_sys_dlsearch_path; do
+    if test -z "$sys_dlsearch_path"; then
+      sys_dlsearch_path="$dir"
+    else
+      sys_dlsearch_path="$sys_dlsearch_path$PATH_SEPARATOR$dir"
+    fi
+  done
+  m4_pattern_allow([LT_DLSEARCH_PATH])dnl
+  AC_DEFINE_UNQUOTED([LT_DLSEARCH_PATH], ["$sys_dlsearch_path"],
+    [Define to the system default library search path.])
+fi
+])# LT_SYS_DLSEARCH_PATH
+
+# Old name:
+AU_ALIAS([AC_LTDL_SYSSEARCHPATH], [LT_SYS_DLSEARCH_PATH])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LTDL_SYSSEARCHPATH], [])
+
+
+# _LT_CHECK_DLPREOPEN
+# -------------------
+m4_defun([_LT_CHECK_DLPREOPEN],
+[m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl
+AC_CACHE_CHECK([whether libtool supports -dlopen/-dlpreopen],
+  [libltdl_cv_preloaded_symbols],
+  [if test -n "$lt_cv_sys_global_symbol_pipe"; then
+    libltdl_cv_preloaded_symbols=yes
+  else
+    libltdl_cv_preloaded_symbols=no
+  fi
+  ])
+if test x"$libltdl_cv_preloaded_symbols" = xyes; then
+  AC_DEFINE([HAVE_PRELOADED_SYMBOLS], [1],
+    [Define if libtool can extract symbol lists from object files.])
+fi
+])# _LT_CHECK_DLPREOPEN
+
+
+# LT_LIB_DLLOAD
+# -------------
+AC_DEFUN([LT_LIB_DLLOAD],
+[m4_pattern_allow([^LT_DLLOADERS$])
+LT_DLLOADERS=
+AC_SUBST([LT_DLLOADERS])
+
+AC_LANG_PUSH([C])
+
+LIBADD_DLOPEN=
+AC_SEARCH_LIBS([dlopen], [dl],
+       [AC_DEFINE([HAVE_LIBDL], [1],
+                  [Define if you have the libdl library or equivalent.])
+       if test "$ac_cv_search_dlopen" != "none required" ; then
+         LIBADD_DLOPEN="-ldl"
+       fi
+       libltdl_cv_lib_dl_dlopen="yes"
+       LT_DLLOADERS="$LT_DLLOADERS ${lt_dlopen_dir+$lt_dlopen_dir/}dlopen.la"],
+    [AC_LINK_IFELSE([AC_LANG_PROGRAM([[#if HAVE_DLFCN_H
+#  include <dlfcn.h>
+#endif
+    ]], [[dlopen(0, 0);]])],
+           [AC_DEFINE([HAVE_LIBDL], [1],
+                      [Define if you have the libdl library or equivalent.])
+           libltdl_cv_func_dlopen="yes"
+           LT_DLLOADERS="$LT_DLLOADERS ${lt_dlopen_dir+$lt_dlopen_dir/}dlopen.la"],
+       [AC_CHECK_LIB([svld], [dlopen],
+               [AC_DEFINE([HAVE_LIBDL], [1],
+                        [Define if you have the libdl library or equivalent.])
+               LIBADD_DLOPEN="-lsvld" libltdl_cv_func_dlopen="yes"
+               LT_DLLOADERS="$LT_DLLOADERS ${lt_dlopen_dir+$lt_dlopen_dir/}dlopen.la"])])])
+if test x"$libltdl_cv_func_dlopen" = xyes || test x"$libltdl_cv_lib_dl_dlopen" = xyes
+then
+  lt_save_LIBS="$LIBS"
+  LIBS="$LIBS $LIBADD_DLOPEN"
+  AC_CHECK_FUNCS([dlerror])
+  LIBS="$lt_save_LIBS"
+fi
+AC_SUBST([LIBADD_DLOPEN])
+
+LIBADD_SHL_LOAD=
+AC_CHECK_FUNC([shl_load],
+       [AC_DEFINE([HAVE_SHL_LOAD], [1],
+                  [Define if you have the shl_load function.])
+       LT_DLLOADERS="$LT_DLLOADERS ${lt_dlopen_dir+$lt_dlopen_dir/}shl_load.la"],
+    [AC_CHECK_LIB([dld], [shl_load],
+           [AC_DEFINE([HAVE_SHL_LOAD], [1],
+                      [Define if you have the shl_load function.])
+           LT_DLLOADERS="$LT_DLLOADERS ${lt_dlopen_dir+$lt_dlopen_dir/}shl_load.la"
+           LIBADD_SHL_LOAD="-ldld"])])
+AC_SUBST([LIBADD_SHL_LOAD])
+
+case $host_os in
+darwin[[1567]].*)
+# We only want this for pre-Mac OS X 10.4.
+  AC_CHECK_FUNC([_dyld_func_lookup],
+       [AC_DEFINE([HAVE_DYLD], [1],
+                  [Define if you have the _dyld_func_lookup function.])
+       LT_DLLOADERS="$LT_DLLOADERS ${lt_dlopen_dir+$lt_dlopen_dir/}dyld.la"])
+  ;;
+beos*)
+  LT_DLLOADERS="$LT_DLLOADERS ${lt_dlopen_dir+$lt_dlopen_dir/}load_add_on.la"
+  ;;
+cygwin* | mingw* | os2* | pw32*)
+  AC_CHECK_DECLS([cygwin_conv_path], [], [], [[#include <sys/cygwin.h>]])
+  LT_DLLOADERS="$LT_DLLOADERS ${lt_dlopen_dir+$lt_dlopen_dir/}loadlibrary.la"
+  ;;
+esac
+
+AC_CHECK_LIB([dld], [dld_link],
+       [AC_DEFINE([HAVE_DLD], [1],
+                  [Define if you have the GNU dld library.])
+               LT_DLLOADERS="$LT_DLLOADERS ${lt_dlopen_dir+$lt_dlopen_dir/}dld_link.la"])
+AC_SUBST([LIBADD_DLD_LINK])
+
+m4_pattern_allow([^LT_DLPREOPEN$])
+LT_DLPREOPEN=
+if test -n "$LT_DLLOADERS"
+then
+  for lt_loader in $LT_DLLOADERS; do
+    LT_DLPREOPEN="$LT_DLPREOPEN-dlpreopen $lt_loader "
+  done
+  AC_DEFINE([HAVE_LIBDLLOADER], [1],
+            [Define if libdlloader will be built on this platform])
+fi
+AC_SUBST([LT_DLPREOPEN])
+
+dnl This isn't used anymore, but set it for backwards compatibility
+LIBADD_DL="$LIBADD_DLOPEN $LIBADD_SHL_LOAD"
+AC_SUBST([LIBADD_DL])
+
+AC_LANG_POP
+])# LT_LIB_DLLOAD
+
+# Old name:
+AU_ALIAS([AC_LTDL_DLLIB], [LT_LIB_DLLOAD])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LTDL_DLLIB], [])
+
+
+# LT_SYS_SYMBOL_USCORE
+# --------------------
+# does the compiler prefix global symbols with an underscore?
+AC_DEFUN([LT_SYS_SYMBOL_USCORE],
+[m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl
+AC_CACHE_CHECK([for _ prefix in compiled symbols],
+  [lt_cv_sys_symbol_underscore],
+  [lt_cv_sys_symbol_underscore=no
+  cat > conftest.$ac_ext <<_LT_EOF
+void nm_test_func(){}
+int main(){nm_test_func;return 0;}
+_LT_EOF
+  if AC_TRY_EVAL(ac_compile); then
+    # Now try to grab the symbols.
+    ac_nlist=conftest.nm
+    if AC_TRY_EVAL(NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $ac_nlist) && test -s "$ac_nlist"; then
+      # See whether the symbols have a leading underscore.
+      if grep '^. _nm_test_func' "$ac_nlist" >/dev/null; then
+        lt_cv_sys_symbol_underscore=yes
+      else
+        if grep '^. nm_test_func ' "$ac_nlist" >/dev/null; then
+         :
+        else
+         echo "configure: cannot find nm_test_func in $ac_nlist" >&AS_MESSAGE_LOG_FD
+        fi
+      fi
+    else
+      echo "configure: cannot run $lt_cv_sys_global_symbol_pipe" >&AS_MESSAGE_LOG_FD
+    fi
+  else
+    echo "configure: failed program was:" >&AS_MESSAGE_LOG_FD
+    cat conftest.c >&AS_MESSAGE_LOG_FD
+  fi
+  rm -rf conftest*
+  ])
+  sys_symbol_underscore=$lt_cv_sys_symbol_underscore
+  AC_SUBST([sys_symbol_underscore])
+])# LT_SYS_SYMBOL_USCORE
+
+# Old name:
+AU_ALIAS([AC_LTDL_SYMBOL_USCORE], [LT_SYS_SYMBOL_USCORE])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LTDL_SYMBOL_USCORE], [])
+
+
+# LT_FUNC_DLSYM_USCORE
+# --------------------
+AC_DEFUN([LT_FUNC_DLSYM_USCORE],
+[AC_REQUIRE([LT_SYS_SYMBOL_USCORE])dnl
+if test x"$lt_cv_sys_symbol_underscore" = xyes; then
+  if test x"$libltdl_cv_func_dlopen" = xyes ||
+     test x"$libltdl_cv_lib_dl_dlopen" = xyes ; then
+       AC_CACHE_CHECK([whether we have to add an underscore for dlsym],
+         [libltdl_cv_need_uscore],
+         [libltdl_cv_need_uscore=unknown
+          save_LIBS="$LIBS"
+          LIBS="$LIBS $LIBADD_DLOPEN"
+         _LT_TRY_DLOPEN_SELF(
+           [libltdl_cv_need_uscore=no], [libltdl_cv_need_uscore=yes],
+           [],                          [libltdl_cv_need_uscore=cross])
+         LIBS="$save_LIBS"
+       ])
+  fi
+fi
+
+if test x"$libltdl_cv_need_uscore" = xyes; then
+  AC_DEFINE([NEED_USCORE], [1],
+    [Define if dlsym() requires a leading underscore in symbol names.])
+fi
+])# LT_FUNC_DLSYM_USCORE
+
+# Old name:
+AU_ALIAS([AC_LTDL_DLSYM_USCORE], [LT_FUNC_DLSYM_USCORE])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LTDL_DLSYM_USCORE], [])
diff --git a/m4/ltoptions.m4 b/m4/ltoptions.m4
new file mode 100755 (executable)
index 0000000..e970119
--- /dev/null
@@ -0,0 +1,368 @@
+# Helper functions for option handling.                    -*- Autoconf -*-
+#
+#   Copyright (C) 2004, 2005, 2007, 2008 Free Software Foundation, Inc.
+#   Written by Gary V. Vaughan, 2004
+#
+# This file is free software; the Free Software Foundation gives
+# unlimited permission to copy and/or distribute it, with or without
+# modifications, as long as this notice is preserved.
+
+# serial 6 ltoptions.m4
+
+# This is to help aclocal find these macros, as it can't see m4_define.
+AC_DEFUN([LTOPTIONS_VERSION], [m4_if([1])])
+
+
+# _LT_MANGLE_OPTION(MACRO-NAME, OPTION-NAME)
+# ------------------------------------------
+m4_define([_LT_MANGLE_OPTION],
+[[_LT_OPTION_]m4_bpatsubst($1__$2, [[^a-zA-Z0-9_]], [_])])
+
+
+# _LT_SET_OPTION(MACRO-NAME, OPTION-NAME)
+# ---------------------------------------
+# Set option OPTION-NAME for macro MACRO-NAME, and if there is a
+# matching handler defined, dispatch to it.  Other OPTION-NAMEs are
+# saved as a flag.
+m4_define([_LT_SET_OPTION],
+[m4_define(_LT_MANGLE_OPTION([$1], [$2]))dnl
+m4_ifdef(_LT_MANGLE_DEFUN([$1], [$2]),
+        _LT_MANGLE_DEFUN([$1], [$2]),
+    [m4_warning([Unknown $1 option `$2'])])[]dnl
+])
+
+
+# _LT_IF_OPTION(MACRO-NAME, OPTION-NAME, IF-SET, [IF-NOT-SET])
+# ------------------------------------------------------------
+# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise.
+m4_define([_LT_IF_OPTION],
+[m4_ifdef(_LT_MANGLE_OPTION([$1], [$2]), [$3], [$4])])
+
+
+# _LT_UNLESS_OPTIONS(MACRO-NAME, OPTION-LIST, IF-NOT-SET)
+# -------------------------------------------------------
+# Execute IF-NOT-SET unless all options in OPTION-LIST for MACRO-NAME
+# are set.
+m4_define([_LT_UNLESS_OPTIONS],
+[m4_foreach([_LT_Option], m4_split(m4_normalize([$2])),
+           [m4_ifdef(_LT_MANGLE_OPTION([$1], _LT_Option),
+                     [m4_define([$0_found])])])[]dnl
+m4_ifdef([$0_found], [m4_undefine([$0_found])], [$3
+])[]dnl
+])
+
+
+# _LT_SET_OPTIONS(MACRO-NAME, OPTION-LIST)
+# ----------------------------------------
+# OPTION-LIST is a space-separated list of Libtool options associated
+# with MACRO-NAME.  If any OPTION has a matching handler declared with
+# LT_OPTION_DEFINE, dispatch to that macro; otherwise complain about
+# the unknown option and exit.
+m4_defun([_LT_SET_OPTIONS],
+[# Set options
+m4_foreach([_LT_Option], m4_split(m4_normalize([$2])),
+    [_LT_SET_OPTION([$1], _LT_Option)])
+
+m4_if([$1],[LT_INIT],[
+  dnl
+  dnl Simply set some default values (i.e off) if boolean options were not
+  dnl specified:
+  _LT_UNLESS_OPTIONS([LT_INIT], [dlopen], [enable_dlopen=no
+  ])
+  _LT_UNLESS_OPTIONS([LT_INIT], [win32-dll], [enable_win32_dll=no
+  ])
+  dnl
+  dnl If no reference was made to various pairs of opposing options, then
+  dnl we run the default mode handler for the pair.  For example, if neither
+  dnl `shared' nor `disable-shared' was passed, we enable building of shared
+  dnl archives by default:
+  _LT_UNLESS_OPTIONS([LT_INIT], [shared disable-shared], [_LT_ENABLE_SHARED])
+  _LT_UNLESS_OPTIONS([LT_INIT], [static disable-static], [_LT_ENABLE_STATIC])
+  _LT_UNLESS_OPTIONS([LT_INIT], [pic-only no-pic], [_LT_WITH_PIC])
+  _LT_UNLESS_OPTIONS([LT_INIT], [fast-install disable-fast-install],
+                  [_LT_ENABLE_FAST_INSTALL])
+  ])
+])# _LT_SET_OPTIONS
+
+
+## --------------------------------- ##
+## Macros to handle LT_INIT options. ##
+## --------------------------------- ##
+
+# _LT_MANGLE_DEFUN(MACRO-NAME, OPTION-NAME)
+# -----------------------------------------
+m4_define([_LT_MANGLE_DEFUN],
+[[_LT_OPTION_DEFUN_]m4_bpatsubst(m4_toupper([$1__$2]), [[^A-Z0-9_]], [_])])
+
+
+# LT_OPTION_DEFINE(MACRO-NAME, OPTION-NAME, CODE)
+# -----------------------------------------------
+m4_define([LT_OPTION_DEFINE],
+[m4_define(_LT_MANGLE_DEFUN([$1], [$2]), [$3])[]dnl
+])# LT_OPTION_DEFINE
+
+
+# dlopen
+# ------
+LT_OPTION_DEFINE([LT_INIT], [dlopen], [enable_dlopen=yes
+])
+
+AU_DEFUN([AC_LIBTOOL_DLOPEN],
+[_LT_SET_OPTION([LT_INIT], [dlopen])
+AC_DIAGNOSE([obsolete],
+[$0: Remove this warning and the call to _LT_SET_OPTION when you
+put the `dlopen' option into LT_INIT's first parameter.])
+])
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_DLOPEN], [])
+
+
+# win32-dll
+# ---------
+# Declare package support for building win32 dll's.
+LT_OPTION_DEFINE([LT_INIT], [win32-dll],
+[enable_win32_dll=yes
+
+case $host in
+*-*-cygwin* | *-*-mingw* | *-*-pw32*)
+  AC_CHECK_TOOL(AS, as, false)
+  AC_CHECK_TOOL(DLLTOOL, dlltool, false)
+  AC_CHECK_TOOL(OBJDUMP, objdump, false)
+  ;;
+esac
+
+test -z "$AS" && AS=as
+_LT_DECL([], [AS],      [0], [Assembler program])dnl
+
+test -z "$DLLTOOL" && DLLTOOL=dlltool
+_LT_DECL([], [DLLTOOL], [0], [DLL creation program])dnl
+
+test -z "$OBJDUMP" && OBJDUMP=objdump
+_LT_DECL([], [OBJDUMP], [0], [Object dumper program])dnl
+])# win32-dll
+
+AU_DEFUN([AC_LIBTOOL_WIN32_DLL],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+_LT_SET_OPTION([LT_INIT], [win32-dll])
+AC_DIAGNOSE([obsolete],
+[$0: Remove this warning and the call to _LT_SET_OPTION when you
+put the `win32-dll' option into LT_INIT's first parameter.])
+])
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_WIN32_DLL], [])
+
+
+# _LT_ENABLE_SHARED([DEFAULT])
+# ----------------------------
+# implement the --enable-shared flag, and supports the `shared' and
+# `disable-shared' LT_INIT options.
+# DEFAULT is either `yes' or `no'.  If omitted, it defaults to `yes'.
+m4_define([_LT_ENABLE_SHARED],
+[m4_define([_LT_ENABLE_SHARED_DEFAULT], [m4_if($1, no, no, yes)])dnl
+AC_ARG_ENABLE([shared],
+    [AS_HELP_STRING([--enable-shared@<:@=PKGS@:>@],
+       [build shared libraries @<:@default=]_LT_ENABLE_SHARED_DEFAULT[@:>@])],
+    [p=${PACKAGE-default}
+    case $enableval in
+    yes) enable_shared=yes ;;
+    no) enable_shared=no ;;
+    *)
+      enable_shared=no
+      # Look at the argument we got.  We use all the common list separators.
+      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+      for pkg in $enableval; do
+       IFS="$lt_save_ifs"
+       if test "X$pkg" = "X$p"; then
+         enable_shared=yes
+       fi
+      done
+      IFS="$lt_save_ifs"
+      ;;
+    esac],
+    [enable_shared=]_LT_ENABLE_SHARED_DEFAULT)
+
+    _LT_DECL([build_libtool_libs], [enable_shared], [0],
+       [Whether or not to build shared libraries])
+])# _LT_ENABLE_SHARED
+
+LT_OPTION_DEFINE([LT_INIT], [shared], [_LT_ENABLE_SHARED([yes])])
+LT_OPTION_DEFINE([LT_INIT], [disable-shared], [_LT_ENABLE_SHARED([no])])
+
+# Old names:
+AC_DEFUN([AC_ENABLE_SHARED],
+[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[shared])
+])
+
+AC_DEFUN([AC_DISABLE_SHARED],
+[_LT_SET_OPTION([LT_INIT], [disable-shared])
+])
+
+AU_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)])
+AU_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)])
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AM_ENABLE_SHARED], [])
+dnl AC_DEFUN([AM_DISABLE_SHARED], [])
+
+
+
+# _LT_ENABLE_STATIC([DEFAULT])
+# ----------------------------
+# implement the --enable-static flag, and support the `static' and
+# `disable-static' LT_INIT options.
+# DEFAULT is either `yes' or `no'.  If omitted, it defaults to `yes'.
+m4_define([_LT_ENABLE_STATIC],
+[m4_define([_LT_ENABLE_STATIC_DEFAULT], [m4_if($1, no, no, yes)])dnl
+AC_ARG_ENABLE([static],
+    [AS_HELP_STRING([--enable-static@<:@=PKGS@:>@],
+       [build static libraries @<:@default=]_LT_ENABLE_STATIC_DEFAULT[@:>@])],
+    [p=${PACKAGE-default}
+    case $enableval in
+    yes) enable_static=yes ;;
+    no) enable_static=no ;;
+    *)
+     enable_static=no
+      # Look at the argument we got.  We use all the common list separators.
+      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+      for pkg in $enableval; do
+       IFS="$lt_save_ifs"
+       if test "X$pkg" = "X$p"; then
+         enable_static=yes
+       fi
+      done
+      IFS="$lt_save_ifs"
+      ;;
+    esac],
+    [enable_static=]_LT_ENABLE_STATIC_DEFAULT)
+
+    _LT_DECL([build_old_libs], [enable_static], [0],
+       [Whether or not to build static libraries])
+])# _LT_ENABLE_STATIC
+
+LT_OPTION_DEFINE([LT_INIT], [static], [_LT_ENABLE_STATIC([yes])])
+LT_OPTION_DEFINE([LT_INIT], [disable-static], [_LT_ENABLE_STATIC([no])])
+
+# Old names:
+AC_DEFUN([AC_ENABLE_STATIC],
+[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[static])
+])
+
+AC_DEFUN([AC_DISABLE_STATIC],
+[_LT_SET_OPTION([LT_INIT], [disable-static])
+])
+
+AU_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)])
+AU_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)])
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AM_ENABLE_STATIC], [])
+dnl AC_DEFUN([AM_DISABLE_STATIC], [])
+
+
+
+# _LT_ENABLE_FAST_INSTALL([DEFAULT])
+# ----------------------------------
+# implement the --enable-fast-install flag, and support the `fast-install'
+# and `disable-fast-install' LT_INIT options.
+# DEFAULT is either `yes' or `no'.  If omitted, it defaults to `yes'.
+m4_define([_LT_ENABLE_FAST_INSTALL],
+[m4_define([_LT_ENABLE_FAST_INSTALL_DEFAULT], [m4_if($1, no, no, yes)])dnl
+AC_ARG_ENABLE([fast-install],
+    [AS_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@],
+    [optimize for fast installation @<:@default=]_LT_ENABLE_FAST_INSTALL_DEFAULT[@:>@])],
+    [p=${PACKAGE-default}
+    case $enableval in
+    yes) enable_fast_install=yes ;;
+    no) enable_fast_install=no ;;
+    *)
+      enable_fast_install=no
+      # Look at the argument we got.  We use all the common list separators.
+      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+      for pkg in $enableval; do
+       IFS="$lt_save_ifs"
+       if test "X$pkg" = "X$p"; then
+         enable_fast_install=yes
+       fi
+      done
+      IFS="$lt_save_ifs"
+      ;;
+    esac],
+    [enable_fast_install=]_LT_ENABLE_FAST_INSTALL_DEFAULT)
+
+_LT_DECL([fast_install], [enable_fast_install], [0],
+        [Whether or not to optimize for fast installation])dnl
+])# _LT_ENABLE_FAST_INSTALL
+
+LT_OPTION_DEFINE([LT_INIT], [fast-install], [_LT_ENABLE_FAST_INSTALL([yes])])
+LT_OPTION_DEFINE([LT_INIT], [disable-fast-install], [_LT_ENABLE_FAST_INSTALL([no])])
+
+# Old names:
+AU_DEFUN([AC_ENABLE_FAST_INSTALL],
+[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[fast-install])
+AC_DIAGNOSE([obsolete],
+[$0: Remove this warning and the call to _LT_SET_OPTION when you put
+the `fast-install' option into LT_INIT's first parameter.])
+])
+
+AU_DEFUN([AC_DISABLE_FAST_INSTALL],
+[_LT_SET_OPTION([LT_INIT], [disable-fast-install])
+AC_DIAGNOSE([obsolete],
+[$0: Remove this warning and the call to _LT_SET_OPTION when you put
+the `disable-fast-install' option into LT_INIT's first parameter.])
+])
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_ENABLE_FAST_INSTALL], [])
+dnl AC_DEFUN([AM_DISABLE_FAST_INSTALL], [])
+
+
+# _LT_WITH_PIC([MODE])
+# --------------------
+# implement the --with-pic flag, and support the `pic-only' and `no-pic'
+# LT_INIT options.
+# MODE is either `yes' or `no'.  If omitted, it defaults to `both'.
+m4_define([_LT_WITH_PIC],
+[AC_ARG_WITH([pic],
+    [AS_HELP_STRING([--with-pic],
+       [try to use only PIC/non-PIC objects @<:@default=use both@:>@])],
+    [pic_mode="$withval"],
+    [pic_mode=default])
+
+test -z "$pic_mode" && pic_mode=m4_default([$1], [default])
+
+_LT_DECL([], [pic_mode], [0], [What type of objects to build])dnl
+])# _LT_WITH_PIC
+
+LT_OPTION_DEFINE([LT_INIT], [pic-only], [_LT_WITH_PIC([yes])])
+LT_OPTION_DEFINE([LT_INIT], [no-pic], [_LT_WITH_PIC([no])])
+
+# Old name:
+AU_DEFUN([AC_LIBTOOL_PICMODE],
+[_LT_SET_OPTION([LT_INIT], [pic-only])
+AC_DIAGNOSE([obsolete],
+[$0: Remove this warning and the call to _LT_SET_OPTION when you
+put the `pic-only' option into LT_INIT's first parameter.])
+])
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_PICMODE], [])
+
+## ----------------- ##
+## LTDL_INIT Options ##
+## ----------------- ##
+
+m4_define([_LTDL_MODE], [])
+LT_OPTION_DEFINE([LTDL_INIT], [nonrecursive],
+                [m4_define([_LTDL_MODE], [nonrecursive])])
+LT_OPTION_DEFINE([LTDL_INIT], [recursive],
+                [m4_define([_LTDL_MODE], [recursive])])
+LT_OPTION_DEFINE([LTDL_INIT], [subproject],
+                [m4_define([_LTDL_MODE], [subproject])])
+
+m4_define([_LTDL_TYPE], [])
+LT_OPTION_DEFINE([LTDL_INIT], [installable],
+                [m4_define([_LTDL_TYPE], [installable])])
+LT_OPTION_DEFINE([LTDL_INIT], [convenience],
+                [m4_define([_LTDL_TYPE], [convenience])])
diff --git a/m4/ltsugar.m4 b/m4/ltsugar.m4
new file mode 100755 (executable)
index 0000000..9000a05
--- /dev/null
@@ -0,0 +1,123 @@
+# ltsugar.m4 -- libtool m4 base layer.                         -*-Autoconf-*-
+#
+# Copyright (C) 2004, 2005, 2007, 2008 Free Software Foundation, Inc.
+# Written by Gary V. Vaughan, 2004
+#
+# This file is free software; the Free Software Foundation gives
+# unlimited permission to copy and/or distribute it, with or without
+# modifications, as long as this notice is preserved.
+
+# serial 6 ltsugar.m4
+
+# This is to help aclocal find these macros, as it can't see m4_define.
+AC_DEFUN([LTSUGAR_VERSION], [m4_if([0.1])])
+
+
+# lt_join(SEP, ARG1, [ARG2...])
+# -----------------------------
+# Produce ARG1SEPARG2...SEPARGn, omitting [] arguments and their
+# associated separator.
+# Needed until we can rely on m4_join from Autoconf 2.62, since all earlier
+# versions in m4sugar had bugs.
+m4_define([lt_join],
+[m4_if([$#], [1], [],
+       [$#], [2], [[$2]],
+       [m4_if([$2], [], [], [[$2]_])$0([$1], m4_shift(m4_shift($@)))])])
+m4_define([_lt_join],
+[m4_if([$#$2], [2], [],
+       [m4_if([$2], [], [], [[$1$2]])$0([$1], m4_shift(m4_shift($@)))])])
+
+
+# lt_car(LIST)
+# lt_cdr(LIST)
+# ------------
+# Manipulate m4 lists.
+# These macros are necessary as long as will still need to support
+# Autoconf-2.59 which quotes differently.
+m4_define([lt_car], [[$1]])
+m4_define([lt_cdr],
+[m4_if([$#], 0, [m4_fatal([$0: cannot be called without arguments])],
+       [$#], 1, [],
+       [m4_dquote(m4_shift($@))])])
+m4_define([lt_unquote], $1)
+
+
+# lt_append(MACRO-NAME, STRING, [SEPARATOR])
+# ------------------------------------------
+# Redefine MACRO-NAME to hold its former content plus `SEPARATOR'`STRING'.
+# Note that neither SEPARATOR nor STRING are expanded; they are appended
+# to MACRO-NAME as is (leaving the expansion for when MACRO-NAME is invoked).
+# No SEPARATOR is output if MACRO-NAME was previously undefined (different
+# than defined and empty).
+#
+# This macro is needed until we can rely on Autoconf 2.62, since earlier
+# versions of m4sugar mistakenly expanded SEPARATOR but not STRING.
+m4_define([lt_append],
+[m4_define([$1],
+          m4_ifdef([$1], [m4_defn([$1])[$3]])[$2])])
+
+
+
+# lt_combine(SEP, PREFIX-LIST, INFIX, SUFFIX1, [SUFFIX2...])
+# ----------------------------------------------------------
+# Produce a SEP delimited list of all paired combinations of elements of
+# PREFIX-LIST with SUFFIX1 through SUFFIXn.  Each element of the list
+# has the form PREFIXmINFIXSUFFIXn.
+# Needed until we can rely on m4_combine added in Autoconf 2.62.
+m4_define([lt_combine],
+[m4_if(m4_eval([$# > 3]), [1],
+       [m4_pushdef([_Lt_sep], [m4_define([_Lt_sep], m4_defn([lt_car]))])]]dnl
+[[m4_foreach([_Lt_prefix], [$2],
+            [m4_foreach([_Lt_suffix],
+               ]m4_dquote(m4_dquote(m4_shift(m4_shift(m4_shift($@)))))[,
+       [_Lt_sep([$1])[]m4_defn([_Lt_prefix])[$3]m4_defn([_Lt_suffix])])])])])
+
+
+# lt_if_append_uniq(MACRO-NAME, VARNAME, [SEPARATOR], [UNIQ], [NOT-UNIQ])
+# -----------------------------------------------------------------------
+# Iff MACRO-NAME does not yet contain VARNAME, then append it (delimited
+# by SEPARATOR if supplied) and expand UNIQ, else NOT-UNIQ.
+m4_define([lt_if_append_uniq],
+[m4_ifdef([$1],
+         [m4_if(m4_index([$3]m4_defn([$1])[$3], [$3$2$3]), [-1],
+                [lt_append([$1], [$2], [$3])$4],
+                [$5])],
+         [lt_append([$1], [$2], [$3])$4])])
+
+
+# lt_dict_add(DICT, KEY, VALUE)
+# -----------------------------
+m4_define([lt_dict_add],
+[m4_define([$1($2)], [$3])])
+
+
+# lt_dict_add_subkey(DICT, KEY, SUBKEY, VALUE)
+# --------------------------------------------
+m4_define([lt_dict_add_subkey],
+[m4_define([$1($2:$3)], [$4])])
+
+
+# lt_dict_fetch(DICT, KEY, [SUBKEY])
+# ----------------------------------
+m4_define([lt_dict_fetch],
+[m4_ifval([$3],
+       m4_ifdef([$1($2:$3)], [m4_defn([$1($2:$3)])]),
+    m4_ifdef([$1($2)], [m4_defn([$1($2)])]))])
+
+
+# lt_if_dict_fetch(DICT, KEY, [SUBKEY], VALUE, IF-TRUE, [IF-FALSE])
+# -----------------------------------------------------------------
+m4_define([lt_if_dict_fetch],
+[m4_if(lt_dict_fetch([$1], [$2], [$3]), [$4],
+       [$5],
+    [$6])])
+
+
+# lt_dict_filter(DICT, [SUBKEY], VALUE, [SEPARATOR], KEY, [...])
+# --------------------------------------------------------------
+m4_define([lt_dict_filter],
+[m4_if([$5], [], [],
+  [lt_join(m4_quote(m4_default([$4], [[, ]])),
+           lt_unquote(m4_split(m4_normalize(m4_foreach(_Lt_key, lt_car([m4_shiftn(4, $@)]),
+                     [lt_if_dict_fetch([$1], _Lt_key, [$2], [$3], [_Lt_key ])])))))])[]dnl
+])
diff --git a/m4/ltversion.m4 b/m4/ltversion.m4
new file mode 100755 (executable)
index 0000000..f3c5309
--- /dev/null
@@ -0,0 +1,23 @@
+# ltversion.m4 -- version numbers                      -*- Autoconf -*-
+#
+#   Copyright (C) 2004 Free Software Foundation, Inc.
+#   Written by Scott James Remnant, 2004
+#
+# This file is free software; the Free Software Foundation gives
+# unlimited permission to copy and/or distribute it, with or without
+# modifications, as long as this notice is preserved.
+
+# Generated from ltversion.in.
+
+# serial 3017 ltversion.m4
+# This file is part of GNU Libtool
+
+m4_define([LT_PACKAGE_VERSION], [2.2.6b])
+m4_define([LT_PACKAGE_REVISION], [1.3017])
+
+AC_DEFUN([LTVERSION_VERSION],
+[macro_version='2.2.6b'
+macro_revision='1.3017'
+_LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?])
+_LT_DECL(, macro_revision, 0)
+])
diff --git a/m4/lt~obsolete.m4 b/m4/lt~obsolete.m4
new file mode 100755 (executable)
index 0000000..637bb20
--- /dev/null
@@ -0,0 +1,92 @@
+# lt~obsolete.m4 -- aclocal satisfying obsolete definitions.    -*-Autoconf-*-
+#
+#   Copyright (C) 2004, 2005, 2007 Free Software Foundation, Inc.
+#   Written by Scott James Remnant, 2004.
+#
+# This file is free software; the Free Software Foundation gives
+# unlimited permission to copy and/or distribute it, with or without
+# modifications, as long as this notice is preserved.
+
+# serial 4 lt~obsolete.m4
+
+# These exist entirely to fool aclocal when bootstrapping libtool.
+#
+# In the past libtool.m4 has provided macros via AC_DEFUN (or AU_DEFUN)
+# which have later been changed to m4_define as they aren't part of the
+# exported API, or moved to Autoconf or Automake where they belong.
+#
+# The trouble is, aclocal is a bit thick.  It'll see the old AC_DEFUN
+# in /usr/share/aclocal/libtool.m4 and remember it, then when it sees us
+# using a macro with the same name in our local m4/libtool.m4 it'll
+# pull the old libtool.m4 in (it doesn't see our shiny new m4_define
+# and doesn't know about Autoconf macros at all.)
+#
+# So we provide this file, which has a silly filename so it's always
+# included after everything else.  This provides aclocal with the
+# AC_DEFUNs it wants, but when m4 processes it, it doesn't do anything
+# because those macros already exist, or will be overwritten later.
+# We use AC_DEFUN over AU_DEFUN for compatibility with aclocal-1.6. 
+#
+# Anytime we withdraw an AC_DEFUN or AU_DEFUN, remember to add it here.
+# Yes, that means every name once taken will need to remain here until
+# we give up compatibility with versions before 1.7, at which point
+# we need to keep only those names which we still refer to.
+
+# This is to help aclocal find these macros, as it can't see m4_define.
+AC_DEFUN([LTOBSOLETE_VERSION], [m4_if([1])])
+
+m4_ifndef([AC_LIBTOOL_LINKER_OPTION],  [AC_DEFUN([AC_LIBTOOL_LINKER_OPTION])])
+m4_ifndef([AC_PROG_EGREP],             [AC_DEFUN([AC_PROG_EGREP])])
+m4_ifndef([_LT_AC_PROG_ECHO_BACKSLASH],        [AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH])])
+m4_ifndef([_LT_AC_SHELL_INIT],         [AC_DEFUN([_LT_AC_SHELL_INIT])])
+m4_ifndef([_LT_AC_SYS_LIBPATH_AIX],    [AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX])])
+m4_ifndef([_LT_PROG_LTMAIN],           [AC_DEFUN([_LT_PROG_LTMAIN])])
+m4_ifndef([_LT_AC_TAGVAR],             [AC_DEFUN([_LT_AC_TAGVAR])])
+m4_ifndef([AC_LTDL_ENABLE_INSTALL],    [AC_DEFUN([AC_LTDL_ENABLE_INSTALL])])
+m4_ifndef([AC_LTDL_PREOPEN],           [AC_DEFUN([AC_LTDL_PREOPEN])])
+m4_ifndef([_LT_AC_SYS_COMPILER],       [AC_DEFUN([_LT_AC_SYS_COMPILER])])
+m4_ifndef([_LT_AC_LOCK],               [AC_DEFUN([_LT_AC_LOCK])])
+m4_ifndef([AC_LIBTOOL_SYS_OLD_ARCHIVE],        [AC_DEFUN([AC_LIBTOOL_SYS_OLD_ARCHIVE])])
+m4_ifndef([_LT_AC_TRY_DLOPEN_SELF],    [AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF])])
+m4_ifndef([AC_LIBTOOL_PROG_CC_C_O],    [AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O])])
+m4_ifndef([AC_LIBTOOL_SYS_HARD_LINK_LOCKS], [AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS])])
+m4_ifndef([AC_LIBTOOL_OBJDIR],         [AC_DEFUN([AC_LIBTOOL_OBJDIR])])
+m4_ifndef([AC_LTDL_OBJDIR],            [AC_DEFUN([AC_LTDL_OBJDIR])])
+m4_ifndef([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH], [AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH])])
+m4_ifndef([AC_LIBTOOL_SYS_LIB_STRIP],  [AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP])])
+m4_ifndef([AC_PATH_MAGIC],             [AC_DEFUN([AC_PATH_MAGIC])])
+m4_ifndef([AC_PROG_LD_GNU],            [AC_DEFUN([AC_PROG_LD_GNU])])
+m4_ifndef([AC_PROG_LD_RELOAD_FLAG],    [AC_DEFUN([AC_PROG_LD_RELOAD_FLAG])])
+m4_ifndef([AC_DEPLIBS_CHECK_METHOD],   [AC_DEFUN([AC_DEPLIBS_CHECK_METHOD])])
+m4_ifndef([AC_LIBTOOL_PROG_COMPILER_NO_RTTI], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI])])
+m4_ifndef([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE], [AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE])])
+m4_ifndef([AC_LIBTOOL_PROG_COMPILER_PIC], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC])])
+m4_ifndef([AC_LIBTOOL_PROG_LD_SHLIBS], [AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS])])
+m4_ifndef([AC_LIBTOOL_POSTDEP_PREDEP], [AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP])])
+m4_ifndef([LT_AC_PROG_EGREP],          [AC_DEFUN([LT_AC_PROG_EGREP])])
+m4_ifndef([LT_AC_PROG_SED],            [AC_DEFUN([LT_AC_PROG_SED])])
+m4_ifndef([_LT_CC_BASENAME],           [AC_DEFUN([_LT_CC_BASENAME])])
+m4_ifndef([_LT_COMPILER_BOILERPLATE],  [AC_DEFUN([_LT_COMPILER_BOILERPLATE])])
+m4_ifndef([_LT_LINKER_BOILERPLATE],    [AC_DEFUN([_LT_LINKER_BOILERPLATE])])
+m4_ifndef([_AC_PROG_LIBTOOL],          [AC_DEFUN([_AC_PROG_LIBTOOL])])
+m4_ifndef([AC_LIBTOOL_SETUP],          [AC_DEFUN([AC_LIBTOOL_SETUP])])
+m4_ifndef([_LT_AC_CHECK_DLFCN],                [AC_DEFUN([_LT_AC_CHECK_DLFCN])])
+m4_ifndef([AC_LIBTOOL_SYS_DYNAMIC_LINKER],     [AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER])])
+m4_ifndef([_LT_AC_TAGCONFIG],          [AC_DEFUN([_LT_AC_TAGCONFIG])])
+m4_ifndef([AC_DISABLE_FAST_INSTALL],   [AC_DEFUN([AC_DISABLE_FAST_INSTALL])])
+m4_ifndef([_LT_AC_LANG_CXX],           [AC_DEFUN([_LT_AC_LANG_CXX])])
+m4_ifndef([_LT_AC_LANG_F77],           [AC_DEFUN([_LT_AC_LANG_F77])])
+m4_ifndef([_LT_AC_LANG_GCJ],           [AC_DEFUN([_LT_AC_LANG_GCJ])])
+m4_ifndef([AC_LIBTOOL_RC],             [AC_DEFUN([AC_LIBTOOL_RC])])
+m4_ifndef([AC_LIBTOOL_LANG_C_CONFIG],  [AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG])])
+m4_ifndef([_LT_AC_LANG_C_CONFIG],      [AC_DEFUN([_LT_AC_LANG_C_CONFIG])])
+m4_ifndef([AC_LIBTOOL_LANG_CXX_CONFIG],        [AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG])])
+m4_ifndef([_LT_AC_LANG_CXX_CONFIG],    [AC_DEFUN([_LT_AC_LANG_CXX_CONFIG])])
+m4_ifndef([AC_LIBTOOL_LANG_F77_CONFIG],        [AC_DEFUN([AC_LIBTOOL_LANG_F77_CONFIG])])
+m4_ifndef([_LT_AC_LANG_F77_CONFIG],    [AC_DEFUN([_LT_AC_LANG_F77_CONFIG])])
+m4_ifndef([AC_LIBTOOL_LANG_GCJ_CONFIG],        [AC_DEFUN([AC_LIBTOOL_LANG_GCJ_CONFIG])])
+m4_ifndef([_LT_AC_LANG_GCJ_CONFIG],    [AC_DEFUN([_LT_AC_LANG_GCJ_CONFIG])])
+m4_ifndef([AC_LIBTOOL_LANG_RC_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_RC_CONFIG])])
+m4_ifndef([_LT_AC_LANG_RC_CONFIG],     [AC_DEFUN([_LT_AC_LANG_RC_CONFIG])])
+m4_ifndef([AC_LIBTOOL_CONFIG],         [AC_DEFUN([AC_LIBTOOL_CONFIG])])
+m4_ifndef([_LT_AC_FILE_LTDLL_C],       [AC_DEFUN([_LT_AC_FILE_LTDLL_C])])
diff --git a/m4/nls.m4 b/m4/nls.m4
new file mode 100755 (executable)
index 0000000..36bc493
--- /dev/null
+++ b/m4/nls.m4
@@ -0,0 +1,49 @@
+# nls.m4 serial 1 (gettext-0.12)
+dnl Copyright (C) 1995-2003 Free Software Foundation, Inc.
+dnl This file is free software, distributed under the terms of the GNU
+dnl General Public License.  As a special exception to the GNU General
+dnl Public License, this file may be distributed as part of a program
+dnl that contains a configuration script generated by Autoconf, under
+dnl the same distribution terms as the rest of that program.
+dnl
+dnl This file can can be used in projects which are not available under
+dnl the GNU General Public License or the GNU Library General Public
+dnl License but which still want to provide support for the GNU gettext
+dnl functionality.
+dnl Please note that the actual code of the GNU gettext library is covered
+dnl by the GNU Library General Public License, and the rest of the GNU
+dnl gettext package package is covered by the GNU General Public License.
+dnl They are *not* in the public domain.
+
+dnl Authors:
+dnl   Ulrich Drepper <drepper@cygnus.com>, 1995-2000.
+dnl   Bruno Haible <haible@clisp.cons.org>, 2000-2003.
+
+AC_DEFUN([AM_NLS],
+[
+  AC_MSG_CHECKING([whether NLS is requested])
+  dnl Default is enabled NLS
+  AC_ARG_ENABLE(nls,
+    [  --disable-nls           do not use Native Language Support],
+    USE_NLS=$enableval, USE_NLS=yes)
+  AC_MSG_RESULT($USE_NLS)
+  AC_SUBST(USE_NLS)
+])
+
+AC_DEFUN([AM_MKINSTALLDIRS],
+[
+  dnl If the AC_CONFIG_AUX_DIR macro for autoconf is used we possibly
+  dnl find the mkinstalldirs script in another subdir but $(top_srcdir).
+  dnl Try to locate it.
+  MKINSTALLDIRS=
+  if test -n "$ac_aux_dir"; then
+    case "$ac_aux_dir" in
+      /*) MKINSTALLDIRS="$ac_aux_dir/mkinstalldirs" ;;
+      *) MKINSTALLDIRS="\$(top_builddir)/$ac_aux_dir/mkinstalldirs" ;;
+    esac
+  fi
+  if test -z "$MKINSTALLDIRS"; then
+    MKINSTALLDIRS="\$(top_srcdir)/mkinstalldirs"
+  fi
+  AC_SUBST(MKINSTALLDIRS)
+])
diff --git a/m4/po.m4 b/m4/po.m4
new file mode 100755 (executable)
index 0000000..e161998
--- /dev/null
+++ b/m4/po.m4
@@ -0,0 +1,426 @@
+# po.m4 serial 3 (gettext-0.14)
+dnl Copyright (C) 1995-2003 Free Software Foundation, Inc.
+dnl This file is free software, distributed under the terms of the GNU
+dnl General Public License.  As a special exception to the GNU General
+dnl Public License, this file may be distributed as part of a program
+dnl that contains a configuration script generated by Autoconf, under
+dnl the same distribution terms as the rest of that program.
+dnl
+dnl This file can can be used in projects which are not available under
+dnl the GNU General Public License or the GNU Library General Public
+dnl License but which still want to provide support for the GNU gettext
+dnl functionality.
+dnl Please note that the actual code of the GNU gettext library is covered
+dnl by the GNU Library General Public License, and the rest of the GNU
+dnl gettext package package is covered by the GNU General Public License.
+dnl They are *not* in the public domain.
+
+dnl Authors:
+dnl   Ulrich Drepper <drepper@cygnus.com>, 1995-2000.
+dnl   Bruno Haible <haible@clisp.cons.org>, 2000-2003.
+
+dnl Checks for all prerequisites of the po subdirectory.
+AC_DEFUN([AM_PO_SUBDIRS],
+[
+  AC_REQUIRE([AC_PROG_MAKE_SET])dnl
+  AC_REQUIRE([AC_PROG_INSTALL])dnl
+  AC_REQUIRE([AM_MKINSTALLDIRS])dnl
+  AC_REQUIRE([AM_NLS])dnl
+
+  dnl Perform the following tests also if --disable-nls has been given,
+  dnl because they are needed for "make dist" to work.
+
+  dnl Search for GNU msgfmt in the PATH.
+  dnl The first test excludes Solaris msgfmt and early GNU msgfmt versions.
+  dnl The second test excludes FreeBSD msgfmt.
+  AM_PATH_PROG_WITH_TEST(MSGFMT, msgfmt,
+    [$ac_dir/$ac_word --statistics /dev/null >/dev/null 2>&1 &&
+     (if $ac_dir/$ac_word --statistics /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi)],
+    :)
+  AC_PATH_PROG(GMSGFMT, gmsgfmt, $MSGFMT)
+
+  dnl Search for GNU xgettext 0.12 or newer in the PATH.
+  dnl The first test excludes Solaris xgettext and early GNU xgettext versions.
+  dnl The second test excludes FreeBSD xgettext.
+  AM_PATH_PROG_WITH_TEST(XGETTEXT, xgettext,
+    [$ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null >/dev/null 2>&1 &&
+     (if $ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi)],
+    :)
+  dnl Remove leftover from FreeBSD xgettext call.
+  rm -f messages.po
+
+  dnl Search for GNU msgmerge 0.11 or newer in the PATH.
+  AM_PATH_PROG_WITH_TEST(MSGMERGE, msgmerge,
+    [$ac_dir/$ac_word --update -q /dev/null /dev/null >/dev/null 2>&1], :)
+
+  dnl This could go away some day; the PATH_PROG_WITH_TEST already does it.
+  dnl Test whether we really found GNU msgfmt.
+  if test "$GMSGFMT" != ":"; then
+    dnl If it is no GNU msgfmt we define it as : so that the
+    dnl Makefiles still can work.
+    if $GMSGFMT --statistics /dev/null >/dev/null 2>&1 &&
+       (if $GMSGFMT --statistics /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then
+      : ;
+    else
+      GMSGFMT=`echo "$GMSGFMT" | sed -e 's,^.*/,,'`
+      AC_MSG_RESULT(
+        [found $GMSGFMT program is not GNU msgfmt; ignore it])
+      GMSGFMT=":"
+    fi
+  fi
+
+  dnl This could go away some day; the PATH_PROG_WITH_TEST already does it.
+  dnl Test whether we really found GNU xgettext.
+  if test "$XGETTEXT" != ":"; then
+    dnl If it is no GNU xgettext we define it as : so that the
+    dnl Makefiles still can work.
+    if $XGETTEXT --omit-header --copyright-holder= --msgid-bugs-address= /dev/null >/dev/null 2>&1 &&
+       (if $XGETTEXT --omit-header --copyright-holder= --msgid-bugs-address= /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then
+      : ;
+    else
+      AC_MSG_RESULT(
+        [found xgettext program is not GNU xgettext; ignore it])
+      XGETTEXT=":"
+    fi
+    dnl Remove leftover from FreeBSD xgettext call.
+    rm -f messages.po
+  fi
+
+  AC_OUTPUT_COMMANDS([
+    for ac_file in $CONFIG_FILES; do
+      # Support "outfile[:infile[:infile...]]"
+      case "$ac_file" in
+        *:*) ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;;
+      esac
+      # PO directories have a Makefile.in generated from Makefile.in.in.
+      case "$ac_file" in */Makefile.in)
+        # Adjust a relative srcdir.
+        ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'`
+        ac_dir_suffix="/`echo "$ac_dir"|sed 's%^\./%%'`"
+        ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'`
+        # In autoconf-2.13 it is called $ac_given_srcdir.
+        # In autoconf-2.50 it is called $srcdir.
+        test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir"
+        case "$ac_given_srcdir" in
+          .)  top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;;
+          /*) top_srcdir="$ac_given_srcdir" ;;
+          *)  top_srcdir="$ac_dots$ac_given_srcdir" ;;
+        esac
+        if test -f "$ac_given_srcdir/$ac_dir/POTFILES.in"; then
+          rm -f "$ac_dir/POTFILES"
+          test -n "$as_me" && echo "$as_me: creating $ac_dir/POTFILES" || echo "creating $ac_dir/POTFILES"
+          cat "$ac_given_srcdir/$ac_dir/POTFILES.in" | sed -e "/^#/d" -e "/^[  ]*\$/d" -e "s,.*,     $top_srcdir/& \\\\," | sed -e "\$s/\(.*\) \\\\/\1/" > "$ac_dir/POTFILES"
+          POMAKEFILEDEPS="POTFILES.in"
+          # ALL_LINGUAS, POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES depend
+          # on $ac_dir but don't depend on user-specified configuration
+          # parameters.
+          if test -f "$ac_given_srcdir/$ac_dir/LINGUAS"; then
+            # The LINGUAS file contains the set of available languages.
+            if test -n "$OBSOLETE_ALL_LINGUAS"; then
+              test -n "$as_me" && echo "$as_me: setting ALL_LINGUAS in configure.in is obsolete" || echo "setting ALL_LINGUAS in configure.in is obsolete"
+            fi
+            ALL_LINGUAS_=`sed -e "/^#/d" "$ac_given_srcdir/$ac_dir/LINGUAS"`
+            # Hide the ALL_LINGUAS assigment from automake.
+            eval 'ALL_LINGUAS''=$ALL_LINGUAS_'
+            POMAKEFILEDEPS="$POMAKEFILEDEPS LINGUAS"
+          else
+            # The set of available languages was given in configure.in.
+            eval 'ALL_LINGUAS''=$OBSOLETE_ALL_LINGUAS'
+          fi
+          # Compute POFILES
+          # as      $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).po)
+          # Compute UPDATEPOFILES
+          # as      $(foreach lang, $(ALL_LINGUAS), $(lang).po-update)
+          # Compute DUMMYPOFILES
+          # as      $(foreach lang, $(ALL_LINGUAS), $(lang).nop)
+          # Compute GMOFILES
+          # as      $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).gmo)
+          case "$ac_given_srcdir" in
+            .) srcdirpre= ;;
+            *) srcdirpre='$(srcdir)/' ;;
+          esac
+          POFILES=
+          UPDATEPOFILES=
+          DUMMYPOFILES=
+          GMOFILES=
+          for lang in $ALL_LINGUAS; do
+            POFILES="$POFILES $srcdirpre$lang.po"
+            UPDATEPOFILES="$UPDATEPOFILES $lang.po-update"
+            DUMMYPOFILES="$DUMMYPOFILES $lang.nop"
+            GMOFILES="$GMOFILES $srcdirpre$lang.gmo"
+          done
+          # CATALOGS depends on both $ac_dir and the user's LINGUAS
+          # environment variable.
+          INST_LINGUAS=
+          if test -n "$ALL_LINGUAS"; then
+            for presentlang in $ALL_LINGUAS; do
+              useit=no
+              if test "%UNSET%" != "$LINGUAS"; then
+                desiredlanguages="$LINGUAS"
+              else
+                desiredlanguages="$ALL_LINGUAS"
+              fi
+              for desiredlang in $desiredlanguages; do
+                # Use the presentlang catalog if desiredlang is
+                #   a. equal to presentlang, or
+                #   b. a variant of presentlang (because in this case,
+                #      presentlang can be used as a fallback for messages
+                #      which are not translated in the desiredlang catalog).
+                case "$desiredlang" in
+                  "$presentlang"*) useit=yes;;
+                esac
+              done
+              if test $useit = yes; then
+                INST_LINGUAS="$INST_LINGUAS $presentlang"
+              fi
+            done
+          fi
+          CATALOGS=
+          if test -n "$INST_LINGUAS"; then
+            for lang in $INST_LINGUAS; do
+              CATALOGS="$CATALOGS $lang.gmo"
+            done
+          fi
+          test -n "$as_me" && echo "$as_me: creating $ac_dir/Makefile" || echo "creating $ac_dir/Makefile"
+          sed -e "/^POTFILES =/r $ac_dir/POTFILES" -e "/^# Makevars/r $ac_given_srcdir/$ac_dir/Makevars" -e "s|@POFILES@|$POFILES|g" -e "s|@UPDATEPOFILES@|$UPDATEPOFILES|g" -e "s|@DUMMYPOFILES@|$DUMMYPOFILES|g" -e "s|@GMOFILES@|$GMOFILES|g" -e "s|@CATALOGS@|$CATALOGS|g" -e "s|@POMAKEFILEDEPS@|$POMAKEFILEDEPS|g" "$ac_dir/Makefile.in" > "$ac_dir/Makefile"
+          for f in "$ac_given_srcdir/$ac_dir"/Rules-*; do
+            if test -f "$f"; then
+              case "$f" in
+                *.orig | *.bak | *~) ;;
+                *) cat "$f" >> "$ac_dir/Makefile" ;;
+              esac
+            fi
+          done
+        fi
+        ;;
+      esac
+    done],
+   [# Capture the value of obsolete ALL_LINGUAS because we need it to compute
+    # POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES, CATALOGS. But hide it
+    # from automake.
+    eval 'OBSOLETE_ALL_LINGUAS''="$ALL_LINGUAS"'
+    # Capture the value of LINGUAS because we need it to compute CATALOGS.
+    LINGUAS="${LINGUAS-%UNSET%}"
+   ])
+])
+
+dnl Postprocesses a Makefile in a directory containing PO files.
+AC_DEFUN([AM_POSTPROCESS_PO_MAKEFILE],
+[
+  # When this code is run, in config.status, two variables have already been
+  # set:
+  # - OBSOLETE_ALL_LINGUAS is the value of LINGUAS set in configure.in,
+  # - LINGUAS is the value of the environment variable LINGUAS at configure
+  #   time.
+
+changequote(,)dnl
+  # Adjust a relative srcdir.
+  ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'`
+  ac_dir_suffix="/`echo "$ac_dir"|sed 's%^\./%%'`"
+  ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'`
+  # In autoconf-2.13 it is called $ac_given_srcdir.
+  # In autoconf-2.50 it is called $srcdir.
+  test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir"
+  case "$ac_given_srcdir" in
+    .)  top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;;
+    /*) top_srcdir="$ac_given_srcdir" ;;
+    *)  top_srcdir="$ac_dots$ac_given_srcdir" ;;
+  esac
+
+  # Find a way to echo strings without interpreting backslash.
+  if test "X`(echo '\t') 2>/dev/null`" = 'X\t'; then
+    gt_echo='echo'
+  else
+    if test "X`(printf '%s\n' '\t') 2>/dev/null`" = 'X\t'; then
+      gt_echo='printf %s\n'
+    else
+      echo_func () {
+        cat <<EOT
+$*
+EOT
+      }
+      gt_echo='echo_func'
+    fi
+  fi
+
+  # A sed script that extracts the value of VARIABLE from a Makefile.
+  sed_x_variable='
+# Test if the hold space is empty.
+x
+s/P/P/
+x
+ta
+# Yes it was empty. Look if we have the expected variable definition.
+/^[     ]*VARIABLE[     ]*=/{
+  # Seen the first line of the variable definition.
+  s/^[  ]*VARIABLE[     ]*=//
+  ba
+}
+bd
+:a
+# Here we are processing a line from the variable definition.
+# Remove comment, more precisely replace it with a space.
+s/#.*$/ /
+# See if the line ends in a backslash.
+tb
+:b
+s/\\$//
+# Print the line, without the trailing backslash.
+p
+tc
+# There was no trailing backslash. The end of the variable definition is
+# reached. Clear the hold space.
+s/^.*$//
+x
+bd
+:c
+# A trailing backslash means that the variable definition continues in the
+# next line. Put a nonempty string into the hold space to indicate this.
+s/^.*$/P/
+x
+:d
+'
+changequote([,])dnl
+
+  # Set POTFILES to the value of the Makefile variable POTFILES.
+  sed_x_POTFILES="`$gt_echo \"$sed_x_variable\" | sed -e '/^ *#/d' -e 's/VARIABLE/POTFILES/g'`"
+  POTFILES=`sed -n -e "$sed_x_POTFILES" < "$ac_file"`
+  # Compute POTFILES_DEPS as
+  #   $(foreach file, $(POTFILES), $(top_srcdir)/$(file))
+  POTFILES_DEPS=
+  for file in $POTFILES; do
+    POTFILES_DEPS="$POTFILES_DEPS "'$(top_srcdir)/'"$file"
+  done
+  POMAKEFILEDEPS=""
+
+  if test -n "$OBSOLETE_ALL_LINGUAS"; then
+    test -n "$as_me" && echo "$as_me: setting ALL_LINGUAS in configure.in is obsolete" || echo "setting ALL_LINGUAS in configure.in is obsolete"
+  fi
+  if test -f "$ac_given_srcdir/$ac_dir/LINGUAS"; then
+    # The LINGUAS file contains the set of available languages.
+    ALL_LINGUAS_=`sed -e "/^#/d" "$ac_given_srcdir/$ac_dir/LINGUAS"`
+    POMAKEFILEDEPS="$POMAKEFILEDEPS LINGUAS"
+  else
+    # Set ALL_LINGUAS to the value of the Makefile variable LINGUAS.
+    sed_x_LINGUAS="`$gt_echo \"$sed_x_variable\" | sed -e '/^ *#/d' -e 's/VARIABLE/LINGUAS/g'`"
+    ALL_LINGUAS_=`sed -n -e "$sed_x_LINGUAS" < "$ac_file"`
+  fi
+  # Hide the ALL_LINGUAS assigment from automake.
+  eval 'ALL_LINGUAS''=$ALL_LINGUAS_'
+  # Compute POFILES
+  # as      $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).po)
+  # Compute UPDATEPOFILES
+  # as      $(foreach lang, $(ALL_LINGUAS), $(lang).po-update)
+  # Compute DUMMYPOFILES
+  # as      $(foreach lang, $(ALL_LINGUAS), $(lang).nop)
+  # Compute GMOFILES
+  # as      $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).gmo)
+  # Compute PROPERTIESFILES
+  # as      $(foreach lang, $(ALL_LINGUAS), $(top_srcdir)/$(DOMAIN)_$(lang).properties)
+  # Compute CLASSFILES
+  # as      $(foreach lang, $(ALL_LINGUAS), $(top_srcdir)/$(DOMAIN)_$(lang).class)
+  # Compute QMFILES
+  # as      $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).qm)
+  # Compute MSGFILES
+  # as      $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(frob $(lang)).msg)
+  # Compute RESOURCESDLLFILES
+  # as      $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(frob $(lang))/$(DOMAIN).resources.dll)
+  case "$ac_given_srcdir" in
+    .) srcdirpre= ;;
+    *) srcdirpre='$(srcdir)/' ;;
+  esac
+  POFILES=
+  UPDATEPOFILES=
+  DUMMYPOFILES=
+  GMOFILES=
+  PROPERTIESFILES=
+  CLASSFILES=
+  QMFILES=
+  MSGFILES=
+  RESOURCESDLLFILES=
+  for lang in $ALL_LINGUAS; do
+    POFILES="$POFILES $srcdirpre$lang.po"
+    UPDATEPOFILES="$UPDATEPOFILES $lang.po-update"
+    DUMMYPOFILES="$DUMMYPOFILES $lang.nop"
+    GMOFILES="$GMOFILES $srcdirpre$lang.gmo"
+    PROPERTIESFILES="$PROPERTIESFILES \$(top_srcdir)/\$(DOMAIN)_$lang.properties"
+    CLASSFILES="$CLASSFILES \$(top_srcdir)/\$(DOMAIN)_$lang.class"
+    QMFILES="$QMFILES $srcdirpre$lang.qm"
+    frobbedlang=`echo $lang | sed -e 's/\..*$//' -e 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'`
+    MSGFILES="$MSGFILES $srcdirpre$frobbedlang.msg"
+    frobbedlang=`echo $lang | sed -e 's/_/-/g'`
+    RESOURCESDLLFILES="$RESOURCESDLLFILES $srcdirpre$frobbedlang/\$(DOMAIN).resources.dll"
+  done
+  # CATALOGS depends on both $ac_dir and the user's LINGUAS
+  # environment variable.
+  INST_LINGUAS=
+  if test -n "$ALL_LINGUAS"; then
+    for presentlang in $ALL_LINGUAS; do
+      useit=no
+      if test "%UNSET%" != "$LINGUAS"; then
+        desiredlanguages="$LINGUAS"
+      else
+        desiredlanguages="$ALL_LINGUAS"
+      fi
+      for desiredlang in $desiredlanguages; do
+        # Use the presentlang catalog if desiredlang is
+        #   a. equal to presentlang, or
+        #   b. a variant of presentlang (because in this case,
+        #      presentlang can be used as a fallback for messages
+        #      which are not translated in the desiredlang catalog).
+        case "$desiredlang" in
+          "$presentlang"*) useit=yes;;
+        esac
+      done
+      if test $useit = yes; then
+        INST_LINGUAS="$INST_LINGUAS $presentlang"
+      fi
+    done
+  fi
+  CATALOGS=
+  JAVACATALOGS=
+  QTCATALOGS=
+  TCLCATALOGS=
+  CSHARPCATALOGS=
+  if test -n "$INST_LINGUAS"; then
+    for lang in $INST_LINGUAS; do
+      CATALOGS="$CATALOGS $lang.gmo"
+      JAVACATALOGS="$JAVACATALOGS \$(DOMAIN)_$lang.properties"
+      QTCATALOGS="$QTCATALOGS $lang.qm"
+      frobbedlang=`echo $lang | sed -e 's/\..*$//' -e 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'`
+      TCLCATALOGS="$TCLCATALOGS $frobbedlang.msg"
+      frobbedlang=`echo $lang | sed -e 's/_/-/g'`
+      CSHARPCATALOGS="$CSHARPCATALOGS $frobbedlang/\$(DOMAIN).resources.dll"
+    done
+  fi
+
+  sed -e "s|@POTFILES_DEPS@|$POTFILES_DEPS|g" -e "s|@POFILES@|$POFILES|g" -e "s|@UPDATEPOFILES@|$UPDATEPOFILES|g" -e "s|@DUMMYPOFILES@|$DUMMYPOFILES|g" -e "s|@GMOFILES@|$GMOFILES|g" -e "s|@PROPERTIESFILES@|$PROPERTIESFILES|g" -e "s|@CLASSFILES@|$CLASSFILES|g" -e "s|@QMFILES@|$QMFILES|g" -e "s|@MSGFILES@|$MSGFILES|g" -e "s|@RESOURCESDLLFILES@|$RESOURCESDLLFILES|g" -e "s|@CATALOGS@|$CATALOGS|g" -e "s|@JAVACATALOGS@|$JAVACATALOGS|g" -e "s|@QTCATALOGS@|$QTCATALOGS|g" -e "s|@TCLCATALOGS@|$TCLCATALOGS|g" -e "s|@CSHARPCATALOGS@|$CSHARPCATALOGS|g" -e 's,^#distdir:,distdir:,' < "$ac_file" > "$ac_file.tmp"
+  if grep -l '@TCLCATALOGS@' "$ac_file" > /dev/null; then
+    # Add dependencies that cannot be formulated as a simple suffix rule.
+    for lang in $ALL_LINGUAS; do
+      frobbedlang=`echo $lang | sed -e 's/\..*$//' -e 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'`
+      cat >> "$ac_file.tmp" <<EOF
+$frobbedlang.msg: $lang.po
+       @echo "\$(MSGFMT) -c --tcl -d \$(srcdir) -l $lang $srcdirpre$lang.po"; \
+       \$(MSGFMT) -c --tcl -d "\$(srcdir)" -l $lang $srcdirpre$lang.po || { rm -f "\$(srcdir)/$frobbedlang.msg"; exit 1; }
+EOF
+    done
+  fi
+  if grep -l '@CSHARPCATALOGS@' "$ac_file" > /dev/null; then
+    # Add dependencies that cannot be formulated as a simple suffix rule.
+    for lang in $ALL_LINGUAS; do
+      frobbedlang=`echo $lang | sed -e 's/_/-/g'`
+      cat >> "$ac_file.tmp" <<EOF
+$frobbedlang/\$(DOMAIN).resources.dll: $lang.po
+       @echo "\$(MSGFMT) -c --csharp -d \$(srcdir) -l $lang $srcdirpre$lang.po -r \$(DOMAIN)"; \
+       \$(MSGFMT) -c --csharp -d "\$(srcdir)" -l $lang $srcdirpre$lang.po -r "\$(DOMAIN)" || { rm -f "\$(srcdir)/$frobbedlang.msg"; exit 1; }
+EOF
+    done
+  fi
+  if test -n "$POMAKEFILEDEPS"; then
+    cat >> "$ac_file.tmp" <<EOF
+Makefile: $POMAKEFILEDEPS
+EOF
+  fi
+  mv "$ac_file.tmp" "$ac_file"
+])
diff --git a/m4/printf-posix.m4 b/m4/printf-posix.m4
new file mode 100755 (executable)
index 0000000..186ba6a
--- /dev/null
@@ -0,0 +1,46 @@
+# printf-posix.m4 serial 2 (gettext-0.13.1)
+dnl Copyright (C) 2003 Free Software Foundation, Inc.
+dnl This file is free software, distributed under the terms of the GNU
+dnl General Public License.  As a special exception to the GNU General
+dnl Public License, this file may be distributed as part of a program
+dnl that contains a configuration script generated by Autoconf, under
+dnl the same distribution terms as the rest of that program.
+
+dnl From Bruno Haible.
+dnl Test whether the printf() function supports POSIX/XSI format strings with
+dnl positions.
+
+AC_DEFUN([gt_PRINTF_POSIX],
+[
+  AC_REQUIRE([AC_PROG_CC])
+  AC_CACHE_CHECK([whether printf() supports POSIX/XSI format strings],
+    gt_cv_func_printf_posix,
+    [
+      AC_TRY_RUN([
+#include <stdio.h>
+#include <string.h>
+/* The string "%2$d %1$d", with dollar characters protected from the shell's
+   dollar expansion (possibly an autoconf bug).  */
+static char format[] = { '%', '2', '$', 'd', ' ', '%', '1', '$', 'd', '\0' };
+static char buf[100];
+int main ()
+{
+  sprintf (buf, format, 33, 55);
+  return (strcmp (buf, "55 33") != 0);
+}], gt_cv_func_printf_posix=yes, gt_cv_func_printf_posix=no,
+      [
+        AC_EGREP_CPP(notposix, [
+#if defined __NetBSD__ || defined _MSC_VER || defined __MINGW32__ || defined __CYGWIN__
+  notposix
+#endif
+        ], gt_cv_func_printf_posix="guessing no",
+           gt_cv_func_printf_posix="guessing yes")
+      ])
+    ])
+  case $gt_cv_func_printf_posix in
+    *yes)
+      AC_DEFINE(HAVE_POSIX_PRINTF, 1,
+        [Define if your printf() function supports format strings with positions.])
+      ;;
+  esac
+])
diff --git a/m4/progtest.m4 b/m4/progtest.m4
new file mode 100755 (executable)
index 0000000..8fe527c
--- /dev/null
@@ -0,0 +1,91 @@
+# progtest.m4 serial 3 (gettext-0.12)
+dnl Copyright (C) 1996-2003 Free Software Foundation, Inc.
+dnl This file is free software, distributed under the terms of the GNU
+dnl General Public License.  As a special exception to the GNU General
+dnl Public License, this file may be distributed as part of a program
+dnl that contains a configuration script generated by Autoconf, under
+dnl the same distribution terms as the rest of that program.
+dnl
+dnl This file can can be used in projects which are not available under
+dnl the GNU General Public License or the GNU Library General Public
+dnl License but which still want to provide support for the GNU gettext
+dnl functionality.
+dnl Please note that the actual code of the GNU gettext library is covered
+dnl by the GNU Library General Public License, and the rest of the GNU
+dnl gettext package package is covered by the GNU General Public License.
+dnl They are *not* in the public domain.
+
+dnl Authors:
+dnl   Ulrich Drepper <drepper@cygnus.com>, 1996.
+
+# Search path for a program which passes the given test.
+
+dnl AM_PATH_PROG_WITH_TEST(VARIABLE, PROG-TO-CHECK-FOR,
+dnl   TEST-PERFORMED-ON-FOUND_PROGRAM [, VALUE-IF-NOT-FOUND [, PATH]])
+AC_DEFUN([AM_PATH_PROG_WITH_TEST],
+[
+# Prepare PATH_SEPARATOR.
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+  echo "#! /bin/sh" >conf$$.sh
+  echo  "exit 0"   >>conf$$.sh
+  chmod +x conf$$.sh
+  if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
+    PATH_SEPARATOR=';'
+  else
+    PATH_SEPARATOR=:
+  fi
+  rm -f conf$$.sh
+fi
+
+# Find out how to test for executable files. Don't use a zero-byte file,
+# as systems may use methods other than mode bits to determine executability.
+cat >conf$$.file <<_ASEOF
+#! /bin/sh
+exit 0
+_ASEOF
+chmod +x conf$$.file
+if test -x conf$$.file >/dev/null 2>&1; then
+  ac_executable_p="test -x"
+else
+  ac_executable_p="test -f"
+fi
+rm -f conf$$.file
+
+# Extract the first word of "$2", so it can be a program name with args.
+set dummy $2; ac_word=[$]2
+AC_MSG_CHECKING([for $ac_word])
+AC_CACHE_VAL(ac_cv_path_$1,
+[case "[$]$1" in
+  [[\\/]]* | ?:[[\\/]]*)
+    ac_cv_path_$1="[$]$1" # Let the user override the test with a path.
+    ;;
+  *)
+    ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR
+    for ac_dir in ifelse([$5], , $PATH, [$5]); do
+      IFS="$ac_save_IFS"
+      test -z "$ac_dir" && ac_dir=.
+      for ac_exec_ext in '' $ac_executable_extensions; do
+        if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then
+          if [$3]; then
+            ac_cv_path_$1="$ac_dir/$ac_word$ac_exec_ext"
+            break 2
+          fi
+        fi
+      done
+    done
+    IFS="$ac_save_IFS"
+dnl If no 4th arg is given, leave the cache variable unset,
+dnl so AC_PATH_PROGS will keep looking.
+ifelse([$4], , , [  test -z "[$]ac_cv_path_$1" && ac_cv_path_$1="$4"
+])dnl
+    ;;
+esac])dnl
+$1="$ac_cv_path_$1"
+if test ifelse([$4], , [-n "[$]$1"], ["[$]$1" != "$4"]); then
+  AC_MSG_RESULT([$]$1)
+else
+  AC_MSG_RESULT(no)
+fi
+AC_SUBST($1)dnl
+])
diff --git a/m4/signed.m4 b/m4/signed.m4
new file mode 100755 (executable)
index 0000000..dc1f54f
--- /dev/null
@@ -0,0 +1,19 @@
+# signed.m4 serial 1 (gettext-0.10.40)
+dnl Copyright (C) 2001-2002 Free Software Foundation, Inc.
+dnl This file is free software, distributed under the terms of the GNU
+dnl General Public License.  As a special exception to the GNU General
+dnl Public License, this file may be distributed as part of a program
+dnl that contains a configuration script generated by Autoconf, under
+dnl the same distribution terms as the rest of that program.
+
+dnl From Bruno Haible.
+
+AC_DEFUN([bh_C_SIGNED],
+[
+  AC_CACHE_CHECK([for signed], bh_cv_c_signed,
+   [AC_TRY_COMPILE(, [signed char x;], bh_cv_c_signed=yes, bh_cv_c_signed=no)])
+  if test $bh_cv_c_signed = no; then
+    AC_DEFINE(signed, ,
+              [Define to empty if the C compiler doesn't support this keyword.])
+  fi
+])
diff --git a/m4/size_max.m4 b/m4/size_max.m4
new file mode 100755 (executable)
index 0000000..5762fc3
--- /dev/null
@@ -0,0 +1,61 @@
+# size_max.m4 serial 2
+dnl Copyright (C) 2003 Free Software Foundation, Inc.
+dnl This file is free software, distributed under the terms of the GNU
+dnl General Public License.  As a special exception to the GNU General
+dnl Public License, this file may be distributed as part of a program
+dnl that contains a configuration script generated by Autoconf, under
+dnl the same distribution terms as the rest of that program.
+
+dnl From Bruno Haible.
+
+AC_DEFUN([gl_SIZE_MAX],
+[
+  AC_CHECK_HEADERS(stdint.h)
+  dnl First test whether the system already has SIZE_MAX.
+  AC_MSG_CHECKING([for SIZE_MAX])
+  result=
+  AC_EGREP_CPP([Found it], [
+#include <limits.h>
+#if HAVE_STDINT_H
+#include <stdint.h>
+#endif
+#ifdef SIZE_MAX
+Found it
+#endif
+], result=yes)
+  if test -z "$result"; then
+    dnl Define it ourselves. Here we assume that the type 'size_t' is not wider
+    dnl than the type 'unsigned long'.
+    dnl The _AC_COMPUTE_INT macro works up to LONG_MAX, since it uses 'expr',
+    dnl which is guaranteed to work from LONG_MIN to LONG_MAX.
+    _AC_COMPUTE_INT([~(size_t)0 / 10], res_hi,
+      [#include <stddef.h>], result=?)
+    _AC_COMPUTE_INT([~(size_t)0 % 10], res_lo,
+      [#include <stddef.h>], result=?)
+    _AC_COMPUTE_INT([sizeof (size_t) <= sizeof (unsigned int)], fits_in_uint,
+      [#include <stddef.h>], result=?)
+    if test "$fits_in_uint" = 1; then
+      dnl Even though SIZE_MAX fits in an unsigned int, it must be of type
+      dnl 'unsigned long' if the type 'size_t' is the same as 'unsigned long'.
+      AC_TRY_COMPILE([#include <stddef.h>
+        extern size_t foo;
+        extern unsigned long foo;
+        ], [], fits_in_uint=0)
+    fi
+    if test -z "$result"; then
+      if test "$fits_in_uint" = 1; then
+        result="$res_hi$res_lo"U
+      else
+        result="$res_hi$res_lo"UL
+      fi
+    else
+      dnl Shouldn't happen, but who knows...
+      result='~(size_t)0'
+    fi
+  fi
+  AC_MSG_RESULT([$result])
+  if test "$result" != yes; then
+    AC_DEFINE_UNQUOTED([SIZE_MAX], [$result],
+      [Define as the maximum value of type 'size_t', if the system doesn't define it.])
+  fi
+])
diff --git a/m4/stdint_h.m4 b/m4/stdint_h.m4
new file mode 100755 (executable)
index 0000000..32ba7ae
--- /dev/null
@@ -0,0 +1,28 @@
+# stdint_h.m4 serial 3 (gettext-0.12)
+dnl Copyright (C) 1997-2003 Free Software Foundation, Inc.
+dnl This file is free software, distributed under the terms of the GNU
+dnl General Public License.  As a special exception to the GNU General
+dnl Public License, this file may be distributed as part of a program
+dnl that contains a configuration script generated by Autoconf, under
+dnl the same distribution terms as the rest of that program.
+
+dnl From Paul Eggert.
+
+# Define HAVE_STDINT_H_WITH_UINTMAX if <stdint.h> exists,
+# doesn't clash with <sys/types.h>, and declares uintmax_t.
+
+AC_DEFUN([jm_AC_HEADER_STDINT_H],
+[
+  AC_CACHE_CHECK([for stdint.h], jm_ac_cv_header_stdint_h,
+  [AC_TRY_COMPILE(
+    [#include <sys/types.h>
+#include <stdint.h>],
+    [uintmax_t i = (uintmax_t) -1;],
+    jm_ac_cv_header_stdint_h=yes,
+    jm_ac_cv_header_stdint_h=no)])
+  if test $jm_ac_cv_header_stdint_h = yes; then
+    AC_DEFINE_UNQUOTED(HAVE_STDINT_H_WITH_UINTMAX, 1,
+      [Define if <stdint.h> exists, doesn't clash with <sys/types.h>,
+       and declares uintmax_t. ])
+  fi
+])
diff --git a/m4/uintmax_t.m4 b/m4/uintmax_t.m4
new file mode 100755 (executable)
index 0000000..b5f28d4
--- /dev/null
@@ -0,0 +1,32 @@
+# uintmax_t.m4 serial 7 (gettext-0.12)
+dnl Copyright (C) 1997-2003 Free Software Foundation, Inc.
+dnl This file is free software, distributed under the terms of the GNU
+dnl General Public License.  As a special exception to the GNU General
+dnl Public License, this file may be distributed as part of a program
+dnl that contains a configuration script generated by Autoconf, under
+dnl the same distribution terms as the rest of that program.
+
+dnl From Paul Eggert.
+
+AC_PREREQ(2.13)
+
+# Define uintmax_t to 'unsigned long' or 'unsigned long long'
+# if it is not already defined in <stdint.h> or <inttypes.h>.
+
+AC_DEFUN([jm_AC_TYPE_UINTMAX_T],
+[
+  AC_REQUIRE([jm_AC_HEADER_INTTYPES_H])
+  AC_REQUIRE([jm_AC_HEADER_STDINT_H])
+  if test $jm_ac_cv_header_inttypes_h = no && test $jm_ac_cv_header_stdint_h = no; then
+    AC_REQUIRE([jm_AC_TYPE_UNSIGNED_LONG_LONG])
+    test $ac_cv_type_unsigned_long_long = yes \
+      && ac_type='unsigned long long' \
+      || ac_type='unsigned long'
+    AC_DEFINE_UNQUOTED(uintmax_t, $ac_type,
+      [Define to unsigned long or unsigned long long
+       if <stdint.h> and <inttypes.h> don't define.])
+  else
+    AC_DEFINE(HAVE_UINTMAX_T, 1,
+      [Define if you have the 'uintmax_t' type in <stdint.h> or <inttypes.h>.])
+  fi
+])
diff --git a/m4/ulonglong.m4 b/m4/ulonglong.m4
new file mode 100755 (executable)
index 0000000..1da8b80
--- /dev/null
@@ -0,0 +1,25 @@
+# ulonglong.m4 serial 3
+dnl Copyright (C) 1999-2003 Free Software Foundation, Inc.
+dnl This file is free software, distributed under the terms of the GNU
+dnl General Public License.  As a special exception to the GNU General
+dnl Public License, this file may be distributed as part of a program
+dnl that contains a configuration script generated by Autoconf, under
+dnl the same distribution terms as the rest of that program.
+
+dnl From Paul Eggert.
+
+# Define HAVE_UNSIGNED_LONG_LONG if 'unsigned long long' works.
+
+AC_DEFUN([jm_AC_TYPE_UNSIGNED_LONG_LONG],
+[
+  AC_CACHE_CHECK([for unsigned long long], ac_cv_type_unsigned_long_long,
+  [AC_TRY_LINK([unsigned long long ull = 1ULL; int i = 63;],
+    [unsigned long long ullmax = (unsigned long long) -1;
+     return ull << i | ull >> i | ullmax / ull | ullmax % ull;],
+    ac_cv_type_unsigned_long_long=yes,
+    ac_cv_type_unsigned_long_long=no)])
+  if test $ac_cv_type_unsigned_long_long = yes; then
+    AC_DEFINE(HAVE_UNSIGNED_LONG_LONG, 1,
+      [Define if you have the 'unsigned long long' type.])
+  fi
+])
diff --git a/m4/wchar_t.m4 b/m4/wchar_t.m4
new file mode 100755 (executable)
index 0000000..d8fd1ec
--- /dev/null
@@ -0,0 +1,22 @@
+# wchar_t.m4 serial 1 (gettext-0.12)
+dnl Copyright (C) 2002-2003 Free Software Foundation, Inc.
+dnl This file is free software, distributed under the terms of the GNU
+dnl General Public License.  As a special exception to the GNU General
+dnl Public License, this file may be distributed as part of a program
+dnl that contains a configuration script generated by Autoconf, under
+dnl the same distribution terms as the rest of that program.
+
+dnl From Bruno Haible.
+dnl Test whether <stddef.h> has the 'wchar_t' type.
+dnl Prerequisite: AC_PROG_CC
+
+AC_DEFUN([gt_TYPE_WCHAR_T],
+[
+  AC_CACHE_CHECK([for wchar_t], gt_cv_c_wchar_t,
+    [AC_TRY_COMPILE([#include <stddef.h>
+       wchar_t foo = (wchar_t)'\0';], ,
+       gt_cv_c_wchar_t=yes, gt_cv_c_wchar_t=no)])
+  if test $gt_cv_c_wchar_t = yes; then
+    AC_DEFINE(HAVE_WCHAR_T, 1, [Define if you have the 'wchar_t' type.])
+  fi
+])
diff --git a/m4/wint_t.m4 b/m4/wint_t.m4
new file mode 100755 (executable)
index 0000000..3d8d215
--- /dev/null
@@ -0,0 +1,22 @@
+# wint_t.m4 serial 1 (gettext-0.12)
+dnl Copyright (C) 2003 Free Software Foundation, Inc.
+dnl This file is free software, distributed under the terms of the GNU
+dnl General Public License.  As a special exception to the GNU General
+dnl Public License, this file may be distributed as part of a program
+dnl that contains a configuration script generated by Autoconf, under
+dnl the same distribution terms as the rest of that program.
+
+dnl From Bruno Haible.
+dnl Test whether <wchar.h> has the 'wint_t' type.
+dnl Prerequisite: AC_PROG_CC
+
+AC_DEFUN([gt_TYPE_WINT_T],
+[
+  AC_CACHE_CHECK([for wint_t], gt_cv_c_wint_t,
+    [AC_TRY_COMPILE([#include <wchar.h>
+       wint_t foo = (wchar_t)'\0';], ,
+       gt_cv_c_wint_t=yes, gt_cv_c_wint_t=no)])
+  if test $gt_cv_c_wint_t = yes; then
+    AC_DEFINE(HAVE_WINT_T, 1, [Define if you have the 'wint_t' type.])
+  fi
+])
diff --git a/m4/xsize.m4 b/m4/xsize.m4
new file mode 100755 (executable)
index 0000000..9b7cf9b
--- /dev/null
@@ -0,0 +1,14 @@
+# xsize.m4 serial 2
+dnl Copyright (C) 2003 Free Software Foundation, Inc.
+dnl This file is free software, distributed under the terms of the GNU
+dnl General Public License.  As a special exception to the GNU General
+dnl Public License, this file may be distributed as part of a program
+dnl that contains a configuration script generated by Autoconf, under
+dnl the same distribution terms as the rest of that program.
+
+AC_DEFUN([gl_XSIZE],
+[
+  dnl Prerequisites of lib/xsize.h.
+  AC_REQUIRE([gl_SIZE_MAX])
+  AC_CHECK_HEADERS(stdint.h)
+])
diff --git a/mcf/gwes/efl/mcfevents-efl.cpp b/mcf/gwes/efl/mcfevents-efl.cpp
new file mode 100755 (executable)
index 0000000..db69c1a
--- /dev/null
@@ -0,0 +1,497 @@
+/*
+ * Copyright 2012  Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.tizenopensource.org/license
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+
+#include "mcfevents-efl.h"
+#include "mcfdebug.h"
+#include "mcfcontroller.h"
+#include "mcfgraphics.h"
+#include "mcfuibuilder.h"
+#include "mcferroradjustment.h"
+#include "mcfresource.h"
+#include "mcfresourcecache.h"
+
+#include <Elementary.h>
+#include <Ecore_X.h>
+
+using namespace mcf;
+
+mcfboolean bMousePressed = FALSE; /* Checks whether mouse is pressed or not */
+mcfboolean bSkipMouseEventsUntilPressed = FALSE; /*Explicitly filter out any mouse events until mouse press occurs */
+mcfwindow pressedWindow = MCFWINDOW_INVALID;
+
+#define MIN_XY_DIFF 14
+static mcfint sLatestXPos;
+static mcfint sLatestYPos;
+
+Eina_Bool mouse_press(void *data, int type, void *event_info);
+Eina_Bool mouse_move (void *data, int type, void *event_info);
+Eina_Bool mouse_release (void *data, int type, void *event_info);
+
+/**
+ * Constructor
+ */
+CMCFEventsImplEfl::CMCFEventsImplEfl()
+{
+    MCF_DEBUG();
+    /* Initializes all window resources */
+    mMouseDownHandler = ecore_event_handler_add(ECORE_EVENT_MOUSE_BUTTON_DOWN, mouse_press, NULL);
+    mMouseMoveHandler = ecore_event_handler_add(ECORE_EVENT_MOUSE_MOVE, mouse_move, NULL);
+    mMouseUpHandler = ecore_event_handler_add(ECORE_EVENT_MOUSE_BUTTON_UP, mouse_release, NULL);
+}
+
+/**
+ * De-constructor
+ */
+CMCFEventsImplEfl::~CMCFEventsImplEfl()
+{
+    MCF_DEBUG();
+
+    if(mMouseDownHandler) {
+       ecore_event_handler_del(mMouseDownHandler);
+    }
+    if(mMouseMoveHandler) {
+       ecore_event_handler_del(mMouseMoveHandler);
+    }
+    if(mMouseUpHandler) {
+       ecore_event_handler_del(mMouseUpHandler);
+    }
+}
+
+mcfboolean get_window_rect(const mcfwindow window, McfRectangle *rect)
+{
+    MCF_DEBUG();
+    mcfboolean bRet = FALSE;
+    CMCFUtils *utils = CMCFUtils::get_instance();
+    CMCFWindows *windows = CMCFWindows::get_instance();
+    CMCFContext *context = CMCFContext::get_instance();
+    if(windows && context && utils && rect) {
+        McfWindowContext *winctx = windows->get_window_context(window);
+        mcfint scr_w, scr_h;
+        /* get window size */
+        utils->get_screen_resolution(&scr_w, &scr_h);
+        if(winctx) {
+            rect->x = winctx->x;
+            rect->y = winctx->y;
+            rect->width = winctx->width;
+            rect->height = winctx->height;
+            bRet = TRUE;
+        } else {
+            rect->x = rect->y = rect->width = rect->height = 0;
+        }
+    }
+    return bRet;
+}
+
+/**  Here x and y contains "actual" x and y position relative to portrait root window,
+     and winctx->width,height contains the window's orientation dependant width and height */
+McfPoint get_rotated_local_coords(mcfint x, mcfint y, McfRectangle *rect)
+{
+    McfPoint ret = {0, 0};
+
+    if(rect) {
+           ret.x = x - rect->x;
+           ret.y = y - rect->y;
+    }
+    return ret;
+}
+
+Eina_Bool mouse_press(void *data, int type, void *event_info)
+{
+    MCF_DEBUG();
+
+    CMCFController *controller = CMCFController::get_instance();
+    CMCFWindows *windows = CMCFWindows::get_instance();
+    CMCFContext *context = CMCFContext::get_instance();
+
+    Ecore_Event_Mouse_Button *ev = (Ecore_Event_Mouse_Button*)event_info;
+
+    if(controller && windows && context && ev) {
+        mcfbyte index = 0;
+        mcfboolean processed = FALSE;
+        mcfwindow window = MCFWINDOW_INVALID;
+
+        mcfwindow evwin = (mcfwindow)(ev->window);
+        mcfboolean bMCFWindow = FALSE;
+        if(elm_win_xwindow_get(static_cast<Evas_Object*>(windows->get_base_window())) == ev->window) {
+            bMCFWindow = TRUE;
+        } else {
+            do {
+                window = windows->get_nth_window_in_Z_order_list(index);
+                McfWindowContext *winctx = windows->get_window_context(window);
+                if(winctx) {
+                    if(winctx->isVirtual) {
+                        bMCFWindow  = TRUE;
+                    } else if(elm_win_xwindow_get(static_cast<Evas_Object*>(window)) == ev->window) {
+                        bMCFWindow = TRUE;
+                    }
+                }
+                index++;
+            } while (index < MAX_ZORDER_NUM && window != MCFWINDOW_INVALID);
+            index = 0;
+        }
+        if(!bMCFWindow) return TRUE;
+
+        McfRectangle rect = {0};
+        do {
+            window = windows->get_nth_window_in_Z_order_list(index);
+            if(window) {
+                // Update the position of the target window
+                windows->get_window_context(window, TRUE);
+                if(get_window_rect(window, &rect)) {
+                    int adjustx = ev->root.x;
+                    int adjusty = ev->root.y;
+
+                    MCFDisplay currDisplay = context->get_display();
+                    CMCFErrorAdjustment *adjustment = CMCFErrorAdjustment::get_instance();
+                    if(adjustment && mcf_check_arrindex(currDisplay, MCFDISPLAY_MAX)) {
+                        adjustment->apply_touch_offset(mcf_default_configure.touchOffsetLevel[currDisplay],
+                                                              &adjustx, &adjusty);
+                    }
+
+                    mcfint winwidth = rect.width;
+                    mcfint winheight = rect.height;
+                    if(context->get_display() != MCFDISPLAY_PORTRAIT) {
+                        rect.height = winwidth;
+                        rect.width = winheight;
+                    }
+
+                    mcfboolean processEvt = FALSE;
+                    if ((adjustx >= rect.x && adjustx <= (rect.x + winwidth)) &&
+                        (adjusty >= rect.y && adjusty <= (rect.y + winheight))) {
+                            processEvt = TRUE;
+                    }
+                    if(processEvt)
+                    {
+                        // Now convert the global coordination to appropriate local coordination
+                        McfPoint coords = get_rotated_local_coords(ev->root.x, ev->root.y, &rect);
+                        controller->mouse_press(window, coords.x, coords.y, ev->multi.device);
+                        bMousePressed = TRUE;
+                        processed = TRUE;
+                        pressedWindow = window;
+                    }
+                }
+            }
+
+            index++;
+        } while (index < MAX_ZORDER_NUM && window != MCFWINDOW_INVALID && !processed);
+
+        if (!processed) {
+            window = pressedWindow;
+            if(get_window_rect(window, &rect)) {
+                // Now convert the global coordination to appropriate local coordination
+                McfPoint coords = get_rotated_local_coords(ev->root.x, ev->root.y, &rect);
+                controller->mouse_press(window, coords.x, coords.y, ev->multi.device);
+                bMousePressed = TRUE;
+                processed = TRUE;
+            }
+        }
+    }
+
+    return TRUE;
+}
+
+Eina_Bool mouse_release (void *data, int type, void *event_info)
+{
+    MCF_DEBUG();
+
+    CMCFController *controller = CMCFController::get_instance();
+    CMCFWindows *windows = CMCFWindows::get_instance();
+    CMCFContext *context = CMCFContext::get_instance();
+
+    Ecore_Event_Mouse_Button *ev = (Ecore_Event_Mouse_Button*)event_info;
+
+    if(controller && windows && context && ev) {
+        mcfbyte index = 0;
+        mcfboolean processed = FALSE;
+        mcfwindow window = MCFWINDOW_INVALID;
+        McfRectangle rect;
+        mcfboolean dimwinevent = FALSE;
+        McfWindowContext *dimctx = windows->get_window_context(windows->get_dim_window());
+        if(dimctx) {
+            if(!(dimctx->isVirtual)) {
+        if(elm_win_xwindow_get(static_cast<Evas_Object*>(windows->get_dim_window())) == ev->window) {
+                    dimwinevent = TRUE;
+                }
+            }
+        }
+        if(dimwinevent) {
+            controller->mouse_press(windows->get_dim_window(), ev->root.x, ev->root.y, ev->multi.device);
+        } else {
+            do {
+                window = windows->get_nth_window_in_Z_order_list(index);
+                if(window) {
+                    if(get_window_rect(window, &rect)) {
+                        int adjustx = ev->root.x;
+                        int adjusty = ev->root.y;
+                        MCFDisplay currDisplay = context->get_display();
+                        CMCFErrorAdjustment *adjustment = CMCFErrorAdjustment::get_instance();
+                        if(adjustment && mcf_check_arrindex(currDisplay, MCFDISPLAY_MAX)) {
+                            adjustment->apply_touch_offset(mcf_default_configure.touchOffsetLevel[currDisplay],
+                                                              &adjustx, &adjusty);
+                        }
+
+                        mcfint winwidth = rect.width;
+                        mcfint winheight = rect.height;
+                        if(context->get_display() != MCFDISPLAY_PORTRAIT) {
+                            rect.height = winwidth;
+                            rect.width = winheight;
+                        }
+
+                        mcfboolean processEvt = FALSE;
+                        if ((adjustx >= rect.x && adjustx <= (rect.x + winwidth)) &&
+                            (adjusty >= rect.y && adjusty <= (rect.y + winheight))) {
+                                processEvt = TRUE;
+                        }
+                        if(processEvt)
+                        {
+                            /* Now convert the global coordination to appropriate local coordination */
+                            McfPoint coords = get_rotated_local_coords(ev->root.x, ev->root.y, &rect);
+                            controller->mouse_release(window, coords.x, coords.y, ev->multi.device);
+                            processed = TRUE;
+                        }
+                    }
+                }
+
+                index++;
+            } while (index < MAX_ZORDER_NUM && window != MCFWINDOW_INVALID && !processed);
+        }
+
+        if (!processed) {
+            window = pressedWindow;
+            if(get_window_rect(window, &rect)) {
+                /* Now convert the global coordination to appropriate local coordination */
+                McfPoint coords = get_rotated_local_coords(ev->root.x, ev->root.y, &rect);
+                controller->mouse_release(window, coords.x, coords.y, ev->multi.device);
+                processed = TRUE;
+            }
+        }
+
+        bMousePressed = FALSE;
+    }
+
+    return TRUE;
+}
+
+Eina_Bool mouse_move (void *data, int type, void *event_info)
+{
+    MCF_DEBUG();
+
+    CMCFController *controller = CMCFController::get_instance();
+    CMCFWindows *windows = CMCFWindows::get_instance();
+    CMCFContext *context = CMCFContext::get_instance();
+    CMCFResourceCache *cache = CMCFResourceCache::get_instance();
+
+    Ecore_Event_Mouse_Move *ev = (Ecore_Event_Mouse_Move*)event_info;
+
+
+    if(controller && windows && context && cache && ev) {
+        mcfbyte index = 0;
+        mcfboolean processed = FALSE;
+        mcfwindow window = MCFWINDOW_INVALID;
+        McfRectangle rect;
+
+        if(context->get_cur_pressed_window(ev->multi.device) != MCFWINDOW_INVALID &&
+           get_window_rect(context->get_cur_pressed_window(ev->multi.device), &rect)) {
+            mcfint winwidth = rect.width;
+            mcfint winheight = rect.height;
+            if(context->get_display() != MCFDISPLAY_PORTRAIT) {
+                rect.height = winwidth;
+                rect.width = winheight;
+            }
+            McfPoint coords = get_rotated_local_coords(ev->root.x, ev->root.y, &rect);
+
+            controller->mouse_move(context->get_cur_pressed_window(ev->multi.device), coords.x, coords.y, ev->multi.device);
+            processed = TRUE;
+        } else {
+            do {
+                window = windows->get_nth_window_in_Z_order_list(index);
+                if(window) {
+                    if(get_window_rect(window, &rect)) {
+                        int adjustx = ev->root.x;
+                        int adjusty = ev->root.y;
+                        MCFDisplay currDisplay = context->get_display();
+                        CMCFErrorAdjustment *adjustment = CMCFErrorAdjustment::get_instance();
+                        if(adjustment && mcf_check_arrindex(currDisplay, MCFDISPLAY_MAX)) {
+                            adjustment->apply_touch_offset(mcf_default_configure.touchOffsetLevel[currDisplay],
+                                                              &adjustx, &adjusty);
+                        }
+
+                        mcfint winwidth = rect.width;
+                        mcfint winheight = rect.height;
+                        if(context->get_display() != MCFDISPLAY_PORTRAIT) {
+                            rect.height = winwidth;
+                            rect.width = winheight;
+                        }
+
+                        mcfboolean processEvt = FALSE;
+                        if ((adjustx >= rect.x && adjustx <= (rect.x + winwidth)) &&
+                            (adjusty >= rect.y && adjusty <= (rect.y + winheight))) {
+                                processEvt = TRUE;
+                        }
+                        /* Process this event regardless of the coordination if the top window has the POPUP_GRAB layout style */
+                        if(index == MCF_WINDOW_Z_TOP) {
+                            const McfLayout *layout = cache->get_cur_layout(window);
+                            if(layout) {
+                                if(layout->style == LAYOUT_STYLE_POPUP_GRAB) {
+                                    processEvt = TRUE;
+                                }
+                            }
+                        }
+                        if(processEvt)
+                        {
+                            /* Now convert the global coordination to appropriate local coordination */
+                            McfPoint coords = get_rotated_local_coords(ev->root.x, ev->root.y, &rect);
+
+                            controller->mouse_move(window, coords.x, coords.y, ev->multi.device);
+                            processed = TRUE;
+                        }
+
+                        index++;
+                    }
+                }
+            } while (index < MAX_ZORDER_NUM && window != MCFWINDOW_INVALID && !processed);
+        }
+
+        if (!processed) {
+            window = pressedWindow;
+            if(get_window_rect(window, &rect)) {
+                /* Now convert the global coordination to appropriate local coordination */
+                McfPoint coords = get_rotated_local_coords(ev->root.x, ev->root.y, &rect);
+                controller->mouse_move(window, coords.x, coords.y, ev->multi.device);
+                processed = TRUE;
+            }
+        }
+    }
+    return TRUE;
+}
+
+/**
+ * Regists a event callback func to given window.
+ * In this function, it should call serveral event functions of CMCFController class whenever an event has occured
+ * The below list shows what event function should be called.
+ * - mouse_press (when the user presses mouse button)
+ * - mouse_release (when the user releases mouse button)
+ * - mouse_move (when the user drags mouse button)
+ * - show_base_layout (when the expost event has occured)
+ */
+void
+CMCFEventsImplEfl::connect_window_events(const mcfwindow wnd, const mcfint evt)
+{
+    MCF_DEBUG();
+
+}
+
+Eina_Bool timer_event(void *data)
+{
+    MCF_DEBUG();
+    mcf32 sendData = (mcf32)data;
+    CMCFController *controller;
+    controller = CMCFController::get_instance();
+    if (controller) {
+        return controller->timer_event(sendData);
+    }
+    return TRUE;
+}
+
+/**
+ * Creates a timer
+ * In this function, it should call timer_event of CMCFController class
+ */
+void
+CMCFEventsImplEfl::create_timer(const mcf16 id, const mcf32 interval, mcf16 value, mcfboolean addToMap)
+{
+    MCF_DEBUG();
+    mcfint data = MCF_MAKELONG(id, value);
+    Ecore_Timer *pTimer = ecore_timer_add((double)interval / 1000.0, timer_event, (void*)data);
+    if (pTimer) {
+        if (addToMap) {
+            idMap[id] = pTimer;
+        }
+    }
+}
+
+/**
+ * Destroys the given ID's timer
+ */
+void
+CMCFEventsImplEfl::destroy_timer(const mcf32 id)
+{
+    MCF_DEBUG();
+        std::map<int, Ecore_Timer*>::iterator idx = idMap.find(id);
+        if(idx != idMap.end()) {
+            ecore_timer_del((*idx).second);
+            idMap.erase((*idx).first);
+        }
+}
+
+/**
+ * Destroys all of created timer
+ */
+void
+CMCFEventsImplEfl::destroy_all_timer()
+{
+    MCF_DEBUG();
+    for ( std::map<int, Ecore_Timer*>::iterator idx = idMap.begin(); idx != idMap.end(); ++idx) {
+        ecore_timer_del((*idx).second);
+    }
+    idMap.clear();
+}
+
+void
+CMCFEventsImplEfl::generate_mouse_event(MCFMouseEvent type, mcf16 x, mcf16 y)
+{
+    CMCFWindows *windows = CMCFWindows::get_instance();
+    McfWindowContext *winctx = NULL;
+    if(windows) {
+        switch(type) {
+            case MCF_MOUSE_EVENT_PRESS: {
+                Ecore_Event_Mouse_Button evt;
+                evt.window = elm_win_xwindow_get(static_cast<Evas_Object*>(windows->get_base_window()));
+                winctx = windows->get_window_context(windows->get_base_window(), FALSE);
+                if(winctx) {
+                    evt.root.x = x + winctx->x;
+                    evt.root.y = y + winctx->y;
+                    mouse_press(NULL, 0, &evt);
+                }
+            }
+            break;
+            case MCF_MOUSE_EVENT_RELEASE: {
+                Ecore_Event_Mouse_Button evt;
+                evt.window = elm_win_xwindow_get(static_cast<Evas_Object*>(windows->get_base_window()));
+                winctx = windows->get_window_context(windows->get_base_window(), FALSE);
+                if(winctx) {
+                    evt.root.x = x + winctx->x;
+                    evt.root.y = y + winctx->y;
+                    mouse_release(NULL, 0, &evt);
+                }
+            }
+            break;
+            case MCF_MOUSE_EVENT_MOVE: {
+                Ecore_Event_Mouse_Move evt;
+                evt.window = elm_win_xwindow_get(static_cast<Evas_Object*>(windows->get_base_window()));
+                winctx = windows->get_window_context(windows->get_base_window(), FALSE);
+                if(winctx) {
+                    evt.root.x = x + winctx->x;
+                    evt.root.y = y + winctx->y;
+                    mouse_move(NULL, 0, &evt);
+                }
+            }
+            break;
+        }
+    }
+}
diff --git a/mcf/gwes/efl/mcfevents-efl.h b/mcf/gwes/efl/mcfevents-efl.h
new file mode 100755 (executable)
index 0000000..16a75e0
--- /dev/null
@@ -0,0 +1,52 @@
+/*
+ * Copyright 2012  Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.tizenopensource.org/license
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+
+#include "mcfevents.h"
+#include <Ecore_Evas.h>
+#include <Ecore.h>
+#include <map>
+
+
+#ifndef __MCF_EVENTS_EFL_H__
+#define __MCF_EVENTS_EFL_H__
+
+namespace mcf
+{
+class CMCFEventsImplEfl : public CMCFEventsImpl
+{
+public :
+    CMCFEventsImplEfl();
+    ~CMCFEventsImplEfl();
+
+    /* Implementation about interface functions */
+    void connect_window_events(const mcfwindow wnd, const mcfint evt);
+    void create_timer(const mcf16 id, const mcf32 interval, mcf16 value, mcfboolean addToMap);
+    void destroy_timer(const mcf32 id);
+    void destroy_all_timer();
+
+    void generate_mouse_event(MCFMouseEvent type, mcf16 x, mcf16 y);
+
+private:
+    std::map<int, Ecore_Timer*> idMap;
+
+    Ecore_Event_Handler *mMouseDownHandler;
+    Ecore_Event_Handler *mMouseMoveHandler;
+    Ecore_Event_Handler *mMouseUpHandler;
+};
+} /* End of mcf namespace */
+#endif
diff --git a/mcf/gwes/efl/mcfgraphics-efl.cpp b/mcf/gwes/efl/mcfgraphics-efl.cpp
new file mode 100755 (executable)
index 0000000..8a3769d
--- /dev/null
@@ -0,0 +1,719 @@
+/*
+ * Copyright 2012  Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.tizenopensource.org/license
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+
+#include "mcfgraphics-efl.h"
+#include "mcfimageproxy.h"
+#include "mcffontproxy.h"
+#include "mcfdebug.h"
+#include "mcfwindows.h"
+#include "mcfresourcecache.h"
+#include "mcfwindows-efl.h"
+#include "mcfutils.h"
+#include "mcfcontext.h"
+#include <Ecore_Evas.h>
+#include <Ecore.h>
+#include <Elementary.h>
+#include <vector>
+
+#ifdef TEST_NEWBACKEND
+std::vector<ImageCache> g_ImageCache;
+std::vector<TextCache> g_TextCache;
+mcfint hash_string(const mcfchar* str) {
+    mcfint ret = 0;
+    mcfint len = strlen(str);
+    for(mcfint loop = 0;loop < len && str[loop];loop++) {
+        ret = ((loop + 1) * str[loop]);
+    }
+
+    return ret;
+}
+#else
+#endif
+using namespace mcf;
+
+int iNumCreate = 0;
+
+extern void mouse_press (void *data, Evas *e, Evas_Object *obj, void *event_info);
+extern void mouse_release (void *data, Evas *e, Evas_Object *obj, void *event_info);
+extern void mouse_move (void *data, Evas *e, Evas_Object *obj, void *event_info);
+
+/**
+ * Constructor
+ */
+CMCFGraphicsImplEfl::CMCFGraphicsImplEfl()
+{
+    MCF_DEBUG();
+    /* Initializes all window resources */
+}
+
+/**
+ * De-constructor
+ */
+CMCFGraphicsImplEfl::~CMCFGraphicsImplEfl()
+{
+    MCF_DEBUG();
+}
+
+Evas_Object* extract_partimage_from_fullimage(Evas_Object* fullimage,
+                                              int img_x,int img_y,
+                                              int cell_x,int cell_y,
+                                              int cell_cx, int cell_cy)
+{
+    unsigned int *data;
+    unsigned int *t_data;
+    int i,j;
+    int w,h;
+    Evas_Object *image_ob;
+
+    evas_object_image_size_get(fullimage, &w, &h);
+
+    data = (unsigned int*)evas_object_image_data_get(fullimage,0);
+    if (data == NULL) {
+        return NULL;
+    }
+
+    t_data=(unsigned int*)malloc(sizeof(unsigned int)*cell_cx*cell_cy);
+    if (t_data == NULL) {
+        free(data);
+        return NULL;
+    }
+
+    for (i=img_y; i<img_y+cell_cy; i++) {
+        for (j=img_x; j<img_x+cell_cx; j++) {
+            t_data[(i-img_y)*cell_cx+(j-img_x)] = data[i*w+j];
+        }
+    }
+
+    image_ob = evas_object_image_add(evas_object_evas_get(fullimage));
+    if (image_ob == NULL) {
+        free(data);
+        free(t_data);
+        return NULL;
+    }
+    evas_object_image_size_set(image_ob,cell_cx,cell_cy);
+    evas_object_image_data_set(image_ob,t_data);
+    evas_object_image_fill_set(image_ob,0,0,cell_cx,cell_cy);
+    evas_object_resize(image_ob,cell_cx,cell_cy);
+
+    evas_object_show(image_ob);
+    //Changed for Memory Leak
+    free(t_data);
+    return image_ob;
+}
+
+void
+CMCFGraphicsImplEfl::draw_image(mcfwindow window, const mcfdrawctx drawCtx, mcfchar* imgPath,
+                                mcfint destX, mcfint destY, mcfint destWidth, mcfint destHeight,
+                                mcfint srcX, mcfint srcY, mcfint srcWidth, mcfint srcHeight, mcfboolean extractImg)
+{
+    MCF_DEBUG();
+
+    mcf_assert_return(imgPath);
+
+    CMCFResourceCache *cache = CMCFResourceCache::get_instance();
+    CMCFWindows *windows = CMCFWindows::get_instance();
+    CMCFUtils *utils = CMCFUtils::get_instance();
+    McfWindowContext *winctx = NULL;
+    McfWindowContext *targetctx = NULL;
+    if(windows) {
+        winctx = windows->get_window_context(window, FALSE);
+        targetctx = windows->get_window_context(drawCtx, FALSE);
+    }
+
+    if (winctx && targetctx && imgPath && utils && cache && windows) {
+        if (strlen(imgPath) > 0) {
+#ifdef TEST_NEWBACKEND
+            mcfboolean bFound = FALSE;
+            mcfboolean bOrgSizeMinusOne = (srcWidth == -1 && srcHeight == -1);
+            mcfint hashval = hash_string(imgPath);
+            for(mcfint loop = 0;loop < g_ImageCache.size() && !bFound;loop++) {
+                if(g_ImageCache[loop].used &&
+                   window == g_ImageCache[loop].window &&
+                   hashval == g_ImageCache[loop].imgPathHash &&
+                   destX == g_ImageCache[loop].destX &&
+                   destY == g_ImageCache[loop].destY &&
+                   destWidth == g_ImageCache[loop].destWidth &&
+                   destHeight == g_ImageCache[loop].destHeight &&
+                   srcX == g_ImageCache[loop].srcX &&
+                   srcY == g_ImageCache[loop].srcY &&
+                   srcWidth == g_ImageCache[loop].srcWidth &&
+                   srcHeight == g_ImageCache[loop].srcHeight &&
+                   extractImg == g_ImageCache[loop].extractImg) {
+                        if(strcmp(imgPath, g_ImageCache[loop].imgPath) == 0) {
+                            bFound = TRUE;
+                            evas_object_show(g_ImageCache[loop].image);
+                            evas_object_raise(g_ImageCache[loop].image);
+                            if(g_ImageCache[loop].clipper) {
+                                evas_object_show(g_ImageCache[loop].clipper);
+                                evas_object_raise(g_ImageCache[loop].clipper);
+                            }
+                        }
+                    }
+            }
+            if(!bFound) {
+#endif
+            EFLObject *obj = new EFLObject;
+            EFLObject *clipobj = NULL;
+            if (obj) {
+                Evas_Object *winobj = (Evas_Object*)window;
+
+                Evas *evas = evas_object_evas_get(winobj);
+                Evas_Object *imgobj = evas_object_image_add(evas);
+
+                obj->bExtracted = FALSE;
+
+                if (imgobj) {
+                    int imgWidth = 0;
+                    int imgHeight = 0;
+                    evas_object_image_file_set(imgobj, imgPath, NULL);
+                    evas_object_image_size_get(imgobj, &imgWidth, &imgHeight);
+                    const McfNinePatchInfo *nine_patch_info = utils->get_nine_patch_info(imgPath);
+                    if(nine_patch_info) {
+                        evas_object_image_border_set(imgobj,
+                                                     nine_patch_info->left, nine_patch_info->right,
+                                                     nine_patch_info->top, nine_patch_info->bottom);
+                    }
+                    const McfLayout *layout = cache->get_cur_layout(window);
+                    if(layout) {
+                        if(layout->displayType == MCFDISPLAY_PORTRAIT) {
+                            imgWidth = utils->get_scale_x(imgWidth);
+                            imgHeight = utils->get_scale_y(imgHeight);
+                        } else {
+                            imgWidth = utils->get_scale_y(imgWidth);
+                            imgHeight = utils->get_scale_x(imgHeight);
+                        }
+                    }
+                    if(srcWidth == -1 && srcHeight == -1) {
+                        srcWidth = imgWidth;
+                        srcHeight = imgHeight;
+                    }
+                    if((srcWidth > 0 && srcHeight > 0) && (imgWidth != destWidth || imgHeight != destHeight) && extractImg) {
+#ifdef EXTRACT_PARTIMAGE
+                        Evas_Object *newobj = extract_partimage_from_fullimage(imgobj, srcX, srcY, 0, 0, srcWidth, srcHeight);
+                        obj->bExtracted = TRUE;
+                        evas_object_del(imgobj);
+                        imgobj = newobj;
+                        evas_object_move(imgobj, destX, destY);
+                        if (destWidth > 0 && destHeight > 0) {
+                            evas_object_image_fill_set(imgobj, 0, 0, destWidth,destHeight);
+                            evas_object_resize(imgobj, destWidth, destHeight);
+                        }
+#else
+                        evas_object_move(imgobj, destX - srcX, destY - srcY);
+                        evas_object_image_fill_set(imgobj, 0, 0, imgWidth, imgHeight);
+                        if(extractImg) {
+                            evas_object_resize(imgobj, imgWidth, imgHeight);
+                        } else {
+                            evas_object_resize(imgobj, destWidth, destHeight);
+                        }
+
+                        Evas_Object *clipper = evas_object_rectangle_add(evas);
+                        evas_object_color_set(clipper, 255, 255, 255, 255);
+                        evas_object_move(clipper, destX, destY);
+                        evas_object_resize(clipper, destWidth, destHeight);
+                        evas_object_clip_set(imgobj, clipper);
+                        evas_object_show(clipper);
+
+                        clipobj = new EFLObject;
+                        clipobj->obj = clipper;
+                        clipobj->type = EFLOBJECT_CLIPOBJECT;
+                        clipobj->position.x = destX;
+                        clipobj->position.y = destY;
+                        clipobj->position.width = destWidth;
+                        clipobj->position.height = destHeight;
+                        clipobj->etcInfo = imgPath;
+                        clipobj->bExtracted = FALSE;
+                        clipobj->data = NULL;
+
+                        if(winctx->isVirtual) {
+                            McfWindowContext *basectx = windows->get_window_context(windows->get_base_window());
+                            if(basectx) {
+                                clipobj->position.x -= (winctx->x - basectx->x);
+                                clipobj->position.y -= (winctx->y - basectx->y);
+                            }
+                        }
+#endif
+                    } else {
+                        evas_object_move(imgobj, destX, destY);
+                        if (destWidth > 0 && destHeight > 0) {
+                            evas_object_image_fill_set(imgobj, 0, 0, destWidth,destHeight);
+                            evas_object_resize(imgobj, destWidth, destHeight);
+                        }
+                    }
+                    evas_object_raise(imgobj);
+                    evas_object_show(imgobj);
+
+                    obj->obj = imgobj;
+                    obj->type = EFLOBJECT_IMAGE;
+                    obj->position.x = destX;
+                    obj->position.y = destY;
+                    obj->position.width = destWidth;
+                    obj->position.height = destHeight;
+                    obj->etcInfo = imgPath;
+                    obj->data = NULL;
+
+                    if(winctx->isVirtual) {
+                        McfWindowContext *basectx = windows->get_window_context(windows->get_base_window());
+                        if(basectx) {
+                            obj->position.x -= (winctx->x - basectx->x);
+                            obj->position.y -= (winctx->y - basectx->y);
+                        }
+                    }
+
+                    targetctx->etcInfoPtr = eina_list_append((Eina_List*)(targetctx->etcInfoPtr), obj);
+                    if(clipobj) {
+                        targetctx->etcInfoPtr = eina_list_append((Eina_List*)(targetctx->etcInfoPtr), clipobj);
+                    }
+
+                    /* FIXME : this is for placing the background image at the lowest depth */
+                    mcfint window_layer = 29000;
+                    if(!windows->is_base_window(reinterpret_cast<mcfwindow>(drawCtx))) {
+                        window_layer = 29010;
+                    }
+
+                    if(winctx->width == destWidth && winctx->height == destHeight) {
+                        evas_object_layer_set(imgobj, window_layer + 0);
+                    } else {
+                        evas_object_layer_set(imgobj, window_layer + 1);
+                    }
+                }
+            }
+#ifdef TEST_NEWBACKEND
+                ImageCache cache;
+                cache.used = true;
+                cache.window = window;
+                strncpy(cache.imgPath, imgPath, sizeof(cache.imgPath));
+                cache.imgPathHash = hashval;
+                cache.destX = destX;
+                cache.destY = destY;
+                cache.destWidth = destWidth;
+                cache.destHeight = destHeight;
+                cache.srcX = srcX;
+                cache.srcY = srcY;
+                if(bOrgSizeMinusOne) {
+                    cache.srcWidth = -1;
+                    cache.srcHeight = -1;
+                } else {
+                    cache.srcWidth = srcWidth;
+                    cache.srcHeight = srcHeight;
+                }
+                cache.extractImg= extractImg;
+                cache.image = obj->obj;
+                if(clipobj) {
+                    cache.clipper = clipobj->obj;
+                } else {
+                    cache.clipper = NULL;
+                }
+
+                mcfboolean bInserted = FALSE;
+                for(mcfint loop = 0;loop < g_ImageCache.size() && !bInserted;loop++) {
+                    if(!g_ImageCache[loop].used) {
+                        g_ImageCache[loop] = cache;
+                    }
+                }
+                if(!bInserted) {
+                    g_ImageCache.push_back(cache);
+                }
+            }
+#endif
+        }
+    }
+}
+
+mcfimage
+CMCFGraphicsImplEfl::load_image(const mcfchar *imgPath)
+{
+    MCF_DEBUG();
+    return NULL;
+}
+
+void
+CMCFGraphicsImplEfl::unload_image(mcfimage imgData)
+{
+    MCF_DEBUG();
+}
+
+/**
+ * Initializes the drawing context for double-buffering.
+ * This func should be called before using a drawing primitive at first.
+ */
+mcfdrawctx
+CMCFGraphicsImplEfl::begin_paint(const mcfwindow window, const mcfboolean forcedraw /* = FALSE */)
+{
+    MCF_DEBUG();
+    mcfdrawctx drawctx = reinterpret_cast<mcfdrawctx>(window);
+
+    return drawctx;
+}
+
+/**
+ * Notices that drawing tasks have done.
+ */
+void
+CMCFGraphicsImplEfl::end_paint(const mcfwindow window, mcfdrawctx drawCtx)
+{
+
+}
+
+mcffont
+CMCFGraphicsImplEfl::create_font(const McfFontInfo& info)
+{
+    return NULL;
+}
+
+void
+CMCFGraphicsImplEfl::destroy_font(mcffont font)
+{
+}
+
+
+typedef struct {
+    const char *szString;
+    const float actual_width;
+} HARDCODED_WIDTH;
+HARDCODED_WIDTH hardcoded_width[] = {
+    {"\xe3\x85\x82" , 0.59 }, // q
+    {"\xe3\x85\x83" , 0.59 }, // Q
+    {"\xe3\x85\x88" , 0.59 }, // w
+    {"\xe3\x85\x89" , 0.59 }, // W
+    {"\xe3\x84\xb7" , 0.59 }, // e
+    {"\xe3\x84\xb8" , 0.59 }, // E
+    {"\xe3\x84\xb1" , 0.59 }, // r
+    {"\xe3\x84\xb2" , 0.59 }, // R
+    {"\xe3\x85\x85" , 0.59 }, // t
+    {"\xe3\x85\x86" , 0.59 }, // T
+    {"\xe3\x85\x9b" , 0.72 }, // y
+    {"\xe3\x85\x95" , 0.40 }, // u
+    {"\xe3\x85\x91" , 0.40 }, // i
+    {"\xe3\x85\x90" , 0.50 }, // o
+    {"\xe3\x85\x92" , 0.55 }, // O
+    {"\xe3\x85\x94" , 0.59 }, // p
+    {"\xe3\x85\x96" , 0.59 }, // P
+    {"\xe3\x85\x81" , 0.59 }, // a
+    {"\xe3\x84\xb4" , 0.59 }, // s
+    {"\xe3\x85\x87" , 0.59 }, // d
+    {"\xe3\x84\xb9" , 0.59 }, // f
+    {"\xe3\x85\x8e" , 0.59 }, // g
+    {"\xe3\x85\x97" , 0.72 }, // h
+    {"\xe3\x85\x93" , 0.40 }, // j
+    {"\xe3\x85\x8f" , 0.40 }, // k
+    {"\xe3\x85\xa3" , 0.30 }, // l
+    {"\xe3\x85\x8b" , 0.59 }, // z
+    {"\xe3\x85\x8c" , 0.59 }, // x
+    {"\xe3\x85\x8a" , 0.59 }, // c
+    {"\xe3\x85\x8d" , 0.59 }, // v
+    {"\xe3\x85\xa0" , 0.72 }, // b
+    {"\xe3\x85\x9c" , 0.72 }, // n
+    {"\xe3\x85\xa1" , 0.75 }, // m
+
+    {"\xe3\x85\xa3" , 0.30 }, // ��
+    {"\xe3\x86\x8d" , 0.30 }, // .
+    {"\xe3\x85\xa1" , 0.75 }, // ��
+    {"\xe3\x84\xb1\xe3\x85\x8b" , 1.18 }, // ����
+    {"\xe3\x84\xb4\xe3\x84\xb9" , 1.18 }, // ����
+    {"\xe3\x84\xb7\xe3\x85\x8c" , 1.18 }, // ����
+    {"\xe3\x85\x82\xe3\x85\x8d" , 1.18 }, // ����
+    {"\xe3\x85\x85\xe3\x85\x8e" , 1.18 }, // ����
+    {"\xe3\x85\x88\xe3\x85\x8a" , 1.18 }, // ����
+    {"\xe3\x85\x87\xe3\x85\x81" , 1.18 }, // ����
+    {"\xe3\x85\x87\xe3\x85\x81" , 1.18 }, // ����
+    {"\xe3\x84\xb1\xe3\x84\xb4" , 1.38 }, // ����
+    {"\xe1\x84\x88" , 0.59 }, // ��
+    {"\xe1\x84\x8d" , 0.59 }, // ��
+    {"\xe1\x84\x84" , 0.59 }, // ��
+    {"\xe1\x84\x81" , 0.59 }, // ��
+    {"\xe1\x84\x8a" , 0.59 }, // ��
+
+    {"\xe2\x86\x90" , 0.50 }, // Arrows
+    {"\xe2\x86\x91" , 0.40 }, //
+    {"\xe2\x86\x92" , 0.55 }, //
+    {"\xe2\x86\x93" , 0.40 }, //
+
+       {"\xe3\x85\xa0" , 0.1 }, // ��
+       {"\341\205\262" , 0.9 }, // ��
+};
+
+int find_hardcoded_width(const char *szString, int fontsize) {
+    for(unsigned int loop = 0;loop < sizeof(hardcoded_width) / sizeof(HARDCODED_WIDTH);loop++) {
+        if(strcmp(szString, hardcoded_width[loop].szString) == 0) {
+            return hardcoded_width[loop].actual_width * fontsize;
+        }
+    }
+    return 0;
+}
+
+/**
+ * Draws the given text on cairo-surface
+ */
+void
+CMCFGraphicsImplEfl::draw_text(mcfwindow window, const mcfdrawctx drawCtx, const McfFontInfo& fontinfo, const McfColor& color,
+                               const mcfchar *str, mcfint posx, mcfint posy, mcfint width, mcfint height,
+                               MCFLabelAlignment align, mcfbyte paddingx, mcfbyte paddingy)
+{
+    MCF_DEBUG();
+
+    CMCFWindows *windows = CMCFWindows::get_instance();
+    McfWindowContext *winctx = NULL;
+    McfWindowContext *targetctx = NULL;
+
+    if (windows) {
+        winctx = windows->get_window_context(window, FALSE);
+        targetctx = windows->get_window_context(drawCtx, FALSE);
+    }
+
+    if (winctx && targetctx && str && windows) {
+        if (strlen(str) > 0) {
+#ifdef TEST_NEWBACKEND
+            mcfboolean bFound = FALSE;
+            mcfint hashval = hash_string(str);
+            mcfint org_posx = posx;
+            mcfint org_posy = posy;
+            for(mcfint loop = 0;loop < g_TextCache.size() && !bFound;loop++) {
+                    if(g_TextCache[loop].used &&
+                       window == g_TextCache[loop].window &&
+                       strncmp(fontinfo.fontname, g_TextCache[loop].fontinfo.fontname, MAX_FONT_NAME_LEN) == 0 &&
+                       fontinfo.fontsize == g_TextCache[loop].fontinfo.fontsize &&
+                       fontinfo.isBold == g_TextCache[loop].fontinfo.isBold &&
+                       fontinfo.isItalic == g_TextCache[loop].fontinfo.isItalic &&
+                       memcmp(&color, &(g_TextCache[loop].color), sizeof(McfColor)) == 0 &&
+                       hashval == g_TextCache[loop].strHash &&
+                       posx == g_TextCache[loop].posx&&
+                       posy == g_TextCache[loop].posy &&
+                       width == g_TextCache[loop].width &&
+                       height == g_TextCache[loop].height &&
+                       align == g_TextCache[loop].align &&
+                       paddingx == g_TextCache[loop].paddingx &&
+                       paddingy == g_TextCache[loop].paddingy) {
+                        if(strcmp(str, g_TextCache[loop].str) == 0) {
+                            bFound = TRUE;
+                            evas_object_show(g_TextCache[loop].text);
+                            evas_object_raise(g_TextCache[loop].text);
+                        }
+                    }
+            }
+            if(!bFound) {
+#endif
+            EFLObject *obj = new EFLObject;
+            if (obj) {
+                Evas_Object *winobj = (Evas_Object*)window;
+                Evas *evas = evas_object_evas_get(winobj);
+                Evas_Object *txtobj = evas_object_textblock_add(evas);
+
+                if (txtobj) {
+                    mcfchar strStyle[128];
+                    sprintf(strStyle, "DEFAULT='font=%s font_size=%d align=%s color=#%02X%02X%02X%02X wrap=word left_margin=%d right_margin=%d'",
+                            fontinfo.fontname, fontinfo.fontsize,
+                            (((int)align % 3) == 1 ) ? "center" : ((((int)align % 3) == 2 ) ? "right" : "left"),
+                            color.r, color.g, color.b, color.a, paddingx, paddingx);
+
+                    Evas_Textblock_Style *st;
+                    st = evas_textblock_style_new();
+                    evas_textblock_style_set(st, strStyle);
+                    evas_object_textblock_style_set(txtobj, st);
+                    evas_object_textblock_text_markup_set(txtobj, str);
+                    evas_object_resize(txtobj, width, height);
+
+                    obj->bExtracted = FALSE;
+                    obj->type = EFLOBJECT_TEXTBLOCK;
+                    obj->obj = txtobj;
+                    obj->position.x = posx;
+                    obj->position.y = posy;
+                    obj->position.width = width;
+                    obj->position.height = height;
+                    obj->etcInfo = (char*)str;
+                    obj->data = st;
+
+                    if(winctx->isVirtual) {
+                        McfWindowContext *basectx = windows->get_window_context(windows->get_base_window());
+                        if(basectx) {
+                            obj->position.x -= (winctx->x - basectx->x);
+                            obj->position.y -= (winctx->y - basectx->y);
+                        }
+                    }
+
+                    mcfint calwidth, calheight;
+                    evas_object_textblock_size_native_get(txtobj, &calwidth, &calheight);
+                    /* FIXME : The following 2 lines are workaround for problem that EFL does not return correct font size */
+                    mcfint hardcoded_width = find_hardcoded_width(str, fontinfo.fontsize);
+                    if(hardcoded_width != 0) calwidth = hardcoded_width;
+
+                    if(calwidth > width) {
+                        sprintf(strStyle, "DEFAULT='font=%s font_size=%d align=%s color=#%02X%02X%02X%02X wrap=word left_margin=%d right_margin=%d'",
+                                fontinfo.fontname, (int)(0.9 * fontinfo.fontsize * ((float)width / (float)calwidth)),
+                                (((int)align % 3) == 1 ) ? "center" : ((((int)align % 3) == 2 ) ? "right" : "left"),
+                                color.r, color.g, color.b, color.a, paddingx, paddingx);
+                        evas_textblock_style_set(st, strStyle);
+                        evas_object_textblock_style_set(txtobj, st);
+                        evas_object_textblock_text_markup_set(txtobj, str);
+                        evas_object_resize(txtobj, width, height);
+                        evas_object_textblock_size_native_get(txtobj, &calwidth, &calheight);
+                    }
+
+                    if (align == LABEL_ALIGN_LEFT_MIDDLE ||
+                        align == LABEL_ALIGN_CENTER_MIDDLE ||
+                        align == LABEL_ALIGN_RIGHT_MIDDLE) {
+                        posy = posy + ((height - calheight) / 2) + paddingy;
+                    } else if (align == LABEL_ALIGN_LEFT_BOTTOM ||
+                                  align == LABEL_ALIGN_CENTER_BOTTOM ||
+                                  align == LABEL_ALIGN_RIGHT_BOTTOM) {
+                        posy = posy + (height - calheight) - paddingy;
+                    } else {
+                        posy += paddingy;
+                    }
+
+                    evas_object_move(txtobj, posx, posy);
+                    evas_object_raise(txtobj);
+                    evas_object_show(txtobj);
+
+                    targetctx->etcInfoPtr = eina_list_append((Eina_List*)(targetctx->etcInfoPtr), obj);
+
+                    mcfint window_layer = 29000;
+                    if(!windows->is_base_window(reinterpret_cast<mcfwindow>(drawCtx))) {
+                        window_layer = 29010;
+                    }
+                    evas_object_layer_set(txtobj, window_layer + 1);
+                }
+            }
+#ifdef TEST_NEWBACKEND
+                TextCache cache;
+                cache.used = true;
+                cache.window = window;
+                cache.fontinfo = fontinfo;
+                cache.color = color;
+                strncpy(cache.fontinfo.fontname, fontinfo.fontname, MAX_FONT_NAME_LEN);
+                cache.fontinfo.fontsize = fontinfo.fontsize;
+                cache.fontinfo.isBold = fontinfo.isBold;
+                cache.fontinfo.isItalic = fontinfo.isItalic;
+                memcpy(&(cache.color), &(color), sizeof(McfColor));
+                strncpy(cache.str, str, sizeof(cache.str));
+                cache.strHash = hashval;
+                cache.posx = org_posx;
+                cache.posy = org_posy;
+                cache.width = width;
+                cache.height = height;
+                cache.align = align;
+                cache.paddingx = paddingx;
+                cache.paddingy = paddingy;
+
+                cache.text = obj->obj;
+
+                mcfboolean bInserted = FALSE;
+                for(mcfint loop = 0;loop < g_TextCache.size() && !bInserted;loop++) {
+                    if(!g_TextCache[loop].used) {
+                        g_TextCache[loop] = cache;
+                    }
+                }
+                if(!bInserted) {
+                    g_TextCache.push_back(cache);
+                }
+            }
+#endif
+        }
+    }
+}
+
+/**
+ * Draws a rectangle on cairo-surface
+ */
+void
+CMCFGraphicsImplEfl::draw_rectangle(mcfwindow window, const mcfdrawctx drawCtx, mcfdouble posx, mcfdouble posy,
+                                    mcfdouble width, mcfdouble height, const mcfdouble lineWidth,
+                                    const McfColor& lineColor, mcfboolean fill, const McfColor& fillColor,
+                                    mcfdouble radius, mcffloat alpha)
+{
+    MCF_DEBUG();
+
+    CMCFResourceCache *cache = CMCFResourceCache::get_instance();
+    CMCFWindows *windows = CMCFWindows::get_instance();
+    CMCFUtils *utils = CMCFUtils::get_instance();
+    McfWindowContext *winctx = NULL;
+    McfWindowContext *targetctx = NULL;
+
+    if(windows) {
+        winctx = windows->get_window_context(window, FALSE);
+        targetctx = windows->get_window_context(drawCtx, FALSE);
+    }
+
+    if (winctx && utils && cache && windows) {
+        EFLObject *obj = new EFLObject;
+        if (obj) {
+            Evas_Object *winobj = (Evas_Object*)window;
+            Evas *evas = evas_object_evas_get(winobj);
+            Evas_Object *rectobj = evas_object_rectangle_add(evas);
+
+            evas_object_size_hint_weight_set(rectobj, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+            elm_win_resize_object_add(winobj, rectobj);
+            evas_object_color_set(rectobj, fillColor.r, fillColor.g, fillColor.b, fillColor.a);
+
+            evas_object_move(rectobj, posx, posy);
+            evas_object_resize(rectobj, width, height);
+
+            evas_object_show(rectobj);
+
+            obj->obj = rectobj;
+            obj->type = EFLOBJECT_RECTANGLE;
+            obj->position.x = posx;
+            obj->position.y = posy;
+            obj->position.width = width;
+            obj->position.height = height;
+            obj->etcInfo = NULL;
+            obj->data = NULL;
+
+            if(winctx->isVirtual) {
+                McfWindowContext *basectx = windows->get_window_context(windows->get_base_window());
+                if(basectx) {
+                    obj->position.x -= (winctx->x - basectx->x);
+                    obj->position.y -= (winctx->y - basectx->y);
+                }
+            }
+
+            targetctx->etcInfoPtr = eina_list_append((Eina_List*)(targetctx->etcInfoPtr), obj);
+
+            mcfint window_layer = 29000;
+            if(!windows->is_base_window(reinterpret_cast<mcfwindow>(drawCtx))) {
+                window_layer = 29010;
+            }
+            evas_object_layer_set(rectobj, window_layer + 1);
+        }
+    }
+}
+
+McfSize
+CMCFGraphicsImplEfl::get_image_size(mcfchar* imgPath)
+{
+    MCF_DEBUG();
+    McfSize ret = { 0, 0 };
+
+    CMCFWindows *windows = CMCFWindows::get_instance();
+
+    Evas_Object *winobj = (Evas_Object*)(windows->get_base_window());
+    Evas *evas = evas_object_evas_get(winobj);
+    Evas_Object *imgobj = evas_object_image_add(evas);
+
+    if (imgobj) {
+        int w, h;
+        evas_object_image_file_set(imgobj, imgPath, NULL);
+        evas_object_image_size_get(imgobj, &w, &h);
+        evas_object_del(imgobj);
+        ret.width = w;ret.height = h;
+    }
+
+    return ret;
+}
+
+
diff --git a/mcf/gwes/efl/mcfgraphics-efl.h b/mcf/gwes/efl/mcfgraphics-efl.h
new file mode 100755 (executable)
index 0000000..195f7b7
--- /dev/null
@@ -0,0 +1,98 @@
+/*
+ * Copyright 2012  Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.tizenopensource.org/license
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+
+#include "mcfgraphics.h"
+
+#ifndef __MCF_GRAPHICS_EFL_H__
+#define __MCF_GRAPHICS_EFL_H__
+
+#ifdef TEST_NEWBACKEND
+#include <Ecore_Evas.h>
+#include <Ecore.h>
+typedef struct {
+    mcfboolean used;
+
+    Evas_Object *image;
+    Evas_Object *clipper;
+
+    mcfwindow window;
+    mcfchar imgPath[_POSIX_PATH_MAX];
+    mcfint imgPathHash;
+    mcfint destX;
+    mcfint destY;
+    mcfint destWidth;
+    mcfint destHeight;
+    mcfint srcX;
+    mcfint srcY;
+    mcfint srcWidth;
+    mcfint srcHeight;
+    mcfboolean extractImg;
+} ImageCache;
+
+typedef struct {
+    mcfboolean used;
+
+    Evas_Object *text;
+
+    mcfwindow window;
+    mcf::McfFontInfo fontinfo;
+    McfColor color;
+    mcfchar str[_POSIX_PATH_MAX];;
+    mcfint strHash;
+    mcfint posx;
+    mcfint posy;
+    mcfint width;
+    mcfint height;
+    MCFLabelAlignment align;
+    mcfbyte paddingx;
+    mcfbyte paddingy;
+} TextCache;
+#else
+#endif
+
+namespace mcf
+{
+class CMCFGraphicsImplEfl : public CMCFGraphicsImpl
+{
+public :
+    CMCFGraphicsImplEfl();
+    ~CMCFGraphicsImplEfl();
+
+    void draw_image(mcfwindow window, const mcfdrawctx drawCtx, mcfchar* imgPath,
+                    mcfint destX, mcfint destY, mcfint destWidth, mcfint destHeight,
+                    mcfint srcX, mcfint srcY, mcfint srcWidth, mcfint srcHeight, mcfboolean extractImg);
+    mcfimage load_image(const mcfchar* imgPath);
+    void unload_image(mcfimage imgData);
+
+    mcffont create_font(const McfFontInfo& info);
+    void destroy_font(mcffont font);
+    void draw_text(mcfwindow window, const mcfdrawctx drawCtx, const McfFontInfo& fontinfo, const McfColor& color,
+                   const mcfchar *str, mcfint posx, mcfint posy, mcfint width, mcfint height,
+                   MCFLabelAlignment align, mcfbyte paddingx, mcfbyte paddingy);
+
+    void draw_rectangle(mcfwindow window, const mcfdrawctx drawCtx, mcfdouble posx, mcfdouble posy,
+                        mcfdouble width, mcfdouble height, const mcfdouble lineWidth, const McfColor& lineColor,
+                        mcfboolean fill, const McfColor& fillColor, mcfdouble radius, mcffloat alpha);
+    mcfdrawctx begin_paint(const mcfwindow window, const mcfboolean forcedraw = FALSE);
+    void end_paint(const mcfwindow window, mcfdrawctx drawCtx);
+    McfSize get_image_size(mcfchar* imgPath);
+
+private:
+};
+} /* End of mcf namespace */
+#endif
diff --git a/mcf/gwes/efl/mcfwindows-efl.cpp b/mcf/gwes/efl/mcfwindows-efl.cpp
new file mode 100755 (executable)
index 0000000..4eb3894
--- /dev/null
@@ -0,0 +1,718 @@
+/*
+ * Copyright 2012  Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.tizenopensource.org/license
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+
+#include "mcfwindows-efl.h"
+#include "mcfdebug.h"
+#include "mcfcontroller.h"
+#include "mcfcontext.h"
+#include "mcfresourcecache.h"
+#include "mcfuibuilder.h"
+#include "mcfwindows.h"
+
+#include <Elementary.h>
+#include <Ecore_X.h>
+#include <malloc.h>
+#include <X11/Xlib.h>
+
+using namespace mcf;
+
+Ecore_X_Atom ATOM_WM_CLASS = 0;
+
+void release_all(Evas_Object *win);
+
+#include "mcfgraphics-efl.h"
+#include <utilX.h>
+#ifdef TEST_NEWBACKEND
+#include <Ecore_Evas.h>
+#include <Ecore.h>
+#include <vector>
+extern std::vector<ImageCache> g_ImageCache;
+extern std::vector<TextCache> g_TextCache;
+#else
+#endif
+
+/**
+ * Constructor
+ */
+CMCFWindowsImplEfl::CMCFWindowsImplEfl()
+{
+    MCF_DEBUG();
+    mcf_context_window = NULL;
+    /* Initializes all window resources */
+    ATOM_WM_CLASS = ecore_x_atom_get("WM_CLASS");
+}
+
+/**
+ * De-constructor
+ */
+CMCFWindowsImplEfl::~CMCFWindowsImplEfl()
+{
+    MCF_DEBUG();
+}
+
+
+/**
+ * Create a content window and binds it into given parent window as a child
+ */
+mcfwindow
+CMCFWindowsImplEfl::create_base_window(const mcfwindow parentWnd, McfWindowContext *winCtx, const mcf16 width, const mcf16 height)
+{
+    MCF_DEBUG();
+
+    mcfwindow ret = MCFWINDOW_INVALID;
+
+    if(winCtx) {
+        winCtx->etcInfoPtr = NULL;
+        winCtx->window = parentWnd;
+
+        ecore_x_icccm_name_class_set(elm_win_xwindow_get(static_cast<Evas_Object*>(parentWnd)), "Virtual Keyboard", "ISF" );
+
+        set_window_accepts_focus(parentWnd, FALSE);
+
+        ret = winCtx->window;
+    }
+
+    return ret;
+}
+
+mcfwindow
+CMCFWindowsImplEfl::create_context_popup_window(const mcfwindow parentWnd)
+{
+    CMCFWindows *windows = CMCFWindows::get_instance();
+    MCF_DEBUG();
+    int w,h;
+    mcf_context_window = elm_win_add(NULL, "MCFContextPopup", ELM_WIN_BASIC);
+    Ecore_X_Display* dpy;
+    dpy = ecore_x_display_get();
+    elm_win_borderless_set(mcf_context_window, EINA_TRUE);
+    elm_win_alpha_set(mcf_context_window, EINA_TRUE);
+    ecore_x_window_size_get(ecore_x_window_root_first_get(), &w, &h);
+    ecore_x_icccm_name_class_set(elm_win_xwindow_get(static_cast<Evas_Object*>(mcf_context_window)), "ISF Context Popup", "ISF");
+    set_window_accepts_focus( mcf_context_window, FALSE);
+    utilx_set_window_effect_state((Display*)dpy, elm_win_xwindow_get(static_cast<Evas_Object*>(mcf_context_window)), 0);
+    CMCFContext *context = CMCFContext::get_instance();
+    evas_object_resize(mcf_context_window, w, h);
+    evas_object_show(mcf_context_window);
+    if(!(windows->get_update_pending())) {
+      update_window(mcf_context_window);
+    }
+    return mcf_context_window;
+}
+
+Evas_Object*
+CMCFWindowsImplEfl::get_context_popup_window ()
+{
+    return mcf_context_window;
+}
+
+void
+CMCFWindowsImplEfl::destroy_context_popup_window ()
+{
+    if(mcf_context_window) {
+      evas_object_del(mcf_context_window);
+      mcf_context_window = NULL;
+    }
+    return;
+}
+
+/**
+ * Creates a window
+ */
+mcfwindow
+CMCFWindowsImplEfl::create_window(const mcfwindow parentWnd, McfWindowContext *winCtx, const mcf16 width, const mcf16 height)
+{
+    MCF_DEBUG();
+
+    Evas_Object *win = NULL;
+    win = elm_win_add(static_cast<Evas_Object*>(parentWnd), "MCFPopup", ELM_WIN_BASIC);
+    Ecore_X_Display* dpy;
+    dpy = ecore_x_display_get();
+
+    elm_win_borderless_set(win, EINA_TRUE);
+    elm_win_alpha_set(win, EINA_TRUE);
+#ifndef FULL_SCREEN_TEST
+    evas_object_resize(win, width, height);
+#endif
+
+    ecore_x_icccm_name_class_set(elm_win_xwindow_get(static_cast<Evas_Object*>(win)), "ISF Popup", "ISF");
+
+    set_window_accepts_focus(win, FALSE);
+
+
+    utilx_set_window_effect_state((Display*)dpy, elm_win_xwindow_get(static_cast<Evas_Object*>(win)), 0);
+
+    CMCFContext *context = CMCFContext::get_instance();
+    return win;
+}
+
+/**
+ * Creates the dim window
+ */
+mcfwindow
+CMCFWindowsImplEfl::create_dim_window(const mcfwindow parentWnd, McfWindowContext *winCtx,
+                                             const mcf16 width, const mcf16 height)
+{
+    MCF_DEBUG();
+
+    Evas_Object *win = NULL;
+    win = elm_win_add(static_cast<Evas_Object*>(parentWnd), "MCFPopup", ELM_WIN_BASIC);
+    Ecore_X_Display* dpy;
+    dpy = ecore_x_display_get();
+
+    elm_win_borderless_set(win, EINA_TRUE);
+    elm_win_alpha_set(win, EINA_TRUE);
+    evas_object_resize(win, width, height);
+
+    ecore_x_icccm_name_class_set(elm_win_xwindow_get(static_cast<Evas_Object*>(win)), "ISF Popup", "ISF");
+
+    set_window_accepts_focus(win, FALSE);
+
+    utilx_set_window_effect_state((Display*)dpy, elm_win_xwindow_get(static_cast<Evas_Object*>(win)), 0);
+
+    CMCFContext *context = CMCFContext::get_instance();
+
+    hide_window(win);
+
+    return win;
+}
+
+/**
+ * Make a window relation between parent and child
+ * Caution: Currently, If we use transient_for them the ISE will occure some crash. It needs to check X11
+ */
+void
+CMCFWindowsImplEfl::set_parent(const mcfwindow parentWindow, const mcfwindow window)
+{
+    MCF_DEBUG();
+
+    ecore_x_icccm_transient_for_set(elm_win_xwindow_get(static_cast<Evas_Object*>(window)),
+                                    elm_win_xwindow_get(static_cast<Evas_Object*>(parentWindow)));
+}
+
+/**
+ * Destroys the given window
+ */
+bool
+CMCFWindowsImplEfl::destroy_window(mcfwindow window)
+{
+    MCF_DEBUG();
+
+    CMCFWindows *windows = CMCFWindows::get_instance();
+    McfWindowContext *winctx = windows->get_window_context(window, FALSE);
+    if (winctx) {
+        if (winctx->etcInfoPtr) {
+            while ((Eina_List*)(winctx->etcInfoPtr)) {
+                EFLObject *obj = (EFLObject*)eina_list_data_get((Eina_List*)(winctx->etcInfoPtr));
+                if (obj) {
+                    Evas_Object* eo = obj->obj;
+                    if(obj->bExtracted) {
+                        void *data = evas_object_image_data_get(eo, 1);
+                        if(data) {
+                            free(data);
+                        }
+                    }
+                    if(eo) {
+                    evas_object_del(eo);
+                        obj->obj = NULL;
+                    }
+                    if(obj->type == EFLOBJECT_TEXTBLOCK) {
+                        Evas_Textblock_Style *st = (Evas_Textblock_Style*)(obj->data);
+                        if(st) {
+                            evas_textblock_style_free(st);
+                        }
+#ifdef TEST_NEWBACKEND
+                                               for(mcfint loop = 0;loop < g_TextCache.size();loop++) {
+                                                       if(g_TextCache[loop].text == obj->obj) {
+                                                               g_TextCache[loop].used = FALSE;
+                                                       }
+                                               }
+#endif
+                    } else if(obj->type == EFLOBJECT_IMAGE) {
+#ifdef TEST_NEWBACKEND
+                                               for(mcfint loop = 0;loop < g_ImageCache.size();loop++) {
+                                                       if(g_ImageCache[loop].image == obj->obj) {
+                                                               g_ImageCache[loop].used = FALSE;
+                                                       }
+                                               }
+#endif
+                    }
+                }
+                winctx->etcInfoPtr = eina_list_remove_list((Eina_List*)(winctx->etcInfoPtr), (Eina_List*)(winctx->etcInfoPtr));
+                delete obj;
+            }
+            winctx->etcInfoPtr = NULL;
+        }
+
+        if(!(winctx->isVirtual)) {
+            Evas_Object *win = (Evas_Object*)window;
+            evas_object_hide(win);
+            evas_object_del(win);
+        }
+    }
+
+    return TRUE;
+}
+
+/**
+ * Shows the given window
+ */
+void
+CMCFWindowsImplEfl::show_window(const mcfwindow window, mcfboolean queue)
+{
+    MCF_DEBUG();
+    CMCFWindows *windows = CMCFWindows::get_instance();
+    CMCFContext *context = CMCFContext::get_instance();
+    if(windows && context && window) {
+        McfWindowContext *winctx = windows->get_window_context(window);
+        if(!(context->get_hidden_state())) {
+            if(winctx) {
+                if(!(winctx->isVirtual)) {
+                    evas_object_show((Evas_Object*)window);
+                }
+                if(!(windows->get_update_pending())) {
+                    update_window(window);
+                }
+            }
+        }
+    }
+}
+
+int hide_window_timer_event(void *data)
+{
+    Evas_Object *win = (Evas_Object*)data;
+    CMCFUtils *utils = CMCFUtils::get_instance();
+    if(utils) {
+        utils->log("hide_window_timer_event : %p\n", win);
+    }
+    if(win) {
+        evas_object_hide(win);
+    }
+    return FALSE;
+}
+/**
+ * Hides the given window
+ */
+void
+CMCFWindowsImplEfl::hide_window(const mcfwindow window,  const mcfboolean fForce)
+{
+    MCF_DEBUG();
+    CMCFWindows *windows = CMCFWindows::get_instance();
+    McfWindowContext *winctx = windows->get_window_context(window, FALSE);
+    if(winctx) {
+        if(!(winctx->isVirtual)) {
+            Evas_Object *win = (Evas_Object*)window;
+            evas_object_move(win, -10000, -10000);
+        }
+    }
+    if(window == windows->get_dim_window()) {
+        if (winctx) {
+            if (winctx->etcInfoPtr) {
+
+                Eina_List *list = (Eina_List*)(winctx->etcInfoPtr);
+                Eina_List *iter = NULL;
+                Eina_List *iter_next = NULL;
+                void *data = NULL;
+                int iIndex = 0;
+#ifdef TEST_NEWBACKEND
+#else
+                EINA_LIST_FOREACH_SAFE(list, iter, iter_next, data) {
+                    if (data) {
+                        EFLObject *obj = (EFLObject*)(data);
+                        if(obj) {
+                            mcfboolean bShouldRemove = FALSE;
+                            bShouldRemove = TRUE;
+                            if (bShouldRemove) {
+                                Evas_Object* eo = obj->obj;
+                                if(obj->bExtracted) {
+                                    void *data = evas_object_image_data_get(eo, 1);
+                                    if(data) {
+                                        free(data);
+                                    }
+                                }
+                                if(eo) {
+                                    evas_object_del(eo);
+                                    obj->obj = NULL;
+                                }
+                                if(obj->type == EFLOBJECT_TEXTBLOCK) {
+                                    Evas_Textblock_Style *st = (Evas_Textblock_Style*)(obj->data);
+                                    if(st) {
+                                        evas_textblock_style_free(st);
+                                    }
+#ifdef TEST_NEWBACKEND
+                                    for(mcfint loop = 0;loop < g_TextCache.size();loop++) {
+                                        if(g_TextCache[loop].text == obj->obj) {
+                                            g_TextCache[loop].used = FALSE;
+                                        }
+                                    }
+#endif
+                                } else if(obj->type == EFLOBJECT_IMAGE) {
+#ifdef TEST_NEWBACKEND
+                                    for(mcfint loop = 0;loop < g_ImageCache.size();loop++) {
+                                        if(g_ImageCache[loop].image == obj->obj) {
+                                            g_ImageCache[loop].used = FALSE;
+                                        }
+                                    }
+#endif
+                                }
+                                delete obj;
+                                list = eina_list_remove_list(list, iter);
+                            }
+                        }
+                        iIndex++;
+                    }
+                }
+                winctx->etcInfoPtr = list;
+#endif
+            }
+        }
+    }
+    if(window == windows->get_base_window()) {
+        elm_cache_all_flush();
+        malloc_trim(0);
+    }
+}
+
+/**
+ * Moves the window to the given position
+ */
+void
+CMCFWindowsImplEfl::move_window(const mcfwindow window, const mcf16 x, const mcf16 y)
+{
+    MCF_DEBUG();
+    CMCFUtils *utils = CMCFUtils::get_instance();
+    CMCFContext *context = CMCFContext::get_instance();
+    CMCFWindows *windows = CMCFWindows::get_instance();
+
+    if(utils && context && windows) {
+        McfWindowContext *winctx = windows->get_window_context(window, FALSE);
+        unsigned short win_width = 0;
+        unsigned short win_height = 0;
+        if(winctx) {
+            win_width = winctx->width;
+            win_height = winctx->height;
+        }
+
+        mcf16 rotatex = x;
+        mcf16 rotatey = y;
+        mcf16 orgx = x;
+        mcf16 orgy = y;
+
+        mcfint scr_w, scr_h;
+        /* get window size */
+        utils->get_screen_resolution(&scr_w, &scr_h);
+
+        Evas_Object *win = (Evas_Object*)window;
+#ifndef FULL_SCREEN_TEST
+        evas_object_move(win, rotatex, rotatey);
+#endif
+    }
+}
+
+/**
+* Resizes the window to the given metric
+*/
+void
+CMCFWindowsImplEfl::resize_window(const mcfwindow window, const mcf16 width, const mcf16 height)
+{
+    MCF_DEBUG();
+
+    Evas_Object *win = (Evas_Object*)window;
+#ifndef FULL_SCREEN_TEST
+    evas_object_resize(win, width, height);
+    if(win == CMCFWindows::get_instance()->get_base_window()) {
+        CMCFUtils *utils = CMCFUtils::get_instance();
+        if(utils) {
+            utils->log("RESIZE_BASE_WINDOW : %d %d\n", width, height);
+        }
+    }
+#endif
+    CMCFWindows *windows = CMCFWindows::get_instance();
+    if(window == windows->get_dim_window()) {
+        hide_window(window);
+    }
+}
+
+/**
+* Resizes the window to the given metric
+*/
+void
+CMCFWindowsImplEfl::move_resize_window(const mcfwindow window, const mcf16 x, const mcf16 y,
+                                              const mcf16 width, const mcf16 height)
+{
+    MCF_DEBUG();
+    Evas_Object *win = (Evas_Object*)window;
+#ifndef FULL_SCREEN_TEST
+    evas_object_move(win, x, y);
+    evas_object_resize(win, width, height);
+    CMCFWindows *windows = CMCFWindows::get_instance();
+    CMCFUtils *utils = CMCFUtils::get_instance();
+    if(windows && utils) {
+        if(win == windows->get_base_window()) {
+            utils->log("RESIZE_BASE_WINDOW : %d %d\n", width, height);
+        }
+    }
+#endif
+}
+
+/**
+* Update the window to redraw given area
+*/
+void
+CMCFWindowsImplEfl::update_window(const mcfwindow window, const mcf16 x, const mcf16 y,
+                                         const mcf16 width, const mcf16 height)
+{
+    MCF_DEBUG();
+
+    mcfboolean removeall = FALSE;
+    McfRectangle updatearea = {x, y, width, height};
+    if (x + y + width + height == 0) {
+        removeall = TRUE;
+    }
+
+    CMCFWindows *windows = CMCFWindows::get_instance();
+    CMCFUtils *utils = CMCFUtils::get_instance();
+    McfWindowContext *winctx = NULL;
+
+    if(windows) {
+        winctx = windows->get_window_context(window, FALSE);
+    }
+    if (windows && utils && winctx) {
+        if(winctx->isVirtual) {
+            McfWindowContext *basectx = windows->get_window_context(windows->get_base_window());
+            if(basectx) {
+                updatearea.x += (winctx->x - basectx->x);
+                updatearea.y += (winctx->y - basectx->y);
+            }
+        }
+        if (winctx->etcInfoPtr) {
+            Eina_List *list = (Eina_List*)(winctx->etcInfoPtr);
+            Eina_List *iter = NULL;
+            Eina_List *iter_next = NULL;
+            void *data = NULL;
+            int iIndex = 0;
+
+            EINA_LIST_FOREACH_SAFE(list, iter, iter_next, data) {
+                if (data) {
+                    EFLObject *obj = (EFLObject*)(data);
+                    if(obj) {
+                        mcfboolean bShouldRemove = FALSE;
+                        if (removeall || utils->is_rect_overlap(obj->position, updatearea)) {
+                            bShouldRemove = TRUE;
+                        }
+                        if (iIndex == 0 && !removeall) {
+                            bShouldRemove = FALSE; // window's background
+                        }
+                        if (bShouldRemove) {
+#ifdef TEST_NEWBACKEND
+                            MCF_DEBUG_ELAPASED_TIME_START();
+                            if(TRUE) {
+                                if(winctx->width != obj->position.width || winctx->height != obj->position.height ||
+                                    obj->type == EFLOBJECT_TEXTBLOCK) {
+                                    evas_object_hide(obj->obj);
+                                }
+                            } else {
+#else
+                            Evas_Object* eo = obj->obj;
+                            if(obj->bExtracted) {
+                                void *data = evas_object_image_data_get(eo, 1);
+                                if(data) {
+                                    free(data);
+                                }
+                            }
+                            if(eo) {
+                                evas_object_del(eo);
+                                obj->obj = NULL;
+                            }
+                            if(obj->type == EFLOBJECT_TEXTBLOCK) {
+                                Evas_Textblock_Style *st = (Evas_Textblock_Style*)(obj->data);
+                                if(st) {
+                                    evas_textblock_style_free(st);
+                                }
+#ifdef TEST_NEWBACKEND
+                                for(mcfint loop = 0;loop < g_TextCache.size();loop++) {
+                                    if(g_TextCache[loop].text == obj->obj) {
+                                        g_TextCache[loop].used = FALSE;
+                                    }
+                                }
+#endif
+                            } else if(obj->type == EFLOBJECT_IMAGE) {
+#ifdef TEST_NEWBACKEND
+                                for(mcfint loop = 0;loop < g_ImageCache.size();loop++) {
+                                    if(g_ImageCache[loop].image == obj->obj) {
+                                        g_ImageCache[loop].used = FALSE;
+                                    }
+                                }
+#endif
+                            }
+                            delete obj;
+                            list = eina_list_remove_list(list, iter);
+#endif
+#ifdef TEST_NEWBACKEND
+                            }
+#endif
+                        }
+                    }
+                    iIndex++;
+                }
+            }
+            winctx->etcInfoPtr = list;
+        }
+    }
+
+    CMCFUIBuilder *builder = CMCFUIBuilder::get_instance();
+    builder->show_layout(window, x, y, width, height);
+}
+
+/**
+ * Returns the position of x,y,width,height of the given window
+ */
+mcfboolean
+CMCFWindowsImplEfl::get_window_rect(const mcfwindow window, McfRectangle *rect)
+{
+    MCF_DEBUG();
+    CMCFUtils *utils = CMCFUtils::get_instance();
+    CMCFContext *context = CMCFContext::get_instance();
+
+    if(utils && context && rect) {
+        Window junkwin;
+        Ecore_X_Window_Attributes attrs;
+        int x, y, width, height;
+        mcfint scr_w, scr_h;
+        ecore_x_window_geometry_get(elm_win_xwindow_get(static_cast<Evas_Object*>(window)), &x, &y, &width, &height);
+        ecore_x_window_attributes_get(elm_win_xwindow_get(static_cast<Evas_Object*>(window)), &attrs);
+        XTranslateCoordinates((Display*)ecore_x_display_get(), (Drawable)elm_win_xwindow_get(static_cast<Evas_Object*>(window)),
+                              attrs.root, -attrs.border, -attrs.border, &x, &y, &junkwin);
+
+        utils->log("CMCFWindowsImplEfl::get_window_rect : %p , %d %d %d %d\n", window, x, y, width, height);
+
+        /* get window size */
+        utils->get_screen_resolution(&scr_w, &scr_h);
+        rect->x = x;
+        rect->y = y;
+        rect->width = width;
+        rect->height = height;
+    }
+
+    return TRUE;
+}
+
+#include <X11/Xutil.h>
+
+/**
+ * Shows a message box
+ */
+void
+CMCFWindowsImplEfl::show_message_box(const mcfwindow parentWnd, const mcf8 msgType, mcfchar* title, mcfchar* msg)
+{
+    MCF_DEBUG();
+}
+
+
+void
+CMCFWindowsImplEfl::set_keep_above(const mcfwindow window, const mcfboolean keepabove)
+{
+    MCF_DEBUG();
+}
+
+void release_all(Evas_Object *win)
+{
+       MCF_DEBUG();
+       evas_object_move(win, -10000, -10000);
+       CMCFWindows *windows = CMCFWindows::get_instance();
+               McfWindowContext *winctx = windows->get_window_context(win, FALSE);
+               if (winctx) {
+                       if (winctx->etcInfoPtr) {
+
+                               Eina_List *list = (Eina_List*)(winctx->etcInfoPtr);
+                               Eina_List *iter = NULL;
+                               Eina_List *iter_next = NULL;
+                               void *data = NULL;
+                               int iIndex = 0;
+#ifdef TEST_NEWBACKEND
+#else
+                EINA_LIST_FOREACH_SAFE(list, iter, iter_next, data) {
+                    if (data) {
+                        EFLObject *obj = (EFLObject*)(data);
+                        if(obj) {
+                            mcfboolean bShouldRemove = FALSE;
+                            bShouldRemove = TRUE;
+                            if (bShouldRemove) {
+                                Evas_Object* eo = obj->obj;
+                                if(obj->bExtracted) {
+                                    void *data = evas_object_image_data_get(eo, 1);
+                                    if(data) {
+                                        free(data);
+                                    }
+                                }
+                                if(eo) {
+                                    evas_object_del(eo);
+                                    obj->obj = NULL;
+                                }
+                                if(obj->type == EFLOBJECT_TEXTBLOCK) {
+                                    Evas_Textblock_Style *st = (Evas_Textblock_Style*)(obj->data);
+                                    if(st) {
+                                        evas_textblock_style_free(st);
+                                    }
+#ifdef TEST_NEWBACKEND
+                                    for(mcfint loop = 0;loop < g_TextCache.size();loop++) {
+                                        if(g_TextCache[loop].text == obj->obj) {
+                                            g_TextCache[loop].used = FALSE;
+                                        }
+                                    }
+#endif
+                                } else if(obj->type == EFLOBJECT_IMAGE) {
+#ifdef TEST_NEWBACKEND
+                                    for(mcfint loop = 0;loop < g_ImageCache.size();loop++) {
+                                        if(g_ImageCache[loop].image == obj->obj) {
+                                            g_ImageCache[loop].used = FALSE;
+                                        }
+                                    }
+#endif
+                                }
+                                delete obj;
+                                list = eina_list_remove_list(list, iter);
+                            }
+                        }
+                        iIndex++;
+                    }
+                }
+                winctx->etcInfoPtr = list;
+#endif
+                       }
+               }
+}
+
+void CMCFWindowsImplEfl::set_window_accepts_focus(const mcfwindow window, const mcfboolean acceptable)
+{
+    Eina_Bool accepts_focus;
+    Ecore_X_Window_State_Hint initial_state;
+    Ecore_X_Pixmap icon_pixmap;
+    Ecore_X_Pixmap icon_mask;
+    Ecore_X_Window icon_window;
+    Ecore_X_Window window_group;
+    Eina_Bool is_urgent;
+
+    if(window) {
+        ecore_x_icccm_hints_get(elm_win_xwindow_get(static_cast<Evas_Object*>(window)),
+                                &accepts_focus, &initial_state, &icon_pixmap, &icon_mask,
+                                &icon_window, &window_group, &is_urgent);
+        ecore_x_icccm_hints_set(elm_win_xwindow_get(static_cast<Evas_Object*>(window)),
+                                acceptable, initial_state, icon_pixmap, icon_mask,
+                                icon_window, window_group, is_urgent);
+    }
+}
diff --git a/mcf/gwes/efl/mcfwindows-efl.h b/mcf/gwes/efl/mcfwindows-efl.h
new file mode 100755 (executable)
index 0000000..ad0c7a2
--- /dev/null
@@ -0,0 +1,73 @@
+/*
+ * Copyright 2012  Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.tizenopensource.org/license
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+
+#include "mcfwindows.h"
+#include <Evas.h>
+#include <Eina.h>
+
+#ifndef __MCF_WINDOWS_EFL_H__
+#define __MCF_WINDOWS_EFL_H__
+
+typedef enum {
+    EFLOBJECT_NONE,
+    EFLOBJECT_IMAGE,
+    EFLOBJECT_CLIPOBJECT,
+    EFLOBJECT_TEXTBLOCK,
+    EFLOBJECT_RECTANGLE,
+} EFLOBJECT_TYPE;
+
+namespace mcf
+{
+typedef struct {
+    EFLOBJECT_TYPE type;
+    McfRectangle position;
+    Evas_Object *obj;
+    char *etcInfo;
+    mcfboolean bExtracted;
+    void *data;
+} EFLObject;
+class CMCFWindowsImplEfl : public CMCFWindowsImpl
+{
+public :
+    CMCFWindowsImplEfl();
+    ~CMCFWindowsImplEfl();
+
+    mcfwindow create_base_window(const mcfwindow parentWnd, McfWindowContext *winCtx, const mcf16 width, const mcf16 height);
+    mcfwindow create_window(const mcfwindow parentWnd, McfWindowContext *winCtx, const mcf16 width, const mcf16 height);
+    mcfwindow create_context_popup_window(const mcfwindow parentWnd);
+    mcfwindow create_dim_window(const mcfwindow parentWnd, McfWindowContext *winCtx, const mcf16 width, const mcf16 height);
+    bool destroy_window(mcfwindow window);
+    void show_window(const mcfwindow window, mcfboolean queue);
+    void hide_window(const mcfwindow window,  const mcfboolean fForce = FALSE);
+    void move_window(const mcfwindow window, const mcf16 x, const mcf16 y);
+    void resize_window(const mcfwindow window, const mcf16 width, const mcf16 height);
+    void move_resize_window(const mcfwindow window, const mcf16 x, const mcf16 y, const mcf16 width, const mcf16 height);
+    void update_window(const mcfwindow window, const mcf16 x = 0, const mcf16 y = 0, const mcf16 width = 0, const mcf16 height = 0);
+    void show_message_box(const mcfwindow parentWnd, const mcf8 msgType, mcfchar* title, mcfchar* msg);
+    mcfboolean get_window_rect(const mcfwindow window, McfRectangle *rect);
+    void set_parent(const mcfwindow parentWindow, const mcfwindow window);
+    void set_keep_above(const mcfwindow window, const mcfboolean keepabove);
+    Evas_Object* get_context_popup_window();
+    /* EFL specific utility functions */
+    void set_window_accepts_focus(const mcfwindow window, const mcfboolean accepts);
+    void destroy_context_popup_window();
+protected:
+    Evas_Object *mcf_context_window;
+};
+} /* End of mcf namespace */
+#endif
diff --git a/mcf/gwes/gtk/mcfevents-gtk.cpp b/mcf/gwes/gtk/mcfevents-gtk.cpp
new file mode 100755 (executable)
index 0000000..5bc9145
--- /dev/null
@@ -0,0 +1,395 @@
+/*
+ * Copyright 2012  Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.tizenopensource.org/license
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+
+#include "mcfevents-gtk.h"
+#include "mcfdebug.h"
+#include "mcfcontroller.h"
+#include "mcfgraphics.h"
+#include "mcfuibuilder.h"
+
+using namespace mcf;
+
+mcfboolean bMousePressed = FALSE; /* Checks whether mouse is pressed or not */
+mcfboolean bSkipMouseEventsUntilPressed = FALSE; /*Explicitly filter out any mouse events until mouse press occurs */
+
+#define MIN_XY_DIFF 14
+static mcfint sLatestXPos = 0;
+static mcfint sLatestYPos = 0;
+
+/**
+ * Constructor
+ */
+CMCFEventsImplGtk::CMCFEventsImplGtk()
+{
+    MCF_DEBUG();
+    /* Initializes all window resources */
+}
+
+/**
+ * De-constructor
+ */
+CMCFEventsImplGtk::~CMCFEventsImplGtk()
+{
+    MCF_DEBUG();
+}
+
+
+/* We have to remember the previous position of magnifier window, since it gets changed when mouse press occurs */
+mcfint magpressposx = 0;
+mcfint magpressposy = 0;
+/**
+* Generates a mouse press event to CMCFController class
+*/
+bool
+mouse_press(GtkWidget *widget, GdkEventButton *event, gpointer userData)
+{
+    MCF_DEBUG();
+    /* pre-condition */
+    CMCFController *controller;
+    mcfboolean processed = FALSE;
+
+    bSkipMouseEventsUntilPressed = FALSE;
+
+    controller = CMCFController::get_instance();
+
+    CMCFWindows *windows = CMCFWindows::get_instance();
+    GtkWidget* magnifier = static_cast<GtkWidget*>(windows->get_magnifier_window());
+    gdk_window_raise(magnifier->window);
+    if (widget == windows->get_magnifier_window()) {
+        McfWindowContext *magctx = windows->get_window_context(widget, FALSE);
+        if (magctx) {
+            magpressposx = magctx->x;
+            magpressposy = magctx->y;
+        }
+        /* First convert the local coordination to global coordination */
+        mcfwindow window = MCFWINDOW_INVALID;
+        mcfbyte index = 0;
+        McfWindowContext *context = NULL;
+        context = windows->get_window_context(static_cast<mcfwindow>(userData), FALSE);
+
+        mcfint x = event->x;
+        mcfint y = event->y;
+
+        x = context->x + x;
+        y = context->y + y;
+
+        do {
+            window = windows->get_nth_window_in_Z_order_list(index);
+            context = windows->get_window_context(window, FALSE);
+
+            if (context) {
+                if ((x >= context->x && x <= (context->x + context->width)) &&
+                    (y >= context->y && y <= (context->y + context->height))) {
+                    /* Now convert the global coordination to appropriate local coordination */
+                    x = x - context->x;
+                    y = y - context->y;
+
+                    if (controller) {
+                        controller->mouse_press(window, x, y);
+                        bMousePressed = TRUE;
+                        processed = TRUE;
+                    }
+                }
+            }
+
+            index++;
+        } while (index < MAX_ZORDER_NUM && window != MCFWINDOW_INVALID);
+    } else if (widget == windows->get_dim_window()) {
+        controller->mouse_press(static_cast<mcfwindow>(userData), event->x, event->y);
+        processed = TRUE;
+        bSkipMouseEventsUntilPressed = TRUE;
+    }
+
+    controller = CMCFController::get_instance();
+    if (controller && !bMousePressed && !processed) {
+        controller->mouse_press(static_cast<mcfwindow>(userData), event->x, event->y);
+        bMousePressed = TRUE;
+    }
+
+    sLatestXPos = event->x;
+    sLatestYPos = event->y;
+
+    /* post-condition */
+    return TRUE;
+}
+
+/**
+ * Generates a mouse release event to CMCFController class
+ */
+bool
+mouse_release(GtkWidget *widget, GdkEventButton *event, gpointer userData)
+{
+    MCF_DEBUG();
+    /* pre-condition */
+    CMCFController *controller;
+    CMCFWindows *windows;
+
+    controller = CMCFController::get_instance();
+    windows = CMCFWindows::get_instance();
+
+    mcfint x = event->x;
+    mcfint y = event->y;
+
+    if (bMousePressed) {
+        mcfboolean processed = FALSE;
+        mcfbyte index = 0;
+        mcfwindow window = MCFWINDOW_INVALID;
+        McfWindowContext *context = NULL;
+
+        /* First convert the local coordination to global coordination */
+        context = windows->get_window_context(static_cast<mcfwindow>(userData), FALSE);
+        if (widget == windows->get_magnifier_window()) {
+            /* Sometimes the event struct contains incorrect mouse position, when magnifier window gets moved by clicking on it */
+            GtkWidget* widget = static_cast<GtkWidget*>(windows->get_base_window());
+            gdk_window_get_pointer(widget->window, &x, &y, NULL);
+            context = windows->get_window_context(windows->get_base_window(), FALSE);
+        }
+
+        x = context->x + x;
+        y = context->y + y;
+
+        do {
+            window = windows->get_nth_window_in_Z_order_list(index);
+            context = windows->get_window_context(window, FALSE);
+
+            if (context) {
+                if ((x >= context->x && x <= (context->x + context->width)) &&
+                    (y >= context->y && y <= (context->y + context->height))) {
+                    /* Now convert the global coordination to appropriate local coordination */
+                    x = x - context->x;
+                    y = y - context->y;
+
+                    if (controller) {
+                        controller->mouse_release(window, x, y);
+                        processed = TRUE;
+                    }
+                }
+            }
+
+            index++;
+        } while (index < MAX_ZORDER_NUM && window != MCFWINDOW_INVALID);
+
+        /* No window exists on that point */
+        if (!processed) {
+            if (controller) {
+                controller->mouse_release(static_cast<mcfwindow>(userData), event->x, event->y);
+            }
+        }
+    } else if (!bSkipMouseEventsUntilPressed) {
+        mcf_assert((FALSE && "Mouse released but bMousePressed is FALSE"));
+        if (controller) {
+            controller->mouse_release(static_cast<mcfwindow>(userData), event->x, event->y);
+        }
+    }
+
+    bMousePressed = FALSE;
+    /* post-condition */
+    return TRUE;
+}
+
+/**
+ * Generates a update window event to CMCFController class
+ */
+bool
+update_window (GtkWidget *widget, GdkEventExpose *event,gpointer userData)
+{
+    MCF_DEBUG();
+    /* pre-condition */
+    CMCFGwes* gwes = CMCFGwes::get_instance();
+    CMCFUIBuilder *builder = CMCFUIBuilder::get_instance();
+
+    if (gwes && builder)       {
+        mcfwindow window = static_cast<mcfwindow>(widget);
+
+        return builder->show_layout(window);
+    }
+
+    /* post-condition */
+    return FALSE;
+}
+
+
+/**
+ * Generates a mouse move event to CMCFController class
+ */
+bool
+mouse_move(GtkWidget *widget, GdkEventButton *event, gpointer userData)
+{
+    MCF_DEBUG();
+    /* pre-condition */
+    CMCFController *controller;
+    CMCFWindows *windows;
+    CMCFUtils *utils;
+
+    controller = CMCFController::get_instance();
+    windows = CMCFWindows::get_instance();
+    utils = CMCFUtils::get_instance();
+
+    mcfint x = event->x;
+    mcfint y = event->y;
+
+    if(abs(sLatestXPos -x) < utils->get_scale_x(MIN_XY_DIFF) &&
+       abs(sLatestYPos -y) < utils->get_scale_x(MIN_XY_DIFF)) {
+        return FALSE;
+    }else{
+        sLatestXPos = x;
+        sLatestYPos = y;
+    }
+
+    if (bMousePressed) {
+        mcfbyte index = 0;
+        mcfwindow window = MCFWINDOW_INVALID;
+        McfWindowContext *context = NULL;
+
+        /* First convert the local coordination to global coordination */
+        context = windows->get_window_context(static_cast<mcfwindow>(userData), FALSE);
+        if (widget == windows->get_magnifier_window()) {
+            GtkWidget* widget = static_cast<GtkWidget*>(windows->get_base_window());
+            gdk_window_get_pointer(widget->window, &x, &y, NULL);
+            context = windows->get_window_context(windows->get_base_window(), FALSE);
+        }
+        x = context->x + x;
+        y = context->y + y;
+
+        mcfboolean bProcessed = FALSE;
+
+        do {
+            window = windows->get_nth_window_in_Z_order_list(index);
+            context = windows->get_window_context(window, FALSE);
+
+            if (context) {
+                if ((x >= context->x && x <= (context->x + context->width)) &&
+                    (y >= context->y && y <= (context->y + context->height))) {
+                    /* Now convert the global coordination to appropriate local coordination */
+                    x = x - context->x;
+                    y = y - context->y;
+
+                    if (controller) {
+                        controller->mouse_move(window, x, y);
+                    }
+                }
+            }
+
+            index++;
+        } while (index < MAX_ZORDER_NUM && window != MCFWINDOW_INVALID && !bProcessed);
+
+    } else if (!bSkipMouseEventsUntilPressed) {
+        if (controller) {
+            controller->mouse_move(static_cast<mcfwindow>(userData), event->x, event->y);
+        }
+    }
+    /* post-condition */
+    return TRUE;
+}
+
+/**
+ * Regists a event callback func to given window.
+ * In this function, it should call serveral event functions of CMCFController class whenever an event has occured
+ * The below list shows what event function should be called.
+ * - mouse_press (when the user presses mouse button)
+ * - mouse_release (when the user releases mouse button)
+ * - mouse_move (when the user drags mouse button)
+ * - show_base_layout (when the expost event has occured)
+ */
+void
+CMCFEventsImplGtk::connect_window_events(const mcfwindow wnd, const mcfint evt)
+{
+    MCF_DEBUG();
+    /* pre-condition */
+    mcf_assert_return(wnd != NULL);
+
+    GtkWidget* widget = static_cast<GtkWidget*>(wnd);
+
+    gtk_widget_add_events ((GtkWidget*)widget, GDK_BUTTON_PRESS_MASK |
+                           GDK_BUTTON_RELEASE_MASK |
+                           GDK_BUTTON_MOTION_MASK |
+                           GDK_POINTER_MOTION_HINT_MASK);
+
+    if (evt & MCF_EVENT_MOUSE) {
+        g_signal_connect(G_OBJECT(widget), "button_press_event", G_CALLBACK(mouse_press), static_cast<gpointer>(wnd));
+        g_signal_connect(G_OBJECT(widget), "button_release_event", G_CALLBACK(mouse_release), static_cast<gpointer>(wnd));
+        g_signal_connect(G_OBJECT(widget), "motion_notify_event", G_CALLBACK(mouse_move), static_cast<gpointer>(wnd));
+    }
+
+    if (evt & MCF_EVENT_EXPOSE) {
+        g_signal_connect(G_OBJECT(widget), "expose_event", G_CALLBACK(update_window), static_cast<gpointer>(wnd));
+    }
+
+    /* post-condition */
+}
+
+/**
+ * Generates a timer event to CMCFController class
+ */
+gboolean
+timer_event(gpointer data)
+{
+    MCF_DEBUG();
+    mcf32 sendData = (mcf32)data;
+    CMCFController *controller;
+    controller = CMCFController::get_instance();
+    if (controller) {
+        return controller->timer_event(sendData);
+    }
+    return TRUE;
+}
+
+/**
+ * Creates a timer
+ * In this function, it should call timer_event of CMCFController class
+ */
+void
+CMCFEventsImplGtk::create_timer(const mcf16 id, const mcf32 interval, mcf16 value, mcfboolean addToMap)
+{
+    MCF_DEBUG();
+    mcfint data = MCF_MAKELONG(id, value);
+    gint timerId = gtk_timeout_add (static_cast<guint32>(interval), timer_event, (gpointer)data);
+    if(addToMap) {
+        idMap[id] = timerId;
+    }
+}
+
+/**
+ * Destroys the given ID's timer
+ */
+void
+CMCFEventsImplGtk::destroy_timer(const mcf32 id)
+{
+    MCF_DEBUG();
+    for ( std::map<int, int>::iterator idx = idMap.begin(); idx != idMap.end(); ++idx) {
+        if ((*idx).first == id) {
+            gtk_timeout_remove ((*idx).second);
+            idMap.erase((*idx).first);
+            break;
+        }
+    }
+}
+
+/**
+ * Destroys all of created timer
+ */
+void
+CMCFEventsImplGtk::destroy_all_timer()
+{
+    MCF_DEBUG();
+    for ( std::map<int, int>::iterator idx = idMap.begin(); idx != idMap.end(); ++idx) {
+        gtk_timeout_remove ((*idx).second);
+    }
+    idMap.clear();
+}
+
diff --git a/mcf/gwes/gtk/mcfevents-gtk.h b/mcf/gwes/gtk/mcfevents-gtk.h
new file mode 100755 (executable)
index 0000000..1eeb7a3
--- /dev/null
@@ -0,0 +1,45 @@
+/*
+ * Copyright 2012  Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.tizenopensource.org/license
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+
+#include "mcfevents.h"
+#include <gtk/gtk.h>
+#include <map>
+
+
+#ifndef __MCF_EVENTS_GTK_H__
+#define __MCF_EVENTS_GTK_H__
+
+namespace mcf
+{
+class CMCFEventsImplGtk : public CMCFEventsImpl
+{
+public :
+    CMCFEventsImplGtk();
+    ~CMCFEventsImplGtk();
+
+    /* Implementation about interface functions */
+    void connect_window_events(const mcfwindow wnd, const mcfint evt);
+    void create_timer(const mcf16 id, const mcf32 interval, mcf16 value, mcfboolean addToMap);
+    void destroy_timer(const mcf32 id);
+    void destroy_all_timer();
+
+private:
+    std::map<int, int> idMap;
+};
+} /* End of mcf namespace */
+#endif __MCF_EVENTS_GTK_H__
diff --git a/mcf/gwes/gtk/mcfgraphics-cairo.cpp b/mcf/gwes/gtk/mcfgraphics-cairo.cpp
new file mode 100755 (executable)
index 0000000..b79a3ba
--- /dev/null
@@ -0,0 +1,292 @@
+/*
+ * Copyright 2012  Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.tizenopensource.org/license
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+
+#include "mcfgraphics-cairo.h"
+#include "mcfimageproxy.h"
+#include "mcfdebug.h"
+#include "mcfwindows.h"
+
+
+using namespace mcf;
+
+/**
+ * Constructor
+ */
+CMCFGraphicsImplCairo::CMCFGraphicsImplCairo()
+{
+    MCF_DEBUG();
+    /* Initializes all window resources */
+}
+
+/**
+ * De-constructor
+ */
+CMCFGraphicsImplCairo::~CMCFGraphicsImplCairo()
+{
+    MCF_DEBUG();
+}
+
+
+/**
+ * Draws the given text on cairo-surface
+ */
+void
+CMCFGraphicsImplCairo::draw_text(mcfwindow window, const mcfdrawctx drawCtx, const McfFontInfo& fontinfo, const McfColor& color,
+                                 const mcfchar *str, mcfint posx, mcfint posy, mcfint width, mcfint height,
+                                 MCFLabelAlignment align, mcfbyte padding)
+{
+    MCF_DEBUG();
+    /* pre-condition */
+    mcf_assert_return(str);
+    mcf_assert_return(drawCtx);
+
+    cairo_t* cr = static_cast<cairo_t*>(drawCtx);
+    cairo_identity_matrix(cr);
+    cairo_set_source_rgba(cr, color.r / 256.0, color.g / 256.0, color.b / 256.0, 1.0);
+    cairo_select_font_face(cr, fontinfo.fontname,
+                           fontinfo.isItalic ? CAIRO_FONT_SLANT_ITALIC : CAIRO_FONT_SLANT_NORMAL,
+                           fontinfo.isBold ? CAIRO_FONT_WEIGHT_BOLD : CAIRO_FONT_WEIGHT_NORMAL);
+
+    cairo_set_font_size(cr, fontinfo.fontsize);
+
+    cairo_text_extents_t textExtents;
+    cairo_text_extents(cr, str, &textExtents);
+    cairo_text_extents_t barExtents;
+    cairo_text_extents(cr, "|", &barExtents);
+
+    if (align == LABEL_ALIGN_CENTER_TOP || align == LABEL_ALIGN_CENTER_MIDDLE || align == LABEL_ALIGN_CENTER_BOTTOM) {
+        posx = posx + ((width - textExtents.width) / 2);
+    } else if (align == LABEL_ALIGN_RIGHT_TOP || align == LABEL_ALIGN_RIGHT_MIDDLE || align == LABEL_ALIGN_RIGHT_BOTTOM) {
+        posx = posx + (width - textExtents.width) - padding;
+    } else {
+        posx += padding;
+    }
+    if (align == LABEL_ALIGN_LEFT_MIDDLE || align == LABEL_ALIGN_CENTER_MIDDLE || align == LABEL_ALIGN_RIGHT_MIDDLE) {
+        posy = posy + ((height - barExtents.height) / 2);
+    } else if (align == LABEL_ALIGN_LEFT_BOTTOM || align == LABEL_ALIGN_CENTER_BOTTOM || align == LABEL_ALIGN_RIGHT_BOTTOM) {
+        posy = posy + (height - barExtents.height) - padding;
+    } else {
+        posy += padding;
+    }
+
+    /* FIXME : A workaround for displaying '_' correctly on its position */
+    /* MUST change the line below, with a full understanding on font drawing system */
+    cairo_move_to(cr, posx - textExtents.x_bearing, posy - barExtents.y_bearing);
+    cairo_show_text(cr, str);
+}
+
+/**
+ * Draws the given image on cairo-surface
+ */
+void
+CMCFGraphicsImplCairo::draw_image(mcfwindow window, const mcfdrawctx drawCtx, mcfchar* imgPath, mcfint destX, mcfint destY,
+                                  mcfint destWidth, mcfint destHeight, mcfint srcX, mcfint srcY, mcfint srcWidth, mcfint srcHeight)
+{
+    MCF_DEBUG();
+    /* pre-condition */
+    mcf_assert_return(imgPath);
+    mcf_assert_return(drawCtx);
+
+    cairo_t* cr = static_cast<cairo_t*>(drawCtx);
+    CMCFWindows *windows = CMCFWindows::get_instance();
+    CMCFImageProxy *proxy = CMCFImageProxy::get_instance();
+
+    if (windows && proxy) {
+        cairo_surface_t* imgSurface = static_cast<cairo_surface_t*>(proxy->get_image(imgPath));
+
+        if (imgSurface && cr) {
+            if (cairo_surface_status(imgSurface) == CAIRO_STATUS_SUCCESS) {
+                cairo_identity_matrix(cr);
+
+                cairo_translate(cr, destX - srcX, destY - srcY);
+
+                if (destWidth > 0 && destHeight > 0 && srcWidth == -1) {
+                    mcfint imagew = cairo_image_surface_get_width (imgSurface);
+                    mcfint imageh = cairo_image_surface_get_height (imgSurface);
+
+                    double scaleX = (double)destWidth / imagew;
+                    double scaleY = (double)destHeight / imageh;
+                    cairo_scale(cr, scaleX, scaleY);
+                }
+
+                if (srcWidth > 0) {
+                    cairo_rectangle (cr, srcX, srcY, srcWidth, srcHeight);
+                    cairo_clip (cr);
+                    cairo_new_path (cr);
+                }
+
+                cairo_set_source_surface(cr, imgSurface, 0, 0);
+                cairo_paint(cr);
+            }
+        }
+    }
+}
+
+/**
+ * Draws a rectangle on cairo-surface
+ */
+void
+CMCFGraphicsImplCairo::draw_rectangle(mcfwindow window, const mcfdrawctx drawCtx, mcfdouble posx, mcfdouble posy,
+                                      mcfdouble width, mcfdouble height, const mcfdouble lineWidth,
+                                      const McfColor& lineColor, mcfboolean fill, const McfColor& fillColor,
+                                      mcfdouble radius, mcffloat alpha)
+{
+    MCF_DEBUG();
+    /* pre-condition */
+    mcf_assert_return(drawCtx);
+
+    cairo_t* cr = static_cast<cairo_t*>(drawCtx);
+    cairo_identity_matrix(cr);
+
+    double x1,y1;
+
+    x1=posx+width;
+    y1=posy+height;
+    if (!width || !height)
+        return;
+    if (width/2<radius) {
+        if (height/2<radius) {
+            cairo_move_to  (cr, posx, (posy + y1)/2);
+            cairo_curve_to (cr, posx ,posy, posx, posy, (posx + x1)/2, posy);
+            cairo_curve_to (cr, x1, posy, x1, posy, x1, (posy + y1)/2);
+            cairo_curve_to (cr, x1, y1, x1, y1, (x1 + posx)/2, y1);
+            cairo_curve_to (cr, posx, y1, posx, y1, posx, (posy + y1)/2);
+        } else {
+            cairo_move_to  (cr, posx, posy + radius);
+            cairo_curve_to (cr, posx ,posy, posx, posy, (posx + x1)/2, posy);
+            cairo_curve_to (cr, x1, posy, x1, posy, x1, posy + radius);
+            cairo_line_to (cr, x1 , y1 - radius);
+            cairo_curve_to (cr, x1, y1, x1, y1, (x1 + posx)/2, y1);
+            cairo_curve_to (cr, posx, y1, posx, y1, posx, y1- radius);
+        }
+    } else {
+        if (height/2<radius) {
+            cairo_move_to  (cr, posx, (posy + y1)/2);
+            cairo_curve_to (cr, posx , posy, posx , posy, posx + radius, posy);
+            cairo_line_to (cr, x1 - radius, posy);
+            cairo_curve_to (cr, x1, posy, x1, posy, x1, (posy + y1)/2);
+            cairo_curve_to (cr, x1, y1, x1, y1, x1 - radius, y1);
+            cairo_line_to (cr, posx + radius, y1);
+            cairo_curve_to (cr, posx, y1, posx, y1, posx, (posy + y1)/2);
+        } else {
+            cairo_move_to  (cr, posx, posy + radius);
+            cairo_curve_to (cr, posx , posy, posx , posy, posx + radius, posy);
+            cairo_line_to (cr, x1 - radius, posy);
+            cairo_curve_to (cr, x1, posy, x1, posy, x1, posy + radius);
+            cairo_line_to (cr, x1 , y1 - radius);
+            cairo_curve_to (cr, x1, y1, x1, y1, x1 - radius, y1);
+            cairo_line_to (cr, posx + radius, y1);
+            cairo_curve_to (cr, posx, y1, posx, y1, posx, y1- radius);
+        }
+    }
+    cairo_close_path (cr);
+
+    if (fill) {
+        cairo_set_source_rgba (cr, fillColor.r / 256.0, fillColor.g / 256.0, fillColor.b / 256.0, alpha); //0.9
+        cairo_fill_preserve (cr);
+    }
+
+    cairo_set_source_rgb (cr, lineColor.r / 256.0, lineColor.g / 256.0, lineColor.b / 256.0); // 1  . 0
+    cairo_set_line_width (cr, lineWidth);//5.0
+    cairo_stroke (cr);
+}
+
+/**
+* Creates a surface for cairo
+*/
+static cairo_surface_t*
+load_cairo_surface(const gchar *filename)
+{
+    MCF_DEBUG();
+    cairo_surface_t *image = NULL;
+    image = cairo_image_surface_create_from_png(filename);
+    return image;
+}
+
+/**
+ * Loads the given image
+ * This function will be used in the image proxy class
+ */
+mcfimage
+CMCFGraphicsImplCairo::load_image(const mcfchar *imgPath)
+{
+    MCF_DEBUG();
+    return load_cairo_surface(imgPath);
+}
+
+/**
+ * Destroys and removes the given image from cache
+ */
+void
+CMCFGraphicsImplCairo::unload_image(mcfimage imgData)
+{
+    MCF_DEBUG();
+    cairo_surface_destroy(static_cast<cairo_surface_t*>(imgData));
+}
+
+/**
+ * Initializes the drawing context for double-buffering.
+ * This func should be called before using a drawing primitive at first.
+ */
+mcfdrawctx
+CMCFGraphicsImplCairo::begin_paint(const mcfwindow window, const mcfboolean forcedraw /* = FALSE */)
+{
+    MCF_DEBUG();
+    /* pre-condition */
+    cairo_t *cr = NULL;
+    /* Cairo contexts created in a GTK+ expose event handler cannot
+    be cached and reused between different expose events */
+    GtkWidget* widget;
+    widget = static_cast<GtkWidget*>(window);
+    if (!GTK_WIDGET_REALIZED(widget)) {
+        gtk_widget_realize(widget);
+    }
+    cr = gdk_cairo_create (widget->window);
+    return static_cast<mcfdrawctx>(cr);
+}
+
+/**
+ * Notices that drawing tasks have done.
+ */
+void
+CMCFGraphicsImplCairo::end_paint(const mcfwindow window, mcfdrawctx drawCtx)
+{
+    cairo_destroy(static_cast<cairo_t*>(drawCtx));
+}
+
+mcffont
+CMCFGraphicsImplCairo::create_font(const McfFontInfo& info)
+{
+    return NULL;
+}
+
+void
+CMCFGraphicsImplCairo::destroy_font(mcffont font)
+{
+}
+
+McfSize CMCFGraphicsImplCairo::get_image_size(mcfchar* imgPath)
+{
+    MCF_DEBUG();
+    McfSize ret = { 0, 0 };
+    CMCFImageProxy *proxy = CMCFImageProxy::get_instance();
+    cairo_surface_t* imgSurface = static_cast<cairo_surface_t*>(proxy->get_image(imgPath));
+    ret.width = cairo_image_surface_get_width(imgSurface);
+    ret.height = cairo_image_surface_get_height(imgSurface);
+    return ret;
+}
diff --git a/mcf/gwes/gtk/mcfgraphics-cairo.h b/mcf/gwes/gtk/mcfgraphics-cairo.h
new file mode 100755 (executable)
index 0000000..a59720d
--- /dev/null
@@ -0,0 +1,51 @@
+/*
+ * Copyright 2012  Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.tizenopensource.org/license
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+
+#include "mcfgraphics.h"
+#include <gtk/gtk.h>
+
+#ifndef __MCF_GRAPHICS_CAIRO_H__
+#define __MCF_GRAPHICS_CAIRO_H__
+
+namespace mcf
+{
+class CMCFGraphicsImplCairo : public CMCFGraphicsImpl
+{
+public :
+    CMCFGraphicsImplCairo();
+    ~CMCFGraphicsImplCairo();
+
+    void draw_image(mcfwindow window, const mcfdrawctx drawCtx, mcfchar* imgPath, mcfint destX, mcfint destY,
+                    mcfint destWidth, mcfint destHeight, mcfint srcX, mcfint srcY, mcfint srcWidth, mcfint srcHeight);
+    void draw_text(mcfwindow window, const mcfdrawctx drawCtx, const McfFontInfo& fontinfo, const McfColor& color,
+                   const mcfchar *str, mcfint posx, mcfint posy, mcfint width, mcfint height,
+                   MCFLabelAlignment align, mcfbyte padding);
+    mcfimage load_image(const mcfchar* imgPath);
+    void unload_image(mcfimage imgData);
+    mcfdrawctx begin_paint(const mcfwindow window, const mcfboolean forcedraw = FALSE);
+    void end_paint(const mcfwindow window, mcfdrawctx drawCtx);
+    mcffont create_font(const McfFontInfo& info);
+    void destroy_font(mcffont font);
+    void draw_rectangle(mcfwindow window, const mcfdrawctx drawCtx, mcfdouble posx, mcfdouble posy,
+                        mcfdouble width, mcfdouble height, const mcfdouble lineWidth, const McfColor& lineColor,
+                        mcfboolean fill, const McfColor& fillColor, mcfdouble radius, mcffloat alpha);
+    McfSize get_image_size(mcfchar* imgPath);
+private:
+};
+} /* End of mcf namespace */
+#endif __MCF_GRAPHICS_CAIRO_H__
diff --git a/mcf/gwes/gtk/mcfgraphics-gtk.cpp b/mcf/gwes/gtk/mcfgraphics-gtk.cpp
new file mode 100755 (executable)
index 0000000..8113074
--- /dev/null
@@ -0,0 +1,330 @@
+/*
+ * Copyright 2012  Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.tizenopensource.org/license
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+
+#include "mcfgraphics-gtk.h"
+#include "mcfimageproxy.h"
+#include "mcffontproxy.h"
+#include "mcfdebug.h"
+#include "mcfwindows.h"
+
+using namespace mcf;
+
+/**
+ * Constructor
+ */
+CMCFGraphicsImplGtk::CMCFGraphicsImplGtk()
+{
+    MCF_DEBUG();
+    /* Initializes all window resources */
+}
+
+/**
+ * De-constructor
+ */
+CMCFGraphicsImplGtk::~CMCFGraphicsImplGtk()
+{
+    MCF_DEBUG();
+}
+
+
+void
+CMCFGraphicsImplGtk::draw_image(mcfwindow window, const mcfdrawctx drawCtx, mcfchar* imgPath, mcfint destX, mcfint destY,
+                                mcfint destWidth, mcfint destHeight, mcfint srcX, mcfint srcY, mcfint srcWidth, mcfint srcHeight)
+{
+    MCF_DEBUG();
+    /* pre-condition */
+    mcf_assert_return(imgPath);
+
+    CMCFWindows *windows = CMCFWindows::get_instance();
+    CMCFImageProxy *proxy = CMCFImageProxy::get_instance();
+
+    GdkPixbuf *pixbuf;
+    GdkPixbuf *temp;
+    GdkColormap *rgba;
+    GdkBitmap* mask = NULL;
+
+    if (windows && proxy) {
+        GdkPixmap* imgdata = static_cast<GdkPixmap*>(proxy->get_image(imgPath));
+        GtkWidget* widget = static_cast<GtkWidget*>(window);
+
+        if (imgdata && widget) {
+            gdk_draw_drawable(widget->window,
+                              widget->style->fg_gc[GTK_STATE_NORMAL],
+                              imgdata,
+                              srcX, srcY,
+                              destX, destY,
+                              destWidth, destHeight
+                              );
+        }
+    }
+}
+
+static GdkPixmap*
+load_pixmap(const gchar *filename)
+{
+    MCF_DEBUG();
+
+    GdkPixbuf *pixbuf = NULL;
+    GdkPixbuf *temp = NULL;
+    guchar *data = NULL;
+    int width = 0;
+    int height = 0;
+    int stride = 0;
+    int i =0;
+
+    GdkPixmap *pixmap = NULL;
+    GdkColormap *rgba;
+    GdkBitmap* mask = NULL;
+    if (g_file_test(filename,G_FILE_TEST_EXISTS)) {
+        pixbuf = gdk_pixbuf_new_from_file(filename, NULL);
+    } else {
+        return NULL;
+    }
+
+    if (!gdk_pixbuf_get_has_alpha(pixbuf)) {
+        temp = pixbuf;
+        pixbuf = gdk_pixbuf_add_alpha(temp, FALSE, 0, 0, 0);
+        if (temp) {
+            g_object_unref((temp));
+        }
+    }
+
+    width = gdk_pixbuf_get_width(pixbuf);
+    height = gdk_pixbuf_get_height(pixbuf);
+    pixmap = gdk_pixmap_new(NULL, width, height, 32);
+    gdk_draw_pixbuf (pixmap,
+                     NULL,
+                     pixbuf,
+                     0,
+                     0,
+                     0,
+                     0,
+                     width,
+                     height,
+                     GDK_RGB_DITHER_NONE,
+                     0,
+                     0);
+    g_object_unref(pixbuf);
+    return pixmap;
+}
+
+mcfimage
+CMCFGraphicsImplGtk::load_image(const mcfchar *imgPath)
+{
+    MCF_DEBUG();
+    GdkPixmap* imgData = NULL;
+
+    imgData = load_pixmap(imgPath);
+
+    return imgData;
+}
+
+void
+CMCFGraphicsImplGtk::unload_image(mcfimage imgData)
+{
+    MCF_DEBUG();
+    /* pre-condition */
+    mcf_assert_return(imgData);
+
+    g_object_unref(static_cast<GdkPixmap*>(imgData));
+}
+
+/**
+ * Initializes the drawing context for double-buffering.
+ * This func should be called before using a drawing primitive at first.
+ */
+mcfdrawctx
+CMCFGraphicsImplGtk::begin_paint(const mcfwindow window, const mcfboolean forcedraw /* = FALSE */)
+{
+    MCF_DEBUG();
+    /* pre-condition */
+    cairo_t *cr = NULL;
+    /* Cairo contexts created in a GTK+ expose event handler cannot
+    be cached and reused between different expose events */
+    GtkWidget* widget;
+    widget = static_cast<GtkWidget*>(window);
+    if (!GTK_WIDGET_REALIZED(widget)) {
+        gtk_widget_realize(widget);
+    }
+    cr = gdk_cairo_create (widget->window);
+    return static_cast<mcfdrawctx>(cr);
+}
+
+/**
+ * Notices that drawing tasks have done.
+ */
+void
+CMCFGraphicsImplGtk::end_paint(const mcfwindow window, mcfdrawctx drawCtx)
+{
+    cairo_destroy(static_cast<cairo_t*>(drawCtx));
+}
+
+mcffont
+CMCFGraphicsImplGtk::create_font(const McfFontInfo& info)
+{
+    return NULL;
+}
+
+void
+CMCFGraphicsImplGtk::destroy_font(mcffont font)
+{
+}
+
+/**
+ * Draws the given text on cairo-surface
+ */
+void
+CMCFGraphicsImplGtk::draw_text(mcfwindow window, const mcfdrawctx drawCtx, const McfFontInfo& fontinfo, const McfColor& color,
+                               const mcfchar *str, mcfint posx, mcfint posy, mcfint width, mcfint height,
+                               MCFLabelAlignment align, mcfbyte padding)
+{
+    MCF_DEBUG();
+    /* pre-condition */
+    mcf_assert_return(str);
+    mcf_assert_return(drawCtx);
+
+    cairo_t* cr = static_cast<cairo_t*>(drawCtx);
+    cairo_identity_matrix(cr);
+    cairo_set_source_rgba(cr, color.r / 256.0, color.g / 256.0, color.b / 256.0, 1.0);
+    cairo_select_font_face(cr, fontinfo.fontname,
+                           fontinfo.isItalic ? CAIRO_FONT_SLANT_ITALIC : CAIRO_FONT_SLANT_NORMAL,
+                           fontinfo.isBold ? CAIRO_FONT_WEIGHT_BOLD : CAIRO_FONT_WEIGHT_NORMAL);
+
+    cairo_set_font_size(cr, fontinfo.fontsize);
+
+    cairo_text_extents_t textExtents;
+    cairo_text_extents(cr, str, &textExtents);
+    cairo_text_extents_t barExtents;
+    cairo_text_extents(cr, "|", &barExtents);
+
+    if(textExtents.width > width) {
+        int newSize = fontinfo.fontsize - (fontinfo.fontsize * (float)(textExtents.width - width)) / width - 1;
+        cairo_set_font_size(cr, newSize);
+
+        cairo_text_extents(cr, str, &textExtents);
+        cairo_text_extents(cr, "|", &barExtents);
+    }
+
+    if (align == LABEL_ALIGN_CENTER_TOP || align == LABEL_ALIGN_CENTER_MIDDLE || align == LABEL_ALIGN_CENTER_BOTTOM) {
+        posx = posx + ((width - textExtents.width) / 2);
+    } else if (align == LABEL_ALIGN_RIGHT_TOP || align == LABEL_ALIGN_RIGHT_MIDDLE || align == LABEL_ALIGN_RIGHT_BOTTOM) {
+        posx = posx + (width - textExtents.width) - padding;
+    } else {
+        posx += padding;
+    }
+    if (align == LABEL_ALIGN_LEFT_MIDDLE || align == LABEL_ALIGN_CENTER_MIDDLE || align == LABEL_ALIGN_RIGHT_MIDDLE) {
+        posy = posy + ((height - barExtents.height) / 2);
+    } else if (align == LABEL_ALIGN_LEFT_BOTTOM || align == LABEL_ALIGN_CENTER_BOTTOM || align == LABEL_ALIGN_RIGHT_BOTTOM) {
+        posy = posy + (height - barExtents.height) - padding;
+    } else {
+        posy += padding;
+    }
+
+    /* FIXME : A workaround for displaying '_' correctly on its position */
+    /* MUST change the line below, with a full understanding on font drawing system */
+    cairo_move_to(cr, posx - textExtents.x_bearing, posy - barExtents.y_bearing);
+    cairo_show_text(cr, str);
+}
+
+/**
+ * Draws a rectangle on cairo-surface
+ */
+void
+CMCFGraphicsImplGtk::draw_rectangle(mcfwindow window, const mcfdrawctx drawCtx, mcfdouble posx, mcfdouble posy,
+                                    mcfdouble width, mcfdouble height, const mcfdouble lineWidth, const McfColor& lineColor,
+                                    mcfboolean fill, const McfColor& fillColor, mcfdouble radius, mcffloat alpha)
+{
+    MCF_DEBUG();
+    /* pre-condition */
+    mcf_assert_return(drawCtx);
+
+    cairo_t* cr = static_cast<cairo_t*>(drawCtx);
+    cairo_identity_matrix(cr);
+
+    double x1,y1;
+
+    x1=posx+width;
+    y1=posy+height;
+    if (!width || !height)
+        return;
+    if (width/2<radius) {
+        if (height/2<radius) {
+            cairo_move_to  (cr, posx, (posy + y1)/2);
+            cairo_curve_to (cr, posx ,posy, posx, posy, (posx + x1)/2, posy);
+            cairo_curve_to (cr, x1, posy, x1, posy, x1, (posy + y1)/2);
+            cairo_curve_to (cr, x1, y1, x1, y1, (x1 + posx)/2, y1);
+            cairo_curve_to (cr, posx, y1, posx, y1, posx, (posy + y1)/2);
+        } else {
+            cairo_move_to  (cr, posx, posy + radius);
+            cairo_curve_to (cr, posx ,posy, posx, posy, (posx + x1)/2, posy);
+            cairo_curve_to (cr, x1, posy, x1, posy, x1, posy + radius);
+            cairo_line_to (cr, x1 , y1 - radius);
+            cairo_curve_to (cr, x1, y1, x1, y1, (x1 + posx)/2, y1);
+            cairo_curve_to (cr, posx, y1, posx, y1, posx, y1- radius);
+        }
+    } else {
+        if (height/2<radius) {
+            cairo_move_to  (cr, posx, (posy + y1)/2);
+            cairo_curve_to (cr, posx , posy, posx , posy, posx + radius, posy);
+            cairo_line_to (cr, x1 - radius, posy);
+            cairo_curve_to (cr, x1, posy, x1, posy, x1, (posy + y1)/2);
+            cairo_curve_to (cr, x1, y1, x1, y1, x1 - radius, y1);
+            cairo_line_to (cr, posx + radius, y1);
+            cairo_curve_to (cr, posx, y1, posx, y1, posx, (posy + y1)/2);
+        } else {
+            cairo_move_to  (cr, posx, posy + radius);
+            cairo_curve_to (cr, posx , posy, posx , posy, posx + radius, posy);
+            cairo_line_to (cr, x1 - radius, posy);
+            cairo_curve_to (cr, x1, posy, x1, posy, x1, posy + radius);
+            cairo_line_to (cr, x1 , y1 - radius);
+            cairo_curve_to (cr, x1, y1, x1, y1, x1 - radius, y1);
+            cairo_line_to (cr, posx + radius, y1);
+            cairo_curve_to (cr, posx, y1, posx, y1, posx, y1- radius);
+        }
+    }
+    cairo_close_path (cr);
+
+    if (fill) {
+        cairo_set_source_rgba (cr, fillColor.r / 256.0, fillColor.g / 256.0, fillColor.b / 256.0, alpha); //0.9
+        cairo_fill_preserve (cr);
+    }
+
+    cairo_set_source_rgb (cr, lineColor.r / 256.0, lineColor.g / 256.0, lineColor.b / 256.0); // 1  . 0
+    cairo_set_line_width (cr, lineWidth);//5.0
+    cairo_stroke (cr);
+}
+
+McfSize
+CMCFGraphicsImplGtk::get_image_size(mcfchar* imgPath)
+{
+    MCF_DEBUG();
+    McfSize ret = { 0, 0 };
+    GdkPixbuf *pixbuf = NULL;
+    if (g_file_test(imgPath,G_FILE_TEST_EXISTS)) {
+        pixbuf = gdk_pixbuf_new_from_file(imgPath, NULL);
+    } else {
+        return ret;
+    }
+
+    ret.width = gdk_pixbuf_get_width(pixbuf);
+    ret.height = gdk_pixbuf_get_height(pixbuf);
+    g_object_unref(pixbuf);
+    return ret;
+}
+
+
diff --git a/mcf/gwes/gtk/mcfgraphics-gtk.h b/mcf/gwes/gtk/mcfgraphics-gtk.h
new file mode 100755 (executable)
index 0000000..574854a
--- /dev/null
@@ -0,0 +1,54 @@
+/*
+ * Copyright 2012  Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.tizenopensource.org/license
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+
+#include "mcfgraphics.h"
+#include <gtk/gtk.h>
+
+#ifndef __MCF_GRAPHICS_GTK_H__
+#define __MCF_GRAPHICS_GTK_H__
+
+namespace mcf
+{
+class CMCFGraphicsImplGtk : public CMCFGraphicsImpl
+{
+public :
+    CMCFGraphicsImplGtk();
+    ~CMCFGraphicsImplGtk();
+
+    void draw_image(mcfwindow window, const mcfdrawctx drawCtx, mcfchar* imgPath, mcfint destX, mcfint destY,
+                    mcfint destWidth, mcfint destHeight, mcfint srcX, mcfint srcY, mcfint srcWidth, mcfint srcHeight);
+    mcfimage load_image(const mcfchar* imgPath);
+    void unload_image(mcfimage imgData);
+
+    mcffont create_font(const McfFontInfo& info);
+    void destroy_font(mcffont font);
+    void draw_text(mcfwindow window, const mcfdrawctx drawCtx, const McfFontInfo& fontinfo, const McfColor& color,
+                   const mcfchar *str, mcfint posx, mcfint posy, mcfint width, mcfint height,
+                   MCFLabelAlignment align, mcfbyte padding);
+
+    void draw_rectangle(mcfwindow window, const mcfdrawctx drawCtx, mcfdouble posx, mcfdouble posy,
+                        mcfdouble width, mcfdouble height, const mcfdouble lineWidth, const McfColor& lineColor,
+                        mcfboolean fill, const McfColor& fillColor, mcfdouble radius, mcffloat alpha);
+    mcfdrawctx begin_paint(const mcfwindow window, const mcfboolean forcedraw = FALSE);
+    void end_paint(const mcfwindow window, mcfdrawctx drawCtx);
+    McfSize get_image_size(mcfchar* imgPath);
+
+private:
+};
+} /* End of mcf namespace */
+#endif __MCF_GRAPHICS_GTK_H__
diff --git a/mcf/gwes/gtk/mcfwindows-gtk.cpp b/mcf/gwes/gtk/mcfwindows-gtk.cpp
new file mode 100755 (executable)
index 0000000..7ba491a
--- /dev/null
@@ -0,0 +1,463 @@
+/*
+ * Copyright 2012  Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.tizenopensource.org/license
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+
+#include "mcfwindows-gtk.h"
+#include "mcfdebug.h"
+#include "mcfcontroller.h"
+#include "mcfcontext.h"
+#include "mcfresourcecache.h"
+
+using namespace mcf;
+
+/**
+ * Constructor
+ */
+CMCFWindowsImplGtk::CMCFWindowsImplGtk()
+{
+    MCF_DEBUG();
+    /* Initializes all window resources */
+}
+
+/**
+ * De-constructor
+ */
+CMCFWindowsImplGtk::~CMCFWindowsImplGtk()
+{
+    MCF_DEBUG();
+}
+
+/**
+ * Make a transparent window
+ */
+static void
+make_transparent_window (GtkWidget *window)
+{
+    MCF_DEBUG();
+    GdkScreen *screen;
+    GdkColormap *colormap;
+
+    screen = gtk_widget_get_screen (window);
+    if (!screen) {
+        g_warning ("failed to get window's screen");
+        return;
+    }
+
+    colormap = gdk_screen_get_rgba_colormap (screen);
+    if (!colormap) {
+        g_warning ("failed to get RGBA colormap");
+        return;
+    }
+
+    gtk_widget_set_colormap (window, colormap);
+    gtk_widget_set_app_paintable (window, TRUE);
+    gtk_widget_realize (window);
+
+}
+
+
+/**
+ * Create a content window and binds it into given parent window as a child
+ */
+mcfwindow
+CMCFWindowsImplGtk::create_base_window(const mcfwindow parentWnd, McfWindowContext *winCtx,
+                                              const mcf16 width, const mcf16 height)
+{
+    MCF_DEBUG();
+
+    GtkWidget* pWindow = NULL;
+
+    /* pre-condition */
+    mcf_assert(parentWnd != NULL);
+    mcf_assert(winCtx != NULL);
+    mcf_assert(winCtx->etcInfoPtr == NULL);
+
+    if (winCtx->window == NULL) {
+        pWindow = (GtkWidget*)parentWnd;
+
+        if (GTK_WIDGET_TOPLEVEL(pWindow)) {
+            pWindow = (GtkWidget*)parentWnd;
+            winCtx->etcInfoPtr = NULL;
+            winCtx->window = pWindow;
+            make_transparent_window(pWindow);
+        } else {
+            GtkWidget *drawarea = NULL;
+            drawarea = gtk_drawing_area_new();
+            gtk_widget_set_size_request(pWindow, width, height);
+            gtk_widget_set_size_request(drawarea, width, height);
+            gtk_box_pack_start(GTK_BOX(pWindow), drawarea, TRUE, TRUE, 0);
+            gtk_widget_show (drawarea);
+            gtk_widget_show (pWindow);
+            winCtx->etcInfoPtr = static_cast<void*>(drawarea);
+            winCtx->window = drawarea;
+            make_transparent_window(drawarea);
+        }
+    }
+    /* post-condition */
+    return winCtx->window;
+}
+
+/**
+ * Creates a window
+ */
+mcfwindow
+CMCFWindowsImplGtk::create_window(const mcfwindow parentWnd, McfWindowContext *winCtx,
+                                         const mcf16 width, const mcf16 height)
+{
+    MCF_DEBUG();
+    /* pre-condition */
+    mcf_assert(parentWnd);
+    mcf_assert(winCtx);
+    mcf_assert(winCtx->etcInfoPtr == NULL);
+
+    GtkWidget* window = NULL;
+
+    if (winCtx->window == NULL) {
+        window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+        gtk_window_set_type_hint(GTK_WINDOW (window), GDK_WINDOW_TYPE_HINT_UTILITY);
+        gtk_window_set_accept_focus(GTK_WINDOW(window), FALSE);
+#ifdef NO_SOCKETPLUG
+        GtkWidget* toplevel = gtk_widget_get_toplevel((GtkWidget*)parentWnd);
+        gtk_window_set_transient_for(GTK_WINDOW(window), GTK_WINDOW(toplevel));
+#endif
+        /* Sets a window relation between parent and popup */
+        make_transparent_window(window);
+        gtk_window_set_default_size(GTK_WINDOW(window), width, height);
+#ifndef NO_SOCKETPLUG
+        gtk_widget_set_app_paintable(window, TRUE);
+#endif
+        winCtx->etcInfoPtr = NULL;
+        winCtx->window = window;
+    }
+
+    return window;
+}
+
+/**
+ * Creates the dim window
+ */
+mcfwindow
+CMCFWindowsImplGtk::create_dim_window(const mcfwindow parentWnd, McfWindowContext *winCtx,
+                                             const mcf16 width, const mcf16 height)
+{
+    MCF_DEBUG();
+    /* pre-condition */
+    mcf_assert(parentWnd);
+    mcf_assert(winCtx);
+    mcf_assert(winCtx->etcInfoPtr == NULL);
+    GtkWidget* window = NULL;
+
+    if (winCtx->window == NULL) {
+        window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
+        gtk_window_set_type_hint(GTK_WINDOW (window), GDK_WINDOW_TYPE_HINT_UTILITY);
+
+        gtk_widget_set_name(window, "dialog_dim_window");
+#ifdef NO_SOCKETPLUG
+        gtk_window_set_transient_for(GTK_WINDOW(window), GTK_WINDOW(gtk_widget_get_toplevel((GtkWidget*)parentWnd)));
+#else
+        gtk_window_set_type_hint(GTK_WINDOW(window), GDK_WINDOW_TYPE_HINT_POPUP_MENU);
+#endif
+        gtk_window_set_accept_focus(GTK_WINDOW(window), FALSE);
+        gtk_widget_set_size_request(window, width, height);
+        gtk_window_set_opacity(GTK_WINDOW(window), 0.5);
+        gtk_widget_realize(window);
+        winCtx->etcInfoPtr = NULL;
+        winCtx->window = window;
+    }
+
+    return window;
+}
+
+/**
+ * Make a window relation between parent and child
+ * Caution: Currently, If we use transient_for them the ISE will occure some crash. It needs to check X11
+ */
+void
+CMCFWindowsImplGtk::set_parent(const mcfwindow parentWindow, const mcfwindow window)
+{
+    MCF_DEBUG();
+    mcf_assert_return(window);
+    mcf_assert_return(parentWindow);
+#ifdef NO_SOCKETPLUG
+    GtkWidget* widget = static_cast<GtkWidget*>(parentWindow);
+    GtkWidget* toplevel = gtk_widget_get_toplevel(widget);
+#else
+    GtkWindow* gtkParentWindow = static_cast<GtkWindow*>(parentWindow);
+#endif
+    GtkWindow* gtkWindow = static_cast<GtkWindow*>(window);
+#ifdef NO_SOCKETPLUG
+    gtk_window_set_transient_for(gtkWindow, GTK_WINDOW(toplevel));
+#endif
+}
+
+/**
+ * Destroys the given window
+ */
+bool
+CMCFWindowsImplGtk::destroy_window(mcfwindow window)
+{
+    MCF_DEBUG();
+    mcf_assert_return_false(window);
+    /* add codes for destroying window */
+    GtkWidget* widget = static_cast<GtkWidget*>(window);
+    gtk_widget_destroy(widget);
+    return TRUE;
+}
+
+/**
+ * Shows the given window
+ */
+void
+CMCFWindowsImplGtk::show_window(const mcfwindow window, mcfboolean queue)
+{
+    MCF_DEBUG();
+    mcf_assert_return(window);
+    GtkWidget* widget = static_cast<GtkWidget*>(window);
+    gtk_widget_show(widget);
+
+    /*Forcing expose on the magnifier window*/
+    if (queue) {
+        gtk_widget_queue_draw(widget);
+    } else {
+        gdk_window_invalidate_rect(widget->window, NULL, TRUE);
+        gdk_window_process_updates(widget->window, TRUE);
+    }
+
+    /*we will use always on top style when the window is created */
+    /*we cannot use keep_above, becase the other toplevel window cannot appear if we use it*/
+    /* X team will fix it */
+    CMCFWindows *windows = CMCFWindows::get_instance();
+    if (windows->get_base_window() != window && windows->get_dim_window() != window) {
+#ifndef NO_SOCKETPLUG
+        gdk_window_raise(widget->window);
+#endif
+    } else if (windows->get_dim_window() == window) {
+#ifndef NO_SOCKETPLUG
+        gdk_window_raise(widget->window);
+#endif
+    } else if (windows->get_base_window() == window) {
+#ifndef NO_SOCKETPLUG
+        gdk_window_raise(gtk_widget_get_toplevel(widget)->window);
+#endif
+    }
+}
+
+/**
+ * Hides the given window
+ */
+void
+CMCFWindowsImplGtk::hide_window(const mcfwindow window,  const mcfboolean fForce)
+{
+    MCF_DEBUG();
+    mcf_assert_return(window);
+    GtkWidget* widget = static_cast<GtkWidget*>(window);
+    CMCFWindows *windows = CMCFWindows::get_instance();
+    if (windows->get_magnifier_window() == window && fForce == FALSE) {
+        /* Fix me : The below is a temporary code for magnifier speed enhancement */
+#ifdef NO_SOCKETPLUG
+        gint root_x, root_y;
+        gtk_window_get_position (GTK_WINDOW(widget), &root_x, &root_y);
+        if (GTK_WIDGET_MAPPED(widget)) {
+
+            /* Window rotation*/
+            CMCFContext* context = CMCFContext::get_instance();
+            if (context->get_display() == DISPLAY_LANDSCAPE) {
+                gtk_window_move(GTK_WINDOW(widget), gdk_screen_get_height(gdk_screen_get_default()) - 1,
+                                       gdk_screen_get_width(gdk_screen_get_default())-1);
+            } else {
+                gtk_window_move(GTK_WINDOW(widget), gdk_screen_get_width(gdk_screen_get_default()) - 1,
+                                       gdk_screen_get_height(gdk_screen_get_default())-1);
+            }
+#else
+        if (GTK_WIDGET_VISIBLE(widget)) {
+            gtk_window_move(GTK_WINDOW(widget), 0, gdk_screen_get_height(gdk_screen_get_default())+1);
+#endif
+        }
+    } else {
+        if (GTK_WIDGET_VISIBLE(widget)) {
+            gtk_widget_hide(widget);
+        }
+    }
+
+}
+
+/**
+ * Moves the window to the given position
+ */
+void
+CMCFWindowsImplGtk::move_window(const mcfwindow window, const mcf16 x, const mcf16 y)
+{
+    MCF_DEBUG();
+    mcf_assert_return(window);
+    GtkWidget* widget = static_cast<GtkWidget*>(window);
+    gtk_window_move(GTK_WINDOW(widget), x, y);
+}
+
+/**
+* Resizes the window to the given metric
+*/
+void
+CMCFWindowsImplGtk::resize_window(const mcfwindow window, const mcf16 width, const mcf16 height)
+{
+    MCF_DEBUG();
+    mcf_assert_return(window);
+    GtkWidget* widget = static_cast<GtkWidget*>(window);
+    if (GTK_IS_WINDOW(widget)) {
+        gtk_widget_set_size_request(GTK_WIDGET(widget), width, height);
+    }
+}
+
+/**
+* Resizes the window to the given metric
+*/
+void
+CMCFWindowsImplGtk::move_resize_window(const mcfwindow window, const mcf16 x, const mcf16 y,
+                                              const mcf16 width, const mcf16 height)
+{
+    MCF_DEBUG();
+    mcf_assert_return(window);
+    GtkWidget* widget = static_cast<GtkWidget*>(window);
+    gdk_window_move_resize(GDK_WINDOW(widget->window), x, y, width, height);
+}
+
+
+/**
+* Update the window to redraw given area
+*/
+void
+CMCFWindowsImplGtk::update_window(const mcfwindow window, const mcf16 x, const mcf16 y,
+                                         const mcf16 width, const mcf16 height)
+{
+    MCF_DEBUG();
+    mcf_assert_return(window);
+    GtkWidget* widget = static_cast<GtkWidget*>(window);
+
+    if (!GTK_WIDGET_VISIBLE(widget)) gtk_widget_show(widget);
+
+    if (x + y + width + height == 0) {
+        gdk_window_invalidate_rect(widget->window, NULL, TRUE);
+    } else {
+        GdkRectangle rect = { x, y, width, height} ;
+        gdk_window_invalidate_rect(widget->window, &rect, TRUE);
+    }
+
+    gdk_window_process_updates(widget->window, TRUE);
+}
+
+/**
+ * Returns the position of x,y,width,height of the given window
+ */
+mcfboolean
+CMCFWindowsImplGtk::get_window_rect(const mcfwindow window, McfRectangle *rect)
+{
+    MCF_DEBUG();
+    mcfboolean ret = FALSE;
+    GtkWidget* widget = static_cast<GtkWidget*>(window);
+    if (rect && GTK_WIDGET_REALIZED(widget)) {
+        CMCFContext *context = CMCFContext::get_instance();
+        CMCFWindows *windows = CMCFWindows::get_instance();
+        if (context->get_display() == DISPLAY_LANDSCAPE) {
+            gdk_window_get_root_origin (GDK_WINDOW(gtk_widget_get_toplevel(widget)->window),  &(rect->x), &(rect->y));
+            if (window == windows->get_base_window()) {
+                CMCFUtils *utils = CMCFUtils::get_instance();
+                CMCFResourceCache *cache = CMCFResourceCache::get_instance();
+
+                mcfint scnWidth, scnHeight;
+                utils->get_screen_resolution(&scnWidth, &scnHeight);
+                rect->y = scnWidth - cache->get_cur_layout(window)->height;
+            }
+        } else {
+            gdk_window_get_root_origin (GDK_WINDOW(gtk_widget_get_toplevel(widget)->window),  &(rect->x), &(rect->y));
+            if (window == windows->get_base_window()) {
+                CMCFUtils *utils = CMCFUtils::get_instance();
+                CMCFResourceCache *cache = CMCFResourceCache::get_instance();
+
+                mcfint scnWidth, scnHeight;
+                utils->get_screen_resolution(&scnWidth, &scnHeight);
+                rect->y = scnHeight - cache->get_cur_layout(window)->height;
+            }
+        }
+        gtk_window_get_size (GTK_WINDOW(gtk_widget_get_toplevel(widget)), &(rect->width), &(rect->height));
+
+        ret = TRUE;
+    }
+    return ret;
+}
+
+/**
+ * Sets rotation
+ */
+void
+CMCFWindowsImplGtk::set_window_rotation(const mcfwindow window)
+{
+    MCF_DEBUG();
+    GtkWidget* widget = gtk_widget_get_toplevel(static_cast<GtkWidget*>(window));
+}
+
+
+/**
+ * Shows a message box
+ */
+void
+CMCFWindowsImplGtk::show_message_box(const mcfwindow parentWnd, const mcf8 msgType, mcfchar* title, mcfchar* msg)
+{
+    MCF_DEBUG();
+    mcf_assert_return(strlen(msg) > 0);
+
+    GtkWidget *dialog = NULL;
+
+    switch (msgType) {
+    case MCF_MSG_BOX_TYPE_INFO:
+        dialog = gtk_message_dialog_new((GtkWindow*)parentWnd,
+                                        GTK_DIALOG_DESTROY_WITH_PARENT,
+                                        GTK_MESSAGE_INFO,
+                                        GTK_BUTTONS_OK,
+                                        msg, "");
+        break;
+    case MCF_MSG_BOX_TYPE_ERROR:
+        dialog = gtk_message_dialog_new((GtkWindow*)parentWnd,
+                                        GTK_DIALOG_DESTROY_WITH_PARENT,
+                                        GTK_MESSAGE_ERROR,
+                                        GTK_BUTTONS_OK,
+                                        msg);
+        break;
+    case MCF_MSG_BOX_TYPE_WARNING:
+        dialog = gtk_message_dialog_new((GtkWindow*)parentWnd,
+                                        GTK_DIALOG_DESTROY_WITH_PARENT,
+                                        GTK_MESSAGE_WARNING,
+                                        GTK_BUTTONS_OK,
+                                        msg);
+        break;
+    default:
+        break;
+    }
+
+    if (dialog) {
+        gtk_window_set_title(GTK_WINDOW(dialog), title);
+        gtk_dialog_run(GTK_DIALOG(dialog));
+        gtk_widget_destroy(dialog);
+    }
+}
+
+
+void
+CMCFWindowsImplGtk::set_keep_above(const mcfwindow window, const mcfboolean keepabove)
+{
+    MCF_DEBUG();
+
+    gtk_window_set_keep_above(GTK_WINDOW(window), keepabove);
+}
diff --git a/mcf/gwes/gtk/mcfwindows-gtk.h b/mcf/gwes/gtk/mcfwindows-gtk.h
new file mode 100755 (executable)
index 0000000..323167c
--- /dev/null
@@ -0,0 +1,50 @@
+/*
+ * Copyright 2012  Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.tizenopensource.org/license
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+
+#include "mcfwindows.h"
+#include <gtk/gtk.h>
+
+#ifndef __MCF_WINDOWS_GTK_H__
+#define __MCF_WINDOWS_GTK_H__
+
+namespace mcf
+{
+class CMCFWindowsImplGtk : public CMCFWindowsImpl
+{
+public :
+    CMCFWindowsImplGtk();
+    ~CMCFWindowsImplGtk();
+
+    mcfwindow create_base_window(const mcfwindow parentWnd, McfWindowContext *winCtx, const mcf16 width, const mcf16 height);
+    mcfwindow create_window(const mcfwindow parentWnd, McfWindowContext *winCtx, const mcf16 width, const mcf16 height);
+    mcfwindow create_dim_window(const mcfwindow parentWnd, McfWindowContext *winCtx, const mcf16 width, const mcf16 height);
+    bool destroy_window(mcfwindow window);
+    void show_window(const mcfwindow window, mcfboolean queue);
+    void hide_window(const mcfwindow window,  const mcfboolean fForce = FALSE);
+    void move_window(const mcfwindow window, const mcf16 x, const mcf16 y);
+    void resize_window(const mcfwindow window, const mcf16 width, const mcf16 height);
+    void move_resize_window(const mcfwindow window, const mcf16 x, const mcf16 y, const mcf16 width, const mcf16 height);
+    void update_window(const mcfwindow window, const mcf16 x = 0, const mcf16 y = 0, const mcf16 width = 0, const mcf16 height = 0);
+    void set_window_rotation(const mcfwindow window);
+    void show_message_box(const mcfwindow parentWnd, const mcf8 msgType, mcfchar* title, mcfchar* msg);
+    mcfboolean get_window_rect(const mcfwindow window, McfRectangle *rect);
+    void set_parent(const mcfwindow parentWindow, const mcfwindow window);
+    void set_keep_above(const mcfwindow window, const mcfboolean keepabove);
+};
+} /* End of mcf namespace */
+#endif __MCF_WINDOWS_GTK_H__
diff --git a/mcf/gwes/win32/mcfevents-win32.cpp b/mcf/gwes/win32/mcfevents-win32.cpp
new file mode 100755 (executable)
index 0000000..95288b4
--- /dev/null
@@ -0,0 +1,27 @@
+/*
+ * Copyright 2012  Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.tizenopensource.org/license
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+\r
+#include "mcfevents-win32.h"\r
+\r
+using namespace mcf;\r
+\r
+void\r
+CMCFEventsImplWin32::init() {\r
+}\r
+\r
+\r
diff --git a/mcf/gwes/win32/mcfevents-win32.h b/mcf/gwes/win32/mcfevents-win32.h
new file mode 100755 (executable)
index 0000000..9a301ed
--- /dev/null
@@ -0,0 +1,32 @@
+/*
+ * Copyright 2012  Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.tizenopensource.org/license
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+
+#include "mcfevents.h"
+
+#ifndef __MCF_EVENTS_WIN32_H__
+#define __MCF_EVENTS_WIN32_H__
+
+namespace mcf
+{
+class CMCFEventsImplWin32 : public CMCFEventsImpl
+{
+public :
+    void init();
+};
+} /* End of mcf namespace */
+#endif
diff --git a/mcf/gwes/win32/mcfgraphics-win32.cpp b/mcf/gwes/win32/mcfgraphics-win32.cpp
new file mode 100755 (executable)
index 0000000..451fe60
--- /dev/null
@@ -0,0 +1,26 @@
+/*
+ * Copyright 2012  Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.tizenopensource.org/license
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+\r
+#include "mcfgraphics-win32.h"\r
+\r
+using namespace mcf;\r
+\r
+void\r
+CMCFGraphicsImplWin32::draw_image(mcfchar *imgPath) {\r
+}\r
+\r
diff --git a/mcf/gwes/win32/mcfgraphics-win32.h b/mcf/gwes/win32/mcfgraphics-win32.h
new file mode 100755 (executable)
index 0000000..a96893d
--- /dev/null
@@ -0,0 +1,32 @@
+/*
+ * Copyright 2012  Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.tizenopensource.org/license
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+
+#include "mcfgraphics.h"
+
+#ifndef __MCF_GRAPHICS_WIN32_H__
+#define __MCF_GRAPHICS_WIN32_H__
+
+namespace mcf
+{
+class CMCFGraphicsImplWin32 : public CMCFGraphicsImpl
+{
+public :
+    void draw_image(mcfchar *imgPath);
+};
+} /* End of mcf namespace */
+#endif
diff --git a/mcf/gwes/win32/mcfwindows-win32.cpp b/mcf/gwes/win32/mcfwindows-win32.cpp
new file mode 100755 (executable)
index 0000000..1dca1a5
--- /dev/null
@@ -0,0 +1,19 @@
+/*
+ * Copyright 2012  Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.tizenopensource.org/license
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+
+\r
diff --git a/mcf/gwes/win32/mcfwindows-win32.h b/mcf/gwes/win32/mcfwindows-win32.h
new file mode 100755 (executable)
index 0000000..1dca1a5
--- /dev/null
@@ -0,0 +1,19 @@
+/*
+ * Copyright 2012  Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.tizenopensource.org/license
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+
+\r
diff --git a/mcf/include/mcf.h b/mcf/include/mcf.h
new file mode 100755 (executable)
index 0000000..3f062d0
--- /dev/null
@@ -0,0 +1,39 @@
+/*
+ * Copyright 2012  Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.tizenopensource.org/license
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+\r
+#ifndef __MCF_H__\r
+#define __MCF_H__\r
+\r
+#include "mcfversion.h"\r
+#include "mcftypes.h"\r
+#include "mcfkeydefines.h"\r
+#include "mcfconfig.h"\r
+#include "mcfstructs.h"\r
+#include "mcfdebug.h"\r
+#include "mcferroradjustment.h"\r
+#include "mcffeedback.h"\r
+#include "mcfgraphics.h"\r
+#include "mcfutils.h"\r
+#include "mcfcontext.h"\r
+#include "mcfactionstate.h"\r
+#include "mcfcore.h"\r
+#include "mcfresource.h"\r
+#include "mcfresourcecache.h"\r
+#include "mcfeventcallback.h"\r
+\r
+#endif\r
diff --git a/mcf/include/mcfactionstate.h b/mcf/include/mcfactionstate.h
new file mode 100755 (executable)
index 0000000..d4e802c
--- /dev/null
@@ -0,0 +1,68 @@
+/*
+ * Copyright 2012  Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.tizenopensource.org/license
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+\r
+#include "mcfconfig.h"\r
+\r
+#ifndef __MCF_ACTIONSTATE_H__\r
+#define __MCF_ACTIONSTATE_H__\r
+\r
+//MCF_BEGIN_DECLS\r
+\r
+namespace mcf\r
+{\r
+\r
+#define MAX_ACTION_BUF 50\r
+\r
+/**\r
+ * @brief The base class to work as a soft-based keyboard\r
+ *\r
+ * This class implements all functions for working as a soft-based keyboard\r
+ * In side of ISE developer, they can modify it by their requirements.\r
+ */\r
+class CMCFActionState\r
+{\r
+private:\r
+    static CMCFActionState* sInstance; /* For singleton */\r
+    CMCFActionState();\r
+public:\r
+    ~CMCFActionState();\r
+\r
+    /* for singleton */\r
+    static CMCFActionState* get_instance();\r
+\r
+    /* reset the action state to init status */\r
+    void reset();\r
+    void clear_action_buf();\r
+    MCFActionState get_cur_action_state() {\r
+        return mCurActionState;\r
+    }\r
+    void set_cur_action_state(MCFActionState state) {\r
+        mCurActionState = state;\r
+    }\r
+\r
+public:\r
+    /* stores the state information */\r
+    MCFActionState mActionBuf[MAX_ACTION_BUF];\r
+    MCFActionState mCurActionState;\r
+};\r
+\r
+}\r
+\r
+//MCF_END_DECLS\r
+\r
+#endif //__MCF_ACTIONSTATE_H__\r
diff --git a/mcf/include/mcfconfig.h b/mcf/include/mcfconfig.h
new file mode 100755 (executable)
index 0000000..3a2770c
--- /dev/null
@@ -0,0 +1,362 @@
+/*
+ * Copyright 2012  Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.tizenopensource.org/license
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+
+#ifndef __MCF_CONFIG_H__
+#define __MCF_CONFIG_H__
+
+#define NO_SOCKETPLUG
+
+
+/* Display direction definition */
+typedef enum _MCFDisplay {
+    MCFDISPLAY_PORTRAIT,  /* portrait display mode */
+    MCFDISPLAY_LANDSCAPE,  /* landscape display mode */
+    MCFDISPLAY_MAX, /* maximum count of display mode */
+}MCFDisplay;
+
+/**@brief  Layout and Input mode Style definition */
+typedef enum _MCFLayoutStyle {
+    LAYOUT_STYLE_BASE,
+    LAYOUT_STYLE_POPUP,
+    LAYOUT_STYLE_POPUP_GRAB,
+    MAX_LAYOUT_STYLE
+}MCFLayoutStyle;
+
+/* Key Define */
+
+/**@brief  Button Type definition */
+typedef enum _MCFButtonType {
+    BUTTON_TYPE_NORMAL  = 0, /**< Normal key */
+    BUTTON_TYPE_GRAB,  /**< Focus grab */
+    /* A button that fires click event when dragged into the button's area */
+    BUTTON_TYPE_DRAG,  /**< Drag button */
+    /* A button with variant value - ex> [a] -> [b] */
+    BUTTON_TYPE_MULTITAP,/**< Multi-tap key */
+    /* A multitap with automatic commitment - ex> ([a] -> a[b]) , ([p] -> p[i] -> pi[n] -> pin[g])*/
+    BUTTON_TYPE_ROTATION,/**< Rotation key */
+    BUTTON_TYPE_DIRECTION,/**< Direction key */
+    BUTTON_TYPE_UIITEM, /** Not a button, just for displaying image */
+    MAX_BUTTON_TYPE/* maximum number of Key type */
+}MCFButtonType;
+
+/* Values used for extraOption field of McfLayoutKeyProperties structure, in case of BUTTON_TYPE_DIRECTION type button */
+#define DIRECTION_EXTRA_OPTION_4_DIRECTIONS 0
+#define DIRECTION_EXTRA_OPTION_8_DIRECTIONS 1
+#define DIRECTION_EXTRA_OPTION_4_DIRECTIONS_WITH_LONG 2
+#define DIRECTION_EXTRA_OPTION_8_DIRECTIONS_WITH_LONG 3
+#define DIRECTION_EXTRA_OPTION_4_DIRECTIONS_WITH_RETURN 4
+#define DIRECTION_EXTRA_OPTION_8_DIRECTIONS_WITH_RETURN 5
+#define DIRECTION_EXTRA_OPTION_4_DIRECTIONS_WITH_RETURN_AND_CURVE 6
+
+/**@brief Key Type definition */
+typedef enum _MCFKeyType {
+    KEY_TYPE_NONE = 0,        /**< none */
+    KEY_TYPE_CHAR,                     /**< key that can be displayed independently */
+    KEY_TYPE_CONTROL,          /**< key to use as control */
+    KEY_TYPE_MODECHANGE,       /**< key to change mode*/
+    KEY_TYPE_UNICODE,          /**< key to be displayed as unicode */
+    KEY_TYPE_SYMBOL,           /**< key to be displayed as symbols (unicode) */
+    KEY_TYPE_COMPOSITION,      /**< Key to request Composition char */
+    MAX_KEY_TYPE                       /* maximum number of Key type */
+}MCFKeyType;
+
+/**@brief Key Modifier definition */
+typedef enum _MCFKeyModifier {
+    KEY_MODIFIER_NONE = 0,                             /**< none */
+    KEY_MODIFIER_LONGKEY,                              /**< longkey event */
+    KEY_MODIFIER_MULTITAP_START,                               /**< multitap started */
+    KEY_MODIFIER_MULTITAP_REPEAT,                              /**< multitap repeated */
+
+    KEY_MODIFIER_DIRECTION_LEFT,                       /**< drag left */
+    KEY_MODIFIER_DIRECTION_RIGHT,                      /**< drag right */
+    KEY_MODIFIER_DIRECTION_UP,                         /**< drag up */
+    KEY_MODIFIER_DIRECTION_DOWN,                       /**< drage down */
+    KEY_MODIFIER_DIRECTION_UP_LEFT,                    /**< drag up left */
+    KEY_MODIFIER_DIRECTION_UP_RIGHT,           /**< drag up right */
+    KEY_MODIFIER_DIRECTION_DOWN_LEFT,          /**< drag down left */
+    KEY_MODIFIER_DIRECTION_DOWN_RIGHT,         /**< drage down right */
+
+    KEY_MODIFIER_DIRECTION_LEFT_LONG,                  /**< drag left */
+    KEY_MODIFIER_DIRECTION_RIGHT_LONG,                 /**< drag right */
+    KEY_MODIFIER_DIRECTION_UP_LONG,                            /**< drag up */
+    KEY_MODIFIER_DIRECTION_DOWN_LONG,                  /**< drage down */
+    KEY_MODIFIER_DIRECTION_UP_LEFT_LONG,                       /**< drag up left */
+    KEY_MODIFIER_DIRECTION_UP_RIGHT_LONG,              /**< drag up right */
+    KEY_MODIFIER_DIRECTION_DOWN_LEFT_LONG,             /**< drag down left */
+    KEY_MODIFIER_DIRECTION_DOWN_RIGHT_LONG,            /**< drage down right */
+
+    KEY_MODIFIER_DIRECTION_LEFT_RETURN,                        /**< drag left */
+    KEY_MODIFIER_DIRECTION_RIGHT_RETURN,                       /**< drag right */
+    KEY_MODIFIER_DIRECTION_UP_RETURN,                          /**< drag up */
+    KEY_MODIFIER_DIRECTION_DOWN_RETURN,                        /**< drage down */
+    KEY_MODIFIER_DIRECTION_UP_LEFT_RETURN,                     /**< drag up left */
+    KEY_MODIFIER_DIRECTION_UP_RIGHT_RETURN,            /**< drag up right */
+    KEY_MODIFIER_DIRECTION_DOWN_LEFT_RETURN,           /**< drag down left */
+    KEY_MODIFIER_DIRECTION_DOWN_RIGHT_RETURN,          /**< drage down right */
+
+    KEY_MODIFIER_DIRECTION_CURVE_UP_LEFT,                      /**< drag up left */
+    KEY_MODIFIER_DIRECTION_CURVE_UP_RIGHT,             /**< drag up right */
+    KEY_MODIFIER_DIRECTION_CURVE_DOWN_LEFT,            /**< drag down left */
+    KEY_MODIFIER_DIRECTION_CURVE_DOWN_RIGHT,           /**< drage down right */
+    KEY_MODIFIER_DIRECTION_CURVE_LEFT_UP,                      /**< drag left up */
+    KEY_MODIFIER_DIRECTION_CURVE_LEFT_DOWN,            /**< drag left down */
+    KEY_MODIFIER_DIRECTION_CURVE_RIGHT_UP,             /**< drag right up */
+    KEY_MODIFIER_DIRECTION_CURVE_RIGHT_DOWN,           /**< drage right down */
+
+    KEY_MODIFIER_MAX                   /* maximum number of Key type */
+}MCFKeyModifier;
+
+
+/**@brief  Popup Type definition */
+typedef enum _MCFPopupType {
+    POPUP_TYPE_NONE = 0,/**< doesn't use popup */
+    POPUP_TYPE_BTN_RELEASE_POPUP,/**< to use popup (It is used in extention character sign. After to be selected, this action is continued until selecting another area) */
+    POPUP_TYPE_BTN_RELEASE_POPUP_ONCE,/**< to use popup (It is used in extention character sign. After to be selected, this action disappears instantly) */
+    POPUP_TYPE_BTN_PRESS_POPUP_DRAG,/**< to use popup (it is used in extention character sign. This action disappears at Drag-Up */
+    POPUP_TYPE_BTN_LONGPRESS_POPUP,/**< to use popup (it is used in extention character sign. This action disappears at Drag-Up */
+    POPUP_TYPE_BTN_LONGPRESS_POPUP_ONCE,/**< to use popup (it is used in extention character sign. This action disappears at Drag-Up */
+    POPUP_TYPE_CONTEXT_POPUP,
+    POPUP_TYPE_AUTO_POPUP,/**< to use popup (for multi-tap char) */
+    MAX_POPUP_TYPE/* maximum number of popup type */
+}MCFPopupType;
+
+/**@brief Candidate position style definition */
+typedef enum _MCFCandidatePosition {
+    CAND_POS_ABOVE_KEYPAD = 0,
+    CAND_POS_BELOW_TEXT,
+    CAND_POS_MANUAL,
+    MAX_CANDIDATE_POSITION
+}MCFCandidatePosition;
+
+/**@brief Candidate style definition */
+typedef enum _MCFCandidateStyle {
+    CAND_STYLE_DEFAULT = 0,
+    CAND_STYLE_A,
+    CAND_STYLE_B,
+    CAND_STYLE_C,
+    MAX_CANDIDATE_STYLE
+}MCFCandidateStyle;
+
+/**@brief Preview window position type definition */
+typedef enum _MCFPreviewPosition {
+    PREVIEW_POS_CENTER_OF_APPL_AREA = 0,
+    PREVIEW_POS_ABOVE_SELECTED_BUTTON,
+    PREVIEW_POS_MANUAL,
+    MAX_PREVIEW_POSITION
+}MCFPreviewPosition;
+
+/**@brief Action state definition */
+typedef enum _MCFActionState {
+    ACTION_STATE_BASE_INIT = 0,
+    ACTION_STATE_BASE_PRESS,
+    ACTION_STATE_BASE_MOVING,
+    ACTION_STATE_BASE_RELEASE,
+    ACTION_STATE_BASE_LONGKEY,
+    ACTION_STATE_BASE_REPEATKEY,
+    ACTION_STATE_POPUP_INIT,
+    ACTION_STATE_POPUP_PRESS,
+    ACTION_STATE_POPUP_MOVING,
+    ACTION_STATE_POPUP_RELEASE,
+    ACTION_STATE_POPUP_LONGKEY,
+    ACTION_STATE_POPUP_REPEATKEY,
+    MAX_ACTION_STATE
+}MCFActionState;
+
+/**@brief  Button state definition */
+typedef enum _MCFButtonState {
+    BUTTON_STATE_NORMAL         = 0, /**< normal state */
+    BUTTON_STATE_PRESSED, /**< pressed state */
+    BUTTON_STATE_DISABLED, /**< disabled state */
+    //BUTTON_STATE_HIGHLIGHT, /**< highlighed state */
+    //BUTTON_STATE_LONGKEY, /**< londkey state */
+    MCF_BUTTON_STATE_MAX/* maximum number of button state */
+}MCFButtonState;
+
+
+/**@brief  Drag Direction definition */
+typedef enum _MCFDragType {
+    DRAG_NONE = 0,             /* doesn't use Drag */
+    DRAG_LEFT,         /* drag to left side */
+    DRAG_RIGHT,                /* drag to right side */
+    DRAG_UP,                   /* drag to upper side */
+    DRAG_DOWN,         /* drage to down side */
+    DRAG_LEFT_TOP,             /* drag to left top side */
+    DRAG_RIGHT_TOP,            /* drag to right top side */
+    DRAG_LEFT_BOTTOM,  /* drag to left bottm side */
+    DRAG_RIGHT_BOTTOM, /* drage to right bottom side */
+    MAX_DRAG,               /* maximum number of drag type */
+}MCFDragType;
+
+/**@brief  Label alignment definition */
+typedef enum _MCFLabelAlignment {
+    LABEL_ALIGN_LEFT_TOP = 0,
+    LABEL_ALIGN_CENTER_TOP,
+    LABEL_ALIGN_RIGHT_TOP,
+    LABEL_ALIGN_LEFT_MIDDLE,
+    LABEL_ALIGN_CENTER_MIDDLE,
+    LABEL_ALIGN_RIGHT_MIDDLE,
+    LABEL_ALIGN_LEFT_BOTTOM,
+    LABEL_ALIGN_CENTER_BOTTOM,
+    LABEL_ALIGN_RIGHT_BOTTOM,
+    MAX_LABEL_ALIGNMENT
+}MCFLabelAlignment;
+
+/**@brief  Shadow direction definition */
+typedef enum _MCFShadowDirection {
+    SHADOW_DIRECTION_NONE = 0,
+    SHADOW_DIRECTION_LEFT_TOP ,
+    SHADOW_DIRECTION_CENTER_TOP,
+    SHADOW_DIRECTION_RIGHT_TOP,
+    SHADOW_DIRECTION_LEFT_MIDDLE,
+    SHADOW_DIRECTION_CENTER_MIDDLE,
+    SHADOW_DIRECTION_RIGHT_MIDDLE,
+    SHADOW_DIRECTION_LEFT_BOTTOM,
+    SHADOW_DIRECTION_CENTER_BOTTOM,
+    SHADOW_DIRECTION_RIGHT_BOTTOM,
+    MAX_SHADOW_DIRECTION
+}MCFShadowDirection;
+
+/**@brief  timer id */
+typedef enum _MCFTimer {
+    MCF_TIMER_AUTOPOPUP = 100,
+    MCF_TIMER_SHORT_LONGKEY,
+    MCF_TIMER_LONGKEY,
+    MCF_TIMER_REPEATKEY,
+    MCF_TIMER_USERAREA,
+    MCF_TIMER_BUTTON_DELAY,
+    MCF_TIMER_POPUP_TIMEOUT,
+    MCF_TIMER_AUTOTEST,
+}MCFTimer;
+
+/**@brief  Touch Offset */
+typedef enum _MCFTouchOffsetLevel {
+    TOUCH_OFFSET_LEVEL_1,
+    TOUCH_OFFSET_LEVEL_2,
+    TOUCH_OFFSET_LEVEL_3,
+    MAX_TOUCH_OFFSET_LEVEL
+}MCFTouchOffsetLevel;
+
+/* Type Limitation definition */
+#define MAX_SIZE_OF_LAYOUT_NAME 255
+#define MAX_SIZE_OF_MULTITAP_CHAR 10
+#define MAX_SIZE_OF_LABEL_FOR_ONE 9
+#define MAX_SIZE_OF_LAYOUT 10
+#define MAX_SIZE_OF_CANDIDATE 50
+#define MAX_PRIVATE_KEY 100
+#define MAX_SIZE_OF_AUTOPOPUP_STRING 20
+
+/**@brief  Window Decorator Images */
+typedef enum _MCFWindowDecorator {
+    WND_DECORATOR_TOP_LEFT,
+    WND_DECORATOR_TOP_CENTER,
+    WND_DECORATOR_TOP_RIGHT,
+    WND_DECORATOR_MIDDLE_LEFT,
+    WND_DECORATOR_MIDDLE_RIGHT,
+    WND_DECORATOR_BOTTOM_LEFT,
+    WND_DECORATOR_BOTTOM_CENTER,
+    WND_DECORATOR_BOTTOM_RIGHT,
+    MAX_WND_DECORATOR,
+}MCFWindowDecorator;
+
+/**@brief  MCF Notification to ISEs */
+typedef enum _MCFNotiType {
+    NOTITYPE_POPUP_TIMEOUT, // The layout of popup window will be passed as etcInfo data
+    NOTITYPE_GESTURE_FLICK,
+    MAX_NOTITYPE,
+}MCFNotiType;
+
+/**@brief  Current dragging state */
+typedef enum _MCFDragState {
+    MCF_DRAG_STATE_NONE,
+    MCF_DRAG_STATE_LEFT,
+    MCF_DRAG_STATE_RIGHT,
+    MCF_DRAG_STATE_UP,
+    MCF_DRAG_STATE_DOWN,
+    MCF_DRAG_STATE_INVALID,
+    MCF_DRAG_STATE_RETURN,
+    MCF_DRAG_STATE_MAX,
+} MCFDragState;
+
+typedef enum _MCFMultitouchType {
+    MCF_MULTI_TOUCH_TYPE_EXCLUSIVE,
+    MCF_MULTI_TOUCH_TYPE_COOPERATIVE,
+    MCF_MULTI_TOUCH_TYPE_GRAB_SUB_EVENTS,
+} MCFMultiTouchType;
+
+/* Shift flag */
+typedef enum _MCFShiftState {
+    MCF_SHIFT_STATE_OFF,
+    MCF_SHIFT_STATE_ON,
+    MCF_SHIFT_STATE_LOCK,
+    MCF_SHIFT_STATE_MAX,
+} MCFShiftState;
+
+/* resolution */
+#define MCF_BASE_SCREEN_WIDTH 480
+#define MCF_BASE_SCREEN_HEIGHT 800
+
+/* MCF predefined Identifiers */
+#define MCF_LAYOUT_AUTOPOPUP 10000
+
+#define MCF_LABEL_PROPERTY_AUTOPOPUP 10000
+#define MCF_LABEL_PROPERTY_CANDIDATE 10001
+#define MCF_LABEL_PROPERTY_ZOOMING 10002
+#define MCF_LABEL_PROPERTY_PREVIEW 10003
+
+#define MCF_LONGKEY_DURATION 800
+#define MCF_LONGKEY_CANCEL_DIST -1
+#define MCF_SHORT_LONGKEY_DURATION 500
+#define MCF_REPEATKEY_DURATION 150
+#define MCF_REPEATKEY_WORD_DELETION_START_DURATION 100
+#define MCF_REPEATKEY_ACCELERATION 10
+#define MCF_REPEATKEY_MIN_DURATION 50
+
+#define MCF_BUTTON_MIN_DURATION 100
+
+#define MCF_DIRECTION_RECOG_DIST 40
+#define MCF_DIRECTION_RECOG_DIST_SIDE 20
+#define MCF_DIRECTION_LONG_RECOG_DIST 50
+
+#define MCF_DRAG_CURVE_RECOG_DIST 70
+#define MCF_DRAG_CURVE_4_DIRECTION_ANGLE_VALUE 1.0f // ratio between x and y for determining 4 direction, 3 means atan(1/3) degree
+#define MCF_DRAG_CURVE_FINAL_ANGLE_VALUE 3.0f // ratio between x and y for determining final drag curve, 3 means atan(1/3) degree
+
+#define MCF_DRAG_RETURN_RECOG_THRESHOLD_RETURN 1.1f // In RETURN drag state, apply this value for checking drag return action
+#define MCF_DRAG_RETURN_RECOG_THRESHOLD_OTHER 0.9f // In non-NONE drag state, apply this value for checking drag return action
+#define MCF_DRAG_RETURN_RECOG_DIST_BACKWARD 60
+#define MCF_DRAG_RETURN_RECOG_ANGLE_BACKWARD M_PI / 8
+
+#define MCF_AUTOTEST_TIMER_INTERVAL 20
+#define MCF_AUTOTEST_TIMER_INITIAL_INTERVAL 3000
+#define MCF_AUTOTEST_NUM 500
+
+#define MCF_MOUSE_BUTTON_CHANGE_THRESHOLD_X 15
+#define MCF_MOUSE_BUTTON_CHANGE_THRESHOLD_Y 20
+
+#define MCF_FLICK_GESTURE_RECOG_THRESHOLD 200
+#define MCF_FLICK_GESTURE_RECOG_TIME 500
+
+#define MCF_AUTO_DETECT_PORTRAIT_LANDSCAPE TRUE
+
+typedef enum _MCFDebugMode {
+    DEBUGMODE_DISABLED,
+    DEBUGMODE_DISPLAY_INTERNAL,
+    DEBUGMODE_AUTOTEST,
+}MCFDebugMode;
+
+#endif //__MCF_CONFIG_H__
diff --git a/mcf/include/mcfcontext.h b/mcf/include/mcfcontext.h
new file mode 100755 (executable)
index 0000000..d7ca1a6
--- /dev/null
@@ -0,0 +1,220 @@
+/*
+ * Copyright 2012  Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.tizenopensource.org/license
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+
+#ifndef __MCF_CONTEXT_H__
+#define __MCF_CONTEXT_H__
+
+//MCF_BEGIN_DECLS
+#include <sys/time.h>
+#include "mcftypes.h"
+#include "mcfconfig.h"
+#include "mcfstructs.h"
+#include "mcfeventcallback.h"
+#include <map>
+#include <list>
+#include <string>
+
+namespace mcf
+{
+
+typedef struct { // A context information dependant on each multitouch events
+    mcfboolean mUsed;
+
+    mcf8 mCurPressedKey;
+    mcfwindow mCurPressedWindow;
+    McfPoint mCurPressedPoint;
+    struct timeval mCurPressedTime;
+
+    mcfwindow mCurMoveWindow;
+    McfPoint mCurMovePoint;
+
+    McfPoint mFarthestMovePoint;
+    mcfint mFarthestMoveDist;
+
+    mcf8 mPrevPressedKey;
+    mcfwindow mPrevPressedWindow;
+
+    MCFDragState mCurDragState;
+    MCFDragState mPrevDragState;
+
+    MCFKeyModifier mCurKeyModifier;
+
+    mcf16 mEventUniqueId;
+
+    mcfboolean mIsSubEvent;
+} MultiTouchContext;
+
+/**
+ * @brief The base class to work as a soft-based keyboard
+ *
+ * This class implements all functions for working as a soft-based keyboard
+ * In side of ISE developer, they can modify it by their requirements.
+ */
+class CMCFContext
+{
+private:
+    static CMCFContext* sInstance; /* For singleton */
+    CMCFContext();
+public:
+    ~CMCFContext();
+
+    /* reset to the default context status */
+    void reset();
+
+    /* for singleton */
+    static CMCFContext* get_instance();
+
+    MCFDisplay get_display() const {
+        return mDisplay;
+    }
+    void set_display(MCFDisplay val) {
+        mPrevDisplay = mDisplay;
+        mDisplay = val;
+    }
+
+    mcf8 get_input_mode() const {
+        return mInputMode;
+    }
+    void set_input_mode(mcf8 val) {
+        mPrevInputMode = mInputMode;
+        mInputMode = val;
+    }
+
+    mcfshort get_base_layout() const;
+    void set_base_layout(mcfshort val);
+
+    mcfshort get_popup_layout(mcfwindow window) const;
+    void set_popup_layout(mcfwindow window, mcfshort val);
+
+    MCFDisplay get_prev_display() const {
+        return mPrevDisplay;
+    }
+    mcf8 get_prev_inputmode() const {
+        return mPrevInputMode;
+    }
+
+    mcfboolean get_hidden_state() const {
+        return mHidden;
+    }
+    void set_hidden_state(mcfboolean val) {
+        mHidden = val;
+    }
+
+    MCFShiftState get_shift_state() const {
+        MCFShiftState ret = MCF_SHIFT_STATE_OFF;
+        if(mShiftState >= 0 && mShiftState < MCF_SHIFT_STATE_MAX) {
+            ret = mShiftState;
+        }
+        return ret;
+    }
+    void set_shift_state(MCFShiftState val) {
+        if(val >= 0 && val < MCF_SHIFT_STATE_MAX) {
+            mShiftState = val;
+        }
+    }
+
+    mcf8 get_last_pressed_key() {
+        return mLastPressedKey;
+    }
+       void set_last_pressed_key(mcf8 val) {
+        mLastPressedKey = val;
+    }
+       mcfwindow get_last_pressed_window() {
+        return mLastPressedWindow;
+    }
+       void set_last_pressed_window(mcfwindow window) {
+        mLastPressedWindow = window;
+    }
+
+    mcftouchdevice get_last_touch_device_id() const {
+        return mLastTouchDeviceId;
+    }
+    void set_last_touch_device_id(mcftouchdevice touchid) {
+        mLastTouchDeviceId = touchid;
+    }
+
+    void create_multi_touch_context(mcftouchdevice touchid, mcfboolean isSubEvent = FALSE);
+    void destroy_multi_touch_context(mcftouchdevice touchid);
+    MultiTouchContext* find_multi_touch_context(mcftouchdevice touchid);
+
+    mcf16 get_cur_pressed_event_id(mcftouchdevice touchid);
+    void set_cur_pressed_event_id(mcftouchdevice touchid, mcf16 id);
+    mcf8 get_cur_pressed_key(mcftouchdevice touchid);
+    void set_cur_pressed_key(mcftouchdevice touchid, mcf8 val);
+    mcfwindow get_cur_pressed_window(mcftouchdevice touchid);
+    void set_cur_pressed_window(mcftouchdevice touchid, mcfwindow window);
+    McfPoint get_cur_pressed_point(mcftouchdevice touchid);
+    void set_cur_pressed_point(mcftouchdevice touchid, mcfint x, mcfint y);
+    struct timeval get_cur_pressed_time(mcftouchdevice touchid);
+    void set_cur_pressed_time(mcftouchdevice touchid);
+
+    McfPoint get_cur_move_point(mcftouchdevice touchid);
+    void set_cur_move_point(mcftouchdevice touchid, mcfint x, mcfint y);
+    mcfwindow get_cur_move_window(mcftouchdevice touchid);
+    void set_cur_move_window(mcftouchdevice touchid, mcfwindow window);
+    McfPoint get_farthest_move_point(mcftouchdevice touchid);
+    void set_farthest_move_point(mcftouchdevice touchid, mcfint x, mcfint y);
+    mcfint get_farthest_move_dist(mcftouchdevice touchid);
+
+    mcf8 get_prev_pressed_key(mcftouchdevice touchid);
+    void set_prev_pressed_key(mcftouchdevice touchid, mcf8 val);
+    mcfwindow get_prev_pressed_window(mcftouchdevice touchid);
+    void set_prev_pressed_window(mcftouchdevice touchid, mcfwindow window);
+
+    MCFDragState get_cur_drag_state(mcftouchdevice touchid);
+    void set_cur_drag_state(mcftouchdevice touchid, MCFDragState state);
+    MCFKeyModifier get_cur_key_modifier(mcftouchdevice touchid);
+    void set_cur_key_modifier(mcftouchdevice touchid, MCFKeyModifier modifier);
+
+    MCFDragState get_prev_drag_state(mcftouchdevice touchid);
+    void set_prev_drag_state(mcftouchdevice touchid, MCFDragState state);
+
+    mcfint get_multi_touch_context_num();
+    mcfboolean get_multi_touch_event(mcfint seqorder, McfKeyEventDesc *desc);
+    mcfint get_multi_touch_event_order(mcftouchdevice touchid);
+
+    mcfint get_cur_sublayout_id();
+    mcfboolean set_cur_sublayout_id(mcfint id);
+
+protected:
+       /* stores the current context */
+    MCFDisplay mDisplay;
+    mcf8 mInputMode;
+
+    /* stores the last context */
+    MCFDisplay mPrevDisplay;
+    mcf8 mPrevInputMode;
+
+    mcfboolean mHidden;
+    MCFShiftState mShiftState;
+
+    mcfint mCurSubLayoutID;
+
+    mcfwindow mLastPressedWindow;
+    mcf8 mLastPressedKey;
+
+    mcftouchdevice mLastTouchDeviceId;
+    std::map<mcftouchdevice, MultiTouchContext> mMultiTouchContext;
+    std::list<mcftouchdevice> mMultiTouchSeq;
+};
+
+}
+
+//MCF_END_DECLS
+
+#endif //__MCF_CONTEXT_H__
diff --git a/mcf/include/mcfcontroller.h b/mcf/include/mcfcontroller.h
new file mode 100755 (executable)
index 0000000..27ccd77
--- /dev/null
@@ -0,0 +1,131 @@
+/*
+ * Copyright 2012  Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.tizenopensource.org/license
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+
+#include "mcfgwes.h"
+#include "mcfutils.h"
+#include "mcfcontext.h"
+#include "mcfeventcallback.h"
+
+#ifndef __MCF_CONTROLLER_H__
+#define __MCF_CONTROLLER_H__
+
+//MCF_BEGIN_DECLS
+
+namespace mcf
+{
+enum McfInternalSignal {
+    MCF_SIG_START,
+    MCF_SIG_SHOW,
+    MCF_SIG_HIDE,
+    MCF_SIG_INPMODE_CHANGE,
+    MCF_SIG_DISP_CHANGE,
+    MCF_SIG_POPUP_SHOW,
+    MCF_SIG_POPUP_HIDE,
+    MCF_SIG_MOUSE_PRESS,
+    MCF_SIG_MOUSE_LONG_PRESS,
+    MCF_SIG_MOUSE_RELEASE,
+    MCF_SIG_KEYEVENT,
+    MCF_SIG_FOCUS_CHANGE,
+
+    MCF_SIG_MAXNUM
+};
+
+/**
+ * @brief The base class to work as a soft-based keyboard
+ *
+ * This class implements all functions for working as a soft-based keyboard
+ * In side of ISE developer, they can modify it by their requirements.
+ */
+class CMCFController
+{
+private:
+    static CMCFController* sInstance; /* For singleton */
+    CMCFController();
+public:
+    ~CMCFController();
+
+    static CMCFController* get_instance();
+    void init();
+
+    void set_event_callback(IMCFEventCallback *callback);
+
+private:
+    mcfboolean process_button_pressed_event(mcfwindow window, mcfint x, mcfint y, mcfbyte keyindex, mcftouchdevice touchid);
+    mcfboolean process_button_long_pressed_event(mcfwindow window, mcfbyte keyindex, mcftouchdevice touchid);
+    mcfboolean process_button_repeat_pressed_event(mcfwindow window, mcfbyte keyindex, mcftouchdevice touchid);
+    mcfboolean process_button_move_event(mcfwindow window, mcfint x, mcfint y, mcfbyte keyindex, mcftouchdevice touchid);
+    mcfboolean process_button_release_event(mcfwindow window, mcfint x, mcfint y, mcfbyte keyindex, mcftouchdevice touchid);
+
+    mcfboolean configure_autopopup_window(mcfwindow window, mcfbyte keyindex, McfRectangle* rect);
+
+    mcfboolean check_event_transition_enabled(const McfLayoutKeyConfigure *btnFrom, const McfLayoutKeyConfigure *btnTo);
+    MCFKeyModifier get_drag_key_modifier(mcfint deltax, mcfint deltay, mcffloat dist,
+                                         mcfboolean check_farthest,mcftouchdevice touchid, mcfbyte extraOption);
+
+public:
+    void handle_engine_signal(McfInternalSignal signal, mcfwindow skipwindow = MCFWINDOW_INVALID);
+    mcfboolean process_input_mode_change(const mcfbyte mode, mcfboolean saveMultikeys = TRUE);
+    mcfboolean process_display_change();
+
+    mcfboolean mouse_press(mcfwindow window, mcfint x, mcfint y, mcftouchdevice touchid = 0);
+    mcfboolean mouse_release(mcfwindow window, mcfint x, mcfint y, mcftouchdevice touchid = 0);
+    mcfboolean mouse_move(mcfwindow window, mcfint x, mcfint y, mcftouchdevice touchid = 0);
+    mcfboolean timer_event(const mcf32 id);
+
+    mcfboolean set_longkey_duration(mcflong msc);
+    mcfboolean set_longkey_cancel_dist(mcfshort dist);
+    mcfboolean set_repeatkey_duration(mcflong msc);
+    mcfboolean set_short_longkey_duration(mcflong msc);
+
+    mcfboolean set_button_delay_duration(mcflong msc);
+
+    void clear_multikey_buffer();
+
+    MCFDebugMode get_debug_mode();
+    void set_debug_mode(MCFDebugMode mode);
+
+    void disable_input_events(mcfboolean disabled);
+protected:
+
+    /* Interval time(msc) for checking long key event */
+    mcflong mLongkeyDuration;
+    mcfshort mLongkeyCancelDist;
+    mcflong mRepeatKeyDuration;
+    mcflong mShortLongkeyDuration;
+
+    mcflong mButtonDelayDuration;
+
+    IMCFEventCallback *mEventCallback;
+
+    MCFDebugMode mDebugMode;
+    mcfint mDebugVariable;
+
+    mcfint mRepeatKeySeq;
+
+    mcfboolean mInputEventsDisabled;
+
+    /* FIXME : A workaround for restoring multikeyidx, should be implemented after designing whole usecases */
+    #define MAX_MULTIKEY_BUFFER 50
+    mcfshort mMultiKeyBuffer[MAX_MULTIKEY_BUFFER][3]; /* 0 for layout, 1 for keyindex, 2 for value */
+};
+
+}
+
+//MCF_END_DECLS
+
+#endif //__MCF_CONTROLLER_H__
diff --git a/mcf/include/mcfcore.h b/mcf/include/mcfcore.h
new file mode 100755 (executable)
index 0000000..698687c
--- /dev/null
@@ -0,0 +1,111 @@
+/*
+ * Copyright 2012  Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.tizenopensource.org/license
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+
+#include "mcftypes.h"
+#include "mcfstructs.h"
+#include "mcfuibuilder.h"
+#include "mcfcontroller.h"
+
+#ifndef __MCF_CORE_H__
+#define __MCF_CORE_H__
+
+//MCF_BEGIN_DECLS
+
+namespace mcf
+{
+/**
+ * @brief The base class to work as a soft-based keyboard
+ *
+ * This class implements all functions for working as a soft-based keyboard
+ * In side of ISE developer, they can modify it by their requirements.
+ */
+class CMCFCore
+{
+public:
+    CMCFCore();
+    CMCFCore(mcfwindow parentWnd);
+
+    ~CMCFCore();
+
+private:
+
+public:
+    mcfboolean run();
+    void show();
+    void hide();
+
+    void set_event_callback(IMCFEventCallback *callback);
+    mcfboolean set_input_mode(mcf8 mode, mcfboolean clearEverything = FALSE);
+    void set_update_pending(mcfboolean pend, mcfboolean autoUpdate = TRUE);
+
+    mcf8 get_display_mode();
+    mcf8 get_input_mode();
+
+    mcfint set_private_key(McfPrivateKeyProperties* properties, mcfboolean fRedraw);
+    mcfint set_private_key(mcfshort inputModeIdx, mcfbyte layoutIdx, mcfbyte keyIdx,
+                              mcfchar* label, mcfchar* imagelabel[MCF_BUTTON_STATE_MAX],
+                              mcfchar* imagebg[MCF_BUTTON_STATE_MAX], mcfulong keyEvent,
+                              mcfchar *keyValue, mcfboolean fRedraw);
+    void unset_private_key(mcfint customID);
+    mcfbyte find_keyidx_by_customid(mcfshort inputModeIdx, mcfbyte layoutIdx, mcfshort customID);
+    void clone_keyproperties(McfPrivateKeyProperties* priv, mcfbyte inputModeIdx, mcfbyte layoutIdx, mcfbyte keyIdx);
+
+    void enable_button(mcfbyte keyIdx);
+    void disable_button(mcfbyte keyIdx);
+
+    mcfboolean set_cur_themename(const mcfchar *themename);
+    mcfboolean set_cur_sublayout_id(mcfint id);
+    mcfint get_cur_sublayout_id();
+
+    MCFShiftState get_shift_state();
+    void set_shift_state(MCFShiftState state);
+
+    void notify_app_focus_changed();
+    void reset_popup_timeout();
+    void close_all_popups();
+
+    void get_window_size(mcfint *width, mcfint *height);
+    void get_screen_resolution(mcfint *width, mcfint *height);
+
+    mcf16 get_scale_x(mcf16 x);
+    mcf16 get_scale_y(mcf16 y);
+    mcffloat get_scale_rate();
+
+    mcfchar* get_composed_path(mcfchar* buf, int bufLength, const mcfchar* path);
+
+    mcfint get_multi_touch_context_num();
+    mcfboolean get_multi_touch_event(mcfint seqorder, McfKeyEventDesc *desc);
+
+    void set_debug_mode(MCFDebugMode mode);
+    MCFDebugMode get_debug_mode();
+
+    mcfboolean set_longkey_duration(mcflong msc);
+    mcfboolean set_longkey_cancel_dist(mcfshort dist);
+    mcfboolean set_repeatkey_duration(mcflong msc);
+    mcfboolean set_short_longkey_duration(mcflong msc);
+
+    mcfboolean set_button_delay_duration(mcflong msc);
+
+    void disable_input_events(mcfboolean disabled);
+};
+
+}
+
+//MCF_END_DECLS
+
+#endif //__MCF_CORE_H__
diff --git a/mcf/include/mcfdebug.h b/mcf/include/mcfdebug.h
new file mode 100755 (executable)
index 0000000..53d3733
--- /dev/null
@@ -0,0 +1,50 @@
+/*
+ * Copyright 2012  Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.tizenopensource.org/license
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+
+#ifndef __MCF_DEBUG_H__
+#define __MCF_DEBUG_H__
+
+#include <stdlib.h>
+#include <stdio.h>
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif /* __cplusplus */
+
+
+#define MCF_DEBUG_ELAPASED_TIME_START()
+#define MCF_DEBUG_ELAPASED_TIME_END()
+#define MCF_DEBUG()
+#define MCF_DEBUG_START()
+#define MCF_DEBUG_END()
+
+
+#define mcf_assert(_e)
+#define mcf_assert_return(_e)
+#define mcf_assert_return_false(_e)
+#define mcf_assert_return_null mcf_assert_return_false
+
+
+#define mcf_check_arrindex(idx, arrsize) ((idx >= 0) && (idx < arrsize))
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* __MCF_DEBUG_H__ */
diff --git a/mcf/include/mcferroradjustment.h b/mcf/include/mcferroradjustment.h
new file mode 100755 (executable)
index 0000000..914ebe2
--- /dev/null
@@ -0,0 +1,62 @@
+/*
+ * Copyright 2012  Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.tizenopensource.org/license
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+\r
+#include "mcftypes.h"\r
+#include "mcfstructs.h"\r
+\r
+#ifndef __MCF_ERRORADJUSTMENT_H__\r
+#define __MCF_ERRORADJUSTMENT_H__\r
+\r
+//MCF_BEGIN_DECLS\r
+\r
+#define DEFAULT_VIBE_DURATION 100\r
+\r
+namespace mcf\r
+{\r
+/**\r
+ * @brief The base class to work as a soft-based keyboard\r
+ *\r
+ * This class implements all functions for working as a soft-based keyboard\r
+ * In side of ISE developer, they can modify it by their requirements.\r
+ */\r
+class CMCFErrorAdjustment\r
+{\r
+private:\r
+    static CMCFErrorAdjustment* sInstance; /* For singleton */\r
+\r
+public:\r
+    CMCFErrorAdjustment();\r
+    CMCFErrorAdjustment(mcfwindow parentWnd);\r
+\r
+    ~CMCFErrorAdjustment();\r
+    static CMCFErrorAdjustment* get_instance();\r
+\r
+private:\r
+\r
+public:\r
+    mcfboolean apply_touch_offset(MCFTouchOffsetLevel level, mcfint *x, mcfint *y);\r
\r
+protected:\r
+\r
+};\r
+\r
+}\r
+\r
+//MCF_END_DECLS\r
+\r
+#endif //__MCF_ERRORADJUSTMENT_H__\r
diff --git a/mcf/include/mcfeventcallback.h b/mcf/include/mcfeventcallback.h
new file mode 100755 (executable)
index 0000000..544e881
--- /dev/null
@@ -0,0 +1,61 @@
+/*
+ * Copyright 2012  Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.tizenopensource.org/license
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+\r
+#ifndef __MCF_EVENTCALLBACK_H__\r
+#define __MCF_EVENTCALLBACK_H__\r
+\r
+//MCF_BEGIN_DECLS\r
+#include "mcftypes.h"\r
+#include "mcfconfig.h"\r
+#include "mcfstructs.h"\r
+\r
+namespace mcf\r
+{\r
+\r
+typedef struct {\r
+    mcfchar *keyValue;\r
+    mcfulong keyEvent;\r
+    MCFKeyType keyType;\r
+    MCFKeyModifier keyModifier;\r
+\r
+    /* Extra information for advanced event processing */\r
+    mcftouchdevice touchid;\r
+    mcfint touch_event_order;\r
+\r
+    McfPoint mousePressedPt;\r
+    McfPoint mouseCurrentPt;\r
+    McfPoint mouseFarthestPt;\r
+} McfKeyEventDesc;\r
+\r
+/**\r
+* @brief The callback interface to handle MCF events\r
+*\r
+* ISE developers can inherit this interface and register it to the MCFCore class\r
+* to handle MCF events as they want.\r
+*/\r
+struct IMCFEventCallback {\r
+    virtual mcfboolean on_event_key_clicked(McfKeyEventDesc keyEventDesc) = 0;\r
+    virtual mcfboolean on_event_drag_state_changed(McfKeyEventDesc keyEventDesc) = 0;\r
+    virtual mcfboolean on_event_notification(MCFNotiType notiType, mcfint etcInfo) = 0;\r
+};\r
+\r
+}\r
+\r
+//MCF_END_DECLS\r
+\r
+#endif //__MCF_EVENTCALLBACK_H__\r
diff --git a/mcf/include/mcfevents.h b/mcf/include/mcfevents.h
new file mode 100755 (executable)
index 0000000..d6d35de
--- /dev/null
@@ -0,0 +1,111 @@
+/*
+ * Copyright 2012  Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.tizenopensource.org/license
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "mcftypes.h"
+#include "mcfconfig.h"
+
+#ifndef __MCF_EVENTS_H__
+#define __MCF_EVENTS_H__
+
+#ifdef __cplusplus
+//MCF_BEGIN_DECLS
+#endif
+
+namespace mcf
+{
+
+/**@brief window event definition */
+typedef enum _MCFCbEvent {
+    MCF_EVENT_MOUSE = 1 << 1, /**< for mouse event */
+    MCF_EVENT_EXPOSE = 1 << 2 /**< for expose */
+}MCFCbEvent;
+
+/**@brief window event definition */
+typedef enum _MCFMouseEvent {
+    MCF_MOUSE_EVENT_PRESS,
+    MCF_MOUSE_EVENT_MOVE,
+    MCF_MOUSE_EVENT_RELEASE,
+}MCFMouseEvent;
+
+/**
+ * @brief The base class to work as a soft-based keyboard
+ *
+ * This class implements all functions for working as a soft-based keyboard
+ * In side of ISE developer, they can modify it by their requirements.
+ */
+class CMCFEventsImpl
+{
+public :
+    virtual void connect_window_events(const mcfwindow wnd, const mcfint evt) = 0;
+    virtual void create_timer(const mcf16 id, const mcf32 interval, mcf16 value, mcfboolean addToMap) = 0;
+    virtual void destroy_timer(const mcf32 id) = 0;
+    virtual void destroy_all_timer() = 0;
+
+    virtual void generate_mouse_event(MCFMouseEvent type, mcf16 x, mcf16 y) = 0;
+};
+
+class CMCFEvents
+{
+public :
+    CMCFEvents();
+    ~CMCFEvents();
+
+    static CMCFEvents* sInstance; /* For singleton */
+    static CMCFEvents* get_instance();
+
+    void connect_window_events(mcfwindow wnd, const mcfint evt);
+
+    void create_timer(const mcf16 id, const mcf32 interval, mcf16 value, mcfboolean addToMap = TRUE) {
+        get_mcf_events_impl()->create_timer(id, interval, value, addToMap);
+    }
+
+    void destroy_timer(const mcf32 id) {
+        get_mcf_events_impl()->destroy_timer(id);
+    }
+
+    void destroy_all_timer() {
+        get_mcf_events_impl()->destroy_all_timer();
+    }
+
+    void set_touch_event_offset(const McfPoint pos);
+    McfPoint* get_touch_event_offset();
+
+    virtual void generate_mouse_event(MCFMouseEvent type, mcf16 x, mcf16 y) {
+        get_mcf_events_impl()->generate_mouse_event(type, x, y);
+    }
+
+protected :
+    CMCFEventsImpl* get_mcf_events_impl();
+
+private :
+    CMCFEventsImpl* pImp_;
+    McfPoint mTouchEventOffset;
+};
+
+
+} /* End of mcf namespace */
+
+#ifdef __cplusplus
+//MCF_END_DECLS
+#endif
+
+#endif //__MCF_EVENTS_H__
diff --git a/mcf/include/mcffeedback.h b/mcf/include/mcffeedback.h
new file mode 100755 (executable)
index 0000000..cf48976
--- /dev/null
@@ -0,0 +1,62 @@
+/*
+ * Copyright 2012  Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.tizenopensource.org/license
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+\r
+#include "mcftypes.h"\r
+#include "mcfstructs.h"\r
+\r
+#ifndef __MCF_FEEDBACK_H__\r
+#define __MCF_FEEDBACK_H__\r
+\r
+//MCF_BEGIN_DECLS\r
+\r
+#define DEFAULT_VIBE_DURATION 100\r
+\r
+namespace mcf\r
+{\r
+/**\r
+ * @brief The base class to work as a soft-based keyboard\r
+ *\r
+ * This class implements all functions for working as a soft-based keyboard\r
+ * In side of ISE developer, they can modify it by their requirements.\r
+ */\r
+class CMCFFeedback\r
+{\r
+private:\r
+    static CMCFFeedback* sInstance; /* For singleton */\r
+\r
+public:\r
+    CMCFFeedback();\r
+    CMCFFeedback(mcfwindow parentWnd);\r
+\r
+    ~CMCFFeedback();\r
+    static CMCFFeedback* get_instance();\r
+\r
+public:\r
+    mcfboolean button_pressed(mcfwindow window, mcfbyte keyindex);\r
+    mcfboolean button_moved(mcfwindow window, mcfbyte keyindex);\r
+    mcfboolean button_released(mcfwindow window, mcfbyte keyindex);\r
+\r
+protected:\r
+\r
+};\r
+\r
+}\r
+\r
+//MCF_END_DECLS\r
+\r
+#endif //__MCF_FEEDBACK_H__\r
diff --git a/mcf/include/mcffontproxy.h b/mcf/include/mcffontproxy.h
new file mode 100755 (executable)
index 0000000..5ec423a
--- /dev/null
@@ -0,0 +1,52 @@
+/*
+ * Copyright 2012  Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.tizenopensource.org/license
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+
+#ifndef __MCF_FONT_PROXY_H__
+#define __MCF_FONT_PROXY_H__
+
+#include "mcfgraphics.h"
+
+namespace mcf
+{
+class CMCFFontProxy
+{
+private:
+    static CMCFFontProxy* sInstance; /* For singleton */
+    CMCFFontProxy();
+public :
+    ~CMCFFontProxy();
+
+    static CMCFFontProxy* get_instance();
+
+    mcffont get_font(const McfFontInfo& info);
+    void free_fonts();
+
+private:
+    typedef struct _McfFontCacheItem {
+        mcfchar fontname[MAX_FONT_NAME_LEN + 1];
+        mcfshort fontsize;
+        mcfboolean isItalic;
+        mcfboolean isBold;
+        mcffont font;
+    } McfFontCacheItem;
+
+    static const mcfint FONT_PROXY_SIZE = 128;
+    McfFontCacheItem mFontCacheItems[FONT_PROXY_SIZE];
+};
+} /* End of mcf namespace */
+#endif
diff --git a/mcf/include/mcfgraphics.h b/mcf/include/mcfgraphics.h
new file mode 100755 (executable)
index 0000000..4442182
--- /dev/null
@@ -0,0 +1,155 @@
+/*
+ * Copyright 2012  Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.tizenopensource.org/license
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "mcftypes.h"
+#include "mcfconfig.h"
+#include "mcfstructs.h"
+
+#ifndef __MCF_GRAPHICS_H__
+#define __MCF_GRAPHICS_H__
+
+#ifdef __cplusplus
+//MCF_BEGIN_DECLS
+#endif
+
+namespace mcf
+{
+#define MAX_FONT_NAME_LEN 32
+/**@brief  font information structure */
+typedef struct _McfFontInfo {
+    mcfchar fontname[MAX_FONT_NAME_LEN];
+    mcfshort fontsize;
+    mcfboolean isItalic;
+    mcfboolean isBold;
+} McfFontInfo;
+
+const McfColor MCFCOLOR_WHITE = {255, 255, 255};
+const McfColor MCFCOLOR_GREY = {128, 128, 128};
+const McfColor MCFCOLOR_BLACK = {0, 0, 0};
+const McfColor MCFCOLOR_RED = {255, 0, 0};
+const McfColor MCFCOLOR_BLUE = {0, 0, 255};
+
+/**
+ * @brief The base class to work as a soft-based keyboard
+ *
+ * This class implements all functions for working as a soft-based keyboard
+ * In side of ISE developer, they can modify it by their requirements.
+ */
+class CMCFGraphicsImpl
+{
+    friend class CMCFGraphics;
+private:
+    virtual void draw_image(mcfwindow window, const mcfdrawctx drawCtx, mcfchar* imgPath, 
+                            mcfint destX, mcfint destY, mcfint destWidth, mcfint destHeight, 
+                            mcfint srcX, mcfint srcY, mcfint srcWidth, mcfint srcHeight,
+                            mcfboolean extractImg) = 0;
+    virtual void draw_text(mcfwindow window, const mcfdrawctx drawCtx, const McfFontInfo& fontinfo, const McfColor& color,
+                           const mcfchar *str, mcfint posx, mcfint posy,
+                           mcfint width, mcfint height, MCFLabelAlignment align, mcfbyte paddingx, mcfbyte paddingy) = 0;
+    virtual mcfdrawctx begin_paint(const mcfwindow window, const mcfboolean forcedraw = FALSE) = 0;
+    virtual void end_paint(const mcfwindow window, mcfdrawctx drawCtx) = 0;
+    virtual mcfimage load_image(const mcfchar *imgPath) = 0;
+    virtual void unload_image(mcfimage imgData) = 0;
+    virtual mcffont create_font(const McfFontInfo& info) = 0;
+    virtual void destroy_font(mcffont font) = 0;
+    virtual void draw_rectangle(mcfwindow window, const mcfdrawctx drawCtx, mcfdouble posx, mcfdouble posy,
+                                mcfdouble width, mcfdouble height, const mcfdouble lineWidth, const McfColor& lineColor, mcfboolean fill, const McfColor& fillColor, mcfdouble radius, mcffloat alpha) = 0;
+    virtual McfSize get_image_size(mcfchar* imgPath) = 0;
+};
+
+class CMCFGraphics
+{
+    friend class CMCFImageProxy;
+    friend class CMCFFontProxy;
+
+private:
+    static CMCFGraphics* sInstance; /* For singleton */
+    CMCFGraphics();
+public :
+    ~CMCFGraphics();
+
+    static CMCFGraphics* get_instance();
+
+    void draw_image(mcfwindow window, const mcfdrawctx drawCtx, mcfchar* imgPath, mcfint destX, mcfint destY,
+                    mcfint destWidth = -1, mcfint destHeight = -1, mcfint srcX = 0, mcfint srcY = 0,
+                    mcfint srcWidth = -1, mcfint srcHeight = -1, mcfboolean extractImg = FALSE) {
+        get_mcf_graphics_impl()->draw_image(window, drawCtx, imgPath, destX, destY, destWidth, destHeight,
+                                                   srcX, srcY, srcWidth, srcHeight, extractImg);
+    }
+
+    void draw_text(mcfwindow window, const mcfdrawctx drawCtx, const McfFontInfo& fontinfo, const McfColor& color,
+                   const mcfchar *str, mcfint posx, mcfint posy, mcfint width = 0, mcfint height = 0, 
+                   MCFLabelAlignment align = LABEL_ALIGN_LEFT_TOP, mcfbyte paddingx = 0, mcfbyte paddingy = 0) {
+        get_mcf_graphics_impl()->draw_text(window, drawCtx, fontinfo, color, str, 
+                                           posx, posy, width, height, align, paddingx, paddingy);
+    }
+
+    mcfdrawctx begin_paint(const mcfwindow window, const mcfboolean forcedraw = FALSE) {
+        return get_mcf_graphics_impl()->begin_paint(window, forcedraw);
+    }
+
+    void end_paint(const mcfwindow window, mcfdrawctx drawCtx) {
+        return get_mcf_graphics_impl()->end_paint(window, drawCtx);
+    }
+
+    void draw_rectangle(mcfwindow window, const mcfdrawctx drawCtx, mcfdouble posx, mcfdouble posy,
+                        mcfdouble width, mcfdouble height, const mcfdouble lineWidth, const McfColor& lineColor,
+                        mcfboolean fill, const McfColor& fillColor, mcfdouble radius = 0, mcffloat alpha = 1.0) {
+        get_mcf_graphics_impl()->draw_rectangle(window, drawCtx, posx, posy, width, height, lineWidth,
+                                                       lineColor, fill, fillColor, radius, alpha);
+    }
+
+    McfSize get_image_size(mcfchar* imgPath) {
+        return get_mcf_graphics_impl()->get_image_size(imgPath);
+    }
+
+private:
+    mcfimage load_image(const mcfchar *imgPath) {
+        return get_mcf_graphics_impl()->load_image(imgPath);
+    }
+
+    void unload_image(mcfimage imgData) {
+        return get_mcf_graphics_impl()->unload_image(imgData);
+    }
+
+    mcffont create_font(const McfFontInfo& info) {
+        return get_mcf_graphics_impl()->create_font(info);
+    }
+    void destroy_font(mcffont font) {
+        get_mcf_graphics_impl()->destroy_font(font);
+    }
+
+protected :
+    CMCFGraphicsImpl* get_mcf_graphics_impl();
+
+private :
+    CMCFGraphicsImpl* pImp_;
+};
+
+
+} /* End of mcf namespace */
+
+#ifdef __cplusplus
+//MCF_END_DECLS
+#endif
+
+#endif //__MCF_GRAPHICS_H__
diff --git a/mcf/include/mcfgwes.h b/mcf/include/mcfgwes.h
new file mode 100755 (executable)
index 0000000..107ba5b
--- /dev/null
@@ -0,0 +1,70 @@
+/*
+ * Copyright 2012  Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.tizenopensource.org/license
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "mcftypes.h"
+#include "mcfconfig.h"
+#include "mcfwindows.h"
+#include "mcfgraphics.h"
+#include "mcfevents.h"
+
+#ifndef __MCF_GWES_H__
+#define __MCF_GWES_H__
+
+#ifdef __cplusplus
+//MCF_BEGIN_DECLS
+#endif
+
+namespace mcf
+{
+/**
+ * @brief The base class to work as a soft-based keyboard
+ *
+ * This class implements all functions for working as a soft-based keyboard
+ * In side of ISE developer, they can modify it by their requirements.
+ */
+class CMCFGwes
+{
+private:
+    static CMCFGwes* sInstance; /* For singleton */
+    CMCFGwes();
+public :
+    ~CMCFGwes();
+
+    static CMCFGwes* get_instance();
+
+private:
+
+public:
+    void init(mcfwindow parentWnd, mcf16 width, mcf16 height);
+
+    CMCFGraphics *mGrps;
+    CMCFWindows *mWnd;
+    CMCFEvents *mEvt;
+};
+
+} /* End of mcf namespace */
+
+#ifdef __cplusplus
+//MCF_END_DECLS
+#endif
+
+#endif //__MCF_GWES_H__
diff --git a/mcf/include/mcfimageproxy.h b/mcf/include/mcfimageproxy.h
new file mode 100755 (executable)
index 0000000..330048b
--- /dev/null
@@ -0,0 +1,48 @@
+/*
+ * Copyright 2012  Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.tizenopensource.org/license
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+
+#ifndef __MCF_IMAGE_PROXY_H__
+#define __MCF_IMAGE_PROXY_H__
+
+namespace mcf
+{
+class CMCFImageProxy
+{
+private:
+       static CMCFImageProxy* sInstance; /* For singleton */
+       CMCFImageProxy();
+public :
+    ~CMCFImageProxy();
+    
+    static CMCFImageProxy* get_instance();
+
+    mcfimage get_image(const mcfchar* imgPath);
+    void free_images();
+
+private:
+    static const mcfint MAX_IMAGE_PATH_LEN = 255;
+    typedef struct _McfImageCacheItem {
+        mcfchar imgPath[MAX_IMAGE_PATH_LEN + 1];
+        mcfimage imgData;
+    } McfImageCacheItem;
+
+    static const mcfint IMAGE_PROXY_SIZE = 1;
+    McfImageCacheItem mImageCacheItems[IMAGE_PROXY_SIZE];
+};
+} /* End of mcf namespace */
+#endif
diff --git a/mcf/include/mcfkeydefines.h b/mcf/include/mcfkeydefines.h
new file mode 100755 (executable)
index 0000000..cf11a1a
--- /dev/null
@@ -0,0 +1,2281 @@
+/*
+ * Copyright 2012  Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.tizenopensource.org/license
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+
+#ifndef __MCF_KEY_DEFINES_H__\r
+#define __MCF_KEY_DEFINES_H__\r
+\r
+/* Virtual key definitions to use in MCF */\r
+\r
+#define MVK_VoidSymbol 0xffffff\r
+#define MVK_BackSpace 0xff08\r
+#define MVK_Tab 0xff09\r
+#define MVK_Linefeed 0xff0a\r
+#define MVK_Clear 0xff0b\r
+#define MVK_Return 0xff0d\r
+#define MVK_Pause 0xff13\r
+#define MVK_Scroll_Lock 0xff14\r
+#define MVK_Sys_Req 0xff15\r
+#define MVK_Escape 0xff1b\r
+#define MVK_Delete 0xffff\r
+#define MVK_Multi_key 0xff20\r
+#define MVK_Codeinput 0xff37\r
+#define MVK_SingleCandidate 0xff3c\r
+#define MVK_MultipleCandidate 0xff3d\r
+#define MVK_PreviousCandidate 0xff3e\r
+#define MVK_Kanji 0xff21\r
+#define MVK_Muhenkan 0xff22\r
+#define MVK_Henkan_Mode 0xff23\r
+#define MVK_Henkan 0xff23\r
+#define MVK_Romaji 0xff24\r
+#define MVK_Hiragana 0xff25\r
+#define MVK_Katakana 0xff26\r
+#define MVK_Hiragana_Katakana 0xff27\r
+#define MVK_Zenkaku 0xff28\r
+#define MVK_Hankaku 0xff29\r
+#define MVK_Zenkaku_Hankaku 0xff2a\r
+#define MVK_Touroku 0xff2b\r
+#define MVK_Massyo 0xff2c\r
+#define MVK_Kana_Lock 0xff2d\r
+#define MVK_Kana_Shift 0xff2e\r
+#define MVK_Eisu_Shift 0xff2f\r
+#define MVK_Eisu_toggle 0xff30\r
+#define MVK_Kanji_Bangou 0xff37\r
+#define MVK_Zen_Koho 0xff3d\r
+#define MVK_Mae_Koho 0xff3e\r
+#define MVK_Home 0xff50\r
+#define MVK_Left 0xff51\r
+#define MVK_Up 0xff52\r
+#define MVK_Right 0xff53\r
+#define MVK_Down 0xff54\r
+#define MVK_Prior 0xff55\r
+#define MVK_Page_Up 0xff55\r
+#define MVK_Next 0xff56\r
+#define MVK_Page_Down 0xff56\r
+#define MVK_End 0xff57\r
+#define MVK_Begin 0xff58\r
+#define MVK_Select 0xff60\r
+#define MVK_Print 0xff61\r
+#define MVK_Execute 0xff62\r
+#define MVK_Insert 0xff63\r
+#define MVK_Undo 0xff65\r
+#define MVK_Redo 0xff66\r
+#define MVK_Menu 0xff67\r
+#define MVK_Find 0xff68\r
+#define MVK_Cancel 0xff69\r
+#define MVK_Help 0xff6a\r
+#define MVK_Break 0xff6b\r
+#define MVK_Mode_switch 0xff7e\r
+#define MVK_script_switch 0xff7e\r
+#define MVK_Num_Lock 0xff7f\r
+#define MVK_KP_Space 0xff80\r
+#define MVK_KP_Tab 0xff89\r
+#define MVK_KP_Enter 0xff8d\r
+#define MVK_KP_F1 0xff91\r
+#define MVK_KP_F2 0xff92\r
+#define MVK_KP_F3 0xff93\r
+#define MVK_KP_F4 0xff94\r
+#define MVK_KP_Home 0xff95\r
+#define MVK_KP_Left 0xff96\r
+#define MVK_KP_Up 0xff97\r
+#define MVK_KP_Right 0xff98\r
+#define MVK_KP_Down 0xff99\r
+#define MVK_KP_Prior 0xff9a\r
+#define MVK_KP_Page_Up 0xff9a\r
+#define MVK_KP_Next 0xff9b\r
+#define MVK_KP_Page_Down 0xff9b\r
+#define MVK_KP_End 0xff9c\r
+#define MVK_KP_Begin 0xff9d\r
+#define MVK_KP_Insert 0xff9e\r
+#define MVK_KP_Delete 0xff9f\r
+#define MVK_KP_Equal 0xffbd\r
+#define MVK_KP_Multiply 0xffaa\r
+#define MVK_KP_Add 0xffab\r
+#define MVK_KP_Separator 0xffac\r
+#define MVK_KP_Subtract 0xffad\r
+#define MVK_KP_Decimal 0xffae\r
+#define MVK_KP_Divide 0xffaf\r
+#define MVK_KP_0 0xffb0\r
+#define MVK_KP_1 0xffb1\r
+#define MVK_KP_2 0xffb2\r
+#define MVK_KP_3 0xffb3\r
+#define MVK_KP_4 0xffb4\r
+#define MVK_KP_5 0xffb5\r
+#define MVK_KP_6 0xffb6\r
+#define MVK_KP_7 0xffb7\r
+#define MVK_KP_8 0xffb8\r
+#define MVK_KP_9 0xffb9\r
+#define MVK_F1 0xffbe\r
+#define MVK_F2 0xffbf\r
+#define MVK_F3 0xffc0\r
+#define MVK_F4 0xffc1\r
+#define MVK_F5 0xffc2\r
+#define MVK_F6 0xffc3\r
+#define MVK_F7 0xffc4\r
+#define MVK_F8 0xffc5\r
+#define MVK_F9 0xffc6\r
+#define MVK_F10 0xffc7\r
+#define MVK_F11 0xffc8\r
+#define MVK_L1 0xffc8\r
+#define MVK_F12 0xffc9\r
+#define MVK_L2 0xffc9\r
+#define MVK_F13 0xffca\r
+#define MVK_L3 0xffca\r
+#define MVK_F14 0xffcb\r
+#define MVK_L4 0xffcb\r
+#define MVK_F15 0xffcc\r
+#define MVK_L5 0xffcc\r
+#define MVK_F16 0xffcd\r
+#define MVK_L6 0xffcd\r
+#define MVK_F17 0xffce\r
+#define MVK_L7 0xffce\r
+#define MVK_F18 0xffcf\r
+#define MVK_L8 0xffcf\r
+#define MVK_F19 0xffd0\r
+#define MVK_L9 0xffd0\r
+#define MVK_F20 0xffd1\r
+#define MVK_L10 0xffd1\r
+#define MVK_F21 0xffd2\r
+#define MVK_R1 0xffd2\r
+#define MVK_F22 0xffd3\r
+#define MVK_R2 0xffd3\r
+#define MVK_F23 0xffd4\r
+#define MVK_R3 0xffd4\r
+#define MVK_F24 0xffd5\r
+#define MVK_R4 0xffd5\r
+#define MVK_F25 0xffd6\r
+#define MVK_R5 0xffd6\r
+#define MVK_F26 0xffd7\r
+#define MVK_R6 0xffd7\r
+#define MVK_F27 0xffd8\r
+#define MVK_R7 0xffd8\r
+#define MVK_F28 0xffd9\r
+#define MVK_R8 0xffd9\r
+#define MVK_F29 0xffda\r
+#define MVK_R9 0xffda\r
+#define MVK_F30 0xffdb\r
+#define MVK_R10 0xffdb\r
+#define MVK_F31 0xffdc\r
+#define MVK_R11 0xffdc\r
+#define MVK_F32 0xffdd\r
+#define MVK_R12 0xffdd\r
+#define MVK_F33 0xffde\r
+#define MVK_R13 0xffde\r
+#define MVK_F34 0xffdf\r
+#define MVK_R14 0xffdf\r
+#define MVK_F35 0xffe0\r
+#define MVK_R15 0xffe0\r
+#define MVK_Shift_L 0xffe1\r
+#define MVK_Shift_R 0xffe2\r
+#define MVK_Control_L 0xffe3\r
+#define MVK_Control_R 0xffe4\r
+#define MVK_Caps_Lock 0xffe5\r
+#define MVK_Shift_Lock 0xffe6\r
+#define MVK_Meta_L 0xffe7\r
+#define MVK_Meta_R 0xffe8\r
+#define MVK_Alt_L 0xffe9\r
+#define MVK_Alt_R 0xffea\r
+#define MVK_Super_L 0xffeb\r
+#define MVK_Super_R 0xffec\r
+#define MVK_Hyper_L 0xffed\r
+#define MVK_Hyper_R 0xffee\r
+#define MVK_ISO_Lock 0xfe01\r
+#define MVK_ISO_Level2_Latch 0xfe02\r
+#define MVK_ISO_Level3_Shift 0xfe03\r
+#define MVK_ISO_Level3_Latch 0xfe04\r
+#define MVK_ISO_Level3_Lock 0xfe05\r
+#define MVK_ISO_Level5_Shift 0xfe11\r
+#define MVK_ISO_Level5_Latch 0xfe12\r
+#define MVK_ISO_Level5_Lock 0xfe13\r
+#define MVK_ISO_Group_Shift 0xff7e\r
+#define MVK_ISO_Group_Latch 0xfe06\r
+#define MVK_ISO_Group_Lock 0xfe07\r
+#define MVK_ISO_Next_Group 0xfe08\r
+#define MVK_ISO_Next_Group_Lock 0xfe09\r
+#define MVK_ISO_Prev_Group 0xfe0a\r
+#define MVK_ISO_Prev_Group_Lock 0xfe0b\r
+#define MVK_ISO_First_Group 0xfe0c\r
+#define MVK_ISO_First_Group_Lock 0xfe0d\r
+#define MVK_ISO_Last_Group 0xfe0e\r
+#define MVK_ISO_Last_Group_Lock 0xfe0f\r
+#define MVK_ISO_Left_Tab 0xfe20\r
+#define MVK_ISO_Move_Line_Up 0xfe21\r
+#define MVK_ISO_Move_Line_Down 0xfe22\r
+#define MVK_ISO_Partial_Line_Up 0xfe23\r
+#define MVK_ISO_Partial_Line_Down 0xfe24\r
+#define MVK_ISO_Partial_Space_Left 0xfe25\r
+#define MVK_ISO_Partial_Space_Right 0xfe26\r
+#define MVK_ISO_Set_Margin_Left 0xfe27\r
+#define MVK_ISO_Set_Margin_Right 0xfe28\r
+#define MVK_ISO_Release_Margin_Left 0xfe29\r
+#define MVK_ISO_Release_Margin_Right 0xfe2a\r
+#define MVK_ISO_Release_Both_Margins 0xfe2b\r
+#define MVK_ISO_Fast_Cursor_Left 0xfe2c\r
+#define MVK_ISO_Fast_Cursor_Right 0xfe2d\r
+#define MVK_ISO_Fast_Cursor_Up 0xfe2e\r
+#define MVK_ISO_Fast_Cursor_Down 0xfe2f\r
+#define MVK_ISO_Continuous_Underline 0xfe30\r
+#define MVK_ISO_Discontinuous_Underline 0xfe31\r
+#define MVK_ISO_Emphasize 0xfe32\r
+#define MVK_ISO_Center_Object 0xfe33\r
+#define MVK_ISO_Enter 0xfe34\r
+#define MVK_dead_grave 0xfe50\r
+#define MVK_dead_acute 0xfe51\r
+#define MVK_dead_circumflex 0xfe52\r
+#define MVK_dead_tilde 0xfe53\r
+#define MVK_dead_perispomeni 0xfe53\r
+#define MVK_dead_macron 0xfe54\r
+#define MVK_dead_breve 0xfe55\r
+#define MVK_dead_abovedot 0xfe56\r
+#define MVK_dead_diaeresis 0xfe57\r
+#define MVK_dead_abovering 0xfe58\r
+#define MVK_dead_doubleacute 0xfe59\r
+#define MVK_dead_caron 0xfe5a\r
+#define MVK_dead_cedilla 0xfe5b\r
+#define MVK_dead_ogonek 0xfe5c\r
+#define MVK_dead_iota 0xfe5d\r
+#define MVK_dead_voiced_sound 0xfe5e\r
+#define MVK_dead_semivoiced_sound 0xfe5f\r
+#define MVK_dead_belowdot 0xfe60\r
+#define MVK_dead_hook 0xfe61\r
+#define MVK_dead_horn 0xfe62\r
+#define MVK_dead_stroke 0xfe63\r
+#define MVK_dead_abovecomma 0xfe64\r
+#define MVK_dead_psili 0xfe64\r
+#define MVK_dead_abovereversedcomma 0xfe65\r
+#define MVK_dead_dasia 0xfe65\r
+#define MVK_First_Virtual_Screen 0xfed0\r
+#define MVK_Prev_Virtual_Screen 0xfed1\r
+#define MVK_Next_Virtual_Screen 0xfed2\r
+#define MVK_Last_Virtual_Screen 0xfed4\r
+#define MVK_Terminate_Server 0xfed5\r
+#define MVK_AccessX_Enable 0xfe70\r
+#define MVK_AccessX_Feedback_Enable 0xfe71\r
+#define MVK_RepeatKeys_Enable 0xfe72\r
+#define MVK_SlowKeys_Enable 0xfe73\r
+#define MVK_BounceKeys_Enable 0xfe74\r
+#define MVK_StickyKeys_Enable 0xfe75\r
+#define MVK_MouseKeys_Enable 0xfe76\r
+#define MVK_MouseKeys_Accel_Enable 0xfe77\r
+#define MVK_Overlay1_Enable 0xfe78\r
+#define MVK_Overlay2_Enable 0xfe79\r
+#define MVK_AudibleBell_Enable 0xfe7a\r
+#define MVK_Pointer_Left 0xfee0\r
+#define MVK_Pointer_Right 0xfee1\r
+#define MVK_Pointer_Up 0xfee2\r
+#define MVK_Pointer_Down 0xfee3\r
+#define MVK_Pointer_UpLeft 0xfee4\r
+#define MVK_Pointer_UpRight 0xfee5\r
+#define MVK_Pointer_DownLeft 0xfee6\r
+#define MVK_Pointer_DownRight 0xfee7\r
+#define MVK_Pointer_Button_Dflt 0xfee8\r
+#define MVK_Pointer_Button1 0xfee9\r
+#define MVK_Pointer_Button2 0xfeea\r
+#define MVK_Pointer_Button3 0xfeeb\r
+#define MVK_Pointer_Button4 0xfeec\r
+#define MVK_Pointer_Button5 0xfeed\r
+#define MVK_Pointer_DblClick_Dflt 0xfeee\r
+#define MVK_Pointer_DblClick1 0xfeef\r
+#define MVK_Pointer_DblClick2 0xfef0\r
+#define MVK_Pointer_DblClick3 0xfef1\r
+#define MVK_Pointer_DblClick4 0xfef2\r
+#define MVK_Pointer_DblClick5 0xfef3\r
+#define MVK_Pointer_Drag_Dflt 0xfef4\r
+#define MVK_Pointer_Drag1 0xfef5\r
+#define MVK_Pointer_Drag2 0xfef6\r
+#define MVK_Pointer_Drag3 0xfef7\r
+#define MVK_Pointer_Drag4 0xfef8\r
+#define MVK_Pointer_Drag5 0xfefd\r
+#define MVK_Pointer_EnableKeys 0xfef9\r
+#define MVK_Pointer_Accelerate 0xfefa\r
+#define MVK_Pointer_DfltBtnNext 0xfefb\r
+#define MVK_Pointer_DfltBtnPrev 0xfefc\r
+#define MVK_3270_Duplicate 0xfd01\r
+#define MVK_3270_FieldMark 0xfd02\r
+#define MVK_3270_Right2 0xfd03\r
+#define MVK_3270_Left2 0xfd04\r
+#define MVK_3270_BackTab 0xfd05\r
+#define MVK_3270_EraseEOF 0xfd06\r
+#define MVK_3270_EraseInput 0xfd07\r
+#define MVK_3270_Reset 0xfd08\r
+#define MVK_3270_Quit 0xfd09\r
+#define MVK_3270_PA1 0xfd0a\r
+#define MVK_3270_PA2 0xfd0b\r
+#define MVK_3270_PA3 0xfd0c\r
+#define MVK_3270_Test 0xfd0d\r
+#define MVK_3270_Attn 0xfd0e\r
+#define MVK_3270_CursorBlink 0xfd0f\r
+#define MVK_3270_AltCursor 0xfd10\r
+#define MVK_3270_KeyClick 0xfd11\r
+#define MVK_3270_Jump 0xfd12\r
+#define MVK_3270_Ident 0xfd13\r
+#define MVK_3270_Rule 0xfd14\r
+#define MVK_3270_Copy 0xfd15\r
+#define MVK_3270_Play 0xfd16\r
+#define MVK_3270_Setup 0xfd17\r
+#define MVK_3270_Record 0xfd18\r
+#define MVK_3270_ChangeScreen 0xfd19\r
+#define MVK_3270_DeleteWord 0xfd1a\r
+#define MVK_3270_ExSelect 0xfd1b\r
+#define MVK_3270_CursorSelect 0xfd1c\r
+#define MVK_3270_PrintScreen 0xfd1d\r
+#define MVK_3270_Enter 0xfd1e\r
+#define MVK_space 0x020\r
+#define MVK_exclam 0x021\r
+#define MVK_quotedbl 0x022\r
+#define MVK_numbersign 0x023\r
+#define MVK_dollar 0x024\r
+#define MVK_percent 0x025\r
+#define MVK_ampersand 0x026\r
+#define MVK_apostrophe 0x027\r
+#define MVK_quoteright 0x027\r
+#define MVK_parenleft 0x028\r
+#define MVK_parenright 0x029\r
+#define MVK_asterisk 0x02a\r
+#define MVK_plus 0x02b\r
+#define MVK_comma 0x02c\r
+#define MVK_minus 0x02d\r
+#define MVK_period 0x02e\r
+#define MVK_slash 0x02f\r
+#define MVK_0 0x030\r
+#define MVK_1 0x031\r
+#define MVK_2 0x032\r
+#define MVK_3 0x033\r
+#define MVK_4 0x034\r
+#define MVK_5 0x035\r
+#define MVK_6 0x036\r
+#define MVK_7 0x037\r
+#define MVK_8 0x038\r
+#define MVK_9 0x039\r
+#define MVK_colon 0x03a\r
+#define MVK_semicolon 0x03b\r
+#define MVK_less 0x03c\r
+#define MVK_equal 0x03d\r
+#define MVK_greater 0x03e\r
+#define MVK_question 0x03f\r
+#define MVK_at 0x040\r
+#define MVK_A 0x041\r
+#define MVK_B 0x042\r
+#define MVK_C 0x043\r
+#define MVK_D 0x044\r
+#define MVK_E 0x045\r
+#define MVK_F 0x046\r
+#define MVK_G 0x047\r
+#define MVK_H 0x048\r
+#define MVK_I 0x049\r
+#define MVK_J 0x04a\r
+#define MVK_K 0x04b\r
+#define MVK_L 0x04c\r
+#define MVK_M 0x04d\r
+#define MVK_N 0x04e\r
+#define MVK_O 0x04f\r
+#define MVK_P 0x050\r
+#define MVK_Q 0x051\r
+#define MVK_R 0x052\r
+#define MVK_S 0x053\r
+#define MVK_T 0x054\r
+#define MVK_U 0x055\r
+#define MVK_V 0x056\r
+#define MVK_W 0x057\r
+#define MVK_X 0x058\r
+#define MVK_Y 0x059\r
+#define MVK_Z 0x05a\r
+#define MVK_bracketleft 0x05b\r
+#define MVK_backslash 0x05c\r
+#define MVK_bracketright 0x05d\r
+#define MVK_asciicircum 0x05e\r
+#define MVK_underscore 0x05f\r
+#define MVK_grave 0x060\r
+#define MVK_quoteleft 0x060\r
+#define MVK_a 0x061\r
+#define MVK_b 0x062\r
+#define MVK_c 0x063\r
+#define MVK_d 0x064\r
+#define MVK_e 0x065\r
+#define MVK_f 0x066\r
+#define MVK_g 0x067\r
+#define MVK_h 0x068\r
+#define MVK_i 0x069\r
+#define MVK_j 0x06a\r
+#define MVK_k 0x06b\r
+#define MVK_l 0x06c\r
+#define MVK_m 0x06d\r
+#define MVK_n 0x06e\r
+#define MVK_o 0x06f\r
+#define MVK_p 0x070\r
+#define MVK_q 0x071\r
+#define MVK_r 0x072\r
+#define MVK_s 0x073\r
+#define MVK_t 0x074\r
+#define MVK_u 0x075\r
+#define MVK_v 0x076\r
+#define MVK_w 0x077\r
+#define MVK_x 0x078\r
+#define MVK_y 0x079\r
+#define MVK_z 0x07a\r
+#define MVK_braceleft 0x07b\r
+#define MVK_bar 0x07c\r
+#define MVK_braceright 0x07d\r
+#define MVK_asciitilde 0x07e\r
+#define MVK_nobreakspace 0x0a0\r
+#define MVK_exclamdown 0x0a1\r
+#define MVK_cent 0x0a2\r
+#define MVK_sterling 0x0a3\r
+#define MVK_currency 0x0a4\r
+#define MVK_yen 0x0a5\r
+#define MVK_brokenbar 0x0a6\r
+#define MVK_section 0x0a7\r
+#define MVK_diaeresis 0x0a8\r
+#define MVK_copyright 0x0a9\r
+#define MVK_ordfeminine 0x0aa\r
+#define MVK_guillemotleft 0x0ab\r
+#define MVK_notsign 0x0ac\r
+#define MVK_hyphen 0x0ad\r
+#define MVK_registered 0x0ae\r
+#define MVK_macron 0x0af\r
+#define MVK_degree 0x0b0\r
+#define MVK_plusminus 0x0b1\r
+#define MVK_twosuperior 0x0b2\r
+#define MVK_threesuperior 0x0b3\r
+#define MVK_acute 0x0b4\r
+#define MVK_mu 0x0b5\r
+#define MVK_paragraph 0x0b6\r
+#define MVK_periodcentered 0x0b7\r
+#define MVK_cedilla 0x0b8\r
+#define MVK_onesuperior 0x0b9\r
+#define MVK_masculine 0x0ba\r
+#define MVK_guillemotright 0x0bb\r
+#define MVK_onequarter 0x0bc\r
+#define MVK_onehalf 0x0bd\r
+#define MVK_threequarters 0x0be\r
+#define MVK_questiondown 0x0bf\r
+#define MVK_Agrave 0x0c0\r
+#define MVK_Aacute 0x0c1\r
+#define MVK_Acircumflex 0x0c2\r
+#define MVK_Atilde 0x0c3\r
+#define MVK_Adiaeresis 0x0c4\r
+#define MVK_Aring 0x0c5\r
+#define MVK_AE 0x0c6\r
+#define MVK_Ccedilla 0x0c7\r
+#define MVK_Egrave 0x0c8\r
+#define MVK_Eacute 0x0c9\r
+#define MVK_Ecircumflex 0x0ca\r
+#define MVK_Ediaeresis 0x0cb\r
+#define MVK_Igrave 0x0cc\r
+#define MVK_Iacute 0x0cd\r
+#define MVK_Icircumflex 0x0ce\r
+#define MVK_Idiaeresis 0x0cf\r
+#define MVK_ETH 0x0d0\r
+#define MVK_Eth 0x0d0\r
+#define MVK_Ntilde 0x0d1\r
+#define MVK_Ograve 0x0d2\r
+#define MVK_Oacute 0x0d3\r
+#define MVK_Ocircumflex 0x0d4\r
+#define MVK_Otilde 0x0d5\r
+#define MVK_Odiaeresis 0x00d6\r
+#define MVK_multiply 0x0d7\r
+#define MVK_Oslash 0x0d8\r
+#define MVK_OSLASH 0x00F8\r
+#define MVK_Ooblique 0x0d8\r
+#define MVK_Ugrave 0x0d9\r
+#define MVK_Uacute 0x0da\r
+#define MVK_Ucircumflex 0x0db\r
+#define MVK_Udiaeresis 0x0dc\r
+#define MVK_Yacute 0x0dd\r
+#define MVK_THORN 0x0de\r
+#define MVK_Thorn 0x0de\r
+#define MVK_ssharp 0x0df\r
+#define MVK_agrave 0x0e0\r
+#define MVK_aacute 0x0e1\r
+#define MVK_double_aacute 0x2dd\r
+#define MVK_acircumflex 0x0e2\r
+#define MVK_atilde 0x0e3\r
+#define MVK_adiaeresis 0x0e4\r
+#define MVK_aring 0x0e5\r
+#define MVK_ae 0x00E6\r
+#define MVK_ccedilla 0x0e7\r
+#define MVK_egrave 0x0e8\r
+#define MVK_eacute 0x0e9\r
+#define MVK_ecircumflex 0x0ea\r
+#define MVK_ediaeresis 0x0eb\r
+#define MVK_igrave 0x0ec\r
+#define MVK_iacute 0x0ed\r
+#define MVK_icircumflex 0x0ee\r
+#define MVK_idiaeresis 0x0ef\r
+#define MVK_eth 0x0f0\r
+#define MVK_ntilde 0x0f1\r
+#define MVK_ograve 0x0f2\r
+#define MVK_oacute 0x0f3\r
+#define MVK_ocircumflex 0x0f4\r
+#define MVK_otilde 0x0f5\r
+#define MVK_odiaeresis 0x00f6\r
+#define MVK_division 0x0f7\r
+#define MVK_oslash 0x0f8\r
+#define MVK_ooblique 0x0f8\r
+#define MVK_ugrave 0x0f9\r
+#define MVK_uacute 0x0fa\r
+#define MVK_ucircumflex 0x0fb\r
+#define MVK_udiaeresis 0x0fc\r
+#define MVK_uring 0x16F \r
+#define MVK_yacute 0x0fd\r
+#define MVK_thorn 0x0fe\r
+#define MVK_ydiaeresis 0x0ff\r
+#define MVK_Aogonek 0x1a1\r
+#define MVK_breve 0x1a2\r
+#define MVK_Lstroke 0x1a3\r
+#define MVK_Lcaron 0x1a5\r
+#define MVK_Sacute 0x1a6\r
+#define MVK_Scaron 0x1a9\r
+#define MVK_Scedilla 0x1aa\r
+#define MVK_Tcaron 0x1ab\r
+#define MVK_Zacute 0x1ac\r
+#define MVK_Zcaron 0x1ae\r
+#define MVK_Zabovedot 0x1af\r
+#define MVK_aogonek 0x1b1\r
+#define MVK_ogonek 0x1b2\r
+#define MVK_lstroke 0x1b3\r
+#define MVK_lcaron 0x1b5\r
+#define MVK_sacute 0x1b6\r
+#define MVK_caron 0x1b7\r
+#define MVK_scaron 0x1b9\r
+#define MVK_scedilla 0x1ba\r
+#define MVK_tcaron 0x1bb\r
+#define MVK_zacute 0x1bc\r
+#define MVK_doubleacute 0x1bd\r
+#define MVK_zcaron 0x1be\r
+#define MVK_zabovedot 0x1bf\r
+#define MVK_Racute 0x1c0\r
+#define MVK_Abreve 0x1c3\r
+#define MVK_Lacute 0x1c5\r
+#define MVK_Cacute 0x1c6\r
+#define MVK_Ccaron 0x1c8\r
+#define MVK_Eogonek 0x1ca\r
+#define MVK_Ecaron 0x1cc\r
+#define MVK_Dcaron 0x1cf\r
+#define MVK_Dstroke 0x1d0\r
+#define MVK_Nacute 0x1d1\r
+#define MVK_Ncaron 0x1d2\r
+#define MVK_Odoubleacute 0x1d5\r
+#define MVK_Rcaron 0x1d8\r
+#define MVK_Uring 0x1d9\r
+#define MVK_Udoubleacute 0x1db\r
+#define MVK_Tcedilla 0x1de\r
+#define MVK_racute 0x1e0\r
+#define MVK_abreve 0x1e3\r
+#define MVK_lacute 0x1e5\r
+#define MVK_cacute 0x1e6\r
+#define MVK_ccaron 0x1e8\r
+#define MVK_eogonek 0x1ea\r
+#define MVK_ecaron 0x1ec\r
+#define MVK_dcaron 0x1ef\r
+#define MVK_dstroke 0x1f0\r
+#define MVK_nacute 0x1f1\r
+#define MVK_ncaron 0x1f2\r
+#define MVK_odoubleacute 0x1f5\r
+#define MVK_udoubleacute 0x1fb\r
+#define MVK_rcaron 0x1f8\r
+#define MVK_tcedilla 0x1fe\r
+#define MVK_abovedot 0x1ff\r
+#define MVK_Hstroke 0x2a1\r
+#define MVK_Hcircumflex 0x2a6\r
+#define MVK_Iabovedot 0x2a9\r
+#define MVK_Gbreve 0x2ab\r
+#define MVK_Jcircumflex 0x2ac\r
+#define MVK_hstroke 0x2b1\r
+#define MVK_hcircumflex 0x2b6\r
+#define MVK_idotless 0x2b9\r
+#define MVK_gbreve 0x2bb\r
+#define MVK_jcircumflex 0x2bc\r
+#define MVK_Cabovedot 0x2c5\r
+#define MVK_Ccircumflex 0x2c6\r
+#define MVK_Caron 0x2c7\r
+#define MVK_Gabovedot 0x2d5\r
+#define MVK_Gcircumflex 0x2d8\r
+#define MVK_Ubreve 0x16c\r
+#define MVK_Scircumflex 0x2de\r
+#define MVK_cabovedot 0x2e5\r
+#define MVK_ccircumflex 0x2e6\r
+#define MVK_gabovedot 0x2f5\r
+#define MVK_gcircumflex 0x2f8\r
+#define MVK_ubreve 0x16d\r
+#define MVK_scircumflex 0x2fe\r
+#define MVK_kra 0x3a2\r
+#define MVK_kappa 0x3a2\r
+#define MVK_Rcedilla 0x3a3\r
+#define MVK_Itilde 0x3a5\r
+#define MVK_Lcedilla 0x3a6\r
+#define MVK_Emacron 0x3aa\r
+#define MVK_Gcedilla 0x3ab\r
+#define MVK_Tslash 0x3ac\r
+#define MVK_rcedilla 0x3b3\r
+#define MVK_itilde 0x3b5\r
+#define MVK_lcedilla 0x3b6\r
+#define MVK_emacron 0x3ba\r
+#define MVK_gcedilla 0x3bb\r
+#define MVK_tslash 0x3bc\r
+#define MVK_ENG 0x3bd\r
+#define MVK_eng 0x3bf\r
+#define MVK_Amacron 0x3c0\r
+#define MVK_Iogonek 0x3c7\r
+#define MVK_Eabovedot 0x3cc\r
+#define MVK_Imacron 0x3cf\r
+#define MVK_Ncedilla 0x3d1\r
+#define MVK_Omacron 0x3d2\r
+#define MVK_Kcedilla 0x3d3\r
+#define MVK_Uogonek 0x3d9\r
+#define MVK_Utilde 0x3dd\r
+#define MVK_Umacron 0x3de\r
+#define MVK_amacron 0x3e0\r
+#define MVK_iogonek 0x3e7\r
+#define MVK_eabovedot 0x3ec\r
+#define MVK_imacron 0x3ef\r
+#define MVK_ncedilla 0x3f1\r
+#define MVK_omacron 0x3f2\r
+#define MVK_kcedilla 0x3f3\r
+#define MVK_uogonek 0x3f9\r
+#define MVK_utilde 0x3fd\r
+#define MVK_umacron 0x3fe\r
+#define MVK_Babovedot 0x1e02\r
+#define MVK_babovedot 0x1e03\r
+#define MVK_Dabovedot 0x1e0a\r
+#define MVK_Wgrave 0x1e80\r
+#define MVK_Wacute 0x1e82\r
+#define MVK_dabovedot 0x1e0b\r
+#define MVK_Ygrave 0x1ef2\r
+#define MVK_Fabovedot 0x1e1e\r
+#define MVK_fabovedot 0x1e1f\r
+#define MVK_Mabovedot 0x1e40\r
+#define MVK_mabovedot 0x1e41\r
+#define MVK_Pabovedot 0x1e56\r
+#define MVK_wgrave 0x1e81\r
+#define MVK_pabovedot 0x1e57\r
+#define MVK_wacute 0x1e83\r
+#define MVK_Sabovedot 0x1e60\r
+#define MVK_ygrave 0x1ef3\r
+#define MVK_Wdiaeresis 0x1e84\r
+#define MVK_wdiaeresis 0x1e85\r
+#define MVK_sabovedot 0x1e61\r
+#define MVK_Wcircumflex 0x174\r
+#define MVK_Tabovedot 0x1e6a\r
+#define MVK_Ycircumflex 0x176\r
+#define MVK_wcircumflex 0x175\r
+#define MVK_tabovedot 0x1e6b\r
+#define MVK_ycircumflex 0x177\r
+#define MVK_OE 0x13bc\r
+#define MVK_oe 0x13bd\r
+#define MVK_Ydiaeresis 0x13be\r
+#define MVK_overline 0x47e\r
+#define MVK_kana_fullstop 0x4a1\r
+#define MVK_kana_openingbracket 0x4a2\r
+#define MVK_kana_closingbracket 0x4a3\r
+#define MVK_kana_comma 0x4a4\r
+#define MVK_kana_conjunctive 0x4a5\r
+#define MVK_kana_middledot 0x4a5\r
+#define MVK_kana_WO 0x4a6\r
+#define MVK_kana_a 0x4a7\r
+#define MVK_kana_i 0x4a8\r
+#define MVK_kana_u 0x4a9\r
+#define MVK_kana_e 0x4aa\r
+#define MVK_kana_o 0x4ab\r
+#define MVK_kana_ya 0x4ac\r
+#define MVK_kana_yu 0x4ad\r
+#define MVK_kana_yo 0x4ae\r
+#define MVK_kana_tsu 0x4af\r
+#define MVK_kana_tu 0x4af\r
+#define MVK_prolongedsound 0x4b0\r
+#define MVK_kana_A 0x4b1\r
+#define MVK_kana_I 0x4b2\r
+#define MVK_kana_U 0x4b3\r
+#define MVK_kana_E 0x4b4\r
+#define MVK_kana_O 0x4b5\r
+#define MVK_kana_KA 0x4b6\r
+#define MVK_kana_KI 0x4b7\r
+#define MVK_kana_KU 0x4b8\r
+#define MVK_kana_KE 0x4b9\r
+#define MVK_kana_KO 0x4ba\r
+#define MVK_kana_SA 0x4bb\r
+#define MVK_kana_SHI 0x4bc\r
+#define MVK_kana_SU 0x4bd\r
+#define MVK_kana_SE 0x4be\r
+#define MVK_kana_SO 0x4bf\r
+#define MVK_kana_TA 0x4c0\r
+#define MVK_kana_CHI 0x4c1\r
+#define MVK_kana_TI 0x4c1\r
+#define MVK_kana_TSU 0x4c2\r
+#define MVK_kana_TU 0x4c2\r
+#define MVK_kana_TE 0x4c3\r
+#define MVK_kana_TO 0x4c4\r
+#define MVK_kana_NA 0x4c5\r
+#define MVK_kana_NI 0x4c6\r
+#define MVK_kana_NU 0x4c7\r
+#define MVK_kana_NE 0x4c8\r
+#define MVK_kana_NO 0x4c9\r
+#define MVK_kana_HA 0x4ca\r
+#define MVK_kana_HI 0x4cb\r
+#define MVK_kana_FU 0x4cc\r
+#define MVK_kana_HU 0x4cc\r
+#define MVK_kana_HE 0x4cd\r
+#define MVK_kana_HO 0x4ce\r
+#define MVK_kana_MA 0x4cf\r
+#define MVK_kana_MI 0x4d0\r
+#define MVK_kana_MU 0x4d1\r
+#define MVK_kana_ME 0x4d2\r
+#define MVK_kana_MO 0x4d3\r
+#define MVK_kana_YA 0x4d4\r
+#define MVK_kana_YU 0x4d5\r
+#define MVK_kana_YO 0x4d6\r
+#define MVK_kana_RA 0x4d7\r
+#define MVK_kana_RI 0x4d8\r
+#define MVK_kana_RU 0x4d9\r
+#define MVK_kana_RE 0x4da\r
+#define MVK_kana_RO 0x4db\r
+#define MVK_kana_WA 0x4dc\r
+#define MVK_kana_N 0x4dd\r
+#define MVK_voicedsound 0x4de\r
+#define MVK_semivoicedsound 0x4df\r
+#define MVK_kana_switch 0xff7e\r
+#define MVK_Farsi_0 0x6f0\r
+#define MVK_Farsi_1 0x6f1\r
+#define MVK_Farsi_2 0x6f2\r
+#define MVK_Farsi_3 0x6f3\r
+#define MVK_Farsi_4 0x6f4\r
+#define MVK_Farsi_5 0x6f5\r
+#define MVK_Farsi_6 0x6f6\r
+#define MVK_Farsi_7 0x6f7\r
+#define MVK_Farsi_8 0x6f8\r
+#define MVK_Farsi_9 0x6f9\r
+#define MVK_Arabic_percent 0x66a\r
+#define MVK_Arabic_superscript_alef 0x670\r
+#define MVK_Arabic_tteh 0x679\r
+#define MVK_Arabic_peh 0x67e\r
+#define MVK_Arabic_tcheh 0x686\r
+#define MVK_Arabic_ddal 0x688\r
+#define MVK_Arabic_rreh 0x691\r
+#define MVK_Arabic_comma 0x60C\r
+#define MVK_Arabic_fullstop 0x6d4\r
+#define MVK_Arabic_0 0x660\r
+#define MVK_Arabic_1 0x661\r
+#define MVK_Arabic_2 0x662\r
+#define MVK_Arabic_3 0x663\r
+#define MVK_Arabic_4 0x664\r
+#define MVK_Arabic_5 0x665\r
+#define MVK_Arabic_6 0x666\r
+#define MVK_Arabic_7 0x667\r
+#define MVK_Arabic_8 0x668\r
+#define MVK_Arabic_9 0x669\r
+#define MVK_Arabic_semicolon 0x61B\r
+#define MVK_Arabic_question_mark 0x61F\r
+#define MVK_Arabic_hamza 0x621\r
+#define MVK_Arabic_maddaonalef 0x622\r
+#define MVK_Arabic_hamzaonalef 0x623\r
+#define MVK_Arabic_hamzaonwaw 0x624\r
+#define MVK_Arabic_hamzaunderalef 0x625\r
+#define MVK_Arabic_hamzaonyeh 0x626\r
+#define MVK_Arabic_alef 0x627\r
+#define MVK_Arabic_beh 0x628\r
+#define MVK_Arabic_tehmarbuta 0x629\r
+#define MVK_Arabic_teh 0x62A\r
+#define MVK_Arabic_theh 0x62B\r
+#define MVK_Arabic_jeem 0x62C\r
+#define MVK_Arabic_hah 0x62D\r
+#define MVK_Arabic_khah 0x62E\r
+#define MVK_Arabic_dal 0x62F\r
+#define MVK_Arabic_thal 0x630\r
+#define MVK_Arabic_reh 0x631\r
+#define MVK_Arabic_zain 0x632\r
+#define MVK_Arabic_seen 0x633\r
+#define MVK_Arabic_sheen 0x634\r
+#define MVK_Arabic_sad 0x635\r
+#define MVK_Arabic_dad 0x636\r
+#define MVK_Arabic_tah 0x637\r
+#define MVK_Arabic_zah 0x638\r
+#define MVK_Arabic_ain 0x639\r
+#define MVK_Arabic_ghain 0x63A\r
+#define MVK_Arabic_tatweel 0x640\r
+#define MVK_Arabic_feh 0x641\r
+#define MVK_Arabic_qaf 0x642\r
+#define MVK_Arabic_kaf 0x643\r
+#define MVK_Arabic_lam 0x644\r
+#define MVK_Arabic_meem 0x645\r
+#define MVK_Arabic_noon 0x646\r
+#define MVK_Arabic_ha 0x647\r
+#define MVK_Arabic_heh 0x647\r
+#define MVK_Arabic_waw 0x648\r
+#define MVK_Arabic_alefmaksura 0x649\r
+#define MVK_Arabic_yeh 0x64A\r
+#define MVK_Arabic_fathatan 0x64B\r
+#define MVK_Arabic_dammatan 0x64C\r
+#define MVK_Arabic_kasratan 0x64D\r
+#define MVK_Arabic_fatha 0x64E\r
+#define MVK_Arabic_damma 0x64F\r
+#define MVK_Arabic_kasra 0x650\r
+#define MVK_Arabic_shadda 0x651\r
+#define MVK_Arabic_sukun 0x652\r
+#define MVK_Arabic_madda_above 0x653\r
+#define MVK_Arabic_hamza_above 0x654\r
+#define MVK_Arabic_hamza_below 0x655\r
+#define MVK_Arabic_jeh 0x698\r
+#define MVK_Arabic_veh 0x6a4\r
+#define MVK_Arabic_keheh 0x6a9\r
+#define MVK_Arabic_gaf 0x6af\r
+#define MVK_Arabic_noon_ghunna 0x6ba\r
+#define MVK_Arabic_heh_doachashmee 0x6be\r
+#define MVK_Farsi_yeh 0x6cc\r
+#define MVK_Arabic_farsi_yeh 0x6cc\r
+#define MVK_Arabic_yeh_barree 0x6d2\r
+#define MVK_Arabic_ae 0x6d5\r
+#define MVK_Arabic_heh_goal 0x6c1\r
+#define MVK_Arabic_ligature_lam_with_alef_with_hamza_below_isolated_form 0Xfef9\r
+#define MVK_Arabic_ligature_lam_with_alef_with_hamza_above_isolated_form 0Xfef7\r
+#define MVK_Arabic_ligature_lam_with_alef_isolated_form 0Xfefb\r
+#define MVK_Arabic_ligature_lam_with_alef_with_madda_above_isolated_form 0Xfef5\r
+#define MVK_Arabic_switch 0xff7e\r
+#define MVK_Cyrillic_GHE_bar 0x492\r
+#define MVK_Cyrillic_ghe_bar 0x493\r
+#define MVK_Cyrillic_ZHE_descender 0x496\r
+#define MVK_Cyrillic_zhe_descender 0x497\r
+#define MVK_Cyrillic_KA_descender 0x49a\r
+#define MVK_Cyrillic_ka_descender 0x49b\r
+#define MVK_Cyrillic_KA_vertstroke 0x49c\r
+#define MVK_Cyrillic_ka_vertstroke 0x49d\r
+#define MVK_Cyrillic_EN_descender 0x4a2\r
+#define MVK_Cyrillic_en_descender 0x4a3\r
+#define MVK_Cyrillic_U_straight 0x4ae\r
+#define MVK_Cyrillic_u_straight 0x4af\r
+#define MVK_Cyrillic_U_straight_bar 0x4b0\r
+#define MVK_Cyrillic_u_straight_bar 0x4b1\r
+#define MVK_Cyrillic_HA_descender 0x4b2\r
+#define MVK_Cyrillic_ha_descender 0x4b3\r
+#define MVK_Cyrillic_CHE_descender 0x4b6\r
+#define MVK_Cyrillic_che_descender 0x4b7\r
+#define MVK_Cyrillic_CHE_vertstroke 0x4b8\r
+#define MVK_Cyrillic_che_vertstroke 0x4b9\r
+#define MVK_Cyrillic_SHHA 0x4ba\r
+#define MVK_Cyrillic_shha 0x4bb\r
+#define MVK_Cyrillic_SCHWA 0x4d8\r
+#define MVK_Cyrillic_schwa 0x4d9\r
+#define MVK_Cyrillic_I_macron 0x4e2\r
+#define MVK_Cyrillic_i_macron 0x4e3\r
+#define MVK_Cyrillic_O_bar 0x4e8\r
+#define MVK_Cyrillic_o_bar 0x4e9\r
+#define MVK_Cyrillic_U_macron 0x4ee\r
+#define MVK_Cyrillic_u_macron 0x4ef\r
+#define MVK_Serbian_dje 0x6a1\r
+#define MVK_Macedonia_gje 0x6a2\r
+#define MVK_Cyrillic_io 0x6a3\r
+#define MVK_Ukrainian_ie 0x6a4\r
+#define MVK_Ukranian_je 0x6a4\r
+#define MVK_Macedonia_dse 0x6a5\r
+#define MVK_Ukrainian_i 0x6a6\r
+#define MVK_Ukranian_i 0x6a6\r
+#define MVK_Ukrainian_yi 0x6a7\r
+#define MVK_Ukranian_yi 0x6a7\r
+#define MVK_Cyrillic_je 0x6a8\r
+#define MVK_Serbian_je 0x6a8\r
+#define MVK_Cyrillic_lje 0x6a9\r
+#define MVK_Serbian_lje 0x6a9\r
+#define MVK_Cyrillic_nje 0x6aa\r
+#define MVK_Serbian_nje 0x6aa\r
+#define MVK_Serbian_tshe 0x6ab\r
+#define MVK_Macedonia_kje 0x6ac\r
+#define MVK_Ukrainian_ghe_with_upturn 0x6ad\r
+#define MVK_Byelorussian_shortu 0x6ae\r
+#define MVK_Cyrillic_dzhe 0x6af\r
+#define MVK_Serbian_dze 0x6af\r
+#define MVK_numerosign 0x6b0\r
+#define MVK_Serbian_DJE 0x6b1\r
+#define MVK_Macedonia_GJE 0x6b2\r
+#define MVK_Cyrillic_IO 0x6b3\r
+#define MVK_Ukrainian_IE 0x6b4\r
+#define MVK_Ukranian_JE 0x6b4\r
+#define MVK_Macedonia_DSE 0x6b5\r
+#define MVK_Ukrainian_I 0x6b6\r
+#define MVK_Ukranian_I 0x6b6\r
+#define MVK_Ukrainian_YI 0x6b7\r
+#define MVK_Ukranian_YI 0x6b7\r
+#define MVK_Cyrillic_JE 0x6b8\r
+#define MVK_Serbian_JE 0x6b8\r
+#define MVK_Cyrillic_LJE 0x6b9\r
+#define MVK_Serbian_LJE 0x6b9\r
+#define MVK_Cyrillic_NJE 0x6ba\r
+#define MVK_Serbian_NJE 0x6ba\r
+#define MVK_Serbian_TSHE 0x6bb\r
+#define MVK_Macedonia_KJE 0x6bc\r
+#define MVK_Ukrainian_GHE_WITH_UPTURN 0x6bd\r
+#define MVK_Byelorussian_SHORTU 0x6be\r
+#define MVK_Cyrillic_DZHE 0x6bf\r
+#define MVK_Serbian_DZE 0x6bf\r
+#define MVK_Cyrillic_yu 0x6c0\r
+#define MVK_Cyrillic_a 0x6c1\r
+#define MVK_Cyrillic_be 0x6c2\r
+#define MVK_Cyrillic_tse 0x6c3\r
+#define MVK_Cyrillic_de 0x6c4\r
+#define MVK_Cyrillic_ie 0x6c5\r
+#define MVK_Cyrillic_ef 0x6c6\r
+#define MVK_Cyrillic_ghe 0x6c7\r
+#define MVK_Cyrillic_ha 0x6c8\r
+#define MVK_Cyrillic_i 0x6c9\r
+#define MVK_Cyrillic_shorti 0x6ca\r
+#define MVK_Cyrillic_ka 0x6cb\r
+#define MVK_Cyrillic_el 0x6cc\r
+#define MVK_Cyrillic_em 0x6cd\r
+#define MVK_Cyrillic_en 0x6ce\r
+#define MVK_Cyrillic_o 0x6cf\r
+#define MVK_Cyrillic_pe 0x6d0\r
+#define MVK_Cyrillic_ya 0x6d1\r
+#define MVK_Cyrillic_er 0x6d2\r
+#define MVK_Cyrillic_es 0x6d3\r
+#define MVK_Cyrillic_te 0x6d4\r
+#define MVK_Cyrillic_u 0x6d5\r
+#define MVK_Cyrillic_zhe 0x6d6\r
+#define MVK_Cyrillic_ve 0x6d7\r
+#define MVK_Cyrillic_softsign 0x6d8\r
+#define MVK_Cyrillic_yeru 0x6d9\r
+#define MVK_Cyrillic_ze 0x6da\r
+#define MVK_Cyrillic_sha 0x6db\r
+#define MVK_Cyrillic_e 0x6dc\r
+#define MVK_Cyrillic_shcha 0x6dd\r
+#define MVK_Cyrillic_che 0x6de\r
+#define MVK_Cyrillic_hardsign 0x6df\r
+#define MVK_Cyrillic_YU 0x6e0\r
+#define MVK_Cyrillic_A 0x6e1\r
+#define MVK_Cyrillic_BE 0x6e2\r
+#define MVK_Cyrillic_TSE 0x6e3\r
+#define MVK_Cyrillic_DE 0x6e4\r
+#define MVK_Cyrillic_IE 0x6e5\r
+#define MVK_Cyrillic_EF 0x6e6\r
+#define MVK_Cyrillic_GHE 0x6e7\r
+#define MVK_Cyrillic_HA 0x6e8\r
+#define MVK_Cyrillic_I 0x6e9\r
+#define MVK_Cyrillic_SHORTI 0x6ea\r
+#define MVK_Cyrillic_KA 0x6eb\r
+#define MVK_Cyrillic_EL 0x6ec\r
+#define MVK_Cyrillic_EM 0x6ed\r
+#define MVK_Cyrillic_EN 0x6ee\r
+#define MVK_Cyrillic_O 0x6ef\r
+#define MVK_Cyrillic_PE 0x6f0\r
+#define MVK_Cyrillic_YA 0x6f1\r
+#define MVK_Cyrillic_ER 0x6f2\r
+#define MVK_Cyrillic_ES 0x6f3\r
+#define MVK_Cyrillic_TE 0x6f4\r
+#define MVK_Cyrillic_U 0x6f5\r
+#define MVK_Cyrillic_ZHE 0x6f6\r
+#define MVK_Cyrillic_VE 0x6f7\r
+#define MVK_Cyrillic_SOFTSIGN 0x6f8\r
+#define MVK_Cyrillic_YERU 0x6f9\r
+#define MVK_Cyrillic_ZE 0x6fa\r
+#define MVK_Cyrillic_SHA 0x6fb\r
+#define MVK_Cyrillic_E 0x6fc\r
+#define MVK_Cyrillic_SHCHA 0x6fd\r
+#define MVK_Cyrillic_CHE 0x6fe\r
+#define MVK_Cyrillic_HARDSIGN 0x6ff\r
+#define MVK_Greek_ALPHAaccent 0x7a1\r
+#define MVK_Greek_EPSILONaccent 0x7a2\r
+#define MVK_Greek_ETAaccent 0x7a3\r
+#define MVK_Greek_IOTAaccent 0x7a4\r
+#define MVK_Greek_IOTAdieresis 0x7a5\r
+#define MVK_Greek_IOTAdiaeresis 0x7a5\r
+#define MVK_Greek_OMICRONaccent 0x7a7\r
+#define MVK_Greek_UPSILONaccent 0x7a8\r
+#define MVK_Greek_UPSILONdieresis 0x7a9\r
+#define MVK_Greek_OMEGAaccent 0x7ab\r
+#define MVK_Greek_accentdieresis 0x7ae\r
+#define MVK_Greek_horizbar 0x7af\r
+#define MVK_Greek_alphaaccent 0x7b1\r
+#define MVK_Greek_epsilonaccent 0x7b2\r
+#define MVK_Greek_etaaccent 0x7b3\r
+#define MVK_Greek_iotaaccent 0x7b4\r
+#define MVK_Greek_iotadieresis 0x7b5\r
+#define MVK_Greek_iotaaccentdieresis 0x7b6\r
+#define MVK_Greek_omicronaccent 0x7b7\r
+#define MVK_Greek_upsilonaccent 0x7b8\r
+#define MVK_Greek_upsilondieresis 0x7b9\r
+#define MVK_Greek_upsilonaccentdieresis 0x7ba\r
+#define MVK_Greek_omegaaccent 0x7bb\r
+#define MVK_Greek_ALPHA 0x7c1\r
+#define MVK_Greek_BETA 0x7c2\r
+#define MVK_Greek_GAMMA 0x7c3\r
+#define MVK_Greek_DELTA 0x7c4\r
+#define MVK_Greek_EPSILON 0x7c5\r
+#define MVK_Greek_ZETA 0x7c6\r
+#define MVK_Greek_ETA 0x7c7\r
+#define MVK_Greek_THETA 0x7c8\r
+#define MVK_Greek_IOTA 0x7c9\r
+#define MVK_Greek_KAPPA 0x7ca\r
+#define MVK_Greek_LAMDA 0x7cb\r
+#define MVK_Greek_LAMBDA 0x7cb\r
+#define MVK_Greek_MU 0x7cc\r
+#define MVK_Greek_NU 0x7cd\r
+#define MVK_Greek_XI 0x7ce\r
+#define MVK_Greek_OMICRON 0x7cf\r
+#define MVK_Greek_PI 0x7d0\r
+#define MVK_Greek_RHO 0x7d1\r
+#define MVK_Greek_SIGMA 0x7d2\r
+#define MVK_Greek_TAU 0x7d4\r
+#define MVK_Greek_UPSILON 0x7d5\r
+#define MVK_Greek_PHI 0x7d6\r
+#define MVK_Greek_CHI 0x7d7\r
+#define MVK_Greek_PSI 0x7d8\r
+#define MVK_Greek_OMEGA 0x7d9\r
+#define MVK_Greek_alpha 0x7e1\r
+#define MVK_Greek_beta 0x7e2\r
+#define MVK_Greek_gamma 0x7e3\r
+#define MVK_Greek_delta 0x7e4\r
+#define MVK_Greek_epsilon 0x7e5\r
+#define MVK_Greek_zeta 0x7e6\r
+#define MVK_Greek_eta 0x7e7\r
+#define MVK_Greek_theta 0x7e8\r
+#define MVK_Greek_iota 0x7e9\r
+#define MVK_Greek_kappa 0x7ea\r
+#define MVK_Greek_lamda 0x7eb\r
+#define MVK_Greek_lambda 0x7eb\r
+#define MVK_Greek_mu 0x7ec\r
+#define MVK_Greek_nu 0x7ed\r
+#define MVK_Greek_xi 0x7ee\r
+#define MVK_Greek_omicron 0x7ef\r
+#define MVK_Greek_pi 0x7f0\r
+#define MVK_Greek_rho 0x7f1\r
+#define MVK_Greek_sigma 0x7f2\r
+#define MVK_Greek_finalsmallsigma 0x7f3\r
+#define MVK_Greek_tau 0x7f4\r
+#define MVK_Greek_upsilon 0x7f5\r
+#define MVK_Greek_phi 0x7f6\r
+#define MVK_Greek_chi 0x7f7\r
+#define MVK_Greek_psi 0x7f8\r
+#define MVK_Greek_omega 0x7f9\r
+#define MVK_Greek_switch 0xff7e\r
+#define MVK_leftradical 0x8a1\r
+#define MVK_topleftradical 0x8a2\r
+#define MVK_horizconnector 0x8a3\r
+#define MVK_topintegral 0x8a4\r
+#define MVK_botintegral 0x8a5\r
+#define MVK_vertconnector 0x8a6\r
+#define MVK_topleftsqbracket 0x8a7\r
+#define MVK_botleftsqbracket 0x8a8\r
+#define MVK_toprightsqbracket 0x8a9\r
+#define MVK_botrightsqbracket 0x8aa\r
+#define MVK_topleftparens 0x8ab\r
+#define MVK_botleftparens 0x8ac\r
+#define MVK_toprightparens 0x8ad\r
+#define MVK_botrightparens 0x8ae\r
+#define MVK_leftmiddlecurlybrace 0x8af\r
+#define MVK_rightmiddlecurlybrace 0x8b0\r
+#define MVK_topleftsummation 0x8b1\r
+#define MVK_botleftsummation 0x8b2\r
+#define MVK_topvertsummationconnector 0x8b3\r
+#define MVK_botvertsummationconnector 0x8b4\r
+#define MVK_toprightsummation 0x8b5\r
+#define MVK_botrightsummation 0x8b6\r
+#define MVK_rightmiddlesummation 0x8b7\r
+#define MVK_lessthanequal 0x8bc\r
+#define MVK_notequal 0x8bd\r
+#define MVK_greaterthanequal 0x8be\r
+#define MVK_integral 0x8bf\r
+#define MVK_therefore 0x8c0\r
+#define MVK_variation 0x8c1\r
+#define MVK_infinity 0x8c2\r
+#define MVK_nabla 0x8c5\r
+#define MVK_approximate 0x8c8\r
+#define MVK_similarequal 0x8c9\r
+#define MVK_ifonlyif 0x8cd\r
+#define MVK_implies 0x8ce\r
+#define MVK_identical 0x8cf\r
+#define MVK_radical 0x8d6\r
+#define MVK_includedin 0x8da\r
+#define MVK_includes 0x8db\r
+#define MVK_intersection 0x8dc\r
+#define MVK_union 0x8dd\r
+#define MVK_logicaland 0x8de\r
+#define MVK_logicalor 0x8df\r
+#define MVK_partialderivative 0x8ef\r
+#define MVK_function 0x8f6\r
+#define MVK_leftarrow 0x8fb\r
+#define MVK_uparrow 0x8fc\r
+#define MVK_rightarrow 0x8fd\r
+#define MVK_downarrow 0x8fe\r
+#define MVK_blank 0x9df\r
+#define MVK_soliddiamond 0x9e0\r
+#define MVK_checkerboard 0x9e1\r
+#define MVK_ht 0x9e2\r
+#define MVK_ff 0x9e3\r
+#define MVK_cr 0x9e4\r
+#define MVK_lf 0x9e5\r
+#define MVK_nl 0x9e8\r
+#define MVK_vt 0x9e9\r
+#define MVK_lowrightcorner 0x9ea\r
+#define MVK_uprightcorner 0x9eb\r
+#define MVK_upleftcorner 0x9ec\r
+#define MVK_lowleftcorner 0x9ed\r
+#define MVK_crossinglines 0x9ee\r
+#define MVK_horizlinescan1 0x9ef\r
+#define MVK_horizlinescan3 0x9f0\r
+#define MVK_horizlinescan5 0x9f1\r
+#define MVK_horizlinescan7 0x9f2\r
+#define MVK_horizlinescan9 0x9f3\r
+#define MVK_leftt 0x9f4\r
+#define MVK_rightt 0x9f5\r
+#define MVK_bott 0x9f6\r
+#define MVK_topt 0x9f7\r
+#define MVK_vertbar 0x9f8\r
+#define MVK_emspace 0xaa1\r
+#define MVK_enspace 0xaa2\r
+#define MVK_em3space 0xaa3\r
+#define MVK_em4space 0xaa4\r
+#define MVK_digitspace 0xaa5\r
+#define MVK_punctspace 0xaa6\r
+#define MVK_thinspace 0xaa7\r
+#define MVK_hairspace 0xaa8\r
+#define MVK_emdash 0xaa9\r
+#define MVK_endash 0xaaa\r
+#define MVK_signifblank 0xaac\r
+#define MVK_ellipsis 0xaae\r
+#define MVK_doubbaselinedot 0xaaf\r
+#define MVK_onethird 0xab0\r
+#define MVK_twothirds 0xab1\r
+#define MVK_onefifth 0xab2\r
+#define MVK_twofifths 0xab3\r
+#define MVK_threefifths 0xab4\r
+#define MVK_fourfifths 0xab5\r
+#define MVK_onesixth 0xab6\r
+#define MVK_fivesixths 0xab7\r
+#define MVK_careof 0xab8\r
+#define MVK_figdash 0xabb\r
+#define MVK_leftanglebracket 0xabc\r
+#define MVK_decimalpoint 0xabd\r
+#define MVK_rightanglebracket 0xabe\r
+#define MVK_marker 0xabf\r
+#define MVK_oneeighth 0xac3\r
+#define MVK_threeeighths 0xac4\r
+#define MVK_fiveeighths 0xac5\r
+#define MVK_seveneighths 0xac6\r
+#define MVK_trademark 0xac9\r
+#define MVK_signaturemark 0xaca\r
+#define MVK_trademarkincircle 0xacb\r
+#define MVK_leftopentriangle 0xacc\r
+#define MVK_rightopentriangle 0xacd\r
+#define MVK_emopencircle 0xace\r
+#define MVK_emopenrectangle 0xacf\r
+#define MVK_leftsinglequotemark 0xad0\r
+#define MVK_rightsinglequotemark 0xad1\r
+#define MVK_leftdoublequotemark 0xad2\r
+#define MVK_rightdoublequotemark 0xad3\r
+#define MVK_prescription 0xad4\r
+#define MVK_minutes 0xad6\r
+#define MVK_seconds 0xad7\r
+#define MVK_latincross 0xad9\r
+#define MVK_hexagram 0xada\r
+#define MVK_filledrectbullet 0xadb\r
+#define MVK_filledlefttribullet 0xadc\r
+#define MVK_filledrighttribullet 0xadd\r
+#define MVK_emfilledcircle 0xade\r
+#define MVK_emfilledrect 0xadf\r
+#define MVK_enopencircbullet 0xae0\r
+#define MVK_enopensquarebullet 0xae1\r
+#define MVK_openrectbullet 0xae2\r
+#define MVK_opentribulletup 0xae3\r
+#define MVK_opentribulletdown 0xae4\r
+#define MVK_openstar 0xae5\r
+#define MVK_enfilledcircbullet 0xae6\r
+#define MVK_enfilledsqbullet 0xae7\r
+#define MVK_filledtribulletup 0xae8\r
+#define MVK_filledtribulletdown 0xae9\r
+#define MVK_leftpointer 0xaea\r
+#define MVK_rightpointer 0xaeb\r
+#define MVK_club 0xaec\r
+#define MVK_diamond 0xaed\r
+#define MVK_heart 0xaee\r
+#define MVK_maltesecross 0xaf0\r
+#define MVK_dagger 0xaf1\r
+#define MVK_doubledagger 0xaf2\r
+#define MVK_checkmark 0xaf3\r
+#define MVK_ballotcross 0xaf4\r
+#define MVK_musicalsharp 0xaf5\r
+#define MVK_musicalflat 0xaf6\r
+#define MVK_malesymbol 0xaf7\r
+#define MVK_femalesymbol 0xaf8\r
+#define MVK_telephone 0xaf9\r
+#define MVK_telephonerecorder 0xafa\r
+#define MVK_phonographcopyright 0xafb\r
+#define MVK_caret 0xafc\r
+#define MVK_singlelowquotemark 0xafd\r
+#define MVK_doublelowquotemark 0xafe\r
+#define MVK_cursor 0xaff\r
+#define MVK_leftcaret 0xba3\r
+#define MVK_rightcaret 0xba6\r
+#define MVK_downcaret 0xba8\r
+#define MVK_upcaret 0xba9\r
+#define MVK_overbar 0xbc0\r
+#define MVK_downtack 0xbc2\r
+#define MVK_upshoe 0xbc3\r
+#define MVK_downstile 0xbc4\r
+#define MVK_underbar 0xbc6\r
+#define MVK_jot 0xbca\r
+#define MVK_quad 0xbcc\r
+#define MVK_uptack 0xbce\r
+#define MVK_circle 0xbcf\r
+#define MVK_upstile 0xbd3\r
+#define MVK_downshoe 0xbd6\r
+#define MVK_rightshoe 0xbd8\r
+#define MVK_leftshoe 0xbda\r
+#define MVK_lefttack 0xbdc\r
+#define MVK_righttack 0xbfc\r
+#define MVK_hebrew_doublelowline 0xcdf\r
+#define MVK_hebrew_aleph 0x5D0\r
+#define MVK_hebrew_bet 0x5D1\r
+#define MVK_hebrew_beth 0x5D1\r
+#define MVK_hebrew_gimel 0x5D2\r
+#define MVK_hebrew_gimmel 0x5D2\r
+#define MVK_hebrew_dalet 0x5D3\r
+#define MVK_hebrew_daleth 0x5D3\r
+#define MVK_hebrew_he 0x5D4\r
+#define MVK_hebrew_waw 0x5D5\r
+#define MVK_hebrew_zain 0x5D6\r
+#define MVK_hebrew_zayin 0x5D6\r
+#define MVK_hebrew_chet 0x5D7\r
+#define MVK_hebrew_het 0x5D7\r
+#define MVK_hebrew_tet 0x5D8\r
+#define MVK_hebrew_teth 0x5D8\r
+#define MVK_hebrew_yod 0x5D9\r
+#define MVK_hebrew_finalkaph 0x5DA\r
+#define MVK_hebrew_kaph 0x5DB\r
+#define MVK_hebrew_lamed 0x5DC\r
+#define MVK_hebrew_finalmem 0x5DD\r
+#define MVK_hebrew_mem 0x5DE\r
+#define MVK_hebrew_finalnun 0x5DF\r
+#define MVK_hebrew_nun 0x5E0\r
+#define MVK_hebrew_samech 0x5E1\r
+#define MVK_hebrew_samekh 0x5E1\r
+#define MVK_hebrew_ayin 0x5E2\r
+#define MVK_hebrew_finalpe 0x5E3\r
+#define MVK_hebrew_pe 0x5E4\r
+#define MVK_hebrew_finalzade 0x5E5\r
+#define MVK_hebrew_finalzadi 0x5E5\r
+#define MVK_hebrew_zade 0x5E6\r
+#define MVK_hebrew_zadi 0x5E6\r
+#define MVK_hebrew_qoph 0x5E7\r
+#define MVK_hebrew_kuf 0x5E7\r
+#define MVK_hebrew_resh 0x5E8\r
+#define MVK_hebrew_shin 0x5E9\r
+#define MVK_hebrew_taw 0x5EA\r
+#define MVK_hebrew_taf 0x5EA\r
+#define MVK_Hebrew_switch 0xff7e\r
+#define MVK_Thai_kokai 0xda1\r
+#define MVK_Thai_khokhai 0xda2\r
+#define MVK_Thai_khokhuat 0xda3\r
+#define MVK_Thai_khokhwai 0xda4\r
+#define MVK_Thai_khokhon 0xda5\r
+#define MVK_Thai_khorakhang 0xda6\r
+#define MVK_Thai_ngongu 0xda7\r
+#define MVK_Thai_chochan 0xda8\r
+#define MVK_Thai_choching 0xda9\r
+#define MVK_Thai_chochang 0xdaa\r
+#define MVK_Thai_soso 0xdab\r
+#define MVK_Thai_chochoe 0xdac\r
+#define MVK_Thai_yoying 0xdad\r
+#define MVK_Thai_dochada 0xdae\r
+#define MVK_Thai_topatak 0xdaf\r
+#define MVK_Thai_thothan 0xdb0\r
+#define MVK_Thai_thonangmontho 0xdb1\r
+#define MVK_Thai_thophuthao 0xdb2\r
+#define MVK_Thai_nonen 0xdb3\r
+#define MVK_Thai_dodek 0xdb4\r
+#define MVK_Thai_totao 0xdb5\r
+#define MVK_Thai_thothung 0xdb6\r
+#define MVK_Thai_thothahan 0xdb7\r
+#define MVK_Thai_thothong 0xdb8\r
+#define MVK_Thai_nonu 0xdb9\r
+#define MVK_Thai_bobaimai 0xdba\r
+#define MVK_Thai_popla 0xdbb\r
+#define MVK_Thai_phophung 0xdbc\r
+#define MVK_Thai_fofa 0xdbd\r
+#define MVK_Thai_phophan 0xdbe\r
+#define MVK_Thai_fofan 0xdbf\r
+#define MVK_Thai_phosamphao 0xdc0\r
+#define MVK_Thai_moma 0xdc1\r
+#define MVK_Thai_yoyak 0xdc2\r
+#define MVK_Thai_rorua 0xdc3\r
+#define MVK_Thai_ru 0xdc4\r
+#define MVK_Thai_loling 0xdc5\r
+#define MVK_Thai_lu 0xdc6\r
+#define MVK_Thai_wowaen 0xdc7\r
+#define MVK_Thai_sosala 0xdc8\r
+#define MVK_Thai_sorusi 0xdc9\r
+#define MVK_Thai_sosua 0xdca\r
+#define MVK_Thai_hohip 0xdcb\r
+#define MVK_Thai_lochula 0xdcc\r
+#define MVK_Thai_oang 0xdcd\r
+#define MVK_Thai_honokhuk 0xdce\r
+#define MVK_Thai_paiyannoi 0xdcf\r
+#define MVK_Thai_saraa 0xdd0\r
+#define MVK_Thai_maihanakat 0xdd1\r
+#define MVK_Thai_saraaa 0xdd2\r
+#define MVK_Thai_saraam 0xdd3\r
+#define MVK_Thai_sarai 0xdd4\r
+#define MVK_Thai_saraii 0xdd5\r
+#define MVK_Thai_saraue 0xdd6\r
+#define MVK_Thai_sarauee 0xdd7\r
+#define MVK_Thai_sarau 0xdd8\r
+#define MVK_Thai_sarauu 0xdd9\r
+#define MVK_Thai_phinthu 0xdda\r
+#define MVK_Thai_maihanakat_maitho 0xdde\r
+#define MVK_Thai_baht 0xddf\r
+#define MVK_Thai_sarae 0xde0\r
+#define MVK_Thai_saraae 0xde1\r
+#define MVK_Thai_sarao 0xde2\r
+#define MVK_Thai_saraaimaimuan 0xde3\r
+#define MVK_Thai_saraaimaimalai 0xde4\r
+#define MVK_Thai_lakkhangyao 0xde5\r
+#define MVK_Thai_maiyamok 0xde6\r
+#define MVK_Thai_maitaikhu 0xde7\r
+#define MVK_Thai_maiek 0xde8\r
+#define MVK_Thai_maitho 0xde9\r
+#define MVK_Thai_maitri 0xdea\r
+#define MVK_Thai_maichattawa 0xdeb\r
+#define MVK_Thai_thanthakhat 0xdec\r
+#define MVK_Thai_nikhahit 0xded\r
+#define MVK_Thai_leksun 0xdf0\r
+#define MVK_Thai_leknung 0xdf1\r
+#define MVK_Thai_leksong 0xdf2\r
+#define MVK_Thai_leksam 0xdf3\r
+#define MVK_Thai_leksi 0xdf4\r
+#define MVK_Thai_lekha 0xdf5\r
+#define MVK_Thai_lekhok 0xdf6\r
+#define MVK_Thai_lekchet 0xdf7\r
+#define MVK_Thai_lekpaet 0xdf8\r
+#define MVK_Thai_lekkao 0xdf9\r
+#define MVK_Hangul 0xff31\r
+#define MVK_Hangul_Start 0xff32\r
+#define MVK_Hangul_End 0xff33\r
+#define MVK_Hangul_Hanja 0xff34\r
+#define MVK_Hangul_Jamo 0xff35\r
+#define MVK_Hangul_Romaja 0xff36\r
+#define MVK_Hangul_Codeinput 0xff37\r
+#define MVK_Hangul_Jeonja 0xff38\r
+#define MVK_Hangul_Banja 0xff39\r
+#define MVK_Hangul_PreHanja 0xff3a\r
+#define MVK_Hangul_PostHanja 0xff3b\r
+#define MVK_Hangul_SingleCandidate 0xff3c\r
+#define MVK_Hangul_MultipleCandidate 0xff3d\r
+#define MVK_Hangul_PreviousCandidate 0xff3e\r
+#define MVK_Hangul_Special 0xff3f\r
+#define MVK_Hangul_switch 0xff7e\r
+#define MVK_Hangul_Kiyeog 0xea1\r
+#define MVK_Hangul_SsangKiyeog 0xea2\r
+#define MVK_Hangul_KiyeogSios 0xea3\r
+#define MVK_Hangul_Nieun 0xea4\r
+#define MVK_Hangul_NieunJieuj 0xea5\r
+#define MVK_Hangul_NieunHieuh 0xea6\r
+#define MVK_Hangul_Dikeud 0xea7\r
+#define MVK_Hangul_SsangDikeud 0xea8\r
+#define MVK_Hangul_Rieul 0xea9\r
+#define MVK_Hangul_RieulKiyeog 0xeaa\r
+#define MVK_Hangul_RieulMieum 0xeab\r
+#define MVK_Hangul_RieulPieub 0xeac\r
+#define MVK_Hangul_RieulSios 0xead\r
+#define MVK_Hangul_RieulTieut 0xeae\r
+#define MVK_Hangul_RieulPhieuf 0xeaf\r
+#define MVK_Hangul_RieulHieuh 0xeb0\r
+#define MVK_Hangul_Mieum 0xeb1\r
+#define MVK_Hangul_Pieub 0xeb2\r
+#define MVK_Hangul_SsangPieub 0xeb3\r
+#define MVK_Hangul_PieubSios 0xeb4\r
+#define MVK_Hangul_Sios 0xeb5\r
+#define MVK_Hangul_SsangSios 0xeb6\r
+#define MVK_Hangul_Ieung 0xeb7\r
+#define MVK_Hangul_Jieuj 0xeb8\r
+#define MVK_Hangul_SsangJieuj 0xeb9\r
+#define MVK_Hangul_Cieuc 0xeba\r
+#define MVK_Hangul_Khieuq 0xebb\r
+#define MVK_Hangul_Tieut 0xebc\r
+#define MVK_Hangul_Phieuf 0xebd\r
+#define MVK_Hangul_Hieuh 0xebe\r
+#define MVK_Hangul_A 0xebf\r
+#define MVK_Hangul_AE 0xec0\r
+#define MVK_Hangul_YA 0xec1\r
+#define MVK_Hangul_YAE 0xec2\r
+#define MVK_Hangul_EO 0xec3\r
+#define MVK_Hangul_E 0xec4\r
+#define MVK_Hangul_YEO 0xec5\r
+#define MVK_Hangul_YE 0xec6\r
+#define MVK_Hangul_O 0xec7\r
+#define MVK_Hangul_WA 0xec8\r
+#define MVK_Hangul_WAE 0xec9\r
+#define MVK_Hangul_OE 0xeca\r
+#define MVK_Hangul_YO 0xecb\r
+#define MVK_Hangul_U 0xecc\r
+#define MVK_Hangul_WEO 0xecd\r
+#define MVK_Hangul_WE 0xece\r
+#define MVK_Hangul_WI 0xecf\r
+#define MVK_Hangul_YU 0xed0\r
+#define MVK_Hangul_EU 0xed1\r
+#define MVK_Hangul_YI 0xed2\r
+#define MVK_Hangul_I 0xed3\r
+#define MVK_Hangul_J_Kiyeog 0xed4\r
+#define MVK_Hangul_J_SsangKiyeog 0xed5\r
+#define MVK_Hangul_J_KiyeogSios 0xed6\r
+#define MVK_Hangul_J_Nieun 0xed7\r
+#define MVK_Hangul_J_NieunJieuj 0xed8\r
+#define MVK_Hangul_J_NieunHieuh 0xed9\r
+#define MVK_Hangul_J_Dikeud 0xeda\r
+#define MVK_Hangul_J_Rieul 0xedb\r
+#define MVK_Hangul_J_RieulKiyeog 0xedc\r
+#define MVK_Hangul_J_RieulMieum 0xedd\r
+#define MVK_Hangul_J_RieulPieub 0xede\r
+#define MVK_Hangul_J_RieulSios 0xedf\r
+#define MVK_Hangul_J_RieulTieut 0xee0\r
+#define MVK_Hangul_J_RieulPhieuf 0xee1\r
+#define MVK_Hangul_J_RieulHieuh 0xee2\r
+#define MVK_Hangul_J_Mieum 0xee3\r
+#define MVK_Hangul_J_Pieub 0xee4\r
+#define MVK_Hangul_J_PieubSios 0xee5\r
+#define MVK_Hangul_J_Sios 0xee6\r
+#define MVK_Hangul_J_SsangSios 0xee7\r
+#define MVK_Hangul_J_Ieung 0xee8\r
+#define MVK_Hangul_J_Jieuj 0xee9\r
+#define MVK_Hangul_J_Cieuc 0xeea\r
+#define MVK_Hangul_J_Khieuq 0xeeb\r
+#define MVK_Hangul_J_Tieut 0xeec\r
+#define MVK_Hangul_J_Phieuf 0xeed\r
+#define MVK_Hangul_J_Hieuh 0xeee\r
+#define MVK_Hangul_RieulYeorinHieuh 0xeef\r
+#define MVK_Hangul_SunkyeongeumMieum 0xef0\r
+#define MVK_Hangul_SunkyeongeumPieub 0xef1\r
+#define MVK_Hangul_PanSios 0xef2\r
+#define MVK_Hangul_KkogjiDalrinIeung 0xef3\r
+#define MVK_Hangul_SunkyeongeumPhieuf 0xef4\r
+#define MVK_Hangul_YeorinHieuh 0xef5\r
+#define MVK_Hangul_AraeA 0xef6\r
+#define MVK_Hangul_AraeAE 0xef7\r
+#define MVK_Hangul_J_PanSios 0xef8\r
+#define MVK_Hangul_J_KkogjiDalrinIeung 0xef9\r
+#define MVK_Hangul_J_YeorinHieuh 0xefa\r
+#define MVK_Korean_Won 0xeff\r
+#define MVK_Armenian_ligature_ew 0x587\r
+#define MVK_Armenian_full_stop 0x589\r
+#define MVK_Armenian_verjaket 0x589\r
+#define MVK_Armenian_separation_mark 0x55d\r
+#define MVK_Armenian_but 0x55d\r
+#define MVK_Armenian_hyphen 0x58a\r
+#define MVK_Armenian_yentamna 0x58a\r
+#define MVK_Armenian_exclam 0x55c\r
+#define MVK_Armenian_amanak 0x55c\r
+#define MVK_Armenian_accent 0x55b\r
+#define MVK_Armenian_shesht 0x55b\r
+#define MVK_Armenian_question 0x55e\r
+#define MVK_Armenian_paruyk 0x55e\r
+#define MVK_Armenian_AYB 0x531\r
+#define MVK_Armenian_ayb 0x561\r
+#define MVK_Armenian_BEN 0x532\r
+#define MVK_Armenian_ben 0x562\r
+#define MVK_Armenian_GIM 0x533\r
+#define MVK_Armenian_gim 0x563\r
+#define MVK_Armenian_DA 0x534\r
+#define MVK_Armenian_da 0x564\r
+#define MVK_Armenian_YECH 0x535\r
+#define MVK_Armenian_yech 0x565\r
+#define MVK_Armenian_ZA 0x536\r
+#define MVK_Armenian_za 0x566\r
+#define MVK_Armenian_E 0x537\r
+#define MVK_Armenian_e 0x567\r
+#define MVK_Armenian_AT 0x538\r
+#define MVK_Armenian_at 0x568\r
+#define MVK_Armenian_TO 0x539\r
+#define MVK_Armenian_to 0x569\r
+#define MVK_Armenian_ZHE 0x53a\r
+#define MVK_Armenian_zhe 0x56a\r
+#define MVK_Armenian_INI 0x53b\r
+#define MVK_Armenian_ini 0x56b\r
+#define MVK_Armenian_LYUN 0x53c\r
+#define MVK_Armenian_lyun 0x56c\r
+#define MVK_Armenian_KHE 0x53d\r
+#define MVK_Armenian_khe 0x56d\r
+#define MVK_Armenian_TSA 0x53e\r
+#define MVK_Armenian_tsa 0x56e\r
+#define MVK_Armenian_KEN 0x53f\r
+#define MVK_Armenian_ken 0x56f\r
+#define MVK_Armenian_HO 0x540\r
+#define MVK_Armenian_ho 0x570\r
+#define MVK_Armenian_DZA 0x541\r
+#define MVK_Armenian_dza 0x571\r
+#define MVK_Armenian_GHAT 0x542\r
+#define MVK_Armenian_ghat 0x572\r
+#define MVK_Armenian_TCHE 0x543\r
+#define MVK_Armenian_tche 0x573\r
+#define MVK_Armenian_MEN 0x544\r
+#define MVK_Armenian_men 0x574\r
+#define MVK_Armenian_HI 0x545\r
+#define MVK_Armenian_hi 0x575\r
+#define MVK_Armenian_NU 0x546\r
+#define MVK_Armenian_nu 0x576\r
+#define MVK_Armenian_SHA 0x547\r
+#define MVK_Armenian_sha 0x577\r
+#define MVK_Armenian_VO 0x548\r
+#define MVK_Armenian_vo 0x578\r
+#define MVK_Armenian_CHA 0x549\r
+#define MVK_Armenian_cha 0x579\r
+#define MVK_Armenian_PE 0x54a\r
+#define MVK_Armenian_pe 0x57a\r
+#define MVK_Armenian_JE 0x54b\r
+#define MVK_Armenian_je 0x57b\r
+#define MVK_Armenian_RA 0x54c\r
+#define MVK_Armenian_ra 0x57c\r
+#define MVK_Armenian_SE 0x54d\r
+#define MVK_Armenian_se 0x57d\r
+#define MVK_Armenian_VEV 0x54e\r
+#define MVK_Armenian_vev 0x57e\r
+#define MVK_Armenian_TYUN 0x54f\r
+#define MVK_Armenian_tyun 0x57f\r
+#define MVK_Armenian_RE 0x550\r
+#define MVK_Armenian_re 0x580\r
+#define MVK_Armenian_TSO 0x551\r
+#define MVK_Armenian_tso 0x581\r
+#define MVK_Armenian_VYUN 0x552\r
+#define MVK_Armenian_vyun 0x582\r
+#define MVK_Armenian_PYUR 0x553\r
+#define MVK_Armenian_pyur 0x583\r
+#define MVK_Armenian_KE 0x554\r
+#define MVK_Armenian_ke 0x584\r
+#define MVK_Armenian_O 0x555\r
+#define MVK_Armenian_o 0x585\r
+#define MVK_Armenian_FE 0x556\r
+#define MVK_Armenian_fe 0x586\r
+#define MVK_Armenian_apostrophe 0x55a\r
+#define MVK_Georgian_an 0x10d0\r
+#define MVK_Georgian_ban 0x10d1\r
+#define MVK_Georgian_gan 0x10d2\r
+#define MVK_Georgian_don 0x10d3\r
+#define MVK_Georgian_en 0x10d4\r
+#define MVK_Georgian_vin 0x10d5\r
+#define MVK_Georgian_zen 0x10d6\r
+#define MVK_Georgian_tan 0x10d7\r
+#define MVK_Georgian_in 0x10d8\r
+#define MVK_Georgian_kan 0x10d9\r
+#define MVK_Georgian_las 0x10da\r
+#define MVK_Georgian_man 0x10db\r
+#define MVK_Georgian_nar 0x10dc\r
+#define MVK_Georgian_on 0x10dd\r
+#define MVK_Georgian_par 0x10de\r
+#define MVK_Georgian_zhar 0x10df\r
+#define MVK_Georgian_rae 0x10e0\r
+#define MVK_Georgian_san 0x10e1\r
+#define MVK_Georgian_tar 0x10e2\r
+#define MVK_Georgian_un 0x10e3\r
+#define MVK_Georgian_phar 0x10e4\r
+#define MVK_Georgian_khar 0x10e5\r
+#define MVK_Georgian_ghan 0x10e6\r
+#define MVK_Georgian_qar 0x10e7\r
+#define MVK_Georgian_shin 0x10e8\r
+#define MVK_Georgian_chin 0x10e9\r
+#define MVK_Georgian_can 0x10ea\r
+#define MVK_Georgian_jil 0x10eb\r
+#define MVK_Georgian_cil 0x10ec\r
+#define MVK_Georgian_char 0x10ed\r
+#define MVK_Georgian_xan 0x10ee\r
+#define MVK_Georgian_jhan 0x10ef\r
+#define MVK_Georgian_hae 0x10f0\r
+#define MVK_Georgian_he 0x10f1\r
+#define MVK_Georgian_hie 0x10f2\r
+#define MVK_Georgian_we 0x10f3\r
+#define MVK_Georgian_har 0x10f4\r
+#define MVK_Georgian_hoe 0x10f5\r
+#define MVK_Georgian_fi 0x10f6\r
+#define MVK_Xabovedot 0x1e8a\r
+#define MVK_Ibreve 0x12c\r
+#define MVK_Zstroke 0x1b5\r
+#define MVK_Gcaron 0x1e6\r
+#define MVK_Ocaron 0x1d1\r
+#define MVK_Obarred 0x19f\r
+#define MVK_xabovedot 0x1e8b\r
+#define MVK_ibreve 0x12d\r
+#define MVK_zstroke 0x1b6\r
+#define MVK_gcaron 0x1e7\r
+#define MVK_ocaron 0x1d2\r
+#define MVK_obarred 0x275\r
+#define MVK_SCHWA 0x18f\r
+#define MVK_schwa 0x259\r
+#define MVK_Lbelowdot 0x1e36\r
+#define MVK_lbelowdot 0x1e37\r
+#define MVK_Abelowdot 0x1ea0\r
+#define MVK_abelowdot 0x1ea1\r
+#define MVK_Ahook 0x1ea2\r
+#define MVK_ahook 0x1ea3\r
+#define MVK_Acircumflexacute 0x1ea4\r
+#define MVK_acircumflexacute 0x1ea5\r
+#define MVK_Acircumflexgrave 0x1ea6\r
+#define MVK_acircumflexgrave 0x1ea7\r
+#define MVK_Acircumflexhook 0x1ea8\r
+#define MVK_acircumflexhook 0x1ea9\r
+#define MVK_Acircumflextilde 0x1eaa\r
+#define MVK_acircumflextilde 0x1eab\r
+#define MVK_Acircumflexbelowdot 0x1eac\r
+#define MVK_acircumflexbelowdot 0x1ead\r
+#define MVK_Abreveacute 0x1eae\r
+#define MVK_abreveacute 0x1eaf\r
+#define MVK_Abrevegrave 0x1eb0\r
+#define MVK_abrevegrave 0x1eb1\r
+#define MVK_Abrevehook 0x1eb2\r
+#define MVK_abrevehook 0x1eb3\r
+#define MVK_Abrevetilde 0x1eb4\r
+#define MVK_abrevetilde 0x1eb5\r
+#define MVK_Abrevebelowdot 0x1eb6\r
+#define MVK_abrevebelowdot 0x1eb7\r
+#define MVK_Ebelowdot 0x1eb8\r
+#define MVK_ebelowdot 0x1eb9\r
+#define MVK_Ehook 0x1eba\r
+#define MVK_ehook 0x1ebb\r
+#define MVK_Etilde 0x1ebc\r
+#define MVK_etilde 0x1ebd\r
+#define MVK_Ecircumflexacute 0x1ebe\r
+#define MVK_ecircumflexacute 0x1ebf\r
+#define MVK_Ecircumflexgrave 0x1ec0\r
+#define MVK_ecircumflexgrave 0x1ec1\r
+#define MVK_Ecircumflexhook 0x1ec2\r
+#define MVK_ecircumflexhook 0x1ec3\r
+#define MVK_Ecircumflextilde 0x1ec4\r
+#define MVK_ecircumflextilde 0x1ec5\r
+#define MVK_Ecircumflexbelowdot 0x1ec6\r
+#define MVK_ecircumflexbelowdot 0x1ec7\r
+#define MVK_Ihook 0x1ec8\r
+#define MVK_ihook 0x1ec9\r
+#define MVK_Ibelowdot 0x1eca\r
+#define MVK_ibelowdot 0x1ecb\r
+#define MVK_Obelowdot 0x1ecc\r
+#define MVK_obelowdot 0x1ecd\r
+#define MVK_Sbelowdot 0x1E62\r
+#define MVK_sbelowdot 0x1E63\r
+#define MVK_Ohook 0x1ece\r
+#define MVK_ohook 0x1ecf\r
+#define MVK_Ocircumflexacute 0x1ed0\r
+#define MVK_ocircumflexacute 0x1ed1\r
+#define MVK_Ocircumflexgrave 0x1ed2\r
+#define MVK_ocircumflexgrave 0x1ed3\r
+#define MVK_Ocircumflexhook 0x1ed4\r
+#define MVK_ocircumflexhook 0x1ed5\r
+#define MVK_Ocircumflextilde 0x1ed6\r
+#define MVK_ocircumflextilde 0x1ed7\r
+#define MVK_Ocircumflexbelowdot 0x1ed8\r
+#define MVK_ocircumflexbelowdot 0x1ed9\r
+#define MVK_Ohornacute 0x1eda\r
+#define MVK_ohornacute 0x1edb\r
+#define MVK_Ohorngrave 0x1edc\r
+#define MVK_ohorngrave 0x1edd\r
+#define MVK_Ohornhook 0x1ede\r
+#define MVK_ohornhook 0x1edf\r
+#define MVK_Ohorntilde 0x1ee0\r
+#define MVK_ohorntilde 0x1ee1\r
+#define MVK_Ohornbelowdot 0x1ee2\r
+#define MVK_ohornbelowdot 0x1ee3\r
+#define MVK_Ubelowdot 0x1ee4\r
+#define MVK_ubelowdot 0x1ee5\r
+#define MVK_Uhook 0x1ee6\r
+#define MVK_uhook 0x1ee7\r
+#define MVK_Uhornacute 0x1ee8\r
+#define MVK_uhornacute 0x1ee9\r
+#define MVK_Uhorngrave 0x1eea\r
+#define MVK_uhorngrave 0x1eeb\r
+#define MVK_Uhornhook 0x1eec\r
+#define MVK_uhornhook 0x1eed\r
+#define MVK_Uhorntilde 0x1eee\r
+#define MVK_uhorntilde 0x1eef\r
+#define MVK_Uhornbelowdot 0x1ef0\r
+#define MVK_uhornbelowdot 0x1ef1\r
+#define MVK_Ybelowdot 0x1ef4\r
+#define MVK_ybelowdot 0x1ef5\r
+#define MVK_Yhook 0x1ef6\r
+#define MVK_yhook 0x1ef7\r
+#define MVK_Ytilde 0x1ef8\r
+#define MVK_ytilde 0x1ef9\r
+#define MVK_Ohorn 0x1a0\r
+#define MVK_ohorn 0x1a1\r
+#define MVK_Uhorn 0x1af\r
+#define MVK_uhorn 0x1b0\r
+#define MVK_EcuSign 0x20a0\r
+#define MVK_ColonSign 0x20a1\r
+#define MVK_CruzeiroSign 0x20a2\r
+#define MVK_FFrancSign 0x20a3\r
+#define MVK_LiraSign 0x20a4\r
+#define MVK_MillSign 0x20a5\r
+#define MVK_NairaSign 0x20a6\r
+#define MVK_PesetaSign 0x20a7\r
+#define MVK_RupeeSign 0x20a8\r
+#define MVK_WonSign 0x20a9\r
+#define MVK_NewSheqelSign 0x20aa\r
+#define MVK_DongSign 0x20ab\r
+#define MVK_EuroSign 0x20ac\r
+#define MVK_zerosuperior 0x2070\r
+#define MVK_foursuperior 0x2074\r
+#define MVK_fivesuperior 0x2075\r
+#define MVK_sixsuperior 0x2076\r
+#define MVK_sevensuperior 0x2077\r
+#define MVK_eightsuperior 0x2078\r
+#define MVK_ninesuperior 0x2079\r
+#define MVK_zerosubscript 0x2080\r
+#define MVK_onesubscript 0x2081\r
+#define MVK_twosubscript 0x2082\r
+#define MVK_threesubscript 0x2083\r
+#define MVK_foursubscript 0x2084\r
+#define MVK_fivesubscript 0x2085\r
+#define MVK_sixsubscript 0x2086\r
+#define MVK_sevensubscript 0x2087\r
+#define MVK_eightsubscript 0x2088\r
+#define MVK_ninesubscript 0x2089\r
+#define MVK_partdifferential 0x2202\r
+#define MVK_emptyset 0x2205\r
+#define MVK_elementof 0x2208\r
+#define MVK_notelementof 0x2209\r
+#define MVK_containsas 0x220b\r
+#define MVK_squareroot 0x221a\r
+#define MVK_cuberoot 0x221b\r
+#define MVK_fourthroot 0x221c\r
+#define MVK_dintegral 0x222c\r
+#define MVK_tintegral 0x222d\r
+#define MVK_because 0x2235\r
+#define MVK_approxeq 0x2248\r
+#define MVK_notapproxeq 0x2247\r
+#define MVK_notidentical 0x2262\r
+#define MVK_stricteq 0x2263\r
+#define MVK_braille_dot_1 0xfff1\r
+#define MVK_braille_dot_2 0xfff2\r
+#define MVK_braille_dot_3 0xfff3\r
+#define MVK_braille_dot_4 0xfff4\r
+#define MVK_braille_dot_5 0xfff5\r
+#define MVK_braille_dot_6 0xfff6\r
+#define MVK_braille_dot_7 0xfff7\r
+#define MVK_braille_dot_8 0xfff8\r
+#define MVK_braille_dot_9 0xfff9\r
+#define MVK_braille_dot_10 0xfffa\r
+#define MVK_braille_blank 0x2800\r
+#define MVK_braille_dots_1 0x2801\r
+#define MVK_braille_dots_2 0x2802\r
+#define MVK_braille_dots_12 0x2803\r
+#define MVK_braille_dots_3 0x2804\r
+#define MVK_braille_dots_13 0x2805\r
+#define MVK_braille_dots_23 0x2806\r
+#define MVK_braille_dots_123 0x2807\r
+#define MVK_braille_dots_4 0x2808\r
+#define MVK_braille_dots_14 0x2809\r
+#define MVK_braille_dots_24 0x280a\r
+#define MVK_braille_dots_124 0x280b\r
+#define MVK_braille_dots_34 0x280c\r
+#define MVK_braille_dots_134 0x280d\r
+#define MVK_braille_dots_234 0x280e\r
+#define MVK_braille_dots_1234 0x280f\r
+#define MVK_braille_dots_5 0x2810\r
+#define MVK_braille_dots_15 0x2811\r
+#define MVK_braille_dots_25 0x2812\r
+#define MVK_braille_dots_125 0x2813\r
+#define MVK_braille_dots_35 0x2814\r
+#define MVK_braille_dots_135 0x2815\r
+#define MVK_braille_dots_235 0x2816\r
+#define MVK_braille_dots_1235 0x2817\r
+#define MVK_braille_dots_45 0x2818\r
+#define MVK_braille_dots_145 0x2819\r
+#define MVK_braille_dots_245 0x281a\r
+#define MVK_braille_dots_1245 0x281b\r
+#define MVK_braille_dots_345 0x281c\r
+#define MVK_braille_dots_1345 0x281d\r
+#define MVK_braille_dots_2345 0x281e\r
+#define MVK_braille_dots_12345 0x281f\r
+#define MVK_braille_dots_6 0x2820\r
+#define MVK_braille_dots_16 0x2821\r
+#define MVK_braille_dots_26 0x2822\r
+#define MVK_braille_dots_126 0x2823\r
+#define MVK_braille_dots_36 0x2824\r
+#define MVK_braille_dots_136 0x2825\r
+#define MVK_braille_dots_236 0x2826\r
+#define MVK_braille_dots_1236 0x2827\r
+#define MVK_braille_dots_46 0x2828\r
+#define MVK_braille_dots_146 0x2829\r
+#define MVK_braille_dots_246 0x282a\r
+#define MVK_braille_dots_1246 0x282b\r
+#define MVK_braille_dots_346 0x282c\r
+#define MVK_braille_dots_1346 0x282d\r
+#define MVK_braille_dots_2346 0x282e\r
+#define MVK_braille_dots_12346 0x282f\r
+#define MVK_braille_dots_56 0x2830\r
+#define MVK_braille_dots_156 0x2831\r
+#define MVK_braille_dots_256 0x2832\r
+#define MVK_braille_dots_1256 0x2833\r
+#define MVK_braille_dots_356 0x2834\r
+#define MVK_braille_dots_1356 0x2835\r
+#define MVK_braille_dots_2356 0x2836\r
+#define MVK_braille_dots_12356 0x2837\r
+#define MVK_braille_dots_456 0x2838\r
+#define MVK_braille_dots_1456 0x2839\r
+#define MVK_braille_dots_2456 0x283a\r
+#define MVK_braille_dots_12456 0x283b\r
+#define MVK_braille_dots_3456 0x283c\r
+#define MVK_braille_dots_13456 0x283d\r
+#define MVK_braille_dots_23456 0x283e\r
+#define MVK_braille_dots_123456 0x283f\r
+#define MVK_braille_dots_7 0x2840\r
+#define MVK_braille_dots_17 0x2841\r
+#define MVK_braille_dots_27 0x2842\r
+#define MVK_braille_dots_127 0x2843\r
+#define MVK_braille_dots_37 0x2844\r
+#define MVK_braille_dots_137 0x2845\r
+#define MVK_braille_dots_237 0x2846\r
+#define MVK_braille_dots_1237 0x2847\r
+#define MVK_braille_dots_47 0x2848\r
+#define MVK_braille_dots_147 0x2849\r
+#define MVK_braille_dots_247 0x284a\r
+#define MVK_braille_dots_1247 0x284b\r
+#define MVK_braille_dots_347 0x284c\r
+#define MVK_braille_dots_1347 0x284d\r
+#define MVK_braille_dots_2347 0x284e\r
+#define MVK_braille_dots_12347 0x284f\r
+#define MVK_braille_dots_57 0x2850\r
+#define MVK_braille_dots_157 0x2851\r
+#define MVK_braille_dots_257 0x2852\r
+#define MVK_braille_dots_1257 0x2853\r
+#define MVK_braille_dots_357 0x2854\r
+#define MVK_braille_dots_1357 0x2855\r
+#define MVK_braille_dots_2357 0x2856\r
+#define MVK_braille_dots_12357 0x2857\r
+#define MVK_braille_dots_457 0x2858\r
+#define MVK_braille_dots_1457 0x2859\r
+#define MVK_braille_dots_2457 0x285a\r
+#define MVK_braille_dots_12457 0x285b\r
+#define MVK_braille_dots_3457 0x285c\r
+#define MVK_braille_dots_13457 0x285d\r
+#define MVK_braille_dots_23457 0x285e\r
+#define MVK_braille_dots_123457 0x285f\r
+#define MVK_braille_dots_67 0x2860\r
+#define MVK_braille_dots_167 0x2861\r
+#define MVK_braille_dots_267 0x2862\r
+#define MVK_braille_dots_1267 0x2863\r
+#define MVK_braille_dots_367 0x2864\r
+#define MVK_braille_dots_1367 0x2865\r
+#define MVK_braille_dots_2367 0x2866\r
+#define MVK_braille_dots_12367 0x2867\r
+#define MVK_braille_dots_467 0x2868\r
+#define MVK_braille_dots_1467 0x2869\r
+#define MVK_braille_dots_2467 0x286a\r
+#define MVK_braille_dots_12467 0x286b\r
+#define MVK_braille_dots_3467 0x286c\r
+#define MVK_braille_dots_13467 0x286d\r
+#define MVK_braille_dots_23467 0x286e\r
+#define MVK_braille_dots_123467 0x286f\r
+#define MVK_braille_dots_567 0x2870\r
+#define MVK_braille_dots_1567 0x2871\r
+#define MVK_braille_dots_2567 0x2872\r
+#define MVK_braille_dots_12567 0x2873\r
+#define MVK_braille_dots_3567 0x2874\r
+#define MVK_braille_dots_13567 0x2875\r
+#define MVK_braille_dots_23567 0x2876\r
+#define MVK_braille_dots_123567 0x2877\r
+#define MVK_braille_dots_4567 0x2878\r
+#define MVK_braille_dots_14567 0x2879\r
+#define MVK_braille_dots_24567 0x287a\r
+#define MVK_braille_dots_124567 0x287b\r
+#define MVK_braille_dots_34567 0x287c\r
+#define MVK_braille_dots_134567 0x287d\r
+#define MVK_braille_dots_234567 0x287e\r
+#define MVK_braille_dots_1234567 0x287f\r
+#define MVK_braille_dots_8 0x2880\r
+#define MVK_braille_dots_18 0x2881\r
+#define MVK_braille_dots_28 0x2882\r
+#define MVK_braille_dots_128 0x2883\r
+#define MVK_braille_dots_38 0x2884\r
+#define MVK_braille_dots_138 0x2885\r
+#define MVK_braille_dots_238 0x2886\r
+#define MVK_braille_dots_1238 0x2887\r
+#define MVK_braille_dots_48 0x2888\r
+#define MVK_braille_dots_148 0x2889\r
+#define MVK_braille_dots_248 0x288a\r
+#define MVK_braille_dots_1248 0x288b\r
+#define MVK_braille_dots_348 0x288c\r
+#define MVK_braille_dots_1348 0x288d\r
+#define MVK_braille_dots_2348 0x288e\r
+#define MVK_braille_dots_12348 0x288f\r
+#define MVK_braille_dots_58 0x2890\r
+#define MVK_braille_dots_158 0x2891\r
+#define MVK_braille_dots_258 0x2892\r
+#define MVK_braille_dots_1258 0x2893\r
+#define MVK_braille_dots_358 0x2894\r
+#define MVK_braille_dots_1358 0x2895\r
+#define MVK_braille_dots_2358 0x2896\r
+#define MVK_braille_dots_12358 0x2897\r
+#define MVK_braille_dots_458 0x2898\r
+#define MVK_braille_dots_1458 0x2899\r
+#define MVK_braille_dots_2458 0x289a\r
+#define MVK_braille_dots_12458 0x289b\r
+#define MVK_braille_dots_3458 0x289c\r
+#define MVK_braille_dots_13458 0x289d\r
+#define MVK_braille_dots_23458 0x289e\r
+#define MVK_braille_dots_123458 0x289f\r
+#define MVK_braille_dots_68 0x28a0\r
+#define MVK_braille_dots_168 0x28a1\r
+#define MVK_braille_dots_268 0x28a2\r
+#define MVK_braille_dots_1268 0x28a3\r
+#define MVK_braille_dots_368 0x28a4\r
+#define MVK_braille_dots_1368 0x28a5\r
+#define MVK_braille_dots_2368 0x28a6\r
+#define MVK_braille_dots_12368 0x28a7\r
+#define MVK_braille_dots_468 0x28a8\r
+#define MVK_braille_dots_1468 0x28a9\r
+#define MVK_braille_dots_2468 0x28aa\r
+#define MVK_braille_dots_12468 0x28ab\r
+#define MVK_braille_dots_3468 0x28ac\r
+#define MVK_braille_dots_13468 0x28ad\r
+#define MVK_braille_dots_23468 0x28ae\r
+#define MVK_braille_dots_123468 0x28af\r
+#define MVK_braille_dots_568 0x28b0\r
+#define MVK_braille_dots_1568 0x28b1\r
+#define MVK_braille_dots_2568 0x28b2\r
+#define MVK_braille_dots_12568 0x28b3\r
+#define MVK_braille_dots_3568 0x28b4\r
+#define MVK_braille_dots_13568 0x28b5\r
+#define MVK_braille_dots_23568 0x28b6\r
+#define MVK_braille_dots_123568 0x28b7\r
+#define MVK_braille_dots_4568 0x28b8\r
+#define MVK_braille_dots_14568 0x28b9\r
+#define MVK_braille_dots_24568 0x28ba\r
+#define MVK_braille_dots_124568 0x28bb\r
+#define MVK_braille_dots_34568 0x28bc\r
+#define MVK_braille_dots_134568 0x28bd\r
+#define MVK_braille_dots_234568 0x28be\r
+#define MVK_braille_dots_1234568 0x28bf\r
+#define MVK_braille_dots_78 0x28c0\r
+#define MVK_braille_dots_178 0x28c1\r
+#define MVK_braille_dots_278 0x28c2\r
+#define MVK_braille_dots_1278 0x28c3\r
+#define MVK_braille_dots_378 0x28c4\r
+#define MVK_braille_dots_1378 0x28c5\r
+#define MVK_braille_dots_2378 0x28c6\r
+#define MVK_braille_dots_12378 0x28c7\r
+#define MVK_braille_dots_478 0x28c8\r
+#define MVK_braille_dots_1478 0x28c9\r
+#define MVK_braille_dots_2478 0x28ca\r
+#define MVK_braille_dots_12478 0x28cb\r
+#define MVK_braille_dots_3478 0x28cc\r
+#define MVK_braille_dots_13478 0x28cd\r
+#define MVK_braille_dots_23478 0x28ce\r
+#define MVK_braille_dots_123478 0x28cf\r
+#define MVK_braille_dots_578 0x28d0\r
+#define MVK_braille_dots_1578 0x28d1\r
+#define MVK_braille_dots_2578 0x28d2\r
+#define MVK_braille_dots_12578 0x28d3\r
+#define MVK_braille_dots_3578 0x28d4\r
+#define MVK_braille_dots_13578 0x28d5\r
+#define MVK_braille_dots_23578 0x28d6\r
+#define MVK_braille_dots_123578 0x28d7\r
+#define MVK_braille_dots_4578 0x28d8\r
+#define MVK_braille_dots_14578 0x28d9\r
+#define MVK_braille_dots_24578 0x28da\r
+#define MVK_braille_dots_124578 0x28db\r
+#define MVK_braille_dots_34578 0x28dc\r
+#define MVK_braille_dots_134578 0x28dd\r
+#define MVK_braille_dots_234578 0x28de\r
+#define MVK_braille_dots_1234578 0x28df\r
+#define MVK_braille_dots_678 0x28e0\r
+#define MVK_braille_dots_1678 0x28e1\r
+#define MVK_braille_dots_2678 0x28e2\r
+#define MVK_braille_dots_12678 0x28e3\r
+#define MVK_braille_dots_3678 0x28e4\r
+#define MVK_braille_dots_13678 0x28e5\r
+#define MVK_braille_dots_23678 0x28e6\r
+#define MVK_braille_dots_123678 0x28e7\r
+#define MVK_braille_dots_4678 0x28e8\r
+#define MVK_braille_dots_14678 0x28e9\r
+#define MVK_braille_dots_24678 0x28ea\r
+#define MVK_braille_dots_124678 0x28eb\r
+#define MVK_braille_dots_34678 0x28ec\r
+#define MVK_braille_dots_134678 0x28ed\r
+#define MVK_braille_dots_234678 0x28ee\r
+#define MVK_braille_dots_1234678 0x28ef\r
+#define MVK_braille_dots_5678 0x28f0\r
+#define MVK_braille_dots_15678 0x28f1\r
+#define MVK_braille_dots_25678 0x28f2\r
+#define MVK_braille_dots_125678 0x28f3\r
+#define MVK_braille_dots_35678 0x28f4\r
+#define MVK_braille_dots_135678 0x28f5\r
+#define MVK_braille_dots_235678 0x28f6\r
+#define MVK_braille_dots_1235678 0x28f7\r
+#define MVK_braille_dots_45678 0x28f8\r
+#define MVK_braille_dots_145678 0x28f9\r
+#define MVK_braille_dots_245678 0x28fa\r
+#define MVK_braille_dots_1245678 0x28fb\r
+#define MVK_braille_dots_345678 0x28fc\r
+#define MVK_braille_dots_1345678 0x28fd\r
+#define MVK_braille_dots_2345678 0x28fe\r
+#define MVK_braille_dots_12345678 0x28ff\r
+\r
+/*-----------------RUSSIAN KEY PAD QWERTY STYLE-------------------------------*/\r
+/*---first row contains 12 keys---(all russian keys)---*/\r
+#define MVK_RUSSIAN_SMALL_YA 0x44F\r
+#define MVK_RUSSIAN_CAPITAL_YA 0x42F\r
+#define MVK_RUSSIAN_SMALL_ZHE 0x436\r
+#define MVK_RUSSIAN_CAPITAL_ZHE 0x416\r
+#define MVK_RUSSIAN_SMALL_IE 0x435\r
+#define MVK_RUSSIAN_CAPITAL_IE 0x415\r
+#define MVK_RUSSIAN_SMALL_ER 0x440\r
+#define MVK_RUSSIAN_CAPITAL_ER 0x420\r
+#define MVK_RUSSIAN_SMALL_TE 0x442\r
+#define MVK_RUSSIAN_CAPITAL_TE 0x422\r
+#define MVK_RUSSIAN_SMALL_YERU 0x44B\r
+#define MVK_RUSSIAN_CAPITAL_YERU 0x42B\r
+#define MVK_RUSSIAN_SMALL_U 0x443\r
+#define MVK_RUSSIAN_CAPITAL_U 0x423\r
+#define MVK_RUSSIAN_SMALL_I 0x438\r
+#define MVK_RUSSIAN_CAPITAL_I 0x418\r
+#define MVK_RUSSIAN_SMALL_O 0x43E\r
+#define MVK_RUSSIAN_CAPITAL_O 0x41E\r
+#define MVK_RUSSIAN_SMALL_PE 0x43F\r
+#define MVK_RUSSIAN_CAPITAL_PE 0x41F\r
+#define MVK_RUSSIAN_SMALL_SHA 0x448\r
+#define MVK_RUSSIAN_CAPITAL_SHA 0x428\r
+#define MVK_RUSSIAN_SMALL_SHCA 0x449\r
+#define MVK_RUSSIAN_CAPITAL_SHCA 0x429\r
+/*-----second row contains 11 keys----(all russian keys)-----------*/\r
+#define MVK_RUSSIAN_SMALL_A 0x430\r
+#define MVK_RUSSIAN_CAPITAL_A 0x410\r
+#define MVK_RUSSIAN_SMALL_ES 0x441\r
+#define MVK_RUSSIAN_CAPITAL_ES 0x421\r
+#define MVK_RUSSIAN_SMALL_DE 0x434\r
+#define MVK_RUSSIAN_CAPITAL_DE 0x414\r
+#define MVK_RUSSIAN_SMALL_EF 0x444\r
+#define MVK_RUSSIAN_CAPITAL_EF 0x424\r
+#define MVK_RUSSIAN_SMALL_GHE 0x433\r
+#define MVK_RUSSIAN_CAPITAL_GHE 0x413\r
+#define MVK_RUSSIAN_SMALL_HA 0x445\r
+#define MVK_RUSSIAN_CAPITAL_HA 0x425\r
+#define MVK_RUSSIAN_SMALL_SHRTI 0x439\r
+#define MVK_RUSSIAN_CAPITAL_SHRTI 0x419\r
+#define MVK_RUSSIAN_SMALL_KA 0x43A\r
+#define MVK_RUSSIAN_CAPITAL_KA 0x41A\r
+#define MVK_RUSSIAN_SMALL_EL 0x43B\r
+#define MVK_RUSSIAN_CAPITAL_EL 0x41B\r
+#define MVK_RUSSIAN_SMALL_CHE 0x447\r
+#define MVK_RUSSIAN_CAPITAL_CHE 0x427\r
+#define MVK_RUSSIAN_SMALL_E 0x44D\r
+#define MVK_RUSSIAN_CAPITAL_E 0x42D\r
+/*----third row contains 12 keys----(shift key + 10 russian keys + enter key)-----*/\r
+#define MVK_RUSSIAN_SMALL_ZE 0x437\r
+#define MVK_RUSSIAN_CAPITAL_ZE 0x417\r
+#define MVK_RUSSIAN_SMALL_SOFT 0x44C\r
+#define MVK_RUSSIAN_CAPITAL_SOFT 0x42C\r
+#define MVK_RUSSIAN_SMALL_TSE 0x446\r
+#define MVK_RUSSIAN_CAPITAL_TSE 0x426\r
+#define MVK_RUSSIAN_SMALL_VE 0x432\r
+#define MVK_RUSSIAN_CAPITAL_VE 0x412\r
+#define MVK_RUSSIAN_SMALL_BE 0x431\r
+#define MVK_RUSSIAN_CAPITAL_BE 0x411\r
+#define MVK_RUSSIAN_SMALL_EN 0x43D\r
+#define MVK_RUSSIAN_CAPITAL_EN 0x41D\r
+#define MVK_RUSSIAN_SMALL_EM 0x43C\r
+#define MVK_RUSSIAN_CAPITAL_EM 0x41C\r
+#define MVK_RUSSIAN_SMALL_HARD 0x44A\r
+#define MVK_RUSSIAN_CAPITAL_HARD 0x42A\r
+#define MVK_RUSSIAN_SMALL_YU 0x44E\r
+#define MVK_RUSSIAN_CAPITAL_YU 0x42E\r
+#define MVK_RUSSIAN_SMALL_IO 0x451\r
+#define MVK_RUSSIAN_CAPITAL_IO 0x401\r
+\r
+\r
+#define MVK_LATIN_SMALL_A_BREVE 0x103\r
+#define MVK_LATIN_CAPITAL_A_BREVE 0x102\r
+#define MVK_LATIN_SMALL_A_CIRCUMFLEX 0x0E2\r
+#define MVK_LATIN_CAPITAL_A_CIRCUMFLEX 0x0C2\r
+#define MVK_LATIN_SMALL_E_CIRCUMFLEX 0x0EA\r
+#define MVK_LATIN_CAPITAL_E_CIRCUMFLEX 0x0CA\r
+#define MVK_LATIN_SMALL_O_CIRCUMFLEX 0x0F4\r
+#define MVK_LATIN_CAPITAL_O_CIRCUMFLEX 0x0D4\r
+#define MVK_LATIN_SMALL_D_STROKE 0x111\r
+#define MVK_LATIN_CAPITAL_D_STROKE 0x110\r
+#define MVK_LATIN_SMALL_U_HORN 0x1B0\r
+#define MVK_LATIN_CAPITAL_U_HORN 0x1AF\r
+#define MVK_LATIN_SMALL_O_HORN 0x1A1\r
+#define MVK_LATIN_CAPITAL_O_HORN 0x1A0\r
+\r
+#define MVK_COMBINING_GRAVE_ACCENT 0x300\r
+#define MVK_COMBINING_HOOKABOVE 0x309\r
+#define MVK_COMBINING_TILDE 0x303\r
+#define MVK_COMBINING_ACUTE_ACCENT 0x301\r
+#define MVK_COMBINING_DOT_BELOW 0x323\r
+\r
+#define MVK_DONG_SIGN 0x20AB   /* Vietnamese Currency */\r
+\r
+/*----forth row is same as normal english qwerty keypad ---------------*/\r
+\r
+#define MVK_HAUSA_SMALL_B_hook 0x253\r
+#define MVK_HAUSA_CAPITAL_B_hook 0x181\r
+#define MVK_HAUSA_SMALL_D_hook 0x257\r
+#define MVK_HAUSA_CAPITAL_D_hook 0x18A\r
+#define MVK_HAUSA_SMALL_K_hook 0x199\r
+#define MVK_HAUSA_CAPITAL_K_hook 0x198\r
+#define MVK_HAUSA_SMALL_Y_hook 0x1B4\r
+#define MVK_HAUSA_CAPITAL_Y_hook 0x1B3\r
+\r
+#define MVK_LATIN_SMALL_LETTER_E_WITH_CARON                    0x11B\r
+#define MVK_LATIN_CAPITAL_LETTER_E_WITH_CARON          0x11A\r
+#define MVK_LATIN_SMALL_LETTER_S_WITH_CARON                    0x161\r
+#define MVK_LATIN_CAPITAL_LETTER_S_WITH_CARON          0x160\r
+#define MVK_LATIN_SMALL_LETTER_C_WITH_CARON                    0x10D\r
+#define MVK_LATIN_CAPITAL_LETTER_C_WITH_CARON          0x10C\r
+#define MVK_LATIN_SMALL_LETTER_R_WITH_CARON                    0x159\r
+#define MVK_LATIN_CAPITAL_LETTER_R_WITH_CARON          0x158\r
+#define MVK_LATIN_SMALL_LETTER_Z_WITH_CARON                    0x17E\r
+#define MVK_LATIN_CAPITAL_LETTER_Z_WITH_CARON          0x17D\r
+#define MVK_LATIN_SMALL_LETTER_Y_WITH_ACUTE                    0x0FD\r
+#define MVK_LATIN_CAPITAL_LETTER_Y_WITH_ACUTE          0x0DD\r
+#define MVK_LATIN_SMALL_LETTER_A_WITH_ACUTE                    0x0E1\r
+#define MVK_LATIN_CAPITAL_LETTER_A_WITH_ACUTE          0x0C1\r
+#define MVK_LATIN_SMALL_LETTER_I_WITH_ACUTE                    0x0ED\r
+#define MVK_LATIN_CAPITAL_LETTER_I_WITH_ACUTE          0x0CD\r
+#define MVK_LATIN_SMALL_LETTER_E_WITH_ACUTE                    0x0E9\r
+#define MVK_LATIN_CAPITAL_LETTER_E_WITH_ACUTE          0x0C9\r
+#define MVK_LATIN_SMALL_LETTER_U_WITH_ACUTE                    0x0FA\r
+#define MVK_LATIN_CAPITAL_LETTER_U_WITH_ACUTE          0x0DA\r
+#define MVK_LATIN_SMALL_LETTER_U_WITH_RING_ABOVE       0x16F\r
+#define MVK_LATIN_CAPITAL_LETTER_U_WITH_RING_ABOVE     0x16E\r
+\r
+/* Added for Bulgarian Language */\r
+#define MVK_NUMERO_SIGN 0x2116\r
+#define MVK_CYRILLIC_SMALL_BYELORUSSAN_UKRANIAN_I              0x456\r
+#define MVK_CYRILLIC_CAPITAL_BYELORUSSAN_UKRANIAN_I            0x406\r
+/* List ends for Bulgarian Language */\r
+\r
+#define MVK_CYRILLIC_SMALL_LETTER_GHE_WITH_UPTURN              0x491\r
+#define MVK_CYRILLIC_CAPITAL_LETTER_GHE_WITH_UPTURN    0x490\r
+#define MVK_CYRILLIC_SMALL_LETTER_DJE                                          0x452\r
+#define MVK_CYRILLIC_CAPITAL_LETTER_DJE                                        0x402\r
+#define MVK_CYRILLIC_SMALL_LETTER_UKRAINIAN_IE                 0x454\r
+#define MVK_CYRILLIC_SMALL_LETTER_GJE                                          0x453\r
+#define MVK_CYRILLIC_CAPITAL_LETTER_GJE                                        0x403\r
+#define MVK_CYRILLIC_CAPITAL_LETTER_UKRAINIAN_IE                       0x404\r
+#define MVK_CYRILLIC_SMALL_LETTER_DZE                                          0x455\r
+#define MVK_CYRILLIC_CAPITAL_LETTER_DZE                                        0x405\r
+#define MVK_CYRILLIC_SMALL_LETTER_YI                                           0x457\r
+#define MVK_CYRILLIC_CAPITAL_LETTER_YI                                 0x407\r
+#define MVK_CYRILLIC_SMALL_LETTER_JE                                           0x458\r
+#define MVK_CYRILLIC_CAPITAL_LETTER_JE                                 0x408\r
+#define MVK_CYRILLIC_SMALL_LETTER_LJE                                          0x459\r
+#define MVK_CYRILLIC_CAPITAL_LETTER_LJE                                        0x409\r
+#define MVK_CYRILLIC_SMALL_LETTER_NJE                                          0x45A\r
+#define MVK_CYRILLIC_CAPITAL_LETTER_NJE                                        0x40A\r
+#define MVK_CYRILLIC_SMALL_LETTER_TSHE                                 0x45B\r
+#define MVK_CYRILLIC_CAPITAL_LETTER_TSHE                                       0x40B\r
+#define MVK_CYRILLIC_SMALL_LETTER_KJE                                          0x45C\r
+#define MVK_CYRILLIC_CAPITAL_LETTER_KJE                                        0x40C\r
+#define MVK_CYRILLIC_SMALL_LETTER_DZHE                                 0x45F\r
+#define MVK_CYRILLIC_CAPITAL_LETTER_DZHE                                       0x40F\r
+\r
+\r
+#define MVK_LATIN_l_STROKE 0x0142\r
+#define MVK_LATIN_L_STROKE 0x0141\r
+#define MVK_LATIN_s_CEDILLA 0x015F\r
+#define MVK_LATIN_S_CEDILLA 0x015E\r
+#define MVK_LATIN_t_CEDILLA 0x0163\r
+#define MVK_LATIN_T_CEDILLA 0x0162\r
+\r
+#define MVK_OGONEK 0x02DB\r
+\r
+\r
+#define MVK_SINHALA_VOWEL_SIGN_DIGA_PAA_PILLA                  0xDD6\r
+#define MVK_SINHALA_VOWEL_SIGN_KETTI_PAA_PILLA                 0xDD4   \r
+#define MVK_SINHALA_LETTER_UYANNA                              0xD8B\r
+#define MVK_SINHALA_LETTER_AYANNA                              0xD85   \r
+#define MVK_SINHALA_VOWEL_SIGN_KETTI_AEDA_PILLA                        0xDD0\r
+#define MVK_SINHALA_VOWEL_SIGN_DIGA_AEDA_PILLA                 0xDD1   \r
+#define MVK_SINHALA_LETTER_IRUYANNA                            0xD8D\r
+#define MVK_SINHALA_LETTER_RAYANNA                             0xDBB   \r
+#define MVK_SINHALA_LETTER_OYANNA                              0xD94\r
+#define MVK_SINHALA_LETTER_EYANNA                              0xD91   \r
+#define MVK_SINHALA_LETTER_TAALUJA_SAYANNA                     0xDC1\r
+#define MVK_SINHALA_LETTER_HAYANNA                             0xDC4   \r
+#define MVK_SINHALA_LETTER_AMBA_BAYANNA                                0xDB9\r
+#define MVK_SINHALA_LETTER_MAYANNA                             0xDB8   \r
+#define MVK_SINHALA_LETTER_MUURDHAJA_SAYANNA                   0xDC2\r
+#define MVK_SINHALA_LETTER_DANTAJA_SAYANNA                     0xDC3   \r
+#define MVK_SINHALA_LETTER_MAHAAPRAANA_DAYANNA                 0xDB0\r
+#define MVK_SINHALA_LETTER_ALPAPRAANA_DAYANNA                  0xDAF   \r
+#define MVK_SINHALA_LETTER_MAHAAPRAANA_CAYANNA                 0xDA1\r
+#define MVK_SINHALA_LETTER_ALPAPRAANA_CAYANNA                  0xDA0   \r
+#define MVK_SINHALA_LETTER_TAALUJA_SANYOOGA_NAAKSIKYAYA                0xDA5\r
+#define MVK_SINHALA_LETTER_TAALUJA_NAASIKYAYA                  0xDA4\r
+#define MVK_SINHALA_VOWEL_SIGN_DIGA_GAYANUKITTA                        0xDF3\r
+#define MVK_SINHALA_SIGN_VISARGAYA                             0xD83\r
+#define MVK_SINHALA_VOWEL_SIGN_GAYANUKITTA                     0xDDF\r
+#define MVK_SINHALA_SIGN_AL_LAKUNA                             0xDCA\r
+#define MVK_SINHALA_VOWEL_SIGN_DIGA_IS_PILLA                   0xDD3\r
+#define MVK_SINHALA_VOWEL_SIGN_KETTI_IS_PILLA                  0xDD2\r
+#define MVK_SINHALA_VOWEL_SIGN_GAETTA_PILLA                    0xDD8\r
+#define MVK_SINHALA_VOWEL_SIGN_AELA_PILLA                      0xDCF\r
+#define MVK_SINHALA_LETTER_FAYANNA                             0xDC6\r
+#define MVK_SINHALA_VOWEL_SIGN_KOMBUVA                         0xDD9\r
+#define MVK_SINHALA_LETTER_MAHAAPRAANA_TTAYANNA                        0xDA8\r
+#define MVK_SINHALA_LETTER_ALPAPRAANA_TTAYANNA                 0xDA7\r
+#define MVK_SINHALA_LETTER_ALPAPRAANA_CAYANNA                  0xDA0\r
+#define MVK_SINHALA_LETTER_YAYANNA                             0xDBA\r
+#define MVK_SINHALA_LETTER_MAHAAPRAANA_PAYANNA                 0xDB5\r
+#define MVK_SINHALA_LETTER_VAYANNA                             0xDC0\r
+#define MVK_SINHALA_LETTER_MUURDHAJA_NAYANNA                   0xDAB\r
+#define MVK_SINHALA_LETTER_DANTAJA_NAYANNA                     0xDB1\r
+#define MVK_SINHALA_LETTER_MAHAAPRAANA_KAYANNA                 0xD9B\r
+#define MVK_SINHALA_LETTER_ALPAPRAANA_KAYANNA                  0xD9A\r
+#define MVK_SINHALA_LETTER_MAHAAPRAANA_TAYANNA                 0xDAE\r
+#define MVK_SINHALA_LETTER_ALPAPRAANA_TAYANNA                  0xDAD\r
+#define MVK_SINHALA_LETTER_KANTAJA_NAASIKYAYA                  0xD9E\r
+#define MVK_SINHALA_SIGN_ANUSVARAYA                            0xD82\r
+#define MVK_SINHALA_LETTER_MAHAAPRAANA_JAYANNA                 0xDA3\r
+#define MVK_SINHALA_LETTER_ALPAPRAANA_JAYANNA                  0xDA2\r
+#define MVK_SINHALA_LETTER_MAHAAPRAANA_DDAYANNA                        0xDAA\r
+#define MVK_SINHALA_LETTER_ALPAPRAANA_DDAYANNA                 0xDA9\r
+#define MVK_SINHALA_LETTER_IIYANNA                             0xD8A\r
+#define MVK_SINHALA_LETTER_IYANNA                              0xD89\r
+#define MVK_SINHALA_LETTER_MAHAAPRAANA_BAYANNA                 0xDB7\r
+#define MVK_SINHALA_LETTER_ALPAPRAANA_BAYANNA                  0xDB6\r
+#define MVK_SINHALA_LETTER_MAHAAPRAANA_PAYANNA                 0xDB5\r
+#define MVK_SINHALA_LETTER_ALPAPRAANA_PAYANNA                  0xDB4\r
+#define MVK_SINHALA_LETTER_MUURDHAJA_LAYANNA                   0xDC5\r
+#define MVK_SINHALA_LETTER_DANTAJA_LAYANNA                     0xDBD\r
+#define MVK_SINHALA_LETTER_MAHAAPRAANA_GAYANNA                 0xD9D\r
+#define MVK_SINHALA_LETTER_ALPAPRAANA_GAYANNA                  0xD9C\r
+#define MVK_SINHALA_LETTER_SANYAKA_DAYANNA                     0xDB3\r
+#define MVK_SINHALA_LETTER_SANYAKA_GAYANNA                     0xD9F\r
+#define MVK_SINHALA_LETTER_SANYAKA_JAYANNA                     0xDA6\r
+#define MVK_SINHALA_LETTER_SANYAKA_DDAYANNA                    0xDAC\r
+#define MVK_SINHALA_PUNCTUATION_KUNDDALIYA                     0xDF4\r
+#define MVK_SINHALA_LETTER_AAYANNA                             0xD86\r
+#define MVK_SINHALA_LETTER_AEYANNA                             0xD87\r
+#define MVK_SINHALA_LETTER_AEEYANNA                            0xD88\r
+#define MVK_SINHALA_VOWEL_SIGN_DIGA_KOMBUVA                    0xDDA\r
+#define MVK_SINHALA_LETTER_EEYANNA                             0xD92\r
+#define MVK_SINHALA_VOWEL_SIGN_KOMBU_DEKA                      0xDDB\r
+#define MVK_SINHALA_LETTER_AIYANNA                             0xD93\r
+#define MVK_SINHALA_VOWEL_SIGN_KOMBUVA_HAA_AELA_PILLA          0xDDC\r
+#define MVK_SINHALA_LETTER_UUYANNA                             0xD8C\r
+#define MVK_SINHALA_VOWEL_SIGN_KOMBUVA_HAA_DIGA_AELA_PILLA     0xDDD\r
+#define MVK_SINHALA_LETTER_OOYANNA                             0xD95\r
+#define MVK_SINHALA_VOWEL_SIGN_KOMBUVA_HAA_GAYANUKITTA         0xDDE\r
+#define MVK_SINHALA_LETTER_AUYANNA                             0xD96\r
+#define MVK_SINHALA_VOWEL_SIGN_DIGA_GAETTA_PILLA               0xDF2\r
+#define MVK_SINHALA_LETTER_IRUUYANNA                           0xD8E\r
+#define MVK_SINHALA_LETTER_LUYANNA                             0xD8f\r
+#define MVK_SINHALA_LETTER_ILUUYANNA                           0xD90\r
+\r
+\r
+\r
+#define MVK_NATIVE 0x30a1\r
+\r
+#define MVK_FLUSH 0x8001\r
+\r
+#define MVK_RESERVED_KEY 0x9000 /* limit about reserved key*/\r
+\r
+\r
+#endif //__MCF_KEY_DEFINES_H__\r
diff --git a/mcf/include/mcfresourcecache.h b/mcf/include/mcfresourcecache.h
new file mode 100755 (executable)
index 0000000..e67e8a1
--- /dev/null
@@ -0,0 +1,181 @@
+/*
+ * Copyright 2012  Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.tizenopensource.org/license
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+
+#include "mcfgwes.h"
+#include "mcfutils.h"
+#include "mcfresource.h"
+
+#ifdef ENABLE_RESOURCE_DATA_FILE
+#include <iostream>
+#include <set>
+#endif
+
+#ifndef __MCF_RESOURCE_CACHE_H__
+#define __MCF_RESOURCE_CACHE_H__
+
+
+
+#ifdef ENABLE_RESOURCE_DATA_FILE
+
+#pragma pack(1)
+typedef struct _StoredMcfLayoutKeyProperties {
+        mcfboolean fValid;
+        mcfbyte labelCnt;
+        mcfchar label[MCF_SHIFT_STATE_MAX][MAX_SIZE_OF_LABEL_FOR_ONE][RESOURCE_DATA_LABEL_LEN];
+        mcfshort labelPropId;
+        mcfchar labelImgPath[MCF_SHIFT_STATE_MAX][MCF_BUTTON_STATE_MAX][RESOURCE_DATA_IMG_PATH_LEN];
+        mcfchar bgImgPath[MCF_SHIFT_STATE_MAX][MCF_BUTTON_STATE_MAX][RESOURCE_DATA_IMG_PATH_LEN];
+        mcfbyte keyValueCnt;
+        mcfchar keyValue[MCF_SHIFT_STATE_MAX][MAX_SIZE_OF_MULTITAP_CHAR][RESOURCE_DATA_KEY_VALUE_LEN];
+        mcfulong keyEvent[MCF_SHIFT_STATE_MAX][MAX_SIZE_OF_MULTITAP_CHAR];
+        mcfchar longKeyValue[8];
+        mcfulong longKeyEvent;
+        mcfboolean useRepeatKey;
+        mcfchar autopopupKeys[MCF_SHIFT_STATE_MAX][MAX_SIZE_OF_AUTOPOPUP_STRING][RESOURCE_DATA_AUTOPOPUP_KEY_LEN];
+        mcfboolean dontClosePopup;
+        mcfbyte extraOption;
+        mcfbyte multitouchType;
+        mcfbyte modifierDecorationId;
+        mcfchar magnifierLabel[MCF_SHIFT_STATE_MAX][MAX_SIZE_OF_LABEL_FOR_ONE][RESOURCE_DATA_LABEL_LEN];
+} StoredMcfLayoutKeyProperties;
+
+typedef struct _StoredMcfLayoutKeyPropertiesHeader {
+        mcfuint maxKeyset;
+        mcfuint maxKey;
+        mcfulong addrKey[MAX_KEYSET][MAX_KEY];
+} StoredMcfLayoutKeyPropertiesHeader;
+#pragma pack()
+
+
+#endif
+
+
+//MCF_BEGIN_DECLS
+
+namespace mcf
+{
+
+typedef struct _McfButtonContext {
+    mcfboolean used;
+    mcfbyte multikeyIdx;
+    MCFButtonState state;
+} McfButtonContext;
+/**
+* @brief The class to store current state of key layout
+*
+* This class implements all functions for working as a soft-based keyboard
+* In side of ISE developer, they can modify it by their requirements.
+*/
+class CMCFResourceCache
+{
+private:
+
+#ifdef ENABLE_RESOURCE_DATA_FILE
+    std::set<std::string> mLayoutKeyPropertiesStrings;
+#endif
+
+    static CMCFResourceCache* sInstance; /* For singleton */
+    CMCFResourceCache();
+
+#ifdef ENABLE_RESOURCE_DATA_FILE
+    mcfchar* copy_string(const mcfchar *str);
+    mcfint copy_from_stored(McfLayoutKeyProperties *prop, StoredMcfLayoutKeyProperties *stored);
+    mcfboolean load_layoutkey_properties(mcfint keyset, McfLayoutKeyProperties (*pLayoutKeyProperties)[MAX_KEY]);
+    mcfboolean load_layoutkey_properties(mcfint keyset, mcfint keyidx, McfLayoutKeyProperties *pLayoutKeyProperties);
+#endif
+public:
+    ~CMCFResourceCache();
+
+    static CMCFResourceCache* get_instance();
+
+    mcfboolean recompute_layout(mcfwindow window);
+
+    const McfLayout* get_cur_layout(mcfwindow window) const;
+    McfLayoutKeyCoordination* get_cur_layout_key_coordination(mcfwindow window, mcfbyte keyindex);
+    McfLayoutKeyConfigure* get_cur_layout_key_configure(mcfwindow window,mcfbyte keyindex);
+    McfLayoutKeyProperties* get_cur_layout_key_properties(mcfwindow window,mcfbyte keyindex);
+
+    const McfLabelProperties* get_label_properties(mcfshort labeltype, mcfbyte index) const;
+
+    McfButtonContext* get_cur_button_context(mcfwindow window, mcfbyte keyindex);
+
+    mcfboolean clear_private_keys();
+    mcfint add_private_key(McfPrivateKeyProperties* properties, mcfboolean *fNeedInvaild);
+    mcfboolean remove_private_key(mcfint id);
+
+    mcfboolean copy_from_privatekeyproperties(const McfPrivateKeyProperties* privProperties,
+                                                 McfLayoutKeyProperties* properties,
+                                                 McfLayoutKeyConfigure *configure);
+    mcfboolean copy_to_privatekeyproperties(const McfLayoutKeyProperties* properties,
+                                               const McfLayoutKeyConfigure *configure,
+                                               McfPrivateKeyProperties* privProperties);
+
+    mcfboolean set_cur_themename(const mcfchar *themename);
+    const mcfchar* get_cur_themename();
+
+    mcfint set_private_key(McfPrivateKeyProperties* properties, mcfboolean fRedraw, mcfboolean fPendingUpdate);
+    mcfint set_private_key(mcfshort inputModeIdx, mcfbyte layoutIdx, mcfbyte keyIdx, mcfchar* label,
+                              mcfchar* imagelabel[MCF_BUTTON_STATE_MAX], mcfchar* imagebg[MCF_BUTTON_STATE_MAX],
+                              mcfulong keyEvent, mcfchar *keyValue, mcfboolean fRedraw, mcfboolean fPendingUpdate);
+    void unset_private_key(mcfshort inputModeIdx, mcfbyte layoutIdx, mcfbyte keyIdx);
+    void unset_private_key(mcfint customID);
+
+    mcfbyte find_keyidx_by_customid(mcfshort inputModeIdx, mcfbyte layoutIdx, mcfshort customID);
+    void clone_keyproperties(McfPrivateKeyProperties* priv, mcfbyte inputModeIdx, mcfbyte layoutIdx, mcfbyte keyIdx);
+
+    void enable_button(mcfbyte keyIdx);
+    void disable_button(mcfbyte keyIdx);
+
+private:
+    mcfboolean resize_resource_elements_by_resolution();
+    mcfboolean change_by_privatekey(const mcfbyte inputModeIdx, const mcfbyte layoutIdx, const mcfbyte keyIdx,
+                                       McfLayoutKeyProperties* properties, McfLayoutKeyConfigure* configure);
+
+    void generate_autopopup_layout(const McfLayoutKeyProperties *properties,
+                                   McfLayout *pCurLayout,
+                                   McfLayoutKeyCoordination (*pCurLayoutKeyCoordination)[MAX_KEY],
+                                   McfLayoutKeyConfigure (*pCurLayoutKeyConfigure)[MAX_KEY],
+                                   McfLayoutKeyProperties (*pCurLayoutKeyProperties)[MAX_KEY],
+                                   McfButtonContext (*pCurButtonContext)[MAX_KEY]);
+
+protected:
+
+    McfLayout mCurBaseLayout;
+    McfLayoutKeyCoordination mCurBaseLayoutKeyCoordination[MAX_KEY];
+    McfLayoutKeyConfigure mCurBaseLayoutKeyConfigure[MAX_KEY];
+    McfLayoutKeyProperties mCurBaseLayoutKeyProperties[MAX_KEY];
+
+    McfButtonContext mCurBaseButtonContext[MAX_KEY];
+
+    McfLayout mCurPopupLayout[MAX_POPUP_WINDOW];
+    McfLayoutKeyCoordination mCurPopupLayoutKeyCoordination[MAX_POPUP_WINDOW][MAX_KEY];
+    McfLayoutKeyConfigure mCurPopupLayoutKeyConfigure[MAX_POPUP_WINDOW][MAX_KEY];
+    McfLayoutKeyProperties mCurPopupLayoutKeyProperties[MAX_POPUP_WINDOW][MAX_KEY];
+
+    McfButtonContext mCurPopupButtonContext[MAX_POPUP_WINDOW][MAX_KEY];
+
+    McfPrivateKeyProperties mPrivateKeyProperties[MAX_PRIVATE_KEY];
+
+    mcfchar mCurThemename[_POSIX_PATH_MAX];
+};
+
+}
+
+//MCF_END_DECLS
+
+#endif
diff --git a/mcf/include/mcfstructs.h b/mcf/include/mcfstructs.h
new file mode 100755 (executable)
index 0000000..5170143
--- /dev/null
@@ -0,0 +1,310 @@
+/*
+ * Copyright 2012  Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.tizenopensource.org/license
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+\r
+#include "mcftypes.h"\r
+#include "mcfconfig.h"\r
+\r
+#ifndef __MCF_STRUCTS_H__\r
+#define __MCF_STRUCTS_H__\r
+\r
+//MCF_BEGIN_DECLS\r
+\r
+/**\r
+  *@brief MCF Layout structure, which is a physical keyboard representation defined by a group of McfLayoutKeyCoordinations\r
+  */\r
+typedef struct _McfLayout {\r
+    mcfboolean fValid;         /* Indicates whether this information is in use or not */\r
+    MCFLayoutStyle style;      /* Desribes the style of this layout */\r
+    mcfchar* name;                     /* Name of this layout */\r
+    mcfshort x;                                /* X coordination where this layout should be located */\r
+    mcfshort y;                                /* Y coordination where this layout should be located */\r
+    mcfshort width;                    /* Width of this layout */\r
+    mcfshort height;           /* Height of this layout*/\r
+    mcfchar* imgPath[MCF_BUTTON_STATE_MAX];/* Background image of each button state */\r
+    mcfboolean fUseSWBtn;      /* Whether to draw buttons by SW or not */\r
+    mcfboolean fUseMagnifierWnd;       /* Whether to use magnifier window or not */\r
+    mcfboolean fUseZoomWnd;    /* Whether to use zoom window or not */\r
+    mcfboolean fExtractBG;     /* Whether to display only some part of background image */\r
+    mcfbyte linkedLayoutId;    /* Indicates the ID of linked layout when rotated */\r
+\r
+    MCFDisplay displayType;    /* Indicates whether this layout is for portrait mode or landscape display */\r
+\r
+    mcfboolean fUseSWbg;       /* Whether to draw background by SW or not */\r
+    McfColor bgColor;          /* If drawn by SW, describes the background color */\r
+    mcfdouble bgLineWidth;     /* If drawn by SW, describes the background border width */\r
+    McfColor bgLineColor;      /* If drawn by SW, describes the background border color */\r
+\r
+    mcfshort addGrabLeft;      /* If this layout's style is POPUP_GRAB, desribes the left pixel for grab area */\r
+    mcfshort addGrabRight;     /* If this layout's style is POPUP_GRAB, desribes the right pixel for grab area */\r
+    mcfshort addGrabTop;       /* If this layout's style is POPUP_GRAB, desribes the top pixel for grab area */\r
+    mcfshort addGrabBottom;    /* If this layout's style is POPUP_GRAB, desribes the bottom pixel for grab area */\r
+}McfLayout;\r
+\r
+/**\r
+  *@brief MCF Layout key coordination structure, which represents a key's position-related information\r
+  */\r
+typedef struct _McfLayoutKeyCoordination {\r
+    mcfboolean fValid;         /* Indicates whether this information is in use or not */\r
+    mcfshort x;                                /* X coordination of this button */\r
+    mcfshort y;                                /* Y coordination of this button */\r
+    mcfshort width;                    /* Width of this button */\r
+    mcfshort height;           /* Height of this button */\r
+    mcfshort addHitLeft;       /* Left value for expanded hit area */\r
+    mcfshort addHitRight;      /* Right value for expanded hit area */\r
+    mcfshort addHitTop;                /* Left value for expanded hit area */\r
+    mcfshort addHitBottom;     /* Left value for expanded hit area */\r
+    mcfshort popXOffset;       /* Relative X offset for popup window */\r
+    mcfshort popYOffset;       /* Relative Y offset for popup window */\r
+    mcfshort popImageX;                /* If the popup layout has ExtractBG, this value provides the X offset inside the BG image */\r
+    mcfshort popImageY;                /* If the popup layout has ExtractBG, this value provides the Y offset inside the BG image */\r
+    mcfint subLayoutID;                /* Indicates which sublayout this button belongs to */\r
+}McfLayoutKeyCoordination;\r
+\r
+/**\r
+*@brief MCF Layout keyset structure, indicates which keyset should be used for specific inputmode and layout combination\r
+*/\r
+typedef struct _McfLayoutKeyset {\r
+    mcfint inputmodeID;                /* Target inputmode ID */\r
+    mcfint layoutID;           /* Target layout ID */\r
+    mcfint keysetID;           /* Keyset ID that should be selected when the above inputmodeID and layoutID are given */\r
+} McfLayoutKeyset;\r
+\r
+/**\r
+  *@brief MCF Layout key configure structure\r
+  */\r
+typedef struct _McfLayoutKeyConfigure {\r
+    mcfboolean fValid;                 /* Indicates whether this information is in use or not */\r
+    mcfshort customID;                 /* A value for indentifying a button when handling private keys or disable key. */\r
+    MCFButtonType buttonType;  /* Indicates the behavioral type of this button */\r
+    MCFKeyType keyType;                        /* Delivered key type when the button event is emitted */\r
+    MCFPopupType popupType;            /* Popup type when this button is activated */\r
+    mcfboolean fUseMagnifier;  /* Indicates whether this button needs to display magnifier window when clicked */\r
+    mcfboolean fUseLongKeyMagnifier;   /* Indicates whether this button needs to display magnifier window when long-pressed */\r
+    mcfboolean fEnable;                        /* Indicates whether this button needs to be automatically enabled */\r
+    mcfbyte popupInputMode[MCF_DRAG_STATE_MAX];        /* Popup inputmode IDs depending on the direction of the drag action */\r
+    mcfboolean fIsSideButton;  /* Indicates whether this button is located on the very left or right of the layout */\r
+}McfLayoutKeyConfigure;\r
+\r
+/**\r
+  *@brief MCF Label properties structure\r
+  */\r
+typedef struct _McfLabelProperties {\r
+    mcfboolean fValid;                 /* Indicates whether this information is in use or not */\r
+    mcfchar* fontName;                 /* Font name of this label property */\r
+    mcfbyte fontSize;                  /* Font size of this label property */\r
+    McfColor fontColor[MCF_SHIFT_STATE_MAX][MCF_BUTTON_STATE_MAX];     /* Font color depending on the button and shift state */\r
+    MCFLabelAlignment alignment;       /* Alignment option for this label property */\r
+    mcfbyte paddingX;                  /* X padding value for alignment option above */\r
+    mcfbyte paddingY;                  /* Y padding value for alignment option above */\r
+    mcfbyte shadowDistance;            /* A distance value for drawing shadow */\r
+    MCFShadowDirection shadowDirection;        /* A direction option for drawing shadown */\r
+    McfColor shadowColor[MCF_SHIFT_STATE_MAX][MCF_BUTTON_STATE_MAX];   /* Shadow color depeding on the button and shift state */\r
+}McfLabelProperties;\r
+\r
+/**\r
+  *@brief MCF Layout key properties structure\r
+  */\r
+/* MCF Supports drawing button's background using McfLayout's imgPath - use below macro to bgImgPath for this feature */\r
+#define MCF_BACKGROUND_IMAGE_STRING "BACKGROUND_IMAGE"\r
+#define _Label_\r
+#define _LabelImg_\r
+#define _BGImg_\r
+#define _KeyVal_\r
+#define _KeyEvt_\r
+typedef struct _McfLayoutKeyProperties {\r
+    mcfboolean fValid;                 /* Indicates whether this information is in use or not */\r
+    mcfbyte labelCnt;                  /* Number of labels for this button (Max value :MAX_SIZE_OF_LABEL_FOR_ONE )*/\r
+    mcfchar* label[MCF_SHIFT_STATE_MAX][MAX_SIZE_OF_LABEL_FOR_ONE]; /* Label strings depending on the shift state */\r
+    mcfshort labelPropId;              /* Label propery ID for specifying the appearance of label strings */\r
+    mcfchar* labelImgPath[MCF_SHIFT_STATE_MAX][MCF_BUTTON_STATE_MAX];  /* ImgPath for the case of image label */\r
+    /** If bgImgPath is NULL, background will not be drawn. If "", layout image will be used instead */\r
+    mcfchar* bgImgPath[MCF_SHIFT_STATE_MAX][MCF_BUTTON_STATE_MAX];     /* ImgPath for the button's background */\r
+    mcfbyte keyValueCnt;               /* Number of key events in case of multitap or rotation button */\r
+    mcfchar* keyValue[MCF_SHIFT_STATE_MAX][MAX_SIZE_OF_MULTITAP_CHAR]; /* A string value delivered to ISE when clicked */\r
+    mcfulong keyEvent[MCF_SHIFT_STATE_MAX][MAX_SIZE_OF_MULTITAP_CHAR]; /* A long int value delivered to ISE when clicked */\r
+    mcfchar* longKeyValue;             /* A string value delivered to ISE when long key clicked */\r
+    mcfulong longKeyEvent;             /* A long int value delivered to ISE when long key clicked */\r
+    mcfboolean useRepeatKey;   /* Indicates whether this button allows repeated key events when pressed for a long time */\r
+    /* optional */\r
+    /* A string of candidate characters that will be shown in an autopopup window */\r
+    mcfchar* autopopupKeys[MCF_SHIFT_STATE_MAX][MAX_SIZE_OF_AUTOPOPUP_STRING];\r
+    /* When set, any events raised from this button will not close opened popup window */\r
+    mcfboolean dontClosePopup;\r
+    /* Extra options for each types of buttons :\r
+        BUTTON_TYPE_ROTATION - Set to 1 if the button should return to initial state when other key is pressed\r
+        BUTTON_TYPE_DIRECTION -\r
+            use definitions below, that are declared in mcfconfig.h file\r
+\r
+            #define DIRECTION_EXTRA_OPTION_4_DIRECTIONS 0\r
+            #define DIRECTION_EXTRA_OPTION_8_DIRECTIONS 1\r
+            #define DIRECTION_EXTRA_OPTION_4_DIRECTIONS_WITH_LONG 2\r
+            #define DIRECTION_EXTRA_OPTION_8_DIRECTIONS_WITH_LONG 3\r
+            #define DIRECTION_EXTRA_OPTION_4_DIRECTIONS_WITH_RETURN 4\r
+            #define DIRECTION_EXTRA_OPTION_8_DIRECTIONS_WITH_RETURN 5\r
+            #define DIRECTION_EXTRA_OPTION_4_DIRECTIONS_WITH_RETURN_AND_CURVE 6\r
+    */\r
+    mcfbyte extraOption;\r
+    mcfbyte multitouchType;            /* Indicates what kind of multitouch type this button supports */\r
+    /* If the button should be displayed differently depending on the modifier, describe a decorator and provide its ID here */\r
+    mcfbyte modifierDecorationId;\r
+    /* For the case if this button needs to display multiple labels or different string from the label string */\r
+    mcfchar* magnifierLabel[MCF_SHIFT_STATE_MAX][MAX_SIZE_OF_LABEL_FOR_ONE];\r
+}McfLayoutKeyProperties;\r
+\r
+/**\r
+  *@brief MCF private key structure for application, to change the configuration and property of a specific key\r
+  */\r
+typedef struct _McfPrivateKeyProperties {\r
+    mcfboolean fValid;                 /* Indicates whether this information is in use or not */\r
+    mcfshort inputModeIdx;             /* Target inputmode index that this private key wants to affect */\r
+    mcfshort layoutIdx;                        /* Target layout index that this private key wants to affect */\r
+    mcfbyte keyIdx;                            /* Target key index that this private key wants to affect */\r
+\r
+    /* Configurations */ /* Has same purpose with the McfLayoutKeyConfiguration's member variable */\r
+    mcfbyte customID;\r
+    MCFButtonType buttonType;\r
+    MCFKeyType keyType;\r
+    MCFPopupType popupType;\r
+    mcfboolean fUseMagnifier;\r
+    mcfboolean fUseLongKeyMagnifier;\r
+    mcfboolean fEnable;\r
+    mcfbyte popupInputMode[MCF_DRAG_STATE_MAX];\r
+\r
+    /* Properties */ /* Has same purpose with the McfLayoutKeyProperties' member variable */\r
+    mcfbyte labelCnt;\r
+    mcfchar* label[MCF_SHIFT_STATE_MAX][MAX_SIZE_OF_LABEL_FOR_ONE];\r
+    mcfshort labelPropId;\r
+    mcfchar* labelImgPath[MCF_SHIFT_STATE_MAX][MCF_BUTTON_STATE_MAX];\r
+    mcfchar* bgImgPath[MCF_SHIFT_STATE_MAX][MCF_BUTTON_STATE_MAX];\r
+    mcfbyte keyValueCnt;\r
+    mcfchar* keyValue[MCF_SHIFT_STATE_MAX][MAX_SIZE_OF_MULTITAP_CHAR];\r
+    mcfulong keyEvent[MCF_SHIFT_STATE_MAX][MAX_SIZE_OF_MULTITAP_CHAR];\r
+    mcfchar* longKeyValue;\r
+    mcfulong longKeyEvent;\r
+    mcfboolean useRepeatKey;\r
+    mcfchar* autopopupKeys[MCF_SHIFT_STATE_MAX][MAX_SIZE_OF_AUTOPOPUP_STRING];\r
+    mcfboolean dontClosePopup;\r
+    mcfbyte extraOption;\r
+    mcfbyte multitouchType;\r
+    mcfbyte modifierDecorationId;\r
+}McfPrivateKeyProperties;\r
+\r
+/**\r
+  *@brief MCF input mode configuration structure, which indicates a type of SW keyboard\r
+  */\r
+typedef struct _McfInputModeConfigure {\r
+    mcfchar* name;                     /* Name of this inputmode */\r
+    mcfboolean fUseScreenRotation;     /* Indicates whether this inputmode supports screen rotation */\r
+    mcfbyte layoutId[MCFDISPLAY_MAX];  /* Each inputmode has 2 physical layouts - one for portrait and one for landscape */\r
+}McfInputModeConfigure;\r
+\r
+/**\r
+  *@brief MCF input mode configuration structure, similar with McfInputModeConfigure but for popup windows\r
+  */\r
+typedef struct _McfInputModePopupConfigure {\r
+    mcfchar* name;                     /* Name of this popup inputmode */\r
+    MCFLayoutStyle style;      /* The layout style of this popup inputmode */\r
+    mcfboolean fUseRotation;   /* Indicates whether this popup inputmode supports screen rotation */\r
+    mcfbyte layoutId[MCFDISPLAY_MAX];  /* Physical layouts for portrait and landscape mode */\r
+    mcfboolean fUseWindow;     /* Whether to use a new window or make a popup window as a layer of existing base window */\r
+    mcfboolean fUseDimWindow;  /* Whether to use a dim window */\r
+    mcfint fTimeout; /* fTimeout seconds of idle state will close this popup window. Set 0 to disable */\r
+}McfInputModePopupConfigure;\r
+\r
+/**\r
+  *@brief MCF S/W button style structure\r
+  */\r
+typedef struct _McfSWButtonStyle {\r
+    mcfdouble lineWidth[MCF_BUTTON_STATE_MAX]; /* A border line width when drawing a SW button */\r
+    McfColor lineColor[MCF_BUTTON_STATE_MAX];  /* A border line color when drawing a SW buttton */\r
+    McfColor bgColor[MCF_BUTTON_STATE_MAX];            /* A background color when drawing a SW button */\r
+    mcfdouble lineCurve;               /* A line curve value for drawing round rectangle. This can be ignored in some platforms */\r
+    mcffloat bgAlpha;                  /* A alpha value used when painting background. This can be ignored in some platforms */\r
+}McfSWButtonStyle;\r
+\r
+/**\r
+  *@brief MCF input mode configuration structure\r
+  */\r
+typedef struct _McfDefaultConfigure {\r
+    MCFDisplay display;                        /* Initial display mode */\r
+    mcfbyte inputMode;                 /* Initial input mode */\r
+    mcfboolean fUseMagnifierWnd;       /* A flag for enabling magnifer window */\r
+    mcfboolean fUseAutoPopup;          /* A flag for enabling autopopup window */\r
+    mcfboolean fUseZoomWnd;                    /* A flag for enabling zoom window */\r
+    mcfboolean fOnErrorNotiSnd;                /* A flag for playing error sound */\r
+    mcfboolean fUseWordDeletion;       /* A flag for using word deletion mode when repeating delete key */\r
+    mcfbyte swBtnStyleIdx;                     /* Describes which SW button style should be used */\r
+    MCFTouchOffsetLevel touchOffsetLevel[MCFDISPLAY_MAX];      /* Touch offset adjustment level description */\r
+    McfPoint touchOffset[MCFDISPLAY_MAX];      /* Touch offset adjustment value description */\r
+}McfDefaultConfigure;\r
+\r
+/**\r
+  *@brief MCF dim window configuration structure. This will be displayed between the base window and popup windows\r
+  */\r
+typedef struct _McfDimWndConfigure {\r
+    mcfboolean fUseWindow;                     /* Whether to use a new window or make a dim window as a layer of existing base window */\r
+    McfColor dimColor;                         /* Color setting for dim window */\r
+}McfDimWndConfigure;\r
+\r
+/**\r
+*@brief MCF auto-generated popup configuration structure. Mostly used for umlaut alternate characters in european languages\r
+*/\r
+typedef struct _McfAutoPopupConfigure {\r
+    mcfchar* bgImgPath;                                /* File path for background image */\r
+    McfColor bgColor;                          /* Background color for SW background */\r
+    mcfdouble bgLineWidth;                     /* Background SW border width */\r
+    McfColor bgLineColor;                      /* Background SW border color */\r
+    mcfbyte bgPadding;                         /* Padding amount between the bg border and buttons */\r
+    mcfchar* btnImgPath[MCF_BUTTON_STATE_MAX]; /* A filepath for each button's background image */\r
+    mcfbyte swBtnStyleIdx;                     /* Describes which SW button style should be used */\r
+    mcfshort btnWidth;                         /* Each button's width */\r
+    mcfshort btnHeight;                                /* Each button's height */\r
+    mcfbyte btnSpacing;                                /* Spacing amount between buttons */\r
+    McfLabelProperties labelProp;      /* Label property for each button's label strings */\r
+    mcfchar* wndDecoImgPath[MAX_WND_DECORATOR];        /* A 8-way decotation images for autopopup window */\r
+    mcfbyte wndDecoSize;                       /* Size of window decoration images */\r
+    mcfbyte maxColumn;                         /* Maximum number of items in a row */\r
+\r
+    mcfshort addGrabLeft;                      /* If this layout's style is POPUP_GRAB, desribes the left pixel for grab area */\r
+    mcfshort addGrabRight;                     /* If this layout's style is POPUP_GRAB, desribes the right pixel for grab area */\r
+    mcfshort addGrabTop;                               /* If this layout's style is POPUP_GRAB, desribes the top pixel for grab area */\r
+    mcfshort addGrabBottom;                    /* If this layout's style is POPUP_GRAB, desribes the bottom pixel for grab area */\r
+}McfAutoPopupConfigure;\r
+\r
+/**\r
+*@brief 9 patch image information struct - image files registered here would be displayed in 9 patch style\r
+*/\r
+typedef struct _McfNinePatchInfo {\r
+    mcfchar *imgPath;                  /* File path for identifying nine patch image file */\r
+    mcfshort left;                             /* Amount of left pixels for describing area that should not be scaled */\r
+    mcfshort right;                            /* Amount of right pixels for describing area that should not be scaled */\r
+    mcfshort top;                              /* Amount of top pixels for describing area that should not be scaled */\r
+    mcfshort bottom;                   /* Amount of bottom pixels for describing area that should not be scaled */\r
+}McfNinePatchInfo;\r
+\r
+/**\r
+*@brief A struct for decorating a button depending on the current modifier state\r
+*/\r
+typedef struct _McfModifierDecoration {\r
+    mcfboolean fExtractBG;             /* Whether to display only some part of background image */\r
+    mcfchar *bgImgPath[MCFDISPLAY_MAX][KEY_MODIFIER_MAX];      /* Background image file for decoration */\r
+}McfModifierDecoration;\r
+\r
+//MCF_END_DECLS\r
+\r
+#endif //__MCF_STRUCTS_H__\r
diff --git a/mcf/include/mcftypes.h b/mcf/include/mcftypes.h
new file mode 100755 (executable)
index 0000000..14f82f6
--- /dev/null
@@ -0,0 +1,103 @@
+/*
+ * Copyright 2012  Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.tizenopensource.org/license
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+
+#ifndef __MCF_TYPES_H__
+#define __MCF_TYPES_H__
+
+#define MCF_BEGIN_DECLS extern "C" {
+#define MCF_END_DECLS }
+
+#ifndef        FALSE
+#define        FALSE (0)
+#endif
+
+#ifndef        TRUE
+#define        TRUE (!FALSE)
+#endif
+
+#ifndef        NOT_USED
+#define        NOT_USED -1
+#endif
+
+#ifndef        USED
+#define        USED 1
+#endif
+
+typedef signed char mcf8;
+typedef signed short mcf16;
+typedef signed int mcf32;
+
+typedef unsigned char mcfu8;
+typedef unsigned short mcfu16;
+typedef unsigned int mcfu32;
+
+typedef char mcfchar;
+typedef short mcfshort;
+typedef long mcflong;
+typedef int mcfint;
+typedef char mcfboolean;
+
+typedef unsigned char mcfbyte;
+typedef unsigned char mcfuchar;
+typedef unsigned short mcfushort;
+typedef unsigned long mcfulong;
+typedef unsigned int mcfuint;
+
+typedef float mcffloat;
+typedef double mcfdouble;
+
+/* mcfwindow should be a struct - containing a flag whether it is a virtual window or not*/
+#define MCFWINDOW_INVALID 0
+#define MCFWINDOW_VIRTUAL_DIM -1
+
+typedef void* mcfwindow;
+typedef void* mcfimage;
+typedef void* mcffont;
+typedef void* mcfdrawctx;
+typedef mcfint mcftouchdevice;
+#define MCFTOUCHDEVICE_INVALID -1
+
+typedef struct _McfPoint {
+    mcfint x, y;
+}McfPoint;
+
+typedef struct _McfSize {
+    mcfint width, height;
+}McfSize;
+
+typedef struct _McfRect {
+    mcfint left, top, right, bottom;
+}McfRect;
+
+typedef struct _McfRectangle {
+    mcfint x, y, width, height;
+}McfRectangle;
+
+typedef struct _McfColor {
+    mcfbyte r, g, b, a;
+}McfColor;
+
+#define MCF_MAKEWORD(low, high) ((mcfu16)(((mcfu8)(low)) | ((mcfu16)((mcfu8)(high))) << 8))
+#define MCF_MAKELONG(low, high) ((mcfu32)(((mcfu16)(low)) | ((mcfu32)((mcfu16)(high))) << 16))
+#define MCF_LOWORD(i32) ((mcfu16)((i32) & 0xFFFF))
+#define MCF_HIWORD(i32) ((mcfu16)(((mcfu32)(i32) >> 16) & 0xFFFF))
+#define MCF_LOBYTE(i16) ((mcfu8)((i16) & 0xFF))
+#define MCF_HIBYTE(i16) ((mcfu8)(((mcfu16)(i16) >> 8) & 0xFF))
+
+
+#endif //__MCF_TYPES_H__
diff --git a/mcf/include/mcfuibuilder.h b/mcf/include/mcfuibuilder.h
new file mode 100755 (executable)
index 0000000..5469c84
--- /dev/null
@@ -0,0 +1,79 @@
+/*
+ * Copyright 2012  Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.tizenopensource.org/license
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+\r
+#include "mcfgwes.h"\r
+#include "mcfutils.h"\r
+\r
+#ifndef __MCF_UIBUILDER_H__\r
+#define __MCF_UIBUILDER_H__\r
+\r
+//MCF_BEGIN_DECLS\r
+\r
+namespace mcf\r
+{\r
+\r
+/**\r
+ * @brief The base class to work as a soft-based keyboard\r
+ *\r
+ * This class implements all functions for working as a soft-based keyboard\r
+ * In side of ISE developer, they can modify it by their requirements.\r
+ */\r
+class CMCFUIBuilder\r
+{\r
+    friend class CMCFFontProxy;\r
+\r
+private:\r
+    static CMCFUIBuilder* sInstance; /* For singleton */\r
+    CMCFUIBuilder();\r
+public:\r
+    ~CMCFUIBuilder();\r
+\r
+    static CMCFUIBuilder* get_instance();\r
+\r
+    void init(mcfwindow parentWnd);\r
+    mcfboolean show_layout(const mcfwindow window, const mcf16 x = 0, const mcf16 y = 0,\r
+                              const mcf16 width = 0, const mcf16 height = 0);\r
+    mcfboolean draw_button(const mcfwindow window, mcfdrawctx drawCtx, const mcf16 keyIdx,\r
+                              const MCFButtonState state, const mcfboolean fForceDrawBG = FALSE);\r
+    mcfboolean show_autopopup(const mcfwindow parent, mcfdrawctx drawCtx, const mcf16 keyIdx);\r
+private:\r
+    mcfboolean draw_button_all(const mcfwindow window, const mcfdrawctx drawCtx, const mcf16 x,\r
+                                  const mcf16 y, const mcf16 width, const mcf16 height);\r
+    mcfboolean draw_button_bg_by_sw(const mcfwindow window, const mcfdrawctx drawCtx,\r
+                                       const mcf16 keyIdx, const MCFButtonState state);\r
+    mcfboolean draw_window_bg_by_sw(const mcfwindow window, const mcfdrawctx drawCtx, const McfSize size,\r
+                                    const mcfdouble lineWidth, const McfColor lineColor, const McfColor fillColor);\r
+    mcfboolean draw_button_bg_by_img(const mcfwindow window, const mcfdrawctx drawCtx,const mcf16 keyIdx,\r
+                                            const MCFButtonState state, const mcfboolean fShift);\r
+    mcfboolean draw_button_bg_by_layoutimg(const mcfwindow window, const mcfdrawctx drawCtx, const mcf16 keyIdx,\r
+                                                  const MCFButtonState state, const mcfboolean fShift);\r
+    mcfboolean draw_button_label(const mcfwindow window, const mcfdrawctx drawCtx, const mcf16 keyIdx,\r
+                                 const MCFButtonState state, const mcfboolean fShift);\r
+\r
+protected:\r
+\r
+    /* Backend Primitive */\r
+    CMCFGwes *mGwes;\r
+    CMCFUtils *mUtils;\r
+};\r
+\r
+}\r
+\r
+//MCF_END_DECLS\r
+\r
+#endif //__MCF_UIBUILDER_H__\r
diff --git a/mcf/include/mcfutils.h b/mcf/include/mcfutils.h
new file mode 100755 (executable)
index 0000000..3713d9b
--- /dev/null
@@ -0,0 +1,158 @@
+/*
+ * Copyright 2012  Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.tizenopensource.org/license
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+\r
+#include <stdio.h>\r
+#include <stdlib.h>\r
+#include <string.h>\r
+\r
+#include <map>\r
+\r
+#include "mcftypes.h"\r
+#include "mcfconfig.h"\r
+#include "mcfstructs.h"\r
+\r
+#ifndef __MCF_UTILS_H__\r
+#define __MCF_UTILS_H__\r
+\r
+#ifdef __cplusplus\r
+//MCF_BEGIN_DECLS\r
+#endif\r
+\r
+#ifndef _POSIX_PATH_MAX\r
+#define _POSIX_PATH_MAX 255\r
+#endif\r
+\r
+namespace mcf\r
+{\r
+\r
+/**\r
+ * @brief The base class to work as a soft-based keyboard\r
+ *\r
+ * This class implements all functions for working as a soft-based keyboard\r
+ * In side of ISE developer, they can modify it by their requirements.\r
+ */\r
+class CMCFUtilsImpl\r
+{\r
+public :\r
+    virtual mcfboolean get_screen_resolution(mcfint *x, mcfint *y) = 0;\r
+\r
+    virtual mcfint log(const mcfchar *fmt, ...) = 0;\r
+};\r
+\r
+class CMCFUtilsImplLinux : public CMCFUtilsImpl\r
+{\r
+public :\r
+    mcfboolean get_screen_resolution(mcfint *x, mcfint *y);\r
+\r
+    mcfint log(const mcfchar *fmt, ...);\r
+};\r
+\r
+class CMCFUtilsImplWin32 : public CMCFUtilsImpl\r
+{\r
+public :\r
+    mcfboolean get_screen_resolution(mcfint *x, mcfint *y);\r
+\r
+    mcfint log(const mcfchar *fmt, ...);\r
+};\r
+\r
+class _CMCFUtils\r
+{\r
+public :\r
+    _CMCFUtils() {\r
+        pImp_ = 0;\r
+    }\r
+    virtual mcfboolean get_screen_resolution(mcfint *x, mcfint *y) = 0;\r
+\r
+protected :\r
+    CMCFUtilsImpl* GetCMCFUtilsImpl() {\r
+        if (pImp_ == 0) {\r
+#ifdef  __WIN32__\r
+            pImp_ = new CMCFUtilsImplWin32;\r
+#else\r
+            pImp_ = new CMCFUtilsImplLinux;\r
+#endif\r
+        }\r
+        return pImp_;\r
+    }\r
+\r
+private :\r
+    CMCFUtilsImpl* pImp_;\r
+};\r
+\r
+class CMCFUtils : public _CMCFUtils\r
+{\r
+private:\r
+    static CMCFUtils* sInstance; /* For singleton */\r
+    CMCFUtils();\r
+public :\r
+    ~CMCFUtils();\r
+\r
+    static CMCFUtils* get_instance();\r
+\r
+    void init();\r
+\r
+    void scale_x(mcf16 *x);\r
+    void scale_y(mcf16 *y);\r
+    mcf16 get_scale_x(mcf16 x);\r
+    mcf16 get_scale_y(mcf16 y);\r
+    mcffloat get_smallest_scale_rate();\r
+    mcffloat get_scale_rate_x();\r
+    mcffloat get_scale_rate_y();\r
+\r
+    mcfchar* get_str_dup(const mcfchar* str);\r
+\r
+    mcfboolean get_screen_resolution(mcfint *x, mcfint *y) {\r
+        return GetCMCFUtilsImpl()->get_screen_resolution(x, y);\r
+    }\r
+\r
+    mcfboolean sleep(mcfulong msc);\r
+\r
+    mcfchar* get_composed_path(mcfchar* buf, int bufLength, const mcfchar* path);\r
+    const McfNinePatchInfo* get_nine_patch_info(const mcfchar *imgPath);\r
+\r
+    mcfboolean get_autopopup_window_variables(mcfchar * const autopopupKeys[MAX_SIZE_OF_AUTOPOPUP_STRING], mcfbyte *numKeys,\r
+                                                     mcfbyte *numColumns, mcfbyte *numRows, mcfint *width, mcfint *height);\r
+\r
+    mcf16 get_unique_id();\r
+\r
+    mcfboolean is_rect_overlap(McfRectangle rect1, McfRectangle rect2);\r
+    mcffloat get_distance(mcfint x1, mcfint y1, mcfint x2, mcfint y2);\r
+    mcffloat get_distance(McfPoint pt1, McfPoint pt2);\r
+\r
+    mcffloat get_approximate_distance(mcfint x1, mcfint y1, mcfint x2, mcfint y2);\r
+    mcffloat get_approximate_distance(McfPoint pt1, McfPoint pt2);\r
+\r
+    mcfint log(const mcfchar *fmt, ...);\r
+private :\r
+    mcffloat mXScnRate;\r
+    mcffloat mYScnRate;\r
+\r
+    mcfint mScnResolutionX;\r
+    mcfint mScnResolutionY;\r
+\r
+    std::map<mcfchar*, McfNinePatchInfo> mNinePatchInfoMap;\r
+};\r
+\r
+\r
+} /* End of mcf namespace */\r
+\r
+#ifdef __cplusplus\r
+//MCF_END_DECLS\r
+#endif\r
+\r
+#endif //__MCF_UTILS_H__\r
diff --git a/mcf/include/mcfversion.h b/mcf/include/mcfversion.h
new file mode 100755 (executable)
index 0000000..ad48b1d
--- /dev/null
@@ -0,0 +1,56 @@
+/*
+ * Copyright 2012  Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.tizenopensource.org/license
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+\r
+#ifndef __MCF_VERSION_H__\r
+#define __MCF_VERSION_H__\r
+\r
+#define MCF_VERSION "111209-1"\r
+\r
+#endif //__MCF_VERSION_H\r
+\r
+/*\r
+Version History\r
+    100810-1\r
+        - Started recording version information\r
+    101208-1\r
+        - Added Shift Lock state to MCFShiftState and implemented drag decoration feature\r
+    101210-1\r
+        - Fixed Memory Leak regarding evas_textblock_style_free()\r
+    101215-1\r
+        - Added external interfaces for en/disabling magnifier, sound, vibration\r
+        - Added external interfaces for setting longkey timeout / longkey cancel distance\r
+        - Added EFL Backend implementations for dim windows\r
+    101216-1\r
+        - Fixed the bug that fast magnifier window does not work properly in landscape mode\r
+        - Removed cache flush codes except in hide case\r
+        - Disable longkey timer if dragging is recognized on direction button\r
+    110112-1\r
+        - Added experimental preedit zoom window feature (Not official)\r
+    110122-1\r
+        - Applied MCF_AUTO_DETECT_PORTRAIT_LANDSCAPE feature to mcf_input_mode_popup_configure and mcf_modifier_decoration\r
+    110201-1\r
+        - Fixed the bug that magnifier window does not get closed when opening autopopup window\r
+    110208-1\r
+        - Changed not to call ecore_x_window_geometry_get and ecore_x_window_size_get too often\r
+    110217-1\r
+        - Implemented APIs for setting magnifier duration\r
+    110518-1\r
+        - Implemented SubLayout feature\r
+       111209-1\r
+        - MCF Cleanup and SLP coding guidelines applied\r
+*/\r
diff --git a/mcf/include/mcfwindows.h b/mcf/include/mcfwindows.h
new file mode 100755 (executable)
index 0000000..72da8da
--- /dev/null
@@ -0,0 +1,187 @@
+/*
+ * Copyright 2012  Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.tizenopensource.org/license
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <Evas.h>
+#include "mcftypes.h"
+#include "mcfconfig.h"
+
+#ifndef __MCF_WINDOWS_H__
+#define __MCF_WINDOWS_H__
+
+#ifdef __cplusplus
+//MCF_BEGIN_DECLS
+#endif
+
+namespace mcf
+{
+#define MAX_POPUP_WINDOW 1
+#define MAX_ZORDER_NUM ( MAX_POPUP_WINDOW + 1 ) /* Popup + Base */
+
+#define MCF_WINDOW_Z_TOP 0
+
+/**@brief  window context structure */
+typedef struct _McfWindowContext {
+    mcfboolean isVirtual;
+    mcfwindow window;
+    mcfshort layout;
+    MCFPopupType popuptype;
+    mcfboolean hidden;
+
+    mcfwindow parentWnd;
+    mcfint parentKey;
+
+    mcfint x, y, width, height;
+    mcfint imgOffsetx, imgOffsety;
+
+    mcfint timeout;
+
+    void* etcInfoPtr;
+} McfWindowContext;
+
+
+/**@brief  message box type definition */
+typedef enum _MCFMsgBoxType {
+    MCF_MSG_BOX_TYPE_INFO       = 0, /**< for information */
+    MCF_MSG_BOX_TYPE_ERROR, /**< for error */
+    MCF_MSG_BOX_TYPE_WARNING, /**< for warning */
+    MAX_MSG_BOX_TYPE/* maximum number of button state */
+}MCFMsgBoxType;
+
+/**
+ * @brief The base class to work as a soft-based keyboard
+ *
+ * This class implements all functions for working as a soft-based keyboard
+ * In side of ISE developer, they can modify it by their requirements.
+ */
+class CMCFWindowsImpl
+{
+public :
+    virtual mcfwindow create_base_window(const mcfwindow parentWnd, McfWindowContext *winCtx,
+                                            const mcf16 width, const mcf16 height) = 0;
+    virtual mcfwindow create_window(const mcfwindow parentWnd, McfWindowContext *winCtx,
+                                       const mcf16 width, const mcf16 height) = 0;
+    virtual mcfwindow create_context_popup_window(const mcfwindow parentWnd) = 0;
+    virtual Evas_Object* get_context_popup_window() = 0;
+    virtual void destroy_context_popup_window() = 0;
+    virtual mcfwindow create_dim_window(const mcfwindow parentWnd, McfWindowContext *winCtx,
+                                           const mcf16 width, const mcf16 height) = 0;
+    virtual bool destroy_window(mcfwindow window) = 0;
+    virtual void set_parent(const mcfwindow parentWindow, const mcfwindow window) = 0;
+    virtual void show_window(const mcfwindow window, mcfboolean queue) = 0;
+    virtual void hide_window(const mcfwindow window,  const mcfboolean fForce = FALSE) = 0;
+    virtual void move_window(const mcfwindow window, const mcf16 x, const mcf16 y) = 0;
+    virtual void move_resize_window(const mcfwindow window, const mcf16 x, const mcf16 y,
+                                       const mcf16 width, const mcf16 height) = 0;
+    virtual void resize_window(const mcfwindow window, const mcf16 width, const mcf16 height) = 0;
+    virtual void update_window(const mcfwindow window, const mcf16 x = 0, const mcf16 y = 0,
+                                  const mcf16 width = 0, const mcf16 height = 0) = 0;
+    virtual void show_message_box(const mcfwindow parentWnd, const mcf8 msgType, mcfchar* title, mcfchar* msg) = 0;
+    virtual mcfboolean get_window_rect(const mcfwindow window, McfRectangle *rect) = 0;
+
+    virtual void set_keep_above(const mcfwindow window, const mcfboolean keepabove) = 0;
+};
+
+class CMCFWindows
+{
+private:
+    static CMCFWindows* sInstance; /* For singleton */
+    CMCFWindows();
+public :
+    ~CMCFWindows();
+
+    static CMCFWindows* get_instance();
+
+    mcfwindow open_popup(const mcfwindow parentWnd, const mcfint parentKey, const mcf16 x,
+                            const mcf16 y, const mcf16 width, const mcf16 height, mcfshort layout,
+                            MCFPopupType popuptype, mcfboolean isVirtual, mcfboolean useDimWindow,
+                            mcfint imgOffsetx = 0, mcfint imgOffsety = 0, mcfint timeout = 0);
+    mcfwindow open_context_popup(const mcfwindow parentWnd);
+    void destroy_context_popup();
+    Evas_Object* get_context_popup();
+    bool close_popup(mcfwindow window);
+    bool close_all_popups(mcfwindow skipwindow = MCFWINDOW_INVALID);
+
+    mcfwindow create_base_window(const mcfwindow parentWnd, const mcf16 width, const mcf16 height);
+
+    void show_window(const mcfwindow window, mcfboolean queue = FALSE);
+    void hide_window(const mcfwindow window,  const mcfboolean fForce = FALSE);
+    void set_parent(const mcfwindow parentWindow, const mcfwindow window);
+    void set_keep_above(const mcfwindow window, const mcfboolean keepabove);
+
+    void move_window(const mcfwindow window, const mcf16 x, const mcf16 y);
+    void resize_window(const mcfwindow window, const mcf16 width, const mcf16 height);
+    void move_resize_window(const mcfwindow window, const mcf16 x, const mcf16 y,
+                               const mcf16 width, const mcf16 height);
+    void update_window(const mcfwindow window, const mcf16 x = 0, const mcf16 y = 0,
+                          const mcf16 width = 0, const mcf16 height = 0);
+    void show_message_box(const mcfwindow parentWnd, const mcf8 msgType, mcfchar* title, mcfchar* msg) {
+        get_mcf_windows_impl()->show_message_box(parentWnd, msgType, title, msg);
+    }
+    mcfboolean get_window_rect(const mcfwindow window, McfRectangle *rect);
+    mcfwindow get_base_window();
+    mcfboolean is_base_window(mcfwindow window);
+    mcfwindow find_by_etcinfo(void* etcInfo);
+    mcf8 find_popup_window_index(mcfwindow window);
+    McfWindowContext* get_window_context(mcfwindow window, mcfboolean fGetPos = FALSE);
+    void set_window_context(mcfwindow window, McfWindowContext* context);
+
+    mcfwindow get_nth_window_in_Z_order_list(mcfbyte index);
+    mcfwindow get_nth_popup_window(mcfbyte index);
+    mcfbyte get_Z_order(mcfwindow window);
+
+    mcfwindow create_dim_window(const mcfwindow parentWnd, McfWindowContext *winCtx,
+                                   const mcf16 width, const mcf16 height);
+    mcfwindow get_dim_window();
+
+    void set_update_pending(mcfboolean pend, mcfboolean autoUpdate);
+    mcfboolean get_update_pending();
+
+protected :
+    CMCFWindowsImpl* get_mcf_windows_impl();
+
+    mcfwindow create_window(const mcfwindow parentWnd, const mcfint parentKey, const mcf16 x,
+                               const mcf16 y, const mcf16 width, const mcf16 height, mcfshort layout,
+                               MCFPopupType popuptype, mcfboolean isVirtual, mcfint imgOffsetx = 0,
+                               mcfint imgOffsety = 0, mcfint timeout = 0);
+    bool destroy_window(mcfwindow window);
+
+    void push_window_in_Z_order_list(mcfwindow window);
+    void pop_window_in_Z_order_list(mcfwindow window);
+
+private :
+    CMCFWindowsImpl* pImp_;
+    McfWindowContext mBaseWinCtx;
+    McfWindowContext mPopupWinCtx[MAX_POPUP_WINDOW];
+
+    McfWindowContext mDimWinCtx;
+    mcfboolean mPendingUpdate;
+
+    mcfwindow mZOrderList[MAX_ZORDER_NUM];
+};
+
+
+} /* End of mcf namespace */
+
+#ifdef __cplusplus
+//MCF_END_DECLS
+#endif
+
+#endif //__MCF_WINDOWS_H__
diff --git a/mcf/mcfactionstate.cpp b/mcf/mcfactionstate.cpp
new file mode 100755 (executable)
index 0000000..ad98b86
--- /dev/null
@@ -0,0 +1,60 @@
+/*
+ * Copyright 2012  Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.tizenopensource.org/license
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+\r
+#include <memory.h>\r
+#include "mcfactionstate.h"\r
+#include "mcfdebug.h"\r
+\r
+using namespace mcf;\r
+\r
+CMCFActionState* CMCFActionState::sInstance = NULL; /* For singleton */\r
+\r
+CMCFActionState::CMCFActionState()\r
+{\r
+    MCF_DEBUG();\r
+\r
+    reset();\r
+}\r
+\r
+CMCFActionState::~CMCFActionState()\r
+{\r
+    MCF_DEBUG();\r
+}\r
+\r
+CMCFActionState*\r
+CMCFActionState::get_instance()\r
+{\r
+    if (!sInstance) {\r
+        sInstance = new CMCFActionState();\r
+    }\r
+    return (CMCFActionState*)sInstance;\r
+}\r
+\r
+\r
+void\r
+CMCFActionState::reset()\r
+{\r
+    mCurActionState = ACTION_STATE_BASE_INIT;\r
+    memset(mActionBuf, 0x00, sizeof(mActionBuf));\r
+}\r
+\r
+void\r
+CMCFActionState::clear_action_buf()\r
+{\r
+\r
+}\r
diff --git a/mcf/mcfcontext.cpp b/mcf/mcfcontext.cpp
new file mode 100755 (executable)
index 0000000..f30b199
--- /dev/null
@@ -0,0 +1,570 @@
+/*
+ * Copyright 2012  Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.tizenopensource.org/license
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "mcfcontext.h"
+#include "mcfdebug.h"
+#include "mcfwindows.h"
+#include "mcfutils.h"
+#include "mcfresourcecache.h"
+#include <algorithm>
+
+using namespace mcf;
+
+CMCFContext* CMCFContext::sInstance = NULL; /* For singleton */
+
+CMCFContext::CMCFContext()
+{
+    MCF_DEBUG();
+
+    reset();
+}
+
+CMCFContext::~CMCFContext()
+{
+    MCF_DEBUG();
+}
+
+CMCFContext*
+CMCFContext::get_instance()
+{
+    if (!sInstance) {
+        sInstance = new CMCFContext();
+    }
+    return (CMCFContext*)sInstance;
+}
+
+void
+CMCFContext::reset()
+{
+    MCF_DEBUG();
+
+    mDisplay = static_cast<MCFDisplay>(0);
+    mInputMode = 0;
+
+    mShiftState = MCF_SHIFT_STATE_OFF;
+    mPrevDisplay = MCFDISPLAY_PORTRAIT;
+    mPrevInputMode = NOT_USED;
+
+    mMultiTouchContext.clear();
+    mLastTouchDeviceId = MCFTOUCHDEVICE_INVALID;
+
+    mCurSubLayoutID = SUBLAYOUTID_DEFAULT;
+}
+
+mcfshort
+CMCFContext::get_popup_layout( mcfwindow window ) const
+{
+    MCF_DEBUG();
+
+    mcfshort ret = NOT_USED;
+    CMCFWindows *windows = CMCFWindows::get_instance();
+    McfWindowContext *ctx = windows->get_window_context(window, FALSE);
+
+    if (ctx) {
+        ret = ctx->layout;
+    }
+
+    return ret;
+}
+
+void
+CMCFContext::set_popup_layout( mcfwindow window, mcfshort val )
+{
+    MCF_DEBUG();
+
+    CMCFWindows *windows = CMCFWindows::get_instance();
+    McfWindowContext *ctx = windows->get_window_context(window, FALSE);
+
+    if (ctx) {
+        ctx->layout = val;
+    }
+}
+
+void
+CMCFContext::set_base_layout( mcfshort val )
+{
+    MCF_DEBUG();
+    CMCFWindows *windows = CMCFWindows::get_instance();
+    McfWindowContext *ctx = windows->get_window_context(windows->get_base_window(), FALSE);
+    if (ctx) {
+        ctx->layout = val;
+    }
+}
+
+mcfshort
+CMCFContext::get_base_layout() const
+{
+    MCF_DEBUG();
+
+    mcfshort ret = NOT_USED;
+    CMCFWindows *windows = CMCFWindows::get_instance();
+    McfWindowContext *ctx = windows->get_window_context(windows->get_base_window(), FALSE);
+    if (ctx) {
+        ret = ctx->layout;
+    }
+
+    return ret;
+}
+
+mcf16
+CMCFContext::get_cur_pressed_event_id(mcftouchdevice touchid)
+{
+    mcf16 ret = NOT_USED;
+    MultiTouchContext *ctx = find_multi_touch_context(touchid);
+    if(ctx) {
+        ret = ctx->mEventUniqueId;
+    }
+    return ret;
+}
+
+void
+CMCFContext::set_cur_pressed_event_id(mcftouchdevice touchid, mcf16 id)
+{
+    MultiTouchContext *ctx = find_multi_touch_context(touchid);
+    if(ctx) {
+        ctx->mEventUniqueId = id;
+    }
+}
+
+mcf8
+CMCFContext::get_cur_pressed_key(mcftouchdevice touchid)
+{
+    mcf8 ret = NOT_USED;
+    MultiTouchContext *ctx = find_multi_touch_context(touchid);
+    if(ctx) {
+        ret = ctx->mCurPressedKey;
+    }
+    return ret;
+}
+
+void
+CMCFContext::set_cur_pressed_key(mcftouchdevice touchid, mcf8 val)
+{
+    MultiTouchContext *ctx = find_multi_touch_context(touchid);
+    if(ctx) {
+        ctx->mCurPressedKey = val;
+    }
+}
+
+mcfwindow
+CMCFContext::get_cur_pressed_window(mcftouchdevice touchid)
+{
+    mcfwindow ret = MCFWINDOW_INVALID;
+    MultiTouchContext *ctx = find_multi_touch_context(touchid);
+    if(ctx) {
+        ret = ctx->mCurPressedWindow;
+    }
+    return ret;
+}
+
+void
+CMCFContext::set_cur_pressed_window(mcftouchdevice touchid, mcfwindow val)
+{
+    MultiTouchContext *ctx = find_multi_touch_context(touchid);
+    if(ctx) {
+        ctx->mCurPressedWindow = val;
+    }
+}
+
+McfPoint
+CMCFContext::get_cur_pressed_point(mcftouchdevice touchid)
+{
+    McfPoint ret = {0, 0};
+    MultiTouchContext *ctx = find_multi_touch_context(touchid);
+    if(ctx) {
+        ret = ctx->mCurPressedPoint;
+    }
+    return ret;
+}
+
+void
+CMCFContext::set_cur_pressed_point(mcftouchdevice touchid, mcfint x, mcfint y)
+{
+    MultiTouchContext *ctx = find_multi_touch_context(touchid);
+    if(ctx) {
+        ctx->mCurPressedPoint.x = x;
+        ctx->mCurPressedPoint.y = y;
+        set_farthest_move_point(touchid, x, y); // reset farthest move point
+    }
+}
+
+McfPoint
+CMCFContext::get_cur_move_point(mcftouchdevice touchid)
+{
+    McfPoint ret = {0, 0};
+    MultiTouchContext *ctx = find_multi_touch_context(touchid);
+    if(ctx) {
+        ret = ctx->mCurMovePoint;
+    }
+    return ret;
+}
+
+void
+CMCFContext::set_cur_move_point(mcftouchdevice touchid, mcfint x, mcfint y)
+{
+    MultiTouchContext *ctx = find_multi_touch_context(touchid);
+    if(ctx) {
+        ctx->mCurMovePoint.x = x;
+        ctx->mCurMovePoint.y = y;
+    }
+}
+
+mcfwindow
+CMCFContext::get_cur_move_window(mcftouchdevice touchid)
+{
+    mcfwindow ret = MCFWINDOW_INVALID;
+    MultiTouchContext *ctx = find_multi_touch_context(touchid);
+    if(ctx) {
+        ret = ctx->mCurMoveWindow;
+    }
+    return ret;
+}
+
+
+void
+CMCFContext::set_cur_move_window(mcftouchdevice touchid, mcfwindow window)
+{
+    MultiTouchContext *ctx = find_multi_touch_context(touchid);
+    if(ctx) {
+        ctx->mCurMoveWindow = window;
+    }
+}
+
+struct timeval
+CMCFContext::get_cur_pressed_time(mcftouchdevice touchid)
+{
+    struct timeval ret = {0};
+    MultiTouchContext *ctx = find_multi_touch_context(touchid);
+    if(ctx) {
+        ret = ctx->mCurPressedTime;
+    }
+    return ret;
+}
+
+void
+CMCFContext::set_cur_pressed_time(mcftouchdevice touchid)
+{
+    MultiTouchContext *ctx = find_multi_touch_context(touchid);
+    if(ctx) {
+        gettimeofday(&(ctx->mCurPressedTime), NULL);
+    }
+}
+
+McfPoint
+CMCFContext::get_farthest_move_point(mcftouchdevice touchid)
+{
+    McfPoint ret = {0, 0};
+    MultiTouchContext *ctx = find_multi_touch_context(touchid);
+    if(ctx) {
+        ret = ctx->mFarthestMovePoint;
+    }
+    return ret;
+}
+
+void
+CMCFContext::set_farthest_move_point(mcftouchdevice touchid, mcfint x, mcfint y)
+{
+    MultiTouchContext *ctx = find_multi_touch_context(touchid);
+    if(ctx) {
+        CMCFUtils *utils = CMCFUtils::get_instance();
+        mcfint deltax = ctx->mCurPressedPoint.x - x;
+        mcfint deltay = ctx->mCurPressedPoint.y - y;
+        ctx->mFarthestMoveDist = utils->get_approximate_distance(x, y, ctx->mCurPressedPoint.x, ctx->mCurPressedPoint.y);
+
+        ctx->mFarthestMovePoint.x = x;
+        ctx->mFarthestMovePoint.y = y;
+    }
+}
+
+mcfint
+CMCFContext::get_farthest_move_dist(mcftouchdevice touchid)
+{
+    mcfint ret = 0;
+    MultiTouchContext *ctx = find_multi_touch_context(touchid);
+    if(ctx) {
+        ret = ctx->mFarthestMoveDist;
+    }
+    return ret;
+}
+
+mcf8
+CMCFContext::get_prev_pressed_key(mcftouchdevice touchid)
+{
+    mcf8 ret = NOT_USED;
+    MultiTouchContext *ctx = find_multi_touch_context(touchid);
+    if(ctx) {
+        ret = ctx->mPrevPressedKey;
+    }
+    return ret;
+}
+
+void
+CMCFContext::set_prev_pressed_key(mcftouchdevice touchid, mcf8 val)
+{
+    MultiTouchContext *ctx = find_multi_touch_context(touchid);
+    if(ctx) {
+        ctx->mPrevPressedKey = val;
+    }
+}
+
+mcfwindow
+CMCFContext::get_prev_pressed_window(mcftouchdevice touchid)
+{
+    mcfwindow ret = MCFWINDOW_INVALID;
+    MultiTouchContext *ctx = find_multi_touch_context(touchid);
+    if(ctx) {
+        ret = ctx->mPrevPressedWindow;
+    }
+    return ret;
+}
+
+void
+CMCFContext::set_prev_pressed_window(mcftouchdevice touchid, mcfwindow val)
+{
+    MultiTouchContext *ctx = find_multi_touch_context(touchid);
+    if(ctx) {
+        ctx->mPrevPressedWindow = val;
+    }
+}
+
+MCFDragState
+CMCFContext::get_cur_drag_state(mcftouchdevice touchid)
+{
+    MCFDragState ret = MCF_DRAG_STATE_NONE;
+    MultiTouchContext *ctx = find_multi_touch_context(touchid);
+    if(ctx) {
+        ret = ctx->mCurDragState;
+    }
+    return ret;
+}
+
+void
+CMCFContext::set_cur_drag_state(mcftouchdevice touchid, MCFDragState state)
+{
+    MultiTouchContext *ctx = find_multi_touch_context(touchid);
+    if(ctx) {
+        ctx->mCurDragState = state;
+    }
+}
+
+MCFDragState
+CMCFContext::get_prev_drag_state(mcftouchdevice touchid)
+{
+    MCFDragState ret = MCF_DRAG_STATE_NONE;
+    MultiTouchContext *ctx = find_multi_touch_context(touchid);
+    if(ctx) {
+        ret = ctx->mPrevDragState;
+    }
+    return ret;
+}
+
+void
+CMCFContext::set_prev_drag_state(mcftouchdevice touchid, MCFDragState state)
+{
+    MultiTouchContext *ctx = find_multi_touch_context(touchid);
+    if(ctx) {
+        ctx->mPrevDragState = state;
+    }
+}
+
+MCFKeyModifier
+CMCFContext::get_cur_key_modifier(mcftouchdevice touchid)
+{
+    MCFKeyModifier ret = KEY_MODIFIER_NONE;
+    MultiTouchContext *ctx = find_multi_touch_context(touchid);
+    if(ctx) {
+        ret = ctx->mCurKeyModifier;
+    }
+    return ret;
+}
+
+void
+CMCFContext::set_cur_key_modifier(mcftouchdevice touchid, MCFKeyModifier modifier)
+{
+    MultiTouchContext *ctx = find_multi_touch_context(touchid);
+    if(ctx) {
+        ctx->mCurKeyModifier = modifier;
+    }
+}
+
+void
+CMCFContext::create_multi_touch_context(mcftouchdevice touchid, mcfboolean isSubEvent)
+{
+    MultiTouchContext newctx;
+    memset(&newctx, 0x00, sizeof(MultiTouchContext));
+    newctx.mUsed = TRUE;
+    newctx.mCurPressedKey = NOT_USED;
+    newctx.mCurPressedWindow = MCFWINDOW_INVALID;
+    newctx.mEventUniqueId = 0;
+    newctx.mPrevPressedKey = NOT_USED;
+    newctx.mPrevPressedWindow = MCFWINDOW_INVALID;
+    newctx.mCurPressedPoint.x = newctx.mCurPressedPoint.y = 0;
+    newctx.mCurPressedTime.tv_sec = newctx.mCurPressedTime.tv_usec = 0;
+    newctx.mCurDragState = MCF_DRAG_STATE_NONE;
+    newctx.mIsSubEvent = isSubEvent;
+    mMultiTouchContext[touchid] = newctx;
+
+    mMultiTouchSeq.insert(mMultiTouchSeq.end(), touchid);
+
+    CMCFUtils *utils = CMCFUtils::get_instance();
+    if(utils) {
+        for(std::list<mcftouchdevice>::iterator iter = mMultiTouchSeq.begin();iter != mMultiTouchSeq.end();std::advance(iter, 1)) {
+            utils->log("LIST : %d\n", *iter);
+        }
+        utils->log("\n");
+    }
+}
+
+void
+CMCFContext::destroy_multi_touch_context(mcftouchdevice touchid)
+{
+    MultiTouchContext *ctx = find_multi_touch_context(touchid);
+    if(ctx) {
+        memset(ctx, 0x00, sizeof(MultiTouchContext));
+        mMultiTouchContext.erase(touchid);
+    }
+
+    mcfboolean bFound = TRUE;
+    std::list<mcftouchdevice>::iterator iter;
+    do {
+        iter = std::find(mMultiTouchSeq.begin(), mMultiTouchSeq.end(), touchid);
+        if(iter != mMultiTouchSeq.end()) {
+            mMultiTouchSeq.erase(iter);
+        } else {
+            bFound = FALSE;
+        }
+    } while(bFound);
+
+       CMCFUtils *utils = CMCFUtils::get_instance();
+       if(utils) {
+               for(std::list<mcftouchdevice>::iterator iter = mMultiTouchSeq.begin();iter != mMultiTouchSeq.end();std::advance(iter, 1)) {
+                       utils->log("LIST : %d\n", *iter);
+               }
+               utils->log("\n");
+       }
+}
+
+MultiTouchContext*
+CMCFContext::find_multi_touch_context(mcftouchdevice touchid)
+{
+    MultiTouchContext* ret = NULL;
+    std::map<mcftouchdevice, MultiTouchContext>::iterator iter = mMultiTouchContext.find(touchid);
+    if(iter != mMultiTouchContext.end()) {
+        ret = &(iter->second);
+    }
+
+    return ret;
+}
+
+mcfint
+CMCFContext::get_multi_touch_context_num()
+{
+    return mMultiTouchSeq.size();
+}
+
+mcfboolean
+CMCFContext::get_multi_touch_event(mcfint seqorder, McfKeyEventDesc *desc)
+{
+    mcfboolean ret = FALSE;
+    mcfint iSeqIndex = 0;
+
+    CMCFResourceCache *cache = CMCFResourceCache::get_instance();
+
+    for(std::list<mcftouchdevice>::iterator list_iter = mMultiTouchSeq.begin();
+        !ret && list_iter != mMultiTouchSeq.end();std::advance(list_iter, 1)) {
+            if(iSeqIndex == seqorder) {
+                MultiTouchContext *pContext = find_multi_touch_context(*list_iter);
+                if(pContext) {
+                    const McfLayoutKeyConfigure *configure =
+                        cache->get_cur_layout_key_configure(pContext->mCurPressedWindow, pContext->mCurPressedKey);
+                    const McfLayoutKeyProperties *properties=
+                        cache->get_cur_layout_key_properties(pContext->mCurPressedWindow, pContext->mCurPressedKey);
+
+                    if(properties && configure) {
+                        MCFShiftState shiftidx = get_shift_state();
+                        if(shiftidx < 0 || shiftidx >= MCF_SHIFT_STATE_MAX) shiftidx = MCF_SHIFT_STATE_OFF;
+                        desc->keyEvent = properties->keyEvent[shiftidx][0];
+                        desc->keyValue = properties->keyValue[shiftidx][0];
+                        desc->keyType = configure->keyType;
+                    } else {
+                        desc->keyEvent = 0;
+                        desc->keyValue = NULL;
+                        desc->keyType = KEY_TYPE_NONE;
+                    }
+                    desc->keyModifier = KEY_MODIFIER_NONE;
+
+                    desc->touchid = (*list_iter);
+                    desc->mousePressedPt = pContext->mCurPressedPoint;
+                    desc->mouseCurrentPt = pContext->mCurMovePoint;
+                    desc->mouseFarthestPt = pContext->mFarthestMovePoint;
+
+                    desc->touch_event_order = iSeqIndex;
+
+                    ret = TRUE;
+                }
+            }
+            iSeqIndex++;
+    }
+
+    return ret;
+}
+
+mcfint
+CMCFContext::get_multi_touch_event_order(mcftouchdevice touchid)
+{
+    mcfint ret = -1;
+    mcfint iSeqIndex = 0;
+
+    CMCFResourceCache *cache = CMCFResourceCache::get_instance();
+
+    for(std::list<mcftouchdevice>::iterator list_iter = mMultiTouchSeq.begin();
+        (ret == -1) && list_iter != mMultiTouchSeq.end();std::advance(list_iter, 1)) {
+            if(touchid == (*list_iter)) {
+                ret = iSeqIndex;
+            } else {
+                iSeqIndex++;
+            }
+    }
+
+    return ret;
+}
+
+mcfint CMCFContext::get_cur_sublayout_id()
+{
+    mcfint retid = SUBLAYOUTID_DEFAULT;
+    if(mcf_check_arrindex(mInputMode, MAX_INPUT_MODE) && mcf_check_arrindex(mCurSubLayoutID, SUBLAYOUTID_MAX)) {
+        if(mcf_sublayout_support_table[mInputMode][mCurSubLayoutID]) {
+            /* Return mCurSubLayoutID only if it is supported by current input mode */
+            retid = mCurSubLayoutID;
+        }
+    }
+    return retid;
+}
+
+mcfboolean CMCFContext::set_cur_sublayout_id(mcfint id)
+{
+    mcfboolean ret = FALSE;
+    if(mcf_check_arrindex(id, SUBLAYOUTID_MAX)) {
+        mCurSubLayoutID = id;
+    }
+    return ret;
+}
+
diff --git a/mcf/mcfcontroller.cpp b/mcf/mcfcontroller.cpp
new file mode 100755 (executable)
index 0000000..d32d6b3
--- /dev/null
@@ -0,0 +1,2791 @@
+/*
+ * Copyright 2012  Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.tizenopensource.org/license
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+
+#include <time.h>
+#include <math.h>
+#include <Elementary.h>
+#include "mcfcontroller.h"
+#include "mcfdebug.h"
+#include "mcfresourcecache.h"
+#include "mcfactionstate.h"
+#include "mcfuibuilder.h"
+#include "mcfkeydefines.h"
+#include "mcffeedback.h"
+#include "mcferroradjustment.h"
+#include "mcfimageproxy.h"
+#include "mcfcore.h"
+#include "../src/include/ise.h"
+
+MCFKeyModifier prevModifier;
+McfPoint zoomwinpos = {0,};
+const mcfint zoomwinrelposy=20;
+static mcfboolean isLongKey = false;
+
+using namespace mcf;
+
+CMCFController* CMCFController::sInstance; /* For singleton */
+
+extern CMCFCore *gCore;
+extern CMCFContext *gContext;
+extern SETTING_INFO _setup_info;
+
+CMCFController::CMCFController()
+{
+    MCF_DEBUG();
+
+    mEventCallback = NULL;
+    mLongkeyDuration = MCF_LONGKEY_DURATION;
+    mLongkeyCancelDist = MCF_LONGKEY_CANCEL_DIST;
+    mRepeatKeyDuration = MCF_REPEATKEY_DURATION;
+    mShortLongkeyDuration = MCF_SHORT_LONGKEY_DURATION;
+    mButtonDelayDuration = MCF_BUTTON_MIN_DURATION;
+    mRepeatKeySeq = 0;
+    mDebugMode = DEBUGMODE_DISABLED;
+    mDebugVariable = 0;
+    mInputEventsDisabled = FALSE;
+ }
+
+CMCFController::~CMCFController()
+{
+    MCF_DEBUG();
+}
+
+CMCFController*
+CMCFController::get_instance()
+{
+    if (!sInstance) {
+        sInstance = new CMCFController();
+    }
+    return (CMCFController*)sInstance;
+}
+
+void
+CMCFController::init()
+{
+    MCF_DEBUG();
+    CMCFResourceCache::get_instance();
+}
+
+#ifdef TEST_NEWBACKEND
+#include <Ecore_Evas.h>
+#include <Ecore.h>
+#include <vector>
+typedef enum {
+       EFLOBJECT_NONE,
+       EFLOBJECT_IMAGE,
+       EFLOBJECT_CLIPOBJECT,
+       EFLOBJECT_TEXTBLOCK,
+} EFLOBJECT_TYPE;
+
+       typedef struct {
+               EFLOBJECT_TYPE type;
+               McfRectangle position;
+               Evas_Object *obj;
+               char *etcInfo;
+               mcfboolean bExtracted;
+               void *data;
+       } EFLObject;
+#include <Ecore_Evas.h>
+#include <Ecore.h>
+       typedef struct {
+               mcfboolean used;
+
+               Evas_Object *image;
+               Evas_Object *clipper;
+
+               mcfwindow window;
+               mcfchar imgPath[_POSIX_PATH_MAX];
+               mcfint imgPathHash;
+               mcfint destX;
+               mcfint destY;
+               mcfint destWidth;
+               mcfint destHeight;
+               mcfint srcX;
+               mcfint srcY;
+               mcfint srcWidth;
+               mcfint srcHeight;
+               mcfboolean extractImg;
+       } ImageCache;
+
+       typedef struct {
+               mcfboolean used;
+
+               Evas_Object *text;
+
+               mcfwindow window;
+               mcf::McfFontInfo fontinfo;
+               McfColor color;
+               mcfchar str[_POSIX_PATH_MAX];;
+               mcfint strHash;
+               mcfint posx;
+               mcfint posy;
+               mcfint width;
+               mcfint height;
+               MCFLabelAlignment align;
+               mcfbyte paddingx;
+               mcfbyte paddingy;
+       } TextCache;
+
+extern std::vector<ImageCache> g_ImageCache;
+extern std::vector<TextCache> g_TextCache;
+#else
+#endif
+
+/**
+ * Sets the current input mode to the given mode
+ */
+mcfboolean
+CMCFController::process_input_mode_change(const mcfbyte mode, mcfboolean saveMultikeys /* = TRUE */)
+{
+    MCF_DEBUG();
+    mcf_assert_return_false(mode >= 0);
+    CMCFContext *context = CMCFContext::get_instance();
+    CMCFWindows *windows = CMCFWindows::get_instance();
+    CMCFResourceCache *cache = CMCFResourceCache::get_instance();
+
+    if (context && windows && cache) {
+        mcfint loop;
+        if (saveMultikeys) {
+            /* Save multikey indexes */
+            for (loop = 0;loop < MAX_KEY;loop++) {
+                McfLayoutKeyConfigure *pCurLayoutKeyConfigure = cache->get_cur_layout_key_configure(windows->get_base_window(), loop);
+                McfButtonContext *pCurButtonContext = cache->get_cur_button_context(windows->get_base_window(), loop);
+                if (pCurLayoutKeyConfigure && pCurButtonContext) {
+                    if (pCurLayoutKeyConfigure->buttonType == BUTTON_TYPE_ROTATION && pCurLayoutKeyConfigure->fValid == USED) {
+                        mcfint innerLoop;
+                        mcfint empty_index = -1;
+                        for (innerLoop = 0;innerLoop < MAX_MULTIKEY_BUFFER && empty_index == -1;innerLoop++) {
+                            if (mMultiKeyBuffer[innerLoop][0] == NOT_USED) {
+                                empty_index = innerLoop;
+                            }
+                        }
+                        if (empty_index != -1) {
+                            mMultiKeyBuffer[empty_index][0] = context->get_base_layout();
+                            mMultiKeyBuffer[empty_index][1] = loop;
+                            mMultiKeyBuffer[empty_index][2] = pCurButtonContext->multikeyIdx;
+                        }
+                    }
+                }
+            }
+        }
+        if (mode == context->get_input_mode()) { /* BtnContext does not get initialized if we don't call here */
+            cache->recompute_layout(windows->get_base_window());
+        }
+
+        if (mode == context->get_input_mode()) return FALSE;
+        context->set_input_mode(mode);
+        context->set_base_layout(mcf_input_mode_configure[mode].layoutId[context->get_display()]);
+
+        mcfwindow window = windows->get_base_window();
+        handle_engine_signal(MCF_SIG_INPMODE_CHANGE, window);
+
+#ifdef TEST_NEWBACKEND
+               McfWindowContext *winctx = windows->get_window_context(window, FALSE);
+               if (winctx) {
+                       if (winctx->etcInfoPtr) {
+
+                               Eina_List *list = (Eina_List*)(winctx->etcInfoPtr);
+                               Eina_List *iter = NULL;
+                               Eina_List *iter_next = NULL;
+                               void *data = NULL;
+                               int iIndex = 0;
+
+                               EINA_LIST_FOREACH_SAFE(list, iter, iter_next, data) {
+                                       if (data) {
+                                               EFLObject *obj = (EFLObject*)(data);
+                                               if(obj) {
+                                                       Evas_Object* eo = obj->obj;
+                                                       if(obj->bExtracted) {
+                                                               void *data = evas_object_image_data_get(eo, 1);
+                                                               if(data) {
+                                                                       free(data);
+                                                               }
+                                                       }
+
+                                                       mcfint loop;
+                                                       for(loop = 0;loop < g_ImageCache.size();loop++) {
+                                                               if(g_ImageCache[loop].image == obj->obj) {
+                                                                       g_ImageCache[loop].used = FALSE;
+                                                               }
+                                                       }
+                                                       for(loop = 0;loop < g_TextCache.size();loop++) {
+                                                               if(g_TextCache[loop].text == obj->obj) {
+                                                                       g_TextCache[loop].used = FALSE;
+                                                               }
+                                                       }
+
+                                               if(eo) {
+                                                       evas_object_del(eo);
+                                                       obj->obj = NULL;
+                                               }
+                                               delete obj;
+                                       }
+                                       list = eina_list_remove_list(list, iter);
+                               }
+                               iIndex++;
+                       }
+                       winctx->etcInfoPtr = list;
+                   }
+               }
+#endif
+
+        /* Restore multikey indexes */
+        mcfshort base_layout = context->get_base_layout();
+        for (loop = 0;loop < MAX_MULTIKEY_BUFFER;loop++) {
+            if (mMultiKeyBuffer[loop][0] == base_layout) {
+                mcfint keyidx = mMultiKeyBuffer[loop][1];
+                McfLayoutKeyConfigure *pCurLayoutKeyConfigure = cache->get_cur_layout_key_configure(windows->get_base_window(),
+                                                                                                           keyidx);
+                McfLayoutKeyProperties *pCurLayoutKeyProperties = cache->get_cur_layout_key_properties(windows->get_base_window(),
+                                                                                                              keyidx);
+                McfButtonContext *pCurButtonContext = cache->get_cur_button_context(windows->get_base_window(), keyidx);
+                if (pCurLayoutKeyConfigure && pCurButtonContext && pCurLayoutKeyProperties) {
+                    if (pCurLayoutKeyConfigure->buttonType == BUTTON_TYPE_ROTATION && pCurLayoutKeyConfigure->fValid == USED) {
+                        pCurButtonContext->multikeyIdx = mMultiKeyBuffer[loop][2];
+                        if (pCurButtonContext->multikeyIdx >= pCurLayoutKeyProperties->keyValueCnt) {
+                            pCurButtonContext->multikeyIdx = 0;
+                        }
+                    }
+                }
+            }
+        }
+    }
+
+    return TRUE;
+}
+
+void
+CMCFController::clear_multikey_buffer()
+{
+    for (int loop = 0;loop < MAX_MULTIKEY_BUFFER;loop++) {
+        mMultiKeyBuffer[loop][0] = NOT_USED;
+    }
+}
+
+/**
+ * Sets the current display mode to the given mode
+ */
+mcfboolean
+CMCFController::process_display_change()
+{
+    MCF_DEBUG();
+    CMCFContext *context = CMCFContext::get_instance();
+    CMCFWindows *windows = CMCFWindows::get_instance();
+
+    if (context && windows) {
+        mcf8 mode;
+            mode = MCFDISPLAY_PORTRAIT;
+
+        context->set_display(static_cast<MCFDisplay>(mode));
+        context->set_base_layout(mcf_input_mode_configure[context->get_input_mode()].layoutId[context->get_display()]);
+
+        mcfwindow window = windows->get_base_window();
+        handle_engine_signal(MCF_SIG_DISP_CHANGE, window);
+        windows->update_window(window);
+    }
+    return TRUE;
+}
+
+mcfboolean
+CMCFController::process_button_pressed_event(mcfwindow window, mcfint x, mcfint y, mcfbyte keyindex, mcftouchdevice touchid)
+{
+    MCF_DEBUG();
+    mcfboolean ret = FALSE;
+    mcfboolean redraw = FALSE;
+
+    CMCFContext *context = CMCFContext::get_instance();
+    CMCFResourceCache *cache = CMCFResourceCache::get_instance();
+    CMCFWindows *windows = CMCFWindows::get_instance();
+    CMCFEvents *events = CMCFEvents::get_instance();
+    CMCFUtils *utils = CMCFUtils::get_instance();
+    CMCFFeedback *feedback = CMCFFeedback::get_instance();
+
+    McfButtonContext *btncontext = NULL;
+    const McfLayoutKeyCoordination *coordination = NULL;
+    const McfLayoutKeyConfigure *configure = NULL;
+    const McfLayoutKeyProperties *properties = NULL;
+
+    if(context && cache) {
+        btncontext = cache->get_cur_button_context(window, keyindex);
+        coordination = cache->get_cur_layout_key_coordination(window, keyindex);
+        configure = cache->get_cur_layout_key_configure(window, keyindex);
+        properties = cache->get_cur_layout_key_properties(window, keyindex);
+    }
+
+    static mcfwindow prevwin = MCFWINDOW_INVALID;
+    static mcfbyte prevkey = NOT_USED;
+
+    if (context && cache && windows && events && utils && feedback && btncontext && coordination && configure && properties) {
+        /* If this button is pressed */
+        if (x >= coordination->x - coordination->addHitLeft &&
+            x < coordination->x + coordination->width + coordination->addHitRight &&
+            y >= coordination->y - coordination->addHitTop &&
+            y < coordination->y + coordination->height + coordination->addHitBottom &&
+            /* Process the event only if the this item's sublayout id is active one */
+            (coordination->subLayoutID == SUBLAYOUTID_NONE || coordination->subLayoutID == context->get_cur_sublayout_id())) {
+            /* If newly pressed key has type MULTI_TOUCH_TYPE_EXCLUSIVE, release all existing pressed events */
+            if(properties->multitouchType == MCF_MULTI_TOUCH_TYPE_EXCLUSIVE) {
+                for(mcfint loop = 0;loop < context->get_multi_touch_context_num();loop++) {
+                    McfKeyEventDesc desc;
+                    context->get_multi_touch_event(loop, &desc);
+                    if(desc.touchid != touchid) {
+                        mouse_release(context->get_cur_move_window(desc.touchid),
+                            context->get_cur_move_point(desc.touchid).x, context->get_cur_move_point(desc.touchid).y, desc.touchid);
+                    }
+                }
+            }
+
+            /* Make an unique ID for timer */
+            const mcf16 uniqId = utils->get_unique_id();
+
+            context->set_cur_pressed_event_id(touchid, uniqId);
+            context->set_cur_pressed_key(touchid, keyindex);
+            context->set_cur_pressed_window(touchid, window);
+
+            btncontext->state = BUTTON_STATE_PRESSED;
+
+            redraw = TRUE;
+            ret = TRUE;
+
+            /* for feedback */
+            feedback->button_pressed(window, keyindex);
+
+            /* Special routine for autopopup */
+            if (configure->popupType == POPUP_TYPE_AUTO_POPUP) {
+                events->create_timer(MCF_TIMER_AUTOPOPUP, mShortLongkeyDuration, uniqId);
+            } else {
+                /* for long key & repeat key */
+                events->create_timer(MCF_TIMER_LONGKEY, mLongkeyDuration, uniqId);
+            }
+
+            MCFShiftState shiftidx = context->get_shift_state();
+            if(shiftidx < 0 || shiftidx >= MCF_SHIFT_STATE_MAX) {
+               shiftidx = MCF_SHIFT_STATE_OFF;
+            }
+
+            McfKeyEventDesc keyEventDesc = {0};
+            keyEventDesc.keyValue = properties->keyValue[shiftidx][0];
+            keyEventDesc.keyEvent = properties->keyEvent[shiftidx][0];
+            keyEventDesc.keyType = configure->keyType;
+            keyEventDesc.keyModifier = KEY_MODIFIER_NONE;
+
+            McfPoint curpoint = {x, y};
+            keyEventDesc.touchid = touchid;
+            keyEventDesc.mousePressedPt = curpoint;
+            keyEventDesc.mouseCurrentPt = curpoint;
+            keyEventDesc.mouseFarthestPt = curpoint;
+
+            keyEventDesc.touch_event_order = context->get_multi_touch_event_order(touchid);
+
+            McfKeyEventDesc desc = {0};
+            desc.keyType = configure->keyType;
+            desc.keyValue = properties->keyValue[shiftidx][0];
+            desc.keyEvent = properties->keyEvent[shiftidx][0];
+            desc.keyModifier = KEY_MODIFIER_NONE;
+            prevModifier = KEY_MODIFIER_NONE;
+
+            /* Now process normal behaviours of each button type */
+            switch (configure->buttonType) {
+            case BUTTON_TYPE_NORMAL:
+            case BUTTON_TYPE_GRAB:
+            case BUTTON_TYPE_DIRECTION: {
+                /* Send click event right away if this button uses repeat key */
+                if (properties->useRepeatKey) {
+                    if (mEventCallback) {
+                        mEventCallback->on_event_key_clicked(keyEventDesc);
+                    }
+                }
+            }
+            break;
+            case BUTTON_TYPE_MULTITAP: {
+            }
+            break;
+            case BUTTON_TYPE_ROTATION: {
+            }
+            break;
+            case BUTTON_TYPE_DRAG: {
+                /* Drag buttons fires click event immediately when they are pressed */
+                if (mEventCallback) {
+                    mEventCallback->on_event_key_clicked(keyEventDesc);
+                }
+            }
+            break;
+            }
+
+
+            switch (configure->popupType) {
+            case POPUP_TYPE_BTN_PRESS_POPUP_DRAG: {
+                mcfbyte popupInputMode = configure->popupInputMode[MCF_DRAG_STATE_NONE];
+                MCFDisplay display = context->get_display();
+                if(mcf_check_arrindex(popupInputMode, MAX_INPUT_MODE_POPUP) &&
+                    mcf_check_arrindex(display, MCFDISPLAY_MAX)) {
+                    mcfshort popupLayoutId = mcf_input_mode_popup_configure[popupInputMode].layoutId[display];
+                    McfRectangle popupRect;
+                    McfRectangle baseWndRect;
+                    McfLayout *layout = NULL;
+                    if(mcf_check_arrindex(popupLayoutId, MAX_LAYOUT)) {
+                        layout = &mcf_layout[popupLayoutId];
+                    }
+                    if(layout) {
+                        windows->get_window_rect(windows->get_base_window(), &baseWndRect);
+                        popupRect.x = coordination->x + coordination->popXOffset + baseWndRect.x;
+                        popupRect.y = coordination->y + coordination->popYOffset + baseWndRect.y;
+                        popupRect.width = layout->width;
+                        popupRect.height= layout->height;
+                        windows->close_all_popups();
+                        windows->open_popup(window, keyindex,
+                                            popupRect.x,
+                                            popupRect.y,
+                                            popupRect.width,
+                                            popupRect.height,
+                                            popupLayoutId,
+                                            configure->popupType,
+                                            !(mcf_input_mode_popup_configure[popupInputMode].fUseWindow),
+                                            mcf_input_mode_popup_configure[popupInputMode].fUseDimWindow,
+                                            coordination->popImageX,
+                                            coordination->popImageY,
+                                            mcf_input_mode_popup_configure[popupInputMode].fTimeout
+                                           );
+                    }
+                }
+            }
+            break;
+            case POPUP_TYPE_BTN_RELEASE_POPUP:
+            case POPUP_TYPE_BTN_RELEASE_POPUP_ONCE:
+            case POPUP_TYPE_CONTEXT_POPUP:
+            case POPUP_TYPE_BTN_LONGPRESS_POPUP:
+            case POPUP_TYPE_BTN_LONGPRESS_POPUP_ONCE:
+            case POPUP_TYPE_AUTO_POPUP:
+            case POPUP_TYPE_NONE:
+                /* Nothing to do in here */
+                break;
+            }
+            prevwin = window;
+            prevkey = keyindex;
+        } else {
+            /* BUTTON_TYPE_MULTITAP type button should restore its multikey index when another button is clicked */
+            if (configure->buttonType & BUTTON_TYPE_MULTITAP) {
+                btncontext->multikeyIdx = 0;
+            }
+        }
+
+        /* If there is any need for redrawing */
+        if (redraw) {
+#ifdef DIRECTLY_DRAW_ON_EVENTS
+            CMCFUIBuilder *builder = CMCFUIBuilder::get_instance();
+            if (builder) {
+                builder->draw_button(window, NULL, keyindex, btncontext->state, TRUE);
+            }
+#else
+            CMCFWindows *windows = CMCFWindows::get_instance();
+            if (windows) {
+                windows->update_window(window, coordination->x, coordination->y, coordination->width, coordination->height);
+            }
+#endif
+        }
+    }
+
+    return ret;
+}
+
+mcfboolean
+CMCFController::process_button_long_pressed_event(mcfwindow window, mcfbyte keyindex, mcftouchdevice touchid)
+{
+    MCF_DEBUG();
+
+    mcfboolean ret = FALSE;
+
+    CMCFContext *context = CMCFContext::get_instance();
+    CMCFWindows *windows = CMCFWindows::get_instance();
+    CMCFActionState *state = CMCFActionState::get_instance();
+    CMCFResourceCache *cache = CMCFResourceCache::get_instance();
+
+    if(context && cache && windows && state) {
+        const McfLayoutKeyCoordination* coordination = cache->get_cur_layout_key_coordination(window, keyindex);
+        const McfLayoutKeyProperties *properties = cache->get_cur_layout_key_properties(window, keyindex);
+        const McfLayoutKeyConfigure *configure= cache->get_cur_layout_key_configure(window, keyindex);
+
+        /* Should return FALSE if this key does not have any longkey related property */
+        if (properties && configure && coordination) {
+            if(configure->popupType == POPUP_TYPE_BTN_LONGPRESS_POPUP ||
+               configure->popupType == POPUP_TYPE_BTN_LONGPRESS_POPUP_ONCE ) {
+                    McfRectangle popupRect;
+                    McfRectangle baseWndRect;
+                    windows->get_window_rect(windows->get_base_window(), &baseWndRect);
+                    popupRect.x = coordination->x + coordination->popXOffset + baseWndRect.x;
+                    popupRect.y = coordination->y + coordination->popYOffset + baseWndRect.y;
+                    mcfbyte popupInputMode = configure->popupInputMode[MCF_DRAG_STATE_NONE];
+                    MCFDisplay display = context->get_display();
+                    if(mcf_check_arrindex(popupInputMode, MAX_INPUT_MODE_POPUP) &&
+                       mcf_check_arrindex(display, MCFDISPLAY_MAX)) {
+                        McfLayout *layout = NULL;
+                        mcfshort popupLayoutId = mcf_input_mode_popup_configure[popupInputMode].layoutId[display];
+                        if(mcf_check_arrindex(popupLayoutId, MAX_LAYOUT)) {
+                            layout = &mcf_layout[popupLayoutId];
+                        }
+                        if(layout) {
+                            popupRect.width = layout->width;
+                            popupRect.height= layout->height;
+
+                            windows->open_popup(window,
+                                                   keyindex,
+                                                popupRect.x,
+                                                popupRect.y,
+                                                popupRect.width,
+                                                popupRect.height,
+                                                popupLayoutId,
+                                                configure->popupType,
+                                                !(mcf_input_mode_popup_configure[popupInputMode].fUseWindow),
+                                                mcf_input_mode_popup_configure[popupInputMode].fUseDimWindow,
+                                                coordination->popImageX,
+                                                coordination->popImageY,
+                                                mcf_input_mode_popup_configure[popupInputMode].fTimeout
+                                                );
+                        }
+                    }
+            } else if (properties->longKeyValue) {
+                if (strlen(properties->longKeyValue) > 0) {
+                    McfPoint ptMoving = context->get_cur_move_point(touchid);
+                        if (windows->is_base_window(window)) {
+                            state->set_cur_action_state(ACTION_STATE_BASE_LONGKEY);
+                        } else {
+                            state->set_cur_action_state(ACTION_STATE_POPUP_LONGKEY);
+                        }
+                        ret = TRUE;
+
+                        if (mEventCallback) {
+                            McfKeyEventDesc keyEventDesc = {0};
+                            keyEventDesc.keyValue = properties->longKeyValue;
+                            keyEventDesc.keyEvent = properties->longKeyEvent;
+                            keyEventDesc.keyType = configure->keyType;
+                            keyEventDesc.keyModifier = KEY_MODIFIER_LONGKEY;
+
+                            keyEventDesc.touchid = touchid;
+                            keyEventDesc.mousePressedPt = context->get_cur_pressed_point(touchid);
+                            keyEventDesc.mouseCurrentPt = context->get_cur_move_point(touchid);
+                            keyEventDesc.mouseFarthestPt = context->get_farthest_move_point(touchid);
+
+                            keyEventDesc.touch_event_order = context->get_multi_touch_event_order(touchid);
+
+                            mEventCallback->on_event_key_clicked(keyEventDesc);
+                        }
+                }
+            }
+        }
+    }
+    isLongKey = true;
+    /* Longkey processing in here */
+    return ret;
+}
+
+mcfboolean
+CMCFController::process_button_repeat_pressed_event(mcfwindow window, mcfbyte keyindex, mcftouchdevice touchid)
+{
+    MCF_DEBUG();
+    CMCFContext *context = CMCFContext::get_instance();
+    CMCFResourceCache *cache = CMCFResourceCache::get_instance();
+    CMCFWindows *windows = CMCFWindows::get_instance();
+
+    if(context && cache && windows) {
+        const McfLayoutKeyConfigure *configure = cache->get_cur_layout_key_configure(window, keyindex);
+        const McfLayoutKeyProperties *properties = cache->get_cur_layout_key_properties(window, keyindex);
+
+        MCFShiftState shiftidx = context->get_shift_state();
+        if(shiftidx < 0 || shiftidx >= MCF_SHIFT_STATE_MAX) shiftidx = MCF_SHIFT_STATE_OFF;
+
+        if(configure && properties) {
+            switch (configure->buttonType) {
+                case BUTTON_TYPE_NORMAL:
+                case BUTTON_TYPE_GRAB:
+                case BUTTON_TYPE_DIRECTION: {
+                    /* This is for enabling backspace key in search layout*/
+                    if ((configure->keyType != KEY_TYPE_MODECHANGE && configure->keyType != KEY_TYPE_COMPOSITION)
+                            || properties->keyEvent[0][0] == MVK_BackSpace) {
+                        if (mEventCallback) {
+                            mcfulong repeatKeyEvent = properties->keyEvent[shiftidx][0];
+
+                            /* In case of Delete key, Change from Char deletion to Word deletion
+                               when the input accelation speed is reached to Max */
+                            if (mcf_default_configure.fUseWordDeletion) {
+                                mcflong interval = mRepeatKeyDuration - (mRepeatKeySeq * MCF_REPEATKEY_ACCELERATION);
+                                if (repeatKeyEvent == MVK_BackSpace &&
+                                       interval <= MCF_REPEATKEY_WORD_DELETION_START_DURATION) {
+                                    repeatKeyEvent = MVK_3270_DeleteWord;
+                                }
+                            }
+
+                            McfKeyEventDesc keyEventDesc = {0};
+                            keyEventDesc.keyValue = properties->keyValue[shiftidx][0];
+                            keyEventDesc.keyEvent = repeatKeyEvent;
+                            keyEventDesc.keyType = configure->keyType;
+                            keyEventDesc.keyModifier = KEY_MODIFIER_NONE;
+
+                            keyEventDesc.touchid = touchid;
+                            keyEventDesc.mousePressedPt = context->get_cur_pressed_point(touchid);
+                            keyEventDesc.mouseCurrentPt = context->get_cur_move_point(touchid);
+                            keyEventDesc.mouseFarthestPt = context->get_farthest_move_point(touchid);
+
+                            keyEventDesc.touch_event_order = context->get_multi_touch_event_order(touchid);
+
+                            mEventCallback->on_event_key_clicked(keyEventDesc);
+
+                            McfKeyEventDesc desc = {0};
+                            desc.keyType = configure->keyType;
+                            desc.keyValue = properties->keyValue[shiftidx][0];
+                            desc.keyEvent = properties->keyEvent[shiftidx][0];
+                            desc.keyModifier = KEY_MODIFIER_NONE;
+                            prevModifier = KEY_MODIFIER_NONE;
+                        }
+                    }
+                }
+                break;
+            }
+        }
+    }
+
+    /* Longkey processing in here */
+    return TRUE;
+}
+
+mcfboolean
+CMCFController::process_button_move_event(mcfwindow window, mcfint x, mcfint y, mcfbyte keyindex, mcftouchdevice touchid)
+{
+    MCF_DEBUG();
+
+    mcfboolean ret = FALSE;
+
+    CMCFUtils *utils = CMCFUtils::get_instance();
+    CMCFEvents *events = CMCFEvents::get_instance();
+    CMCFContext *context = CMCFContext::get_instance();
+    CMCFWindows *windows = CMCFWindows::get_instance();
+    CMCFFeedback *feedback = CMCFFeedback::get_instance();
+    CMCFResourceCache *cache = CMCFResourceCache::get_instance();
+
+    McfButtonContext *btncontext = NULL;
+
+    const McfLayoutKeyCoordination *coordination = NULL;
+    const McfLayoutKeyConfigure *configure = NULL;
+    const McfLayoutKeyProperties *properties = NULL;
+
+    if(cache) {
+        coordination = cache->get_cur_layout_key_coordination(window, keyindex);
+        configure = cache->get_cur_layout_key_configure(window, keyindex);
+        properties = cache->get_cur_layout_key_properties(window, keyindex);
+        btncontext = cache->get_cur_button_context(window, keyindex);
+    }
+
+    if(btncontext && coordination && configure && properties &&
+       feedback && utils && context && cache && events && windows) {
+       /* If this key is the key previously pressed, add threshold value for avoiding unintended moving */
+        mcfint thresholdX = 0;
+        mcfint thresholdY = 0;
+        if (context->get_cur_pressed_window(touchid) == window && context->get_cur_pressed_key(touchid) == keyindex) {
+            thresholdX = utils->get_scale_x(MCF_MOUSE_BUTTON_CHANGE_THRESHOLD_X);
+            thresholdY = utils->get_scale_y(MCF_MOUSE_BUTTON_CHANGE_THRESHOLD_Y);
+        }
+
+        if (x >= coordination->x - coordination->addHitLeft  - thresholdX &&
+            x < coordination->x + coordination->width + coordination->addHitRight + thresholdX &&
+            y >= coordination->y - coordination->addHitTop - thresholdY &&
+            y < coordination->y + coordination->height + coordination->addHitBottom + thresholdY &&
+            /* Process the event only if the this item's sublayout id is active one */
+            (coordination->subLayoutID == SUBLAYOUTID_NONE || coordination->subLayoutID == context->get_cur_sublayout_id())) {
+            ret = TRUE;
+
+            /* for testing */
+            mcfwindow pressedWindow = context->get_cur_pressed_window(touchid);
+            mcf8 pressedKey = context->get_cur_pressed_key(touchid);
+            if (keyindex != pressedKey || window != pressedWindow ) {
+                McfButtonContext *pressedContext = cache->get_cur_button_context(pressedWindow, pressedKey);
+                const McfLayoutKeyConfigure *pressedConfigure = cache->get_cur_layout_key_configure(pressedWindow, pressedKey);
+
+                /* When the focus has moved to another button, destroy all the timers */
+                events->destroy_all_timer();
+
+                if (check_event_transition_enabled(pressedConfigure, configure)) {
+                    const McfLayout* layout = cache->get_cur_layout(windows->get_base_window());
+                    if(layout) {
+                        McfPoint pos = {0,};
+                        mcffloat scale_rate_x, scale_rate_y;
+                        if(layout->displayType == MCFDISPLAY_PORTRAIT) {
+                            scale_rate_x = utils->get_scale_rate_x();
+                            scale_rate_y = utils->get_scale_rate_y();
+                        } else {
+                            scale_rate_x = utils->get_scale_rate_y();
+                            scale_rate_y = utils->get_scale_rate_x();
+                        }
+
+                        /* calculates y position to be set */
+                        mcfint scnWidth, scnHeight;
+                        utils->get_screen_resolution(&scnWidth, &scnHeight);
+
+                        const mcf16 uniqId = utils->get_unique_id();
+                        context->set_cur_pressed_event_id(touchid, uniqId);
+                        /* Special routine for autopopup */
+                        if (configure->popupType == POPUP_TYPE_AUTO_POPUP) {
+                            events->create_timer(MCF_TIMER_AUTOPOPUP, mShortLongkeyDuration, uniqId);
+                        } else {
+                            /* for long key & repeat key */
+                            events->create_timer(MCF_TIMER_LONGKEY, mLongkeyDuration, uniqId);
+                        }
+
+                        context->set_cur_pressed_window(touchid, window);
+                        context->set_cur_pressed_key(touchid, keyindex);
+
+                        MCFShiftState shiftidx = context->get_shift_state();
+                        if(shiftidx < 0 || shiftidx >= MCF_SHIFT_STATE_MAX) shiftidx = MCF_SHIFT_STATE_OFF;
+                        if (configure->keyType != KEY_TYPE_CONTROL &&
+                            !(configure->keyType == KEY_TYPE_SYMBOL && strlen(properties->label[0][0]) == 0) && /* For the case of emoticons */
+                            configure->keyType != KEY_TYPE_MODECHANGE &&
+                            configure->keyType != KEY_TYPE_NONE) {
+                        }
+
+                        /* for feedback */
+                        feedback->button_moved(window, keyindex);
+
+                        btncontext->state = BUTTON_STATE_PRESSED;
+                        if (pressedContext) {
+                            pressedContext->state = BUTTON_STATE_NORMAL;
+                        }
+                        /* If the window doesn't get exposed before corresponding release event,
+                        * the inverted state of a button will never be drawn onto screen.
+                        * To prevent such a case, we draw the inverted state of button forcefully and directly,
+                        * without waiting for expose event */
+
+                        switch (configure->buttonType) {
+                        case BUTTON_TYPE_DRAG: {
+                            if (mEventCallback) {
+                                McfKeyEventDesc keyEventDesc = {0};
+                                keyEventDesc.keyValue = properties->keyValue[shiftidx][0];
+                                keyEventDesc.keyEvent = properties->keyEvent[shiftidx][0];
+                                keyEventDesc.keyType = configure->keyType;
+                                keyEventDesc.keyModifier = KEY_MODIFIER_NONE;
+
+                                keyEventDesc.touchid = touchid;
+                                keyEventDesc.mousePressedPt = context->get_cur_pressed_point(touchid);
+                                keyEventDesc.mouseCurrentPt = context->get_cur_move_point(touchid);
+                                keyEventDesc.mouseFarthestPt = context->get_farthest_move_point(touchid);
+
+                                keyEventDesc.touch_event_order = context->get_multi_touch_event_order(touchid);
+
+                                mEventCallback->on_event_key_clicked(keyEventDesc);
+                            }
+                            if (!(windows->is_base_window(window))) {
+                                /* When press event occured in popup window, reset POPUP_TIMEOUT timer */
+                                McfWindowContext *winctx = windows->get_window_context(window, FALSE);
+                                if(winctx) {
+                                    if (winctx->timeout > 0) {
+                                        events->destroy_timer(MCF_TIMER_POPUP_TIMEOUT);
+                                        events->create_timer(MCF_TIMER_POPUP_TIMEOUT, winctx->timeout, 0, TRUE);
+                                    }
+                                }
+                            }
+                        }
+                        break;
+                        }
+
+#ifdef DIRECTLY_DRAW_ON_EVENTS
+                        CMCFUIBuilder *builder = CMCFUIBuilder::get_instance();
+                        if (builder) {
+                            if (btncontext) {
+                                builder->draw_button(window, NULL, keyindex, btncontext->state);
+                            }
+                            if (pressedContext) {
+                                builder->draw_button(pressedWindow, NULL, pressedKey, pressedContext->state, TRUE);
+                            }
+                        }
+#else
+                                       windows->update_window(window,
+                                                              coordination->x, coordination->y,
+                                                              coordination->width, coordination->height);
+
+                                       const McfLayoutKeyCoordination *pressedCoordination =
+                                           cache->get_cur_layout_key_coordination(pressedWindow, pressedKey);
+                                       if (pressedCoordination) {
+                                           windows->update_window(pressedWindow, pressedCoordination->x, pressedCoordination->y,
+                                                                  pressedCoordination->width, pressedCoordination->height);
+                        }
+#endif
+                    }
+
+                }
+            }
+        }
+    }
+
+    return ret;
+}
+
+MCFKeyModifier
+CMCFController::get_drag_key_modifier(mcfint deltax, mcfint deltay, mcffloat dist, mcfboolean check_farthest,
+                                      mcftouchdevice touchid, mcfbyte extraOption)
+{
+    typedef struct {
+        double lowerbound;
+        double upperbound;
+        MCFKeyModifier modifier;
+    } DIRECTIONINFO;
+
+    CMCFContext *context = CMCFContext::get_instance();
+    MCFKeyModifier keyModifier = KEY_MODIFIER_NONE;
+
+    if(context) {
+        double theta = atan2(deltay , (deltax ? deltax : 1)); /* Avoid divide by 0 exception */
+        mcffloat ratio = fabs((mcffloat)deltay / (deltax ? deltax : 1));
+        MCFDragState curDragState = context->get_cur_drag_state(touchid);
+        if (extraOption == DIRECTION_EXTRA_OPTION_8_DIRECTIONS ||
+            extraOption == DIRECTION_EXTRA_OPTION_8_DIRECTIONS_WITH_LONG ||
+            extraOption == DIRECTION_EXTRA_OPTION_8_DIRECTIONS_WITH_RETURN) { /* 8 directions */
+                /* If the theta is below 0, the direction is upward since the y coordination grows downward */
+                DIRECTIONINFO info[] = {
+                    {-8 * (M_PI / 8), -7 * (M_PI / 8), KEY_MODIFIER_DIRECTION_LEFT},
+                    {-7 * (M_PI / 8), -5 * (M_PI / 8), KEY_MODIFIER_DIRECTION_UP_LEFT},
+                    {-5 * (M_PI / 8), -2.7 * (M_PI / 8), KEY_MODIFIER_DIRECTION_UP},
+                    {-2.7 * (M_PI / 8), -1.5 * (M_PI / 8), KEY_MODIFIER_DIRECTION_UP_RIGHT},
+                    {-1.5 * (M_PI / 8),  1 * (M_PI / 8), KEY_MODIFIER_DIRECTION_RIGHT},
+                    { 1 * (M_PI / 8),  3 * (M_PI / 8), KEY_MODIFIER_DIRECTION_DOWN_RIGHT},
+                    { 3 * (M_PI / 8),  5 * (M_PI / 8), KEY_MODIFIER_DIRECTION_DOWN},
+                    { 5 * (M_PI / 8),  7 * (M_PI / 8), KEY_MODIFIER_DIRECTION_DOWN_LEFT},
+                    { 7 * (M_PI / 8),  8 * (M_PI / 8), KEY_MODIFIER_DIRECTION_LEFT},
+                };
+                for (mcfint loop = 0;loop < sizeof(info) / sizeof(DIRECTIONINFO);loop++) {
+                    if (theta >= info[loop].lowerbound && theta <= info[loop].upperbound) {
+                        keyModifier = info[loop].modifier;
+                    }
+                }
+        } else { /* 4 directions */
+            /* If the state was dragging to one of 4 directions and the final release point is
+            * far enough from inital press point, and the angle is in between out predefined angle value */
+            if(extraOption == DIRECTION_EXTRA_OPTION_4_DIRECTIONS_WITH_RETURN_AND_CURVE &&
+               curDragState != MCF_DRAG_STATE_NONE && curDragState != MCF_DRAG_STATE_INVALID &&
+               dist > MCF_DRAG_CURVE_RECOG_DIST &&
+               ratio > (1 / MCF_DRAG_CURVE_FINAL_ANGLE_VALUE) &&
+               ratio < MCF_DRAG_CURVE_FINAL_ANGLE_VALUE) {
+                    if(curDragState == MCF_DRAG_STATE_DOWN) {
+                        if(deltax > 0) {
+                               keyModifier = KEY_MODIFIER_DIRECTION_CURVE_DOWN_RIGHT;
+                        }
+                        else {
+                               keyModifier = KEY_MODIFIER_DIRECTION_CURVE_DOWN_LEFT;
+                        }
+                    }
+                    if(curDragState == MCF_DRAG_STATE_UP) {
+                        if(deltax > 0) {
+                               keyModifier = KEY_MODIFIER_DIRECTION_CURVE_UP_RIGHT;
+                        }
+                        else {
+                               keyModifier = KEY_MODIFIER_DIRECTION_CURVE_UP_LEFT;
+                        }
+                    }
+                    if(curDragState == MCF_DRAG_STATE_LEFT) {
+                        if(deltay > 0) {
+                               keyModifier = KEY_MODIFIER_DIRECTION_CURVE_LEFT_DOWN;
+                        }
+                        else {
+                               keyModifier = KEY_MODIFIER_DIRECTION_CURVE_LEFT_UP;
+                        }
+                    }
+                    if(curDragState == MCF_DRAG_STATE_RIGHT) {
+                        if(deltay > 0) {
+                               keyModifier = KEY_MODIFIER_DIRECTION_CURVE_RIGHT_DOWN;
+                        }
+                        else {
+                               keyModifier = KEY_MODIFIER_DIRECTION_CURVE_RIGHT_UP;
+                        }
+                    }
+            } else {
+                DIRECTIONINFO info[] = {
+                    {-4 * (M_PI / 4), -3 * (M_PI / 4), KEY_MODIFIER_DIRECTION_LEFT},
+                    {-3 * (M_PI / 4), -1 * (M_PI / 4), KEY_MODIFIER_DIRECTION_UP},
+                    {-1 * (M_PI / 4),  1 * (M_PI / 4), KEY_MODIFIER_DIRECTION_RIGHT},
+                    { 1 * (M_PI / 4),  3 * (M_PI / 4), KEY_MODIFIER_DIRECTION_DOWN},
+                    { 3 * (M_PI / 4),  4 * (M_PI / 4), KEY_MODIFIER_DIRECTION_LEFT},
+                };
+                for (mcfint loop = 0;loop < sizeof(info) / sizeof(DIRECTIONINFO);loop++) {
+                    if (theta >= info[loop].lowerbound && theta <= info[loop].upperbound) {
+                        keyModifier = info[loop].modifier;
+                    }
+                }
+            }
+        }
+
+        if(extraOption == DIRECTION_EXTRA_OPTION_8_DIRECTIONS_WITH_LONG ||
+           extraOption == DIRECTION_EXTRA_OPTION_4_DIRECTIONS_WITH_LONG) {
+                if(keyModifier >= KEY_MODIFIER_DIRECTION_LEFT &&
+                   keyModifier <= KEY_MODIFIER_DIRECTION_DOWN_RIGHT) {
+                        keyModifier = (MCFKeyModifier)(keyModifier + 8); // Add LONG attribute;
+                }
+        }
+        if(check_farthest || context->get_cur_drag_state(touchid) == MCF_DRAG_STATE_RETURN) {
+            if(keyModifier >= KEY_MODIFIER_DIRECTION_LEFT &&
+               keyModifier <= KEY_MODIFIER_DIRECTION_DOWN_RIGHT) {
+                    keyModifier = (MCFKeyModifier)(keyModifier + 16); // Add RETURN attribute;
+            }
+        }
+    }
+
+    return keyModifier;
+}
+
+mcfboolean
+CMCFController::process_button_release_event(mcfwindow window, mcfint x, mcfint y, mcfbyte keyindex, mcftouchdevice touchid)
+{
+    MCF_DEBUG();
+
+    mcfboolean ret = FALSE;
+    mcfboolean redraw = FALSE;
+    mcfboolean fireEvt = FALSE;
+    MCFKeyModifier keyModifier = KEY_MODIFIER_NONE;
+
+    static mcfwindow lastFiredWin = MCFWINDOW_INVALID;
+    static mcfbyte lastFiredKey = NOT_USED;
+
+    CMCFUtils *utils = CMCFUtils::get_instance();
+    CMCFFeedback *feedback = CMCFFeedback::get_instance();
+    CMCFWindows *windows = CMCFWindows::get_instance();
+    CMCFContext *context = CMCFContext::get_instance();
+    CMCFActionState *state = CMCFActionState::get_instance();
+    CMCFResourceCache *cache = CMCFResourceCache::get_instance();
+    McfWindowContext *winctx = windows->get_window_context(window);
+    McfPoint zoomwinpos = {0,};
+
+    McfButtonContext *btncontext = NULL;
+    const McfLayoutKeyCoordination *coordination = NULL;
+    const McfLayoutKeyConfigure *configure = NULL;
+    const McfLayoutKeyProperties *properties = NULL;
+
+    if(cache) {
+        btncontext = cache->get_cur_button_context(window, keyindex);
+        coordination = cache->get_cur_layout_key_coordination(window, keyindex);
+        configure = cache->get_cur_layout_key_configure(window, keyindex);
+        properties = cache->get_cur_layout_key_properties(window, keyindex);
+    }
+
+    const McfLayoutKeyConfigure *targetConfigure = NULL;
+    const McfLayoutKeyProperties *targetProperties = NULL;
+
+    if (utils && feedback && windows && context && state && cache &&
+       btncontext && coordination && configure && properties) {
+        mcf8 savedInputMode = context->get_input_mode();
+        MCFShiftState shiftidx = context->get_shift_state();
+        if(shiftidx < 0 || shiftidx >= MCF_SHIFT_STATE_MAX) {
+               shiftidx = MCF_SHIFT_STATE_OFF;
+        }
+
+        mcfwindow pressedWindow = context->get_cur_pressed_window(touchid);
+        mcf8 pressedKey = context->get_cur_pressed_key(touchid);
+
+        /* If this button was pressed, initialize the button context regardless of event  */
+        if (btncontext->state == BUTTON_STATE_PRESSED) {
+            btncontext->state = BUTTON_STATE_NORMAL;
+                redraw = TRUE;
+        }
+
+        /* If this key is the key previously pressed, add threshold value for avoiding unintended moving */
+        mcfint thresholdX = 0;
+        mcfint thresholdY = 0;
+        if (context) {
+            if (context->get_cur_pressed_window(touchid) == window && context->get_cur_pressed_key(touchid) == keyindex) {
+                thresholdX = utils->get_scale_x(MCF_MOUSE_BUTTON_CHANGE_THRESHOLD_X);
+                thresholdY = utils->get_scale_y(MCF_MOUSE_BUTTON_CHANGE_THRESHOLD_Y);
+            }
+        }
+
+        /* Check if the pressed button's type is directional button */
+        if (configure->buttonType == BUTTON_TYPE_DIRECTION) {
+            if (context) {
+                if (context->get_cur_pressed_window(touchid) == window && context->get_cur_pressed_key(touchid) == keyindex) {
+                    ret = TRUE;
+
+                    mcfboolean check_farthest = FALSE;
+                    mcfint deltax = x - context->get_cur_pressed_point(touchid).x;
+                    mcfint deltay = y - context->get_cur_pressed_point(touchid).y;
+
+                    mcffloat dist = utils->get_distance(x, y,
+                                                        context->get_cur_pressed_point(touchid).x,
+                                                        context->get_cur_pressed_point(touchid).y);
+                    mcffloat direction_recog_dist = MCF_DIRECTION_RECOG_DIST;
+                    if(configure->fIsSideButton) {
+                        direction_recog_dist = MCF_DIRECTION_RECOG_DIST_SIDE;
+                    };
+                    if(context->get_cur_drag_state(touchid) == MCF_DRAG_STATE_RETURN) {
+                        if(properties->extraOption == DIRECTION_EXTRA_OPTION_8_DIRECTIONS_WITH_RETURN ||
+                           properties->extraOption == DIRECTION_EXTRA_OPTION_4_DIRECTIONS_WITH_RETURN ||
+                           properties->extraOption == DIRECTION_EXTRA_OPTION_4_DIRECTIONS_WITH_RETURN_AND_CURVE) {
+                           deltax = context->get_farthest_move_point(touchid).x - context->get_cur_pressed_point(touchid).x;
+                           deltay = context->get_farthest_move_point(touchid).y - context->get_cur_pressed_point(touchid).y;
+                           dist = utils->get_distance(context->get_farthest_move_point(touchid),
+                           context->get_cur_pressed_point(touchid));
+                           check_farthest = TRUE;
+                        }
+                    }
+                    if(!isLongKey) {
+                    if (dist > direction_recog_dist) {
+                        keyModifier = get_drag_key_modifier(deltax, deltay, dist, check_farthest, touchid, properties->extraOption);
+                      }
+                    }
+                    else
+                      keyModifier = KEY_MODIFIER_LONGKEY;
+                }
+            }
+        }
+
+        /* Check if the event occured inside this button's rectangle */
+        if (x >= coordination->x - coordination->addHitLeft  - thresholdX &&
+            x < coordination->x + coordination->width + coordination->addHitRight + thresholdX &&
+            y >= coordination->y - coordination->addHitTop - thresholdY &&
+            y < coordination->y + coordination->height + coordination->addHitBottom + thresholdY &&
+            /* Process the event only if the this item's sublayout id is active one */
+            (coordination->subLayoutID == SUBLAYOUTID_NONE || coordination->subLayoutID == context->get_cur_sublayout_id())) {
+            ret = TRUE;
+        }
+
+        if (ret) {
+            /* for feedback */
+            feedback->button_released(window, keyindex);
+
+            /* If this button's index is the same as the one initially pressed */
+            if (pressedWindow == window && pressedKey == keyindex) {
+                fireEvt = TRUE;
+                targetConfigure = configure;
+                targetProperties = properties;
+            } else {
+                const McfLayoutKeyConfigure *pressedConfigure = cache->get_cur_layout_key_configure(pressedWindow, pressedKey);
+                const McfLayoutKeyProperties *pressedProperties = cache->get_cur_layout_key_properties(pressedWindow, pressedKey);
+
+                if (pressedConfigure && pressedProperties) {
+                    if (check_event_transition_enabled(pressedConfigure, configure)) {
+                        fireEvt = TRUE;
+                        targetConfigure = pressedConfigure;
+                        targetProperties = pressedProperties;
+                    } else {
+                        ret = FALSE;
+                    }
+                }
+            }
+        }
+
+        /* Don't fire any events if we're in longkey state */
+        if (state->get_cur_action_state() != ACTION_STATE_BASE_LONGKEY &&
+            state->get_cur_action_state() != ACTION_STATE_BASE_REPEATKEY &&
+            state->get_cur_action_state() != ACTION_STATE_POPUP_LONGKEY &&
+            state->get_cur_action_state() != ACTION_STATE_POPUP_REPEATKEY) {
+            /* An event occured? */
+            if (fireEvt) {
+                if (targetConfigure && targetProperties) {
+                    McfKeyEventDesc keyEventDesc = {0};
+                    keyEventDesc.keyType = targetConfigure->keyType;
+
+                    keyEventDesc.touchid = touchid;
+                    keyEventDesc.mousePressedPt = context->get_cur_pressed_point(touchid);
+                    keyEventDesc.mouseCurrentPt = context->get_cur_move_point(touchid);
+                    keyEventDesc.mouseFarthestPt = context->get_farthest_move_point(touchid);
+
+                    keyEventDesc.touch_event_order = context->get_multi_touch_event_order(touchid);
+
+                    switch (configure->popupType) {
+                    case POPUP_TYPE_BTN_RELEASE_POPUP:
+                    case POPUP_TYPE_BTN_RELEASE_POPUP_ONCE: {
+                        MCFDragState dragstate = context->get_cur_drag_state(touchid);
+                        mcfbyte popupInputMode = NOT_USED;
+                        if(mcf_check_arrindex(dragstate, MCF_DRAG_STATE_MAX)) {
+                            popupInputMode = configure->popupInputMode[dragstate];
+                            if(!mcf_check_arrindex(popupInputMode, MAX_INPUT_MODE_POPUP)) {
+                                popupInputMode = configure->popupInputMode[MCF_DRAG_STATE_NONE];
+                            }
+                        }
+                        MCFDisplay display = context->get_display();
+                        if(mcf_check_arrindex(popupInputMode, MAX_INPUT_MODE_POPUP) &&
+                           mcf_check_arrindex(display, MCFDISPLAY_MAX)) {
+                            mcfshort popupLayoutId =
+                                mcf_input_mode_popup_configure[popupInputMode].layoutId[display];
+                            McfLayout *layout = NULL;
+                            if(mcf_check_arrindex(popupLayoutId, MAX_LAYOUT)) {
+                                layout = &mcf_layout[popupLayoutId];
+                            }
+                            if(layout) {
+                                McfRectangle popupRect;
+                                McfRectangle baseWndRect;
+                                windows->get_window_rect(windows->get_base_window(), &baseWndRect);
+                                popupRect.x = coordination->x + coordination->popXOffset + baseWndRect.x;
+                                popupRect.y = coordination->y + coordination->popYOffset + baseWndRect.y;
+
+                                popupRect.width = layout->width;
+                                popupRect.height= layout->height;
+
+                                windows->open_popup(window,
+                                                           keyindex,
+                                                    popupRect.x,
+                                                    popupRect.y,
+                                                    popupRect.width,
+                                                    popupRect.height,
+                                                    popupLayoutId,
+                                                    configure->popupType,
+                                                    !(mcf_input_mode_popup_configure[popupInputMode].fUseWindow),
+                                                    mcf_input_mode_popup_configure[popupInputMode].fUseDimWindow,
+                                                    coordination->popImageX,
+                                                    coordination->popImageY,
+                                                    mcf_input_mode_popup_configure[popupInputMode].fTimeout);
+                            }
+                        }
+                    }
+                    break;
+                    case POPUP_TYPE_CONTEXT_POPUP:
+                        zoomwinpos.x = (coordination->x + (coordination->width / 2));
+                        mcfint scnWidth, scnHeight;
+                        utils->get_screen_resolution(&scnWidth, &scnHeight);
+                        if (context->get_display() == MCFDISPLAY_LANDSCAPE) {
+                            int  tmp = scnWidth;
+                            scnWidth = scnHeight;
+                            scnHeight = tmp;
+                        }
+                        zoomwinpos.y =  coordination->y;
+                        if(winctx) {
+                            zoomwinpos.x += winctx->x;
+                            zoomwinpos.y += winctx->y;
+                        }
+                        if(_setup_info.lang_count > 2) {
+                         windows->open_context_popup(window);
+                         _show_language_popup(zoomwinpos.x,zoomwinpos.y);
+                        }
+                        break;
+                    case POPUP_TYPE_AUTO_POPUP:
+                    case POPUP_TYPE_BTN_PRESS_POPUP_DRAG:
+                    case POPUP_TYPE_NONE:
+                        /* Nothing to do in here */
+                        break;
+                    }
+
+                    switch (targetConfigure->buttonType) {
+                    case BUTTON_TYPE_NORMAL:
+                    case BUTTON_TYPE_GRAB :
+                    case BUTTON_TYPE_DIRECTION : {
+                        if (!(targetProperties->useRepeatKey)) {
+                            if (mEventCallback) {
+                                keyEventDesc.keyValue = properties->keyValue[shiftidx][0];
+                                keyEventDesc.keyEvent = properties->keyEvent[shiftidx][0];
+                                keyEventDesc.keyModifier = keyModifier;
+                                mEventCallback->on_event_key_clicked(keyEventDesc);
+                            }
+                        }
+                    }
+                    break;
+                    case BUTTON_TYPE_MULTITAP:
+                    case BUTTON_TYPE_ROTATION: {
+                        if(targetConfigure->buttonType == BUTTON_TYPE_MULTITAP) {
+                            if(window == lastFiredWin && keyindex == lastFiredKey) {
+                                keyModifier = KEY_MODIFIER_MULTITAP_REPEAT;
+                            } else {
+                                keyModifier = KEY_MODIFIER_MULTITAP_START;
+                            }
+                        } else {
+                            keyModifier = KEY_MODIFIER_NONE;
+                        }
+                        if (mEventCallback) {
+                            if (btncontext->multikeyIdx < MAX_SIZE_OF_MULTITAP_CHAR) {
+                                keyEventDesc.keyValue = properties->keyValue[shiftidx][btncontext->multikeyIdx];
+                                keyEventDesc.keyEvent = properties->keyEvent[shiftidx][btncontext->multikeyIdx];
+                                keyEventDesc.keyModifier = keyModifier;
+                                mEventCallback->on_event_key_clicked(keyEventDesc);
+                            }
+                        }
+                        /* Check if the multikey index is in valid range, and increase by one */
+                        if (btncontext->multikeyIdx >= MAX_SIZE_OF_MULTITAP_CHAR - 1) {
+                            btncontext->multikeyIdx = 0;
+                        } else {
+                            mcfbyte orgindex = btncontext->multikeyIdx;
+                            btncontext->multikeyIdx = 0;
+                            if (targetProperties->keyValue[shiftidx][orgindex + 1]) {
+                                if (strlen(targetProperties->keyValue[shiftidx][orgindex + 1]) > 0) {
+                                    btncontext->multikeyIdx = orgindex + 1;
+                                }
+                            }
+                        }
+                    }
+                    break;
+                    case BUTTON_TYPE_DRAG : {
+                    }
+                    break;
+                    }
+                }
+
+                lastFiredWin = window;
+                lastFiredKey = keyindex;
+            }
+        }
+
+        /* If this button needs to be redrawn */
+        if (redraw) {
+#ifdef DIRECTLY_DRAW_ON_EVENTS
+            CMCFUIBuilder *builder = CMCFUIBuilder::get_instance();
+            if (builder) {
+                builder->draw_button(window, NULL, keyindex, btncontext->state, TRUE);
+            }
+#else
+            if(savedInputMode == context->get_input_mode()) {
+                CMCFWindows *windows = CMCFWindows::get_instance();
+                if (windows) {
+                    windows->update_window(window, coordination->x, coordination->y,
+                                              coordination->width, coordination->height);
+                }
+            }
+
+#endif
+        }
+    }
+    isLongKey = false;
+    return ret;
+}
+
+mcfboolean
+CMCFController::mouse_press(mcfwindow window, mcfint x, mcfint y, mcftouchdevice touchid)
+{
+    MCF_DEBUG();
+    mcfboolean ret = FALSE;
+
+    if(mInputEventsDisabled)
+       return FALSE;
+
+       prevModifier = KEY_MODIFIER_NONE;
+
+    /* Adjust x,y coordination by touch offset */
+    CMCFErrorAdjustment *adjustment = CMCFErrorAdjustment::get_instance();
+
+    CMCFContext *context = CMCFContext::get_instance();
+    CMCFResourceCache *cache = CMCFResourceCache::get_instance();
+    CMCFActionState *state = CMCFActionState::get_instance();
+    CMCFWindows *windows = CMCFWindows::get_instance();
+    CMCFUtils *utils = CMCFUtils::get_instance();
+
+    mcfint btnIndex = NOT_USED;
+    McfWindowContext *winctx = NULL;
+    if(windows) {
+        winctx = windows->get_window_context(window, FALSE);
+        /* If the dim window is virtual and currently active, let's just skip this event */
+        if(windows->is_base_window(window)) {
+            McfWindowContext *dimctx = windows->get_window_context(windows->get_dim_window());
+            if(dimctx) {
+                if(dimctx->isVirtual && !(dimctx->hidden)) {
+                    window = windows->get_dim_window();
+                    winctx = dimctx;
+                }
+            }
+        }
+    }
+
+    if (cache && state && windows && context && winctx) {
+        MCFDisplay currDisplay = context->get_display();
+        adjustment->apply_touch_offset(mcf_default_configure.touchOffsetLevel[currDisplay], &x, &y);
+
+        mcfboolean isSubEvent = FALSE;
+        if(context->get_multi_touch_context_num() > 0) {
+            McfKeyEventDesc desc;
+            context->get_multi_touch_event(0, &desc);
+            mcfwindow pressedwindow = context->get_cur_pressed_window(desc.touchid);
+            mcf8 pressedkey = context->get_cur_pressed_key(desc.touchid);
+            McfLayoutKeyProperties *properties = cache->get_cur_layout_key_properties(pressedwindow, pressedkey);
+            if(properties) {
+                if(properties->multitouchType == MCF_MULTI_TOUCH_TYPE_GRAB_SUB_EVENTS) {
+                    isSubEvent = TRUE;
+                }
+            }
+        }
+        context->create_multi_touch_context(touchid, isSubEvent);
+        context->set_cur_pressed_window(touchid, window);
+        context->set_cur_pressed_point(touchid, x, y);
+        context->set_cur_pressed_time(touchid);
+        context->set_cur_move_window(touchid, window);
+        context->set_cur_move_point(touchid, x, y);
+        context->set_last_touch_device_id(touchid);
+        context->set_cur_drag_state(touchid, MCF_DRAG_STATE_NONE);
+        context->set_cur_key_modifier(touchid, KEY_MODIFIER_NONE);
+
+        /* If there is postponed update of button, update it now */
+        CMCFEvents *events = CMCFEvents::get_instance();
+        mcfwindow lastWin = context->get_last_pressed_window();
+        mcf8 lastKey = context->get_last_pressed_key();
+        if (lastWin != MCFWINDOW_INVALID && lastKey != NOT_USED) {
+            const McfLayoutKeyCoordination* coords = cache->get_cur_layout_key_coordination(lastWin, lastKey);
+            if (coords) {
+                windows->update_window(lastWin, coords->x, coords->y, coords->width, coords->height);
+            }
+        }
+        context->set_prev_pressed_window(touchid, MCFWINDOW_INVALID);
+        context->set_prev_pressed_key(touchid, NOT_USED);
+        context->set_prev_drag_state(touchid, MCF_DRAG_STATE_NONE);
+
+        /* Destroy key related timers */
+        events->destroy_timer(MCF_TIMER_BUTTON_DELAY);
+        events->destroy_timer(MCF_TIMER_AUTOPOPUP);
+        events->destroy_timer(MCF_TIMER_SHORT_LONGKEY);
+        events->destroy_timer(MCF_TIMER_LONGKEY);
+        events->destroy_timer(MCF_TIMER_REPEATKEY);
+
+        /* Do what has to be done when mouse gets pressed */
+        handle_engine_signal(MCF_SIG_MOUSE_PRESS, window);
+
+        if(!isSubEvent) {
+            /* Iterate all the buttons and inform the event */
+            mcfboolean ended = FALSE;
+            for (int loop = 0;loop < MAX_KEY && !ended;loop++) {
+                McfButtonContext *btncontext = cache->get_cur_button_context(window, loop);
+                const McfLayoutKeyConfigure *configure = cache->get_cur_layout_key_configure(window, loop);
+                if (btncontext && configure) {
+                    if (!(btncontext->used)) {
+                        ended = TRUE;
+                    } else if (btncontext->state != BUTTON_STATE_DISABLED &&
+                               configure->buttonType != BUTTON_TYPE_UIITEM) {
+                        if (process_button_pressed_event(window, x, y, loop, touchid)) {
+                            if (windows->is_base_window(window)) {
+                                state->set_cur_action_state(ACTION_STATE_BASE_PRESS);
+                            } else {
+                                state->set_cur_action_state(ACTION_STATE_POPUP_PRESS);
+                            }
+                            btnIndex = loop;
+                            ret = TRUE;
+                        }
+                    }
+                }
+            }
+
+            /* For covering a missing area about 1 pixel */
+            if (!ret) {
+                for (int loop = 0;loop < MAX_KEY;loop++) {
+                    McfButtonContext *btncontext = cache->get_cur_button_context(window, loop);
+                    const McfLayoutKeyConfigure* configure = cache->get_cur_layout_key_configure(window, loop);
+                    if (btncontext && configure) {
+                        if (!(btncontext->used)) {
+                            break;
+                        } else if (btncontext->state != BUTTON_STATE_DISABLED &&
+                                   configure->buttonType != BUTTON_TYPE_UIITEM) {
+                            if (process_button_pressed_event(window, x+1, y+1, loop, touchid)) {
+                                if (windows->is_base_window(window)) {
+                                    state->set_cur_action_state(ACTION_STATE_BASE_PRESS);
+                                } else {
+                                    state->set_cur_action_state(ACTION_STATE_POPUP_PRESS);
+                                }
+                                btnIndex = loop;
+                                break;
+                            }
+                        }
+                    }
+                }
+            }
+        }
+
+        mcfwindow skipwindow = window;
+        if (ret && btnIndex != NOT_USED) {
+            const McfLayoutKeyProperties *properties = cache->get_cur_layout_key_properties(window, btnIndex);
+            const McfLayoutKeyConfigure *configure = cache->get_cur_layout_key_configure(window, btnIndex);
+            if (properties && configure) {
+                mcfboolean dontClosePopup = FALSE;
+                if (properties->dontClosePopup) {
+                    dontClosePopup = TRUE;
+                }
+                /* If the button's popup type is drag type, the opened popup could be the one opened by this press event */
+                if (configure->popupType == POPUP_TYPE_BTN_PRESS_POPUP_DRAG) {
+                    /* Check the opened popup was opened by this button */
+                    mcfwindow popupwin = windows->get_nth_window_in_Z_order_list(MCF_WINDOW_Z_TOP);
+                    McfWindowContext *popupctx = windows->get_window_context(popupwin);
+                    if (popupctx) {
+                        if(popupctx->parentWnd == window && popupctx->parentKey == btnIndex) {
+                            dontClosePopup = TRUE;
+                        }
+                    }
+                }
+                if (dontClosePopup) {
+                    skipwindow = windows->get_nth_window_in_Z_order_list(MCF_WINDOW_Z_TOP);
+                }
+            }
+        }
+        windows->close_all_popups(skipwindow);
+
+        /* When press event occured in popup window, reset POPUP_TIMEOUT timer */
+        if (!(windows->is_base_window(window))) {
+            if (winctx->timeout > 0) {
+                events->destroy_timer(MCF_TIMER_POPUP_TIMEOUT);
+                events->create_timer(MCF_TIMER_POPUP_TIMEOUT, winctx->timeout, 0, TRUE);
+            }
+        } else if (skipwindow != window) { /* Or the pressed button has dontClosePopup property, reset POPUP_TIMEOUT timer */
+            McfWindowContext *skipwinctx = windows->get_window_context(skipwindow, FALSE);
+            if (skipwinctx) {
+                if (skipwinctx->timeout > 0) {
+                    events->destroy_timer(MCF_TIMER_POPUP_TIMEOUT);
+                    events->create_timer(MCF_TIMER_POPUP_TIMEOUT, skipwinctx->timeout, 0, TRUE);
+                }
+            }
+        }
+    }
+
+    return TRUE;
+}
+
+mcfboolean
+CMCFController::mouse_release(mcfwindow window, mcfint x, mcfint y, mcftouchdevice touchid)
+{
+    MCF_DEBUG();
+    mcfboolean ret = FALSE;
+
+    /* Adjust x,y coordination by touch offset */
+    CMCFErrorAdjustment *adjustment = CMCFErrorAdjustment::get_instance();
+
+    CMCFContext *context = CMCFContext::get_instance();
+    CMCFResourceCache *cache = CMCFResourceCache::get_instance();
+    CMCFActionState *state = CMCFActionState::get_instance();
+    CMCFWindows *windows = CMCFWindows::get_instance();
+    CMCFEvents *events = CMCFEvents::get_instance();
+    CMCFUtils *utils = CMCFUtils::get_instance();
+
+    mcfint btnIndex = NOT_USED;
+
+    if (cache && state && windows && context && utils && context->find_multi_touch_context(touchid)) {
+        mcfwindow skipwindow = MCFWINDOW_INVALID;
+        MCFDisplay currDisplay = context->get_display();
+        adjustment->apply_touch_offset(mcf_default_configure.touchOffsetLevel[currDisplay], &x, &y);
+
+        context->set_cur_move_window(touchid, MCFWINDOW_INVALID);
+
+        mcfwindow pressedWindow = context->get_cur_pressed_window(touchid);
+        mcf8 pressedKey = context->get_cur_pressed_key(touchid);
+        McfWindowContext *winctx = windows->get_window_context(window, TRUE);
+        /* Adjust event x and y positions as relative position to the virtual window */
+        if(winctx) {
+            /* If the dim window is virtual and currently active, consider base window's event is occured in dim window */
+            if(windows->is_base_window(window)) {
+                McfWindowContext *dimctx = windows->get_window_context(windows->get_dim_window());
+                if(dimctx) {
+                    if(dimctx->isVirtual && !(dimctx->hidden)) {
+                        window = windows->get_dim_window();
+                        winctx = dimctx;
+                    }
+                }
+            }
+        }
+
+        /* Iterate all the buttons and inform the event */
+        mcfboolean ended = FALSE;
+        CMCFUtils *utils = CMCFUtils::get_instance();
+
+
+        if(context->get_cur_pressed_window(touchid) == window) {
+            if(abs(context->get_cur_pressed_point(touchid).x - x) > utils->get_scale_x(MCF_FLICK_GESTURE_RECOG_THRESHOLD) ||
+               abs(context->get_cur_pressed_point(touchid).y - y) > utils->get_scale_y(MCF_FLICK_GESTURE_RECOG_THRESHOLD) ) {
+                struct timeval t0 = context->get_cur_pressed_time(touchid);
+                struct timeval t1;
+                gettimeofday(&t1, NULL);
+                float etime;
+                etime = ((t1.tv_sec * 1000000 + t1.tv_usec) - (t0.tv_sec * 1000000 + t0.tv_usec))/1000.0;
+                if(etime < MCF_FLICK_GESTURE_RECOG_TIME) {
+                    mcfint direction = DRAG_NONE;
+                    if(x > context->get_cur_pressed_point(touchid).x + utils->get_scale_x(MCF_FLICK_GESTURE_RECOG_THRESHOLD)) {
+                        direction = DRAG_RIGHT;
+                    }
+                    if(x < context->get_cur_pressed_point(touchid).x - utils->get_scale_x(MCF_FLICK_GESTURE_RECOG_THRESHOLD)) {
+                        direction = DRAG_LEFT;
+                    }
+                    if(y > context->get_cur_pressed_point(touchid).y + utils->get_scale_y(MCF_FLICK_GESTURE_RECOG_THRESHOLD)) {
+                        direction = DRAG_DOWN;
+                    }
+                    if(y < context->get_cur_pressed_point(touchid).y - utils->get_scale_y(MCF_FLICK_GESTURE_RECOG_THRESHOLD)) {
+                        direction = DRAG_UP;
+                    }
+                    if (mEventCallback) {
+                        if(mEventCallback->on_event_notification(NOTITYPE_GESTURE_FLICK, direction)) {
+                            ended = TRUE;
+                        }
+                    }
+                }
+            }
+        }
+
+        /* FIXME : We should consider this kind of action in general manner, not only specific to autopopup */
+        /* And also, this kind of implementation only selects button that was highlighted at least once. */
+        /* iPhone supports highlighting autopopup buttons with its direction, even if the pointer never goes up on the button */
+        McfWindowContext *pressedCtx = windows->get_window_context(pressedWindow, FALSE);
+        if (pressedCtx) {
+            utils->log("PRESSED CTX : %p %d %d\n", pressedWindow, pressedCtx->x, pressedCtx->y);
+            mcfboolean grab_event = FALSE;
+            const McfLayout *layout = cache->get_cur_layout(pressedWindow);
+            if(layout) {
+                if(layout->style == LAYOUT_STYLE_POPUP_GRAB) {
+                    grab_event = TRUE;
+                }
+                /* If the topmost window has the POPUP_GRAB style, find the nearest button to the mouse pointer */
+                if(grab_event) {
+                    /* If the layout's addGrab* values are defined, process this event only if the event occured inside grab area */
+                    mcfboolean in_grab_area = TRUE;
+/*                    if((layout->addGrabLeft != NOT_USED && x < -(layout->addGrabLeft)) ||
+                       (layout->addGrabRight != NOT_USED && x > (pressedCtx->width + layout->addGrabRight)) ||
+                       (layout->addGrabTop != NOT_USED && y < -(layout->addGrabTop)) ||
+                       (layout->addGrabBottom != NOT_USED && y > (pressedCtx->height + layout->addGrabBottom))) {
+                        in_grab_area = FALSE;
+                    }
+*/
+                    if(in_grab_area) {
+                        McfLayoutKeyCoordination *coord = cache->get_cur_layout_key_coordination(pressedWindow, pressedKey);
+                        if(coord) {
+                            x = coord->x + (coord->width / 2);
+                            y = coord->y + (coord->height / 2);
+
+                            for (int loop = 0;loop < MAX_KEY && !ended;loop++) {
+                                McfButtonContext *btncontext = cache->get_cur_button_context(pressedWindow, loop);
+                                const McfLayoutKeyConfigure *configure = cache->get_cur_layout_key_configure(window, loop);
+                                if (btncontext && configure) {
+                                    if (!(btncontext->used)) {
+                                        ended = TRUE;
+                                    } else if (btncontext->state != BUTTON_STATE_DISABLED &&
+                                                configure->buttonType != BUTTON_TYPE_UIITEM) {
+                                        if (process_button_release_event(pressedWindow, x, y, loop, touchid)) {
+                                            ret = TRUE;
+                                            ended = TRUE;
+                                        }
+                                    }
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+        }
+
+        McfButtonContext *btncontext = cache->get_cur_button_context(pressedWindow, pressedKey);
+        const McfLayoutKeyCoordination *coordination = cache->get_cur_layout_key_coordination(pressedWindow, pressedKey);
+        const McfLayoutKeyConfigure *configure = cache->get_cur_layout_key_configure(pressedWindow, pressedKey);
+
+        /* FIXME : The rule below would not be a general requirement. A policy is needed regarding this. */
+        /* Ignore base window's release event if a popup window is opened */
+        if (state->get_cur_action_state() == ACTION_STATE_POPUP_INIT ||
+            state->get_cur_action_state() == ACTION_STATE_POPUP_PRESS ||
+            state->get_cur_action_state() == ACTION_STATE_POPUP_MOVING ||
+            state->get_cur_action_state() == ACTION_STATE_POPUP_RELEASE ||
+            state->get_cur_action_state() == ACTION_STATE_POPUP_REPEATKEY ||
+            state->get_cur_action_state() == ACTION_STATE_POPUP_LONGKEY) {
+            if (windows->is_base_window(window)) {
+                ended = TRUE;
+                /* In case of direction button, the release event on other window should be processed */
+                if(configure && winctx && pressedCtx) {
+                    if(configure->buttonType == BUTTON_TYPE_DIRECTION) {
+                        mcfint relx = (winctx->x + x) - pressedCtx->x;
+                        mcfint rely = (winctx->y + y) - pressedCtx->y;
+                        if (process_button_release_event(pressedWindow, relx, rely, pressedKey, touchid)) {
+                            btnIndex = pressedKey;
+                            ret = TRUE;
+                            x = coordination->x + (coordination->width / 2);
+                            y = coordination->y + (coordination->height / 2);
+                            skipwindow = pressedWindow;
+                        }
+                    }
+                }
+            }
+        }
+
+        MultiTouchContext *mulctx = context->find_multi_touch_context(touchid);
+        if(mulctx) {
+            if(!(mulctx->mIsSubEvent)) {
+                /* First check if the event occured in pressed key's threshold area */
+                if (btncontext && coordination && !ended) {
+                    if (btncontext->used && btncontext->state != BUTTON_STATE_DISABLED) {
+                        if (process_button_release_event(pressedWindow, x, y, pressedKey, touchid)) {
+                            btnIndex = pressedKey;
+                            ret = TRUE;
+                            x = coordination->x + (coordination->width / 2);
+                            y = coordination->y + (coordination->height / 2);
+                        }
+                    }
+                }
+                for (int loop = 0;loop < MAX_KEY && !ended;loop++) {
+                    McfButtonContext *btncontext = cache->get_cur_button_context(window, loop);
+                    const McfLayoutKeyConfigure *configure = cache->get_cur_layout_key_configure(window, loop);
+                    if (btncontext && configure) {
+                        if (!(btncontext->used)) {
+                            ended = TRUE;
+                        } else if (btncontext->state != BUTTON_STATE_DISABLED &&
+                                    configure->buttonType != BUTTON_TYPE_UIITEM) {
+                            if (window != pressedWindow || loop != pressedKey) {
+                                if (process_button_release_event(window, x, y, loop, touchid)) {
+                                    btnIndex = loop;
+                                    ret = TRUE;
+                                }
+                            }
+                        }
+                    }
+                }
+            } else {
+                McfKeyEventDesc keyEventDesc = {0};
+                keyEventDesc.keyValue = NULL;
+                keyEventDesc.keyEvent = NOT_USED;
+                keyEventDesc.keyModifier = KEY_MODIFIER_NONE;
+                keyEventDesc.touchid = touchid;
+                keyEventDesc.mousePressedPt = context->get_cur_pressed_point(touchid);
+                keyEventDesc.mouseCurrentPt = context->get_cur_move_point(touchid);
+                keyEventDesc.mouseFarthestPt = context->get_farthest_move_point(touchid);
+
+                keyEventDesc.touch_event_order = context->get_multi_touch_event_order(touchid);
+
+                if(mEventCallback) {
+                    mEventCallback->on_event_key_clicked(keyEventDesc);
+                }
+            }
+        }
+
+        /* For covering a missing area about 1 pixel */
+        if (!ret) {
+            ended = FALSE;
+
+            if (state->get_cur_action_state() == ACTION_STATE_POPUP_INIT ||
+                state->get_cur_action_state() == ACTION_STATE_POPUP_PRESS ||
+                state->get_cur_action_state() == ACTION_STATE_POPUP_MOVING ||
+                state->get_cur_action_state() == ACTION_STATE_POPUP_RELEASE ||
+                state->get_cur_action_state() == ACTION_STATE_POPUP_REPEATKEY ||
+                state->get_cur_action_state() == ACTION_STATE_POPUP_LONGKEY) {
+                if (windows->is_base_window(window)) {
+                    ended = TRUE;
+                }
+            }
+
+            for (int loop = 0;loop < MAX_KEY && !ended;loop++) {
+                McfButtonContext *btncontext = cache->get_cur_button_context(window, loop);
+                if (btncontext && configure) {
+                    if (!(btncontext->used)) {
+                        ended = TRUE;
+                        break;
+                    } else if (btncontext->state != BUTTON_STATE_DISABLED &&
+                               configure->buttonType != BUTTON_TYPE_UIITEM) {
+                        if (process_button_release_event(window, x+1, y+1, loop, touchid)) {
+                            btnIndex = loop;
+                            ret = TRUE;
+                            break;
+                        }
+                    }
+                }
+            }
+        }
+
+        if (windows->is_base_window(window)) {
+            state->set_cur_action_state(ACTION_STATE_BASE_INIT);
+        } else {
+            state->set_cur_action_state(ACTION_STATE_POPUP_INIT);
+        }
+
+        /* Restore previously pressed button's context and redraw it */
+        if (btncontext && coordination) {
+            btncontext->state = BUTTON_STATE_NORMAL;
+         }
+
+        /* If there is postponed update of button, update it now */
+        CMCFEvents *events = CMCFEvents::get_instance();
+        mcfwindow lastWin = context->get_last_pressed_window();
+        mcf8 lastKey = context->get_last_pressed_key();
+        if (lastWin != MCFWINDOW_INVALID && lastKey != NOT_USED) {
+            const McfLayoutKeyCoordination* coords = cache->get_cur_layout_key_coordination(lastWin, lastKey);
+            if (coords) {
+                windows->update_window(lastWin, coords->x, coords->y, coords->width, coords->height);
+            }
+        }
+
+        /* To postpone some of the feedback for releasing */
+        context->set_last_pressed_key(context->get_cur_pressed_key(touchid));
+        context->set_last_pressed_window(context->get_cur_pressed_window(touchid));
+
+        /* Do what has to be done when mouse gets released */
+        mcfboolean signaled = FALSE;
+        if (configure) {
+            switch (configure->popupType) {
+            case POPUP_TYPE_BTN_RELEASE_POPUP:
+            case POPUP_TYPE_CONTEXT_POPUP:
+            case POPUP_TYPE_BTN_RELEASE_POPUP_ONCE:
+            case POPUP_TYPE_BTN_LONGPRESS_POPUP:
+            case POPUP_TYPE_BTN_LONGPRESS_POPUP_ONCE:
+                /* Fix me : We should consider z-order */
+                skipwindow = windows->get_nth_window_in_Z_order_list(MCF_WINDOW_Z_TOP);
+                handle_engine_signal(MCF_SIG_MOUSE_RELEASE, skipwindow);
+                signaled = TRUE;
+                break;
+            }
+        }
+        if (!signaled) {
+            McfWindowContext *ctx = windows->get_window_context(window, FALSE);
+            if (ctx) {
+                if (ctx->popuptype == POPUP_TYPE_BTN_RELEASE_POPUP ||
+                    ctx->popuptype == POPUP_TYPE_BTN_LONGPRESS_POPUP) {
+                    /* Don't close window if the clicked button is a child of ReleasePopup window */
+                    skipwindow = window;
+                    handle_engine_signal(MCF_SIG_MOUSE_RELEASE, window);
+                    signaled = TRUE;
+                }
+            }
+            if (!signaled) {
+                handle_engine_signal(MCF_SIG_MOUSE_RELEASE);
+            }
+        }
+
+        context->set_cur_pressed_key(touchid, NOT_USED);
+        context->set_cur_pressed_window(touchid, MCFWINDOW_INVALID);
+
+        if (ret && btnIndex != NOT_USED) {
+            const McfLayoutKeyProperties *properties = cache->get_cur_layout_key_properties(window, btnIndex);
+            if (properties) {
+                if (properties->dontClosePopup) {
+                    skipwindow = windows->get_nth_window_in_Z_order_list(MCF_WINDOW_Z_TOP);
+                }
+            }
+        } else {
+            if(pressedWindow == windows->get_nth_window_in_Z_order_list(MCF_WINDOW_Z_TOP)) {
+                if(pressedCtx) {
+                    if(pressedCtx->popuptype != POPUP_TYPE_BTN_RELEASE_POPUP_ONCE &&
+                       pressedCtx->popuptype != POPUP_TYPE_BTN_LONGPRESS_POPUP_ONCE &&
+                       pressedCtx->popuptype != POPUP_TYPE_AUTO_POPUP &&
+                       pressedCtx->popuptype != POPUP_TYPE_BTN_PRESS_POPUP_DRAG &&
+                       pressedCtx->popuptype != POPUP_TYPE_CONTEXT_POPUP) {
+                       skipwindow = pressedWindow;
+                    }
+                }
+            }
+        }
+        windows->close_all_popups(skipwindow);
+
+        /* Destroy key related timers */
+        events->destroy_timer(MCF_TIMER_AUTOPOPUP);
+        events->destroy_timer(MCF_TIMER_SHORT_LONGKEY);
+        events->destroy_timer(MCF_TIMER_LONGKEY);
+        events->destroy_timer(MCF_TIMER_REPEATKEY);
+
+        /* To postpone some of the feedback for releasing */
+        events->create_timer(MCF_TIMER_BUTTON_DELAY, mButtonDelayDuration, 0);
+    }
+
+    if(context) {
+        if(touchid == context->get_last_touch_device_id()) {
+            context->set_last_touch_device_id(MCFTOUCHDEVICE_INVALID);
+        }
+        context->destroy_multi_touch_context(touchid);
+    }
+
+    return ret;
+}
+
+mcfboolean
+CMCFController::mouse_move(mcfwindow window, mcfint x, mcfint y, mcftouchdevice touchid)
+{
+    MCF_DEBUG();
+    mcfboolean ret = FALSE;
+
+    if(mInputEventsDisabled)
+       return FALSE;
+
+    /* Adjust x,y coordination by touch offset */
+    CMCFErrorAdjustment *adjustment = CMCFErrorAdjustment::get_instance();
+    /* Iterate all the buttons and inform the event */
+
+    CMCFContext *context = CMCFContext::get_instance();
+    CMCFResourceCache *cache = CMCFResourceCache::get_instance();
+    CMCFActionState *state = CMCFActionState::get_instance();
+    CMCFWindows *windows = CMCFWindows::get_instance();
+    CMCFEvents *events = CMCFEvents::get_instance();
+    CMCFUtils *utils = CMCFUtils::get_instance();
+
+    if (cache && state && windows && context && utils && adjustment) {
+        if(!(context->find_multi_touch_context(touchid))) {
+               return FALSE;
+        }
+
+        MCFDisplay currDisplay = context->get_display();
+        adjustment->apply_touch_offset(mcf_default_configure.touchOffsetLevel[currDisplay], &x, &y);
+
+        McfWindowContext *winctx = windows->get_window_context(window, FALSE);
+        /* Adjust event x and y positions as relative position to the virtual window */
+        if(winctx) {
+            /* If the dim window is virtual and currently active, let's just skip this event */
+            if(windows->is_base_window(window)) {
+                McfWindowContext *dimctx = windows->get_window_context(windows->get_dim_window());
+                if(dimctx) {
+                    if(dimctx->isVirtual && !(dimctx->hidden)) {
+                        return FALSE;
+                    }
+                }
+            }
+            /* If the pressed event was occured in dim window, let's just skip this move event */
+            if(context->get_last_pressed_window() == windows->get_dim_window()) {
+                return FALSE;
+            }
+        }
+
+        context->set_cur_move_point(touchid, x, y);
+        context->set_cur_move_window(touchid, window);
+
+        /* If in longkey state, do not process, just return */
+        if (state->get_cur_action_state() == ACTION_STATE_BASE_LONGKEY ||
+            state->get_cur_action_state() == ACTION_STATE_BASE_REPEATKEY ||
+            state->get_cur_action_state() == ACTION_STATE_POPUP_LONGKEY ||
+            state->get_cur_action_state() == ACTION_STATE_POPUP_REPEATKEY) {
+            return FALSE;
+        }
+        /* FIXME : The rule below would not be a general requirement. A policy is needed regarding this. */
+        /* And if the event occured in popup window, don't come back to base window */
+        if (state->get_cur_action_state() == ACTION_STATE_POPUP_INIT ||
+            state->get_cur_action_state() == ACTION_STATE_POPUP_PRESS ||
+            state->get_cur_action_state() == ACTION_STATE_POPUP_MOVING ||
+            state->get_cur_action_state() == ACTION_STATE_POPUP_RELEASE ||
+            state->get_cur_action_state() == ACTION_STATE_POPUP_REPEATKEY ||
+            state->get_cur_action_state() == ACTION_STATE_POPUP_LONGKEY) {
+            if (windows->is_base_window(window)) {
+                return FALSE;
+            }
+        }
+
+        /* FIXME : Add a condition to skip this code if longkey timer is not active */
+        /* If the mouse has moved out of threshold value of longkey keypress area, destroy longkey timer */
+        if(mLongkeyCancelDist > 0) {
+            mcffloat dist = utils->get_distance(x, y,
+                                                context->get_cur_pressed_point(touchid).x,
+                                                context->get_cur_pressed_point(touchid).y);
+            if(mLongkeyCancelDist < dist) {
+                events->destroy_timer(MCF_TIMER_LONGKEY);
+            }
+        }
+
+        if (windows->is_base_window(window)) {
+            state->set_cur_action_state(ACTION_STATE_BASE_MOVING);
+        } else {
+            state->set_cur_action_state(ACTION_STATE_POPUP_MOVING);
+        }
+
+        /* Iterate all the buttons and inform the event */
+        mcfboolean ended = FALSE;
+        mcfwindow pressedWindow = context->get_cur_pressed_window(touchid);
+        mcf8 pressedKey = context->get_cur_pressed_key(touchid);
+        McfButtonContext *btncontext = cache->get_cur_button_context(pressedWindow, pressedKey);
+        const McfLayoutKeyCoordination *coordination = cache->get_cur_layout_key_coordination(pressedWindow, pressedKey);
+
+        /* Check farthest move point and update it */
+        mcfint originx = x;
+        mcfint originy = y;
+        if(pressedWindow != window) {
+            McfWindowContext *pressedwinctx = windows->get_window_context(pressedWindow, FALSE);
+            if(winctx && pressedwinctx) {
+                originx = (winctx->x - pressedwinctx->x) + x;
+                originy = (winctx->y - pressedwinctx->y) + y;
+            }
+        }
+        mcfint deltax = originx - context->get_cur_pressed_point(touchid).x;
+        mcfint deltay = originy - context->get_cur_pressed_point(touchid).y;
+        mcffloat dist = utils->get_approximate_distance(originx, originy,
+                                                        context->get_cur_pressed_point(touchid).x,
+                                                        context->get_cur_pressed_point(touchid).y);
+        CMCFUtils *utils = CMCFUtils::get_instance();
+        /* Do not check farthest move point if current drag state is MCF_DRAG_STATE_RETURN */
+        if(context->get_cur_drag_state(touchid) != MCF_DRAG_STATE_RETURN) {
+            if(dist > context->get_farthest_move_dist(touchid)) {
+               context->set_farthest_move_point(touchid, originx, originy);
+            }
+        }
+
+        /* Check if we should recognize drag curve */
+        const McfLayoutKeyConfigure *configure = cache->get_cur_layout_key_configure(pressedWindow, pressedKey);
+        const McfLayoutKeyProperties *properties = cache->get_cur_layout_key_properties(pressedWindow, pressedKey);
+        if(configure && properties) {
+            mcfboolean dragStateChanged = FALSE;
+            if(configure->buttonType == BUTTON_TYPE_DIRECTION) {
+                MCFDragState curDragState = context->get_cur_drag_state(touchid);
+                MCFDragState nextDragState = MCF_DRAG_STATE_NONE;
+                mcffloat direction_recog_dist = MCF_DIRECTION_RECOG_DIST;
+                if(configure->fIsSideButton) {
+                    direction_recog_dist = MCF_DIRECTION_RECOG_DIST_SIDE;
+                };
+                if(curDragState == MCF_DRAG_STATE_RETURN) {
+                    direction_recog_dist *= MCF_DRAG_RETURN_RECOG_THRESHOLD_RETURN;
+                } else if(curDragState != MCF_DRAG_STATE_NONE) {
+                    direction_recog_dist *= MCF_DRAG_RETURN_RECOG_THRESHOLD_OTHER;
+                }
+                if(dist > direction_recog_dist) {
+                    mcffloat ratio = fabs((mcffloat)deltay / (deltax ? deltax : 1));
+                    /* If tan(theta) is smaller than our predefined value */
+                    if(ratio <= (1 / MCF_DRAG_CURVE_4_DIRECTION_ANGLE_VALUE)) {
+                        if(deltax > 0) {
+                            nextDragState = MCF_DRAG_STATE_RIGHT;
+                        } else {
+                            nextDragState = MCF_DRAG_STATE_LEFT;
+                        }
+                    } /* If tan(theta) is bigger than our predefined value */
+                    else if(ratio >= MCF_DRAG_CURVE_4_DIRECTION_ANGLE_VALUE) {
+                        if(deltay > 0) {
+                            nextDragState = MCF_DRAG_STATE_DOWN;
+                        } else {
+                            nextDragState = MCF_DRAG_STATE_UP;
+                        }
+                    } else {
+                        nextDragState = MCF_DRAG_STATE_INVALID;
+                    }
+                    /* Disable longkey if dragging is recognized */
+                    events->destroy_timer(MCF_TIMER_LONGKEY);
+                }
+                if(curDragState != nextDragState) {
+                    dragStateChanged = TRUE;
+                }
+                if(curDragState == MCF_DRAG_STATE_NONE) {
+                        curDragState = nextDragState;
+                } else if(curDragState != nextDragState) {
+                    if(properties->extraOption == DIRECTION_EXTRA_OPTION_4_DIRECTIONS_WITH_RETURN_AND_CURVE &&
+                       nextDragState != MCF_DRAG_STATE_NONE) {
+                       curDragState = MCF_DRAG_STATE_INVALID;
+                    } else {
+                        if(nextDragState == MCF_DRAG_STATE_NONE) {
+                           curDragState = MCF_DRAG_STATE_RETURN;
+                        } else {
+                           curDragState = nextDragState;
+
+                            /* Let's save our drag state if the drag state changes to RETURN */
+                            if(curDragState == MCF_DRAG_STATE_RETURN) {
+                               context->set_prev_drag_state(touchid, context->get_cur_drag_state(touchid));
+                            }
+                        }
+                    }
+                }
+
+                /* Let's add one more condition for checking return state - if the drag action goes backward*/
+                if(curDragState == context->get_prev_drag_state(touchid) ||
+                   context->get_prev_drag_state(touchid) == MCF_DRAG_STATE_NONE) {
+                    mcfint distFromFarthest =
+                               utils->get_approximate_distance(context->get_farthest_move_point(touchid).x,
+                                                                       context->get_farthest_move_point(touchid).y,
+                        context->get_cur_move_point(touchid).x, context->get_cur_move_point(touchid).y);
+                    if(distFromFarthest > MCF_DRAG_RETURN_RECOG_DIST_BACKWARD) {
+                        mcffloat theta_from_farthest = 0.0f;
+                        mcffloat theta_to_farthest = 0.0f;
+                        McfPoint delta_from_farthest;
+                        McfPoint delta_to_farthest;
+                        delta_from_farthest.x =
+                            context->get_cur_move_point(touchid).x - context->get_farthest_move_point(touchid).x;
+                        delta_from_farthest.y =
+                            context->get_cur_move_point(touchid).y - context->get_farthest_move_point(touchid).y;
+                        delta_to_farthest.x =
+                            context->get_farthest_move_point(touchid).x - context->get_cur_pressed_point(touchid).x;
+                        delta_to_farthest.y =
+                            context->get_farthest_move_point(touchid).y - context->get_cur_pressed_point(touchid).y;
+                        /* For the case of divide by zero situation */
+                        if(delta_from_farthest.x == 0) {
+                               delta_from_farthest.x = 1;
+                        }
+                        if(delta_to_farthest.x == 0) {
+                               delta_to_farthest.x = 1;
+                        }
+                        theta_from_farthest = atan2((mcffloat)delta_from_farthest.y, (mcffloat)delta_from_farthest.x);
+                        theta_to_farthest = atan2((mcffloat)delta_to_farthest.y, (mcffloat)delta_to_farthest.x);
+
+                        /* If the direction is different */
+                        const mcffloat threshold_angle = MCF_DRAG_RETURN_RECOG_ANGLE_BACKWARD;
+                        if(fabs(theta_to_farthest - theta_from_farthest) > M_PI - threshold_angle &&
+                           fabs(theta_to_farthest - theta_from_farthest) < M_PI + threshold_angle) {
+                           curDragState = MCF_DRAG_STATE_RETURN;
+                           if(context->get_cur_drag_state(touchid) != MCF_DRAG_STATE_RETURN) {
+                              context->set_prev_drag_state(touchid, context->get_cur_drag_state(touchid));
+                           }
+                        }
+                    }
+                }
+
+                if(context->get_cur_drag_state(touchid) == MCF_DRAG_STATE_RETURN && curDragState != MCF_DRAG_STATE_RETURN) {
+                    if(curDragState == context->get_prev_drag_state(touchid)) {
+                        if(curDragState == MCF_DRAG_STATE_LEFT) {
+                            if(context->get_cur_move_point(touchid).x > context->get_farthest_move_point(touchid).x) {
+                               curDragState = MCF_DRAG_STATE_RETURN;
+                            }
+                        }
+                        if(curDragState == MCF_DRAG_STATE_RIGHT) {
+                            if(context->get_cur_move_point(touchid).x < context->get_farthest_move_point(touchid).x) {
+                               curDragState = MCF_DRAG_STATE_RETURN;
+                            }
+                        }
+                        if(curDragState == MCF_DRAG_STATE_UP) {
+                            if(context->get_cur_move_point(touchid).y > context->get_farthest_move_point(touchid).y) {
+                               curDragState = MCF_DRAG_STATE_RETURN;
+                            }
+                        }
+                        if(curDragState == MCF_DRAG_STATE_DOWN) {
+                            if(context->get_cur_move_point(touchid).y < context->get_farthest_move_point(touchid).y) {
+                               curDragState = MCF_DRAG_STATE_RETURN;
+                            }
+                        }
+                    }
+                }
+
+                if(context->get_cur_drag_state(touchid) == MCF_DRAG_STATE_RETURN && curDragState != MCF_DRAG_STATE_RETURN) {
+                    /* Reset farthest point if the state goes from return to simple drag */
+                    context->set_farthest_move_point(touchid,
+                        context->get_cur_pressed_point(touchid).x, context->get_cur_pressed_point(touchid).y);
+                    if(curDragState != context->get_prev_drag_state(touchid)) {
+                        context->set_prev_drag_state(touchid, MCF_DRAG_STATE_NONE);
+                    }
+                }
+                context->set_cur_drag_state(touchid, curDragState);
+                mcfboolean check_farthest = FALSE;
+                mcfshort display = context->get_display();
+                if(!mcf_check_arrindex(display, MCFDISPLAY_MAX)) display = 0;
+                mcffloat dist = utils->get_distance(originx, originy,
+                    context->get_cur_pressed_point(touchid).x, context->get_cur_pressed_point(touchid).y);
+                if(dist < direction_recog_dist && context->get_cur_drag_state(touchid) == MCF_DRAG_STATE_RETURN) {
+                    if(properties->extraOption == DIRECTION_EXTRA_OPTION_8_DIRECTIONS_WITH_RETURN ||
+                       properties->extraOption == DIRECTION_EXTRA_OPTION_4_DIRECTIONS_WITH_RETURN ||
+                       properties->extraOption == DIRECTION_EXTRA_OPTION_4_DIRECTIONS_WITH_RETURN_AND_CURVE) {
+                       deltax = context->get_farthest_move_point(touchid).x -
+                                context->get_cur_pressed_point(touchid).x;
+                       deltay = context->get_farthest_move_point(touchid).y -
+                                context->get_cur_pressed_point(touchid).y;
+                       dist = utils->get_distance(context->get_farthest_move_point(touchid),
+                                context->get_cur_pressed_point(touchid));
+                       check_farthest = TRUE;
+                    }
+                }
+                MCFKeyModifier keyModifier = get_drag_key_modifier(deltax, deltay, dist,
+                                                                   check_farthest, touchid, properties->extraOption);
+                if (dist > direction_recog_dist) {
+                    context->set_cur_key_modifier(touchid, keyModifier);
+                }
+                /* If this button needs to be decorated when dragged */
+                if(properties->modifierDecorationId) {
+                    const McfModifierDecoration  *decoration = NULL;
+                    if(mcf_check_arrindex(properties->modifierDecorationId,
+                        sizeof(mcf_modifier_decoration) / sizeof(McfModifierDecoration ))) {
+                            decoration = &(mcf_modifier_decoration[properties->modifierDecorationId]);
+                    }
+                    /* Check if the button really needs to be redrawn (whether it has non-null bgImgPath information */
+                    if(decoration) {
+                        if(keyModifier != prevModifier) {
+                            if(decoration->bgImgPath[display][keyModifier]) {
+                                windows->update_window(window,
+                                                       coordination->x, coordination->y,
+                                                       coordination->width, coordination->height);
+                            }
+                        }
+                    }
+                }
+                if (dist > direction_recog_dist) {
+                    McfKeyEventDesc desc = {0};
+                    MCFShiftState shiftidx = context->get_shift_state();
+                    desc.keyType = configure->keyType;
+                    desc.keyValue = properties->keyValue[shiftidx][0];
+                    desc.keyEvent = properties->keyEvent[shiftidx][0];
+                    desc.mousePressedPt = context->get_cur_pressed_point(touchid);
+                    desc.mouseCurrentPt = context->get_cur_move_point(touchid);
+                    desc.mouseFarthestPt = context->get_farthest_move_point(touchid);
+                    desc.keyModifier = keyModifier;
+                }
+            }
+        }
+
+        mcfboolean grab_event = FALSE;
+        const McfLayout *layout = cache->get_cur_layout(window);
+        if(layout) {
+            if(layout->style == LAYOUT_STYLE_POPUP_GRAB) {
+                grab_event = TRUE;
+            }
+            /* If the topmost window has the POPUP_GRAB style, find the nearest button to the mouse pointer */
+            if(grab_event) {
+                /* If the layout's addGrab* values are defined, process this event only if the event occured inside grab area */
+                mcfboolean in_grab_area = TRUE;
+                if(layout->addGrabLeft != NOT_USED && x < -(layout->addGrabLeft)) {
+                    in_grab_area = FALSE;
+                }
+                if(layout->addGrabRight != NOT_USED && x > (winctx->width + layout->addGrabRight)) {
+                    in_grab_area = FALSE;
+                }
+                if(layout->addGrabTop != NOT_USED && y < -(layout->addGrabTop)) {
+                    in_grab_area = FALSE;
+                }
+                if(layout->addGrabBottom != NOT_USED && y > (winctx->height + layout->addGrabBottom)) {
+                    in_grab_area = FALSE;
+                }
+                if(in_grab_area) {
+                    CMCFResourceCache *cache = CMCFResourceCache::get_instance();
+                    if(cache) {
+                        float min_dist = (float)((unsigned int)(-1));
+                        int min_dist_index = NOT_USED;
+                        for (int loop = 0;loop < MAX_KEY && !ended && !ret;loop++) {
+                            btncontext = cache->get_cur_button_context(window, loop);
+                            const McfLayoutKeyConfigure *configure = cache->get_cur_layout_key_configure(window, loop);
+                            if (btncontext && configure) {
+                                if (!(btncontext->used)) {
+                                    ended = TRUE;
+                                } else if (btncontext->state != BUTTON_STATE_DISABLED &&
+                                           configure->buttonType != BUTTON_TYPE_UIITEM) {
+                                        const McfLayoutKeyCoordination *coordination =
+                                                       cache->get_cur_layout_key_coordination(window, loop);
+                                        float dist = utils->get_approximate_distance(x, y,
+                                                                                     coordination->x + (coordination->width / 2),
+                                                                                     coordination->y + (coordination->height / 2));
+                                        if(dist < min_dist) {
+                                            min_dist_index = loop;
+                                            min_dist = dist;
+                                        }
+                                }
+                            }
+                        }
+                        /* When we found the nearest button, generate this event on the button */
+                        if(min_dist_index != NOT_USED) {
+                            const McfLayoutKeyCoordination *coordination = cache->get_cur_layout_key_coordination(window,
+                                                                                                                     min_dist_index);
+                            x = coordination->x + (coordination->width / 2);
+                            y = coordination->y + (coordination->height / 2);
+                            if (process_button_move_event(window, x, y, min_dist_index, touchid)) {
+                                ret = TRUE;
+                            }
+                        }
+                    }
+                }
+            } else {
+                MultiTouchContext *mulctx = context->find_multi_touch_context(touchid);
+                if(mulctx) {
+                    if(!(mulctx->mIsSubEvent)) {
+                        /* First check if the event occured in pressed key's threshold area */
+                        if (btncontext && coordination) {
+                            if (pressedWindow == window) { // Check only when the window is the one initally pressed
+                                if (btncontext->used && btncontext->state != BUTTON_STATE_DISABLED) {
+                                    if (process_button_move_event(pressedWindow, x, y, pressedKey, touchid)) {
+                                        ret = TRUE;
+                                        x = coordination->x + (coordination->width / 2);
+                                        y = coordination->y + (coordination->height / 2);
+                                    }
+                                }
+                            }
+                        }
+                        for (int loop = 0;loop < MAX_KEY && !ended && !ret;loop++) {
+                            btncontext = cache->get_cur_button_context(window, loop);
+                            const McfLayoutKeyConfigure *configure = cache->get_cur_layout_key_configure(window, loop);
+                            if (btncontext && configure) {
+                                if (!(btncontext->used)) {
+                                    ended = TRUE;
+                                } else if (btncontext->state != BUTTON_STATE_DISABLED &&
+                                           configure->buttonType != BUTTON_TYPE_UIITEM) {
+                                    if (window != pressedWindow || loop != pressedKey) {
+                                        if (process_button_move_event(window, x, y, loop, touchid)) {
+                                            ret = TRUE;
+                                        }
+                                    }
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+        }
+    }
+
+    return ret;
+}
+
+/**
+ * Processes a timer event
+ * If return FALSE, the current timer will be stop
+ * ID : MCF_LOWORD(data)
+ * value : MCF_HIWORD(data)
+ */
+mcfboolean
+CMCFController::timer_event(const mcf32 data)
+{
+    MCF_DEBUG();
+    CMCFWindows *windows = CMCFWindows::get_instance();
+    CMCFContext *context = CMCFContext::get_instance();
+    CMCFEvents* events = CMCFEvents::get_instance();
+    CMCFActionState *state = CMCFActionState::get_instance();
+    CMCFResourceCache *cache = CMCFResourceCache::get_instance();
+    CMCFUtils *utils = CMCFUtils::get_instance();
+
+    mcf16 id = MCF_LOWORD(data); /* Timer ID */
+    mcf16 value = MCF_HIWORD(data); /* event unique ID */
+
+    switch (id) {
+    case MCF_TIMER_AUTOPOPUP: {
+        /* Checks whether my event id is availble */
+        if (context->get_cur_pressed_event_id(context->get_last_touch_device_id()) != value ||
+            state->get_cur_action_state() == ACTION_STATE_BASE_INIT ||
+            state->get_cur_action_state() == ACTION_STATE_BASE_RELEASE ||
+            state->get_cur_action_state() == ACTION_STATE_BASE_LONGKEY ||
+            state->get_cur_action_state() == ACTION_STATE_BASE_REPEATKEY ||
+            state->get_cur_action_state() == ACTION_STATE_POPUP_INIT ||
+            state->get_cur_action_state() == ACTION_STATE_POPUP_RELEASE ||
+            state->get_cur_action_state() == ACTION_STATE_POPUP_LONGKEY ||
+            state->get_cur_action_state() == ACTION_STATE_POPUP_REPEATKEY) {
+            /* Ignores if the event id is different */
+            return FALSE;
+        }
+
+        McfRectangle rect = {0,};
+        mcfwindow window = context->get_cur_pressed_window(context->get_last_touch_device_id());
+        mcfbyte keyIndex = context->get_cur_pressed_key(context->get_last_touch_device_id());
+
+        McfButtonContext *btncontext = cache->get_cur_button_context(window, keyIndex);
+        if (btncontext->state == BUTTON_STATE_PRESSED) {
+            btncontext->state = BUTTON_STATE_NORMAL;
+            CMCFWindows *windows = CMCFWindows::get_instance();
+            if (windows) {
+                const McfLayoutKeyCoordination *coordination = cache->get_cur_layout_key_coordination(window, keyIndex);
+                windows->update_window(window, coordination->x, coordination->y, coordination->width, coordination->height);
+            }
+        }
+        if (configure_autopopup_window(window, keyIndex, &rect)) {
+            /* Currently, window does not support virtual window */
+            mcfwindow popup_window = windows->open_popup(window,
+                                                            keyIndex,
+                                                         rect.x,
+                                                         rect.y,
+                                                         rect.width,
+                                                         rect.height,
+                                                         MCF_LAYOUT_AUTOPOPUP,
+                                                         POPUP_TYPE_AUTO_POPUP,
+                                                         FALSE,
+                                                         FALSE);
+
+            const McfLayoutKeyCoordination* coordination = cache->get_cur_layout_key_coordination(window, keyIndex);
+            McfButtonContext *btncontext = cache->get_cur_button_context(window, keyIndex);
+
+                       mcfwindow move_window = context->get_cur_move_window(context->get_last_touch_device_id());
+                       McfPoint move_point = context->get_cur_move_point(context->get_last_touch_device_id());
+                       McfWindowContext *move_ctx = windows->get_window_context(move_window);
+                       McfWindowContext *popup_ctx = windows->get_window_context(popup_window);
+                       if(move_ctx && popup_ctx) {
+                               move_point.x = (move_ctx->x - popup_ctx->x) + move_point.x;
+                               move_point.y = (move_ctx->y - popup_ctx->y) + move_point.y;
+                       }
+                       printf("AUTOPOPUP : %d %d\n", move_point.x, move_point.y);
+
+                       /* Find the nearest button on the autopopup window */
+                       mcfboolean ended = FALSE;
+                       float min_dist = (float)((unsigned int)(-1));
+                       int min_dist_index = NOT_USED;
+                       for (int loop = 0;loop < MAX_KEY && !ended;loop++) {
+                               McfButtonContext *popup_btncontext = cache->get_cur_button_context(popup_window, loop);
+                               const McfLayoutKeyConfigure *popup_configure = cache->get_cur_layout_key_configure(popup_window, loop);
+                               if (popup_btncontext && popup_configure) {
+                                       if (!(popup_btncontext->used)) {
+                                               ended = TRUE;
+                                       } else if (popup_btncontext->state != BUTTON_STATE_DISABLED &&
+                                                      popup_configure->buttonType != BUTTON_TYPE_UIITEM) {
+                                                       const McfLayoutKeyCoordination *popup_coordination =
+                                                               cache->get_cur_layout_key_coordination(popup_window, loop);
+                                                       float dist = utils->get_approximate_distance(move_point.x, move_point.y,
+                                                                                                        popup_coordination->x + (popup_coordination->width / 2),
+                                                                                                        popup_coordination->y + (popup_coordination->height / 2));
+                                                       if(dist < min_dist) {
+                                                               min_dist_index = loop;
+                                                               min_dist = dist;
+                                                       }
+                                       }
+                               }
+                       }
+                       /* When we found the nearest button, make it pressed */
+                       if(min_dist_index != NOT_USED) {
+                               const McfLayoutKeyCoordination *popup_coordination =
+                                       cache->get_cur_layout_key_coordination(popup_window, min_dist_index);
+                               mcfint x = popup_coordination->x + (popup_coordination->width / 2);
+                               mcfint y = popup_coordination->y + (popup_coordination->height / 2);
+                               process_button_pressed_event(popup_window, x, y, min_dist_index, context->get_last_touch_device_id());
+                       }
+
+            context->set_cur_pressed_window(context->get_last_touch_device_id(), popup_window);
+            context->set_cur_pressed_key(context->get_last_touch_device_id(), min_dist_index);
+            if(btncontext) {
+                btncontext->state = BUTTON_STATE_NORMAL;
+            }
+
+            CMCFWindows *windows = CMCFWindows::get_instance();
+            if (windows) {
+                windows->update_window(window, coordination->x, coordination->y, coordination->width, coordination->height);
+            }
+        }
+        events->destroy_timer(id);
+        context->set_cur_pressed_window(context->get_last_touch_device_id(), MCFWINDOW_INVALID);
+        context->set_cur_pressed_key(context->get_last_touch_device_id(), NOT_USED);
+        return FALSE;
+    }
+    break;
+
+    case MCF_TIMER_LONGKEY: {
+        /* Checks whether my event id is availble */
+        if (context->get_cur_pressed_event_id(context->get_last_touch_device_id()) != value ||
+            state->get_cur_action_state() == ACTION_STATE_BASE_INIT ||
+            state->get_cur_action_state() == ACTION_STATE_BASE_RELEASE ||
+            state->get_cur_action_state() == ACTION_STATE_BASE_LONGKEY ||
+            state->get_cur_action_state() == ACTION_STATE_BASE_REPEATKEY ||
+            state->get_cur_action_state() == ACTION_STATE_POPUP_INIT ||
+            state->get_cur_action_state() == ACTION_STATE_POPUP_RELEASE ||
+            state->get_cur_action_state() == ACTION_STATE_POPUP_LONGKEY ||
+            state->get_cur_action_state() == ACTION_STATE_POPUP_REPEATKEY) {
+            /* Ignores if the event id is different */
+            return FALSE;
+        }
+        /* Ignores if the event id is different */
+        mcfwindow window = context->get_cur_pressed_window(context->get_last_touch_device_id());
+        mcfbyte keyindex = context->get_cur_pressed_key(context->get_last_touch_device_id());
+        if (process_button_long_pressed_event(window, keyindex, context->get_last_touch_device_id())) {
+            /* The button processed long key event, now enter longkey mode not to fire any events before releasing */
+            handle_engine_signal(MCF_SIG_MOUSE_LONG_PRESS, window);
+        } else {
+            /* Start the repeat key timer for NORMAL or GRAB buttons if longkey is not supported */
+            const McfLayoutKeyConfigure *configure = cache->get_cur_layout_key_configure(window, keyindex);
+            const McfLayoutKeyProperties *properties = cache->get_cur_layout_key_properties(window, keyindex);
+
+            if(configure && properties) {
+                /* This is for enabling backspace key in search layout*/
+                if (properties->useRepeatKey|| properties->keyEvent[0][0] == MVK_BackSpace) {
+                    if (configure->buttonType == BUTTON_TYPE_NORMAL ||
+                        configure->buttonType == BUTTON_TYPE_GRAB ||
+                        configure->buttonType == BUTTON_TYPE_DIRECTION) {
+                        mRepeatKeySeq = 0;
+                        events->create_timer(MCF_TIMER_REPEATKEY, mRepeatKeyDuration, value);
+                        if (windows->is_base_window(window)) {
+                            state->set_cur_action_state(ACTION_STATE_BASE_REPEATKEY);
+                        } else {
+                            state->set_cur_action_state(ACTION_STATE_POPUP_REPEATKEY);
+                        }
+                    }
+                }
+            }
+        }
+        events->destroy_timer(id);
+        return FALSE;
+    }
+    break;
+
+    case MCF_TIMER_REPEATKEY: {
+        /* Checks whether my event id is availble */
+        if (context->get_cur_pressed_event_id(context->get_last_touch_device_id()) != value ||
+            (state->get_cur_action_state() != ACTION_STATE_BASE_REPEATKEY &&
+            state->get_cur_action_state() != ACTION_STATE_POPUP_REPEATKEY)) {
+            /* Ignores if the event id is different */
+            return FALSE;
+        }
+        mcfwindow window = context->get_cur_pressed_window(context->get_last_touch_device_id());
+        mcfbyte keyIndex = context->get_cur_pressed_key(context->get_last_touch_device_id());
+        mcflong interval = mRepeatKeyDuration - (mRepeatKeySeq * MCF_REPEATKEY_ACCELERATION);
+        if (interval < MCF_REPEATKEY_MIN_DURATION) {
+            interval = MCF_REPEATKEY_MIN_DURATION;
+        }
+        process_button_repeat_pressed_event(window, keyIndex, context->get_last_touch_device_id());
+        events->destroy_timer(id);
+        events->create_timer(MCF_TIMER_REPEATKEY, interval, value);
+        mRepeatKeySeq++;
+        return FALSE;
+    }
+    break;
+    case MCF_TIMER_BUTTON_DELAY: {
+        /* If there is postponed update of button, update it now */
+        mcfwindow lastWin = context->get_last_pressed_window();
+        mcf8 lastKey = context->get_last_pressed_key();
+
+        if (lastWin != MCFWINDOW_INVALID && lastKey != NOT_USED) {
+            const McfLayoutKeyCoordination* coords = cache->get_cur_layout_key_coordination(lastWin, lastKey);
+            if (coords) {
+                windows->update_window(lastWin, coords->x, coords->y, coords->width, coords->height);
+            }
+        }
+
+        context->set_last_pressed_window(MCFWINDOW_INVALID);
+        context->set_last_pressed_key(NOT_USED);
+        events->destroy_timer(id);
+        return FALSE;
+    }
+    break;
+    case MCF_TIMER_POPUP_TIMEOUT: {
+        windows->close_all_popups();
+
+        if (mEventCallback) {
+            mEventCallback->on_event_notification(NOTITYPE_POPUP_TIMEOUT, data);
+        }
+        events->destroy_timer(id);
+        return FALSE;
+    }
+    break;
+    case MCF_TIMER_AUTOTEST: {
+        CMCFController *controller = CMCFController::get_instance();
+        CMCFResourceCache *cache = CMCFResourceCache::get_instance();
+        CMCFUtils *utils = CMCFUtils::get_instance();
+        MCFDisplay currDisplay =  context->get_display();
+
+        mcfint rnd = rand() % 100;
+        mcfint x = (rand() % (cache->get_cur_layout(windows->get_base_window())->width));
+        mcfint y = (rand() % (cache->get_cur_layout(windows->get_base_window())->height));
+
+        if(rnd < 80) {
+            events->generate_mouse_event(MCF_MOUSE_EVENT_PRESS, x, y);
+            events->generate_mouse_event(MCF_MOUSE_EVENT_RELEASE, x, y);
+        } else if(rnd < 90) {
+            events->generate_mouse_event(MCF_MOUSE_EVENT_MOVE, x, y);
+        } else if(rnd < 95) {
+            events->generate_mouse_event(MCF_MOUSE_EVENT_PRESS, x, y);
+        } else {
+            events->generate_mouse_event(MCF_MOUSE_EVENT_RELEASE, x, y);
+        }
+
+        mDebugVariable++;
+        if (mDebugVariable < MCF_AUTOTEST_NUM) events->create_timer(MCF_TIMER_AUTOTEST, MCF_AUTOTEST_TIMER_INTERVAL, 0, FALSE);
+        else mDebugMode = DEBUGMODE_DISABLED;
+        return FALSE;
+    }
+    break;
+
+    default: {
+        events->destroy_timer(id);
+    }
+    break;
+    }
+
+    return TRUE;
+}
+
+void
+CMCFController::set_event_callback(IMCFEventCallback *callback)
+{
+    MCF_DEBUG();
+
+    mcf_assert_return(callback);
+
+    mEventCallback = callback;
+}
+
+/* Handles signals to manage contexts mainly focusing on resetting variables and cleaning up states */
+void CMCFController::handle_engine_signal( McfInternalSignal signal, mcfwindow targetWindow )
+{
+    MCF_DEBUG();
+
+    enum SIGACTIONS {
+        SIGACTION_RESIZE_RESOURCES,
+        SIGACTION_DESTROY_TIMERS,
+        SIGACTION_CLEAR_PRIVATEKEYS,
+        SIGACTION_RECOMPUTE_LAYOUT,
+        SIGACTION_FREE_IMAGES,
+        SIGACTION_CLOSE_POPUP,
+        SIGACTION_UNSET_SHIFT,
+        SIGACTION_UNPRESS_KEYS,
+        SIGACTION_INIT_DISPLAY,
+        SIGACTION_INIT_INPUTMODE,
+
+        SIGACTION_MAXNUM
+    };
+    const mcfboolean SIGNAL_TABLE[SIGACTION_MAXNUM][MCF_SIG_MAXNUM] = {
+        //     START,  SHOW,   HIDE,   INPCHNG,        DISPCHNG,       POPUPSHOW,      POPUPHIDE,      MOUSEPRES,      M-LONGPRES,     MOUSEREL,       KEYEVT, FOCUSCHNG
+        // SIGACTION_RESIZE_RESOURCES
+        {      TRUE,   0,              0,              0,                      0,                      0,                      0,                      0,                      0,                      0,                      0,              0               },
+        // SIGACTION_DESTROY_TIMERS
+        {      TRUE,   TRUE,   TRUE,   TRUE,           TRUE,           0,                      0,                      0,                      0,                      0,                      0,              TRUE    },
+        // SIGACTION_CLEAR_PRIVATEKEYS
+        {      TRUE,   0,              0,              0,                      0,                      0,                      0,                      0,                      0,                      0,                      0,              TRUE    },
+        // SIGACTION_RECOMPUTE_LAYOUT
+        {      0,              TRUE,   0,              TRUE,           TRUE,           TRUE,           0,                      0,                      0,                      0,                      0,              TRUE    },
+        // SIGACTION_FREE_IMAGES
+        {      TRUE,   0,              TRUE,   TRUE,           TRUE,           0,                      0,                      0,                      0,                      0,                      0,              0               },
+        // SIGACTION_CLOSE_POPUP
+        {      TRUE,   TRUE,   TRUE,   TRUE,           TRUE,           0,                      0,                      0,                      0,                      0,                      0,              TRUE    },
+        // SIGACTION_UNSET_SHIFT
+        {      TRUE,   0       ,       0       ,       TRUE,           TRUE,           0,                      0,                      0,                      0,                      0,                      0,              TRUE    },
+        // SIGACTION_UNPRESS_KEYS
+        {      TRUE,   TRUE,   TRUE,   TRUE,           TRUE,           0,                      0,                      0,                      0,                      0,                      0,              TRUE    },
+        // SIGACTION_INIT_DISPLAY
+        {      TRUE,   0,              0,              0,                      0,                      0,                      0,                      0,                      0,                      0,                      0,              0               },
+        // SIGACTION_INIT_INPUTMODE
+        {      TRUE,   0,              0,              0,                      0,                      0,                      0,                      0,                      0,                      0,                      0,              TRUE    },
+    };
+
+    mcf_assert_return(signal >= 0 && signal < MCF_SIG_MAXNUM);
+
+    CMCFEvents* events = CMCFEvents::get_instance();
+    CMCFWindows *windows = CMCFWindows::get_instance();
+    CMCFContext *context = CMCFContext::get_instance();
+    CMCFImageProxy *proxy = CMCFImageProxy::get_instance();
+    CMCFResourceCache *cache = CMCFResourceCache::get_instance();
+
+    switch(signal) {
+        case MCF_SIG_SHOW:
+            {
+                context->set_hidden_state(FALSE);
+            }
+            break;
+        case MCF_SIG_HIDE:
+            {
+                context->set_hidden_state(TRUE);
+                windows->close_all_popups();
+            }
+            break;
+    }
+
+    int loop = 0;
+    for (loop = 0;loop < SIGACTION_MAXNUM;loop++) {
+        if (SIGNAL_TABLE[loop][signal] == TRUE) {
+            switch (loop) {
+            case SIGACTION_RESIZE_RESOURCES:
+                break;
+            case SIGACTION_DESTROY_TIMERS:
+                events->destroy_all_timer();
+                break;
+            case SIGACTION_CLEAR_PRIVATEKEYS:
+                break;
+            case SIGACTION_RECOMPUTE_LAYOUT: {
+                if (targetWindow != MCFWINDOW_INVALID) {
+                    cache->recompute_layout(targetWindow);
+                    // EFL testing
+                    windows->update_window(targetWindow);
+                }
+            }
+            break;
+            case SIGACTION_FREE_IMAGES:
+                proxy->free_images();
+                break;
+            case SIGACTION_CLOSE_POPUP: {
+                /* If there is a popup still opened, don't destroy POPUP_TIMEOUT timer */
+                if (!(windows->close_all_popups(targetWindow))) {
+                    events->destroy_timer(MCF_TIMER_POPUP_TIMEOUT);
+                }
+            }
+            break;
+            case SIGACTION_UNSET_SHIFT:
+                context->set_shift_state(MCF_SHIFT_STATE_OFF);
+                break;
+            case SIGACTION_UNPRESS_KEYS:
+                context->set_cur_pressed_key(context->get_last_touch_device_id(), NOT_USED);
+                context->set_cur_pressed_window(context->get_last_touch_device_id(), MCFWINDOW_INVALID);
+                break;
+            case SIGACTION_INIT_DISPLAY:
+                break;
+            case SIGACTION_INIT_INPUTMODE:
+                break;
+            }
+        }
+    }
+}
+
+/**
+ * Sets the duration value for longkey
+ * If not set, it will use default longkey duration. see mcfconfig
+ */
+mcfboolean
+CMCFController::set_longkey_duration(mcflong msc)
+{
+    MCF_DEBUG();
+    mcfboolean bRet = FALSE;
+    if(msc > 0) {
+        mLongkeyDuration = msc;
+        bRet = TRUE;
+    }
+    return bRet;
+}
+
+/**
+* Sets the distance value for cancel longkey
+* If not set, it will use default longkey duration. see mcfconfig
+*/
+mcfboolean
+CMCFController::set_longkey_cancel_dist(mcfshort dist)
+{
+    MCF_DEBUG();
+    mcfboolean bRet = FALSE;
+    if(dist > 0) {
+        mLongkeyCancelDist = dist;
+        bRet = TRUE;
+    }
+    return bRet;
+}
+
+/**
+* Sets the duration value for repeatkey
+* If not set, it will use default repeatkey duration. see mcfconfig
+*/
+mcfboolean
+CMCFController::set_repeatkey_duration(mcflong msc)
+{
+    MCF_DEBUG();
+    mcfboolean bRet = FALSE;
+    if(msc > 0) {
+        mRepeatKeyDuration = msc;
+        bRet = TRUE;
+    }
+    return bRet;
+}
+
+/**
+ * Sets the duration value for short longkey
+ * If not set, it will use default short longkey duration. see mcfconfig
+ */
+mcfboolean
+CMCFController::set_short_longkey_duration(mcflong msc)
+{
+    MCF_DEBUG();
+    mcfboolean bRet = FALSE;
+    if(msc > 0) {
+        mShortLongkeyDuration = msc;
+        bRet = TRUE;
+    }
+    return bRet;
+}
+
+/**
+ * Sets the amount value for button delay
+ * If not set, it will use default button delay amount. see mcfconfig
+ */
+mcfboolean
+CMCFController::set_button_delay_duration(mcflong msc)
+{
+    MCF_DEBUG();
+    mcfboolean bRet = FALSE;
+    if(msc > 0) {
+        mButtonDelayDuration = msc;
+        bRet = TRUE;
+    }
+    return bRet;
+}
+
+/**
+ * Configures the variables for auto-popup window
+ * It will return rectangle area
+ * @return FALSE It's not avaiable popup key
+ */
+mcfboolean
+CMCFController::configure_autopopup_window(mcfwindow window, mcfbyte keyindex, McfRectangle* rect)
+{
+    MCF_DEBUG();
+    mcf_assert_return_false(window);
+    mcf_assert_return_false(keyindex >= 0);
+
+    mcfboolean ret = TRUE;
+
+    mcfbyte numKeys, numColumns, numRows;
+
+    CMCFUtils *utils = CMCFUtils::get_instance();
+    CMCFContext *context = CMCFContext::get_instance();
+    CMCFWindows *windows = CMCFWindows::get_instance();
+    CMCFResourceCache *cache = CMCFResourceCache::get_instance();
+
+    const McfLayoutKeyCoordination *coordination = NULL;
+    const McfLayoutKeyProperties *properties = NULL;
+
+    if(cache) {
+        coordination = cache->get_cur_layout_key_coordination(window, keyindex);
+        properties = cache->get_cur_layout_key_properties(window, keyindex);
+    }
+
+    if(utils && context && windows && cache && properties && coordination && rect) {
+        MCFShiftState shiftidx = context->get_shift_state();
+        if(shiftidx < 0 || shiftidx >= MCF_SHIFT_STATE_MAX) shiftidx = MCF_SHIFT_STATE_OFF;
+        if (utils->get_autopopup_window_variables(properties->autopopupKeys[shiftidx],
+            &numKeys, &numColumns, &numRows, &rect->width, &rect->height)) {
+
+            /* There is no need for an autopopup window if number of keys are equal to or less than 1 */
+            if (!(numKeys > 0)) {
+                ret = FALSE;
+            }
+            /* calculates y position to be set */
+            McfRectangle baseWndRect;
+            int scrwidth, scrheight;
+            const McfLayout *layout = cache->get_cur_layout(windows->get_base_window());
+            utils->get_screen_resolution(&scrwidth, &scrheight);
+
+            windows->get_window_rect(windows->get_base_window(), &baseWndRect);
+            /* Let the autopopup have its position right above the pressed button, with center alignment) */
+            rect->x = baseWndRect.x + coordination->x + (coordination->width / 2) - (rect->width / 2);
+            rect->y = (scrheight - layout->height) + coordination->y - rect->height +
+                          utils->get_scale_y(mcf_autopopup_configure.wndDecoSize);
+            /* Check if the window goes out of screen boundary */
+            if (rect->x + rect->width > scrwidth) rect->x = (scrwidth) - rect->width;
+            if (rect->y + rect->height > scrheight) rect->y = scrheight - rect->height;
+            if (rect->x < 0 - utils->get_scale_x(mcf_autopopup_configure.wndDecoSize)) rect->x = 0 -
+                utils->get_scale_x(mcf_autopopup_configure.wndDecoSize);
+            // restrict to 0
+            if (rect->x < 0) rect->x = 0;
+            if (rect->y < 0) rect->y = 0;
+        } else {
+            ret = FALSE;
+        }
+    }
+    return ret;
+}
+
+/**
+ * If the mouse was pressed on the button A and moved to B without releasing,
+ * this function decides whether we should allow event transition, meaning
+ * button A gets restored to its initial state and B gets pressed instead.
+ */
+mcfboolean
+CMCFController::check_event_transition_enabled(const McfLayoutKeyConfigure *btnFrom, const McfLayoutKeyConfigure *btnTo)
+{
+    mcfboolean ret = FALSE;
+    mcfbyte typeFrom = BUTTON_TYPE_NORMAL; /* To enable event transition even if no button is pressed currently */
+    mcfbyte typeTo = MAX_BUTTON_TYPE;
+
+    const mcfboolean TRANSITION_TABLE[MAX_BUTTON_TYPE][MAX_BUTTON_TYPE] = {
+        //     NORMAL  GRAB    DRAG    MULTITAP        ROTATION        DIRECTION       UIITEM
+        //     From : NORMAL
+        {      TRUE,   0,              TRUE,   TRUE,           TRUE,           0,              0       },
+        //     From : GRAB
+        {      0       ,       0,              0,              0       ,               0       ,               0,              0       },
+        //     From : DRAG
+        {      TRUE,   0,              TRUE,   TRUE,           TRUE,           0,              0       },
+        //     From : MULTITAP
+        {      TRUE,   0,              TRUE,   TRUE,           TRUE,           0,              0       },
+        //     From : ROTATION
+        {      TRUE,   0,              TRUE,   TRUE,           TRUE,           0,              0       },
+        //     From : DIRECTION
+        {      0       ,       0,              0,              0       ,               0       ,               0,              0       },
+        //     From : UIITEM
+        {      0       ,       0,              0,              0       ,               0       ,               0,              0       },
+    };
+
+    if (btnFrom) typeFrom = btnFrom->buttonType;
+    if (btnTo) typeTo = btnTo->buttonType;
+
+    mcf_assert_return_false(typeFrom >= 0 && typeFrom < MAX_BUTTON_TYPE);
+    mcf_assert_return_false(typeTo >= 0 && typeTo < MAX_BUTTON_TYPE);
+
+    if (typeFrom < MAX_BUTTON_TYPE && typeTo < MAX_BUTTON_TYPE) {
+        ret = TRANSITION_TABLE[typeFrom][typeTo];
+    }
+
+    return ret;
+}
+
+MCFDebugMode
+CMCFController::get_debug_mode()
+{
+#ifdef MCF_DEBUG_ON
+    return mDebugMode;
+#else
+    return mDebugMode;
+    return DEBUGMODE_DISABLED;
+#endif
+}
+
+void
+CMCFController::set_debug_mode(MCFDebugMode mode)
+{
+    CMCFEvents *events = CMCFEvents::get_instance();
+    CMCFUtils *utils = CMCFUtils::get_instance();
+
+    mDebugMode = mode;
+    mDebugVariable = 0;
+
+    if (mDebugMode == DEBUGMODE_AUTOTEST) {
+        srand(time(NULL));
+        if(events && utils) {
+            events->create_timer(MCF_TIMER_AUTOTEST, MCF_AUTOTEST_TIMER_INITIAL_INTERVAL, 0, FALSE);
+            utils->log("set_debug_mode\n");
+        }
+    }
+}
+
+void
+CMCFController::disable_input_events(mcfboolean disabled)
+{
+    mInputEventsDisabled = disabled;
+}
diff --git a/mcf/mcfcore.cpp b/mcf/mcfcore.cpp
new file mode 100755 (executable)
index 0000000..e2de98b
--- /dev/null
@@ -0,0 +1,608 @@
+/*
+ * Copyright 2012  Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.tizenopensource.org/license
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "mcfcore.h"
+#include "mcfdebug.h"
+#include "mcfresourcecache.h"
+
+using namespace mcf;
+
+CMCFCore::CMCFCore()
+{
+    MCF_DEBUG();
+
+    CMCFUIBuilder *builder = CMCFUIBuilder::get_instance();
+    CMCFController *controller = CMCFController::get_instance();
+    if(builder && controller) {
+        builder->init(MCFWINDOW_INVALID);
+        controller->init();
+    }
+}
+
+CMCFCore::CMCFCore(mcfwindow parentWnd)
+{
+    MCF_DEBUG();
+
+    CMCFUIBuilder *builder = CMCFUIBuilder::get_instance();
+    CMCFController *controller = CMCFController::get_instance();
+    if(builder && controller) {
+        builder->init(parentWnd);
+        controller->init();
+    }
+}
+
+CMCFCore::~CMCFCore()
+{
+    MCF_DEBUG();
+}
+
+/**
+ * Shows the MCF main window
+ * For displaying the MCF UI, you should explicitly call this function after CMCFCore class is created
+ */
+mcfboolean
+CMCFCore::run()
+{
+    MCF_DEBUG();
+    show();
+}
+
+/**
+ * Shows the MCF main window
+ * For displaying the MCF UI, you should explicitly call this function after CMCFCore class is created
+ */
+void
+CMCFCore::show()
+{
+    MCF_DEBUG();
+    mcfboolean ret = FALSE;
+    CMCFWindows *windows = CMCFWindows::get_instance();
+    CMCFController *controller = CMCFController::get_instance();
+    if(windows && controller) {
+        mcfwindow window = windows->get_base_window();
+        controller->handle_engine_signal(MCF_SIG_SHOW);
+        windows->show_window(window);
+    }
+}
+
+/**
+ * Hides the MCF main window
+ * The real hide action does not work about base window because that is child of the active window
+ */
+void
+CMCFCore::hide()
+{
+    MCF_DEBUG();
+    mcfboolean ret = FALSE;
+    CMCFController *controller = CMCFController::get_instance();
+    if(controller) {
+        controller->handle_engine_signal(MCF_SIG_HIDE);
+    }
+}
+
+
+/**
+ * Regists an event callback function
+ * so that the user which uses MCF can recevies all events occuring in running
+ */
+void
+CMCFCore::set_event_callback(IMCFEventCallback *callback)
+{
+    MCF_DEBUG();
+    CMCFController *controller = CMCFController::get_instance();
+    if (controller) {
+        controller->set_event_callback(callback);
+    }
+}
+
+/**
+ * Sets the current input mode to the given mode
+ * @Usage
+ * gCore->set_input_mode(INPUT_MODE_SYMBOL);
+ */
+mcfboolean
+CMCFCore::set_input_mode(mcf8 mode, mcfboolean clearEverything /* = FALSE */)
+{
+    MCF_DEBUG();
+    mcfboolean ret = FALSE;
+    CMCFController *controller = CMCFController::get_instance();
+    CMCFWindows *windows = CMCFWindows::get_instance();
+    if (controller && windows) {
+        if (clearEverything) {
+            controller->clear_multikey_buffer();
+        }
+        ret = controller->process_input_mode_change(mode, !clearEverything);
+        windows->update_window(windows->get_base_window());
+    }
+    return ret;
+}
+
+/**
+ * Returns the current display mode
+ */
+mcf8
+CMCFCore::get_display_mode()
+{
+    MCF_DEBUG();
+    mcf8 ret = NOT_USED;
+    CMCFContext *context = CMCFContext::get_instance();
+    if(context) {
+        ret = context->get_display();
+    }
+    return ret;
+}
+
+/**
+ * Returns the current input mode
+ */
+mcf8
+CMCFCore::get_input_mode()
+{
+    MCF_DEBUG();
+    mcf8 ret = NOT_USED;
+    CMCFContext *context = CMCFContext::get_instance();
+    if(context) {
+        ret = context->get_input_mode();
+    }
+    return ret;
+}
+
+
+/**
+ * Returns a template private key properties using key properties of the given context
+ */
+void
+CMCFCore::clone_keyproperties(McfPrivateKeyProperties* priv, mcfbyte inputModeIdx, mcfbyte layoutIdx, mcfbyte keyIdx)
+{
+    MCF_DEBUG();
+    CMCFResourceCache *cache = CMCFResourceCache::get_instance();
+    if(cache) {
+        cache->clone_keyproperties(priv, inputModeIdx, layoutIdx, keyIdx);
+    }
+}
+
+/**
+ * Sets a private key to the current context
+ *
+ * @Usage
+ *       McfPrivateKeyProperties privProperties;
+ *       gCore->clone_keyproperties(&privProperties, INPUT_MODE_NUMBER, LYT_PORTRAIT_NOW_3x4, 0);
+ *       // change
+ *       gCore->set_private_key(&privProperties, TRUE);
+ */
+mcfint
+CMCFCore::set_private_key(McfPrivateKeyProperties* properties, mcfboolean fRedraw)
+{
+    MCF_DEBUG();
+    mcfint ret = NOT_USED;
+    CMCFWindows *windows = CMCFWindows::get_instance();
+    CMCFResourceCache *cache = CMCFResourceCache::get_instance();
+    if(windows && cache) {
+        ret = cache->set_private_key(properties, fRedraw, windows->get_update_pending());
+    }
+    return ret;
+}
+
+/**
+ * Sets a private key to the current context
+ * The other properties except given parameters will keep to the orginal value.
+ * @Usage
+ * gCore->set_private_key(INPUT_MODE_NUMBER, LYT_PORTRAIT_NOW_3x4, 0, "private", 999, TRUE);
+ *
+ * @param fRedraw If true, it will redraw the current key
+ */
+mcfint
+CMCFCore::set_private_key(mcfshort inputModeIdx, mcfbyte layoutIdx, mcfbyte keyIdx, mcfchar* label,
+                                 mcfchar* imagelabel[MCF_BUTTON_STATE_MAX], mcfchar* imagebg[MCF_BUTTON_STATE_MAX],
+                                 mcfulong keyEvent, mcfchar *keyValue, mcfboolean fRedraw)
+{
+    MCF_DEBUG();
+    mcfint ret = NOT_USED;
+    CMCFWindows *windows = CMCFWindows::get_instance();
+    CMCFResourceCache *cache = CMCFResourceCache::get_instance();
+    if(windows && cache) {
+        ret = cache->set_private_key(inputModeIdx, layoutIdx, keyIdx, label, imagelabel, imagebg,
+                                     keyEvent, keyValue, fRedraw, windows->get_update_pending());
+    }
+    return ret;
+}
+
+
+/**
+* Unsets a private key to the current context
+*
+* @Usage
+*       McfPrivateKeyProperties privProperties;
+*       gCore->clone_keyproperties(&privProperties, INPUT_MODE_NUMBER, LYT_PORTRAIT_NOW_3x4, 0);
+*       mcfint pkindex = gCore->set_private_key(&privProperties, TRUE);
+*       gCore->unset_private_key(pkindex);
+*/
+void
+CMCFCore::unset_private_key(mcfint customID)
+{
+    MCF_DEBUG();
+    CMCFResourceCache *cache = CMCFResourceCache::get_instance();
+    if(cache) {
+        cache->unset_private_key(customID);
+    }
+}
+
+/**
+* Sets the current theme
+*/
+mcfboolean
+CMCFCore::set_cur_themename( const mcfchar *themename )
+{
+    CMCFResourceCache *cache = CMCFResourceCache::get_instance();
+    CMCFWindows *windows = CMCFWindows::get_instance();
+    if(cache && windows) {
+        cache->set_cur_themename(themename);
+        windows->update_window(windows->get_base_window());
+        int loop = 0;
+        mcfwindow window;
+        do {
+            window = windows->get_nth_popup_window(loop);
+            if (window) {
+                windows->update_window(window);
+            }
+            loop++;
+        } while (window);
+    }
+    return TRUE;
+}
+
+/**
+* Find appropriate index of the key specified by customID
+*/
+mcfbyte
+CMCFCore::find_keyidx_by_customid( mcfshort inputModeIdx, mcfbyte layoutIdx, mcfshort customID )
+{
+    mcfbyte ret = 0;
+    CMCFResourceCache *cache = CMCFResourceCache::get_instance();
+    if(cache) {
+        ret = cache->find_keyidx_by_customid(inputModeIdx, layoutIdx, customID);
+    }
+    return ret;
+}
+
+MCFShiftState
+CMCFCore::get_shift_state()
+{
+    MCFShiftState ret = MCF_SHIFT_STATE_OFF;
+    CMCFContext *context = CMCFContext::get_instance();
+    if(context) {
+        ret = context->get_shift_state();
+    }
+    return ret;
+}
+
+void
+CMCFCore::set_shift_state( MCFShiftState state )
+{
+    CMCFContext *context = CMCFContext::get_instance();
+    CMCFWindows *windows = CMCFWindows::get_instance();
+    if (context && windows) {
+        if(state != context->get_shift_state()) {
+            context->set_shift_state(state);
+            windows->update_window(windows->get_base_window());
+        }
+    }
+}
+
+/**
+ * This function will be called by the user which uses MCF when the context of the focus application is changed
+ * ISE user should explicitly call this function when the context of application is changed.
+ * For instance, focus-changed, application-changed,, and so on.
+ * This function will call CMCFController to init the related variables.
+ */
+void
+CMCFCore::notify_app_focus_changed()
+{
+    MCF_DEBUG();
+    CMCFController *controller = CMCFController::get_instance();
+    if(controller) {
+        controller->handle_engine_signal(MCF_SIG_FOCUS_CHANGE);
+    }
+}
+
+void
+CMCFCore::reset_popup_timeout()
+{
+    MCF_DEBUG();
+    CMCFEvents *events = CMCFEvents::get_instance();
+    CMCFWindows *windows = CMCFWindows::get_instance();
+
+    if(events && windows) {
+        events->destroy_timer(MCF_TIMER_POPUP_TIMEOUT);
+
+        mcfbyte index = 0;
+        mcfboolean timerset = FALSE;
+        mcfwindow window = MCFWINDOW_INVALID;
+        McfWindowContext *winctx = NULL;
+        do {
+            window = windows->get_nth_window_in_Z_order_list(index);
+            winctx = windows->get_window_context(window, FALSE);
+            if(winctx) {
+                if(winctx->timeout != 0) {
+                    events->create_timer(MCF_TIMER_POPUP_TIMEOUT, winctx->timeout, 0, TRUE);
+                    timerset = TRUE;
+                }
+                index++;
+            }
+        } while (index < MAX_ZORDER_NUM && window != MCFWINDOW_INVALID && !timerset);
+    }
+}
+
+void
+CMCFCore::close_all_popups()
+{
+    MCF_DEBUG();
+    CMCFWindows *windows = CMCFWindows::get_instance();
+    if(windows) {
+        windows->close_all_popups();
+    }
+}
+
+/**
+ * Returns a scale rate (see default screen resolution in mcfconfig.h file)
+ */
+mcffloat
+CMCFCore::get_scale_rate()
+{
+    mcffloat ret = 0.0f;
+    CMCFUtils *utils = CMCFUtils::get_instance();
+    if(utils) {
+        ret = utils->get_smallest_scale_rate();
+    }
+    return ret;
+}
+
+/**
+ * Returns a calculated x value according to the current screen resolution
+ */
+mcf16
+CMCFCore::get_scale_x(mcf16 x)
+{
+    mcf16 ret = 0;
+    CMCFUtils *utils = CMCFUtils::get_instance();
+    if(utils) {
+        ret = utils->get_scale_x(x);
+    }
+    return ret;
+}
+
+/**
+ * Returns a calculated y value according to the current screen resolution
+ */
+mcf16
+CMCFCore::get_scale_y(mcf16 y)
+{
+    mcf16 ret = 0;
+    CMCFUtils *utils = CMCFUtils::get_instance();
+    if(utils) {
+        ret = utils->get_scale_y(y);
+    }
+    return ret;
+}
+
+/**
+ * Returns the mcf base window size
+ */
+void
+CMCFCore::get_window_size(mcfint *width, mcfint *height)
+{
+    CMCFResourceCache *cache = CMCFResourceCache::get_instance();
+    CMCFWindows *windows = CMCFWindows::get_instance();
+    if(cache && windows && width && height) {
+        const McfLayout *layout  = cache->get_cur_layout(windows->get_base_window());
+        if(layout) {
+            *width = layout->width;
+            *height = layout->height;
+        }
+    }
+}
+
+/**
+* Returns the screen resolution
+*/
+void
+CMCFCore::get_screen_resolution(mcfint *width, mcfint *height)
+{
+    CMCFUtils *utils = CMCFUtils::get_instance();
+    if(utils && width && height) {
+        utils->get_screen_resolution(width, height);
+    }
+}
+
+/**
+ * Returns the composed path with the given path
+ */
+mcfchar*
+CMCFCore::get_composed_path(mcfchar* buf, int bufLength, const mcfchar* path)
+{
+    mcfchar* ret = NULL;
+    CMCFUtils *utils = CMCFUtils::get_instance();
+    if(utils) {
+        ret = utils->get_composed_path(buf, bufLength, path);
+    }
+    return ret;
+}
+
+
+void
+CMCFCore::set_debug_mode(MCFDebugMode mode)
+{
+    CMCFController *controller = CMCFController::get_instance();
+    if(controller) {
+        controller->set_debug_mode(mode);
+    }
+}
+
+MCFDebugMode
+CMCFCore::get_debug_mode()
+{
+    MCFDebugMode ret = DEBUGMODE_DISABLED;
+    CMCFController *controller = CMCFController::get_instance();
+    if(controller) {
+        ret = controller->get_debug_mode();
+    }
+    return ret;
+}
+
+void
+CMCFCore::set_update_pending(mcfboolean pend, mcfboolean autoUpdate)
+{
+    CMCFWindows *windows = CMCFWindows::get_instance();
+    if(windows) {
+        windows->set_update_pending(pend, autoUpdate);
+    }
+}
+
+void
+CMCFCore::enable_button(mcfbyte keyIdx)
+{
+    CMCFResourceCache *cache = CMCFResourceCache::get_instance();
+    if(cache) {
+        cache->enable_button(keyIdx);
+    }
+}
+
+void
+CMCFCore::disable_button(mcfbyte keyIdx)
+{
+    CMCFResourceCache *cache = CMCFResourceCache::get_instance();
+    if(cache) {
+        cache->disable_button(keyIdx);
+    }
+}
+
+mcfint
+CMCFCore::get_multi_touch_context_num()
+{
+    mcfboolean ret = FALSE;
+    CMCFContext *context = CMCFContext::get_instance();
+    if(context) {
+        ret = context->get_multi_touch_context_num();
+    }
+    return ret;
+}
+
+mcfboolean
+CMCFCore::get_multi_touch_event(mcfint seqorder, McfKeyEventDesc *desc)
+{
+    mcfboolean ret = FALSE;
+    CMCFContext *context = CMCFContext::get_instance();
+    if(context) {
+        ret = context->get_multi_touch_event(seqorder, desc);
+    }
+    return ret;
+}
+
+mcfboolean
+CMCFCore::set_longkey_duration(mcflong msc)
+{
+    mcfboolean ret = FALSE;
+    CMCFController *controller = CMCFController::get_instance();
+    if(controller) {
+        ret = controller->set_longkey_duration(msc);
+    }
+    return ret;
+}
+
+mcfboolean
+CMCFCore::set_longkey_cancel_dist(mcfshort dist)
+{
+    mcfboolean ret = FALSE;
+    CMCFController *controller = CMCFController::get_instance();
+    if(controller) {
+        ret = controller->set_longkey_cancel_dist(dist);
+    }
+    return ret;
+}
+
+mcfboolean
+CMCFCore::set_repeatkey_duration(mcflong msc)
+{
+    mcfboolean ret = FALSE;
+    CMCFController *controller = CMCFController::get_instance();
+    if(controller) {
+        ret = controller->set_repeatkey_duration(msc);
+    }
+    return ret;
+}
+
+mcfboolean
+CMCFCore::set_short_longkey_duration(mcflong msc)
+{
+    mcfboolean ret = FALSE;
+    CMCFController *controller = CMCFController::get_instance();
+    if(controller) {
+        ret = controller->set_short_longkey_duration(msc);
+    }
+    return ret;
+}
+
+mcfboolean
+CMCFCore::set_button_delay_duration(mcflong msc)
+{
+    mcfboolean ret = FALSE;
+    CMCFController *controller = CMCFController::get_instance();
+    if(controller) {
+        ret = controller->set_button_delay_duration(msc);
+    }
+    return ret;
+}
+
+void
+CMCFCore::disable_input_events(mcfboolean disabled)
+{
+    CMCFController *controller = CMCFController::get_instance();
+    if(controller) {
+        controller->disable_input_events(disabled);
+    }
+}
+
+mcfboolean
+CMCFCore::set_cur_sublayout_id(mcfint id)
+{
+    mcfboolean ret = FALSE;
+    CMCFContext *context = CMCFContext::get_instance();
+    CMCFWindows *windows = CMCFWindows::get_instance();
+    if(context && windows) {
+        if(id != context->get_cur_sublayout_id()) {
+            ret = context->set_cur_sublayout_id(id);
+            windows->update_window(windows->get_base_window());
+        }
+    }
+    return ret;
+}
+
+mcfint
+CMCFCore::get_cur_sublayout_id()
+{
+    mcfint ret = SUBLAYOUTID_NONE;
+    CMCFContext *context = CMCFContext::get_instance();
+    if(context) {
+        ret = context->get_cur_sublayout_id();
+    }
+    return ret;
+}
+
diff --git a/mcf/mcfdebug.cpp b/mcf/mcfdebug.cpp
new file mode 100755 (executable)
index 0000000..15b62e1
--- /dev/null
@@ -0,0 +1,84 @@
+/*
+ * Copyright 2012  Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.tizenopensource.org/license
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+\r
+#include "mcfdebug.h"\r
+#include <sys/time.h>\r
+#include <string.h>\r
+\r
+\r
+#ifdef MCF_DEBUG_ON\r
+\r
+/* Measure elapased time */\r
+static float\r
+_MCF_DEBUG_ELAPASED_TIME(const char* str, struct timeval t0, struct timeval t1);\r
+\r
+/* Measure elapased time */\r
+float MCF_DEBUG_TIME(const char* fileStr, int line, const char* str)\r
+{\r
+    float etime = 0.0;\r
+    static struct timeval t0 = {\r
+        0,\r
+    };\r
+    static struct timeval t1;\r
+    char *pFileStr = const_cast<char*>(fileStr);\r
+    if (pFileStr) {\r
+        if (strlen(fileStr) > 20) {\r
+            pFileStr += (strlen(fileStr) - 20);\r
+        }\r
+        gettimeofday(&t1, NULL);\r
+        if (t0.tv_usec != 0) {\r
+            etime = ((t1.tv_sec * 1000000 + t1.tv_usec) - (t0.tv_sec * 1000000 + t0.tv_usec))/1000000.0;\r
+        }\r
+\r
+        printf("[%-20.20s]%04d [T:%u][E:" mc_red "%f" mc_normal "]" mc_blue " %s" mc_normal "\n",\r
+                  pFileStr, line, (t1.tv_sec * 1000000 + t1.tv_usec), etime, str);\r
+        t0 = t1;\r
+    }\r
+}\r
+\r
+/* Measure elapased time */\r
+static float _MCF_DEBUG_ELAPASED_TIME(const char* str, struct timeval t0, struct timeval t1)\r
+{\r
+    float etime;\r
+    etime = ((t1.tv_sec * 1000000 + t1.tv_usec) - (t0.tv_sec * 1000000 + t0.tv_usec))/1000000.0;\r
+    printf("[%s] elap-time = " mc_green "%f" mc_normal " (%u~%u) \n", str, etime, (t0.tv_sec * 1000000 + t0.tv_usec),\r
+          (t1.tv_sec * 1000000 + t1.tv_usec));\r
+    return etime;\r
+}\r
+\r
+/* Measure elapased time */\r
+float MCF_DEBUG_ELAPASED_TIME(const char* fileStr, int line, const char* str, int type)\r
+{\r
+    static struct timeval s_tv1;\r
+    static struct timeval s_tv2;\r
+    static int s_start_line = 0;\r
+    static int s_end_line = 0;\r
+    if (type == MEASURE_START) {\r
+        gettimeofday(&s_tv1, NULL);\r
+        s_start_line = line;\r
+        printf("[%-20.20s]%04d [T:%u]" mc_blue " %s" mc_normal "\n", fileStr, line,\r
+                  (s_tv1.tv_sec * 1000000 + s_tv1.tv_usec), str);\r
+    } else if (type == MEASURE_END) {\r
+        gettimeofday(&s_tv2, NULL);\r
+        s_end_line = line;\r
+        char printStr[100];\r
+        sprintf(printStr,"%s(Line:%d~%d)", str, s_start_line, s_end_line);\r
+        _MCF_DEBUG_ELAPASED_TIME(printStr, s_tv1, s_tv2);\r
+    }\r
+}\r
+#endif\r
diff --git a/mcf/mcferroradjustment.cpp b/mcf/mcferroradjustment.cpp
new file mode 100755 (executable)
index 0000000..f8526a4
--- /dev/null
@@ -0,0 +1,68 @@
+/*
+ * Copyright 2012  Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.tizenopensource.org/license
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "mcferroradjustment.h"
+#include "mcfdebug.h"
+#include "mcfresourcecache.h"
+#include "mcfutils.h"
+
+#define OFFSET_MAX                     10
+#define TWO                            2
+
+using namespace mcf;
+CMCFErrorAdjustment* CMCFErrorAdjustment::sInstance; /* For singleton */
+
+CMCFErrorAdjustment* CMCFErrorAdjustment::get_instance()
+{
+    if (!sInstance) {
+        sInstance = new CMCFErrorAdjustment();
+    }
+    return (CMCFErrorAdjustment*)sInstance;
+}
+
+CMCFErrorAdjustment::CMCFErrorAdjustment()
+{
+    MCF_DEBUG();
+}
+
+CMCFErrorAdjustment::~CMCFErrorAdjustment()
+{
+    MCF_DEBUG();
+}
+
+mcfboolean
+CMCFErrorAdjustment::apply_touch_offset(MCFTouchOffsetLevel level, mcfint *x, mcfint *y)
+{
+    MCF_DEBUG();
+    CMCFEvents* events = CMCFEvents::get_instance();
+    CMCFUtils *utils = CMCFUtils::get_instance();
+    McfPoint *pos;
+    pos = events->get_touch_event_offset();
+    if(level == TOUCH_OFFSET_LEVEL_1 ){
+        *x = *x + utils->get_scale_x(pos->x);
+    } else if(level == TOUCH_OFFSET_LEVEL_2) {
+        *x = *x + utils->get_scale_x(pos->x);
+    }  
+    *y = *y + utils->get_scale_y(pos->y);
+    return TRUE;
+}
+
+
diff --git a/mcf/mcfevents.cpp b/mcf/mcfevents.cpp
new file mode 100755 (executable)
index 0000000..a1cf649
--- /dev/null
@@ -0,0 +1,93 @@
+/*
+ * Copyright 2012  Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.tizenopensource.org/license
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+
+#include "mcfevents.h"
+#ifdef  __WIN32__
+#include "mcfevents-win32.h"
+#elif defined(__EFL__)
+#include "mcfevents-efl.h"
+#else
+#include "mcfevents-gtk.h"
+#endif
+#include "mcfdebug.h"
+#include "mcfwindows.h"
+
+using namespace mcf;
+
+CMCFEvents* CMCFEvents::sInstance = NULL; /* For singleton */
+
+CMCFEvents::CMCFEvents()
+{
+    MCF_DEBUG();
+    pImp_ = 0;
+    mTouchEventOffset.x = mTouchEventOffset.y = 0;
+}
+
+CMCFEvents::~CMCFEvents()
+{
+    MCF_DEBUG();
+}
+
+CMCFEventsImpl* CMCFEvents::get_mcf_events_impl()
+{
+    MCF_DEBUG();
+    if (pImp_ == 0) {
+#ifdef  __WIN32__
+        pImp_ = new CMCFEventsImplWin32;
+#elif defined(__EFL__)
+        pImp_ = new CMCFEventsImplEfl;
+#else
+        pImp_ = new CMCFEventsImplGtk;
+#endif
+    }
+    return pImp_;
+}
+
+CMCFEvents* CMCFEvents::get_instance()
+{
+    if (!sInstance) {
+        sInstance = new CMCFEvents();
+    }
+    return (CMCFEvents*)sInstance;
+}
+
+void
+CMCFEvents::connect_window_events( mcfwindow wnd, const mcfint evt )
+{
+    CMCFWindows *windows = CMCFWindows::get_instance();
+    McfWindowContext *context = windows->get_window_context(wnd, FALSE);
+    if (context) {
+        if (!(context->isVirtual)) {
+            get_mcf_events_impl()->connect_window_events(wnd, evt);
+        }
+    }
+}
+
+void
+CMCFEvents::set_touch_event_offset(const McfPoint pos)
+{
+    mTouchEventOffset = pos;
+}
+
+McfPoint*
+CMCFEvents::get_touch_event_offset()
+{
+    return &mTouchEventOffset;
+}
+
+
diff --git a/mcf/mcffeedback.cpp b/mcf/mcffeedback.cpp
new file mode 100755 (executable)
index 0000000..eb377e0
--- /dev/null
@@ -0,0 +1,75 @@
+/*
+ * Copyright 2012  Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.tizenopensource.org/license
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "mcffeedback.h"
+#include "mcfdebug.h"
+#include "mcfresourcecache.h"
+#include "mcfutils.h"
+#include "mcfcontext.h"
+
+using namespace mcf;
+CMCFFeedback* CMCFFeedback::sInstance; /* For singleton */
+
+CMCFFeedback* CMCFFeedback::get_instance()
+{
+    if (!sInstance) {
+        sInstance = new CMCFFeedback();
+    }
+    return (CMCFFeedback*)sInstance;
+}
+
+CMCFFeedback::CMCFFeedback()
+{
+    MCF_DEBUG();
+}
+
+CMCFFeedback::~CMCFFeedback()
+{
+    MCF_DEBUG();
+}
+
+mcfboolean
+CMCFFeedback::button_pressed(mcfwindow window, mcfbyte keyindex)
+{
+    MCF_DEBUG();
+    CMCFResourceCache *cache = CMCFResourceCache::get_instance();
+    if(cache) {
+        const McfLayoutKeyConfigure *configure = cache->get_cur_layout_key_configure(window, keyindex);
+        CMCFUtils *utils = CMCFUtils::get_instance();
+        CMCFContext *context = CMCFContext::get_instance();
+    }
+    return TRUE;
+}
+
+mcfboolean
+CMCFFeedback::button_moved(mcfwindow window, mcfbyte keyindex)
+{
+    MCF_DEBUG();
+    return TRUE;
+}
+
+mcfboolean
+CMCFFeedback::button_released(mcfwindow window, mcfbyte keyindex)
+{
+    MCF_DEBUG();
+    return TRUE;
+}
+
diff --git a/mcf/mcffontproxy.cpp b/mcf/mcffontproxy.cpp
new file mode 100755 (executable)
index 0000000..79a3277
--- /dev/null
@@ -0,0 +1,112 @@
+/*
+ * Copyright 2012  Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.tizenopensource.org/license
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+\r
+#include "mcfgraphics.h"\r
+#include "mcffontproxy.h"\r
+#include "mcfdebug.h"\r
+\r
+using namespace mcf;\r
+\r
+CMCFFontProxy* CMCFFontProxy::sInstance = NULL; /* For singleton */\r
+\r
+/**\r
+* Constructor\r
+*/\r
+CMCFFontProxy::CMCFFontProxy()\r
+{\r
+    MCF_DEBUG();\r
+\r
+    for (int loop = 0;loop < FONT_PROXY_SIZE;loop++) {\r
+        mFontCacheItems[loop].font = NULL;\r
+        memset(mFontCacheItems[loop].fontname, 0x00, sizeof(mFontCacheItems[loop].fontname));\r
+        mFontCacheItems[loop].fontsize = 0;\r
+        mFontCacheItems[loop].isItalic = FALSE;\r
+        mFontCacheItems[loop].isBold = FALSE;\r
+    }\r
+}\r
+\r
+/**\r
+* De-constructor\r
+*/\r
+CMCFFontProxy::~CMCFFontProxy()\r
+{\r
+    MCF_DEBUG();\r
+    free_fonts();\r
+}\r
+\r
+CMCFFontProxy* CMCFFontProxy::get_instance()\r
+{\r
+    if (!sInstance) {\r
+        sInstance = new CMCFFontProxy();\r
+    }\r
+    return (CMCFFontProxy*)sInstance;\r
+}\r
+\r
+mcffont\r
+CMCFFontProxy::get_font(const McfFontInfo& info)\r
+{\r
+    MCF_DEBUG();\r
+\r
+    mcffont ret = NULL;\r
+\r
+    for (int loop = 0;loop < FONT_PROXY_SIZE && ret == NULL;loop++) {\r
+        if (strcmp(info.fontname, mFontCacheItems[loop].fontname) == 0 &&\r
+            info.fontsize == mFontCacheItems[loop].fontsize &&\r
+            info.isItalic == mFontCacheItems[loop].isItalic &&\r
+            info.isBold == mFontCacheItems[loop].isBold) {\r
+            ret = mFontCacheItems[loop].font;\r
+            break;\r
+        }\r
+    }\r
+\r
+    if (ret == NULL) {\r
+        mcfboolean isEmpty = FALSE;\r
+        CMCFGraphics *graphics = CMCFGraphics::get_instance();\r
+        ret = graphics->create_font(info);\r
+\r
+        if (ret) {\r
+            for (int loop = 0;loop < FONT_PROXY_SIZE && !isEmpty;loop++) {\r
+                if (mFontCacheItems[loop].font == NULL) {\r
+                    isEmpty = TRUE;\r
+                    strncpy(mFontCacheItems[loop].fontname, info.fontname, MAX_FONT_NAME_LEN);\r
+                    mFontCacheItems[loop].fontname[MAX_FONT_NAME_LEN] = '\0';\r
+                    mFontCacheItems[loop].fontsize = info.fontsize;\r
+                    mFontCacheItems[loop].isItalic = info.isItalic;\r
+                    mFontCacheItems[loop].isBold = info.isBold;\r
+                    mFontCacheItems[loop].font = ret;\r
+                }\r
+            }\r
+        }\r
+    }\r
+\r
+    return ret;\r
+}\r
+\r
+void\r
+CMCFFontProxy::free_fonts()\r
+{\r
+    MCF_DEBUG();\r
+\r
+    for (int loop = 0;loop < FONT_PROXY_SIZE;loop++) {\r
+        if (mFontCacheItems[loop].font) {\r
+            CMCFGraphics *graphics = CMCFGraphics::get_instance();\r
+            graphics->destroy_font(mFontCacheItems[loop].font);\r
+            mFontCacheItems[loop].font = NULL;\r
+        }\r
+    }\r
+}\r
diff --git a/mcf/mcfgraphics.cpp b/mcf/mcfgraphics.cpp
new file mode 100755 (executable)
index 0000000..2737a75
--- /dev/null
@@ -0,0 +1,72 @@
+/*
+ * Copyright 2012  Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.tizenopensource.org/license
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+
+#define __GTK__ 1
+
+#include "mcfgraphics.h"
+#ifdef  __WIN32__
+#include "mcfgraphics-win32.h"
+#elif defined(__EFL__)
+#include "mcfgraphics-efl.h"
+#elif __GTK__
+#include "mcfgraphics-gtk.h"
+#else
+#include "mcfgraphics-cairo.h"
+#endif
+#include "mcfdebug.h"
+
+using namespace mcf;
+
+CMCFGraphics* CMCFGraphics::sInstance = NULL; /* For singleton */
+
+CMCFGraphics::CMCFGraphics()
+{
+    MCF_DEBUG();
+    pImp_ = 0;
+}
+
+CMCFGraphics::~CMCFGraphics()
+{
+    MCF_DEBUG();
+}
+
+CMCFGraphicsImpl* CMCFGraphics::get_mcf_graphics_impl()
+{
+    MCF_DEBUG();
+    if (pImp_ == 0) {
+#ifdef  __WIN32__
+        pImp_ = new CMCFGraphicsImplWin32;
+#elif defined(__EFL__)
+        pImp_ = new CMCFGraphicsImplEfl;
+#elif __GTK__
+        pImp_ = new CMCFGraphicsImplGtk;
+#else
+        pImp_ = new CMCFGraphicsImplCairo;
+#endif
+    }
+    return pImp_;
+}
+
+CMCFGraphics* CMCFGraphics::get_instance()
+{
+    if (!sInstance) {
+        sInstance = new CMCFGraphics();
+    }
+    return (CMCFGraphics*)sInstance;
+}
+
diff --git a/mcf/mcfgwes.cpp b/mcf/mcfgwes.cpp
new file mode 100755 (executable)
index 0000000..3a14249
--- /dev/null
@@ -0,0 +1,60 @@
+/*
+ * Copyright 2012  Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.tizenopensource.org/license
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+
+#include "mcfgwes.h"
+#include "mcfdebug.h"
+
+using namespace mcf;
+
+CMCFGwes* CMCFGwes::sInstance = NULL; /* For singleton */
+
+CMCFGwes::CMCFGwes()
+{
+    MCF_DEBUG();
+    mWnd = NULL;
+    mGrps = NULL;
+    mEvt = NULL;
+}
+
+CMCFGwes::~CMCFGwes()
+{
+    MCF_DEBUG();
+    if (mWnd) delete(mWnd);
+    if (mGrps) delete(mGrps);
+    if (mEvt) delete(mEvt);
+}
+
+void CMCFGwes::init(mcfwindow parentWnd, mcf16 width, mcf16 height)
+{
+    MCF_DEBUG();
+    if (mWnd == NULL) mWnd = CMCFWindows::get_instance();
+    if (mGrps == NULL) mGrps = CMCFGraphics::get_instance();
+    if (mEvt == NULL) mEvt = CMCFEvents::get_instance();
+
+    mcfwindow wnd = mWnd->create_base_window(parentWnd, width, height);
+    mEvt->connect_window_events(wnd, MCF_EVENT_MOUSE | MCF_EVENT_EXPOSE);
+}
+
+CMCFGwes* CMCFGwes::get_instance()
+{
+    if (!sInstance) {
+        sInstance = new CMCFGwes();
+    }
+    return (CMCFGwes*)sInstance;
+}
+
diff --git a/mcf/mcfimageproxy.cpp b/mcf/mcfimageproxy.cpp
new file mode 100755 (executable)
index 0000000..26ffe19
--- /dev/null
@@ -0,0 +1,104 @@
+/*
+ * Copyright 2012  Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.tizenopensource.org/license
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+\r
+\r
+#include "mcfgraphics.h"\r
+#include "mcfimageproxy.h"\r
+#include "mcfdebug.h"\r
+\r
+using namespace mcf;\r
+\r
+CMCFImageProxy* CMCFImageProxy::sInstance = NULL; /* For singleton */\r
+\r
+/**\r
+* Constructor\r
+*/\r
+CMCFImageProxy::CMCFImageProxy()\r
+{\r
+    MCF_DEBUG();\r
+\r
+    for (int loop = 0;loop < IMAGE_PROXY_SIZE;loop++) {\r
+        mImageCacheItems[loop].imgData = NULL;\r
+        memset(mImageCacheItems[loop].imgPath, 0x00, sizeof(mImageCacheItems[loop].imgPath));\r
+    }\r
+}\r
+\r
+/**\r
+* De-constructor\r
+*/\r
+CMCFImageProxy::~CMCFImageProxy()\r
+{\r
+    MCF_DEBUG();\r
+    free_images();\r
+}\r
+\r
+CMCFImageProxy* CMCFImageProxy::get_instance()\r
+{\r
+    if (!sInstance) {\r
+        sInstance = new CMCFImageProxy();\r
+    }\r
+    return (CMCFImageProxy*)sInstance;\r
+}\r
+\r
+mcfimage\r
+CMCFImageProxy::get_image(const mcfchar* imgPath)\r
+{\r
+    MCF_DEBUG();\r
+\r
+    mcfimage ret = NULL;\r
+\r
+    /* FIXME : Better to use std::map for searching image cache item */\r
+    for (int loop = 0;loop < IMAGE_PROXY_SIZE && ret == NULL;loop++) {\r
+        if (strcmp(imgPath, mImageCacheItems[loop].imgPath) == 0) {\r
+            ret = mImageCacheItems[loop].imgData;\r
+            break;\r
+        }\r
+    }\r
+\r
+    if (ret == NULL) {\r
+        mcfboolean isEmpty = FALSE;\r
+        CMCFGraphics *graphics = CMCFGraphics::get_instance();\r
+        ret = graphics->load_image(imgPath);\r
+\r
+        if (ret) {\r
+            for (int loop = 0;loop < IMAGE_PROXY_SIZE && !isEmpty;loop++) {\r
+                if (mImageCacheItems[loop].imgData == NULL) {\r
+                    isEmpty = TRUE;\r
+                    strncpy(mImageCacheItems[loop].imgPath, imgPath, MAX_IMAGE_PATH_LEN);\r
+                    mImageCacheItems[loop].imgPath[MAX_IMAGE_PATH_LEN] = '\0';\r
+                    mImageCacheItems[loop].imgData = ret;\r
+                }\r
+            }\r
+        }\r
+    }\r
+\r
+    return ret;\r
+}\r
+\r
+void\r
+CMCFImageProxy::free_images()\r
+{\r
+    MCF_DEBUG();\r
+\r
+    for (int loop = 0;loop < IMAGE_PROXY_SIZE;loop++) {\r
+        if (mImageCacheItems[loop].imgData) {\r
+            CMCFGraphics *graphics = CMCFGraphics::get_instance();\r
+            graphics->unload_image(mImageCacheItems[loop].imgData);\r
+            mImageCacheItems[loop].imgData = NULL;\r
+        }\r
+    }\r
+}\r
diff --git a/mcf/mcfresourcecache.cpp b/mcf/mcfresourcecache.cpp
new file mode 100755 (executable)
index 0000000..b683e4d
--- /dev/null
@@ -0,0 +1,1404 @@
+/*
+ * Copyright 2012  Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.tizenopensource.org/license
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "mcfresourcecache.h"
+#include "mcfdebug.h"
+#include "mcfcontext.h"
+
+#include "mcfresourcekeys.h"
+#include "mcfuibuilder.h"
+
+using namespace mcf;
+
+CMCFResourceCache* CMCFResourceCache::sInstance = NULL; /* For singleton */
+
+CMCFResourceCache::CMCFResourceCache()
+{
+    MCF_DEBUG();
+    resize_resource_elements_by_resolution();
+    clear_private_keys();
+    memset(mCurThemename, 0x00, sizeof(mCurThemename));
+}
+
+CMCFResourceCache::~CMCFResourceCache()
+{
+    MCF_DEBUG();
+}
+
+CMCFResourceCache*
+CMCFResourceCache::get_instance()
+{
+    if (!sInstance) {
+        sInstance = new CMCFResourceCache();
+    }
+    return (CMCFResourceCache*)sInstance;
+}
+
+
+#ifdef ENABLE_RESOURCE_DATA_FILE
+
+mcfchar*
+CMCFResourceCache::copy_string(const mcfchar *str)
+{
+    mcfchar *new_str;
+    mcfint length;
+
+    if (str) {
+        std::string s(str);
+        std::set<std::string>::iterator it =  mLayoutKeyPropertiesStrings.find(s);
+        if (it != mLayoutKeyPropertiesStrings.end()) {
+            s =* it;
+            new_str = (mcfchar *)s.c_str();
+        } else {
+            length = strlen(str) + 1;
+            new_str = (mcfchar*)malloc(length);
+            if (new_str) {
+                memcpy(new_str, str, length);
+                new_str[length - 1] = '\0';
+                s.assign(new_str);
+                mLayoutKeyPropertiesStrings.insert(s);
+            }
+        }
+    } else {
+        new_str = NULL;
+    }
+
+    return new_str;
+}
+
+
+mcfint
+CMCFResourceCache::copy_from_stored(McfLayoutKeyProperties *prop, StoredMcfLayoutKeyProperties *stored)
+{
+        int i,j;
+
+        prop->fValid = stored->fValid;
+        prop->labelCnt = stored->labelCnt;
+        prop->labelPropId = stored->labelPropId;
+        prop->keyValueCnt = stored->keyValueCnt;
+        prop->longKeyEvent = stored->longKeyEvent;
+        prop->useRepeatKey = stored->useRepeatKey;
+        prop->dontClosePopup = stored->dontClosePopup;
+        prop->extraOption = stored->extraOption;
+        prop->multitouchType = stored->multitouchType;
+        prop->modifierDecorationId = stored->modifierDecorationId;
+
+        memcpy(prop->keyEvent, stored->keyEvent, sizeof(stored->keyEvent));
+
+        prop->longKeyValue = copy_string((mcfchar *)stored->longKeyValue);
+
+        for (i=0; i < MCF_SHIFT_STATE_MAX; i++) {
+                for (j=0; j < MAX_SIZE_OF_LABEL_FOR_ONE; j++) {
+                        if (stored->label[i][j][0]) {
+                                prop->label[i][j] = copy_string((mcfchar *)stored->label[i][j]);
+                        } else {
+                                prop->label[i][j] = NULL;
+                        }
+                }
+
+                for (j=0; j < MCF_BUTTON_STATE_MAX; j++) {
+                        if (stored->labelImgPath[i][j][0]) {
+                                prop->labelImgPath[i][j] = copy_string((mcfchar *)stored->labelImgPath[i][j]);
+                        } else {
+                                prop->labelImgPath[i][j] = NULL;
+                        }
+
+                        if (stored->bgImgPath[i][j][0]) {
+                                prop->bgImgPath[i][j] = copy_string((mcfchar *)stored->bgImgPath[i][j]);
+                        } else {
+                                prop->bgImgPath[i][j] = NULL;
+                        }
+                }
+
+                for (j=0; j < MAX_SIZE_OF_MULTITAP_CHAR; j++) {
+                        if (stored->keyValue[i][j][0]) {
+                                prop->keyValue[i][j] = copy_string((mcfchar *)stored->keyValue[i][j]);
+                        } else {
+                                prop->keyValue[i][j] = NULL;
+                        }
+                }
+
+                for (j=0; j < MAX_SIZE_OF_AUTOPOPUP_STRING; j++) {
+                        if (stored->autopopupKeys[i][j][0]) {
+                                prop->autopopupKeys[i][j] = copy_string((mcfchar *)stored->autopopupKeys[i][j]);
+                        } else {
+                                prop->autopopupKeys[i][j] = NULL;
+                        }
+                }
+        }
+
+        return 0;
+}
+
+
+
+mcfboolean
+CMCFResourceCache::load_layoutkey_properties(mcfint keyset, McfLayoutKeyProperties (*pLayoutKeyProperties)[MAX_KEY])
+{
+    FILE *fp;
+    int i;
+
+    StoredMcfLayoutKeyPropertiesHeader header;
+    StoredMcfLayoutKeyProperties stored;
+
+    fp = fopen(KEY_PROPERTIES_FILE, "r");
+    if (!fp) {
+        return FALSE;
+    }
+
+    fread(&header, sizeof(StoredMcfLayoutKeyPropertiesHeader), 1, fp);
+    if (!header.addrKey[keyset][0]) {
+            return FALSE;
+    }
+
+    fseek(fp, header.addrKey[keyset][0], SEEK_SET);
+    memset((*pLayoutKeyProperties), 0x00, sizeof(McfLayoutKeyProperties)*MAX_KEY);
+    for (i=0; i < MAX_KEY; i++) {
+            if (header.addrKey[keyset][i]) {
+                    fseek(fp, header.addrKey[keyset][i], SEEK_SET);
+                    fread(&stored, sizeof(StoredMcfLayoutKeyProperties), 1, fp);
+                    copy_from_stored(&(*pLayoutKeyProperties)[i], &stored);
+            } else {
+                    break;
+            }
+    }
+
+    fclose(fp);
+
+    return TRUE;
+}
+
+mcfboolean
+CMCFResourceCache::load_layoutkey_properties(mcfint keyset, mcfint keyidx, McfLayoutKeyProperties *pLayoutKeyProperties)
+{
+    FILE *fp;
+    int i;
+
+    StoredMcfLayoutKeyPropertiesHeader header;
+    StoredMcfLayoutKeyProperties stored;
+
+    fp = fopen(KEY_PROPERTIES_FILE, "r");
+    if (!fp) {
+        return FALSE;
+    }
+
+    fread(&header, sizeof(StoredMcfLayoutKeyPropertiesHeader), 1, fp);
+    if (!header.addrKey[keyset][keyidx]) {
+            return FALSE;
+    }
+
+    memset(pLayoutKeyProperties, 0x00, sizeof(McfLayoutKeyProperties));
+
+    fseek(fp, header.addrKey[keyset][keyidx], SEEK_SET);
+    fread(&stored, sizeof(StoredMcfLayoutKeyProperties), 1, fp);
+    copy_from_stored(pLayoutKeyProperties, &stored);
+
+    fclose(fp);
+
+    return TRUE;
+
+}
+
+
+#endif
+
+
+/**
+ * Returns the current layout data
+ */
+const McfLayout*
+CMCFResourceCache::get_cur_layout(mcfwindow window) const
+{
+    MCF_DEBUG();
+
+    const McfLayout *ret = NULL;
+    CMCFWindows *windows = CMCFWindows::get_instance();
+
+    if(windows) {
+        if (windows->get_base_window() == window) {
+            ret = &mCurBaseLayout;
+        } else {
+            mcfbyte popupindex = windows->find_popup_window_index(window);
+            mcf_assert_return_false(popupindex < MAX_POPUP_WINDOW);
+            if (popupindex < MAX_POPUP_WINDOW) {
+                ret = &mCurPopupLayout[popupindex];
+            }
+        }
+    }
+    return ret;
+}
+
+/**
+ * Translates the current x,y,width,height by the current screen resolution
+ * This func should be called when the class init
+ */
+mcfboolean
+CMCFResourceCache::resize_resource_elements_by_resolution()
+{
+    mcfint loop, innerLoop;
+    CMCFUtils *utils = CMCFUtils::get_instance();
+
+    mcfboolean invert_display = FALSE;
+    if(MCF_AUTO_DETECT_PORTRAIT_LANDSCAPE) {
+        mcfint x, y;
+        utils->get_screen_resolution(&x, &y);
+        /* If the width of screen is bigger than the height, switch portrait mode and landscape mode */
+        if(x > y) {
+            invert_display = TRUE;
+        }
+    }
+
+    /* First we recaculate all the coordinations of each keys and sizes of layouts structure */
+    for (loop = 0;loop < MAX_LAYOUT;loop++) {
+        mcffloat scale_value_x, scale_value_y;
+        if(invert_display) {
+            if(mcf_layout[loop].displayType == MCFDISPLAY_PORTRAIT) {
+                scale_value_x = utils->get_scale_rate_y();
+                scale_value_y = utils->get_scale_rate_x();
+            } else {
+                scale_value_x = utils->get_scale_rate_x();
+                scale_value_y = utils->get_scale_rate_y();
+            }
+        } else {
+            if(mcf_layout[loop].displayType == MCFDISPLAY_PORTRAIT) {
+                scale_value_x = utils->get_scale_rate_x();
+                scale_value_y = utils->get_scale_rate_y();
+            } else {
+                scale_value_x = utils->get_scale_rate_y();
+                scale_value_y = utils->get_scale_rate_x();
+            }
+        }
+        mcf_layout[loop].width *= scale_value_x;
+        mcf_layout[loop].height *= scale_value_y;
+        for (innerLoop = 0;innerLoop < MAX_KEY;innerLoop++) {
+            if (mcf_layout_key_coordination[loop][innerLoop].fValid == USED) {
+                mcf_layout_key_coordination[loop][innerLoop].x *= scale_value_x;
+                mcf_layout_key_coordination[loop][innerLoop].y *= scale_value_y;
+                mcf_layout_key_coordination[loop][innerLoop].width *= scale_value_x;
+                mcf_layout_key_coordination[loop][innerLoop].height *= scale_value_y;
+                mcf_layout_key_coordination[loop][innerLoop].addHitLeft *= scale_value_x;
+                mcf_layout_key_coordination[loop][innerLoop].addHitRight *= scale_value_x;
+                mcf_layout_key_coordination[loop][innerLoop].addHitTop *= scale_value_y;
+                mcf_layout_key_coordination[loop][innerLoop].addHitBottom *= scale_value_y;
+                mcf_layout_key_coordination[loop][innerLoop].popXOffset *= scale_value_x;
+                mcf_layout_key_coordination[loop][innerLoop].popYOffset *= scale_value_y;
+                mcf_layout_key_coordination[loop][innerLoop].popImageX *= scale_value_x;
+                mcf_layout_key_coordination[loop][innerLoop].popImageY *= scale_value_y;
+            }
+        }
+    }
+
+    /* And resize the font labels, adjusting the size of padding also */
+    for (loop = 0;loop < MAX_LABEL_PROPERTIES;loop++) {
+        for (innerLoop = 0;innerLoop < MAX_SIZE_OF_LABEL_FOR_ONE;innerLoop++) {
+            if (mcf_key_label_properties[loop][innerLoop].fValid) {
+                mcf_key_label_properties[loop][innerLoop].fontSize *= utils->get_smallest_scale_rate();
+            }
+            mcf_key_label_properties[loop][innerLoop].paddingX *= utils->get_smallest_scale_rate();
+            mcf_key_label_properties[loop][innerLoop].paddingY *= utils->get_smallest_scale_rate();
+            mcf_key_label_properties[loop][innerLoop].shadowDistance *= utils->get_smallest_scale_rate();
+        }
+    }
+
+    /* Predefined font labels */
+    CAND_LABEL_PROP.fontSize *= utils->get_smallest_scale_rate();
+    CAND_LABEL_PROP.paddingX *= utils->get_smallest_scale_rate();
+    CAND_LABEL_PROP.paddingY *= utils->get_smallest_scale_rate();
+
+    ZOOMING_LABEL_PROP.fontSize *= utils->get_smallest_scale_rate();
+    ZOOMING_LABEL_PROP.paddingX *= utils->get_smallest_scale_rate();
+    ZOOMING_LABEL_PROP.paddingY *= utils->get_smallest_scale_rate();
+
+    mcf_autopopup_configure.labelProp.fontSize *= utils->get_smallest_scale_rate();
+    mcf_autopopup_configure.labelProp.paddingX *= utils->get_smallest_scale_rate();
+    mcf_autopopup_configure.labelProp.paddingY *= utils->get_smallest_scale_rate();
+
+    mcf_autopopup_configure.wndDecoSize *= utils->get_smallest_scale_rate();
+    mcf_autopopup_configure.bgPadding *= utils->get_smallest_scale_rate();
+    mcf_autopopup_configure.btnSpacing *= utils->get_smallest_scale_rate();
+    utils->scale_x(&(mcf_autopopup_configure.btnWidth));
+    utils->scale_y(&(mcf_autopopup_configure.btnHeight));
+
+    if(MCF_AUTO_DETECT_PORTRAIT_LANDSCAPE) {
+        mcfint x, y;
+        utils->get_screen_resolution(&x, &y);
+        /* If the width of screen is bigger than the height, switch portrait mode and landscape mode */
+        if(x > y) {
+            for (loop = 0;loop < MAX_INPUT_MODE;loop++) {
+                mcfbyte temp = mcf_input_mode_configure[loop].layoutId[0];
+                mcf_input_mode_configure[loop].layoutId[0] = mcf_input_mode_configure[loop].layoutId[1];
+                mcf_input_mode_configure[loop].layoutId[1] = temp;
+            }
+            for (loop = 0;loop < MAX_INPUT_MODE_POPUP;loop++) {
+                mcfbyte temp = mcf_input_mode_popup_configure[loop].layoutId[0];
+                mcf_input_mode_popup_configure[loop].layoutId[0] = mcf_input_mode_popup_configure[loop].layoutId[1];
+                mcf_input_mode_popup_configure[loop].layoutId[1] = temp;
+            }
+            for (loop = 0;loop < MODIFIER_DECORATION_NUM;loop++) {
+                for(innerLoop = 0;innerLoop < KEY_MODIFIER_MAX;innerLoop++) {
+                    mcfchar *temp;
+                    temp = mcf_modifier_decoration[loop].bgImgPath[0][innerLoop];
+                    mcf_modifier_decoration[loop].bgImgPath[0][innerLoop] = mcf_modifier_decoration[loop].bgImgPath[1][innerLoop];
+                    mcf_modifier_decoration[loop].bgImgPath[1][innerLoop] = temp;
+                }
+            }
+        }
+    }
+}
+
+/**
+ * Changes the current key properties by the current screen resolution
+ * This func should be called when the class init
+ */
+mcfboolean
+CMCFResourceCache::change_by_privatekey(const mcfbyte inputModeIdx, const mcfbyte layoutIdx, const mcfbyte keyIdx,
+                                               McfLayoutKeyProperties* properties, McfLayoutKeyConfigure* configure)
+{
+    MCF_DEBUG();
+    mcf_assert_return_false(properties);
+    mcf_assert_return_false(configure);
+
+    if(properties && configure) {
+        for (int loop = 0;loop < MAX_PRIVATE_KEY; loop++) {
+            if (mPrivateKeyProperties[loop].fValid == USED) {
+                if (((inputModeIdx == mPrivateKeyProperties[loop].inputModeIdx ||
+                       mPrivateKeyProperties[loop].inputModeIdx == -1)  &&
+                    layoutIdx == mPrivateKeyProperties[loop].layoutIdx &&
+                    keyIdx == mPrivateKeyProperties[loop].keyIdx) ||
+                    (mPrivateKeyProperties[loop].inputModeIdx == -1 &&
+                    mPrivateKeyProperties[loop].layoutIdx == -1 &&
+                    configure->customID == mPrivateKeyProperties[loop].customID) ) {
+                    /* sets the current properties to private key properties */
+                      copy_from_privatekeyproperties(&mPrivateKeyProperties[loop], properties, configure);
+                      break;
+                }
+            }
+        }
+    }
+
+    return TRUE;
+}
+
+/**
+ * Copys the given private properties data to the given key properties
+ */
+mcfboolean
+CMCFResourceCache::copy_from_privatekeyproperties(const McfPrivateKeyProperties* privProperties,
+                                                         McfLayoutKeyProperties* properties, McfLayoutKeyConfigure *configure)
+{
+    MCF_DEBUG();
+    mcf_assert_return_false(privProperties);
+    mcf_assert_return_false(properties);
+    mcf_assert_return_false(configure);
+
+    if(privProperties && configure && properties) {
+        /* Configure */
+        configure->customID = privProperties->customID;
+        configure->buttonType = privProperties->buttonType;
+        configure->keyType = privProperties->keyType;
+        configure->popupType = privProperties->popupType;
+        configure->fUseMagnifier = privProperties->fUseMagnifier;
+        configure->fEnable = privProperties->fEnable;
+
+        memcpy(configure->popupInputMode, privProperties->popupInputMode, sizeof(configure->popupInputMode));
+
+        /* Properties */
+        properties->labelCnt = privProperties->labelCnt;
+        properties->labelPropId = privProperties->labelPropId;
+        properties->keyValueCnt = privProperties->keyValueCnt;
+        properties->longKeyValue = privProperties->longKeyValue;
+        properties->longKeyEvent = privProperties->longKeyEvent;
+        properties->useRepeatKey = privProperties->useRepeatKey;
+        properties->dontClosePopup = privProperties->dontClosePopup;
+        properties->extraOption = privProperties->extraOption;
+
+        memcpy(properties->label, privProperties->label, sizeof(properties->label));
+        memcpy(properties->labelImgPath, privProperties->labelImgPath, sizeof(properties->labelImgPath));
+        memcpy(properties->bgImgPath, privProperties->bgImgPath, sizeof(properties->bgImgPath));
+        memcpy(properties->keyValue, privProperties->keyValue, sizeof(properties->keyValue));
+        memcpy(properties->keyEvent, privProperties->keyEvent, sizeof(properties->keyEvent));
+        memcpy(properties->autopopupKeys, privProperties->autopopupKeys, sizeof(properties->autopopupKeys));
+    }
+
+    return TRUE;
+}
+
+/**
+ * Copys the given properties data to the given private key properties
+ */
+mcfboolean
+CMCFResourceCache::copy_to_privatekeyproperties(const McfLayoutKeyProperties* properties,
+                                                       const McfLayoutKeyConfigure *configure, McfPrivateKeyProperties* privProperties)
+{
+    MCF_DEBUG();
+    mcf_assert_return_false(privProperties);
+    mcf_assert_return_false(properties);
+       mcf_assert_return_false(configure);
+
+    /* sets the current key Properties to private key privProperties */
+
+    if(privProperties && configure && properties) {
+        /* Configure */
+        privProperties->customID = configure->customID;
+        privProperties->buttonType = configure->buttonType;
+        privProperties->keyType = configure->keyType;
+        privProperties->popupType = configure->popupType;
+        privProperties->fUseMagnifier = configure->fUseMagnifier;
+        privProperties->fEnable = configure->fEnable;
+
+        memcpy(privProperties->popupInputMode, configure->popupInputMode, sizeof(privProperties->popupInputMode));
+
+        /* Properties */
+        privProperties->labelCnt = properties->labelCnt;
+        privProperties->labelPropId = properties->labelPropId;
+        privProperties->keyValueCnt = properties->keyValueCnt;
+        privProperties->longKeyValue = properties->longKeyValue;
+        privProperties->longKeyEvent = properties->longKeyEvent;
+        privProperties->useRepeatKey = properties->useRepeatKey;
+        privProperties->dontClosePopup = properties->dontClosePopup;
+        privProperties->extraOption = properties->extraOption;
+
+        memcpy(privProperties->label, properties->label, sizeof(privProperties->label));
+        memcpy(privProperties->labelImgPath, properties->labelImgPath, sizeof(privProperties->labelImgPath));
+        memcpy(privProperties->bgImgPath, properties->bgImgPath, sizeof(privProperties->bgImgPath));
+        memcpy(privProperties->keyValue, properties->keyValue, sizeof(privProperties->keyValue));
+        memcpy(privProperties->keyEvent, properties->keyEvent, sizeof(privProperties->keyEvent));
+        memcpy(privProperties->autopopupKeys, properties->autopopupKeys, sizeof(privProperties->autopopupKeys));
+    }
+
+    return TRUE;
+}
+
+
+/**
+ * Adds a new private key
+ * It will update it to the current cache properties context because the application can call it anytime
+ * For adapting it in realtime, you should explictly call the draw_button function.
+ *
+ * @param[out] fNeedInvalid It will return true if the current private can be adapt into the current display.
+ * @return id an array index of the private key
+ */
+mcfint
+CMCFResourceCache::add_private_key(McfPrivateKeyProperties* privProperties, mcfboolean *fNeedInvaild)
+{
+    MCF_DEBUG();
+    mcf_assert_return_false(privProperties);
+    mcfint ret = NOT_USED;
+    *fNeedInvaild = FALSE; /* don't need to update now */
+
+    if(!mcf_check_arrindex(privProperties->keyIdx, MAX_KEY))
+        return -1;
+
+    /* Finds an index to be set */
+    mcfint loop = 0;
+    for (loop = 0;loop < MAX_PRIVATE_KEY; loop++) {
+        if ((mPrivateKeyProperties[loop].inputModeIdx == privProperties->inputModeIdx) &&
+            (mPrivateKeyProperties[loop].layoutIdx == privProperties->layoutIdx) &&
+            mPrivateKeyProperties[loop].keyIdx == privProperties->keyIdx) {
+            break;
+        } else if ((mPrivateKeyProperties[loop].inputModeIdx == privProperties->inputModeIdx) &&
+                   (mPrivateKeyProperties[loop].layoutIdx == privProperties->layoutIdx) &&
+                   (privProperties->inputModeIdx == -1 && privProperties->layoutIdx == -1) &&
+                   mPrivateKeyProperties[loop].customID == privProperties->customID) {
+            break;
+        } else if (mPrivateKeyProperties[loop].fValid == FALSE) {
+               break;
+        }
+    }
+
+    if (loop == MAX_PRIVATE_KEY) {
+        printf("Out of buffer!! could not insert new private data into buffer \n");
+        return -1;
+    }
+
+    memcpy(&mPrivateKeyProperties[loop], privProperties, sizeof(McfPrivateKeyProperties));
+    mPrivateKeyProperties[loop].fValid = USED;
+    ret = loop;
+
+    /* Checks whether it's the same with the current context */
+    CMCFContext *context = CMCFContext::get_instance();
+
+    /* For baselayout */
+    mcfbyte layout = context->get_base_layout();
+    mcfbyte inputmode = context->get_input_mode();
+    if ((privProperties->inputModeIdx == inputmode && privProperties->layoutIdx == layout) ||
+               (privProperties->inputModeIdx == -1 && privProperties->layoutIdx == -1 &&
+               privProperties->customID == mCurBaseLayoutKeyConfigure[privProperties->keyIdx].customID)) {
+        /* sets the current properties to private key properties */
+        copy_from_privatekeyproperties(privProperties,
+                                       &mCurBaseLayoutKeyProperties[privProperties->keyIdx],
+                                       &mCurBaseLayoutKeyConfigure[privProperties->keyIdx]);
+        *fNeedInvaild = TRUE;
+        return ret;
+    }
+
+    if (ret == NOT_USED) {
+        printf("Failed!. Out of private data buffer\n");
+    }
+    return ret;
+}
+
+/**
+ * Removes the private data of the given id from McfPrivateKeyProperties buffer
+ */
+mcfboolean
+CMCFResourceCache::remove_private_key(mcfint id)
+{
+    MCF_DEBUG();
+    mcfint loop;
+    CMCFContext *context = CMCFContext::get_instance();
+
+
+    /* resets the current properties to predefined properties */
+    mcfbyte keyidx = mPrivateKeyProperties[id].keyIdx;
+    clone_keyproperties(&(mPrivateKeyProperties[id]),
+                        mPrivateKeyProperties[id].inputModeIdx,
+                        mPrivateKeyProperties[id].layoutIdx,
+                        keyidx);
+    copy_from_privatekeyproperties(&(mPrivateKeyProperties[id]),
+                                   &mCurBaseLayoutKeyProperties[keyidx],
+                                   &mCurBaseLayoutKeyConfigure[keyidx]);
+
+    /* Shift all the privatekey properties to the left by 1, starting from the item next to the id th element */
+    for (loop = id;loop < MAX_PRIVATE_KEY - 1; loop++) {
+        memcpy(&mPrivateKeyProperties[loop], &mPrivateKeyProperties[loop + 1], sizeof(&mPrivateKeyProperties[loop]));
+    }
+    /* Fill 0x00 to the last element */
+    memset(&mPrivateKeyProperties[MAX_PRIVATE_KEY - 1], 0x00, sizeof(McfPrivateKeyProperties));
+    return TRUE;
+}
+
+/**
+ * Clears all private keys
+ */
+mcfboolean
+CMCFResourceCache::clear_private_keys()
+{
+    MCF_DEBUG();
+    memset(mPrivateKeyProperties, 0x00, sizeof(McfPrivateKeyProperties) * MAX_PRIVATE_KEY);
+    return TRUE;
+}
+
+/**
+ * Re-computes the cache data of the given window. The cache data has been including the current key properties, button context, layout etc,,
+ * Another role of this func is to adjust the current coordination according to the current resolution.
+ * This func will be called when a newly window is created
+ */
+mcfboolean
+CMCFResourceCache::recompute_layout(mcfwindow window)
+{
+    MCF_DEBUG();
+
+    mcfint loop;
+
+    CMCFWindows *windows = CMCFWindows::get_instance();
+    CMCFContext *context = CMCFContext::get_instance();
+    mcfbyte display = context->get_display();
+    mcfbyte inputmode = context->get_input_mode();
+    mcfint sublayoutidx = context->get_cur_sublayout_id();
+
+    McfKeyset keyset = MAX_KEYSET;
+    mcf8 popupindex = NOT_USED;
+
+    McfLayout *pCurLayout = NULL;
+    McfLayoutKeyCoordination (*pCurLayoutKeyCoordination)[MAX_KEY] = NULL;
+    McfLayoutKeyConfigure (*pCurLayoutKeyConfigure)[MAX_KEY] = NULL;
+    McfLayoutKeyProperties (*pCurLayoutKeyProperties)[MAX_KEY] = NULL;
+    McfButtonContext (*pCurButtonContext)[MAX_KEY] = NULL;
+
+    mcfshort layout =  NOT_USED;
+    if(windows && context) {
+        if (windows->is_base_window(window)) {
+            layout = mcf_input_mode_configure[inputmode].layoutId[context->get_display()];
+
+            pCurLayout = &mCurBaseLayout;
+            pCurLayoutKeyCoordination = &mCurBaseLayoutKeyCoordination;
+            pCurLayoutKeyConfigure = &mCurBaseLayoutKeyConfigure;
+            pCurLayoutKeyProperties = &mCurBaseLayoutKeyProperties;
+            pCurButtonContext = &mCurBaseButtonContext;
+
+        } else {
+            popupindex = windows->find_popup_window_index(window);
+            /* Check if the popup index is in valid range */
+            mcf_assert_return_false(popupindex >= 0 && popupindex < MAX_POPUP_WINDOW);
+
+            if (popupindex >= 0 && popupindex < MAX_POPUP_WINDOW) {
+                layout = context->get_popup_layout(window);
+
+                pCurLayout = &mCurPopupLayout[popupindex];
+                pCurLayoutKeyCoordination = &mCurPopupLayoutKeyCoordination[popupindex];
+                pCurLayoutKeyConfigure = &mCurPopupLayoutKeyConfigure[popupindex];
+                pCurLayoutKeyProperties = &mCurPopupLayoutKeyProperties[popupindex];
+
+                pCurButtonContext = &mCurPopupButtonContext[popupindex];
+            }
+        }
+
+        if (pCurLayout && pCurLayoutKeyCoordination && pCurLayoutKeyConfigure &&
+               pCurLayoutKeyProperties && pCurButtonContext) {
+            /* If the layout index represents system-defined autopopup, generate layout and key properties data */
+            if (layout == MCF_LAYOUT_AUTOPOPUP) {
+                const McfLayoutKeyProperties *properties =
+                    get_cur_layout_key_properties(context->get_cur_pressed_window(context->get_last_touch_device_id()),
+                context->get_cur_pressed_key(context->get_last_touch_device_id()));
+
+                generate_autopopup_layout(properties, pCurLayout, pCurLayoutKeyCoordination,
+                                          pCurLayoutKeyConfigure, pCurLayoutKeyProperties, pCurButtonContext);
+            } else {
+                mcf_assert_return_false(layout >= 0 && layout < MAX_LAYOUT);
+
+                if (mcf_check_arrindex(layout, MAX_LAYOUT)) {
+                    memcpy(pCurLayout, &mcf_layout[layout], sizeof(McfLayout));
+
+                    for (loop = 0;loop < (sizeof(mcf_layout_keyset) / sizeof(McfLayoutKeyset));loop++) {
+                        if (mcf_layout_keyset[loop].inputmodeID == inputmode && mcf_layout_keyset[loop].layoutID == layout) {
+                            keyset = static_cast<McfKeyset>(mcf_layout_keyset[loop].keysetID);
+                            break;
+                        }
+                    }
+
+                    mcf_assert_return_false(keyset >= 0 && keyset < MAX_KEYSET);
+
+                    if (mcf_check_arrindex(keyset, MAX_KEYSET)) {
+                        memcpy(pCurLayoutKeyCoordination, mcf_layout_key_coordination[layout],
+                                  sizeof(McfLayoutKeyCoordination) * MAX_KEY);
+                        memcpy(pCurLayoutKeyConfigure, mcf_layout_key_configure[keyset],
+                                  sizeof(McfLayoutKeyConfigure) * MAX_KEY);
+#ifdef ENABLE_RESOURCE_DATA_FILE
+                        load_layoutkey_properties(keyset, pCurLayoutKeyProperties);
+#else
+                        memcpy(pCurLayoutKeyProperties, mcf_layout_key_properties[keyset],
+                                  sizeof(McfLayoutKeyProperties) * MAX_KEY);
+#endif
+
+                        memset(pCurButtonContext, 0x00, sizeof(McfButtonContext) * MAX_KEY);
+
+                        for (loop = 0;loop < MAX_KEY;loop++) {
+                            if (mcf_layout_key_configure[keyset][loop].fValid == USED) {
+                                (*pCurButtonContext)[loop].used = TRUE;
+                                if (popupindex != NOT_USED) {
+                                    change_by_privatekey(inputmode, layout, loop, &(mCurPopupLayoutKeyProperties[popupindex][loop]),
+                                                         &(mCurPopupLayoutKeyConfigure[popupindex][loop]));
+                                } else {
+                                    change_by_privatekey(inputmode, layout, loop, &(mCurBaseLayoutKeyProperties[loop]),
+                                                         &(mCurBaseLayoutKeyConfigure[loop]));
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+
+            /* Resize window */
+            if (windows->is_base_window(window)) {
+                windows->resize_window(window, mCurBaseLayout.width, mCurBaseLayout.height);
+                windows->resize_window(windows->get_dim_window(), mCurBaseLayout.width, mCurBaseLayout.height);
+            }
+
+            /* EFL testing */
+            windows->update_window(window);
+        }
+    }
+
+    return TRUE;
+}
+
+/**
+ * Returns the current key_coordination data
+ */
+McfLayoutKeyCoordination*
+CMCFResourceCache::get_cur_layout_key_coordination(mcfwindow window, mcfbyte keyindex)
+{
+    MCF_DEBUG();
+    mcf_assert_return_null(keyindex < MAX_KEY);
+
+    CMCFWindows *windows = CMCFWindows::get_instance();
+    if (windows->get_base_window() == window) {
+        if (keyindex < MAX_KEY) {
+            return &mCurBaseLayoutKeyCoordination[keyindex];
+        }
+    } else {
+        mcfbyte popupindex = windows->find_popup_window_index(window);
+        mcf_assert_return_false(popupindex < MAX_POPUP_WINDOW);
+        if (keyindex < MAX_KEY && popupindex < MAX_POPUP_WINDOW) {
+            return &mCurPopupLayoutKeyCoordination[popupindex][keyindex];
+        }
+    }
+
+    return NULL;
+}
+
+/**
+ * Returns the current key_configure data
+ */
+McfLayoutKeyConfigure*
+CMCFResourceCache::get_cur_layout_key_configure(mcfwindow window, mcfbyte keyindex)
+{
+    MCF_DEBUG();
+    mcf_assert_return_null(keyindex < MAX_KEY);
+
+    CMCFWindows *windows = CMCFWindows::get_instance();
+    if (windows->get_base_window() == window) {
+        if (keyindex < MAX_KEY) {
+            return &mCurBaseLayoutKeyConfigure[keyindex];
+        }
+    } else {
+        mcfbyte popupindex = windows->find_popup_window_index(window);
+        mcf_assert_return_false(popupindex < MAX_POPUP_WINDOW);
+        if (keyindex < MAX_KEY && popupindex < MAX_POPUP_WINDOW) {
+            return &mCurPopupLayoutKeyConfigure[popupindex][keyindex];
+        }
+    }
+
+    return NULL;
+}
+
+/**
+ * Returns the current key_properties data
+ */
+McfLayoutKeyProperties*
+CMCFResourceCache::get_cur_layout_key_properties(mcfwindow window, mcfbyte keyindex)
+{
+    MCF_DEBUG();
+    mcf_assert_return_null(keyindex < MAX_KEY);
+
+    CMCFWindows *windows = CMCFWindows::get_instance();
+    if (windows->get_base_window() == window) {
+        if (keyindex < MAX_KEY) {
+            return &mCurBaseLayoutKeyProperties[keyindex];
+        }
+    } else {
+        mcfbyte popupindex = windows->find_popup_window_index(window);
+        mcf_assert_return_false(popupindex < MAX_POPUP_WINDOW);
+        if (keyindex < MAX_KEY && popupindex < MAX_POPUP_WINDOW) {
+            return &mCurPopupLayoutKeyProperties[popupindex][keyindex];
+        }
+    }
+
+    return NULL;
+}
+
+/**
+ * Returns the current label_properties data
+ */
+const McfLabelProperties*
+CMCFResourceCache::get_label_properties(mcfshort labeltype, mcfbyte index) const
+{
+    MCF_DEBUG();
+
+    if (labeltype == MCF_LABEL_PROPERTY_AUTOPOPUP) {
+        return &mcf_autopopup_configure.labelProp;
+    } else if (labeltype == MCF_LABEL_PROPERTY_CANDIDATE) {
+        return &CAND_LABEL_PROP;
+    } else if (labeltype == MCF_LABEL_PROPERTY_ZOOMING) {
+        return &ZOOMING_LABEL_PROP;
+    } else {
+        if(mcf_check_arrindex(labeltype, MAX_LABEL_PROPERTIES) &&
+           mcf_check_arrindex(index, MAX_SIZE_OF_LABEL_FOR_ONE)) {
+          return &mcf_key_label_properties[labeltype][index];
+        }
+    }
+
+    return NULL;
+}
+
+/**
+ * Returns the current button_context data
+ */
+McfButtonContext*
+CMCFResourceCache::get_cur_button_context(mcfwindow window, mcfbyte keyindex)
+{
+    MCF_DEBUG();
+    mcf_assert_return_null(keyindex < MAX_KEY);
+
+    CMCFWindows *windows = CMCFWindows::get_instance();
+    if (windows->get_base_window() == window) {
+        if (keyindex < MAX_KEY) {
+            return &mCurBaseButtonContext[keyindex];
+        }
+    } else {
+        mcfbyte popupindex = windows->find_popup_window_index(window);
+        mcf_assert_return_null(popupindex < MAX_POPUP_WINDOW);
+        if (keyindex < MAX_KEY && popupindex < MAX_POPUP_WINDOW) {
+            return &mCurPopupButtonContext[popupindex][keyindex];
+        }
+    }
+
+    return NULL;
+}
+
+/* Generate and fill autopopup layout data */
+void CMCFResourceCache::generate_autopopup_layout(const McfLayoutKeyProperties *properties,
+                                                  McfLayout *pCurLayout,
+                                                  McfLayoutKeyCoordination (*pCurLayoutKeyCoordination)[MAX_KEY],
+                                                  McfLayoutKeyConfigure (*pCurLayoutKeyConfigure)[MAX_KEY],
+                                                  McfLayoutKeyProperties (*pCurLayoutKeyProperties)[MAX_KEY],
+                                                  McfButtonContext (*pCurButtonContext)[MAX_KEY])
+{
+    MCF_DEBUG();
+
+    CMCFUtils *utils = CMCFUtils::get_instance();
+    CMCFContext *context = CMCFContext::get_instance();
+
+    int loop;
+    if (properties) {
+        mcfbyte numKeys, numColumns, numRows;
+        mcfint x, y, width, height;
+        MCFShiftState shiftidx = context->get_shift_state();
+        if(shiftidx < 0 || shiftidx >= MCF_SHIFT_STATE_MAX) shiftidx = MCF_SHIFT_STATE_OFF;
+        if (utils->get_autopopup_window_variables(properties->autopopupKeys[shiftidx], &numKeys, &numColumns,
+                                                         &numRows, &width, &height)) {
+            int row = 0, column = 0;
+
+            pCurLayout->fValid = TRUE;
+            pCurLayout->style = LAYOUT_STYLE_POPUP_GRAB;
+            pCurLayout->name = NULL;
+            pCurLayout->width = width;
+            pCurLayout->height = height;
+            memset(pCurLayout->imgPath, 0x00, sizeof(pCurLayout->imgPath));
+            pCurLayout->fUseSWbg = TRUE;
+            if (mcf_autopopup_configure.bgImgPath != NULL) {
+                pCurLayout->imgPath[0] = mcf_autopopup_configure.bgImgPath;
+                pCurLayout->fUseSWbg = FALSE;
+            }
+            pCurLayout->fUseSWBtn = TRUE;
+            /* If button image path is set, use images instead of SW buttons */
+            if (mcf_autopopup_configure.btnImgPath[0] != NULL) {
+                pCurLayout->fUseSWBtn = FALSE;
+            }
+            pCurLayout->fUseZoomWnd = FALSE;
+            pCurLayout->linkedLayoutId = NOT_USED;
+            pCurLayout->fExtractBG = FALSE;
+            pCurLayout->bgColor = mcf_autopopup_configure.bgColor;
+            pCurLayout->bgLineWidth = mcf_autopopup_configure.bgLineWidth;
+            pCurLayout->bgLineColor = mcf_autopopup_configure.bgLineColor;
+            pCurLayout->addGrabLeft = mcf_autopopup_configure.addGrabLeft;
+            pCurLayout->addGrabRight = mcf_autopopup_configure.addGrabRight;
+            pCurLayout->addGrabTop = mcf_autopopup_configure.addGrabTop;
+            pCurLayout->addGrabBottom = mcf_autopopup_configure.addGrabBottom;
+
+            memset((*pCurLayoutKeyCoordination), 0x00, sizeof(McfLayoutKeyCoordination) * MAX_KEY);
+            memset((*pCurLayoutKeyConfigure), 0x00, sizeof(McfLayoutKeyConfigure) * MAX_KEY);
+            memset((*pCurLayoutKeyProperties), 0x00, sizeof(McfLayoutKeyProperties) * MAX_KEY);
+
+            memset((*pCurButtonContext), 0x00, sizeof(McfButtonContext) * MAX_KEY);
+
+            for (loop = 0;loop < (numColumns * numRows) && loop < MAX_KEY && loop < MAX_SIZE_OF_AUTOPOPUP_STRING;loop++) {
+                char tempstr[2];
+                column = (loop % numColumns);
+                row = loop / numColumns;
+                x = mcf_autopopup_configure.bgPadding + (mcf_autopopup_configure.btnWidth * column) +
+                    (mcf_autopopup_configure.btnSpacing * column);
+                y = mcf_autopopup_configure.bgPadding + (mcf_autopopup_configure.btnHeight * row) +
+                    (mcf_autopopup_configure.btnSpacing * row);
+
+                (*pCurLayoutKeyCoordination)[loop].fValid = TRUE;
+                (*pCurLayoutKeyCoordination)[loop].x = x + utils->get_scale_x(mcf_autopopup_configure.wndDecoSize);
+                (*pCurLayoutKeyCoordination)[loop].y = y + utils->get_scale_y(mcf_autopopup_configure.wndDecoSize);
+                (*pCurLayoutKeyCoordination)[loop].width = mcf_autopopup_configure.btnWidth;
+                (*pCurLayoutKeyCoordination)[loop].height = mcf_autopopup_configure.btnHeight;
+                (*pCurLayoutKeyCoordination)[loop].popXOffset = 0;
+                (*pCurLayoutKeyCoordination)[loop].popYOffset = 0;
+                (*pCurLayoutKeyCoordination)[loop].popImageX = 0;
+                (*pCurLayoutKeyCoordination)[loop].popImageY = 0;
+                (*pCurLayoutKeyCoordination)[loop].subLayoutID = SUBLAYOUTID_NONE;
+
+                (*pCurLayoutKeyConfigure)[loop].fValid = TRUE;
+                if(loop < numKeys) {
+                    (*pCurLayoutKeyConfigure)[loop].buttonType = BUTTON_TYPE_NORMAL;
+                } else {
+                    (*pCurLayoutKeyConfigure)[loop].buttonType = BUTTON_TYPE_UIITEM;
+                }
+                (*pCurLayoutKeyConfigure)[loop].keyType = KEY_TYPE_UNICODE;
+                (*pCurLayoutKeyConfigure)[loop].popupType = POPUP_TYPE_NONE;
+                (*pCurLayoutKeyConfigure)[loop].fUseMagnifier = FALSE;
+                (*pCurLayoutKeyConfigure)[loop].fEnable = TRUE;
+                memset((*pCurLayoutKeyConfigure)[loop].popupInputMode, NOT_USED,
+                          sizeof((*pCurLayoutKeyConfigure)[loop].popupInputMode));
+
+                (*pCurLayoutKeyProperties)[loop].fValid = TRUE;
+                (*pCurLayoutKeyProperties)[loop].labelCnt = 1;
+                (*pCurLayoutKeyProperties)[loop].label[0][0] = properties->autopopupKeys[0][loop];
+                (*pCurLayoutKeyProperties)[loop].label[1][0] = properties->autopopupKeys[1][loop];
+                (*pCurLayoutKeyProperties)[loop].label[2][0] = properties->autopopupKeys[2][loop];
+                (*pCurLayoutKeyProperties)[loop].labelPropId = MCF_LABEL_PROPERTY_AUTOPOPUP;
+                memset((*pCurLayoutKeyProperties)[loop].labelImgPath, 0x00, sizeof((*pCurLayoutKeyProperties)[loop].labelImgPath));
+                memset((*pCurLayoutKeyProperties)[loop].bgImgPath, 0x00, sizeof((*pCurLayoutKeyProperties)[loop].bgImgPath));
+                for (int innerLoop = 0;innerLoop < MCF_BUTTON_STATE_MAX;innerLoop++) {
+                    (*pCurLayoutKeyProperties)[loop].bgImgPath[0][innerLoop] =
+                        (*pCurLayoutKeyProperties)[loop].bgImgPath[1][innerLoop] =
+                            mcf_autopopup_configure.btnImgPath[innerLoop];
+                }
+
+                (*pCurLayoutKeyProperties)[loop].keyValueCnt = 1;
+                (*pCurLayoutKeyProperties)[loop].keyValue[0][0] = properties->autopopupKeys[0][loop];
+                (*pCurLayoutKeyProperties)[loop].keyValue[1][0] = properties->autopopupKeys[1][loop];
+                (*pCurLayoutKeyProperties)[loop].keyValue[2][0] = properties->autopopupKeys[2][loop];
+                (*pCurLayoutKeyProperties)[loop].keyEvent[0][0] = 0;
+                (*pCurLayoutKeyProperties)[loop].keyEvent[1][0] = 0;
+                (*pCurLayoutKeyProperties)[loop].longKeyValue = NULL;
+                (*pCurLayoutKeyProperties)[loop].longKeyEvent = 0;
+
+                (*pCurLayoutKeyProperties)[loop].autopopupKeys[0][0] = NULL;
+                (*pCurLayoutKeyProperties)[loop].autopopupKeys[1][0] = NULL;
+                (*pCurLayoutKeyProperties)[loop].autopopupKeys[2][0] = NULL;
+                (*pCurLayoutKeyProperties)[loop].extraOption = 0;
+
+                (*pCurButtonContext)[loop].used = TRUE;
+            }
+            if(mcf_autopopup_configure.wndDecoSize > 0) {
+                mcfbyte decoidx;
+                for (decoidx = 0;decoidx < MAX_WND_DECORATOR;decoidx++) {
+                    if(loop + decoidx < MAX_KEY) {
+                        (*pCurLayoutKeyCoordination)[loop + decoidx].fValid = TRUE;
+                        switch(decoidx) {
+                            case WND_DECORATOR_TOP_LEFT:
+                                (*pCurLayoutKeyCoordination)[loop + decoidx].x = 0;
+                                (*pCurLayoutKeyCoordination)[loop + decoidx].y = 0;
+                                (*pCurLayoutKeyCoordination)[loop + decoidx].width =
+                                    utils->get_scale_x(mcf_autopopup_configure.wndDecoSize);
+                                (*pCurLayoutKeyCoordination)[loop + decoidx].height =
+                                    utils->get_scale_y(mcf_autopopup_configure.wndDecoSize);
+                            break;
+                            case WND_DECORATOR_TOP_CENTER:
+                                (*pCurLayoutKeyCoordination)[loop + decoidx].x =
+                                    utils->get_scale_x(mcf_autopopup_configure.wndDecoSize);
+                                (*pCurLayoutKeyCoordination)[loop + decoidx].y = 0;
+                                (*pCurLayoutKeyCoordination)[loop + decoidx].width =
+                                    width - (2 * utils->get_scale_x(mcf_autopopup_configure.wndDecoSize));
+                                (*pCurLayoutKeyCoordination)[loop + decoidx].height =
+                                    utils->get_scale_y(mcf_autopopup_configure.wndDecoSize);
+                                break;
+                            case WND_DECORATOR_TOP_RIGHT:
+                                (*pCurLayoutKeyCoordination)[loop + decoidx].x =
+                                    width - utils->get_scale_x(mcf_autopopup_configure.wndDecoSize);
+                                (*pCurLayoutKeyCoordination)[loop + decoidx].y = 0;
+                                (*pCurLayoutKeyCoordination)[loop + decoidx].width =
+                                    utils->get_scale_x(mcf_autopopup_configure.wndDecoSize);
+                                (*pCurLayoutKeyCoordination)[loop + decoidx].height =
+                                    utils->get_scale_y(mcf_autopopup_configure.wndDecoSize);
+                                break;
+                            case WND_DECORATOR_MIDDLE_LEFT:
+                                (*pCurLayoutKeyCoordination)[loop + decoidx].x = 0;
+                                (*pCurLayoutKeyCoordination)[loop + decoidx].y =
+                                    utils->get_scale_y(mcf_autopopup_configure.wndDecoSize);
+                                (*pCurLayoutKeyCoordination)[loop + decoidx].width =
+                                    utils->get_scale_x(mcf_autopopup_configure.wndDecoSize);
+                                (*pCurLayoutKeyCoordination)[loop + decoidx].height =
+                                    height - (2 * utils->get_scale_y(mcf_autopopup_configure.wndDecoSize));
+                                break;
+                            case WND_DECORATOR_MIDDLE_RIGHT:
+                                (*pCurLayoutKeyCoordination)[loop + decoidx].x =
+                                    width - utils->get_scale_x(mcf_autopopup_configure.wndDecoSize);
+                                (*pCurLayoutKeyCoordination)[loop + decoidx].y =
+                                    utils->get_scale_y(mcf_autopopup_configure.wndDecoSize);
+                                (*pCurLayoutKeyCoordination)[loop + decoidx].width =
+                                    utils->get_scale_x(mcf_autopopup_configure.wndDecoSize);
+                                (*pCurLayoutKeyCoordination)[loop + decoidx].height =
+                                    height - (2 * utils->get_scale_y(mcf_autopopup_configure.wndDecoSize));
+                                break;
+                            case WND_DECORATOR_BOTTOM_LEFT:
+                                (*pCurLayoutKeyCoordination)[loop + decoidx].x = 0;
+                                (*pCurLayoutKeyCoordination)[loop + decoidx].y =
+                                    height - utils->get_scale_y(mcf_autopopup_configure.wndDecoSize);
+                                (*pCurLayoutKeyCoordination)[loop + decoidx].width =
+                                    utils->get_scale_x(mcf_autopopup_configure.wndDecoSize);
+                                (*pCurLayoutKeyCoordination)[loop + decoidx].height =
+                                    utils->get_scale_y(mcf_autopopup_configure.wndDecoSize);
+                                break;
+                            case WND_DECORATOR_BOTTOM_CENTER:
+                                (*pCurLayoutKeyCoordination)[loop + decoidx].x =
+                                    utils->get_scale_x(mcf_autopopup_configure.wndDecoSize);
+                                (*pCurLayoutKeyCoordination)[loop + decoidx].y =
+                                    height - utils->get_scale_y(mcf_autopopup_configure.wndDecoSize);
+                                (*pCurLayoutKeyCoordination)[loop + decoidx].width =
+                                    width - (2 * utils->get_scale_x(mcf_autopopup_configure.wndDecoSize));
+                                (*pCurLayoutKeyCoordination)[loop + decoidx].height =
+                                    utils->get_scale_y(mcf_autopopup_configure.wndDecoSize);
+                                break;
+                            case WND_DECORATOR_BOTTOM_RIGHT:
+                                (*pCurLayoutKeyCoordination)[loop + decoidx].x =
+                                    width - utils->get_scale_x(mcf_autopopup_configure.wndDecoSize);
+                                (*pCurLayoutKeyCoordination)[loop + decoidx].y =
+                                    height - utils->get_scale_y(mcf_autopopup_configure.wndDecoSize);
+                                (*pCurLayoutKeyCoordination)[loop + decoidx].width =
+                                    utils->get_scale_x(mcf_autopopup_configure.wndDecoSize);
+                                (*pCurLayoutKeyCoordination)[loop + decoidx].height =
+                                    utils->get_scale_y(mcf_autopopup_configure.wndDecoSize);
+                                break;
+                        }
+
+                        (*pCurButtonContext)[loop + decoidx].used = TRUE;
+                        (*pCurLayoutKeyConfigure)[loop + decoidx].fValid = TRUE;
+                        (*pCurLayoutKeyConfigure)[loop + decoidx].buttonType = BUTTON_TYPE_UIITEM;
+                        (*pCurLayoutKeyProperties)[loop + decoidx].fValid = TRUE;
+                        (*pCurLayoutKeyProperties)[loop + decoidx].bgImgPath[0][0] =
+                        (*pCurLayoutKeyProperties)[loop + decoidx].bgImgPath[0][1] =
+                        (*pCurLayoutKeyProperties)[loop + decoidx].bgImgPath[1][0] =
+                        (*pCurLayoutKeyProperties)[loop + decoidx].bgImgPath[1][1] =
+                            mcf_autopopup_configure.wndDecoImgPath[decoidx];
+                    }
+                }
+            }
+        }
+    }
+}
+
+/**
+* Sets the current theme name
+*/
+mcfboolean
+CMCFResourceCache::set_cur_themename( const mcfchar *themename )
+{
+    if (themename) {
+        strncpy(mCurThemename, themename, _POSIX_PATH_MAX - 1);
+        mCurThemename[_POSIX_PATH_MAX - 1] = '\0';
+
+        char fontprop_path[_POSIX_PATH_MAX] = { 0 };
+        CMCFUtils *utils = CMCFUtils::get_instance();
+        utils->get_composed_path(fontprop_path, sizeof(fontprop_path), FONT_PROPERTIES_FILE);
+        FILE *fp = fopen(fontprop_path, "r");
+        if(fp) {
+            mcfint index = 0;
+            mcfint r,g,b,a;
+            if(!feof(fp)) {
+                for(mcfint shiftstate = 0;shiftstate < MCF_SHIFT_STATE_MAX && !feof(fp);shiftstate++) {
+                    char comment[_POSIX_PATH_MAX];
+                    for(mcfint buttonstate = 0;buttonstate < MCF_BUTTON_STATE_MAX && !feof(fp);buttonstate++) {
+                        fscanf(fp, "%d%d%d%d", &r, &g, &b, &a);
+                        mcf_autopopup_configure.labelProp.fontColor[shiftstate][buttonstate].r = r;
+                        mcf_autopopup_configure.labelProp.fontColor[shiftstate][buttonstate].g = g;
+                        mcf_autopopup_configure.labelProp.fontColor[shiftstate][buttonstate].b = b;
+                        mcf_autopopup_configure.labelProp.fontColor[shiftstate][buttonstate].a = a;
+                    }
+                    fscanf(fp, "%s", comment);
+                }
+            }
+            if(!feof(fp)) {
+                mcfint subindex = 0;
+            }
+            index = 0;
+            while(index < MAX_LABEL_PROPERTIES && !feof(fp)) {
+                mcfint subindex = 0;
+                while(subindex < MAX_SIZE_OF_LABEL_FOR_ONE && !feof(fp) &&
+                         mcf_key_label_properties[index][subindex].fValid) {
+                    for(mcfint shiftstate = 0;shiftstate < MCF_SHIFT_STATE_MAX && !feof(fp);shiftstate++) {
+                        char comment[_POSIX_PATH_MAX];
+                        for(mcfint buttonstate = 0;buttonstate < MCF_BUTTON_STATE_MAX && !feof(fp);buttonstate++) {
+                            fscanf(fp, "%d%d%d%d", &r, &g, &b, &a);
+                            mcf_key_label_properties[index][subindex].fontColor[shiftstate][buttonstate].r = r;
+                            mcf_key_label_properties[index][subindex].fontColor[shiftstate][buttonstate].g = g;
+                            mcf_key_label_properties[index][subindex].fontColor[shiftstate][buttonstate].b = b;
+                            mcf_key_label_properties[index][subindex].fontColor[shiftstate][buttonstate].a = a;
+                        }
+                        fscanf(fp, "%s", comment);
+                    }
+                    subindex++;
+                }
+                index++;
+            }
+        }
+    }
+
+    return TRUE;
+}
+
+const mcfchar*
+CMCFResourceCache::get_cur_themename()
+{
+    return mCurThemename;
+}
+
+/**
+ * Returns a template private key properties using key properties of the given context
+ */
+void
+CMCFResourceCache::clone_keyproperties(McfPrivateKeyProperties* priv, mcfbyte inputModeIdx, mcfbyte layoutIdx, mcfbyte keyIdx)
+{
+    MCF_DEBUG();
+    if (priv) {
+        CMCFResourceCache *cache = CMCFResourceCache::get_instance();
+        memset(priv, 0x00, sizeof(McfPrivateKeyProperties));
+
+        /* gets the value of the previous key properties */
+        mcfint loop;
+        McfKeyset keyset = MAX_KEYSET;
+        McfLayoutKeyProperties keyProperties = { 0 };
+        McfLayoutKeyConfigure keyConfigure = { 0 };
+        for (loop = 0;loop < (int)((sizeof(mcf_layout_keyset) / sizeof(McfLayoutKeyset)));loop++)  {
+            if (mcf_layout_keyset[loop].inputmodeID == inputModeIdx && mcf_layout_keyset[loop].layoutID == layoutIdx) {
+                keyset = static_cast<McfKeyset>(mcf_layout_keyset[loop].keysetID);
+                break;
+            }
+        }
+        mcf_assert_return(keyset >= 0 && keyset < MAX_KEYSET);
+        if (mcf_check_arrindex(keyset, MAX_KEYSET) && mcf_check_arrindex(keyIdx, MAX_KEY)) {
+#ifdef ENABLE_RESOURCE_DATA_FILE
+            load_layoutkey_properties(keyset, keyIdx, &keyProperties);
+#else
+            memcpy(&keyProperties, &mcf_layout_key_properties[keyset][keyIdx], sizeof(McfLayoutKeyProperties));
+#endif
+            memcpy(&keyConfigure, &mcf_layout_key_configure[keyset][keyIdx], sizeof(McfLayoutKeyConfigure));
+        }
+
+        mcf_assert_return(keyProperties.fValid == TRUE);
+
+        /* Sets the default properties base on the properties values of the given context */
+        cache->copy_to_privatekeyproperties(&keyProperties, &keyConfigure, priv);
+
+        priv->inputModeIdx = inputModeIdx;
+        priv->layoutIdx = layoutIdx;
+        priv->keyIdx = keyIdx;
+        priv->fValid = TRUE;
+    }
+}
+
+/**
+ * Sets a private key to the current context
+ *
+ * @Usage
+ *       McfPrivateKeyProperties privProperties;
+ *       gCore->clone_keyproperties(&privProperties, INPUT_MODE_NUMBER, LYT_PORTRAIT_NOW_3x4, 0);
+ *       // change
+ *       gCore->set_private_key(&privProperties, TRUE);
+ */
+mcfint
+CMCFResourceCache::set_private_key(McfPrivateKeyProperties* properties, mcfboolean fRedraw, mcfboolean fPendingUpdate)
+{
+    MCF_DEBUG();
+    CMCFContext *context = CMCFContext::get_instance();
+    CMCFResourceCache *cache = CMCFResourceCache::get_instance();
+    mcfint privateId = NOT_USED;
+    mcfboolean isNeedUpdate = FALSE;
+    if(cache && context && properties) {
+        privateId = cache->add_private_key(properties, &isNeedUpdate);
+        if (fRedraw && isNeedUpdate && !fPendingUpdate) {
+            CMCFUIBuilder *builder = CMCFUIBuilder::get_instance();
+            CMCFWindows *windows = CMCFWindows::get_instance();
+            if(builder && windows) {
+                /* Fix me (we should consider popupwindow later)*/
+                mcfwindow window = windows->get_base_window();
+                /* Let's draw this private key only if the key's sublayout ID is active */
+                McfLayoutKeyCoordination *coordination = get_cur_layout_key_coordination(window, properties->keyIdx);
+                if(coordination) {
+                    if(coordination->subLayoutID == SUBLAYOUTID_NONE ||
+                       coordination->subLayoutID == context->get_cur_sublayout_id()) {
+                        builder->draw_button(window, NULL, properties->keyIdx, mCurBaseButtonContext[properties->keyIdx].state);
+                    }
+                }
+            }
+        }
+    }
+    return privateId;
+}
+
+/**
+ * Sets a private key to the current context
+ * The other properties except given parameters will keep to the orginal value.
+ * @Usage
+ * gCore->set_private_key(INPUT_MODE_NUMBER, LYT_PORTRAIT_NOW_3x4, 0, "private", 999, TRUE);
+ *
+ * @param fRedraw If true, it will redraw the current key
+ */
+mcfint
+CMCFResourceCache::set_private_key(mcfshort inputModeIdx, mcfbyte layoutIdx, mcfbyte keyIdx, mcfchar* label,
+                                          mcfchar* imagelabel[MCF_BUTTON_STATE_MAX], mcfchar* imagebg[MCF_BUTTON_STATE_MAX],
+                                          mcfulong keyEvent, mcfchar *keyValue, mcfboolean fRedraw, mcfboolean fPendingUpdate)
+{
+    MCF_DEBUG();
+    McfPrivateKeyProperties privProperties;
+    CMCFResourceCache *cache = CMCFResourceCache::get_instance();
+    memset(&privProperties, 0x00, sizeof(McfPrivateKeyProperties));
+
+    /* If inputModeIx and layoutIdx both are NOT_USED, find current input mode and layout of base window */
+    if (inputModeIdx == (mcfshort)NOT_USED && layoutIdx == (mcfbyte)NOT_USED) {
+        CMCFContext *context = CMCFContext::get_instance();
+        inputModeIdx = context->get_input_mode();
+        layoutIdx = context->get_base_layout();
+    }
+
+    /* gets the value of the previous key properties */
+    mcfint loop;
+    McfKeyset keyset = MAX_KEYSET;
+    McfLayoutKeyProperties keyProperties = { 0 };
+    McfLayoutKeyConfigure keyConfigure = { 0 };
+    for (loop = 0;loop < (int)((sizeof(mcf_layout_keyset) / sizeof(McfLayoutKeyset)));loop++) {
+        if ((mcf_layout_keyset[loop].inputmodeID == inputModeIdx || inputModeIdx == -1) &&
+            mcf_layout_keyset[loop].layoutID == layoutIdx) {
+            keyset = static_cast<McfKeyset>(mcf_layout_keyset[loop].keysetID);
+            break;
+        }
+    }
+    mcf_assert_return_false(keyset >= 0 && keyset < MAX_KEYSET);
+    if (mcf_check_arrindex(keyset, MAX_KEYSET) && mcf_check_arrindex(keyIdx, MAX_KEY)) {
+#ifdef ENABLE_RESOURCE_DATA_FILE
+            load_layoutkey_properties(keyset, keyIdx, &keyProperties);
+#else
+        memcpy(&keyProperties, &mcf_layout_key_properties[keyset][keyIdx], sizeof(McfLayoutKeyProperties));
+#endif
+        memcpy(&keyConfigure, &mcf_layout_key_configure[keyset][keyIdx], sizeof(McfLayoutKeyConfigure));
+    }
+
+    mcf_assert_return_false(keyProperties.fValid == TRUE);
+
+    /* Sets the default properties base on the properties values of the given context */
+    cache->copy_to_privatekeyproperties(&keyProperties, &keyConfigure, &privProperties);
+
+    privProperties.fValid = TRUE;
+    privProperties.inputModeIdx = inputModeIdx;
+    privProperties.layoutIdx = layoutIdx;
+    privProperties.keyIdx = keyIdx;
+    privProperties.labelCnt = 1;
+    privProperties.keyEvent[MCF_SHIFT_STATE_LOCK][0] = privProperties.keyEvent[MCF_SHIFT_STATE_ON][0] =
+    privProperties.keyEvent[MCF_SHIFT_STATE_OFF][0] = keyEvent;
+    privProperties.label[MCF_SHIFT_STATE_LOCK][0] = privProperties.label[MCF_SHIFT_STATE_ON][0] =
+    privProperties.label[MCF_SHIFT_STATE_OFF][0] = label;
+    privProperties.keyValue[MCF_SHIFT_STATE_LOCK][0] = privProperties.keyValue[MCF_SHIFT_STATE_ON][0] =
+    privProperties.keyValue[MCF_SHIFT_STATE_OFF][0] = keyValue;
+    for (loop =0;loop < MCF_BUTTON_STATE_MAX;loop++) {
+        if (imagelabel) {
+            privProperties.labelImgPath[MCF_SHIFT_STATE_LOCK][loop] =
+            privProperties.labelImgPath[MCF_SHIFT_STATE_ON][loop] =
+            privProperties.labelImgPath[MCF_SHIFT_STATE_OFF][loop] = imagelabel[loop];
+        }
+    }
+    for (loop =0;loop < MCF_BUTTON_STATE_MAX;loop++) {
+        if (imagebg) {
+            privProperties.bgImgPath[MCF_SHIFT_STATE_LOCK][loop] =
+            privProperties.bgImgPath[MCF_SHIFT_STATE_ON][loop] =
+            privProperties.bgImgPath[MCF_SHIFT_STATE_OFF][loop] = imagebg[loop];
+        }
+    }
+    return set_private_key(&privProperties, fRedraw, fPendingUpdate);
+}
+
+/**
+* Unset private key for specific key
+* @Usage
+* gCore->unset_private_key(INPUT_MODE_NUMBER, LYT_PORTRAIT_NOW_3x4, 0);
+*/
+void
+CMCFResourceCache::unset_private_key(mcfshort inputModeIdx, mcfbyte layoutIdx, mcfbyte keyIdx)
+{
+    /* Since removed private key buffer will be shifted left, increase index only for successful deletion */
+    mcfint loop = 0;
+    mcfint count = 0;
+    while (count++ < MAX_PRIVATE_KEY) {
+        if ((mPrivateKeyProperties[loop].fValid &&
+            mPrivateKeyProperties[loop].inputModeIdx == inputModeIdx) &&
+            mPrivateKeyProperties[loop].layoutIdx == layoutIdx &&
+            mPrivateKeyProperties[loop].keyIdx == keyIdx) {
+                remove_private_key(loop);
+        } else {
+            loop++;
+        }
+    }
+}
+
+/**
+* Unset private by customID, effective when removing all private keys with same customID
+* @Usage
+* gCore->unset_private_key(3);
+*/
+void
+CMCFResourceCache::unset_private_key(mcfint customID)
+{
+    /* Since removed private key buffer will be shifted left, increase index only for successful deletion */
+    mcfint loop = 0;
+    mcfint count = 0;
+    while (count++ < MAX_PRIVATE_KEY) {
+        if(mPrivateKeyProperties[loop].fValid &&
+            mPrivateKeyProperties[loop].customID == customID) {
+            remove_private_key(loop);
+        } else {
+            loop++;
+        }
+    }
+}
+
+/**
+* Find appropriate index of the key specified by customID
+*/
+mcfbyte
+CMCFResourceCache::find_keyidx_by_customid(mcfshort inputModeIdx, mcfbyte layoutIdx, mcfshort customID)
+{
+    mcfbyte ret = NOT_USED;
+    mcfint loop;
+    McfKeyset keyset = MAX_KEYSET;
+
+    /* If inputModeIx and layoutIdx both are NOT_USED, find current input mode and layout of base window */
+    if (inputModeIdx == (mcfshort)NOT_USED && layoutIdx == (mcfbyte)NOT_USED) {
+        CMCFContext *context = CMCFContext::get_instance();
+        inputModeIdx = context->get_input_mode();
+        layoutIdx = context->get_base_layout();
+    }
+
+    for (loop = 0;loop < (sizeof(mcf_layout_keyset) / sizeof(McfLayoutKeyset));loop++) {
+        if ((mcf_layout_keyset[loop].inputmodeID == inputModeIdx || inputModeIdx == -1) &&
+               mcf_layout_keyset[loop].layoutID == layoutIdx) {
+            keyset = static_cast<McfKeyset>(mcf_layout_keyset[loop].keysetID);
+            break;
+        }
+    }
+    if (mcf_check_arrindex(keyset, MAX_KEYSET)) {
+        for (loop = 0;loop < MAX_KEY;loop++) {
+            if (mcf_layout_key_configure[keyset][loop].fValid != USED) break;
+            if (mcf_layout_key_configure[keyset][loop].customID == customID) {
+                ret = loop;
+                break;
+            }
+        }
+    }
+
+    return ret;
+}
+
+/**
+* Enable button for handling mouse events
+*/
+void CMCFResourceCache::enable_button(mcfbyte keyIdx)
+{
+    MCF_DEBUG();
+
+    if (mcf_check_arrindex(keyIdx, MAX_KEY)) {
+        mCurBaseButtonContext[keyIdx].state = BUTTON_STATE_NORMAL;
+
+        CMCFWindows *windows = CMCFWindows::get_instance();
+        /* Fix me (we should decide by which way we would redraw the button's region - direct or indirect?)*/
+        windows->update_window(windows->get_base_window());
+    }
+}
+
+/**
+* Disable button to ignore mouse events
+*/
+void CMCFResourceCache::disable_button(mcfbyte keyIdx)
+{
+    MCF_DEBUG();
+
+    if (mcf_check_arrindex(keyIdx, MAX_KEY)) {
+        mCurBaseButtonContext[keyIdx].state = BUTTON_STATE_DISABLED;
+
+        CMCFWindows *windows = CMCFWindows::get_instance();
+        /* Fix me (we should decide by which way we would redraw the button's region - direct or indirect?)*/
+        windows->update_window(windows->get_base_window());
+    }
+}
diff --git a/mcf/mcfuibuilder.cpp b/mcf/mcfuibuilder.cpp
new file mode 100755 (executable)
index 0000000..d00f873
--- /dev/null
@@ -0,0 +1,704 @@
+/*
+ * Copyright 2012  Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.tizenopensource.org/license
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "mcfuibuilder.h"
+#include "mcfdebug.h"
+#include "mcfresourcecache.h"
+#include "mcfcontext.h"
+#include "mcfimageproxy.h"
+#include "mcfactionstate.h"
+
+
+using namespace mcf;
+
+
+CMCFUIBuilder* CMCFUIBuilder::sInstance = NULL; /* For singleton */
+
+CMCFUIBuilder::CMCFUIBuilder()
+{
+    MCF_DEBUG();
+
+    mGwes = NULL;
+    mUtils = NULL;
+}
+
+CMCFUIBuilder::~CMCFUIBuilder()
+{
+    MCF_DEBUG();
+    if (mGwes) delete mGwes;
+    mGwes = NULL;
+    if (mUtils) delete mUtils;
+    mUtils = NULL;
+}
+
+CMCFUIBuilder*
+CMCFUIBuilder::get_instance()
+{
+    if (!sInstance) {
+        sInstance = new CMCFUIBuilder();
+    }
+    return (CMCFUIBuilder*)sInstance;
+}
+
+void
+CMCFUIBuilder::init(mcfwindow parentWnd)
+{
+    MCF_DEBUG();
+
+    mGwes = CMCFGwes::get_instance();
+    mUtils = CMCFUtils::get_instance();
+    /* It will create the base window */
+    mcfbyte inputMode = mcf_default_configure.inputMode;
+    MCFDisplay display = mcf_default_configure.display;
+    mcfbyte defaultLayoutIdx = 0;
+
+    if(mcf_check_arrindex(inputMode, MAX_INPUT_MODE) && mcf_check_arrindex(display, MCFDISPLAY_MAX)) {
+        defaultLayoutIdx = mcf_input_mode_configure[inputMode].layoutId[display];
+        if(mcf_check_arrindex(defaultLayoutIdx, MAX_LAYOUT)) {
+            mGwes->init(parentWnd,
+                        mUtils->get_scale_x(mcf_layout[defaultLayoutIdx].width),
+                        mUtils->get_scale_y(mcf_layout[defaultLayoutIdx].height)
+                       );
+        }
+    }
+
+    CMCFContext *context = CMCFContext::get_instance();
+    context->set_display(mcf_default_configure.display);
+    context->set_input_mode(mcf_default_configure.inputMode);
+    context->set_base_layout(mcf_input_mode_configure[mcf_default_configure.inputMode].layoutId[mcf_default_configure.display]);
+
+    CMCFResourceCache *cache = CMCFResourceCache::get_instance();
+    mcfwindow window = mGwes->mWnd->get_base_window();
+    cache->recompute_layout(window);
+
+    /* Creates the dim window */
+    if(mcf_check_arrindex(defaultLayoutIdx, MAX_LAYOUT)) {
+        mGwes->mWnd->create_dim_window(window, NULL, mcf_layout[defaultLayoutIdx].width, mcf_layout[defaultLayoutIdx].height);
+    }
+
+    /* For testing pre-image load */
+    CMCFImageProxy *proxy = CMCFImageProxy::get_instance();
+    mcfchar retPath[_POSIX_PATH_MAX] = {0,};
+    for (mcfint loop = 0; loop < MAX_PRELOAD_IMG_CNT; loop++) {
+        memset(retPath, 0x00, sizeof(mcfchar)*_POSIX_PATH_MAX);
+        mUtils->get_composed_path(retPath, sizeof(retPath), mcf_preload_image[loop]);
+        proxy->get_image(retPath);
+    }
+}
+
+/**
+ * Shows the current layout and contexts
+ * This function will be called by expose event and invalidate rect
+ */
+mcfboolean
+CMCFUIBuilder::show_layout(const mcfwindow window, const mcf16 x, const mcf16 y, const mcf16 width, const mcf16 height)
+{
+    MCF_DEBUG();
+
+    mcfboolean ret = FALSE;
+
+    CMCFEvents *events = CMCFEvents::get_instance();
+    CMCFWindows *windows = CMCFWindows::get_instance();
+    CMCFGraphics *graphics = CMCFGraphics::get_instance();
+    CMCFResourceCache *cache = CMCFResourceCache::get_instance();
+    CMCFContext *context = CMCFContext::get_instance();
+
+    if(events && windows && graphics && cache && context) {
+    /* FIXME : The drawCtx should be acquired from the base window also, if the target window is virtual
+       However, for ease of developement, leave the drawctx to be acquired from the target window for now
+       Should modify the EFLObject list management routine after fixing the issue described above
+    */
+        mcfdrawctx drawCtx = graphics->begin_paint(window);
+
+        MCFDisplay currDisplay =  context->get_display();
+        events->set_touch_event_offset(mcf_default_configure.touchOffset[currDisplay]);
+
+        if (window == windows->get_dim_window()) {
+            McfWindowContext *dimctx = windows->get_window_context(window);
+            if(dimctx) {
+                McfSize size;
+                McfColor color;
+                size.width = dimctx->width;
+                size.height = dimctx->height;
+                color = mcf_dim_window_configure.dimColor;
+                draw_window_bg_by_sw(window, drawCtx, size, 0.0, color, color);
+            }
+        } else {
+            /* For the base and popup window */
+            const McfLayout* layout = cache->get_cur_layout(window);
+            if (layout) {
+                CMCFWindows *windows = CMCFWindows::get_instance();
+                McfWindowContext *winctx = windows->get_window_context(window, FALSE);
+                mcf_assert_return_false(layout);
+
+                if (layout->fUseSWbg) {
+                    if (winctx) {
+                        McfSize size;
+                        size.width = winctx->width;
+                        size.height = winctx->height;
+                        draw_window_bg_by_sw(window, drawCtx, size, layout->bgLineWidth, layout->bgLineColor, layout->bgColor);
+                }
+            } else if (layout->imgPath[BUTTON_STATE_NORMAL]) {
+                    /* If the target window is virtual window, let's draw it on the base window */
+                    mcfint targetx = layout->x;
+                    mcfint targety = layout->y;
+                    mcfwindow targetwin = window;
+                    McfWindowContext *winctx = windows->get_window_context(window, FALSE);
+                    if(winctx->isVirtual) {
+                        McfWindowContext *basectx = windows->get_window_context(windows->get_base_window(), FALSE);
+                        if(basectx) {
+                            targetwin = windows->get_base_window();
+                            targetx += winctx->x - basectx->x;
+                            targety += winctx->y - basectx->y;
+                        }
+                    }
+                    if (strlen(layout->imgPath[BUTTON_STATE_NORMAL]) > 0) {
+                        mcfchar retPath[_POSIX_PATH_MAX] = {0,};
+                        mUtils->get_composed_path(retPath, sizeof(retPath), layout->imgPath[BUTTON_STATE_NORMAL]);
+                        // Temporary testing for EFL backend.. Otherwise the background image covers other buttons
+                        if (winctx && (x + y + width + height == 0)) {
+                            graphics->draw_image(targetwin, drawCtx, retPath, targetx, targety, layout->width, layout->height,
+                                                 winctx->imgOffsetx, winctx->imgOffsety, -1, -1, layout->fExtractBG);
+                        }
+                    }
+                }
+                draw_button_all(window, drawCtx, x, y, width, height);
+            }
+        }
+        graphics->end_paint(window, drawCtx);
+    }
+
+    return ret;
+}
+
+/**
+ * Draws all of buttons
+ */
+mcfboolean
+CMCFUIBuilder::draw_button_all(const mcfwindow window, const mcfdrawctx drawCtx, const mcf16 x /* = 0 */,
+                                      const mcf16 y /* = 0 */, const mcf16 width /* = 0 */, const mcf16 height /* = 0 */)
+{
+    MCF_DEBUG();
+    mcf_assert_return_false(window);
+
+    mcfboolean drawall = FALSE;
+    McfRectangle updatearea = {x, y, width, height};
+    if (x + y + width + height == 0) {
+        drawall = TRUE;
+    }
+    CMCFContext *context = CMCFContext::get_instance();
+    CMCFResourceCache *cache = CMCFResourceCache::get_instance();
+    CMCFUtils *utils = CMCFUtils::get_instance();
+    McfLayoutKeyCoordination* coordination = NULL;
+    McfButtonContext* btncontext = NULL;
+
+    if(context && cache && utils) {
+    for (mcfint idx = 0; idx < MAX_KEY; idx++) {
+        coordination = cache->get_cur_layout_key_coordination(window, idx);
+        btncontext = cache->get_cur_button_context(window, idx);
+            if(coordination && btncontext) {
+                if(coordination->fValid &&
+                    (coordination->subLayoutID == SUBLAYOUTID_NONE || coordination->subLayoutID == context->get_cur_sublayout_id())) {
+                    McfRectangle itemrect = {coordination->x, coordination->y, coordination->width, coordination->height};
+                    if (drawall || utils->is_rect_overlap(itemrect, updatearea)) {
+                        if (!draw_button(window, drawCtx, idx, btncontext->state)) {
+                            break;
+                        }
+                    }
+                }
+            }
+        }
+    }
+    return TRUE;
+}
+
+/**
+ * Draws the button of the given key index by type of the button
+ * @remark draw_button_all
+ */
+mcfboolean
+CMCFUIBuilder::draw_button(const mcfwindow window, mcfdrawctx drawCtx, const mcf16 keyIdx,
+                                  const MCFButtonState state, const mcfboolean fForceDrawBG /* = FALSE */)
+{
+    MCF_DEBUG();
+    mcf_assert_return_false(window);
+    mcf_assert_return_false(keyIdx > NOT_USED && keyIdx < MAX_KEY);
+    mcf_assert_return_false(state >= BUTTON_STATE_NORMAL && state < MCF_BUTTON_STATE_MAX);
+
+    CMCFContext *context = CMCFContext::get_instance();
+    CMCFResourceCache *cache = CMCFResourceCache::get_instance();
+    CMCFGraphics *graphics = CMCFGraphics::get_instance();
+
+    if(cache && context && graphics) {
+        McfButtonContext* btncontext = cache->get_cur_button_context(window, keyIdx);
+
+        if(btncontext) {
+            if (!btncontext->used) {
+                return FALSE;
+            }
+
+            /* creates a cairo surface if the value of the given drawCtx is NULL */
+            mcfboolean fNeedEndPaint = FALSE;
+            if (drawCtx == NULL) {
+                drawCtx = graphics->begin_paint(window);
+                fNeedEndPaint = TRUE;
+            }
+
+            /* FIXME : There is a case that begin_pain fails. Inspection on the root cause is needed */
+            if (drawCtx) {
+                MCFShiftState shiftidx = context->get_shift_state();
+                if(shiftidx < 0 || shiftidx >= MCF_SHIFT_STATE_MAX) {
+                    shiftidx = MCF_SHIFT_STATE_OFF;
+                }
+
+                const McfLayout* layout = cache->get_cur_layout(window);
+                const McfLayoutKeyProperties* properties = cache->get_cur_layout_key_properties(window, keyIdx);
+
+                /* 1. drawing the background of the button */
+                /* check it according to the following check-list */
+                /* check it whether uses SW style button */
+                if(layout && properties) {
+                    if (layout->fUseSWBtn) {
+                        /* case 1 (uses Software button) */
+                        draw_button_bg_by_sw(window, drawCtx, keyIdx, state);
+                    } else {
+                        /* check it whether uses an individual images */
+                        if (properties->bgImgPath[shiftidx][state]) {
+                            if (strcmp(properties->bgImgPath[shiftidx][state], MCF_BACKGROUND_IMAGE_STRING) != 0) {
+                                /* case 2 (uses an indivisual image) */
+                                draw_button_bg_by_img(window, drawCtx, keyIdx, state, shiftidx);
+                            } else {
+                                /* case 3 (uses the layout background image) */
+                                draw_button_bg_by_layoutimg(window, drawCtx, keyIdx, state, shiftidx);
+                            }
+                        } else if (fForceDrawBG) {
+                            draw_button_bg_by_layoutimg(window, drawCtx, keyIdx, state, shiftidx);
+                        }
+                        /* case 4 (don't draw anything for button's background if imgPath is NULL) */
+                    }
+
+                    /* 2. displaying the label of the button */
+                    draw_button_label(window, drawCtx, keyIdx, state, shiftidx);
+                }
+            }
+
+            /* destrorys the cairo surface if the value of the given(parameter) drawCtx is NULL */
+            if (fNeedEndPaint) {
+                graphics->end_paint(window, drawCtx);
+            }
+        } else {
+            return FALSE;
+        }
+    }
+    return TRUE;
+}
+
+/**
+ * Draws labels for the target button
+ * @remark draw_button
+ */
+mcfboolean
+CMCFUIBuilder::draw_button_label(const mcfwindow window, const mcfdrawctx drawCtx, const mcf16 keyIdx,
+                                        const MCFButtonState state, const mcfboolean fShift)
+{
+    MCF_DEBUG();
+
+    CMCFWindows *windows = CMCFWindows::get_instance();
+    CMCFGraphics *graphics = CMCFGraphics::get_instance();
+    CMCFResourceCache *cache = CMCFResourceCache::get_instance();
+    const McfLayoutKeyConfigure* configure = cache->get_cur_layout_key_configure(window, keyIdx);
+    const McfLayoutKeyCoordination* coords = cache->get_cur_layout_key_coordination(window, keyIdx);
+    const McfLayoutKeyProperties* properties = cache->get_cur_layout_key_properties(window, keyIdx);
+
+    mcf_assert_return_false(window);
+    mcf_assert_return_false(drawCtx);
+    mcf_assert_return_false(properties);
+    mcf_assert_return_false(configure);
+
+    if(windows && graphics && cache && configure && coords && properties) {
+        /* If the target window is virtual window, let's draw it on the base window */
+    mcfint targetaddx = 0;
+    mcfint targetaddy = 0;
+    mcfwindow targetwin = window;
+    McfWindowContext *winctx = windows->get_window_context(window, FALSE);
+
+        if(winctx->isVirtual) {
+            McfWindowContext *basectx = windows->get_window_context(windows->get_base_window(), FALSE);
+            if(basectx) {
+                targetwin = windows->get_base_window();
+                targetaddx = winctx->x - basectx->x;
+                targetaddy = winctx->y - basectx->y;
+            }
+        }
+
+        /* for image label  */
+        if (properties->labelImgPath[fShift][state]) {
+            if (strlen(properties->labelImgPath[fShift][state]) > 0) {
+                mcfchar retPath[_POSIX_PATH_MAX] = {0,};
+                mUtils->get_composed_path(retPath, sizeof(retPath), properties->labelImgPath[fShift][state]);
+
+                McfSize imgSize = mGwes->mGrps->get_image_size(retPath);
+                if (imgSize.width == 0 && imgSize.height == 0) {
+                        imgSize.width = coords->width;
+                        imgSize.height = coords->height;
+                }
+                imgSize.width *= mUtils->get_smallest_scale_rate();
+                imgSize.height *= mUtils->get_smallest_scale_rate();
+
+                /* Make sure the image label is not bigger than the given coordination */
+
+                    if(imgSize.width > coords->width) {
+                        imgSize.width = coords->width;
+                    }
+                    if(imgSize.height > coords->height) {
+                        imgSize.height = coords->height;
+                    }
+
+
+                McfPoint pos = {0,};
+
+                    pos.x = coords->x + ((coords->width - imgSize.width) / 2);
+                    pos.y = coords->y + ((coords->height -imgSize.height) / 2);
+
+
+                graphics->draw_image(targetwin,
+                                     drawCtx,
+                                     retPath,
+                                     pos.x + targetaddx,
+                                     pos.y + targetaddy,
+                                     imgSize.width,
+                                     imgSize.height
+                                    );
+            }
+        }
+
+    /* for text */
+        for (int idx = 0; idx < properties->labelCnt; idx++) {
+            McfFontInfo info;
+            CMCFResourceCache *cache = CMCFResourceCache::get_instance();
+            const McfLabelProperties *labelproperties = cache->get_label_properties(properties->labelPropId, idx);
+            if (labelproperties) {
+                const mcfchar *label = properties->label[fShift][idx];
+                /* If the button type is BUTTON_TYPE_ROTATION, display current keyvalue */
+                if (idx == 0) {
+                    if (configure->buttonType == BUTTON_TYPE_ROTATION) {
+                        McfButtonContext* btncontext = cache->get_cur_button_context(window, keyIdx);
+                        if (btncontext->multikeyIdx < MAX_SIZE_OF_MULTITAP_CHAR) {
+                            label = properties->keyValue[fShift][btncontext->multikeyIdx];
+                        }
+                    }
+                }
+                if (labelproperties->fontName) {
+                    strncpy(info.fontname, labelproperties->fontName, MAX_FONT_NAME_LEN - 1);
+                    info.fontname[MAX_FONT_NAME_LEN - 1] = '\0';
+                    info.fontsize = labelproperties->fontSize;
+                    info.isBold = info.isItalic = true;
+
+                    CMCFContext *context = CMCFContext::get_instance();
+                    MCFShiftState shiftstate = context->get_shift_state();
+                    if (labelproperties->shadowDistance > 0 && labelproperties->shadowColor[shiftstate][state].a != 0) {
+                        mcfint deltax = 0;
+                        mcfint deltay = 0;
+
+                        if (labelproperties->shadowDirection == SHADOW_DIRECTION_LEFT_TOP ||
+                            labelproperties->shadowDirection == SHADOW_DIRECTION_LEFT_MIDDLE ||
+                            labelproperties->shadowDirection == SHADOW_DIRECTION_LEFT_BOTTOM) {
+                            deltax -= labelproperties->shadowDistance;
+                        } else if (labelproperties->shadowDirection == SHADOW_DIRECTION_RIGHT_TOP ||
+                                   labelproperties->shadowDirection == SHADOW_DIRECTION_RIGHT_MIDDLE ||
+                                   labelproperties->shadowDirection == SHADOW_DIRECTION_RIGHT_BOTTOM) {
+                            deltax += labelproperties->shadowDistance;
+                        }
+
+                        if (labelproperties->shadowDirection == SHADOW_DIRECTION_LEFT_TOP ||
+                            labelproperties->shadowDirection == SHADOW_DIRECTION_CENTER_TOP ||
+                            labelproperties->shadowDirection == SHADOW_DIRECTION_RIGHT_TOP) {
+                            deltay -= labelproperties->shadowDistance;
+                        } else if (labelproperties->shadowDirection == SHADOW_DIRECTION_LEFT_BOTTOM ||
+                                   labelproperties->shadowDirection == SHADOW_DIRECTION_CENTER_BOTTOM ||
+                                   labelproperties->shadowDirection == SHADOW_DIRECTION_RIGHT_BOTTOM) {
+                            deltay += labelproperties->shadowDistance;
+                        }
+
+                        graphics->draw_text(targetwin,
+                                            drawCtx,
+                                            info,
+                                            labelproperties->shadowColor[shiftstate][state],
+                                            label,
+                                            (mcfint)coords->x + deltax + targetaddx,
+                                            (mcfint)coords->y + deltax + targetaddy,
+                                            (mcfint)coords->width,
+                                            (mcfint)coords->height,
+                                            labelproperties->alignment,
+                                            labelproperties->paddingX,
+                                            labelproperties->paddingY
+                                           );
+                    }
+
+                    graphics->draw_text(targetwin,
+                                        drawCtx,
+                                        info,
+                                        labelproperties->fontColor[shiftstate][state],
+                                        label,
+                                        (mcfint)coords->x + targetaddx,
+                                        (mcfint)coords->y + targetaddy,
+                                        (mcfint)coords->width,
+                                        (mcfint)coords->height,
+                                        labelproperties->alignment,
+                                        labelproperties->paddingX,
+                                        labelproperties->paddingY
+                                       );
+                }
+            }
+        }
+    }
+
+    return TRUE;
+}
+
+/**
+* Draws window's background using software
+* @remark
+*/
+mcfboolean
+CMCFUIBuilder::draw_window_bg_by_sw(const mcfwindow window, const mcfdrawctx drawCtx, const McfSize size,
+                                    const mcfdouble lineWidth, const McfColor lineColor, const McfColor fillColor)
+{
+    MCF_DEBUG();
+    mcf_assert_return_false(window);
+    mcf_assert_return_false(drawCtx);
+    mcf_assert_return_false(layout);
+
+    CMCFWindows *windows = CMCFWindows::get_instance();
+    CMCFGraphics *graphics = CMCFGraphics::get_instance();
+
+    if(graphics && windows) {
+        /* If the target window is virtual window, let's draw it on the base window */
+        mcfwindow targetwin = window;
+        McfWindowContext *winctx = windows->get_window_context(window, FALSE);
+        if(winctx->isVirtual) {
+            targetwin = windows->get_base_window();
+        }
+
+        graphics->draw_rectangle(targetwin, drawCtx, 0, 0, size.width, size.height, lineWidth, lineColor, TRUE, fillColor);
+    }
+
+    return TRUE;
+}
+
+/**
+ * Draws a button using software
+ * @remark draw_button
+ */
+mcfboolean
+CMCFUIBuilder::draw_button_bg_by_sw(const mcfwindow window, const mcfdrawctx drawCtx,
+                                           const mcf16 keyIdx, const MCFButtonState state)
+{
+    MCF_DEBUG();
+
+    CMCFResourceCache *cache = CMCFResourceCache::get_instance();
+    const McfLayoutKeyCoordination* coords = cache->get_cur_layout_key_coordination(window, keyIdx);
+
+    mcf_assert_return_false(window);
+    mcf_assert_return_false(drawCtx);
+    mcf_assert_return_false(coords);
+
+    mcf_assert_return_false(state >= BUTTON_STATE_NORMAL && state < MCF_BUTTON_STATE_MAX);
+
+    mcfdouble lineWidth = mcf_swbutton_style[mcf_default_configure.swBtnStyleIdx].lineWidth[state];
+    McfColor &lineColor = mcf_swbutton_style[mcf_default_configure.swBtnStyleIdx].lineColor[state];
+    McfColor &bgColor = mcf_swbutton_style[mcf_default_configure.swBtnStyleIdx].bgColor[state];
+    mcfdouble lineCurve = mcf_swbutton_style[mcf_default_configure.swBtnStyleIdx].lineCurve;
+    mcffloat bgAlpha = mcf_swbutton_style[mcf_default_configure.swBtnStyleIdx].bgAlpha;
+
+    mGwes->mGrps->draw_rectangle(window,
+                                 drawCtx,
+                                 coords->x,
+                                 coords->y,
+                                 coords->width,
+                                 coords->height,
+                                 lineWidth,
+                                 lineColor,
+                                 TRUE,
+                                 bgColor,
+                                 lineCurve,
+                                 bgAlpha);
+    return TRUE;
+}
+
+/**
+ * Draws a button using the set image
+ * @remark draw_button
+ */
+mcfboolean
+CMCFUIBuilder::draw_button_bg_by_img(const mcfwindow window, const mcfdrawctx drawCtx,const mcf16 keyIdx,
+                                            const MCFButtonState state, const mcfboolean fShift)
+{
+    MCF_DEBUG();
+
+    CMCFContext *context = CMCFContext::get_instance();
+    CMCFWindows *windows = CMCFWindows::get_instance();
+    CMCFGraphics *graphics = CMCFGraphics::get_instance();
+    CMCFResourceCache *cache = CMCFResourceCache::get_instance();
+    const McfLayoutKeyCoordination* coordination = cache->get_cur_layout_key_coordination(window, keyIdx);
+    const McfLayoutKeyProperties* properties = cache->get_cur_layout_key_properties(window, keyIdx);
+
+    mcf_assert_return_false(window);
+    mcf_assert_return_false(drawCtx);
+    mcf_assert_return_false(coords);
+
+    mcf_assert_return_false(state >= BUTTON_STATE_NORMAL && state < MCF_BUTTON_STATE_MAX);
+
+    mcfchar retPath[_POSIX_PATH_MAX] = {0,};
+
+    if(context && graphics && cache && coordination && properties) {
+        mcfboolean pathComposed = FALSE;
+        /* Check if we need to decorate the button's drag state */
+        if(context->get_cur_key_modifier(context->get_last_touch_device_id()) != KEY_MODIFIER_NONE &&
+           context->get_cur_pressed_window(context->get_last_touch_device_id()) == window &&
+           context->get_cur_pressed_key(context->get_last_touch_device_id()) == keyIdx &&
+           properties->modifierDecorationId) {
+                mcfchar *szDecorationBgImgPath = NULL;
+                const McfModifierDecoration *decoration = NULL;
+                if(mcf_check_arrindex(properties->modifierDecorationId,
+                    sizeof(mcf_modifier_decoration) / sizeof(McfModifierDecoration))) {
+                    decoration = &(mcf_modifier_decoration[properties->modifierDecorationId]);
+                }
+                if(decoration) {
+                    mcfshort display = context->get_display();
+                    if(!mcf_check_arrindex(display, MCFDISPLAY_MAX)) display = 0;
+                    MCFKeyModifier modifier = context->get_cur_key_modifier(context->get_last_touch_device_id());
+                    if(!mcf_check_arrindex(modifier, KEY_MODIFIER_MAX)) modifier = KEY_MODIFIER_NONE;
+                    szDecorationBgImgPath = decoration->bgImgPath[display][modifier];
+                }
+                if(szDecorationBgImgPath) {
+                    if(strlen(szDecorationBgImgPath) > 0) {
+                        mUtils->get_composed_path(retPath, sizeof(retPath), szDecorationBgImgPath);
+                        pathComposed = TRUE;
+                    }
+                }
+        }
+        if(!pathComposed) {
+            mUtils->get_composed_path(retPath, sizeof(retPath), properties->bgImgPath[fShift][state]);
+        }
+
+        /* If the target window is virtual window, let's draw it on the base window */
+        mcfint targetx = coordination->x;
+        mcfint targety = coordination->y;
+        mcfwindow targetwin = window;
+        McfWindowContext *winctx = windows->get_window_context(window, FALSE);
+        if(winctx->isVirtual) {
+            McfWindowContext *basectx = windows->get_window_context(windows->get_base_window(), FALSE);
+            if(basectx) {
+                targetwin = windows->get_base_window();
+                targetx += winctx->x - basectx->x;
+                targety += winctx->y - basectx->y;
+            }
+        }
+
+        graphics->draw_image(targetwin,
+                             drawCtx,
+                             retPath,
+                            (mcfint)targetx,
+                            (mcfint)targety,
+                            (mcfint)coordination->width,
+                            (mcfint)coordination->height
+                            );
+    }
+
+    return TRUE;
+}
+
+/**
+ * Draws a button using the set layout image
+ * @remark draw_button
+ */
+mcfboolean
+CMCFUIBuilder::draw_button_bg_by_layoutimg(const mcfwindow window, const mcfdrawctx drawCtx, const mcf16 keyIdx,
+                                                  const MCFButtonState state, const mcfboolean fShift)
+{
+    MCF_DEBUG();
+
+    CMCFContext *context = CMCFContext::get_instance();
+    CMCFResourceCache *cache = CMCFResourceCache::get_instance();
+    const McfLayout* layout = cache->get_cur_layout(window);
+    const McfLayoutKeyCoordination* coordination = cache->get_cur_layout_key_coordination(window, keyIdx);
+    const McfLayoutKeyProperties* properties = cache->get_cur_layout_key_properties(window, keyIdx);
+
+    mcf_assert_return_false(window);
+    mcf_assert_return_false(drawCtx);
+    mcf_assert_return_false(coords);
+
+    mcf_assert_return_false(state >= BUTTON_STATE_NORMAL && state < MCF_BUTTON_STATE_MAX);
+
+    CMCFWindows *windows = CMCFWindows::get_instance();
+    McfWindowContext *winctx = windows->get_window_context(window, FALSE);
+
+    mcfchar retPath[_POSIX_PATH_MAX] = {0,};
+    if(context && cache && coordination && properties && winctx) {
+        mcfboolean pathComposed = FALSE;
+        /* Check if we need to decorate the button's drag state */
+        if(context->get_cur_key_modifier(context->get_last_touch_device_id()) != KEY_MODIFIER_NONE &&
+           context->get_cur_pressed_window(context->get_last_touch_device_id()) == window &&
+           context->get_cur_pressed_key(context->get_last_touch_device_id()) == keyIdx &&
+           properties->modifierDecorationId) {
+                mcfchar *szDecorationBgImgPath = NULL;
+                const McfModifierDecoration *decoration = NULL;
+                if(mcf_check_arrindex(properties->modifierDecorationId,
+                    sizeof(mcf_modifier_decoration) / sizeof(McfModifierDecoration ))) {
+                        decoration = &(mcf_modifier_decoration[properties->modifierDecorationId]);
+                }
+                if(decoration) {
+                    mcfshort display = context->get_display();
+                    if(!mcf_check_arrindex(display, MCFDISPLAY_MAX)) display = 0;
+                    MCFKeyModifier modifier = context->get_cur_key_modifier(context->get_last_touch_device_id());
+                    if(!mcf_check_arrindex(modifier, KEY_MODIFIER_MAX)) modifier = KEY_MODIFIER_NONE;
+                    szDecorationBgImgPath = decoration->bgImgPath[display][modifier];
+                }
+                if(szDecorationBgImgPath) {
+                    if(strlen(szDecorationBgImgPath) > 0) {
+                        mUtils->get_composed_path(retPath, sizeof(retPath), szDecorationBgImgPath);
+                        pathComposed = TRUE;
+                    }
+                }
+        }
+        if(!pathComposed) {
+            mUtils->get_composed_path(retPath, sizeof(retPath), layout->imgPath[state]);
+        }
+
+        mGwes->mGrps->draw_image(window,
+                                 drawCtx,
+                                 retPath,
+                                 (mcfint)coordination->x,
+                                 (mcfint)coordination->y,
+                                 (mcfint)coordination->width,
+                                 (mcfint)coordination->height,
+                                 winctx->imgOffsetx + (mcfint)coordination->x,
+                                 winctx->imgOffsety + (mcfint)coordination->y,
+                                 (mcfint)coordination->width,
+                                 (mcfint)coordination->height,
+                                 TRUE
+                                );
+    }
+    return TRUE;
+}
+
diff --git a/mcf/mcfutils.cpp b/mcf/mcfutils.cpp
new file mode 100755 (executable)
index 0000000..8494f45
--- /dev/null
@@ -0,0 +1,390 @@
+/*
+ * Copyright 2012  Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.tizenopensource.org/license
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+
+#include <sys/time.h>
+#include <sys/types.h>
+#include <unistd.h>
+#include <math.h>
+
+#include "mcfutils.h"
+#include "mcfconfig.h"
+#include "mcfdebug.h"
+#include "mcfcontext.h"
+#include "mcfresource.h"
+#include "mcfresourcecache.h"
+
+using namespace mcf;
+
+CMCFUtils* CMCFUtils::sInstance; /* For singleton */
+#define MCF_MAX_UNIQUE_ID 1000
+
+CMCFUtils::CMCFUtils()
+{
+    MCF_DEBUG();
+    mXScnRate = 1.0;
+    mYScnRate = 1.0;
+    mScnResolutionX = 0;
+    mScnResolutionY = 0;
+    init();
+}
+
+CMCFUtils::~CMCFUtils()
+{
+    MCF_DEBUG();
+}
+
+CMCFUtils* CMCFUtils::get_instance()
+{
+    if (!sInstance) {
+        sInstance = new CMCFUtils();
+    }
+    return (CMCFUtils*)sInstance;
+}
+
+void
+CMCFUtils::init()
+{
+    MCF_DEBUG();
+    GetCMCFUtilsImpl()->get_screen_resolution(&mScnResolutionX, &mScnResolutionY);
+    mXScnRate = mScnResolutionX / (float)MCF_BASE_SCREEN_WIDTH;
+    mYScnRate = mScnResolutionY / (float)MCF_BASE_SCREEN_HEIGHT;
+    if(MCF_AUTO_DETECT_PORTRAIT_LANDSCAPE) {
+        /* If the width of screen is bigger than the height, switch portrait mode and landscape mode */
+        if(mScnResolutionX > mScnResolutionY) {
+            mXScnRate = mScnResolutionX / (float)MCF_BASE_SCREEN_HEIGHT;
+            mYScnRate = mScnResolutionY / (float)MCF_BASE_SCREEN_WIDTH;
+        }
+    }
+
+    mNinePatchInfoMap.clear();
+}
+
+/**
+ * Returns a scale rate (see default screen resolution in mcfconfig.h file)
+ */
+mcffloat
+CMCFUtils::get_smallest_scale_rate()
+{
+    /* Try to return smaller scale rate, to avoid UI crash */
+    return (mXScnRate < mYScnRate) ? mXScnRate : mYScnRate;
+}
+
+/**
+* Returns a scale rate X (see default screen resolution in mcfconfig.h file)
+*/
+mcffloat
+CMCFUtils::get_scale_rate_x()
+{
+    /* Try to return smaller scale rate, to avoid UI crash */
+    return mXScnRate;
+}
+
+/**
+* Returns a scale rate Y (see default screen resolution in mcfconfig.h file)
+*/
+mcffloat
+CMCFUtils::get_scale_rate_y()
+{
+    /* Try to return smaller scale rate, to avoid UI crash */
+    return mYScnRate;
+}
+
+/**
+ * Recalculates x value according to the current screen resolution
+ */
+void
+CMCFUtils::scale_x(mcf16 *x)
+{
+    if (x) {
+       ((*x)*=mXScnRate);
+    }
+}
+
+/**
+* Recalculates y value according to the current screen resolution
+ */
+void
+CMCFUtils::scale_y(mcf16 *y)
+{
+    if (y) {
+       ((*y)*=mYScnRate);
+    }
+}
+
+/**
+ * Returns a calculated x value according to the current screen resolution
+ */
+mcf16
+CMCFUtils::get_scale_x(mcf16 x)
+{
+    return static_cast<mcf16>(x*mXScnRate);
+}
+
+/**
+ * Returns a calculated y value according to the current screen resolution
+ */
+mcf16
+CMCFUtils::get_scale_y(mcf16 y)
+{
+    return static_cast<mcf16>(y*mYScnRate);
+}
+
+/**
+ * portable sleep function
+ */
+mcfboolean
+CMCFUtils::sleep(mcfulong msc)
+{
+    MCF_DEBUG();
+    fd_set dummy;
+    struct timeval toWait;
+    FD_ZERO(&dummy);
+    toWait.tv_sec = msc / 1000;
+    toWait.tv_usec = (msc % 1000) * 1000;
+    select(0, &dummy, NULL, NULL, &toWait);
+    return TRUE;
+}
+
+/**
+ * returns the composed path
+ */
+mcfchar*
+CMCFUtils::get_composed_path(mcfchar* buf, int bufLength, const mcfchar* path)
+{
+    MCF_DEBUG();
+
+    if(buf && path) {
+        if(mScnResolutionX == 0 || mScnResolutionY == 0) {
+            CMCFUtilsImpl *impl = GetCMCFUtilsImpl();
+            if(impl) {
+                impl->get_screen_resolution(&mScnResolutionX, &mScnResolutionY);
+            }
+        }
+
+        const mcfchar *themename = NULL;
+        CMCFResourceCache *cache = CMCFResourceCache::get_instance();
+        if(cache) {
+            themename = cache->get_cur_themename();
+            if (themename == NULL) {
+                themename = DEFAULT_THEME;
+            } else if (strlen(themename) == 0) {
+                themename = DEFAULT_THEME;
+            }
+        }
+
+        mcfboolean file_exists = FALSE;
+        snprintf(buf, bufLength, "%s/%dx%d/%s/%s", IMG_PATH_PREFIX, mScnResolutionX, mScnResolutionY, themename, path);
+        if(access(buf, R_OK) == 0) {
+            file_exists = TRUE;
+        }
+
+        /* Check if the file exists in the current theme directory */
+        if (!file_exists && themename != DEFAULT_THEME) {
+            /* Use default theme name if not found */
+            snprintf(buf, bufLength, "%s/%dx%d/%s/%s", IMG_PATH_PREFIX, mScnResolutionX, mScnResolutionY, DEFAULT_THEME, path);
+            if(access(buf, R_OK) == 0) {
+                file_exists = TRUE;
+            }
+        }
+
+        /* FIXME : Should look for what other resolutions are available */
+        /* If the file still doesn't exist, look for the file in different resolution */
+        if (!file_exists) {
+            /* Use default theme name if not found */
+            snprintf(buf, bufLength, "%s/%dx%d/%s/%s", IMG_PATH_PREFIX, MCF_BASE_SCREEN_WIDTH,
+                        MCF_BASE_SCREEN_HEIGHT, DEFAULT_THEME, path);
+            if(access(buf, R_OK) == 0) {
+                file_exists = TRUE;
+            }
+        }
+
+        /* Or maybe the path points the absolute path */
+        if (!file_exists) {
+            snprintf(buf, bufLength, "%s", path);
+        }
+    }
+
+  return buf;
+}
+
+mcfboolean
+CMCFUtils::get_autopopup_window_variables(mcfchar * const autopopupKeys[MAX_SIZE_OF_AUTOPOPUP_STRING], mcfbyte *numKeys,
+                                                 mcfbyte *numColumns, mcfbyte *numRows, mcfint *width, mcfint *height)
+{
+    MCF_DEBUG();
+    mcf_assert_return_false(autopopupKeys);
+    mcf_assert_return_false(numKeys && numColumns && numRows && width && height);
+
+    int loop;
+    mcfboolean ret = FALSE;
+    mcfint scrx, scry;
+
+    if (autopopupKeys && numKeys && numColumns && numRows && width && height) {
+        *numKeys = 0;
+        for (loop = 0;loop < MAX_SIZE_OF_AUTOPOPUP_STRING;loop++) {
+            if (autopopupKeys[loop]) {
+                if (strlen(autopopupKeys[loop]) > 0) {
+                    (*numKeys)++;
+                }
+            }
+        }
+        if(*numKeys > 0) {
+            ret = TRUE;
+        }
+
+        this->get_screen_resolution(&scrx, &scry);
+
+        CMCFContext *context = CMCFContext::get_instance();
+
+        *numColumns = (scrx - (2 * mcf_autopopup_configure.bgPadding)) /
+                      (mcf_autopopup_configure.btnWidth + mcf_autopopup_configure.btnSpacing);
+        if (*numColumns > mcf_autopopup_configure.maxColumn && mcf_autopopup_configure.maxColumn > 0)
+            *numColumns = mcf_autopopup_configure.maxColumn;
+        *numRows = ((*numKeys - 1) / *numColumns) + 1;
+        if (*numColumns > *numKeys) *numColumns = *numKeys;
+
+        /* Try to spread evenly on each lines */
+        *numColumns = (*numKeys) / (*numRows);
+        if ((*numKeys) % *numRows != 0) (*numColumns)++;
+
+        *width =
+            (*numColumns * mcf_autopopup_configure.btnWidth) +
+            (2 * mcf_autopopup_configure.bgPadding) +
+            ((*numColumns - 1) * mcf_autopopup_configure.btnSpacing);
+        *height =
+            (*numRows * mcf_autopopup_configure.btnHeight) +
+            (2 * mcf_autopopup_configure.bgPadding) +
+            ((*numRows - 1) * mcf_autopopup_configure.btnSpacing);
+
+        *width += (2 * mcf_autopopup_configure.wndDecoSize);
+        *height += (2 * mcf_autopopup_configure.wndDecoSize);
+    }
+
+    return ret;
+}
+
+/**
+ * Returns a duplicated string pointer by given str
+ */
+mcfchar*
+CMCFUtils::get_str_dup(const mcfchar* str)
+{
+    MCF_DEBUG();
+    mcfchar *new_str;
+    mcfint length;
+
+    if (str) {
+        length = strlen(str) + 1;
+        new_str = (mcfchar*)malloc(length);
+        memcpy(new_str, str, length);
+        new_str[length - 1] = '\0';
+    } else {
+        new_str = NULL;
+    }
+
+    return new_str;
+}
+
+/**
+ * Returns an unique ID
+ */
+mcf16
+CMCFUtils::get_unique_id()
+{
+    MCF_DEBUG();
+    static mcf16 uniId;
+    if (uniId < MCF_MAX_UNIQUE_ID) {
+        uniId++;
+    } else {
+        uniId = 0;
+    }
+    return uniId;
+}
+
+mcfboolean
+CMCFUtils::is_rect_overlap(McfRectangle rect1, McfRectangle rect2)
+{
+    if (rect1.x < rect2.x + rect2.width && rect1.x + rect1.width > rect2.x &&
+            rect1.y < rect2.y + rect2.height && rect1.y + rect1.height > rect2.y) {
+        return true;
+    }
+    return false;
+}
+
+mcffloat
+CMCFUtils::get_distance( mcfint x1, mcfint y1, mcfint x2, mcfint y2 )
+{
+    mcfint dx = x1 - x2;
+    mcfint dy = y1 - y2;
+    return sqrt((dx * dx) + (dy * dy));
+}
+
+mcffloat
+CMCFUtils::get_distance( McfPoint pt1, McfPoint pt2 )
+{
+    return get_distance(pt1.x, pt1.y, pt2.x, pt2.y);
+}
+
+mcffloat
+CMCFUtils::get_approximate_distance( mcfint x1, mcfint y1, mcfint x2, mcfint y2 )
+{
+    mcfint dx = abs(x1 - x2);
+    mcfint dy = abs(y1 - y2);
+    return dx + dy;
+}
+
+mcffloat
+CMCFUtils::get_approximate_distance( McfPoint pt1, McfPoint pt2 )
+{
+    return get_approximate_distance(pt1.x, pt1.y, pt2.x, pt2.y);
+}
+
+const McfNinePatchInfo*
+CMCFUtils::get_nine_patch_info(const mcfchar *imgPath)
+{
+    MCF_DEBUG();
+
+    if(!imgPath) return NULL;
+
+    /* FIXME : This is implemented in very inefficient way. Should optimize later. */
+    for (int loop = 0;loop < (sizeof(mcf_nine_patch_info) / sizeof(McfNinePatchInfo));loop++) {
+        mcfchar buf[_POSIX_PATH_MAX];
+        get_composed_path(buf, sizeof(buf), mcf_nine_patch_info[loop].imgPath);
+        if (strcmp(buf, imgPath) == 0) {
+            return &mcf_nine_patch_info[loop];
+        }
+    }
+
+    return NULL;
+}
+
+mcfint CMCFUtils::log(const mcfchar *fmt, ...)
+{
+    MCF_DEBUG();
+    va_list argptr;
+    mcfint ret = 0;
+
+    va_start(argptr, fmt);
+    CMCFUtilsImpl *impl = GetCMCFUtilsImpl();
+    if(impl) {
+        ret = impl->log(fmt, argptr);
+    }
+    va_end(argptr);
+
+    return ret;
+}
diff --git a/mcf/mcfwindows.cpp b/mcf/mcfwindows.cpp
new file mode 100755 (executable)
index 0000000..e025100
--- /dev/null
@@ -0,0 +1,905 @@
+/*
+ * Copyright 2012  Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.tizenopensource.org/license
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+
+#include "mcfwindows.h"
+#ifdef  __WIN32__
+#include "mcfwindows-win32.h"
+#elif defined(__EFL__)
+#include "mcfwindows-efl.h"
+#else
+#include "mcfwindows-gtk.h"
+#endif
+#include "mcfdebug.h"
+#include "mcfevents.h"
+#include "mcfresourcecache.h"
+#include "mcfcontroller.h"
+#include "mcfactionstate.h"
+
+using namespace mcf;
+
+CMCFWindows* CMCFWindows::sInstance = NULL; /* For singleton */
+mcfwindow ctx_window;
+
+CMCFWindows::CMCFWindows()
+{
+    MCF_DEBUG();
+
+    int loop;
+
+    pImp_ = NULL;
+
+    memset(&mBaseWinCtx, 0x00, sizeof(McfWindowContext));
+    memset(&mDimWinCtx, 0x00, sizeof(McfWindowContext));
+    memset(mPopupWinCtx, 0x00, sizeof(McfWindowContext) * MAX_POPUP_WINDOW);
+
+    mPendingUpdate = FALSE;
+
+    for (loop = 0;loop < MAX_ZORDER_NUM;loop++) {
+        mZOrderList[loop] = MCFWINDOW_INVALID;
+    }
+}
+
+CMCFWindows::~CMCFWindows()
+{
+    MCF_DEBUG();
+    if (MCFWINDOW_INVALID != mBaseWinCtx.window) {
+        get_mcf_windows_impl()->destroy_window(mBaseWinCtx.window);
+    }
+
+    if (MCFWINDOW_INVALID != mDimWinCtx.window) {
+        get_mcf_windows_impl()->destroy_window(mDimWinCtx.window);
+    }
+
+    for (int loop = 0;loop < MAX_POPUP_WINDOW;loop++) {
+        if (mPopupWinCtx[loop].window != MCFWINDOW_INVALID) {
+            if (!mPopupWinCtx[loop].isVirtual) {
+                get_mcf_windows_impl()->destroy_window(mPopupWinCtx[loop].window);
+            }
+        }
+    }
+
+}
+
+CMCFWindowsImpl*
+CMCFWindows::get_mcf_windows_impl()
+{
+    if (pImp_ == 0) {
+#ifdef  __WIN32__
+        pImp_ = new CMCFWindowsImplWin32;
+#elif defined(__EFL__)
+        pImp_ = new CMCFWindowsImplEfl;
+#else
+        pImp_ = new CMCFWindowsImplGtk;
+#endif
+    }
+    return pImp_;
+}
+
+CMCFWindows*
+CMCFWindows::get_instance()
+{
+    if (!sInstance) {
+        sInstance = new CMCFWindows();
+    }
+    return (CMCFWindows*)sInstance;
+}
+
+mcfwindow CMCFWindows::open_popup(const mcfwindow parentWnd, const mcfint parentKey, const mcf16 x, const mcf16 y, const mcf16 width, const mcf16 height, mcfshort layout, MCFPopupType popuptype, mcfboolean isVirtual, mcfboolean useDimWindow, mcfint imgOffsetx, mcfint imgOffsety, mcfint timeout)
+{
+    mcfwindow window = MCFWINDOW_INVALID;
+
+    CMCFEvents *events = CMCFEvents::get_instance();
+    CMCFActionState *state = CMCFActionState::get_instance();
+    CMCFController *controller = CMCFController::get_instance();
+    CMCFResourceCache *cache = CMCFResourceCache::get_instance();
+    CMCFContext *context = CMCFContext::get_instance();
+    CMCFWindows *windows = CMCFWindows::get_instance();
+    CMCFUtils *utils = CMCFUtils::get_instance();
+
+    if(events && state && controller && cache && context && windows && utils) {
+        for (int loop = 0;loop < MAX_POPUP_WINDOW;loop++) {
+            if (mPopupWinCtx[loop].window != MCFWINDOW_INVALID) {
+                if (mPopupWinCtx[loop].layout == layout) return MCFWINDOW_INVALID;
+            }
+        }
+
+        mcfwindow window = create_window(parentWnd, parentKey, x, y, width, height, layout, popuptype,
+                                                isVirtual, imgOffsetx, imgOffsety, timeout);
+        events->destroy_timer(MCF_TIMER_POPUP_TIMEOUT);
+        if(timeout > 0) {
+            events->create_timer(MCF_TIMER_POPUP_TIMEOUT, timeout, layout);
+        }
+
+    printf("create window (%p) x: %d, y:%d, width:%d, height:%d , layout:%d, popuptype:%d\n",window, x, y,
+          width, height, layout, popuptype);
+
+    events->connect_window_events(window, MCF_EVENT_MOUSE | MCF_EVENT_EXPOSE);
+    controller->handle_engine_signal(MCF_SIG_POPUP_SHOW, window);
+
+    /* Shows the dim window if it uses the dimwindow */
+    if (useDimWindow) {
+        mcfwindow dimWindow = get_dim_window();
+
+        /* Currently, get_window_rect does not work normally (need to check X). So I have commented it*/
+        McfRectangle rect;
+        get_window_rect(get_base_window(), &rect);
+        resize_window(dimWindow, rect.width, rect.height);
+        move_window(dimWindow, rect.x, rect.y);
+        events->connect_window_events(dimWindow, MCF_EVENT_MOUSE);
+#ifdef NO_SOCKETPLUG
+        /*If we use transient_for them the ISE will occure some crash. It needs to check X11*/
+            set_parent(parentWnd, dimWindow);
+            McfWindowContext *dimctx = get_window_context(get_dim_window());
+            if(dimctx) {
+                if(dimctx->isVirtual) {
+                    set_parent(parentWnd, window);
+                } else {
+                    set_parent(dimWindow, window);
+                }
+            }
+#else
+#endif
+        show_window(dimWindow);
+    } else {
+#ifdef NO_SOCKETPLUG
+        /*If we use transient_for them the ISE will occure some crash. It needs to check X11*/
+        set_parent(parentWnd, window);
+#else
+#endif
+    }
+    show_window(window);
+
+    push_window_in_Z_order_list(window);
+
+    state->set_cur_action_state(ACTION_STATE_POPUP_INIT);
+
+        const McfLayout *layout = cache->get_cur_layout(window);
+        if(layout) {
+            /* If the newly opened popup window has POPUP_GRAB style, lets press the nearest button on the new window */
+            if(layout->style == LAYOUT_STYLE_POPUP_GRAB) {
+                mcfwindow pressedWin = context->get_cur_pressed_window(context->get_last_touch_device_id());
+                mcfbyte pressedKey = context->get_cur_pressed_key(context->get_last_touch_device_id());
+
+                const McfLayoutKeyCoordination* coordination = cache->get_cur_layout_key_coordination(pressedWin, pressedKey);
+                McfButtonContext *btncontext = cache->get_cur_button_context(pressedWin, pressedKey);
+
+                mcfwindow move_window = context->get_cur_move_window(context->get_last_touch_device_id());
+                McfPoint move_point = context->get_cur_move_point(context->get_last_touch_device_id());
+                McfWindowContext *move_ctx = windows->get_window_context(move_window);
+                McfWindowContext *popup_ctx = windows->get_window_context(window);
+                if(move_ctx && popup_ctx) {
+                    move_point.x = (move_ctx->x - popup_ctx->x) + move_point.x;
+                    move_point.y = (move_ctx->y - popup_ctx->y) + move_point.y;
+                }
+
+                /* Find the nearest button on the autopopup window */
+                mcfboolean ended = FALSE;
+                mcffloat min_dist = (float)((mcfu32)(-1));
+                mcfint min_dist_index = NOT_USED;
+                for (mcfint loop = 0;loop < MAX_KEY && !ended;loop++) {
+                    McfButtonContext *popup_btncontext = cache->get_cur_button_context(window, loop);
+                    const McfLayoutKeyConfigure *popup_configure = cache->get_cur_layout_key_configure(window, loop);
+                    if (popup_btncontext && popup_configure) {
+                        if (!(popup_btncontext->used)) {
+                            ended = TRUE;
+                        } else if (popup_btncontext->state != BUTTON_STATE_DISABLED &&
+                            popup_configure->buttonType != BUTTON_TYPE_UIITEM) {
+                                const McfLayoutKeyCoordination *popup_coordination =
+                                    cache->get_cur_layout_key_coordination(window, loop);
+                                if(popup_coordination) {
+                                    float dist = utils->get_approximate_distance(move_point.x, move_point.y,
+                                        popup_coordination->x + (popup_coordination->width / 2),
+                                        popup_coordination->y + (popup_coordination->height / 2));
+                                    if(dist < min_dist) {
+                                        min_dist_index = loop;
+                                        min_dist = dist;
+                                    }
+                                }
+                          }
+                    }
+                }
+                /* When we found the nearest button, make it pressed */
+                if(min_dist_index != NOT_USED) {
+                    const McfLayoutKeyCoordination *popup_coordination =
+                        cache->get_cur_layout_key_coordination(window, min_dist_index);
+                    if(popup_coordination) {
+                        mcfint x = popup_coordination->x + (popup_coordination->width / 2);
+                        mcfint y = popup_coordination->y + (popup_coordination->height / 2);
+                        controller->mouse_press(window, x, y, context->get_last_touch_device_id());
+                    }
+                }
+
+                context->set_cur_pressed_window(context->get_last_touch_device_id(), window);
+                context->set_cur_pressed_key(context->get_last_touch_device_id(), min_dist_index);
+                if(btncontext) {
+                    btncontext->state = BUTTON_STATE_NORMAL;
+                }
+
+                windows->update_window(window, coordination->x, coordination->y, coordination->width, coordination->height);
+            }
+        }
+    }
+
+    return window;
+}
+
+mcfwindow CMCFWindows::open_context_popup(const mcfwindow parentWnd)
+{
+    CMCFEvents *events = CMCFEvents::get_instance();
+    CMCFActionState *state = CMCFActionState::get_instance();
+    CMCFController *controller = CMCFController::get_instance();
+    CMCFResourceCache *cache = CMCFResourceCache::get_instance();
+    CMCFContext *context = CMCFContext::get_instance();
+    CMCFWindows *windows = CMCFWindows::get_instance();
+    CMCFUtils *utils = CMCFUtils::get_instance();
+    CMCFWindowsImpl* impl = get_mcf_windows_impl();
+    ctx_window = impl->create_context_popup_window(parentWnd);
+    events->connect_window_events(ctx_window, MCF_EVENT_MOUSE | MCF_EVENT_EXPOSE);
+    controller->handle_engine_signal(MCF_SIG_POPUP_SHOW, ctx_window);
+    set_parent(parentWnd, ctx_window);
+    show_window(ctx_window);
+    state->set_cur_action_state(ACTION_STATE_POPUP_INIT);
+    return ctx_window;
+}
+
+Evas_Object* CMCFWindows::get_context_popup()
+{
+    CMCFWindowsImpl* impl = get_mcf_windows_impl();
+    return impl->get_context_popup_window();
+}
+
+void CMCFWindows::destroy_context_popup()
+{
+    CMCFWindowsImpl* impl = get_mcf_windows_impl();
+    impl->destroy_context_popup_window();
+    return;
+}
+
+bool CMCFWindows::close_popup(mcfwindow window)
+{
+    printf("close_popup window (%p) \n",window);
+
+    pop_window_in_Z_order_list(window);
+
+    hide_window(get_dim_window());
+    hide_window(window);
+    return destroy_window(window);
+}
+
+bool CMCFWindows::close_all_popups(mcfwindow skipwindow /* = MCFWINDOW_INVALID */)
+{
+    mcfboolean allClosed = TRUE;
+    /* Close all the popup windows except the targetWindow */
+    int loop = 0;
+    mcfwindow window;
+    do {
+        window = get_nth_popup_window(loop);
+        if (window) {
+            if (window != skipwindow) {
+                close_popup(window);
+            } else {
+                allClosed = FALSE;
+            }
+        }
+        loop++;
+    } while (window);
+
+    /* If there is a popup still opened, don't destroy POPUP_TIMEOUT timer */
+    return allClosed;
+}
+
+mcfwindow
+CMCFWindows::create_base_window(const mcfwindow parentWnd, const mcf16 width, const mcf16 height)
+{
+    MCF_DEBUG();
+
+    mBaseWinCtx.hidden = TRUE;
+    mBaseWinCtx.width = width;
+    mBaseWinCtx.height = height;
+    mBaseWinCtx.isVirtual = FALSE;
+    mBaseWinCtx.popuptype = POPUP_TYPE_NONE;
+    mBaseWinCtx.parentWnd = parentWnd;
+    mBaseWinCtx.x = mBaseWinCtx.y = 0;
+    mBaseWinCtx.etcInfoPtr = NULL;
+    mBaseWinCtx.window = get_mcf_windows_impl()->create_base_window(parentWnd, &mBaseWinCtx, width, height);
+
+    push_window_in_Z_order_list(mBaseWinCtx.window);
+
+    return mBaseWinCtx.window;
+}
+
+/**
+ * Creates a new top-level window
+ *
+ * @Code
+ *  CMCFGwes* gwes = CMCFGwes::get_instance();
+ *  mcfwindow popupWindow = gwes->mWnd->create_window(window, 100, 500, 200, 100, 4, POPUP_TYPE_BTN_RELEASE_POPUP, FALSE);
+ *  if(popupWindow != NULL){
+ *     gwes->mEvt->connect_window_events(popupWindow, MCF_EVENT_MOUSE | MCF_EVENT_EXPOSE);
+ *      cache->recompute_layout(popupWindow);
+ *      gwes->mWnd->show_window(popupWindow);
+ *  }
+ */
+mcfwindow
+CMCFWindows::create_window(const mcfwindow parentWnd, const mcfint parentKey, const mcf16 x, const mcf16 y, const mcf16 width,
+                                  const mcf16 height, mcfshort layout, MCFPopupType popuptype, mcfboolean isVirtual, mcfint imgOffsetx,
+                                  mcfint imgOffsety, mcfint timeout)
+{
+    MCF_DEBUG();
+
+    CMCFWindowsImpl* impl = get_mcf_windows_impl();
+    mcfwindow window = MCFWINDOW_INVALID;
+
+    if(impl) {
+        for (int loop = 0;loop < MAX_POPUP_WINDOW;loop++) {
+            if (mPopupWinCtx[loop].window == MCFWINDOW_INVALID) {
+                mPopupWinCtx[loop].hidden = TRUE;
+                mPopupWinCtx[loop].parentWnd = parentWnd;
+                mPopupWinCtx[loop].parentKey = parentKey;
+                mPopupWinCtx[loop].etcInfoPtr = NULL;
+                mPopupWinCtx[loop].layout = layout;
+                mPopupWinCtx[loop].popuptype = popuptype;
+                mPopupWinCtx[loop].isVirtual = isVirtual;
+
+                mPopupWinCtx[loop].x = x;
+                mPopupWinCtx[loop].y = y;
+                mPopupWinCtx[loop].width = width;
+                mPopupWinCtx[loop].height = height;
+
+                mPopupWinCtx[loop].imgOffsetx = imgOffsetx;
+                mPopupWinCtx[loop].imgOffsety = imgOffsety;
+
+                mPopupWinCtx[loop].timeout = timeout;
+
+                if (!isVirtual) {
+                    window = impl->create_window(parentWnd, &(mPopupWinCtx[loop]), width, height);
+                } else {
+                    window = reinterpret_cast<mcfwindow>(loop + 1);
+                }
+                if (window) {
+                    mPopupWinCtx[loop].window = window;
+                }
+
+                if (!mPopupWinCtx[loop].isVirtual) {
+                    impl->move_window(window, x, y);
+                }
+                break;
+            }
+        }
+
+        if (window == NULL) {
+            printf("Failed to create a new window. The size of window buffer has exeeded.\n");
+        }
+    }
+    return window;
+}
+
+mcfwindow
+CMCFWindows::create_dim_window(const mcfwindow parentWnd, McfWindowContext *winCtx, const mcf16 width, const mcf16 height)
+{
+    MCF_DEBUG();
+
+    CMCFWindowsImpl* impl = get_mcf_windows_impl();
+    mcfwindow window = MCFWINDOW_INVALID;
+
+    if(impl) {
+        if (mDimWinCtx.window == NULL) {
+            mDimWinCtx.hidden = TRUE;
+            if(mcf_dim_window_configure.fUseWindow) {
+                window = impl->create_dim_window(parentWnd, &mDimWinCtx, width, height);
+            } else {
+                window = reinterpret_cast<mcfwindow>(MCFWINDOW_VIRTUAL_DIM);
+                mDimWinCtx.isVirtual = TRUE;
+            }
+            if (window) {
+                mDimWinCtx.window = window;
+            }
+        } else {
+            window = mDimWinCtx.window;
+        }
+
+        if (window == NULL) {
+            printf("Failed to create a new window. The size of window buffer has exeeded.\n");
+        }
+    }
+
+    return window;
+}
+
+mcfwindow
+CMCFWindows::get_dim_window()
+{
+    MCF_DEBUG();
+    return mDimWinCtx.window;
+}
+
+bool
+CMCFWindows::destroy_window(mcfwindow window)
+{
+    MCF_DEBUG();
+
+    CMCFWindowsImpl* impl = get_mcf_windows_impl();
+    mcfboolean ret = FALSE;
+
+    if(impl) {
+        if (window == mBaseWinCtx.window) {
+            impl->destroy_window(window);
+            memset(&mBaseWinCtx, 0x00, sizeof(McfWindowContext));
+            mBaseWinCtx.window = MCFWINDOW_INVALID;
+            ret = TRUE;
+        } else if (window == mDimWinCtx.window) {
+            impl->destroy_window(window);
+            memset(&mDimWinCtx, 0x00, sizeof(McfWindowContext));
+            mDimWinCtx.window = MCFWINDOW_INVALID;
+            ret = TRUE;
+        } else {
+            for (int loop = 0;loop < MAX_POPUP_WINDOW;loop++) {
+                if (mPopupWinCtx[loop].window == window) {
+                    impl->destroy_window(window);
+                    memset(&mPopupWinCtx[loop], 0x00, sizeof(McfWindowContext));
+                    ret = TRUE;
+                    mPopupWinCtx[loop].window = MCFWINDOW_INVALID;
+                    break;
+                }
+            }
+        }
+    }
+
+    return ret;
+}
+
+mcfwindow
+CMCFWindows::get_base_window()
+{
+    MCF_DEBUG();
+
+    return mBaseWinCtx.window;
+}
+
+mcfboolean
+CMCFWindows::is_base_window(mcfwindow window)
+{
+    MCF_DEBUG();
+
+    mcfboolean ret = FALSE;
+
+    if (window != MCFWINDOW_INVALID) {
+        if (window == mBaseWinCtx.window) {
+            ret = TRUE;
+        }
+    }
+
+    return ret;
+}
+
+mcfwindow
+CMCFWindows::find_by_etcinfo( void* etcInfo )
+{
+    MCF_DEBUG();
+
+    mcfwindow ret = MCFWINDOW_INVALID;
+
+    if (etcInfo == mBaseWinCtx.etcInfoPtr) {
+        ret = mBaseWinCtx.window;
+    } else if (etcInfo == mDimWinCtx.etcInfoPtr) {
+        ret = mDimWinCtx.window;
+    } else {
+        for (int loop = 0;loop < MAX_POPUP_WINDOW;loop++) {
+            if (etcInfo == mPopupWinCtx[loop].etcInfoPtr) {
+                ret = mPopupWinCtx[loop].window;
+                break;
+            }
+        }
+    }
+
+    return ret;
+}
+
+McfWindowContext*
+CMCFWindows::get_window_context(mcfwindow window, mcfboolean fGetPos)
+{
+    MCF_DEBUG();
+
+    McfWindowContext* ret = NULL;
+
+    if (window == mBaseWinCtx.window) {
+        if (fGetPos) {
+            McfRectangle rect;
+            get_window_rect(window, &rect);
+            mBaseWinCtx.x = rect.x;
+            mBaseWinCtx.y = rect.y;
+        }
+        ret = &mBaseWinCtx;
+    } else if (window == mDimWinCtx.window) {
+        ret = &mDimWinCtx;
+    } else {
+        for (int loop = 0;loop < MAX_POPUP_WINDOW;loop++) {
+            if (mPopupWinCtx[loop].window == window) {
+                if (fGetPos) {
+                    McfRectangle rect;
+                    get_window_rect(window, &rect);
+                    mPopupWinCtx[loop].x = rect.x;
+                    mPopupWinCtx[loop].y = rect.y;
+                }
+                ret = &mPopupWinCtx[loop];
+                break;
+            }
+        }
+    }
+
+    return ret;
+}
+
+void
+CMCFWindows::set_window_context(mcfwindow window, McfWindowContext* context)
+{
+    MCF_DEBUG();
+
+    if (window == mBaseWinCtx.window) {
+        memcpy(&mBaseWinCtx,context, sizeof(McfWindowContext));
+    } else {
+        for (int loop = 0;loop < MAX_POPUP_WINDOW;loop++) {
+            if (mPopupWinCtx[loop].window == window) {
+                memcpy(&mPopupWinCtx[loop], context, sizeof(McfWindowContext));
+                break;
+            }
+        }
+    }
+}
+
+mcf8
+CMCFWindows::find_popup_window_index(mcfwindow window)
+{
+    MCF_DEBUG();
+
+    mcf8 ret = NOT_USED;
+
+    for (int loop = 0;loop < MAX_POPUP_WINDOW;loop++) {
+        if (mPopupWinCtx[loop].window == window) {
+            ret = loop;
+            break;
+        }
+    }
+
+    return ret;
+}
+
+void
+CMCFWindows::move_window(const mcfwindow window, const mcf16 x, const mcf16 y)
+{
+    MCF_DEBUG();
+
+    mcfboolean isVirtual = FALSE;
+    if (window == mBaseWinCtx.window) {
+        mBaseWinCtx.x = x;
+        mBaseWinCtx.y = y;
+        isVirtual = mBaseWinCtx.isVirtual;
+    } else if (window == mDimWinCtx.window) {
+        mDimWinCtx.x = x;
+        mDimWinCtx.y = y;
+        isVirtual = mDimWinCtx.isVirtual;
+    } else {
+        for (int loop = 0;loop < MAX_POPUP_WINDOW;loop++) {
+            if (mPopupWinCtx[loop].window == window) {
+                mPopupWinCtx[loop].x = x;
+                mPopupWinCtx[loop].y = y;
+                isVirtual = mPopupWinCtx[loop].isVirtual;
+                break;
+            }
+        }
+    }
+    if(!isVirtual) {
+        CMCFWindowsImpl* impl = get_mcf_windows_impl();
+        if(impl) {
+            impl->move_window(window, x, y);
+        }
+    }
+}
+
+void
+CMCFWindows::resize_window(const mcfwindow window, const mcf16 width, const mcf16 height)
+{
+    MCF_DEBUG();
+
+    mcfboolean isVirtual = FALSE;
+    if (window == mBaseWinCtx.window) {
+        mBaseWinCtx.width = width;
+        mBaseWinCtx.height = height;
+        isVirtual = mBaseWinCtx.isVirtual;
+    } else if (window == mDimWinCtx.window) {
+        mDimWinCtx.width = width;
+        mDimWinCtx.height = height;
+        isVirtual = mDimWinCtx.isVirtual;
+    } else {
+        for (int loop = 0;loop < MAX_POPUP_WINDOW;loop++) {
+            if (mPopupWinCtx[loop].window == window) {
+                mPopupWinCtx[loop].width = width;
+                mPopupWinCtx[loop].height = height;
+                isVirtual = mPopupWinCtx[loop].isVirtual;
+                break;
+            }
+        }
+    }
+    if(!isVirtual) {
+        CMCFWindowsImpl* impl = get_mcf_windows_impl();
+        if(impl) {
+            impl->resize_window(window, width, height);
+        }
+    }
+}
+
+void
+CMCFWindows::move_resize_window(const mcfwindow window, const mcf16 x, const mcf16 y, const mcf16 width, const mcf16 height)
+{
+    MCF_DEBUG();
+
+    mcfboolean isVirtual = FALSE;
+    if (window == mBaseWinCtx.window) {
+        mBaseWinCtx.x = x;
+        mBaseWinCtx.y = y;
+        mBaseWinCtx.width = width;
+        mBaseWinCtx.height = height;
+        isVirtual = mBaseWinCtx.isVirtual;
+    } else if (window == mDimWinCtx.window) {
+        mDimWinCtx.x = x;
+        mDimWinCtx.y = y;
+        mDimWinCtx.width = width;
+        mDimWinCtx.height = height;
+        isVirtual = mDimWinCtx.isVirtual;
+    } else {
+        for (int loop = 0;loop < MAX_POPUP_WINDOW;loop++) {
+            if (mPopupWinCtx[loop].window == window) {
+                mPopupWinCtx[loop].x = x;
+                mPopupWinCtx[loop].y = y;
+                mPopupWinCtx[loop].width = width;
+                mPopupWinCtx[loop].height = height;
+                isVirtual = mPopupWinCtx[loop].isVirtual;
+                break;
+            }
+        }
+    }
+    if(!isVirtual) {
+        CMCFWindowsImpl* impl = get_mcf_windows_impl();
+        if(impl) {
+            impl->move_resize_window(window, x, y, width, height);
+        }
+    }
+}
+
+
+/* Push given window into a Z-order list */
+void CMCFWindows::push_window_in_Z_order_list(mcfwindow window)
+{
+    MCF_DEBUG();
+
+    mcfint loop;
+
+    for (loop = 0;loop < MAX_ZORDER_NUM;loop++) {
+        if (mZOrderList[loop] == MCFWINDOW_INVALID) {
+            mZOrderList[loop] = window;
+            return;
+        }
+    }
+}
+
+/* Pop given window from a Z-order list */
+void CMCFWindows::pop_window_in_Z_order_list(mcfwindow window)
+{
+    MCF_DEBUG();
+
+    mcfint loop;
+    mcfboolean found = FALSE;
+
+    for (loop = 0;loop < MAX_ZORDER_NUM - 1;loop++) {
+        if (mZOrderList[loop] == window || found) {
+            found = TRUE;
+            mZOrderList[loop] = mZOrderList[loop + 1];
+        }
+    }
+
+    mZOrderList[MAX_ZORDER_NUM - 1] = MCFWINDOW_INVALID;
+}
+
+/* Search n-th window in the Z-order stack, starting from the top (TOPMOST window would be the 0 index) */
+mcfwindow CMCFWindows::get_nth_window_in_Z_order_list(mcfbyte index)
+{
+    MCF_DEBUG();
+
+    mcfint loop;
+
+    for (loop = MAX_ZORDER_NUM - 1;loop >= 0;loop--) {
+        if (mZOrderList[loop] != MCFWINDOW_INVALID) {
+            if (index == 0) {
+                return mZOrderList[loop];
+            }
+            index--;
+        }
+    }
+
+    return MCFWINDOW_INVALID;
+}
+
+mcfwindow CMCFWindows::get_nth_popup_window( mcfbyte index )
+{
+    MCF_DEBUG();
+
+    mcf_assert_return_null(index >= 0 && index < MAX_POPUP_WINDOW);
+
+    if (index < MAX_POPUP_WINDOW) {
+        return mPopupWinCtx[index].window;
+    }
+
+    return MCFWINDOW_INVALID;
+}
+
+mcfbyte CMCFWindows::get_Z_order(mcfwindow window)
+{
+    MCF_DEBUG();
+
+    mcfbyte loop;
+    for (loop = 0;loop < MAX_ZORDER_NUM;loop++) {
+        if (mZOrderList[loop] == window) {
+            return loop;
+        }
+    }
+    return NOT_USED;
+}
+
+void CMCFWindows::set_parent( const mcfwindow parentWindow, const mcfwindow window )
+{
+    /* Do not set parent if the window is a virtual window */
+    McfWindowContext *winctx = get_window_context(window, FALSE);
+    if (winctx) {
+        if (!(winctx->isVirtual)) {
+            CMCFWindowsImpl* impl = get_mcf_windows_impl();
+            if(impl) {
+                impl->set_parent(parentWindow, window);
+            }
+        }
+    }
+}
+
+void
+CMCFWindows::show_window(const mcfwindow window, mcfboolean queue /*= FALSE*/)
+{
+    MCF_DEBUG();
+
+    if (window == mBaseWinCtx.window) {
+        mBaseWinCtx.hidden = FALSE;
+    } else if (window == mDimWinCtx.window) {
+        mDimWinCtx.hidden = FALSE;
+    } else {
+        for (int loop = 0;loop < MAX_POPUP_WINDOW;loop++) {
+            if (mPopupWinCtx[loop].window == window) {
+                mPopupWinCtx[loop].hidden = FALSE;
+                break;
+            }
+        }
+    }
+
+    CMCFWindowsImpl* impl = get_mcf_windows_impl();
+    if(impl) {
+        impl->show_window(window, queue);
+    }
+}
+
+void
+CMCFWindows::hide_window(const mcfwindow window, const mcfboolean fForce /*= FALSE*/)
+{
+    MCF_DEBUG();
+
+    if (window == mBaseWinCtx.window) {
+        mBaseWinCtx.hidden = TRUE;
+    } else if (window == mDimWinCtx.window) {
+        mDimWinCtx.hidden = TRUE;
+    } else {
+        for (int loop = 0;loop < MAX_POPUP_WINDOW;loop++) {
+            if (mPopupWinCtx[loop].window == window) {
+                mPopupWinCtx[loop].hidden = TRUE;
+                break;
+            }
+        }
+    }
+
+    CMCFWindowsImpl* impl = get_mcf_windows_impl();
+    if(impl) {
+        impl->hide_window(window, fForce);
+    }
+}
+
+void
+CMCFWindows::set_keep_above(const mcfwindow window, const mcfboolean keepabove)
+{
+    CMCFWindowsImpl* impl = get_mcf_windows_impl();
+    if(impl) {
+        impl->set_keep_above(window, keepabove);
+    }
+}
+
+void
+CMCFWindows::set_update_pending(mcfboolean pend, mcfboolean autoUpdate)
+{
+    mPendingUpdate = pend;
+    if(!pend && autoUpdate) {
+        update_window(mBaseWinCtx.window);
+    }
+}
+
+mcfboolean
+CMCFWindows::get_update_pending()
+{
+    return mPendingUpdate;
+}
+
+void
+CMCFWindows::update_window(const mcfwindow window,
+                           const mcf16 x /*= 0*/, const mcf16 y /*= 0*/, const mcf16 width /*= 0*/, const mcf16 height /*= 0*/ )
+{
+    if(!mPendingUpdate) {
+        CMCFWindowsImpl* impl = get_mcf_windows_impl();
+        if(impl) {
+            impl->update_window(window, x, y, width, height);
+        }
+    }
+}
+
+mcfboolean
+CMCFWindows::get_window_rect(const mcfwindow window, McfRectangle *rect) {
+    MCF_DEBUG();
+
+    mcfboolean isVirtual = FALSE;
+    mcfboolean bRet = FALSE;
+    if (window == mBaseWinCtx.window) {
+        isVirtual = mBaseWinCtx.isVirtual;
+        if(isVirtual) {
+            rect->x = mBaseWinCtx.x;
+            rect->y = mBaseWinCtx.y;
+            rect->width = mBaseWinCtx.width;
+            rect->height = mBaseWinCtx.height;
+        }
+    } else if (window == mDimWinCtx.window) {
+        isVirtual = mDimWinCtx.isVirtual;
+        if(isVirtual) {
+            rect->x = mDimWinCtx.x;
+            rect->y = mDimWinCtx.y;
+            rect->width = mDimWinCtx.width;
+            rect->height = mDimWinCtx.height;
+        }
+    } else {
+        for (int loop = 0;loop < MAX_POPUP_WINDOW;loop++) {
+            if (mPopupWinCtx[loop].window == window) {
+                isVirtual = mPopupWinCtx[loop].isVirtual;
+                if(isVirtual) {
+                    rect->x = mPopupWinCtx[loop].x;
+                    rect->y = mPopupWinCtx[loop].y;
+                    rect->width = mPopupWinCtx[loop].width;
+                    rect->height = mPopupWinCtx[loop].height;
+                }
+                break;
+            }
+        }
+    }
+     if(!isVirtual) {
+         CMCFWindowsImpl* impl = get_mcf_windows_impl();
+         if(impl) {
+             bRet = impl->get_window_rect(window, rect);
+         }
+    }
+
+    return bRet;
+}
diff --git a/mcf/utils/linux/mcfutils-linux.cpp b/mcf/utils/linux/mcfutils-linux.cpp
new file mode 100755 (executable)
index 0000000..7154613
--- /dev/null
@@ -0,0 +1,64 @@
+/*
+ * Copyright 2012  Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.tizenopensource.org/license
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+
+#include "mcfutils.h"
+#include "mcfdebug.h"
+
+#include <stdarg.h>
+
+#include <Ecore.h>
+#include <Ecore_X.h>
+#include <Ecore_Evas.h>
+#include <dlog.h>
+
+#ifndef LOG_TAG
+#define LOG_TAG "ISE"
+#endif
+
+using namespace mcf;
+
+/* FIXME : Currently the screen resolution is locally cached, should be updated when it gets changed */
+mcfboolean
+CMCFUtilsImplLinux::get_screen_resolution(mcfint *x, mcfint *y)
+{
+       MCF_DEBUG();
+       static Evas_Coord win_w, win_h;
+       if(win_w == 0 || win_h == 0) {
+               ecore_x_window_size_get(ecore_x_window_root_first_get(), &win_w, &win_h);
+       }
+
+       if(x && y) {
+               *x = win_w;
+               *y = win_h;
+       }
+       return TRUE;
+}
+
+mcfint CMCFUtilsImplLinux::log(const mcfchar *fmt, ...)
+{
+       MCF_DEBUG();
+       va_list argptr;
+       mcfint ret = 0;
+
+       va_start(argptr, fmt);
+       LOGD(fmt, argptr);
+       va_end(argptr);
+
+       return ret;
+}
+
diff --git a/mcf/utils/win32/mcfutils-win32.cpp b/mcf/utils/win32/mcfutils-win32.cpp
new file mode 100755 (executable)
index 0000000..098b0c4
--- /dev/null
@@ -0,0 +1,44 @@
+/*
+ * Copyright 2012  Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.tizenopensource.org/license
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+\r
+#include <stdarg.h>\r
+\r
+#include "mcfutils.h"\r
+#include "mcfdebug.h"\r
+\r
+using namespace mcf;\r
+\r
+mcfboolean\r
+CMCFUtilsImplWin32::get_screen_resolution(mcfint *x, mcfint *y)\r
+{\r
+       MCF_DEBUG();\r
+       return TRUE;\r
+}\r
+\r
+mcfint CMCFUtilsImplWin32::log(const mcfchar *fmt, ...)\r
+{\r
+       MCF_DEBUG();\r
+       va_list argptr;\r
+       mcfint ret = 0;\r
+\r
+       va_start(argptr, fmt);\r
+       printf(fmt, argptr);\r
+       va_end(argptr);\r
+\r
+       return ret;\r
+}\r
diff --git a/missing b/missing
new file mode 100755 (executable)
index 0000000..1c8ff70
--- /dev/null
+++ b/missing
@@ -0,0 +1,367 @@
+#! /bin/sh
+# Common stub for a few missing GNU programs while installing.
+
+scriptversion=2006-05-10.23
+
+# Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005, 2006
+#   Free Software Foundation, Inc.
+# Originally by Fran,cois Pinard <pinard@iro.umontreal.ca>, 1996.
+
+# 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, or (at your option)
+# any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301, USA.
+
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+if test $# -eq 0; then
+  echo 1>&2 "Try \`$0 --help' for more information"
+  exit 1
+fi
+
+run=:
+sed_output='s/.* --output[ =]\([^ ]*\).*/\1/p'
+sed_minuso='s/.* -o \([^ ]*\).*/\1/p'
+
+# In the cases where this matters, `missing' is being run in the
+# srcdir already.
+if test -f configure.ac; then
+  configure_ac=configure.ac
+else
+  configure_ac=configure.in
+fi
+
+msg="missing on your system"
+
+case $1 in
+--run)
+  # Try to run requested program, and just exit if it succeeds.
+  run=
+  shift
+  "$@" && exit 0
+  # Exit code 63 means version mismatch.  This often happens
+  # when the user try to use an ancient version of a tool on
+  # a file that requires a minimum version.  In this case we
+  # we should proceed has if the program had been absent, or
+  # if --run hadn't been passed.
+  if test $? = 63; then
+    run=:
+    msg="probably too old"
+  fi
+  ;;
+
+  -h|--h|--he|--hel|--help)
+    echo "\
+$0 [OPTION]... PROGRAM [ARGUMENT]...
+
+Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an
+error status if there is no known handling for PROGRAM.
+
+Options:
+  -h, --help      display this help and exit
+  -v, --version   output version information and exit
+  --run           try to run the given command, and emulate it if it fails
+
+Supported PROGRAM values:
+  aclocal      touch file \`aclocal.m4'
+  autoconf     touch file \`configure'
+  autoheader   touch file \`config.h.in'
+  autom4te     touch the output file, or create a stub one
+  automake     touch all \`Makefile.in' files
+  bison        create \`y.tab.[ch]', if possible, from existing .[ch]
+  flex         create \`lex.yy.c', if possible, from existing .c
+  help2man     touch the output file
+  lex          create \`lex.yy.c', if possible, from existing .c
+  makeinfo     touch the output file
+  tar          try tar, gnutar, gtar, then tar without non-portable flags
+  yacc         create \`y.tab.[ch]', if possible, from existing .[ch]
+
+Send bug reports to <bug-automake@gnu.org>."
+    exit $?
+    ;;
+
+  -v|--v|--ve|--ver|--vers|--versi|--versio|--version)
+    echo "missing $scriptversion (GNU Automake)"
+    exit $?
+    ;;
+
+  -*)
+    echo 1>&2 "$0: Unknown \`$1' option"
+    echo 1>&2 "Try \`$0 --help' for more information"
+    exit 1
+    ;;
+
+esac
+
+# Now exit if we have it, but it failed.  Also exit now if we
+# don't have it and --version was passed (most likely to detect
+# the program).
+case $1 in
+  lex|yacc)
+    # Not GNU programs, they don't have --version.
+    ;;
+
+  tar)
+    if test -n "$run"; then
+       echo 1>&2 "ERROR: \`tar' requires --run"
+       exit 1
+    elif test "x$2" = "x--version" || test "x$2" = "x--help"; then
+       exit 1
+    fi
+    ;;
+
+  *)
+    if test -z "$run" && ($1 --version) > /dev/null 2>&1; then
+       # We have it, but it failed.
+       exit 1
+    elif test "x$2" = "x--version" || test "x$2" = "x--help"; then
+       # Could not run --version or --help.  This is probably someone
+       # running `$TOOL --version' or `$TOOL --help' to check whether
+       # $TOOL exists and not knowing $TOOL uses missing.
+       exit 1
+    fi
+    ;;
+esac
+
+# If it does not exist, or fails to run (possibly an outdated version),
+# try to emulate it.
+case $1 in
+  aclocal*)
+    echo 1>&2 "\
+WARNING: \`$1' is $msg.  You should only need it if
+         you modified \`acinclude.m4' or \`${configure_ac}'.  You might want
+         to install the \`Automake' and \`Perl' packages.  Grab them from
+         any GNU archive site."
+    touch aclocal.m4
+    ;;
+
+  autoconf)
+    echo 1>&2 "\
+WARNING: \`$1' is $msg.  You should only need it if
+         you modified \`${configure_ac}'.  You might want to install the
+         \`Autoconf' and \`GNU m4' packages.  Grab them from any GNU
+         archive site."
+    touch configure
+    ;;
+
+  autoheader)
+    echo 1>&2 "\
+WARNING: \`$1' is $msg.  You should only need it if
+         you modified \`acconfig.h' or \`${configure_ac}'.  You might want
+         to install the \`Autoconf' and \`GNU m4' packages.  Grab them
+         from any GNU archive site."
+    files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}`
+    test -z "$files" && files="config.h"
+    touch_files=
+    for f in $files; do
+      case $f in
+      *:*) touch_files="$touch_files "`echo "$f" |
+                                      sed -e 's/^[^:]*://' -e 's/:.*//'`;;
+      *) touch_files="$touch_files $f.in";;
+      esac
+    done
+    touch $touch_files
+    ;;
+
+  automake*)
+    echo 1>&2 "\
+WARNING: \`$1' is $msg.  You should only need it if
+         you modified \`Makefile.am', \`acinclude.m4' or \`${configure_ac}'.
+         You might want to install the \`Automake' and \`Perl' packages.
+         Grab them from any GNU archive site."
+    find . -type f -name Makefile.am -print |
+          sed 's/\.am$/.in/' |
+          while read f; do touch "$f"; done
+    ;;
+
+  autom4te)
+    echo 1>&2 "\
+WARNING: \`$1' is needed, but is $msg.
+         You might have modified some files without having the
+         proper tools for further handling them.
+         You can get \`$1' as part of \`Autoconf' from any GNU
+         archive site."
+
+    file=`echo "$*" | sed -n "$sed_output"`
+    test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"`
+    if test -f "$file"; then
+       touch $file
+    else
+       test -z "$file" || exec >$file
+       echo "#! /bin/sh"
+       echo "# Created by GNU Automake missing as a replacement of"
+       echo "#  $ $@"
+       echo "exit 0"
+       chmod +x $file
+       exit 1
+    fi
+    ;;
+
+  bison|yacc)
+    echo 1>&2 "\
+WARNING: \`$1' $msg.  You should only need it if
+         you modified a \`.y' file.  You may need the \`Bison' package
+         in order for those modifications to take effect.  You can get
+         \`Bison' from any GNU archive site."
+    rm -f y.tab.c y.tab.h
+    if test $# -ne 1; then
+        eval LASTARG="\${$#}"
+       case $LASTARG in
+       *.y)
+           SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'`
+           if test -f "$SRCFILE"; then
+                cp "$SRCFILE" y.tab.c
+           fi
+           SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'`
+           if test -f "$SRCFILE"; then
+                cp "$SRCFILE" y.tab.h
+           fi
+         ;;
+       esac
+    fi
+    if test ! -f y.tab.h; then
+       echo >y.tab.h
+    fi
+    if test ! -f y.tab.c; then
+       echo 'main() { return 0; }' >y.tab.c
+    fi
+    ;;
+
+  lex|flex)
+    echo 1>&2 "\
+WARNING: \`$1' is $msg.  You should only need it if
+         you modified a \`.l' file.  You may need the \`Flex' package
+         in order for those modifications to take effect.  You can get
+         \`Flex' from any GNU archive site."
+    rm -f lex.yy.c
+    if test $# -ne 1; then
+        eval LASTARG="\${$#}"
+       case $LASTARG in
+       *.l)
+           SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'`
+           if test -f "$SRCFILE"; then
+                cp "$SRCFILE" lex.yy.c
+           fi
+         ;;
+       esac
+    fi
+    if test ! -f lex.yy.c; then
+       echo 'main() { return 0; }' >lex.yy.c
+    fi
+    ;;
+
+  help2man)
+    echo 1>&2 "\
+WARNING: \`$1' is $msg.  You should only need it if
+        you modified a dependency of a manual page.  You may need the
+        \`Help2man' package in order for those modifications to take
+        effect.  You can get \`Help2man' from any GNU archive site."
+
+    file=`echo "$*" | sed -n "$sed_output"`
+    test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"`
+    if test -f "$file"; then
+       touch $file
+    else
+       test -z "$file" || exec >$file
+       echo ".ab help2man is required to generate this page"
+       exit 1
+    fi
+    ;;
+
+  makeinfo)
+    echo 1>&2 "\
+WARNING: \`$1' is $msg.  You should only need it if
+         you modified a \`.texi' or \`.texinfo' file, or any other file
+         indirectly affecting the aspect of the manual.  The spurious
+         call might also be the consequence of using a buggy \`make' (AIX,
+         DU, IRIX).  You might want to install the \`Texinfo' package or
+         the \`GNU make' package.  Grab either from any GNU archive site."
+    # The file to touch is that specified with -o ...
+    file=`echo "$*" | sed -n "$sed_output"`
+    test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"`
+    if test -z "$file"; then
+      # ... or it is the one specified with @setfilename ...
+      infile=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'`
+      file=`sed -n '
+       /^@setfilename/{
+         s/.* \([^ ]*\) *$/\1/
+         p
+         q
+       }' $infile`
+      # ... or it is derived from the source name (dir/f.texi becomes f.info)
+      test -z "$file" && file=`echo "$infile" | sed 's,.*/,,;s,.[^.]*$,,'`.info
+    fi
+    # If the file does not exist, the user really needs makeinfo;
+    # let's fail without touching anything.
+    test -f $file || exit 1
+    touch $file
+    ;;
+
+  tar)
+    shift
+
+    # We have already tried tar in the generic part.
+    # Look for gnutar/gtar before invocation to avoid ugly error
+    # messages.
+    if (gnutar --version > /dev/null 2>&1); then
+       gnutar "$@" && exit 0
+    fi
+    if (gtar --version > /dev/null 2>&1); then
+       gtar "$@" && exit 0
+    fi
+    firstarg="$1"
+    if shift; then
+       case $firstarg in
+       *o*)
+           firstarg=`echo "$firstarg" | sed s/o//`
+           tar "$firstarg" "$@" && exit 0
+           ;;
+       esac
+       case $firstarg in
+       *h*)
+           firstarg=`echo "$firstarg" | sed s/h//`
+           tar "$firstarg" "$@" && exit 0
+           ;;
+       esac
+    fi
+
+    echo 1>&2 "\
+WARNING: I can't seem to be able to run \`tar' with the given arguments.
+         You may want to install GNU tar or Free paxutils, or check the
+         command line arguments."
+    exit 1
+    ;;
+
+  *)
+    echo 1>&2 "\
+WARNING: \`$1' is needed, and is $msg.
+         You might have modified some files without having the
+         proper tools for further handling them.  Check the \`README' file,
+         it often tells you about the needed prerequisites for installing
+         this package.  You may also peek at any GNU archive site, in case
+         some other package would contain this missing \`$1' program."
+    exit 1
+    ;;
+esac
+
+exit 0
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-end: "$"
+# End:
diff --git a/mkinstalldirs b/mkinstalldirs
new file mode 100755 (executable)
index 0000000..6fbe5e1
--- /dev/null
@@ -0,0 +1,150 @@
+#! /bin/sh
+# mkinstalldirs --- make directory hierarchy
+
+scriptversion=2004-02-15.20
+
+# Original author: Noah Friedman <friedman@prep.ai.mit.edu>
+# Created: 1993-05-16
+# Public domain.
+#
+# This file is maintained in Automake, please report
+# bugs to <bug-automake@gnu.org> or send patches to
+# <automake-patches@gnu.org>.
+
+errstatus=0
+dirmode=""
+
+usage="\
+Usage: mkinstalldirs [-h] [--help] [--version] [-m MODE] DIR ...
+
+Create each directory DIR (with mode MODE, if specified), including all
+leading file name components.
+
+Report bugs to <bug-automake@gnu.org>."
+
+# process command line arguments
+while test $# -gt 0 ; do
+  case $1 in
+    -h | --help | --h*)         # -h for help
+      echo "$usage"
+      exit 0
+      ;;
+    -m)                         # -m PERM arg
+      shift
+      test $# -eq 0 && { echo "$usage" 1>&2; exit 1; }
+      dirmode=$1
+      shift
+      ;;
+    --version)
+      echo "$0 $scriptversion"
+      exit 0
+      ;;
+    --)                         # stop option processing
+      shift
+      break
+      ;;
+    -*)                         # unknown option
+      echo "$usage" 1>&2
+      exit 1
+      ;;
+    *)                          # first non-opt arg
+      break
+      ;;
+  esac
+done
+
+for file
+do
+  if test -d "$file"; then
+    shift
+  else
+    break
+  fi
+done
+
+case $# in
+  0) exit 0 ;;
+esac
+
+# Solaris 8's mkdir -p isn't thread-safe.  If you mkdir -p a/b and
+# mkdir -p a/c at the same time, both will detect that a is missing,
+# one will create a, then the other will try to create a and die with
+# a "File exists" error.  This is a problem when calling mkinstalldirs
+# from a parallel make.  We use --version in the probe to restrict
+# ourselves to GNU mkdir, which is thread-safe.
+case $dirmode in
+  '')
+    if mkdir -p --version . >/dev/null 2>&1 && test ! -d ./--version; then
+      echo "mkdir -p -- $*"
+      exec mkdir -p -- "$@"
+    else
+      # On NextStep and OpenStep, the `mkdir' command does not
+      # recognize any option.  It will interpret all options as
+      # directories to create, and then abort because `.' already
+      # exists.
+      test -d ./-p && rmdir ./-p
+      test -d ./--version && rmdir ./--version
+    fi
+    ;;
+  *)
+    if mkdir -m "$dirmode" -p --version . >/dev/null 2>&1 &&
+       test ! -d ./--version; then
+      echo "mkdir -m $dirmode -p -- $*"
+      exec mkdir -m "$dirmode" -p -- "$@"
+    else
+      # Clean up after NextStep and OpenStep mkdir.
+      for d in ./-m ./-p ./--version "./$dirmode";
+      do
+        test -d $d && rmdir $d
+      done
+    fi
+    ;;
+esac
+
+for file
+do
+  set fnord `echo ":$file" | sed -ne 's/^:\//#/;s/^://;s/\// /g;s/^#/\//;p'`
+  shift
+
+  pathcomp=
+  for d
+  do
+    pathcomp="$pathcomp$d"
+    case $pathcomp in
+      -*) pathcomp=./$pathcomp ;;
+    esac
+
+    if test ! -d "$pathcomp"; then
+      echo "mkdir $pathcomp"
+
+      mkdir "$pathcomp" || lasterr=$?
+
+      if test ! -d "$pathcomp"; then
+       errstatus=$lasterr
+      else
+       if test ! -z "$dirmode"; then
+         echo "chmod $dirmode $pathcomp"
+         lasterr=""
+         chmod "$dirmode" "$pathcomp" || lasterr=$?
+
+         if test ! -z "$lasterr"; then
+           errstatus=$lasterr
+         fi
+       fi
+      fi
+    fi
+
+    pathcomp="$pathcomp/"
+  done
+done
+
+exit $errstatus
+
+# Local Variables:
+# mode: shell-script
+# sh-indentation: 2
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-end: "$"
+# End:
diff --git a/packaging/ise-default.spec b/packaging/ise-default.spec
new file mode 100755 (executable)
index 0000000..28b03fe
--- /dev/null
@@ -0,0 +1,44 @@
+Name:       ise-default
+Summary:    Tizen keyboard
+Version:    0.2.2
+Release:    68
+Group:      TO_BE/FILLED_IN
+License:    Flora Software License
+Source0:    %{name}-%{version}.tar.gz
+Requires(post): /sbin/ldconfig, /bin/ln
+Requires(postun): /sbin/ldconfig
+BuildRequires: libgcrypt-devel
+BuildRequires: gettext-tools
+BuildRequires: pkgconfig(elementary)
+BuildRequires: pkgconfig(utilX)
+BuildRequires: pkgconfig(isf)
+BuildRequires: pkgconfig(vconf)
+BuildRequires: pkgconfig(heynoti)
+BuildRequires: pkgconfig(aul)
+BuildRequires: pkgconfig(ui-gadget)
+
+%description
+Description: Tizen keyboard
+
+
+%prep
+%setup -q
+
+%build
+./bootstrap
+PREFIX="%{_prefix}"; export PREFIX
+%configure --disable-static --prefix=%{_prefix}
+
+make %{?jobs:-j%jobs}
+
+
+%install
+rm -rf %{buildroot}
+%make_install
+
+%files
+%defattr(-,root,root,-) 
+%{_libdir}/scim-1.0/1.4.0/*
+%{_datadir}/isf/ise/ise-default/*
+%{_datadir}/scim/icons/*
+%{_datadir}/locale/*
diff --git a/po/Makefile.in.in b/po/Makefile.in.in
new file mode 100755 (executable)
index 0000000..3be6649
--- /dev/null
@@ -0,0 +1,256 @@
+# Makefile for program source directory in GNU NLS utilities package.
+# Copyright (C) 1995, 1996, 1997 by Ulrich Drepper <drepper@gnu.ai.mit.edu>
+#
+# This file file be copied and used freely without restrictions.  It can
+# be used in projects which are not available under the GNU Public License
+# but which still want to provide support for the GNU gettext functionality.
+# Please note that the actual code is *not* freely available.
+#
+# - Modified by Owen Taylor <otaylor@redhat.com> to use GETTEXT_PACKAGE
+#   instead of PACKAGE and to look for po2tbl in ./ not in intl/
+#
+# - Modified by jacob berkman <jacob@ximian.com> to install
+#   Makefile.in.in and po2tbl.sed.in for use with glib-gettextize
+
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+PACKAGE = @PACKAGE@
+VERSION = @VERSION@
+
+SHELL = /bin/sh
+@SET_MAKE@
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+top_builddir = ..
+VPATH = @srcdir@
+
+prefix = @prefix@
+exec_prefix = @exec_prefix@
+datadir = @datadir@
+libdir = @libdir@
+localedir = $(libdir)/locale
+gnulocaledir = $(datadir)/locale
+gettextsrcdir = $(datadir)/glib-2.0/gettext/po
+subdir = po
+install_sh = @install_sh@
+mkdir_p = @mkdir_p@
+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+
+CC = @CC@
+GENCAT = @GENCAT@
+GMSGFMT = @GMSGFMT@
+MSGFMT = @MSGFMT@
+XGETTEXT = @XGETTEXT@
+INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
+INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
+MSGMERGE = INTLTOOL_EXTRACT=$(INTLTOOL_EXTRACT) srcdir=$(srcdir) $(INTLTOOL_UPDATE) --gettext-package $(GETTEXT_PACKAGE) --dist
+GENPOT   = INTLTOOL_EXTRACT=$(INTLTOOL_EXTRACT) srcdir=$(srcdir) $(INTLTOOL_UPDATE) --gettext-package $(GETTEXT_PACKAGE) --pot
+
+DEFS = @DEFS@
+CFLAGS = @CFLAGS@
+CPPFLAGS = @CPPFLAGS@
+
+INCLUDES = -I.. -I$(top_srcdir)/intl
+
+COMPILE = $(CC) -c $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS) $(XCFLAGS)
+
+SOURCES = 
+POFILES = @POFILES@
+GMOFILES = @GMOFILES@
+DISTFILES = Makefile.in.in POTFILES.in \
+$(POFILES) $(GMOFILES) $(SOURCES)
+
+POTFILES = \
+
+CATALOGS = @CATALOGS@
+CATOBJEXT = @CATOBJEXT@
+INSTOBJEXT = @INSTOBJEXT@
+
+.SUFFIXES:
+.SUFFIXES: .c .o .po .pox .gmo .mo .msg .cat
+
+.c.o:
+       $(COMPILE) $<
+
+.po.pox:
+       $(MAKE) $(GETTEXT_PACKAGE).pot
+       $(MSGMERGE) $< $(top_builddir)/po/$(GETTEXT_PACKAGE).pot -o $*pox
+
+.po.mo:
+       $(MSGFMT) -o $@ $<
+
+.po.gmo:
+       file=`echo $* | sed 's,.*/,,'`.gmo \
+         && rm -f $$file && $(GMSGFMT) -o $$file $<
+
+.po.cat:
+       sed -f ../intl/po2msg.sed < $< > $*.msg \
+         && rm -f $@ && $(GENCAT) $@ $*.msg
+
+
+all: all-@USE_NLS@
+
+all-yes: $(CATALOGS)
+all-no:
+
+$(GETTEXT_PACKAGE).pot: $(POTFILES)
+       $(GENPOT)
+
+install: install-exec install-data
+install-exec:
+install-data: install-data-@USE_NLS@
+install-data-no: all
+install-data-yes: all
+       if test -n "$(MKINSTALLDIRS)"; then \
+         $(MKINSTALLDIRS) $(DESTDIR)$(datadir); \
+       else \
+         $(SHELL) $(top_srcdir)/mkinstalldirs $(DESTDIR)$(datadir); \
+       fi
+       @catalogs='$(CATALOGS)'; \
+       for cat in $$catalogs; do \
+         cat=`basename $$cat`; \
+         case "$$cat" in \
+           *.gmo) destdir=$(gnulocaledir);; \
+           *)     destdir=$(localedir);; \
+         esac; \
+         lang=`echo $$cat | sed 's/\$(CATOBJEXT)$$//'`; \
+         dir=$(DESTDIR)$$destdir/$$lang/LC_MESSAGES; \
+         if test -n "$(MKINSTALLDIRS)"; then \
+           $(MKINSTALLDIRS) $$dir; \
+         else \
+           $(SHELL) $(top_srcdir)/mkinstalldirs $$dir; \
+         fi; \
+         if test -r $$cat; then \
+           $(INSTALL_DATA) $$cat $$dir/$(GETTEXT_PACKAGE)$(INSTOBJEXT); \
+           echo "installing $$cat as $$dir/$(GETTEXT_PACKAGE)$(INSTOBJEXT)"; \
+         else \
+           $(INSTALL_DATA) $(srcdir)/$$cat $$dir/$(GETTEXT_PACKAGE)$(INSTOBJEXT); \
+           echo "installing $(srcdir)/$$cat as" \
+                "$$dir/$(GETTEXT_PACKAGE)$(INSTOBJEXT)"; \
+         fi; \
+         if test -r $$cat.m; then \
+           $(INSTALL_DATA) $$cat.m $$dir/$(GETTEXT_PACKAGE)$(INSTOBJEXT).m; \
+           echo "installing $$cat.m as $$dir/$(GETTEXT_PACKAGE)$(INSTOBJEXT).m"; \
+         else \
+           if test -r $(srcdir)/$$cat.m ; then \
+             $(INSTALL_DATA) $(srcdir)/$$cat.m \
+               $$dir/$(GETTEXT_PACKAGE)$(INSTOBJEXT).m; \
+             echo "installing $(srcdir)/$$cat as" \
+                  "$$dir/$(GETTEXT_PACKAGE)$(INSTOBJEXT).m"; \
+           else \
+             true; \
+           fi; \
+         fi; \
+       done
+       if test "$(PACKAGE)" = "glib"; then \
+         if test -n "$(MKINSTALLDIRS)"; then \
+           $(MKINSTALLDIRS) $(DESTDIR)$(gettextsrcdir); \
+         else \
+           $(SHELL) $(top_srcdir)/mkinstalldirs $(DESTDIR)$(gettextsrcdir); \
+         fi; \
+         $(INSTALL_DATA) $(srcdir)/Makefile.in.in \
+                         $(DESTDIR)$(gettextsrcdir)/Makefile.in.in; \
+       else \
+         : ; \
+       fi
+
+# Define this as empty until I found a useful application.
+installcheck:
+
+uninstall:
+       catalogs='$(CATALOGS)'; \
+       for cat in $$catalogs; do \
+         cat=`basename $$cat`; \
+         lang=`echo $$cat | sed 's/\$(CATOBJEXT)$$//'`; \
+         rm -f $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$(GETTEXT_PACKAGE)$(INSTOBJEXT); \
+         rm -f $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$(GETTEXT_PACKAGE)$(INSTOBJEXT).m; \
+         rm -f $(DESTDIR)$(gnulocaledir)/$$lang/LC_MESSAGES/$(GETTEXT_PACKAGE)$(INSTOBJEXT); \
+         rm -f $(DESTDIR)$(gnulocaledir)/$$lang/LC_MESSAGES/$(GETTEXT_PACKAGE)$(INSTOBJEXT).m; \
+       done
+       if test "$(PACKAGE)" = "glib"; then \
+         rm -f $(DESTDIR)$(gettextsrcdir)/Makefile.in.in; \
+       fi
+
+check: all
+
+dvi info tags TAGS ID:
+
+mostlyclean:
+       rm -f core core.* *.pox $(GETTEXT_PACKAGE).pot *.old.po cat-id-tbl.tmp
+       rm -fr *.o
+       rm -f .intltool-merge-cache
+
+clean: mostlyclean
+
+distclean: clean
+       rm -f Makefile Makefile.in POTFILES *.mo *.msg *.cat *.cat.m
+
+maintainer-clean: distclean
+       @echo "This command is intended for maintainers to use;"
+       @echo "it deletes files that may require special tools to rebuild."
+       rm -f $(GMOFILES)
+
+distdir = ../$(GETTEXT_PACKAGE)-$(VERSION)/$(subdir)
+dist distdir: $(DISTFILES) $(GETTEXT_PACKAGE).pot
+       dists="$(DISTFILES)"; \
+       for file in $$dists; do \
+         ln $(srcdir)/$$file $(distdir) 2> /dev/null \
+           || cp -p $(srcdir)/$$file $(distdir); \
+       done
+
+update-po: Makefile
+       $(MAKE) $(GETTEXT_PACKAGE).pot
+       tmpdir=`pwd`; \
+       catalogs='$(CATALOGS)'; \
+       for cat in $$catalogs; do \
+         cat=`basename $$cat`; \
+         lang=`echo $$cat | sed 's/\$(CATOBJEXT)$$//'`; \
+         echo "$$lang:"; \
+         result="`$(MSGMERGE) -o $$tmpdir/$$lang.new.po $$lang`"; \
+         if $$result; then \
+           if cmp $(srcdir)/$$lang.po $$tmpdir/$$lang.new.po >/dev/null 2>&1; then \
+             rm -f $$tmpdir/$$lang.new.po; \
+            else \
+             if mv -f $$tmpdir/$$lang.new.po $$lang.po; then \
+               :; \
+             else \
+               echo "msgmerge for $$lang.po failed: cannot move $$tmpdir/$$lang.new.po to $$lang.po" 1>&2; \
+               rm -f $$tmpdir/$$lang.new.po; \
+               exit 1; \
+             fi; \
+           fi; \
+         else \
+           echo "msgmerge for $$cat failed!"; \
+           rm -f $$tmpdir/$$lang.new.po; \
+         fi; \
+       done
+
+# POTFILES is created from POTFILES.in by stripping comments, empty lines
+# and Intltool tags (enclosed in square brackets), and appending a full
+# relative path to them
+POTFILES: POTFILES.in
+       ( if test 'x$(srcdir)' != 'x.'; then \
+           posrcprefix='$(top_srcdir)/'; \
+         else \
+           posrcprefix="../"; \
+         fi; \
+         rm -f $@-t $@ \
+           && (sed -e '/^#/d'                                          \
+                   -e "s/^\[.*\] +//"                                  \
+                   -e '/^[     ]*$$/d'                                 \
+                   -e "s@.*@   $$posrcprefix& \\\\@" < $(srcdir)/$@.in \
+               | sed -e '$$s/\\$$//') > $@-t \
+           && chmod a-w $@-t \
+           && mv $@-t $@ )
+
+Makefile: Makefile.in.in ../config.status POTFILES
+       cd .. \
+         && CONFIG_FILES=$(subdir)/$@.in CONFIG_HEADERS= \
+              $(SHELL) ./config.status
+
+# Tell versions [3.59,3.63) of GNU make not to export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/po/POTFILES.in b/po/POTFILES.in
new file mode 100755 (executable)
index 0000000..3314b74
--- /dev/null
@@ -0,0 +1,4 @@
+src/efl_ise_setup.cpp
+src/languagesetting.cpp
+src/include/languagesetting.h
+src/include/isedata.h
diff --git a/po/de_DE.po b/po/de_DE.po
new file mode 100755 (executable)
index 0000000..df067d5
--- /dev/null
@@ -0,0 +1,45 @@
+msgid "IDS_IME_OPT_LANG_DUTCH"
+msgstr "Nederlands"
+
+msgid "IDS_IME_OPT_LANG_ENGLISH"
+msgstr "English"
+
+msgid "IDS_IME_OPT_LANG_FRENCH"
+msgstr "Français"
+
+msgid "IDS_IME_OPT_LANG_GERMAN"
+msgstr "Deutsch"
+
+msgid "IDS_IME_OPT_LANG_GREEK"
+msgstr "Ελληνικά"
+
+msgid "IDS_IME_OPT_LANG_RUSSIAN"
+msgstr "Русский"
+
+msgid "IDS_IME_OPT_LANG_SPANISH"
+msgstr "Español"
+
+msgid "IDS_IME_OPT_LANG_TURKISH"
+msgstr "Türkçe"
+
+msgid "IDS_IME_POP_LANG_ITALIAN"
+msgstr "Italiano"
+
+msgid "IDS_IME_POP_LANG_PORTUGUESE"
+msgstr "Português"
+
+msgid "IDS_IME_BODY_YOU_MUST_SELECT_AT_LEAST_ONE_LANGUAGE_IN_KEYBOARD_SETTINGS"
+msgstr "Sie müssen in den Tastatureinstellungen mindestens eine Sprache auswählen."
+
+msgid "IDS_IME_BODY_HARDWARE_KEYBOARD"
+msgstr "Hardwaretastatur"
+
+msgid "IDS_IME_BODY_KEYBOARD_LANGUAGES"
+msgstr "Tastatursprachen"
+
+msgid "IDS_IME_BODY_KEYBOARD_SETTINGS"
+msgstr "Tastatur-Einstellungen"
+
+msgid "IDS_IME_BODY_SOFTWARE_KEYBOARD"
+msgstr "Softwaretastatur"
+
diff --git a/po/el_GR.po b/po/el_GR.po
new file mode 100755 (executable)
index 0000000..dc7f535
--- /dev/null
@@ -0,0 +1,45 @@
+msgid "IDS_IME_OPT_LANG_DUTCH"
+msgstr "Nederlands"
+
+msgid "IDS_IME_OPT_LANG_ENGLISH"
+msgstr "English"
+
+msgid "IDS_IME_OPT_LANG_FRENCH"
+msgstr "Français"
+
+msgid "IDS_IME_OPT_LANG_GERMAN"
+msgstr "Deutsch"
+
+msgid "IDS_IME_OPT_LANG_GREEK"
+msgstr "Ελληνικά"
+
+msgid "IDS_IME_OPT_LANG_RUSSIAN"
+msgstr "Русский"
+
+msgid "IDS_IME_OPT_LANG_SPANISH"
+msgstr "Español"
+
+msgid "IDS_IME_OPT_LANG_TURKISH"
+msgstr "Türkçe"
+
+msgid "IDS_IME_POP_LANG_ITALIAN"
+msgstr "Italiano"
+
+msgid "IDS_IME_POP_LANG_PORTUGUESE"
+msgstr "Português"
+
+msgid "IDS_IME_BODY_YOU_MUST_SELECT_AT_LEAST_ONE_LANGUAGE_IN_KEYBOARD_SETTINGS"
+msgstr "Πρέπει να κάνετε τουλάχιστον μία γλώσσα στις ρυθμίσεις πληκτρολογίου"
+
+msgid "IDS_IME_BODY_HARDWARE_KEYBOARD"
+msgstr "Πληκτρολόγιο υλικού"
+
+msgid "IDS_IME_BODY_KEYBOARD_LANGUAGES"
+msgstr "Γλώσσες πληκτρολογίου"
+
+msgid "IDS_IME_BODY_KEYBOARD_SETTINGS"
+msgstr "Ρυθμίσεις πληκτρολογίου"
+
+msgid "IDS_IME_BODY_SOFTWARE_KEYBOARD"
+msgstr "Πληκτρολόγιο οθόνης"
+
diff --git a/po/en.po b/po/en.po
new file mode 100755 (executable)
index 0000000..653f498
--- /dev/null
+++ b/po/en.po
@@ -0,0 +1,45 @@
+msgid "IDS_IME_OPT_LANG_DUTCH"
+msgstr "Nederlands"
+
+msgid "IDS_IME_OPT_LANG_ENGLISH"
+msgstr "English"
+
+msgid "IDS_IME_OPT_LANG_FRENCH"
+msgstr "Français"
+
+msgid "IDS_IME_OPT_LANG_GERMAN"
+msgstr "Deutsch"
+
+msgid "IDS_IME_OPT_LANG_GREEK"
+msgstr "Ελληνικά"
+
+msgid "IDS_IME_OPT_LANG_RUSSIAN"
+msgstr "Русский"
+
+msgid "IDS_IME_OPT_LANG_SPANISH"
+msgstr "Español"
+
+msgid "IDS_IME_OPT_LANG_TURKISH"
+msgstr "Türkçe"
+
+msgid "IDS_IME_POP_LANG_ITALIAN"
+msgstr "Italiano"
+
+msgid "IDS_IME_POP_LANG_PORTUGUESE"
+msgstr "Português"
+
+msgid "IDS_IME_BODY_YOU_MUST_SELECT_AT_LEAST_ONE_LANGUAGE_IN_KEYBOARD_SETTINGS"
+msgstr "You must select at least one language in keyboard settings"
+
+msgid "IDS_IME_BODY_HARDWARE_KEYBOARD"
+msgstr "Hardware keyboard"
+
+msgid "IDS_IME_BODY_KEYBOARD_LANGUAGES"
+msgstr "Keyboard languages"
+
+msgid "IDS_IME_BODY_KEYBOARD_SETTINGS"
+msgstr "Keyboard settings"
+
+msgid "IDS_IME_BODY_SOFTWARE_KEYBOARD"
+msgstr "Software keyboard"
+
diff --git a/po/es_ES.po b/po/es_ES.po
new file mode 100755 (executable)
index 0000000..c8b87a8
--- /dev/null
@@ -0,0 +1,45 @@
+msgid "IDS_IME_OPT_LANG_DUTCH"
+msgstr "Nederlands"
+
+msgid "IDS_IME_OPT_LANG_ENGLISH"
+msgstr "English"
+
+msgid "IDS_IME_OPT_LANG_FRENCH"
+msgstr "Français"
+
+msgid "IDS_IME_OPT_LANG_GERMAN"
+msgstr "Deutsch"
+
+msgid "IDS_IME_OPT_LANG_GREEK"
+msgstr "Ελληνικά"
+
+msgid "IDS_IME_OPT_LANG_RUSSIAN"
+msgstr "Русский"
+
+msgid "IDS_IME_OPT_LANG_SPANISH"
+msgstr "Español"
+
+msgid "IDS_IME_OPT_LANG_TURKISH"
+msgstr "Türkçe"
+
+msgid "IDS_IME_POP_LANG_ITALIAN"
+msgstr "Italiano"
+
+msgid "IDS_IME_POP_LANG_PORTUGUESE"
+msgstr "Português"
+
+msgid "IDS_IME_BODY_YOU_MUST_SELECT_AT_LEAST_ONE_LANGUAGE_IN_KEYBOARD_SETTINGS"
+msgstr "Debe seleccionar al menos un idioma en ajustes de teclado"
+
+msgid "IDS_IME_BODY_HARDWARE_KEYBOARD"
+msgstr "Teclado de hardware"
+
+msgid "IDS_IME_BODY_KEYBOARD_LANGUAGES"
+msgstr "Idiomas del teclado"
+
+msgid "IDS_IME_BODY_KEYBOARD_SETTINGS"
+msgstr "Configuración del teclado"
+
+msgid "IDS_IME_BODY_SOFTWARE_KEYBOARD"
+msgstr "Teclado de software"
+
diff --git a/po/fr_FR.po b/po/fr_FR.po
new file mode 100755 (executable)
index 0000000..a79b318
--- /dev/null
@@ -0,0 +1,45 @@
+msgid "IDS_IME_OPT_LANG_DUTCH"
+msgstr "Nederlands"
+
+msgid "IDS_IME_OPT_LANG_ENGLISH"
+msgstr "English"
+
+msgid "IDS_IME_OPT_LANG_FRENCH"
+msgstr "Français"
+
+msgid "IDS_IME_OPT_LANG_GERMAN"
+msgstr "Deutsch"
+
+msgid "IDS_IME_OPT_LANG_GREEK"
+msgstr "Ελληνικά"
+
+msgid "IDS_IME_OPT_LANG_RUSSIAN"
+msgstr "Русский"
+
+msgid "IDS_IME_OPT_LANG_SPANISH"
+msgstr "Español"
+
+msgid "IDS_IME_OPT_LANG_TURKISH"
+msgstr "Türkçe"
+
+msgid "IDS_IME_POP_LANG_ITALIAN"
+msgstr "Italiano"
+
+msgid "IDS_IME_POP_LANG_PORTUGUESE"
+msgstr "Português"
+
+msgid "IDS_IME_BODY_YOU_MUST_SELECT_AT_LEAST_ONE_LANGUAGE_IN_KEYBOARD_SETTINGS"
+msgstr "Vous devez sélectionner au moins une langue dans les paramètres du clavier"
+
+msgid "IDS_IME_BODY_HARDWARE_KEYBOARD"
+msgstr "Clavier matériel"
+
+msgid "IDS_IME_BODY_KEYBOARD_LANGUAGES"
+msgstr "Langues du clavier"
+
+msgid "IDS_IME_BODY_KEYBOARD_SETTINGS"
+msgstr "Paramètres du clavier"
+
+msgid "IDS_IME_BODY_SOFTWARE_KEYBOARD"
+msgstr "Clavier logiciel"
+
diff --git a/po/it_IT.po b/po/it_IT.po
new file mode 100755 (executable)
index 0000000..144ea01
--- /dev/null
@@ -0,0 +1,45 @@
+msgid "IDS_IME_OPT_LANG_DUTCH"
+msgstr "Nederlands"
+
+msgid "IDS_IME_OPT_LANG_ENGLISH"
+msgstr "English"
+
+msgid "IDS_IME_OPT_LANG_FRENCH"
+msgstr "Français"
+
+msgid "IDS_IME_OPT_LANG_GERMAN"
+msgstr "Deutsch"
+
+msgid "IDS_IME_OPT_LANG_GREEK"
+msgstr "Ελληνικά"
+
+msgid "IDS_IME_OPT_LANG_RUSSIAN"
+msgstr "Русский"
+
+msgid "IDS_IME_OPT_LANG_SPANISH"
+msgstr "Español"
+
+msgid "IDS_IME_OPT_LANG_TURKISH"
+msgstr "Türkçe"
+
+msgid "IDS_IME_POP_LANG_ITALIAN"
+msgstr "Italiano"
+
+msgid "IDS_IME_POP_LANG_PORTUGUESE"
+msgstr "Português"
+
+msgid "IDS_IME_BODY_YOU_MUST_SELECT_AT_LEAST_ONE_LANGUAGE_IN_KEYBOARD_SETTINGS"
+msgstr "È necessario selezionare almeno una lingua nelle impostazioni della tastiera"
+
+msgid "IDS_IME_BODY_HARDWARE_KEYBOARD"
+msgstr "Tastiera hardware"
+
+msgid "IDS_IME_BODY_KEYBOARD_LANGUAGES"
+msgstr "Lingue tastiera"
+
+msgid "IDS_IME_BODY_KEYBOARD_SETTINGS"
+msgstr "Impostazioni tastiera"
+
+msgid "IDS_IME_BODY_SOFTWARE_KEYBOARD"
+msgstr "Tastiera su schermo"
+
diff --git a/po/ja_JP.po b/po/ja_JP.po
new file mode 100755 (executable)
index 0000000..3fd64e3
--- /dev/null
@@ -0,0 +1,45 @@
+msgid "IDS_IME_OPT_LANG_DUTCH"
+msgstr "Nederlands"
+
+msgid "IDS_IME_OPT_LANG_ENGLISH"
+msgstr "English"
+
+msgid "IDS_IME_OPT_LANG_FRENCH"
+msgstr "Français"
+
+msgid "IDS_IME_OPT_LANG_GERMAN"
+msgstr "Deutsch"
+
+msgid "IDS_IME_OPT_LANG_GREEK"
+msgstr "Ελληνικά"
+
+msgid "IDS_IME_OPT_LANG_RUSSIAN"
+msgstr "Русский"
+
+msgid "IDS_IME_OPT_LANG_SPANISH"
+msgstr "Español"
+
+msgid "IDS_IME_OPT_LANG_TURKISH"
+msgstr "Türkçe"
+
+msgid "IDS_IME_POP_LANG_ITALIAN"
+msgstr "Italiano"
+
+msgid "IDS_IME_POP_LANG_PORTUGUESE"
+msgstr "Português"
+
+msgid "IDS_IME_BODY_YOU_MUST_SELECT_AT_LEAST_ONE_LANGUAGE_IN_KEYBOARD_SETTINGS"
+msgstr "キーボード設定では、少なくとも1言語を選択する必要があります。"
+
+msgid "IDS_IME_BODY_HARDWARE_KEYBOARD"
+msgstr "ハードウェアキーボード"
+
+msgid "IDS_IME_BODY_KEYBOARD_LANGUAGES"
+msgstr "キーボード言語"
+
+msgid "IDS_IME_BODY_KEYBOARD_SETTINGS"
+msgstr "キーボード​設定"
+
+msgid "IDS_IME_BODY_SOFTWARE_KEYBOARD"
+msgstr "ソフトウェアキーボード"
+
diff --git a/po/ko_KR.po b/po/ko_KR.po
new file mode 100755 (executable)
index 0000000..02ee521
--- /dev/null
@@ -0,0 +1,45 @@
+msgid "IDS_IME_OPT_LANG_DUTCH"
+msgstr "Nederlands"
+
+msgid "IDS_IME_OPT_LANG_ENGLISH"
+msgstr "English"
+
+msgid "IDS_IME_OPT_LANG_FRENCH"
+msgstr "Français"
+
+msgid "IDS_IME_OPT_LANG_GERMAN"
+msgstr "Deutsch"
+
+msgid "IDS_IME_OPT_LANG_GREEK"
+msgstr "Ελληνικά"
+
+msgid "IDS_IME_OPT_LANG_RUSSIAN"
+msgstr "Русский"
+
+msgid "IDS_IME_OPT_LANG_SPANISH"
+msgstr "Español"
+
+msgid "IDS_IME_OPT_LANG_TURKISH"
+msgstr "Türkçe"
+
+msgid "IDS_IME_POP_LANG_ITALIAN"
+msgstr "Italiano"
+
+msgid "IDS_IME_POP_LANG_PORTUGUESE"
+msgstr "Português"
+
+msgid "IDS_IME_BODY_YOU_MUST_SELECT_AT_LEAST_ONE_LANGUAGE_IN_KEYBOARD_SETTINGS"
+msgstr "키보드 설정에서 하나 이상의 언어를 선택해야 합니다"
+
+msgid "IDS_IME_BODY_HARDWARE_KEYBOARD"
+msgstr "하드웨어 키보드"
+
+msgid "IDS_IME_BODY_KEYBOARD_LANGUAGES"
+msgstr "키보드 언어"
+
+msgid "IDS_IME_BODY_KEYBOARD_SETTINGS"
+msgstr "키보드 설정"
+
+msgid "IDS_IME_BODY_SOFTWARE_KEYBOARD"
+msgstr "소프트웨어 키보드"
+
diff --git a/po/nl_NL.po b/po/nl_NL.po
new file mode 100755 (executable)
index 0000000..b533770
--- /dev/null
@@ -0,0 +1,45 @@
+msgid "IDS_IME_OPT_LANG_DUTCH"
+msgstr "Nederlands"
+
+msgid "IDS_IME_OPT_LANG_ENGLISH"
+msgstr "English"
+
+msgid "IDS_IME_OPT_LANG_FRENCH"
+msgstr "Français"
+
+msgid "IDS_IME_OPT_LANG_GERMAN"
+msgstr "Deutsch"
+
+msgid "IDS_IME_OPT_LANG_GREEK"
+msgstr "Ελληνικά"
+
+msgid "IDS_IME_OPT_LANG_RUSSIAN"
+msgstr "Русский"
+
+msgid "IDS_IME_OPT_LANG_SPANISH"
+msgstr "Español"
+
+msgid "IDS_IME_OPT_LANG_TURKISH"
+msgstr "Türkçe"
+
+msgid "IDS_IME_POP_LANG_ITALIAN"
+msgstr "Italiano"
+
+msgid "IDS_IME_POP_LANG_PORTUGUESE"
+msgstr "Portugees"
+
+msgid "IDS_IME_BODY_YOU_MUST_SELECT_AT_LEAST_ONE_LANGUAGE_IN_KEYBOARD_SETTINGS"
+msgstr "Selecteer ten minste één taal in de toetsenbordinstellingen"
+
+msgid "IDS_IME_BODY_HARDWARE_KEYBOARD"
+msgstr "Hardwaretoetsenbord"
+
+msgid "IDS_IME_BODY_KEYBOARD_LANGUAGES"
+msgstr "Toetsenbordtalen"
+
+msgid "IDS_IME_BODY_KEYBOARD_SETTINGS"
+msgstr "Toetsenbordinstellingen"
+
+msgid "IDS_IME_BODY_SOFTWARE_KEYBOARD"
+msgstr "Softwaretoetsenbord"
+
diff --git a/po/pt_PT.po b/po/pt_PT.po
new file mode 100755 (executable)
index 0000000..8beb384
--- /dev/null
@@ -0,0 +1,45 @@
+msgid "IDS_IME_OPT_LANG_DUTCH"
+msgstr "Nederlands"
+
+msgid "IDS_IME_OPT_LANG_ENGLISH"
+msgstr "English"
+
+msgid "IDS_IME_OPT_LANG_FRENCH"
+msgstr "Français"
+
+msgid "IDS_IME_OPT_LANG_GERMAN"
+msgstr "Deutsch"
+
+msgid "IDS_IME_OPT_LANG_GREEK"
+msgstr "Ελληνικά"
+
+msgid "IDS_IME_OPT_LANG_RUSSIAN"
+msgstr "Русский"
+
+msgid "IDS_IME_OPT_LANG_SPANISH"
+msgstr "Español"
+
+msgid "IDS_IME_OPT_LANG_TURKISH"
+msgstr "Türkçe"
+
+msgid "IDS_IME_POP_LANG_ITALIAN"
+msgstr "Italiano"
+
+msgid "IDS_IME_POP_LANG_PORTUGUESE"
+msgstr "Português"
+
+msgid "IDS_IME_BODY_YOU_MUST_SELECT_AT_LEAST_ONE_LANGUAGE_IN_KEYBOARD_SETTINGS"
+msgstr "Ao menos um idioma deve ser selecionado nas configurações do teclado"
+
+msgid "IDS_IME_BODY_HARDWARE_KEYBOARD"
+msgstr "Teclado físico"
+
+msgid "IDS_IME_BODY_KEYBOARD_LANGUAGES"
+msgstr "Idiomas do teclado"
+
+msgid "IDS_IME_BODY_KEYBOARD_SETTINGS"
+msgstr "Definições do teclado"
+
+msgid "IDS_IME_BODY_SOFTWARE_KEYBOARD"
+msgstr "Teclado virtual"
+
diff --git a/po/ru_RU.po b/po/ru_RU.po
new file mode 100755 (executable)
index 0000000..2f700cd
--- /dev/null
@@ -0,0 +1,45 @@
+msgid "IDS_IME_OPT_LANG_DUTCH"
+msgstr "Nederlands"
+
+msgid "IDS_IME_OPT_LANG_ENGLISH"
+msgstr "English"
+
+msgid "IDS_IME_OPT_LANG_FRENCH"
+msgstr "Français"
+
+msgid "IDS_IME_OPT_LANG_GERMAN"
+msgstr "Deutsch"
+
+msgid "IDS_IME_OPT_LANG_GREEK"
+msgstr "Ελληνικά"
+
+msgid "IDS_IME_OPT_LANG_RUSSIAN"
+msgstr "Русский"
+
+msgid "IDS_IME_OPT_LANG_SPANISH"
+msgstr "Español"
+
+msgid "IDS_IME_OPT_LANG_TURKISH"
+msgstr "Türkçe"
+
+msgid "IDS_IME_POP_LANG_ITALIAN"
+msgstr "Italiano"
+
+msgid "IDS_IME_POP_LANG_PORTUGUESE"
+msgstr "Português"
+
+msgid "IDS_IME_BODY_YOU_MUST_SELECT_AT_LEAST_ONE_LANGUAGE_IN_KEYBOARD_SETTINGS"
+msgstr "Выберите хотя бы один язык в параметрах клавиатуры"
+
+msgid "IDS_IME_BODY_HARDWARE_KEYBOARD"
+msgstr "Физическая клавиатура"
+
+msgid "IDS_IME_BODY_KEYBOARD_LANGUAGES"
+msgstr "Языки клавиатуры"
+
+msgid "IDS_IME_BODY_KEYBOARD_SETTINGS"
+msgstr "Параметры клавиатуры"
+
+msgid "IDS_IME_BODY_SOFTWARE_KEYBOARD"
+msgstr "Программная клавиатура"
+
diff --git a/po/tr_TR.po b/po/tr_TR.po
new file mode 100755 (executable)
index 0000000..ad0fc78
--- /dev/null
@@ -0,0 +1,45 @@
+msgid "IDS_IME_OPT_LANG_DUTCH"
+msgstr "Nederlands"
+
+msgid "IDS_IME_OPT_LANG_ENGLISH"
+msgstr "English"
+
+msgid "IDS_IME_OPT_LANG_FRENCH"
+msgstr "Français"
+
+msgid "IDS_IME_OPT_LANG_GERMAN"
+msgstr "Deutsch"
+
+msgid "IDS_IME_OPT_LANG_GREEK"
+msgstr "Ελληνικά"
+
+msgid "IDS_IME_OPT_LANG_RUSSIAN"
+msgstr "Русский"
+
+msgid "IDS_IME_OPT_LANG_SPANISH"
+msgstr "Español"
+
+msgid "IDS_IME_OPT_LANG_TURKISH"
+msgstr "Türkçe"
+
+msgid "IDS_IME_POP_LANG_ITALIAN"
+msgstr "Italiano"
+
+msgid "IDS_IME_POP_LANG_PORTUGUESE"
+msgstr "Português"
+
+msgid "IDS_IME_BODY_YOU_MUST_SELECT_AT_LEAST_ONE_LANGUAGE_IN_KEYBOARD_SETTINGS"
+msgstr "Klavye ayarlarında en az bir dil seçmelisiniz"
+
+msgid "IDS_IME_BODY_HARDWARE_KEYBOARD"
+msgstr "Donanım klavyesi"
+
+msgid "IDS_IME_BODY_KEYBOARD_LANGUAGES"
+msgstr "Klavye dilleri"
+
+msgid "IDS_IME_BODY_KEYBOARD_SETTINGS"
+msgstr "Klavye ayarları"
+
+msgid "IDS_IME_BODY_SOFTWARE_KEYBOARD"
+msgstr "Yazılım klavyesi"
+
diff --git a/po/update-po.sh b/po/update-po.sh
new file mode 100755 (executable)
index 0000000..273d9f2
--- /dev/null
@@ -0,0 +1,57 @@
+#!/bin/sh
+
+PACKAGE=ise-european
+SRCROOT=..
+POTFILES=POTFILES.in
+
+#ALL_LINGUAS= am az be ca cs da de el en_CA en_GB es et fi fr hr hu it ja ko lv mk ml ms nb ne nl pa pl pt pt_BR ru rw sk sl sr sr@Latn sv ta tr uk vi zh_CN zh_TW
+ALL_LINGUAS="ko_KR en zh_CN zh_HK zh_TW de_DE nl_NL es_ES pt_PT el_GR it_IT fr_FR tr_TR ja_JP ru_RU"
+
+XGETTEXT=/usr/bin/xgettext
+MSGMERGE=/usr/bin/msgmerge
+
+echo -n "Make ${PACKAGE}.pot  "
+if [ ! -e $POTFILES ] ; then
+       echo "$POTFILES not found"
+       exit 1
+fi
+
+$XGETTEXT --default-domain=${PACKAGE} --directory=${SRCROOT} \
+               --add-comments --keyword=_ --keyword=N_ --files-from=$POTFILES \
+&& test ! -f ${PACKAGE}.po \
+       || (rm -f ${PACKAGE}.pot && mv ${PACKAGE}.po ${PACKAGE}.pot)
+
+if [ $? -ne 0 ]; then
+       echo "error"
+       exit 1
+else
+       echo "done"
+fi
+
+for LANG in $ALL_LINGUAS; do 
+       echo "$LANG : "
+
+       if [ ! -e $LANG.po ] ; then
+               cp ${PACKAGE}.pot ${LANG}.po
+               echo "${LANG}.po created"
+       else
+               if $MSGMERGE ${LANG}.po ${PACKAGE}.pot -o ${LANG}.new.po ; then
+                       if cmp ${LANG}.po ${LANG}.new.po > /dev/null 2>&1; then
+                               rm -f ${LANG}.new.po
+                       else
+                               if mv -f ${LANG}.new.po ${LANG}.po; then
+                                       echo "" 
+                               else
+                                       echo "msgmerge for $LANG.po failed: cannot move $LANG.new.po to $LANG.po" 1>&2
+                                       rm -f ${LANG}.new.po
+                                       exit 1
+                               fi
+                       fi
+               else
+                       echo "msgmerge for $LANG failed!"
+                       rm -f ${LANG}.new.po
+               fi
+       fi
+       echo ""
+done
+
diff --git a/po/zh_CN.po b/po/zh_CN.po
new file mode 100755 (executable)
index 0000000..2943b3d
--- /dev/null
@@ -0,0 +1,45 @@
+msgid "IDS_IME_OPT_LANG_DUTCH"
+msgstr "Nederlands"
+
+msgid "IDS_IME_OPT_LANG_ENGLISH"
+msgstr "English"
+
+msgid "IDS_IME_OPT_LANG_FRENCH"
+msgstr "Français"
+
+msgid "IDS_IME_OPT_LANG_GERMAN"
+msgstr "Deutsch"
+
+msgid "IDS_IME_OPT_LANG_GREEK"
+msgstr "Ελληνικά"
+
+msgid "IDS_IME_OPT_LANG_RUSSIAN"
+msgstr "Русский"
+
+msgid "IDS_IME_OPT_LANG_SPANISH"
+msgstr "Español"
+
+msgid "IDS_IME_OPT_LANG_TURKISH"
+msgstr "Türkçe"
+
+msgid "IDS_IME_POP_LANG_ITALIAN"
+msgstr "Italiano"
+
+msgid "IDS_IME_POP_LANG_PORTUGUESE"
+msgstr "Português"
+
+msgid "IDS_IME_BODY_YOU_MUST_SELECT_AT_LEAST_ONE_LANGUAGE_IN_KEYBOARD_SETTINGS"
+msgstr "您必须在键盘设置中选择至少一种语言"
+
+msgid "IDS_IME_BODY_HARDWARE_KEYBOARD"
+msgstr "硬件键盘"
+
+msgid "IDS_IME_BODY_KEYBOARD_LANGUAGES"
+msgstr "键盘语言"
+
+msgid "IDS_IME_BODY_KEYBOARD_SETTINGS"
+msgstr "键盘设置"
+
+msgid "IDS_IME_BODY_SOFTWARE_KEYBOARD"
+msgstr "软件键盘"
+
diff --git a/po/zh_HK.po b/po/zh_HK.po
new file mode 100755 (executable)
index 0000000..5e3dc62
--- /dev/null
@@ -0,0 +1,45 @@
+msgid "IDS_IME_OPT_LANG_DUTCH"
+msgstr "Nederlands"
+
+msgid "IDS_IME_OPT_LANG_ENGLISH"
+msgstr "English"
+
+msgid "IDS_IME_OPT_LANG_FRENCH"
+msgstr "Français"
+
+msgid "IDS_IME_OPT_LANG_GERMAN"
+msgstr "Deutsch"
+
+msgid "IDS_IME_OPT_LANG_GREEK"
+msgstr "Ελληνικά"
+
+msgid "IDS_IME_OPT_LANG_RUSSIAN"
+msgstr "Русский"
+
+msgid "IDS_IME_OPT_LANG_SPANISH"
+msgstr "Español"
+
+msgid "IDS_IME_OPT_LANG_TURKISH"
+msgstr "Türkçe"
+
+msgid "IDS_IME_POP_LANG_ITALIAN"
+msgstr "Italiano"
+
+msgid "IDS_IME_POP_LANG_PORTUGUESE"
+msgstr "Português"
+
+msgid "IDS_IME_BODY_YOU_MUST_SELECT_AT_LEAST_ONE_LANGUAGE_IN_KEYBOARD_SETTINGS"
+msgstr "您必須於鍵盤設定中選擇至少一種語言"
+
+msgid "IDS_IME_BODY_HARDWARE_KEYBOARD"
+msgstr "硬體鍵盤"
+
+msgid "IDS_IME_BODY_KEYBOARD_LANGUAGES"
+msgstr "鍵盤語言"
+
+msgid "IDS_IME_BODY_KEYBOARD_SETTINGS"
+msgstr "鍵盤設定"
+
+msgid "IDS_IME_BODY_SOFTWARE_KEYBOARD"
+msgstr "虛擬鍵盤"
+
diff --git a/po/zh_TW.po b/po/zh_TW.po
new file mode 100755 (executable)
index 0000000..b7c6d28
--- /dev/null
@@ -0,0 +1,45 @@
+msgid "IDS_IME_OPT_LANG_DUTCH"
+msgstr "Nederlands"
+
+msgid "IDS_IME_OPT_LANG_ENGLISH"
+msgstr "English"
+
+msgid "IDS_IME_OPT_LANG_FRENCH"
+msgstr "Français"
+
+msgid "IDS_IME_OPT_LANG_GERMAN"
+msgstr "Deutsch"
+
+msgid "IDS_IME_OPT_LANG_GREEK"
+msgstr "Ελληνικά"
+
+msgid "IDS_IME_OPT_LANG_RUSSIAN"
+msgstr "Русский"
+
+msgid "IDS_IME_OPT_LANG_SPANISH"
+msgstr "Español"
+
+msgid "IDS_IME_OPT_LANG_TURKISH"
+msgstr "Türkçe"
+
+msgid "IDS_IME_POP_LANG_ITALIAN"
+msgstr "Italiano"
+
+msgid "IDS_IME_POP_LANG_PORTUGUESE"
+msgstr "Português"
+
+msgid "IDS_IME_BODY_YOU_MUST_SELECT_AT_LEAST_ONE_LANGUAGE_IN_KEYBOARD_SETTINGS"
+msgstr "您必須於鍵盤設定中選擇至少一種語言"
+
+msgid "IDS_IME_BODY_HARDWARE_KEYBOARD"
+msgstr "硬體鍵盤"
+
+msgid "IDS_IME_BODY_KEYBOARD_LANGUAGES"
+msgstr "鍵盤語言"
+
+msgid "IDS_IME_BODY_KEYBOARD_SETTINGS"
+msgstr "鍵盤設定"
+
+msgid "IDS_IME_BODY_SOFTWARE_KEYBOARD"
+msgstr "螢幕小鍵盤"
+
diff --git a/res/mcfresource-emoticon-popup.h b/res/mcfresource-emoticon-popup.h
new file mode 100755 (executable)
index 0000000..10dab50
--- /dev/null
@@ -0,0 +1,193 @@
+/*
+ * Copyright 2012  Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.tizenopensource.org/license
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+\r
+/* KEYSET FOR POPUPS */\r
+\r
+#ifdef KEY_CONFIGURE_PHASE\r
+/* KEYSET_EMOTICON_POPUP */\r
+{\r
+\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED}},\r
+\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED}},\r
+\r
+       {NOT_USED,}\r
+}\r
+#endif\r
+\r
+#ifdef KEY_PROPERTIES_PHASE\r
+\r
+{\r
+\r
+       /* fValid, labelCnt, label, labelPropId, imgPath, keyValueCnt, keyValue, keyEvent, longKeyValue, longKeyEvent, userLabel,  userKeyValue,  userKeyEvent, */\r
+       {\r
+               USED, /* 1x1 */\r
+               1,\r
+               _Label_ {{":-["}, {":-["}, {":-["}},\r
+               LABEL_PROPERTIES_PUNTUATION_BUTTON_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}},\r
+               1,\r
+               _KeyVal_ {{":-["}, {":-["}, {":-["}},\r
+               _KeyEvt_ {{0}, {0}, {0}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 1x2 */\r
+               1,\r
+               _Label_ {{"o:-)"}, {"o:-)"}, {"o:-)"}},\r
+               LABEL_PROPERTIES_PUNTUATION_BUTTON_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}},\r
+               1,\r
+               _KeyVal_ {{"o:-)"}, {"o:-)"}, {"o:-)"}},\r
+               _KeyEvt_ {{0}, {0}, {0}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 1x3 */\r
+               1,\r
+               _Label_ {{":-\\"}, {":-\\"}, {":-\\"}},\r
+               LABEL_PROPERTIES_PUNTUATION_BUTTON_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}},\r
+               1,\r
+               _KeyVal_ {{":-\\"}, {":-\\"}, {":-\\"}},\r
+               _KeyEvt_ {{0}, {0}, {0}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 1x4 */\r
+               1,\r
+               _Label_ {{":'("}, {":'("}, {":'("}},\r
+               LABEL_PROPERTIES_PUNTUATION_BUTTON_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}},\r
+               1,\r
+               _KeyVal_ {{":'("}, {":'("}, {":'("}},\r
+               _KeyEvt_ {{0}, {0}, {0}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+\r
+       {\r
+               USED, /* 1x5 */\r
+               1,\r
+               _Label_ {{":-D"}, {":-D"}, {":-D"}},\r
+               LABEL_PROPERTIES_PUNTUATION_BUTTON_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}},\r
+               1,\r
+               _KeyVal_ {{":-D"}, {":-D"}, {":-D"}},\r
+               _KeyEvt_ {{0}, {0}, {0}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 2x1 */\r
+               1,\r
+               _Label_ {{":-)"}, {":-)"}, {":-)"}},\r
+               LABEL_PROPERTIES_PUNTUATION_BUTTON_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}},\r
+               1,\r
+               _KeyVal_ {{":-)"}, {":-)"}, {":-)"}},\r
+               _KeyEvt_ {{0}, {0}, {0}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+\r
+       {\r
+               USED, /* 2x2 */\r
+               1,\r
+               _Label_ {{";-)"}, {";-)"}, {";-)"}},\r
+               LABEL_PROPERTIES_PUNTUATION_BUTTON_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}},\r
+               1,\r
+               _KeyVal_ {{";-)"}, {";-)"}, {";-)"}},\r
+               _KeyEvt_ {{0}, {0}, {0}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 2x3 */\r
+               1,\r
+               _Label_ {{":-("}, {":-("}, {":-("}},\r
+               LABEL_PROPERTIES_PUNTUATION_BUTTON_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}},\r
+               1,\r
+               _KeyVal_ {{":-("}, {":-("}, {":-("}},\r
+               _KeyEvt_ {{0}, {0}, {0}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 2x4 */\r
+               1,\r
+               _Label_ {{":-P"}, {":-P"}, {":-P"}},\r
+               LABEL_PROPERTIES_PUNTUATION_BUTTON_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}},\r
+               1,\r
+               _KeyVal_ {{":-P"}, {":-P"}, {":-P"}},\r
+               _KeyEvt_ {{0}, {0}, {0}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 2x5 */\r
+               1,\r
+               _Label_ {{":-O"}, {":-O"}, {":-O"}},\r
+               LABEL_PROPERTIES_PUNTUATION_BUTTON_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}},\r
+               1,\r
+               _KeyVal_ {{":-O"}, {":-O"}, {":-O"}},\r
+               _KeyEvt_ {{0}, {0}, {0}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+\r
+       {NOT_USED,},\r
+\r
+}\r
+#endif\r
+\r
diff --git a/res/mcfresource-popup.h b/res/mcfresource-popup.h
new file mode 100755 (executable)
index 0000000..c01c304
--- /dev/null
@@ -0,0 +1,411 @@
+/*
+ * Copyright 2012  Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.tizenopensource.org/license
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+\r
+\r
+#ifdef KEY_CONFIGURE_PHASE\r
+/* KEYSET_PUNCTUATION_POPUP */\r
+{\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CONTROL, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CONTROL, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CONTROL, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CONTROL, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+\r
+       {NOT_USED,},\r
+},\r
+\r
+/* KEYSET_URL */\r
+{\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {NOT_USED,},\r
+}\r
+\r
+#endif\r
+\r
+#ifdef KEY_PROPERTIES_PHASE\r
+\r
+/* KEYSET_PUNCTUATION_POPUP */\r
+{\r
+       /* fValid, labelCnt, label, labelPropId, imgPath, keyValueCnt, keyValue, keyEvent, longKeyValue, longKeyEvent, userLabel,  userKeyValue,  userKeyEvent, */\r
+\r
+       {\r
+               USED, /* 1x1 */\r
+               1,\r
+               _Label_ {{"."},{"."},{"."}},\r
+               LABEL_PROPERTIES_PUNTUATION_BUTTON_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}},\r
+               1,\r
+               _KeyVal_ {{"."},{"."},{"."}},\r
+               _KeyEvt_ {{0},{0},{0}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 1x1 */\r
+               1,\r
+               _Label_ {{","},{","},{","}},\r
+               LABEL_PROPERTIES_PUNTUATION_BUTTON_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}},\r
+               1,\r
+               _KeyVal_ {{","},{","},{","}},\r
+               _KeyEvt_ {{0},{0},{0}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 1x1 */\r
+               1,\r
+               _Label_ {{"?"},{"?"},{"?"}},\r
+               LABEL_PROPERTIES_PUNTUATION_BUTTON_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}},\r
+               1,\r
+               _KeyVal_ {{"?"},{"?"},{"?"}},\r
+               _KeyEvt_ {{0},{0},{0}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 1x1 */\r
+               1,\r
+               _Label_ {{"!"},{"!"},{"!"}},\r
+               LABEL_PROPERTIES_PUNTUATION_BUTTON_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}},\r
+               1,\r
+               _KeyVal_ {{"!"},{"!"},{"!"}},\r
+               _KeyEvt_ {{0},{0},{0}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 1x1 */\r
+               1,\r
+               _Label_ {{":"},{":"},{":"}},\r
+               LABEL_PROPERTIES_PUNTUATION_BUTTON_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}},\r
+               1,\r
+               _KeyVal_ {{":"},{":"},{":"}},\r
+               _KeyEvt_ {{0},{0},{0}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 1x1 */\r
+               1,\r
+               _Label_ {{"~"},{"~"},{"~"}},\r
+               LABEL_PROPERTIES_PUNTUATION_BUTTON_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}},\r
+               1,\r
+               _KeyVal_ {{"~"},{"~"},{"~"}},\r
+               _KeyEvt_ {{0},{0},{0}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+\r
+       {\r
+               USED, /* 1x1 */\r
+               1,\r
+               _Label_ {{"@"},{"@"},{"@"}},\r
+               LABEL_PROPERTIES_PUNTUATION_BUTTON_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}},\r
+               1,\r
+               _KeyVal_ {{"@"},{"@"},{"@"}},\r
+               _KeyEvt_ {{0},{0},{0}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 1x1 */\r
+               1,\r
+               _Label_ {{"/"},{"/"},{"/"}},\r
+               LABEL_PROPERTIES_PUNTUATION_BUTTON_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}},\r
+               1,\r
+               _KeyVal_ {{"/"},{"/"},{"/"}},\r
+               _KeyEvt_ {{0},{0},{0}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 1x1 */\r
+               1,\r
+               _Label_ {{"www."},{"www."},{"www."}},\r
+               LABEL_PROPERTIES_PUNTUATION_BUTTON_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}},\r
+               1,\r
+               _KeyVal_ {{"www."},{"www."},{"www."}},\r
+               _KeyEvt_ {{0},{0},{0}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 1x1 */\r
+               1,\r
+               _Label_ {{".com"},{".com"},{".com"}},\r
+               LABEL_PROPERTIES_PUNTUATION_BUTTON_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}},\r
+               1,\r
+               _KeyVal_ {{".com"},{".com"},{".com"}},\r
+               _KeyEvt_ {{0},{0},{0}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+\r
+       {\r
+               USED, /* 1x1 */\r
+               1,\r
+               _Label_ {{""},{""},{""}},\r
+               LABEL_PROPERTIES_PUNTUATION_BUTTON_TYPE,\r
+               _LabelImg_ {{"textinput_icon_arrow_left.png","textinput_icon_arrow_left.png"}, {"textinput_icon_arrow_left.png","textinput_icon_arrow_left.png"}, {"textinput_icon_arrow_left.png","textinput_icon_arrow_left.png"}},\r
+               _BGImg_ {{"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png"}},\r
+               1,\r
+               _KeyVal_ {{""},{""},{""}},\r
+               _KeyEvt_ {{MVK_KP_Left},{MVK_KP_Left},{MVK_KP_Left}},\r
+               "",\r
+               0,\r
+               TRUE,\r
+               {{""},{""},{""}},\r
+               TRUE,\r
+       },\r
+       {\r
+               USED, /* 1x1 */\r
+               1,\r
+               _Label_ {{""},{""},{""}},\r
+               LABEL_PROPERTIES_PUNTUATION_BUTTON_TYPE,\r
+               _LabelImg_ {{"textinput_icon_arrow_right.png","textinput_icon_arrow_right.png"}, {"textinput_icon_arrow_right.png","textinput_icon_arrow_right.png"}, {"textinput_icon_arrow_right.png","textinput_icon_arrow_right.png"}},\r
+               _BGImg_ {{"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png"}},\r
+               1,\r
+               _KeyVal_ {{""},{""},{""}},\r
+               _KeyEvt_ {{MVK_KP_Right},{MVK_KP_Right},{MVK_KP_Right}},\r
+               "",\r
+               0,\r
+               TRUE,\r
+               {{""},{""},{""}},\r
+               TRUE,\r
+       },\r
+       {\r
+               USED, /* 1x1 */\r
+               1,\r
+               _Label_ {{""},{""},{""}},\r
+               LABEL_PROPERTIES_PUNTUATION_BUTTON_TYPE,\r
+               _LabelImg_ {{"textinput_icon_arrow_up.png","textinput_icon_arrow_up.png"}, {"textinput_icon_arrow_up.png","textinput_icon_arrow_up.png"}, {"textinput_icon_arrow_up.png","textinput_icon_arrow_down.png"}},\r
+               _BGImg_ {{"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png"}},\r
+               1,\r
+               _KeyVal_ {{""},{""},{""}},\r
+               _KeyEvt_ {{MVK_KP_Up},{MVK_KP_Up},{MVK_KP_Up}},\r
+               "",\r
+               0,\r
+               TRUE,\r
+               {{""},{""},{""}},\r
+               TRUE,\r
+       },\r
+       {\r
+               USED, /* 1x1 */\r
+               1,\r
+               _Label_ {{""},{""},{""}},\r
+               LABEL_PROPERTIES_PUNTUATION_BUTTON_TYPE,\r
+               _LabelImg_ {{"textinput_icon_arrow_down.png","textinput_icon_arrow_down.png"}, {"textinput_icon_arrow_down.png","textinput_icon_arrow_down.png"}, {"textinput_icon_arrow_down.png","textinput_icon_arrow_down.png"}},\r
+               _BGImg_ {{"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png"}},\r
+               1,\r
+               _KeyVal_ {{""},{""},{""}},\r
+               _KeyEvt_ {{MVK_KP_Down},{MVK_KP_Down},{MVK_KP_Down}},\r
+               "",\r
+               0,\r
+               TRUE,\r
+               {{""},{""},{""}},\r
+               TRUE,\r
+       },\r
+\r
+\r
+       {\r
+               USED, /* 1x1 */\r
+               1,\r
+               _Label_ {{""},{""},{""}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ { {"",""}, {"",""}},\r
+               _BGImg_ { {NULL,NULL}, {NULL,NULL}, {NULL,NULL}},\r
+               1,\r
+               _KeyVal_ {{""},{""},{""}},\r
+               _KeyEvt_ {{0},{0},{0}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+               },\r
+               {NOT_USED,},\r
+},\r
+\r
+/* KEYSET_URL_POPUP */\r
+{\r
+       /* fValid, labelCnt, label, labelPropId, imgPath, keyValueCnt, keyValue, keyEvent, longKeyValue, longKeyEvent, userLabel,  userKeyValue,  userKeyEvent, */\r
+\r
+       {\r
+               USED, /* 1x1 */\r
+               1,\r
+               _Label_ {{".co.kr"},{".co.kr"},{".co.kr"}},\r
+               LABEL_PROPERTIES_PUNTUATION_BUTTON_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_moa_button2_nml.png","textinput_moa_button2_press.png"}, {"textinput_moa_button2_nml.png","textinput_moa_button2_press.png"}, {"textinput_moa_button2_nml.png","textinput_moa_button2_press.png"}},\r
+               1,\r
+               _KeyVal_ {{".co.kr"},{".co.kr"},{".co.kr"}},\r
+               _KeyEvt_ {{0},{0},{0}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 1x1 */\r
+               1,\r
+               _Label_ {{".or.kr"},{".or.kr"},{".or.kr"}},\r
+               LABEL_PROPERTIES_PUNTUATION_BUTTON_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_moa_button2_nml.png","textinput_moa_button2_press.png"}, {"textinput_moa_button2_nml.png","textinput_moa_button2_press.png"}, {"textinput_moa_button2_nml.png","textinput_moa_button2_press.png"}},\r
+               1,\r
+               _KeyVal_ {{".or.kr"},{".or.kr"},{".or.kr"}},\r
+               _KeyEvt_ {{0},{0},{0}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 1x1 */\r
+               1,\r
+               _Label_ {{".ac.kr"},{".ac.kr"},{".ac.kr"}},\r
+               LABEL_PROPERTIES_PUNTUATION_BUTTON_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_moa_button2_nml.png","textinput_moa_button2_press.png"}, {"textinput_moa_button2_nml.png","textinput_moa_button2_press.png"}, {"textinput_moa_button2_nml.png","textinput_moa_button2_press.png"}},\r
+               1,\r
+               _KeyVal_ {{".ac.kr"},{".ac.kr"},{".ac.kr"}},\r
+               _KeyEvt_ {{0},{0},{0}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 1x1 */\r
+               1,\r
+               _Label_ {{".go.kr"},{".go.kr"},{".go.kr"}},\r
+               LABEL_PROPERTIES_PUNTUATION_BUTTON_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_moa_button2_nml.png","textinput_moa_button2_press.png"}, {"textinput_moa_button2_nml.png","textinput_moa_button2_press.png"}, {"textinput_moa_button2_nml.png","textinput_moa_button2_press.png"}},\r
+               1,\r
+               _KeyVal_ {{".go.kr"},{".go.kr"},{".go.kr"}},\r
+               _KeyEvt_ {{0},{0},{0}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 1x1 */\r
+               1,\r
+               _Label_ {{".net"},{".net"},{".net"}},\r
+               LABEL_PROPERTIES_PUNTUATION_BUTTON_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_moa_button2_nml.png","textinput_moa_button2_press.png"}, {"textinput_moa_button2_nml.png","textinput_moa_button2_press.png"}, {"textinput_moa_button2_nml.png","textinput_moa_button2_press.png"}},\r
+               1,\r
+               _KeyVal_ {{".net"},{".net"},{".net"}},\r
+               _KeyEvt_ {{0},{0},{0}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 1x1 */\r
+               1,\r
+               _Label_ {{".org"},{".org"},{".org"}},\r
+               LABEL_PROPERTIES_PUNTUATION_BUTTON_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_moa_button2_nml.png","textinput_moa_button2_press.png"}, {"textinput_moa_button2_nml.png","textinput_moa_button2_press.png"}, {"textinput_moa_button2_nml.png","textinput_moa_button2_press.png"}},\r
+               1,\r
+               _KeyVal_ {{".org"},{".org"},{".org"}},\r
+               _KeyEvt_ {{0},{0},{0}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 1x1 */\r
+               1,\r
+               _Label_ {{".edu"},{".edu"},{".edu"}},\r
+               LABEL_PROPERTIES_PUNTUATION_BUTTON_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_moa_button2_nml.png","textinput_moa_button2_press.png"}, {"textinput_moa_button2_nml.png","textinput_moa_button2_press.png"}, {"textinput_moa_button2_nml.png","textinput_moa_button2_press.png"}},\r
+               1,\r
+               _KeyVal_ {{".edu"},{".edu"},{".edu"}},\r
+               _KeyEvt_ {{0},{0},{0}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 1x1 */\r
+               1,\r
+               _Label_ {{".gov"},{".gov"},{".gov"}},\r
+               LABEL_PROPERTIES_PUNTUATION_BUTTON_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_moa_button2_nml.png","textinput_moa_button2_press.png"}, {"textinput_moa_button2_nml.png","textinput_moa_button2_press.png"}, {"textinput_moa_button2_nml.png","textinput_moa_button2_press.png"}},\r
+               1,\r
+               _KeyVal_ {{".gov"},{".gov"},{".gov"}},\r
+               _KeyEvt_ {{0},{0},{0}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+}\r
+\r
+#endif\r
+\r
+\r
+\r
diff --git a/res/mcfresource-port-qty-dutch.h b/res/mcfresource-port-qty-dutch.h
new file mode 100755 (executable)
index 0000000..462d983
--- /dev/null
@@ -0,0 +1,739 @@
+/*
+ * Copyright 2012  Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.tizenopensource.org/license
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+\r
+#ifdef KEY_CONFIGURE_PHASE\r
+{\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CONTROL, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CONTROL, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+\r
+\r
+       /*option*/      {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_MODECHANGE, POPUP_TYPE_CONTEXT_POPUP, FALSE, FALSE, TRUE, {NOT_USED,}},\r
+       /*abc*/{USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_MODECHANGE, POPUP_TYPE_BTN_LONGPRESS_POPUP_ONCE, FALSE, FALSE, TRUE, {INPUT_MODE_EMOTICON_POPUP, NOT_USED, NOT_USED, NOT_USED, NOT_USED, NOT_USED, NOT_USED}},\r
+       /* Default SubLayout */\r
+       // {\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CONTROL, POPUP_TYPE_NONE, FALSE, FALSE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_DIRECTION, KEY_TYPE_UNICODE, POPUP_TYPE_BTN_LONGPRESS_POPUP_ONCE, FALSE, FALSE, TRUE, {INPUT_MODE_PUNCTUATION_POPUP, NOT_USED, NOT_USED, NOT_USED, NOT_USED, NOT_USED, NOT_USED}},\r
+       // }\r
+       /* WithVoice SubLayout */\r
+       // {\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CONTROL, POPUP_TYPE_BTN_RELEASE_POPUP_ONCE, FALSE, FALSE, TRUE, {INPUT_MODE_SCENETEXT_POPUP, NOT_USED, NOT_USED, NOT_USED, NOT_USED, NOT_USED, NOT_USED}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CONTROL, POPUP_TYPE_NONE, FALSE, FALSE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_DIRECTION, KEY_TYPE_UNICODE, POPUP_TYPE_BTN_LONGPRESS_POPUP_ONCE, FALSE, FALSE, TRUE, {INPUT_MODE_PUNCTUATION_POPUP, NOT_USED, NOT_USED, NOT_USED, NOT_USED, NOT_USED, NOT_USED}},\r
+       // }\r
+       /* URL SubLayout */\r
+       // {\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CONTROL, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, CUSTOMID_WWWCOM, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_BTN_LONGPRESS_POPUP_ONCE, TRUE, TRUE, TRUE, {INPUT_MODE_URL_POPUP, NOT_USED, NOT_USED, NOT_USED, NOT_USED, NOT_USED, NOT_USED}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       // }\r
+       /* Email SubLayout */\r
+       // {\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CONTROL, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_BTN_LONGPRESS_POPUP_ONCE, TRUE, TRUE, TRUE, {INPUT_MODE_URL_POPUP, NOT_USED, NOT_USED, NOT_USED, NOT_USED, NOT_USED, NOT_USED}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       // }\r
+       /*enter*/{USED, CUSTOMID_ENTER, BUTTON_TYPE_NORMAL, KEY_TYPE_CONTROL, POPUP_TYPE_NONE, FALSE, FALSE, TRUE, {NOT_USED,}},\r
+\r
+       {NOT_USED,},\r
+}\r
+#endif\r
+\r
+#ifdef KEY_PROPERTIES_PHASE\r
+{\r
+       /* fValid, labelCnt, label, labelPropId, imgPath, keyValueCnt, keyValue, keyEvent, longKeyValue, longKeyEvent, userLabel,  userKeyValue,  userKeyEvent, */\r
+       /* Second Line */\r
+       {\r
+               USED, /* 2x1 */\r
+               1,\r
+               _Label_ {{"q"},{"Q"},{"Q"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"q"},{"Q"},{"Q"}},\r
+               _KeyEvt_ {{MVK_q},{MVK_Q},{MVK_Q}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 2x2 */\r
+               1,\r
+               _Label_ {{"w"},{"W"},{"W"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"w"},{"W"},{"W"}},\r
+               _KeyEvt_ {{MVK_w},{MVK_W},{MVK_W}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 2x3 */\r
+               1,\r
+               _Label_ {{"e"},{"E"},{"E"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"e"},{"E"},{"E"}},\r
+               _KeyEvt_ {{MVK_e},{MVK_E},{MVK_E}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 2x4 */\r
+               1,\r
+               _Label_ {{"r"},{"R"},{"R"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"r"},{"R"},{"R"}},\r
+               _KeyEvt_ {{MVK_r},{MVK_R},{MVK_R}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 2x5 */\r
+               1,\r
+               _Label_ {{"t"},{"T"},{"T"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"t"},{"T"},{"T"}},\r
+               _KeyEvt_ {{MVK_t},{MVK_T},{MVK_T}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 2x6 */\r
+               1,\r
+               _Label_ {{"y"},{"Y"},{"Y"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"y"},{"Y"},{"Y"}},\r
+               _KeyEvt_ {{MVK_y},{MVK_Y},{MVK_Y}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 2x7 */\r
+               1,\r
+               _Label_ {{"u"},{"U"},{"U"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"u"},{"U"},{"U"}},\r
+               _KeyEvt_ {{MVK_u},{MVK_U},{MVK_U}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 2x8 */\r
+               1,\r
+               _Label_ {{"i"},{"I"},{"I"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"i"},{"I"},{"I"}},\r
+               _KeyEvt_ {{MVK_i},{MVK_I},{MVK_I}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 2x9 */\r
+               1,\r
+               _Label_ {{"o"},{"O"},{"O"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"o"},{"O"},{"O"}},\r
+               _KeyEvt_ {{MVK_o},{MVK_O},{MVK_O}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 2x10 */\r
+               1,\r
+               _Label_ {{"p"},{"P"},{"P"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"p"},{"P"},{"P"}},\r
+               _KeyEvt_ {{MVK_p},{MVK_P},{MVK_P}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+\r
+\r
+       /* Third Line */\r
+       {\r
+               USED, /* 3x1 */\r
+               1,\r
+               _Label_ {{"a"},{"A"},{"A"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"a"},{"A"},{"A"}},\r
+               _KeyEvt_ {{MVK_a},{MVK_A},{MVK_A}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+               {{"a","\xc3\xa5","\xc3\xa6"},{"A","\xc3\x85","\xc3\x86"},{"A","\xc3\x85","\xc3\x86"}},\r
+               FALSE,\r
+               0,\r
+               MCF_MULTI_TOUCH_TYPE_EXCLUSIVE,\r
+               NOT_USED,\r
+               {{"a","..."},{"A","..."},{"A","..."}},\r
+       },\r
+       {\r
+               USED, /* 3x2 */\r
+               1,\r
+               _Label_ {{"s"},{"S"},{"S"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"s"},{"S"},{"S"}},\r
+               _KeyEvt_ {{MVK_s},{MVK_S},{MVK_S}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 3x3 */\r
+               1,\r
+               _Label_ {{"d"},{"D"},{"D"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"d"},{"D"},{"D"}},\r
+               _KeyEvt_ {{MVK_d},{MVK_D},{MVK_D}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 3x4 */\r
+               1,\r
+               _Label_ {{"f"},{"F"},{"F"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"f"},{"F"},{"F"}},\r
+               _KeyEvt_ {{MVK_f},{MVK_F},{MVK_F}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 3x5 */\r
+               1,\r
+               _Label_ {{"g"},{"G"},{"G"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"g"},{"G"},{"G"}},\r
+               _KeyEvt_ {{MVK_g},{MVK_G},{MVK_G}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 3x6 */\r
+               1,\r
+               _Label_ {{"h"},{"H"},{"H"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"h"},{"H"},{"H"}},\r
+               _KeyEvt_ {{MVK_h},{MVK_H},{MVK_H}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 3x7 */\r
+               1,\r
+               _Label_ {{"j"},{"J"},{"J"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"j"},{"J"},{"J"}},\r
+               _KeyEvt_ {{MVK_j},{MVK_J},{MVK_J}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 3x8 */\r
+               1,\r
+               _Label_ {{"k"},{"K"},{"K"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"k"},{"K"},{"K"}},\r
+               _KeyEvt_ {{MVK_k},{MVK_K},{MVK_K}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 3x9 */\r
+               1,\r
+               _Label_ {{"l"},{"L"},{"L"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"l"},{"L"},{"L"}},\r
+               _KeyEvt_ {{MVK_l},{MVK_L},{MVK_L}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+\r
+       /* Fourth Line */\r
+       {\r
+               USED, /* 4x1 */\r
+               1,\r
+               _Label_ {{""},{""},{""}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"textinput_qwerty_icon_shift_01.png","textinput_qwerty_icon_shift_02.png","textinput_qwerty_icon_shift_01.png"}, {"textinput_qwerty_icon_shift_02.png","textinput_qwerty_icon_shift_01.png","textinput_qwerty_icon_shift_01.png"}, {"textinput_qwerty_icon_shift_03.png","textinput_qwerty_icon_shift_02.png","textinput_qwerty_icon_shift_01.png"}},\r
+               _BGImg_ {{"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_function.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_function.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_function.png","textinput_qwerty_button_nml.png"}},\r
+               1,\r
+               _KeyVal_ {{""},{""},{""}},\r
+               _KeyEvt_ {{UD_MVK_SHIFT},{UD_MVK_SHIFT},{UD_MVK_SHIFT}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 4x2 */\r
+               1,\r
+               _Label_ {{"z"},{"Z"},{"Z"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"z"},{"Z"},{"Z"}},\r
+               _KeyEvt_ {{MVK_z},{MVK_Z},{MVK_Z}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 4x3 */\r
+               1,\r
+               _Label_ {{"x"},{"X"},{"X"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"x"},{"X"},{"X"}},\r
+               _KeyEvt_ {{MVK_x},{MVK_X},{MVK_X}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 4x4 */\r
+               1,\r
+               _Label_ {{"c"},{"C"},{"C"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"c"},{"C"},{"C"}},\r
+               _KeyEvt_ {{MVK_c},{MVK_C},{MVK_C}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 4x5 */\r
+               1,\r
+               _Label_ {{"v"},{"V"},{"V"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"v"},{"V"},{"V"}},\r
+               _KeyEvt_ {{MVK_v},{MVK_V},{MVK_V}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 4x6 */\r
+               1,\r
+               _Label_ {{"b"},{"B"},{"B"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"b"},{"B"},{"B"}},\r
+               _KeyEvt_ {{MVK_b},{MVK_B},{MVK_B}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 4x7 */\r
+               1,\r
+               _Label_ {{"n"},{"N"},{"N"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"n"},{"N"},{"N"}},\r
+               _KeyEvt_ {{MVK_n},{MVK_N},{MVK_N}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 4x8 */\r
+               1,\r
+               _Label_ {{"m"},{"M"},{"M"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"m"},{"M"},{"M"}},\r
+               _KeyEvt_ {{MVK_m},{MVK_M},{MVK_M}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 4x9 */\r
+               1,\r
+               _Label_ {{""},{""},{""}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"textinput_qwerty_icon_clear.png","textinput_qwerty_icon_clear.png"}, {"textinput_qwerty_icon_clear.png","textinput_qwerty_icon_clear.png"}, {"textinput_qwerty_icon_clear.png","textinput_qwerty_icon_clear.png"}},\r
+               _BGImg_ {{"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_function.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_function.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}},\r
+               1,\r
+               _KeyVal_ {{""},{""},{""}},\r
+               _KeyEvt_{{MVK_BackSpace},{MVK_BackSpace},{MVK_BackSpace}},\r
+               "",\r
+               0,\r
+               TRUE,\r
+       },\r
+       /* Fifth line*/\r
+\r
+       {\r
+               USED, /* 5x1 */\r
+               1,\r
+               _Label_{{"NL"},{"NL"},{"NL"}},\r
+               LABEL_PROPERTIES_QTY_BOTTOM_LINE_IMAGE_TYPE,\r
+               _LabelImg_{{"language_icon_port.png","language_icon_port.png"}, {"language_icon_port.png","language_icon_port.png"}, {"language_icon_port.png","language_icon_port.png"}},\r
+               _BGImg_{{"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_function.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_function.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_function.png","textinput_qwerty_button_nml.png"}},\r
+               1,\r
+               _KeyVal_{{""},{""},{""}},\r
+               _KeyEvt_ {{UD_MVK_LANG_CHANGE},{UD_MVK_LANG_CHANGE},{UD_MVK_LANG_CHANGE}},\r
+               "OptionWindow",\r
+               UD_MVK_OPTION_WINDOW,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 5x2 */\r
+               1,\r
+               _Label_{{""},{""},{""}},\r
+               LABEL_PROPERTIES_QTY_BOTTOM_LINE_TYPE,\r
+               _LabelImg_ {{"symbol_icon_port.png","symbol_icon_port.png"}, {"symbol_icon_port.png","symbol_icon_port.png"}, {"symbol_icon_port.png","symbol_icon_port.png"}},\r
+               _BGImg_{{"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_function.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_function.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_function.png","textinput_qwerty_button_nml.png"}},\r
+               1,\r
+               _KeyVal_{{""},{""},{""}},\r
+               _KeyEvt_ {{UD_MVK_SYM},{UD_MVK_SYM},{UD_MVK_SYM}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+\r
+       /* Default SubLayout */\r
+       // {\r
+       {\r
+               USED, /* 4x3 */\r
+               1,\r
+               _Label_{{""},{""},{""}},\r
+               LABEL_PROPERTIES_QTY_SPACE_KEY_TYPE,\r
+               _LabelImg_ {{"textinput_icon_space.png","textinput_icon_space_press.png"}, {"textinput_icon_space.png","textinput_icon_space_press.png"}, {"textinput_icon_space.png","textinput_icon_space_press.png"}},\r
+               _BGImg_{{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_{{""},{""},{""}},\r
+               _KeyEvt_{{MVK_space},{MVK_space},{MVK_space}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 4x4 */\r
+               3,\r
+        _Label_{{".",""}, {".",""}, {".",""}},\r
+               LABEL_PROPERTIES_QTY_BOTTOM_LINE_TYPE,\r
+        _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_{{"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png"}},\r
+               1,\r
+               _KeyVal_{{""},{""},{""}},\r
+        _KeyEvt_ {{MVK_period},{MVK_period},{MVK_period}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       // }\r
+       /* WithVoice SubLayout */\r
+       // {\r
+       {\r
+               USED, /* 4x3 */\r
+               1,\r
+               _Label_{{""},{""},{""}},\r
+               LABEL_PROPERTIES_QTY_BOTTOM_LINE_TYPE,\r
+               _LabelImg_ {{"camera_qwerty_kor-moa_port.png","camera_qwerty_kor-moa_port.png","camera_qwerty_kor-moa_port.png"}, {"camera_qwerty_kor-moa_port.png","camera_qwerty_kor-moa_port.png","camera_qwerty_kor-moa_port.png"}, {"camera_qwerty_kor-moa_port.png","camera_qwerty_kor-moa_port.png","camera_qwerty_kor-moa_port.png"}},\r
+               _BGImg_{{"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_function.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_function.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_function.png"}},\r
+               1,\r
+               _KeyVal_{{""},{""},{""}},\r
+               _KeyEvt_ {{0},{0},{0}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 4x4 */\r
+               1,\r
+               _Label_{{""},{""},{""}},\r
+               LABEL_PROPERTIES_QTY_SPACE_KEY_TYPE,\r
+               _LabelImg_ {{"textinput_icon_space.png","textinput_icon_space_press.png"}, {"textinput_icon_space.png","textinput_icon_space_press.png"}, {"textinput_icon_space.png","textinput_icon_space_press.png"}},\r
+               _BGImg_{{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_{{""},{""},{""}},\r
+               _KeyEvt_{{MVK_space},{MVK_space},{MVK_space}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 4x5 */\r
+               3,\r
+        _Label_{{".",""}, {".",""}, {".",""}},\r
+               LABEL_PROPERTIES_QTY_BOTTOM_LINE_TYPE,\r
+        _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_{{"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png"}},\r
+               1,\r
+               _KeyVal_{{""},{""},{""}},\r
+        _KeyEvt_ {{MVK_period},{MVK_period},{MVK_period}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       // }\r
+       /* URL SubLayout */\r
+       // {\r
+       {\r
+               USED, /* 4x3 */\r
+               1,\r
+               _Label_{{""},{""},{""}},\r
+               LABEL_PROPERTIES_QTY_SPACE_KEY_TYPE,\r
+               _LabelImg_ {{"textinput_icon_space.png","textinput_icon_space_press.png"}, {"textinput_icon_space.png","textinput_icon_space_press.png"}, {"textinput_icon_space.png","textinput_icon_space_press.png"}},\r
+               _BGImg_{{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_{{""},{""},{""}},\r
+               _KeyEvt_{{MVK_space},{MVK_space},{MVK_space}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 4x4 */\r
+               1,\r
+               _Label_{{"/"},{"/"},{"/"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_{{" "," "}, {" "," "}, {" "," "}},\r
+               _BGImg_{{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}},\r
+               1,\r
+               _KeyVal_{{"/"},{"/"},{"/"}},\r
+               _KeyEvt_ {{MVK_slash},{MVK_slash},{MVK_slash}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 4x5 */\r
+               1,\r
+               _Label_{{"www."},{"www."},{"www."}},\r
+               LABEL_PROPERTIES_QTY_WWW_TYPE,\r
+               _LabelImg_{{" "," "}, {" "," "}, {" "," "}},\r
+               _BGImg_{{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}},\r
+               1,\r
+               _KeyVal_{{"www."},{"www."},{"www."}},\r
+               _KeyEvt_ {{0},{0},{0}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 4x6 */\r
+               3,\r
+               _Label_{{".",""}, {".",""}, {".",""}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_{{" "," "}, {" "," "}, {" "," "}},\r
+               _BGImg_{{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}},\r
+               1,\r
+               _KeyVal_{{"."},{"."},{"."}},\r
+               _KeyEvt_ {{MVK_period},{MVK_period},{MVK_period}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       // }\r
+       /* Email SubLayout */\r
+       // {\r
+       {\r
+               USED, /* 4x3 */\r
+               1,\r
+               _Label_{{""},{""},{""}},\r
+               LABEL_PROPERTIES_QTY_SPACE_KEY_TYPE,\r
+               _LabelImg_ {{"textinput_icon_space.png","textinput_icon_space_press.png"}, {"textinput_icon_space.png","textinput_icon_space_press.png"}, {"textinput_icon_space.png","textinput_icon_space_press.png"}},\r
+               _BGImg_{{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_{{""},{""},{""}},\r
+               _KeyEvt_{{MVK_space},{MVK_space},{MVK_space}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 4x4 */\r
+               1,\r
+               _Label_{{"@"},{"@"},{"@"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_{{" "," "}, {" "," "}, {" "," "}},\r
+               _BGImg_{{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}},\r
+               1,\r
+               _KeyVal_{{"@"},{"@"},{"@"}},\r
+               _KeyEvt_ {{MVK_at},{MVK_at},{MVK_at}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 4x5 */\r
+               1,\r
+               _Label_{{".com"},{".com"},{".com"}},\r
+               LABEL_PROPERTIES_QTY_WWW_TYPE,\r
+               _LabelImg_{{" "," "}, {" "," "}, {" "," "}},\r
+               _BGImg_{{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}},\r
+               1,\r
+               _KeyVal_{{".com"},{".com"},{".com"}},\r
+               _KeyEvt_ {{0},{0},{0}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 4x6 */\r
+               3,\r
+               _Label_{{".",""}, {".",""}, {".",""}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_{{" "," "}, {" "," "}, {" "," "}},\r
+               _BGImg_{{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}},\r
+               1,\r
+               _KeyVal_{{"."},{"."},{"."}},\r
+               _KeyEvt_ {{MVK_period},{MVK_period},{MVK_period}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       // }\r
+\r
+       {\r
+               USED, /* 4x5 */\r
+               1,\r
+               _Label_ {{""},{""},{""}},\r
+               LABEL_PROPERTIES_QTY_BOTTOM_LINE_TYPE,\r
+               _LabelImg_ {{"textinput_qwerty_icon_enter.png","textinput_qwerty_icon_enter.png","textinput_qwerty_icon_enter_disabled.png"}, {"textinput_qwerty_icon_enter.png","textinput_qwerty_icon_enter.png","textinput_qwerty_icon_enter_disabled.png"}, {"textinput_qwerty_icon_enter.png","textinput_qwerty_icon_enter.png","textinput_qwerty_icon_enter_disabled.png"}},\r
+               _BGImg_ {{"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_function.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_function.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}},\r
+               1,\r
+               _KeyVal_ {{""},{""},{""}},\r
+               _KeyEvt_{{MVK_Return},{MVK_Return},{MVK_Return}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+\r
+       {NOT_USED,},\r
+}\r
+#endif\r
+\r
+\r
+\r
diff --git a/res/mcfresource-port-qty-email.h b/res/mcfresource-port-qty-email.h
new file mode 100755 (executable)
index 0000000..7ea5ecb
--- /dev/null
@@ -0,0 +1,580 @@
+/*
+ * Copyright 2012  Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.tizenopensource.org/license
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+\r
+#ifdef KEY_CONFIGURE_PHASE\r
+{\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CONTROL, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CONTROL, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+\r
+\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_MODECHANGE, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_MODECHANGE, POPUP_TYPE_BTN_LONGPRESS_POPUP_ONCE, FALSE, FALSE, TRUE, {INPUT_MODE_EMOTICON_POPUP, NOT_USED, NOT_USED, NOT_USED, NOT_USED, NOT_USED, NOT_USED}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CONTROL, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_BTN_LONGPRESS_POPUP_ONCE, TRUE, TRUE, TRUE, {INPUT_MODE_URL_POPUP, NOT_USED, NOT_USED, NOT_USED, NOT_USED, NOT_USED, NOT_USED}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CONTROL, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+\r
+       {NOT_USED,},\r
+}\r
+#endif\r
+\r
+#ifdef KEY_PROPERTIES_PHASE\r
+{\r
+       /* fValid, labelCnt, label, labelPropId, imgPath, keyValueCnt, keyValue, keyEvent, longKeyValue, longKeyEvent, userLabel,  userKeyValue,  userKeyEvent, */\r
+       /* Second Line */\r
+       {\r
+               USED, /* 2x1 */\r
+               2,\r
+               _Label_ {{"q","1"},{"Q","1"},{"Q","1"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"q"},{"Q"},{"Q"}},\r
+               _KeyEvt_ {{MVK_q},{MVK_Q},{MVK_Q}},\r
+               "1",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 2x2 */\r
+               2,\r
+               _Label_ {{"w","2"},{"W","2"},{"W","2"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"w"},{"W"},{"W"}},\r
+               _KeyEvt_ {{MVK_w},{MVK_W},{MVK_W}},\r
+               "2",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 2x3 */\r
+               2,\r
+               _Label_ {{"e","3"},{"E","3"},{"E","3"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"e"},{"E"},{"E"}},\r
+               _KeyEvt_ {{MVK_e},{MVK_E},{MVK_E}},\r
+               "3",\r
+               0,\r
+               FALSE,\r
+               {{"e","\xc3\xa9","\xc3\xa8","\xc3\xaa","\xc3\xab","3"},{"E","\xc3\x89","\xc3\x88","\xc3\x8a","\xc3\x8b","3"},{"E","\xc3\x89","\xc3\x88","\xc3\x8a","\xc3\x8b","3"}}\r
+       },\r
+       {\r
+               USED, /* 2x4 */\r
+               2,\r
+               _Label_ {{"r","4"},{"R","4"},{"R","4"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"r"},{"R"},{"R"}},\r
+               _KeyEvt_ {{MVK_r},{MVK_R},{MVK_R}},\r
+               "4",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 2x5 */\r
+               2,\r
+               _Label_ {{"t","5"},{"T","5"},{"T","5"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"t"},{"T"},{"T"}},\r
+               _KeyEvt_ {{MVK_t},{MVK_T},{MVK_T}},\r
+               "5",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 2x6 */\r
+               2,\r
+               _Label_ {{"y","6"},{"Y","6"},{"Y","6"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"y"},{"Y"},{"Y"}},\r
+               _KeyEvt_ {{MVK_y},{MVK_Y},{MVK_Y}},\r
+               "6",\r
+               0,\r
+               FALSE,\r
+               {{"y","\xc3\xbf","6"},{"Y","\xc5\xb8","6"},{"Y","\xc5\xb8","6"}}\r
+       },\r
+       {\r
+               USED, /* 2x7 */\r
+               2,\r
+               _Label_ {{"u","7"},{"U","7"},{"U","7"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"u"},{"U"},{"U"}},\r
+               _KeyEvt_ {{MVK_u},{MVK_U},{MVK_U}},\r
+               "7",\r
+               0,\r
+               FALSE,\r
+               {{"u","\xc3\xb9","\xc3\xbb","7"},{"U","\xc3\x99","\xc3\x9b","7"},{"U","\xc3\x99","\xc3\x9b","7"}}\r
+       },\r
+       {\r
+               USED, /* 2x8 */\r
+               2,\r
+               _Label_ {{"i","8"},{"I","8"},{"I","8"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"i"},{"I"},{"I"}},\r
+               _KeyEvt_ {{MVK_i},{MVK_I},{MVK_I}},\r
+               "8",\r
+               0,\r
+               FALSE,\r
+               {{"i","\xc3\xae","\xc3\xaf","8"},{"I","\xc3\x8e","\xc3\x8f","8"},{"I","\xc3\x8e","\xc3\x8f","8"}}\r
+       },\r
+       {\r
+               USED, /* 2x9 */\r
+               2,\r
+               _Label_ {{"o","9"},{"O","9"},{"O","9"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"o"},{"O"},{"O"}},\r
+               _KeyEvt_ {{MVK_o},{MVK_O},{MVK_O}},\r
+               "9",\r
+               0,\r
+               FALSE,\r
+               {{"o","\xc3\xb4","\xc5\x93","9"},{"O","\xc3\x94","\xc5\x92","9"},{"O","\xc3\x94","\xc5\x92","9"}}\r
+       },\r
+       {\r
+               USED, /* 2x10 */\r
+               2,\r
+               _Label_ {{"p","0"},{"P","0"},{"P","0"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"p"},{"P"},{"P"}},\r
+               _KeyEvt_ {{MVK_p},{MVK_P},{MVK_P}},\r
+               "0",\r
+               0,\r
+               FALSE,\r
+       },\r
+\r
+\r
+       /* Third Line */\r
+       {\r
+               USED, /* 3x1 */\r
+               2,\r
+               _Label_ {{"a","-"},{"A","-"},{"A","-"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"a"},{"A"},{"A"}},\r
+               _KeyEvt_ {{MVK_a},{MVK_A},{MVK_A}},\r
+               "-",\r
+               0,\r
+               FALSE,\r
+               {{"a","\xc3\xa0","\xc3\xa2","\xc3\xa6","-"},{"A","\xc3\x80","\xc3\x82","\xc3\x86","-"},{"A","\xc3\x80","\xc3\x82","\xc3\x86","-"}}\r
+       },\r
+       {\r
+               USED, /* 3x2 */\r
+               2,\r
+               _Label_ {{"s","@"},{"S","@"},{"S","@"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"s"},{"S"},{"S"}},\r
+               _KeyEvt_ {{MVK_s},{MVK_S},{MVK_S}},\r
+               "@",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 3x3 */\r
+               2,\r
+               _Label_ {{"d","*"},{"D","*"},{"D","*"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"d"},{"D"},{"D"}},\r
+               _KeyEvt_ {{MVK_d},{MVK_D},{MVK_D}},\r
+               "*",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 3x4 */\r
+               2,\r
+               _Label_ {{"f","^"},{"F","^"},{"F","^"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"f"},{"F"},{"F"}},\r
+               _KeyEvt_ {{MVK_f},{MVK_F},{MVK_F}},\r
+               "^",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 3x5 */\r
+               2,\r
+               _Label_ {{"g",":"},{"G",":"},{"G",":"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"g"},{"G"},{"G"}},\r
+               _KeyEvt_ {{MVK_g},{MVK_G},{MVK_G}},\r
+               ":",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 3x6 */\r
+               2,\r
+               _Label_ {{"h",";"},{"H",";"},{"H",";"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"h"},{"H"},{"H"}},\r
+               _KeyEvt_ {{MVK_h},{MVK_H},{MVK_H}},\r
+               ";",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 3x7 */\r
+               2,\r
+               _Label_ {{"j","("},{"J","("},{"J","("}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"j"},{"J"},{"J"}},\r
+               _KeyEvt_ {{MVK_j},{MVK_J},{MVK_J}},\r
+               "(",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 3x8 */\r
+               2,\r
+               _Label_ {{"k",")"},{"K",")"},{"K",")"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"k"},{"K"},{"K"}},\r
+               _KeyEvt_ {{MVK_k},{MVK_K},{MVK_K}},\r
+               ")",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 3x9 */\r
+               2,\r
+               _Label_ {{"l","~"},{"L","~"},{"L","~"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"l"},{"L"},{"L"}},\r
+               _KeyEvt_ {{MVK_l},{MVK_L},{MVK_L}},\r
+               "~",\r
+               0,\r
+               FALSE,\r
+       },\r
+\r
+       /* Fourth Line */\r
+       {\r
+               USED, /* 4x1 */\r
+               1,\r
+               _Label_ {{""},{""},{""}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"textinput_qwerty_icon_shift_01.png","textinput_qwerty_icon_shift_02.png","textinput_qwerty_icon_shift_01.png"}, {"textinput_qwerty_icon_shift_02.png","textinput_qwerty_icon_shift_01.png","textinput_qwerty_icon_shift_01.png"}, {"textinput_qwerty_icon_shift_03.png","textinput_qwerty_icon_shift_02.png","textinput_qwerty_icon_shift_01.png"}},\r
+               _BGImg_ {{"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_function.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_function.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_function.png","textinput_qwerty_button_nml.png"}},\r
+               1,\r
+               _KeyVal_ {{""},{""},{""}},\r
+               _KeyEvt_ {{UD_MVK_SHIFT},{UD_MVK_SHIFT},{UD_MVK_SHIFT}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 4x2 */\r
+               2,\r
+               _Label_ {{"z","/"},{"Z","/"},{"Z","/"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"z"},{"Z"},{"Z"}},\r
+               _KeyEvt_ {{MVK_z},{MVK_Z},{MVK_Z}},\r
+               "/",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 4x3 */\r
+               2,\r
+               _Label_ {{"x","'"},{"X","'"},{"X","'"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"x"},{"X"},{"X"}},\r
+               _KeyEvt_ {{MVK_x},{MVK_X},{MVK_X}},\r
+               "'",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 4x4 */\r
+               2,\r
+               _Label_ {{"c","\""},{"C","\""},{"C","\""}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"c"},{"C"},{"C"}},\r
+               _KeyEvt_ {{MVK_c},{MVK_C},{MVK_C}},\r
+               "\"",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 4x5 */\r
+               2,\r
+               _Label_ {{"v","."},{"V","."},{"V","."}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"v"},{"V"},{"V"}},\r
+               _KeyEvt_ {{MVK_v},{MVK_V},{MVK_V}},\r
+               ".",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 4x6 */\r
+               2,\r
+               _Label_ {{"b",","},{"B",","},{"B",","}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"b"},{"B"},{"B"}},\r
+               _KeyEvt_ {{MVK_b},{MVK_B},{MVK_B}},\r
+               ",",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 4x7 */\r
+               2,\r
+               _Label_ {{"n","?"},{"N","?"},{"N","?"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"n"},{"N"},{"N"}},\r
+               _KeyEvt_ {{MVK_n},{MVK_N},{MVK_N}},\r
+               "?",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 4x8 */\r
+               2,\r
+               _Label_ {{"m","!"},{"M","!"},{"M","!"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"m"},{"M"},{"M"}},\r
+               _KeyEvt_ {{MVK_m},{MVK_M},{MVK_M}},\r
+               "!",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 4x9 */\r
+               1,\r
+               _Label_ {{""},{""},{""}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"textinput_qwerty_icon_clear.png","textinput_qwerty_icon_clear.png"}, {"textinput_qwerty_icon_clear.png","textinput_qwerty_icon_clear.png"}, {"textinput_qwerty_icon_clear.png","textinput_qwerty_icon_clear.png"}},\r
+               _BGImg_ {{"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_function.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_function.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}},\r
+               1,\r
+               _KeyVal_ {{""},{""},{""}},\r
+               _KeyEvt_{{MVK_BackSpace},{MVK_BackSpace},{MVK_BackSpace}},\r
+               "",\r
+               0,\r
+               TRUE,\r
+       },\r
+       /* Fifth line*/\r
+\r
+       {\r
+               USED, /* 5x1 */\r
+               1,\r
+               _Label_{{""},{""},{""}},\r
+               LABEL_PROPERTIES_QTY_BOTTOM_LINE_IMAGE_TYPE,\r
+               _LabelImg_{{"language_icon_port.png","language_icon_port.png"}, {"language_icon_port.png","language_icon_port.png"}, {"language_icon_port.png","language_icon_port.png"}},\r
+               _BGImg_{{"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_function.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_function.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_function.png","textinput_qwerty_button_nml.png"}},\r
+               1,\r
+               _KeyVal_{{""},{""},{""}},\r
+               _KeyEvt_ {{0},{0},{0}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 5x2 */\r
+               1,\r
+               _Label_{{""},{""},{""}},\r
+               LABEL_PROPERTIES_QTY_BOTTOM_LINE_TYPE,\r
+               _LabelImg_ {{"symbol_icon_port.png","symbol_icon_port.png"}, {"symbol_icon_port.png","symbol_icon_port.png"}, {"symbol_icon_port.png","symbol_icon_port.png"}},\r
+               _BGImg_{{"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_function.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_function.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_function.png","textinput_qwerty_button_nml.png"}},\r
+               1,\r
+               _KeyVal_{{""},{""},{""}},\r
+               _KeyEvt_ {{UD_MVK_SYM},{UD_MVK_SYM},{UD_MVK_SYM}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /*5x3 */\r
+               1,\r
+               _Label_{{""},{""},{""}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"textinput_icon_space.png","textinput_icon_space_press.png"}, {"textinput_icon_space.png","textinput_icon_space_press.png"}, {"textinput_icon_space.png","textinput_icon_space_press.png"}},\r
+               _BGImg_{{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_{{""},{""},{""}},\r
+               _KeyEvt_ {{MVK_space},{MVK_space},{MVK_space}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /*5x3 */\r
+               1,\r
+               _Label_{{"@"},{"@"},{"@"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_{{" "," "}, {" "," "}, {" "," "}},\r
+               _BGImg_{{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_{{"@"},{"@"},{"@"}},\r
+               _KeyEvt_ {{MVK_at},{MVK_at},{MVK_at}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /*5x3 */\r
+               1,\r
+               _Label_{{".com"},{".com"},{".com"}},\r
+               LABEL_PROPERTIES_QTY_WWW_TYPE,\r
+               _LabelImg_{{" "," "}, {" "," "}, {" "," "}},\r
+               _BGImg_{{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_{{".com"},{".com"},{".com"}},\r
+               _KeyEvt_ {{0},{0},{0}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 5x4 */\r
+               3,\r
+               _Label_{{".",""}, {".",""}, {".",""}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_{{" "," "}, {" "," "}, {" "," "}},\r
+               _BGImg_{{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_{{"."},{"."},{"."}},\r
+               _KeyEvt_ {{0},{0},{0}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+               {{".",",","?","!"},{".",",","?","!"},{".",",","?","!"}}\r
+       },\r
+\r
+       {\r
+               USED, /* 5x5 */\r
+               1,\r
+               _Label_ {{""},{""},{""}},\r
+               LABEL_PROPERTIES_QTY_BOTTOM_LINE_TYPE,\r
+               _LabelImg_ {{"textinput_qwerty_icon_enter.png","textinput_qwerty_icon_enter.png","textinput_qwerty_icon_enter_disabled.png"}, {"textinput_qwerty_icon_enter.png","textinput_qwerty_icon_enter.png","textinput_qwerty_icon_enter_disabled.png"}, {"textinput_qwerty_icon_enter.png","textinput_qwerty_icon_enter.png","textinput_qwerty_icon_enter_disabled.png"}},\r
+               _BGImg_ {{"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_function.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_function.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}},\r
+               1,\r
+               _KeyVal_ {{""},{""},{""}},\r
+               _KeyEvt_{{MVK_Return},{MVK_Return},{MVK_Return}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+\r
+       {NOT_USED,},\r
+}\r
+#endif\r
+\r
+\r
+\r
diff --git a/res/mcfresource-port-qty-english.h b/res/mcfresource-port-qty-english.h
new file mode 100755 (executable)
index 0000000..eccb175
--- /dev/null
@@ -0,0 +1,742 @@
+/*
+ * Copyright 2012  Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.tizenopensource.org/license
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+\r
+#ifdef KEY_CONFIGURE_PHASE\r
+{\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CONTROL, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CONTROL, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+\r
+\r
+       /*option*/      {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_MODECHANGE, POPUP_TYPE_CONTEXT_POPUP, FALSE, FALSE, TRUE, {NOT_USED,}},\r
+       /*abc*/{USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_MODECHANGE, POPUP_TYPE_BTN_LONGPRESS_POPUP_ONCE, FALSE, FALSE, TRUE, {INPUT_MODE_EMOTICON_POPUP, NOT_USED, NOT_USED, NOT_USED, NOT_USED, NOT_USED, NOT_USED}},\r
+       /* Default SubLayout */\r
+       // {\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CONTROL, POPUP_TYPE_NONE, FALSE, FALSE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_DIRECTION, KEY_TYPE_UNICODE, POPUP_TYPE_BTN_LONGPRESS_POPUP_ONCE, FALSE, FALSE, TRUE, {INPUT_MODE_PUNCTUATION_POPUP, NOT_USED, NOT_USED, NOT_USED, NOT_USED, NOT_USED, NOT_USED}},\r
+       // }\r
+       /* WithVoice SubLayout */\r
+       // {\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CONTROL, POPUP_TYPE_BTN_RELEASE_POPUP_ONCE, FALSE, FALSE, TRUE, {INPUT_MODE_SCENETEXT_POPUP, NOT_USED, NOT_USED, NOT_USED, NOT_USED, NOT_USED, NOT_USED}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CONTROL, POPUP_TYPE_NONE, FALSE, FALSE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_DIRECTION, KEY_TYPE_UNICODE, POPUP_TYPE_BTN_LONGPRESS_POPUP_ONCE, FALSE, FALSE, TRUE, {INPUT_MODE_PUNCTUATION_POPUP, NOT_USED, NOT_USED, NOT_USED, NOT_USED, NOT_USED, NOT_USED}},\r
+       // }\r
+       /* URL SubLayout */\r
+       // {\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CONTROL, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, CUSTOMID_WWWCOM, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_BTN_LONGPRESS_POPUP_ONCE, TRUE, TRUE, TRUE, {INPUT_MODE_URL_POPUP, NOT_USED, NOT_USED, NOT_USED, NOT_USED, NOT_USED, NOT_USED}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       // }\r
+       /* Email SubLayout */\r
+       // {\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CONTROL, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_BTN_LONGPRESS_POPUP_ONCE, TRUE, TRUE, TRUE, {INPUT_MODE_URL_POPUP, NOT_USED, NOT_USED, NOT_USED, NOT_USED, NOT_USED, NOT_USED}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       // }\r
+       /*enter*/{USED, CUSTOMID_ENTER, BUTTON_TYPE_NORMAL, KEY_TYPE_CONTROL, POPUP_TYPE_NONE, FALSE, FALSE, TRUE, {NOT_USED,}},\r
+\r
+       {NOT_USED,},\r
+}\r
+#endif\r
+\r
+#ifdef KEY_PROPERTIES_PHASE\r
+{\r
+       /* fValid, labelCnt, label, labelPropId, imgPath, keyValueCnt, keyValue, keyEvent, longKeyValue, longKeyEvent, userLabel,  userKeyValue,  userKeyEvent, */\r
+       /* Second Line */\r
+       {\r
+               USED, /* 2x1 */\r
+               2,\r
+               _Label_ {{"q","1"},{"Q","1"},{"Q","1"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"q"},{"Q"},{"Q"}},\r
+               _KeyEvt_ {{MVK_q},{MVK_Q},{MVK_Q}},\r
+               "1",\r
+               MVK_1,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 2x2 */\r
+               2,\r
+               _Label_ {{"w","2"},{"W","2"},{"W","2"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"w"},{"W"},{"W"}},\r
+               _KeyEvt_ {{MVK_w},{MVK_W},{MVK_W}},\r
+               "2",\r
+               MVK_2,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 2x3 */\r
+               2,\r
+               _Label_ {{"e","3"},{"E","3"},{"E","3"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"e"},{"E"},{"E"}},\r
+               _KeyEvt_ {{MVK_e},{MVK_E},{MVK_E}},\r
+               "3",\r
+               MVK_3,\r
+               FALSE,\r
+               {{"e","\xc3\xa9","\xc3\xa8","\xc3\xaa","\xc3\xab","3"},{"E","\xc3\x89","\xc3\x88","\xc3\x8a","\xc3\x8b","3"},{"E","\xc3\x89","\xc3\x88","\xc3\x8a","\xc3\x8b","3"}}\r
+       },\r
+       {\r
+               USED, /* 2x4 */\r
+               2,\r
+               _Label_ {{"r","4"},{"R","4"},{"R","4"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"r"},{"R"},{"R"}},\r
+               _KeyEvt_ {{MVK_r},{MVK_R},{MVK_R}},\r
+               "4",\r
+               MVK_4,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 2x5 */\r
+               2,\r
+               _Label_ {{"t","5"},{"T","5"},{"T","5"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"t"},{"T"},{"T"}},\r
+               _KeyEvt_ {{MVK_t},{MVK_T},{MVK_T}},\r
+               "5",\r
+               MVK_5,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 2x6 */\r
+               2,\r
+               _Label_ {{"y","6"},{"Y","6"},{"Y","6"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"y"},{"Y"},{"Y"}},\r
+               _KeyEvt_ {{MVK_y},{MVK_Y},{MVK_Y}},\r
+               "6",\r
+               MVK_6,\r
+               FALSE,\r
+               {{"y","\xc3\xbf","6"},{"Y","\xc5\xb8","6"},{"Y","\xc5\xb8","6"}}\r
+       },\r
+       {\r
+               USED, /* 2x7 */\r
+               2,\r
+               _Label_ {{"u","7"},{"U","7"},{"U","7"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"u"},{"U"},{"U"}},\r
+               _KeyEvt_ {{MVK_u},{MVK_U},{MVK_U}},\r
+               "7",\r
+               MVK_7,\r
+               FALSE,\r
+               {{"u","\xc3\xb9","\xc3\xbb","7"},{"U","\xc3\x99","\xc3\x9b","7"},{"U","\xc3\x99","\xc3\x9b","7"}}\r
+       },\r
+       {\r
+               USED, /* 2x8 */\r
+               2,\r
+               _Label_ {{"i","8"},{"I","8"},{"I","8"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"i"},{"I"},{"I"}},\r
+               _KeyEvt_ {{MVK_i},{MVK_I},{MVK_I}},\r
+               "8",\r
+               MVK_8,\r
+               FALSE,\r
+               {{"i","\xc3\xae","\xc3\xaf","8"},{"I","\xc3\x8e","\xc3\x8f","8"},{"I","\xc3\x8e","\xc3\x8f","8"}}\r
+       },\r
+       {\r
+               USED, /* 2x9 */\r
+               2,\r
+               _Label_ {{"o","9"},{"O","9"},{"O","9"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"o"},{"O"},{"O"}},\r
+               _KeyEvt_ {{MVK_o},{MVK_O},{MVK_O}},\r
+               "9",\r
+               MVK_9,\r
+               FALSE,\r
+               {{"o","\xc3\xb4","\xc5\x93","9"},{"O","\xc3\x94","\xc5\x92","9"},{"O","\xc3\x94","\xc5\x92","9"}}\r
+       },\r
+       {\r
+               USED, /* 2x10 */\r
+               2,\r
+               _Label_ {{"p","0"},{"P","0"},{"P","0"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"p"},{"P"},{"P"}},\r
+               _KeyEvt_ {{MVK_p},{MVK_P},{MVK_P}},\r
+               "0",\r
+               MVK_0,\r
+               FALSE,\r
+       },\r
+\r
+\r
+       /* Third Line */\r
+       {\r
+               USED, /* 3x1 */\r
+               2,\r
+               _Label_ {{"a","-"},{"A","-"},{"A","-"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"a"},{"A"},{"A"}},\r
+               _KeyEvt_ {{MVK_a},{MVK_A},{MVK_A}},\r
+               "-",\r
+               MVK_minus,\r
+               FALSE,\r
+               {{"a","\xc3\xa0","\xc3\xa2","\xc3\xa6","-"},{"A","\xc3\x80","\xc3\x82","\xc3\x86","-"},{"A","\xc3\x80","\xc3\x82","\xc3\x86","-"}}\r
+       },\r
+       {\r
+               USED, /* 3x2 */\r
+               2,\r
+               _Label_ {{"s","@"},{"S","@"},{"S","@"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"s"},{"S"},{"S"}},\r
+               _KeyEvt_ {{MVK_s},{MVK_S},{MVK_S}},\r
+               "@",\r
+               MVK_at,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 3x3 */\r
+               2,\r
+               _Label_ {{"d","*"},{"D","*"},{"D","*"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"d"},{"D"},{"D"}},\r
+               _KeyEvt_ {{MVK_d},{MVK_D},{MVK_D}},\r
+               "*",\r
+               MVK_asterisk,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 3x4 */\r
+               2,\r
+               _Label_ {{"f","^"},{"F","^"},{"F","^"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"f"},{"F"},{"F"}},\r
+               _KeyEvt_ {{MVK_f},{MVK_F},{MVK_F}},\r
+               "^",\r
+               MVK_asciicircum,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 3x5 */\r
+               2,\r
+               _Label_ {{"g",":"},{"G",":"},{"G",":"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"g"},{"G"},{"G"}},\r
+               _KeyEvt_ {{MVK_g},{MVK_G},{MVK_G}},\r
+               ":",\r
+               MVK_colon,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 3x6 */\r
+               2,\r
+               _Label_ {{"h",";"},{"H",";"},{"H",";"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"h"},{"H"},{"H"}},\r
+               _KeyEvt_ {{MVK_h},{MVK_H},{MVK_H}},\r
+               ";",\r
+               MVK_semicolon,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 3x7 */\r
+               2,\r
+               _Label_ {{"j","("},{"J","("},{"J","("}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"j"},{"J"},{"J"}},\r
+               _KeyEvt_ {{MVK_j},{MVK_J},{MVK_J}},\r
+               "(",\r
+               MVK_parenleft,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 3x8 */\r
+               2,\r
+               _Label_ {{"k",")"},{"K",")"},{"K",")"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"k"},{"K"},{"K"}},\r
+               _KeyEvt_ {{MVK_k},{MVK_K},{MVK_K}},\r
+               ")",\r
+               MVK_parenright,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 3x9 */\r
+               2,\r
+               _Label_ {{"l","~"},{"L","~"},{"L","~"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"l"},{"L"},{"L"}},\r
+               _KeyEvt_ {{MVK_l},{MVK_L},{MVK_L}},\r
+               "~",\r
+               MVK_asciitilde,\r
+               FALSE,\r
+       },\r
+\r
+       /* Fourth Line */\r
+       {\r
+               USED, /* 4x1 */\r
+               1,\r
+               _Label_ {{""},{""},{""}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"textinput_qwerty_icon_shift_01.png","textinput_qwerty_icon_shift_02.png","textinput_qwerty_icon_shift_01.png"}, {"textinput_qwerty_icon_shift_02.png","textinput_qwerty_icon_shift_01.png","textinput_qwerty_icon_shift_01.png"}, {"textinput_qwerty_icon_shift_03.png","textinput_qwerty_icon_shift_02.png","textinput_qwerty_icon_shift_01.png"}},\r
+               _BGImg_ {{"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_function.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_function.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_function.png","textinput_qwerty_button_nml.png"}},\r
+               1,\r
+               _KeyVal_ {{""},{""},{""}},\r
+               _KeyEvt_ {{UD_MVK_SHIFT},{UD_MVK_SHIFT},{UD_MVK_SHIFT}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 4x2 */\r
+               2,\r
+               _Label_ {{"z","/"},{"Z","/"},{"Z","/"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"z"},{"Z"},{"Z"}},\r
+               _KeyEvt_ {{MVK_z},{MVK_Z},{MVK_Z}},\r
+               "/",\r
+               MVK_slash,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 4x3 */\r
+               2,\r
+               _Label_ {{"x","'"},{"X","'"},{"X","'"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"x"},{"X"},{"X"}},\r
+               _KeyEvt_ {{MVK_x},{MVK_X},{MVK_X}},\r
+               "'",\r
+               MVK_quoteright,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 4x4 */\r
+               2,\r
+               _Label_ {{"c","\""},{"C","\""},{"C","\""}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"c"},{"C"},{"C"}},\r
+               _KeyEvt_ {{MVK_c},{MVK_C},{MVK_C}},\r
+               "\"",\r
+               MVK_quotedbl,\r
+               FALSE,\r
+               {{"c","\xc3\xa7","'"},{"C","\xc3\x87","'"},{"C","\xc3\x87","'"}}\r
+       },\r
+       {\r
+               USED, /* 4x5 */\r
+               2,\r
+               _Label_ {{"v","."},{"V","."},{"V","."}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"v"},{"V"},{"V"}},\r
+               _KeyEvt_ {{MVK_v},{MVK_V},{MVK_V}},\r
+               ".",\r
+               MVK_period,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 4x6 */\r
+               2,\r
+               _Label_ {{"b",","},{"B",","},{"B",","}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"b"},{"B"},{"B"}},\r
+               _KeyEvt_ {{MVK_b},{MVK_B},{MVK_B}},\r
+               ",",\r
+               MVK_comma,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 4x7 */\r
+               2,\r
+               _Label_ {{"n","?"},{"N","?"},{"N","?"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"n"},{"N"},{"N"}},\r
+               _KeyEvt_ {{MVK_n},{MVK_N},{MVK_N}},\r
+               "?",\r
+               MVK_question,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 4x8 */\r
+               2,\r
+               _Label_ {{"m","!"},{"M","!"},{"M","!"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"m"},{"M"},{"M"}},\r
+               _KeyEvt_ {{MVK_m},{MVK_M},{MVK_M}},\r
+               "!",\r
+               MVK_exclam,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 4x9 */\r
+               1,\r
+               _Label_ {{""},{""},{""}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"textinput_qwerty_icon_clear.png","textinput_qwerty_icon_clear.png"}, {"textinput_qwerty_icon_clear.png","textinput_qwerty_icon_clear.png"}, {"textinput_qwerty_icon_clear.png","textinput_qwerty_icon_clear.png"}},\r
+               _BGImg_ {{"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_function.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_function.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}},\r
+               1,\r
+               _KeyVal_ {{""},{""},{""}},\r
+               _KeyEvt_{{MVK_BackSpace},{MVK_BackSpace},{MVK_BackSpace}},\r
+               "",\r
+               0,\r
+               TRUE,\r
+       },\r
+\r
+\r
+       /* Fifth line*/\r
+\r
+       {\r
+               USED, /* 5x1 */\r
+               1,\r
+               _Label_{{"EN"},{"EN"},{"EN"}},\r
+               LABEL_PROPERTIES_QTY_BOTTOM_LINE_IMAGE_TYPE,\r
+               _LabelImg_{{"language_icon_port.png","language_icon_port.png"}, {"language_icon_port.png","language_icon_port.png"}, {"language_icon_port.png","language_icon_port.png"}},\r
+               _BGImg_{{"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_function.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_function.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_function.png"}},\r
+               1,\r
+               _KeyVal_{{""},{""},{""}},\r
+               _KeyEvt_ {{UD_MVK_LANG_CHANGE},{UD_MVK_LANG_CHANGE},{UD_MVK_LANG_CHANGE}},\r
+               "OptionWindow",\r
+               UD_MVK_OPTION_WINDOW,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 5x2 */\r
+               1,\r
+               _Label_{{""},{""},{""}},\r
+               LABEL_PROPERTIES_QTY_BOTTOM_LINE_TYPE,\r
+               _LabelImg_ {{"symbol_icon_port.png","symbol_icon_port.png"}, {"symbol_icon_port.png","symbol_icon_port.png"}, {"symbol_icon_port.png","symbol_icon_port.png"}},\r
+               _BGImg_{{"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_function.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_function.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_function.png"}},\r
+               1,\r
+               _KeyVal_{{""},{""},{""}},\r
+               _KeyEvt_ {{UD_MVK_SYM},{UD_MVK_SYM},{UD_MVK_SYM}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+\r
+       /* Default SubLayout */\r
+       // {\r
+       {\r
+               USED, /* 4x3 */\r
+               1,\r
+               _Label_{{""},{""},{""}},\r
+               LABEL_PROPERTIES_QTY_SPACE_KEY_TYPE,\r
+               _LabelImg_ {{"textinput_icon_space.png","textinput_icon_space_press.png"}, {"textinput_icon_space.png","textinput_icon_space_press.png"}, {"textinput_icon_space.png","textinput_icon_space_press.png"}},\r
+               _BGImg_{{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_{{""},{""},{""}},\r
+               _KeyEvt_{{MVK_space},{MVK_space},{MVK_space}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 4x4 */\r
+               3,\r
+        _Label_{{".",""}, {".",""}, {".",""}},\r
+               LABEL_PROPERTIES_QTY_BOTTOM_LINE_TYPE,\r
+        _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_{{"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png"}},\r
+               1,\r
+               _KeyVal_{{""},{""},{""}},\r
+        _KeyEvt_ {{MVK_period},{MVK_period},{MVK_period}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       // }\r
+       /* WithVoice SubLayout */\r
+       // {\r
+       {\r
+               USED, /* 4x3 */\r
+               1,\r
+               _Label_{{""},{""},{""}},\r
+               LABEL_PROPERTIES_QTY_BOTTOM_LINE_TYPE,\r
+               _LabelImg_ {{"camera_qwerty_kor-moa_port.png","camera_qwerty_kor-moa_port.png","camera_qwerty_kor-moa_port.png"}, {"camera_qwerty_kor-moa_port.png","camera_qwerty_kor-moa_port.png","camera_qwerty_kor-moa_port.png"}, {"camera_qwerty_kor-moa_port.png","camera_qwerty_kor-moa_port.png","camera_qwerty_kor-moa_port.png"}},\r
+               _BGImg_{{"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_function.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_function.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_function.png"}},\r
+               1,\r
+               _KeyVal_{{""},{""},{""}},\r
+               _KeyEvt_ {{0},{0},{0}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 4x4 */\r
+               1,\r
+               _Label_{{""},{""},{""}},\r
+               LABEL_PROPERTIES_QTY_SPACE_KEY_TYPE,\r
+               _LabelImg_ {{"textinput_icon_space.png","textinput_icon_space_press.png"}, {"textinput_icon_space.png","textinput_icon_space_press.png"}, {"textinput_icon_space.png","textinput_icon_space_press.png"}},\r
+               _BGImg_{{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_{{""},{""},{""}},\r
+               _KeyEvt_{{MVK_space},{MVK_space},{MVK_space}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 4x5 */\r
+               3,\r
+        _Label_{{".",""}, {".",""}, {".",""}},\r
+               LABEL_PROPERTIES_QTY_BOTTOM_LINE_TYPE,\r
+        _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_{{"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png"}},\r
+               1,\r
+               _KeyVal_{{""},{""},{""}},\r
+        _KeyEvt_ {{MVK_period},{MVK_period},{MVK_period}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       // }\r
+       /* URL SubLayout */\r
+       // {\r
+       {\r
+               USED, /* 4x3 */\r
+               1,\r
+               _Label_{{""},{""},{""}},\r
+               LABEL_PROPERTIES_QTY_SPACE_KEY_TYPE,\r
+               _LabelImg_ {{"textinput_icon_space.png","textinput_icon_space_press.png"}, {"textinput_icon_space.png","textinput_icon_space_press.png"}, {"textinput_icon_space.png","textinput_icon_space_press.png"}},\r
+               _BGImg_{{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_{{""},{""},{""}},\r
+               _KeyEvt_{{MVK_space},{MVK_space},{MVK_space}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 4x4 */\r
+               1,\r
+               _Label_{{"/"},{"/"},{"/"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_{{" "," "}, {" "," "}, {" "," "}},\r
+               _BGImg_{{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}},\r
+               1,\r
+               _KeyVal_{{"/"},{"/"},{"/"}},\r
+               _KeyEvt_ {{MVK_slash},{MVK_slash},{MVK_slash}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 4x5 */\r
+               1,\r
+               _Label_{{"www."},{"www."},{"www."}},\r
+               LABEL_PROPERTIES_QTY_WWW_TYPE,\r
+               _LabelImg_{{" "," "}, {" "," "}, {" "," "}},\r
+               _BGImg_{{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}},\r
+               1,\r
+               _KeyVal_{{"www."},{"www."},{"www."}},\r
+               _KeyEvt_ {{0},{0},{0}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 4x6 */\r
+               3,\r
+               _Label_{{".",""}, {".",""}, {".",""}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_{{" "," "}, {" "," "}, {" "," "}},\r
+               _BGImg_{{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}},\r
+               1,\r
+               _KeyVal_{{"."},{"."},{"."}},\r
+               _KeyEvt_ {{MVK_period},{MVK_period},{MVK_period}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       // }\r
+       /* Email SubLayout */\r
+       // {\r
+       {\r
+               USED, /* 4x3 */\r
+               1,\r
+               _Label_{{""},{""},{""}},\r
+               LABEL_PROPERTIES_QTY_SPACE_KEY_TYPE,\r
+               _LabelImg_ {{"textinput_icon_space.png","textinput_icon_space_press.png"}, {"textinput_icon_space.png","textinput_icon_space_press.png"}, {"textinput_icon_space.png","textinput_icon_space_press.png"}},\r
+               _BGImg_{{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_{{""},{""},{""}},\r
+               _KeyEvt_{{MVK_space},{MVK_space},{MVK_space}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 4x4 */\r
+               1,\r
+               _Label_{{"@"},{"@"},{"@"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_{{" "," "}, {" "," "}, {" "," "}},\r
+               _BGImg_{{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}},\r
+               1,\r
+               _KeyVal_{{"@"},{"@"},{"@"}},\r
+               _KeyEvt_ {{MVK_at},{MVK_at},{MVK_at}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 4x5 */\r
+               1,\r
+               _Label_{{".com"},{".com"},{".com"}},\r
+               LABEL_PROPERTIES_QTY_WWW_TYPE,\r
+               _LabelImg_{{" "," "}, {" "," "}, {" "," "}},\r
+               _BGImg_{{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}},\r
+               1,\r
+               _KeyVal_{{".com"},{".com"},{".com"}},\r
+               _KeyEvt_ {{0},{0},{0}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 4x6 */\r
+               3,\r
+               _Label_{{".",""}, {".",""}, {".",""}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_{{" "," "}, {" "," "}, {" "," "}},\r
+               _BGImg_{{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}},\r
+               1,\r
+               _KeyVal_{{"."},{"."},{"."}},\r
+               _KeyEvt_ {{MVK_period},{MVK_period},{MVK_period}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       // }\r
+\r
+       {\r
+               USED, /* 4x5 */\r
+               1,\r
+               _Label_ {{""},{""},{""}},\r
+               LABEL_PROPERTIES_QTY_BOTTOM_LINE_TYPE,\r
+               _LabelImg_ {{"textinput_qwerty_icon_enter.png","textinput_qwerty_icon_enter.png","textinput_qwerty_icon_enter_disabled.png"}, {"textinput_qwerty_icon_enter.png","textinput_qwerty_icon_enter.png","textinput_qwerty_icon_enter_disabled.png"}, {"textinput_qwerty_icon_enter.png","textinput_qwerty_icon_enter.png","textinput_qwerty_icon_enter_disabled.png"}},\r
+               _BGImg_ {{"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_function.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_function.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}},\r
+               1,\r
+               _KeyVal_ {{""},{""},{""}},\r
+               _KeyEvt_{{MVK_Return},{MVK_Return},{MVK_Return}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+\r
+       {NOT_USED,},\r
+}\r
+#endif\r
+\r
+\r
+\r
diff --git a/res/mcfresource-port-qty-french.h b/res/mcfresource-port-qty-french.h
new file mode 100755 (executable)
index 0000000..72151ea
--- /dev/null
@@ -0,0 +1,769 @@
+/*
+ * Copyright 2012  Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.tizenopensource.org/license
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+
+#ifdef KEY_CONFIGURE_PHASE\r
+{\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CONTROL, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CONTROL, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+\r
+\r
+       /*option*/      {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_MODECHANGE, POPUP_TYPE_CONTEXT_POPUP, FALSE, FALSE, TRUE, {NOT_USED,}},\r
+       /*abc*/{USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_MODECHANGE, POPUP_TYPE_BTN_LONGPRESS_POPUP_ONCE, FALSE, FALSE, TRUE, {INPUT_MODE_EMOTICON_POPUP, NOT_USED, NOT_USED, NOT_USED, NOT_USED, NOT_USED, NOT_USED}},\r
+       /* Default SubLayout */\r
+       // {\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CONTROL, POPUP_TYPE_NONE, FALSE, FALSE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_DIRECTION, KEY_TYPE_UNICODE, POPUP_TYPE_BTN_LONGPRESS_POPUP_ONCE, FALSE, FALSE, TRUE, {INPUT_MODE_PUNCTUATION_POPUP, NOT_USED, NOT_USED, NOT_USED, NOT_USED, NOT_USED, NOT_USED}},\r
+       // }\r
+       /* WithVoice SubLayout */\r
+       // {\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CONTROL, POPUP_TYPE_BTN_RELEASE_POPUP_ONCE, FALSE, FALSE, TRUE, {INPUT_MODE_SCENETEXT_POPUP, NOT_USED, NOT_USED, NOT_USED, NOT_USED, NOT_USED, NOT_USED}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CONTROL, POPUP_TYPE_NONE, FALSE, FALSE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_DIRECTION, KEY_TYPE_UNICODE, POPUP_TYPE_BTN_LONGPRESS_POPUP_ONCE, FALSE, FALSE, TRUE, {INPUT_MODE_PUNCTUATION_POPUP, NOT_USED, NOT_USED, NOT_USED, NOT_USED, NOT_USED, NOT_USED}},\r
+       // }\r
+       /* URL SubLayout */\r
+       // {\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CONTROL, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, CUSTOMID_WWWCOM, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_BTN_LONGPRESS_POPUP_ONCE, TRUE, TRUE, TRUE, {INPUT_MODE_URL_POPUP, NOT_USED, NOT_USED, NOT_USED, NOT_USED, NOT_USED, NOT_USED}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       // }\r
+       /* Email SubLayout */\r
+       // {\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CONTROL, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_BTN_LONGPRESS_POPUP_ONCE, TRUE, TRUE, TRUE, {INPUT_MODE_URL_POPUP, NOT_USED, NOT_USED, NOT_USED, NOT_USED, NOT_USED, NOT_USED}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       // }\r
+       /*enter*/{USED, CUSTOMID_ENTER, BUTTON_TYPE_NORMAL, KEY_TYPE_CONTROL, POPUP_TYPE_NONE, FALSE, FALSE, TRUE, {NOT_USED,}},\r
+\r
+       {NOT_USED,},\r
+}\r
+#endif\r
+\r
+#ifdef KEY_PROPERTIES_PHASE\r
+{\r
+       /* fValid, labelCnt, label, labelPropId, imgPath, keyValueCnt, keyValue, keyEvent, longKeyValue, longKeyEvent, userLabel,  userKeyValue,  userKeyEvent, */\r
+       /* Second Line */\r
+       {\r
+               USED, /* 2x1 */\r
+               1,\r
+               _Label_ {{"a"},{"A"},{"A"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"a"},{"A"},{"A"}},\r
+               _KeyEvt_ {{MVK_q},{MVK_Q},{MVK_Q}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+               {{"a","\xc3\xa0","\xc3\xa2","\xc3\xa6"},{"A","\xc3\x80","\xc3\x82","\xc3\x86"},{"A","\xc3\x80","\xc3\x82","\xc3\x86"}},\r
+               FALSE,\r
+               0,\r
+               MCF_MULTI_TOUCH_TYPE_EXCLUSIVE,\r
+               NOT_USED,\r
+               {{"a","..."},{"A","..."},{"A","..."}},\r
+       },\r
+       {\r
+               USED, /* 2x2 */\r
+               1,\r
+               _Label_ {{"z"},{"Z"},{"Z"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"z"},{"Z"},{"Z"}},\r
+               _KeyEvt_ {{MVK_w},{MVK_W},{MVK_W}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 2x3 */\r
+               1,\r
+               _Label_ {{"e"},{"E"},{"E"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"e"},{"E"},{"E"}},\r
+               _KeyEvt_ {{MVK_e},{MVK_E},{MVK_E}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+               {{"e","\xc3\xa9","\xc3\xa8","\xc3\xaa","\xc3\xab"},{"E","\xc3\x89","\xc3\x88","\xc3\x8a","\xc3\x8b"},{"E","\xc3\x89","\xc3\x88","\xc3\x8a","\xc3\x8b"}},\r
+               FALSE,\r
+               0,\r
+               MCF_MULTI_TOUCH_TYPE_EXCLUSIVE,\r
+               NOT_USED,\r
+               {{"e","..."},{"E","..."},{"E","..."}},\r
+       },\r
+       {\r
+               USED, /* 2x4 */\r
+               1,\r
+               _Label_ {{"r"},{"R"},{"R"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"r"},{"R"},{"R"}},\r
+               _KeyEvt_ {{MVK_r},{MVK_R},{MVK_R}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 2x5 */\r
+               1,\r
+               _Label_ {{"t"},{"T"},{"T"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"t"},{"T"},{"T"}},\r
+               _KeyEvt_ {{MVK_t},{MVK_T},{MVK_T}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 2x6 */\r
+               1,\r
+               _Label_ {{"y"},{"Y"},{"Y"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"y"},{"Y"},{"Y"}},\r
+               _KeyEvt_ {{MVK_y},{MVK_Y},{MVK_Y}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+               {{"y","\xc3\xbf"},{"Y","\xc5\xb8"},{"Y","\xc5\xb8"}},\r
+               FALSE,\r
+               0,\r
+               MCF_MULTI_TOUCH_TYPE_EXCLUSIVE,\r
+               NOT_USED,\r
+               {{"y","..."},{"Y","..."},{"Y","..."}},\r
+       },\r
+       {\r
+               USED, /* 2x7 */\r
+               1,\r
+               _Label_ {{"u"},{"U"},{"U"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"u"},{"U"},{"U"}},\r
+               _KeyEvt_ {{MVK_u},{MVK_U},{MVK_U}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+               {{"u","\xc3\xb9","\xc3\xbb","\xc3\xbc"},{"U","\xc3\x99","\xc3\x9b","\xc3\x9c"},{"U","\xc3\x99","\xc3\x9b","\xc3\x9c"}},\r
+               FALSE,\r
+               0,\r
+               MCF_MULTI_TOUCH_TYPE_EXCLUSIVE,\r
+               NOT_USED,\r
+               {{"u","..."},{"U","..."},{"U","..."}},\r
+       },\r
+       {\r
+               USED, /* 2x8 */\r
+               1,\r
+               _Label_ {{"i"},{"I"},{"I"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"i"},{"I"},{"I"}},\r
+               _KeyEvt_ {{MVK_i},{MVK_I},{MVK_I}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+               {{"i","\xc3\xae","\xc3\xaf"},{"I","\xc3\x8e","\xc3\x8f"},{"I","\xc3\x8e","\xc3\x8f"}},\r
+               FALSE,\r
+               0,\r
+               MCF_MULTI_TOUCH_TYPE_EXCLUSIVE,\r
+               NOT_USED,\r
+               {{"i","..."},{"I","..."},{"I","..."}},\r
+       },\r
+       {\r
+               USED, /* 2x9 */\r
+               1,\r
+               _Label_ {{"o"},{"O"},{"O"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"o"},{"O"},{"O"}},\r
+               _KeyEvt_ {{MVK_o},{MVK_O},{MVK_O}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+               {{"o","\xc3\xb4","\xc5\x93"},{"O","\xc3\x94","\xc5\x92"},{"O","\xc3\x94","\xc5\x92"}},\r
+               FALSE,\r
+               0,\r
+               MCF_MULTI_TOUCH_TYPE_EXCLUSIVE,\r
+               NOT_USED,\r
+               {{"o","..."},{"O","..."},{"O","..."}},\r
+       },\r
+       {\r
+               USED, /* 2x10 */\r
+               1,\r
+               _Label_ {{"p"},{"P"},{"P"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"p"},{"P"},{"P"}},\r
+               _KeyEvt_ {{MVK_p},{MVK_P},{MVK_P}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+\r
+\r
+       /* Third Line */\r
+       {\r
+               USED, /* 3x1 */\r
+               1,\r
+               _Label_ {{"q"},{"Q"},{"Q"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"q"},{"Q"},{"Q"}},\r
+               _KeyEvt_ {{MVK_a},{MVK_A},{MVK_A}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 3x2 */\r
+               1,\r
+               _Label_ {{"s"},{"S"},{"S"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"s"},{"S"},{"S"}},\r
+               _KeyEvt_ {{MVK_s},{MVK_S},{MVK_S}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 3x3 */\r
+               1,\r
+               _Label_ {{"d"},{"D"},{"D"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"d"},{"D"},{"D"}},\r
+               _KeyEvt_ {{MVK_d},{MVK_D},{MVK_D}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 3x4 */\r
+               1,\r
+               _Label_ {{"f"},{"F"},{"F"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"f"},{"F"},{"F"}},\r
+               _KeyEvt_ {{MVK_f},{MVK_F},{MVK_F}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 3x5 */\r
+               1,\r
+               _Label_ {{"g"},{"G"},{"G"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"g"},{"G"},{"G"}},\r
+               _KeyEvt_ {{MVK_g},{MVK_G},{MVK_G}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 3x6 */\r
+               1,\r
+               _Label_ {{"h"},{"H"},{"H"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"h"},{"H"},{"H"}},\r
+               _KeyEvt_ {{MVK_h},{MVK_H},{MVK_H}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 3x7 */\r
+               1,\r
+               _Label_ {{"j"},{"J"},{"J"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"j"},{"J"},{"J"}},\r
+               _KeyEvt_ {{MVK_j},{MVK_J},{MVK_J}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 3x8 */\r
+               1,\r
+               _Label_ {{"k"},{"K"},{"K"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"k"},{"K"},{"K"}},\r
+               _KeyEvt_ {{MVK_k},{MVK_K},{MVK_K}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 3x9 */\r
+               1,\r
+               _Label_ {{"l"},{"L"},{"L"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"l"},{"L"},{"L"}},\r
+               _KeyEvt_ {{MVK_l},{MVK_L},{MVK_L}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 3x10 */\r
+               1,\r
+               _Label_ {{"m"},{"M"},{"M"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"m"},{"M"},{"M"}},\r
+               _KeyEvt_ {{MVK_z},{MVK_Z},{MVK_Z}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+\r
+       /* Fourth Line */\r
+       {\r
+               USED, /* 4x1 */\r
+               1,\r
+               _Label_ {{""},{""},{""}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"textinput_qwerty_icon_shift_01.png","textinput_qwerty_icon_shift_02.png","textinput_qwerty_icon_shift_01.png"}, {"textinput_qwerty_icon_shift_02.png","textinput_qwerty_icon_shift_01.png","textinput_qwerty_icon_shift_01.png"}, {"textinput_qwerty_icon_shift_03.png","textinput_qwerty_icon_shift_02.png","textinput_qwerty_icon_shift_01.png"}},\r
+               _BGImg_ {{"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_function.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_function.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_function.png","textinput_qwerty_button_nml.png"}},\r
+               1,\r
+               _KeyVal_ {{""},{""},{""}},\r
+               _KeyEvt_ {{UD_MVK_SHIFT},{UD_MVK_SHIFT},{UD_MVK_SHIFT}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 4x2 */\r
+               1,\r
+               _Label_ {{"w"},{"W"},{"W"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"w"},{"W"},{"W"}},\r
+               _KeyEvt_ {{MVK_x},{MVK_X},{MVK_X}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 4x3 */\r
+               1,\r
+               _Label_ {{"x"},{"X"},{"X"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"x"},{"X"},{"X"}},\r
+               _KeyEvt_ {{MVK_c},{MVK_C},{MVK_C}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 4x4 */\r
+               1,\r
+               _Label_ {{"c"},{"C"},{"C"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"c"},{"C"},{"C"}},\r
+               _KeyEvt_ {{MVK_v},{MVK_V},{MVK_V}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+               {{"c","\xc3\xa7"},{"C","\xc3\x87"},{"C","\xc3\x87"}}\r
+       },\r
+       {\r
+               USED, /* 4x5 */\r
+               1,\r
+               _Label_ {{"v"},{"V"},{"V"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"v"},{"V"},{"V"}},\r
+               _KeyEvt_ {{MVK_b},{MVK_B},{MVK_B}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 4x6 */\r
+               1,\r
+               _Label_ {{"b"},{"B"},{"B"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"b"},{"B"},{"B"}},\r
+               _KeyEvt_ {{MVK_n},{MVK_N},{MVK_N}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 4x7 */\r
+               1,\r
+               _Label_ {{"n"},{"N"},{"N"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"n"},{"N"},{"N"}},\r
+               _KeyEvt_ {{MVK_m},{MVK_M},{MVK_M}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 4x8 */\r
+               1,\r
+               _Label_ {{""},{""},{""}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"textinput_french_icon_clear.png","textinput_french_icon_clear.png"}, {"textinput_french_icon_clear.png","textinput_french_icon_clear.png"}, {"textinput_french_icon_clear.png","textinput_french_icon_clear.png"}},\r
+               _BGImg_ {{"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_function.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_function.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}},\r
+               1,\r
+               _KeyVal_ {{""},{""},{""}},\r
+               _KeyEvt_{{MVK_BackSpace},{MVK_BackSpace},{MVK_BackSpace}},\r
+               "",\r
+               0,\r
+               TRUE,\r
+       },\r
+       /* Fifth line*/\r
+\r
+       {\r
+               USED, /* 5x1 */\r
+               1,\r
+               _Label_{{"FR"},{"FR"},{"FR"}},\r
+               LABEL_PROPERTIES_QTY_BOTTOM_LINE_IMAGE_TYPE,\r
+               _LabelImg_{{"language_icon_port.png","language_icon_port.png"}, {"language_icon_port.png","language_icon_port.png"}, {"language_icon_port.png","language_icon_port.png"}},\r
+               _BGImg_{{"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_function.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_function.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_function.png","textinput_qwerty_button_nml.png"}},\r
+               1,\r
+               _KeyVal_{{""},{""},{""}},\r
+               _KeyEvt_ {{UD_MVK_LANG_CHANGE},{UD_MVK_LANG_CHANGE},{UD_MVK_LANG_CHANGE}},\r
+               "OptionWindow",\r
+               UD_MVK_OPTION_WINDOW,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 5x2 */\r
+               1,\r
+               _Label_{{""},{""},{""}},\r
+               LABEL_PROPERTIES_QTY_BOTTOM_LINE_TYPE,\r
+               _LabelImg_ {{"symbol_icon_port.png","symbol_icon_port.png"}, {"symbol_icon_port.png","symbol_icon_port.png"}, {"symbol_icon_port.png","symbol_icon_port.png"}},\r
+               _BGImg_{{"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_function.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_function.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_function.png","textinput_qwerty_button_nml.png"}},\r
+               1,\r
+               _KeyVal_{{""},{""},{""}},\r
+               _KeyEvt_ {{UD_MVK_SYM},{UD_MVK_SYM},{UD_MVK_SYM}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+\r
+       /* Default SubLayout */\r
+       // {\r
+       {\r
+               USED, /* 4x3 */\r
+               1,\r
+               _Label_{{""},{""},{""}},\r
+               LABEL_PROPERTIES_QTY_SPACE_KEY_TYPE,\r
+               _LabelImg_ {{"textinput_icon_space.png","textinput_icon_space_press.png"}, {"textinput_icon_space.png","textinput_icon_space_press.png"}, {"textinput_icon_space.png","textinput_icon_space_press.png"}},\r
+               _BGImg_{{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_{{""},{""},{""}},\r
+               _KeyEvt_{{MVK_space},{MVK_space},{MVK_space}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 4x4 */\r
+               3,\r
+        _Label_{{".",""}, {".",""}, {".",""}},\r
+               LABEL_PROPERTIES_QTY_BOTTOM_LINE_TYPE,\r
+        _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_{{"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png"}},\r
+               1,\r
+               _KeyVal_{{""},{""},{""}},\r
+        _KeyEvt_ {{MVK_period},{MVK_period},{MVK_period}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       // }\r
+       /* WithVoice SubLayout */\r
+       // {\r
+       {\r
+               USED, /* 4x3 */\r
+               1,\r
+               _Label_{{""},{""},{""}},\r
+               LABEL_PROPERTIES_QTY_BOTTOM_LINE_TYPE,\r
+               _LabelImg_ {{"camera_qwerty_kor-moa_port.png","camera_qwerty_kor-moa_port.png","camera_qwerty_kor-moa_port.png"}, {"camera_qwerty_kor-moa_port.png","camera_qwerty_kor-moa_port.png","camera_qwerty_kor-moa_port.png"}, {"camera_qwerty_kor-moa_port.png","camera_qwerty_kor-moa_port.png","camera_qwerty_kor-moa_port.png"}},\r
+               _BGImg_{{"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_function.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_function.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_function.png"}},\r
+               1,\r
+               _KeyVal_{{""},{""},{""}},\r
+               _KeyEvt_ {{0},{0},{0}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 4x4 */\r
+               1,\r
+               _Label_{{""},{""},{""}},\r
+               LABEL_PROPERTIES_QTY_SPACE_KEY_TYPE,\r
+               _LabelImg_ {{"textinput_icon_space.png","textinput_icon_space_press.png"}, {"textinput_icon_space.png","textinput_icon_space_press.png"}, {"textinput_icon_space.png","textinput_icon_space_press.png"}},\r
+               _BGImg_{{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_{{""},{""},{""}},\r
+               _KeyEvt_{{MVK_space},{MVK_space},{MVK_space}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 4x5 */\r
+               3,\r
+        _Label_{{".",""}, {".",""}, {".",""}},\r
+               LABEL_PROPERTIES_QTY_BOTTOM_LINE_TYPE,\r
+        _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_{{"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png"}},\r
+               1,\r
+               _KeyVal_{{""},{""},{""}},\r
+        _KeyEvt_ {{MVK_period},{MVK_period},{MVK_period}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       // }\r
+       /* URL SubLayout */\r
+       // {\r
+       {\r
+               USED, /* 4x3 */\r
+               1,\r
+               _Label_{{""},{""},{""}},\r
+               LABEL_PROPERTIES_QTY_SPACE_KEY_TYPE,\r
+               _LabelImg_ {{"textinput_icon_space.png","textinput_icon_space_press.png"}, {"textinput_icon_space.png","textinput_icon_space_press.png"}, {"textinput_icon_space.png","textinput_icon_space_press.png"}},\r
+               _BGImg_{{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_{{""},{""},{""}},\r
+               _KeyEvt_{{MVK_space},{MVK_space},{MVK_space}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 4x4 */\r
+               1,\r
+               _Label_{{"/"},{"/"},{"/"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_{{" "," "}, {" "," "}, {" "," "}},\r
+               _BGImg_{{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}},\r
+               1,\r
+               _KeyVal_{{"/"},{"/"},{"/"}},\r
+               _KeyEvt_ {{MVK_slash},{MVK_slash},{MVK_slash}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 4x5 */\r
+               1,\r
+               _Label_{{"www."},{"www."},{"www."}},\r
+               LABEL_PROPERTIES_QTY_WWW_TYPE,\r
+               _LabelImg_{{" "," "}, {" "," "}, {" "," "}},\r
+               _BGImg_{{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}},\r
+               1,\r
+               _KeyVal_{{"www."},{"www."},{"www."}},\r
+               _KeyEvt_ {{0},{0},{0}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 4x6 */\r
+               3,\r
+               _Label_{{".",""}, {".",""}, {".",""}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_{{" "," "}, {" "," "}, {" "," "}},\r
+               _BGImg_{{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}},\r
+               1,\r
+               _KeyVal_{{"."},{"."},{"."}},\r
+               _KeyEvt_ {{MVK_period},{MVK_period},{MVK_period}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       // }\r
+       /* Email SubLayout */\r
+       // {\r
+       {\r
+               USED, /* 4x3 */\r
+               1,\r
+               _Label_{{""},{""},{""}},\r
+               LABEL_PROPERTIES_QTY_SPACE_KEY_TYPE,\r
+               _LabelImg_ {{"textinput_icon_space.png","textinput_icon_space_press.png"}, {"textinput_icon_space.png","textinput_icon_space_press.png"}, {"textinput_icon_space.png","textinput_icon_space_press.png"}},\r
+               _BGImg_{{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_{{""},{""},{""}},\r
+               _KeyEvt_{{MVK_space},{MVK_space},{MVK_space}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 4x4 */\r
+               1,\r
+               _Label_{{"@"},{"@"},{"@"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_{{" "," "}, {" "," "}, {" "," "}},\r
+               _BGImg_{{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}},\r
+               1,\r
+               _KeyVal_{{"@"},{"@"},{"@"}},\r
+               _KeyEvt_ {{MVK_at},{MVK_at},{MVK_at}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 4x5 */\r
+               1,\r
+               _Label_{{".com"},{".com"},{".com"}},\r
+               LABEL_PROPERTIES_QTY_WWW_TYPE,\r
+               _LabelImg_{{" "," "}, {" "," "}, {" "," "}},\r
+               _BGImg_{{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}},\r
+               1,\r
+               _KeyVal_{{".com"},{".com"},{".com"}},\r
+               _KeyEvt_ {{0},{0},{0}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 4x6 */\r
+               3,\r
+               _Label_{{".",""}, {".",""}, {".",""}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_{{" "," "}, {" "," "}, {" "," "}},\r
+               _BGImg_{{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}},\r
+               1,\r
+               _KeyVal_{{"."},{"."},{"."}},\r
+               _KeyEvt_ {{MVK_period},{MVK_period},{MVK_period}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       // }\r
+\r
+       {\r
+               USED, /* 4x5 */\r
+               1,\r
+               _Label_ {{""},{""},{""}},\r
+               LABEL_PROPERTIES_QTY_BOTTOM_LINE_TYPE,\r
+               _LabelImg_ {{"textinput_qwerty_icon_enter.png","textinput_qwerty_icon_enter.png","textinput_qwerty_icon_enter_disabled.png"}, {"textinput_qwerty_icon_enter.png","textinput_qwerty_icon_enter.png","textinput_qwerty_icon_enter_disabled.png"}, {"textinput_qwerty_icon_enter.png","textinput_qwerty_icon_enter.png","textinput_qwerty_icon_enter_disabled.png"}},\r
+               _BGImg_ {{"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_function.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_function.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}},\r
+               1,\r
+               _KeyVal_ {{""},{""},{""}},\r
+               _KeyEvt_{{MVK_Return},{MVK_Return},{MVK_Return}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+\r
+       {NOT_USED,},\r
+}\r
+#endif\r
+\r
+\r
diff --git a/res/mcfresource-port-qty-german.h b/res/mcfresource-port-qty-german.h
new file mode 100755 (executable)
index 0000000..5b4309e
--- /dev/null
@@ -0,0 +1,755 @@
+/*
+ * Copyright 2012  Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.tizenopensource.org/license
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+\r
+#ifdef KEY_CONFIGURE_PHASE\r
+{\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CONTROL, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CONTROL, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+\r
+       /*option*/      {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_MODECHANGE, POPUP_TYPE_CONTEXT_POPUP, FALSE, FALSE, TRUE, {NOT_USED,}},\r
+       /*abc*/{USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_MODECHANGE, POPUP_TYPE_BTN_LONGPRESS_POPUP_ONCE, FALSE, FALSE, TRUE, {INPUT_MODE_EMOTICON_POPUP, NOT_USED, NOT_USED, NOT_USED, NOT_USED, NOT_USED, NOT_USED}},\r
+       /* Default SubLayout */\r
+       // {\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CONTROL, POPUP_TYPE_NONE, FALSE, FALSE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_DIRECTION, KEY_TYPE_UNICODE, POPUP_TYPE_BTN_LONGPRESS_POPUP_ONCE, FALSE, FALSE, TRUE, {INPUT_MODE_PUNCTUATION_POPUP, NOT_USED, NOT_USED, NOT_USED, NOT_USED, NOT_USED, NOT_USED}},\r
+       // }\r
+       /* WithVoice SubLayout */\r
+       // {\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CONTROL, POPUP_TYPE_BTN_RELEASE_POPUP_ONCE, FALSE, FALSE, TRUE, {INPUT_MODE_SCENETEXT_POPUP, NOT_USED, NOT_USED, NOT_USED, NOT_USED, NOT_USED, NOT_USED}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CONTROL, POPUP_TYPE_NONE, FALSE, FALSE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_DIRECTION, KEY_TYPE_UNICODE, POPUP_TYPE_BTN_LONGPRESS_POPUP_ONCE, FALSE, FALSE, TRUE, {INPUT_MODE_PUNCTUATION_POPUP, NOT_USED, NOT_USED, NOT_USED, NOT_USED, NOT_USED, NOT_USED}},\r
+       // }\r
+       /* URL SubLayout */\r
+       // {\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CONTROL, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, CUSTOMID_WWWCOM, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_BTN_LONGPRESS_POPUP_ONCE, TRUE, TRUE, TRUE, {INPUT_MODE_URL_POPUP, NOT_USED, NOT_USED, NOT_USED, NOT_USED, NOT_USED, NOT_USED}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       // }\r
+       /* Email SubLayout */\r
+       // {\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CONTROL, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_BTN_LONGPRESS_POPUP_ONCE, TRUE, TRUE, TRUE, {INPUT_MODE_URL_POPUP, NOT_USED, NOT_USED, NOT_USED, NOT_USED, NOT_USED, NOT_USED}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       // }\r
+       /*enter*/{USED, CUSTOMID_ENTER, BUTTON_TYPE_NORMAL, KEY_TYPE_CONTROL, POPUP_TYPE_NONE, FALSE, FALSE, TRUE, {NOT_USED,}},\r
+\r
+       {NOT_USED,},\r
+}\r
+#endif\r
+\r
+#ifdef KEY_PROPERTIES_PHASE\r
+{\r
+       /* fValid, labelCnt, label, labelPropId, imgPath, keyValueCnt, keyValue, keyEvent, longKeyValue, longKeyEvent, userLabel,  userKeyValue,  userKeyEvent, */\r
+       /* Second Line */\r
+       {\r
+               USED, /* 2x1 */\r
+               1,\r
+               _Label_ {{"q"},{"Q"},{"Q"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"q"},{"Q"},{"Q"}},\r
+               _KeyEvt_ {{MVK_q},{MVK_Q},{MVK_Q}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 2x2 */\r
+               1,\r
+               _Label_ {{"w"},{"W"},{"W"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"w"},{"W"},{"W"}},\r
+               _KeyEvt_ {{MVK_w},{MVK_W},{MVK_W}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 2x3 */\r
+               1,\r
+               _Label_ {{"e"},{"E"},{"E"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"e"},{"E"},{"E"}},\r
+               _KeyEvt_ {{MVK_e},{MVK_E},{MVK_E}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 2x4 */\r
+               1,\r
+               _Label_ {{"r"},{"R"},{"R"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"r"},{"R"},{"R"}},\r
+               _KeyEvt_ {{MVK_r},{MVK_R},{MVK_R}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 2x5 */\r
+               1,\r
+               _Label_ {{"t"},{"T"},{"T"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"t"},{"T"},{"T"}},\r
+               _KeyEvt_ {{MVK_t},{MVK_T},{MVK_T}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 2x6 */\r
+               1,\r
+               _Label_ {{"z"},{"Z"},{"Z"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"z"},{"Z"},{"Z"}},\r
+               _KeyEvt_ {{MVK_y},{MVK_Y},{MVK_Y}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 2x7 */\r
+               1,\r
+               _Label_ {{"u"},{"U"},{"U"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"u"},{"U"},{"U"}},\r
+               _KeyEvt_ {{MVK_u},{MVK_U},{MVK_U}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+               {{"u","\xc3\xbc"},{"U","\xc3\x9c"},{"U","\xc3\x9c"}},\r
+               FALSE,\r
+               0,\r
+               MCF_MULTI_TOUCH_TYPE_EXCLUSIVE,\r
+               NOT_USED,\r
+               {{"u","..."},{"U","..."},{"U","..."}},\r
+       },\r
+       {\r
+               USED, /* 2x8 */\r
+               1,\r
+               _Label_ {{"i"},{"I"},{"I"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"i"},{"I"},{"I"}},\r
+               _KeyEvt_ {{MVK_i},{MVK_I},{MVK_I}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 2x9 */\r
+               1,\r
+               _Label_ {{"o"},{"O"},{"O"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"o"},{"O"},{"O"}},\r
+               _KeyEvt_ {{MVK_o},{MVK_O},{MVK_O}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+               {{"o","\xc3\xb6"},{"O","\xc3\x96"},{"O","\xc3\x96"}},\r
+               FALSE,\r
+               0,\r
+               MCF_MULTI_TOUCH_TYPE_EXCLUSIVE,\r
+               NOT_USED,\r
+               {{"o","..."},{"O","..."},{"O","..."}},\r
+       },\r
+       {\r
+               USED, /* 2x10 */\r
+               1,\r
+               _Label_ {{"p"},{"P"},{"P"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"p"},{"P"},{"P"}},\r
+               _KeyEvt_ {{MVK_p},{MVK_P},{MVK_P}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+\r
+\r
+       /* Third Line */\r
+       {\r
+               USED, /* 3x1 */\r
+               1,\r
+               _Label_ {{"a"},{"A"},{"A"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"a"},{"A"},{"A"}},\r
+               _KeyEvt_ {{MVK_a},{MVK_A},{MVK_A}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+               {{"a","\xc3\xa4"},{"A","\xc3\x84"},{"A","\xc3\x84"}},\r
+               FALSE,\r
+               0,\r
+               MCF_MULTI_TOUCH_TYPE_EXCLUSIVE,\r
+               NOT_USED,\r
+               {{"a","..."},{"A","..."},{"A","..."}},\r
+       },\r
+       {\r
+               USED, /* 3x2 */\r
+               1,\r
+               _Label_ {{"s"},{"S"},{"S"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"s"},{"S"},{"S"}},\r
+               _KeyEvt_ {{MVK_s},{MVK_S},{MVK_S}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+               {{"s","\xc3\x9f"},{""},{""}},\r
+               FALSE,\r
+               0,\r
+               MCF_MULTI_TOUCH_TYPE_EXCLUSIVE,\r
+               NOT_USED,\r
+               {{"s","..."},{"S","..."},{"S","..."}},\r
+       },\r
+       {\r
+               USED, /* 3x3 */\r
+               1,\r
+               _Label_ {{"d"},{"D"},{"D"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"d"},{"D"},{"D"}},\r
+               _KeyEvt_ {{MVK_d},{MVK_D},{MVK_D}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 3x4 */\r
+               1,\r
+               _Label_ {{"f"},{"F"},{"F"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"f"},{"F"},{"F"}},\r
+               _KeyEvt_ {{MVK_f},{MVK_F},{MVK_F}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 3x5 */\r
+               1,\r
+               _Label_ {{"g"},{"G"},{"G"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"g"},{"G"},{"G"}},\r
+               _KeyEvt_ {{MVK_g},{MVK_G},{MVK_G}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 3x6 */\r
+               1,\r
+               _Label_ {{"h"},{"H"},{"H"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"h"},{"H"},{"H"}},\r
+               _KeyEvt_ {{MVK_h},{MVK_H},{MVK_H}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 3x7 */\r
+               1,\r
+               _Label_ {{"j"},{"J"},{"J"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"j"},{"J"},{"J"}},\r
+               _KeyEvt_ {{MVK_j},{MVK_J},{MVK_J}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 3x8 */\r
+               1,\r
+               _Label_ {{"k"},{"K"},{"K"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"k"},{"K"},{"K"}},\r
+               _KeyEvt_ {{MVK_k},{MVK_K},{MVK_K}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 3x9 */\r
+               1,\r
+               _Label_ {{"l"},{"L"},{"L"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"l"},{"L"},{"L"}},\r
+               _KeyEvt_ {{MVK_l},{MVK_L},{MVK_L}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+\r
+       /* Fourth Line */\r
+       {\r
+               USED, /* 4x1 */\r
+               1,\r
+               _Label_ {{""},{""},{""}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"textinput_qwerty_icon_shift_01.png","textinput_qwerty_icon_shift_02.png","textinput_qwerty_icon_shift_01.png"}, {"textinput_qwerty_icon_shift_02.png","textinput_qwerty_icon_shift_01.png","textinput_qwerty_icon_shift_01.png"}, {"textinput_qwerty_icon_shift_03.png","textinput_qwerty_icon_shift_02.png","textinput_qwerty_icon_shift_01.png"}},\r
+               _BGImg_ {{"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_function.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_function.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_function.png","textinput_qwerty_button_nml.png"}},\r
+               1,\r
+               _KeyVal_ {{""},{""},{""}},\r
+               _KeyEvt_ {{UD_MVK_SHIFT},{UD_MVK_SHIFT},{UD_MVK_SHIFT}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 4x2 */\r
+               1,\r
+               _Label_ {{"y"},{"Y"},{"Y"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"y"},{"Y"},{"Y"}},\r
+               _KeyEvt_ {{MVK_z},{MVK_Z},{MVK_Z}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 4x3 */\r
+               1,\r
+               _Label_ {{"x"},{"X"},{"X"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"x"},{"X"},{"X"}},\r
+               _KeyEvt_ {{MVK_x},{MVK_X},{MVK_X}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 4x4 */\r
+               1,\r
+               _Label_ {{"c"},{"C"},{"C"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"c"},{"C"},{"C"}},\r
+               _KeyEvt_ {{MVK_c},{MVK_C},{MVK_C}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 4x5 */\r
+               1,\r
+               _Label_ {{"v"},{"V"},{"V"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"v"},{"V"},{"V"}},\r
+               _KeyEvt_ {{MVK_v},{MVK_V},{MVK_V}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 4x6 */\r
+               1,\r
+               _Label_ {{"b"},{"B"},{"B"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"b"},{"B"},{"B"}},\r
+               _KeyEvt_ {{MVK_b},{MVK_B},{MVK_B}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 4x7 */\r
+               1,\r
+               _Label_ {{"n"},{"N"},{"N"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"n"},{"N"},{"N"}},\r
+               _KeyEvt_ {{MVK_n},{MVK_N},{MVK_N}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 4x8 */\r
+               1,\r
+               _Label_ {{"m"},{"M"},{"M"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"m"},{"M"},{"M"}},\r
+               _KeyEvt_ {{MVK_m},{MVK_M},{MVK_M}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 4x9 */\r
+               1,\r
+               _Label_ {{""},{""},{""}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"textinput_qwerty_icon_clear.png","textinput_qwerty_icon_clear.png"}, {"textinput_qwerty_icon_clear.png","textinput_qwerty_icon_clear.png"}, {"textinput_qwerty_icon_clear.png","textinput_qwerty_icon_clear.png"}},\r
+               _BGImg_ {{"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_function.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_function.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}},\r
+               1,\r
+               _KeyVal_ {{""},{""},{""}},\r
+               _KeyEvt_{{MVK_BackSpace},{MVK_BackSpace},{MVK_BackSpace}},\r
+               "",\r
+               0,\r
+               TRUE,\r
+       },\r
+       /* Fifth line*/\r
+\r
+       {\r
+               USED, /* 5x1 */\r
+               1,\r
+               _Label_{{"DE"},{"DE"},{"DE"}},\r
+               LABEL_PROPERTIES_QTY_BOTTOM_LINE_IMAGE_TYPE,\r
+               _LabelImg_{{"language_icon_port.png","language_icon_port.png"}, {"language_icon_port.png","language_icon_port.png"}, {"language_icon_port.png","language_icon_port.png"}},\r
+               _BGImg_{{"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_function.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_function.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_function.png","textinput_qwerty_button_nml.png"}},\r
+               1,\r
+               _KeyVal_{{""},{""},{""}},\r
+               _KeyEvt_ {{UD_MVK_LANG_CHANGE},{UD_MVK_LANG_CHANGE},{UD_MVK_LANG_CHANGE}},\r
+               "OptionWindow",\r
+               UD_MVK_OPTION_WINDOW,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 5x2 */\r
+               1,\r
+               _Label_{{""},{""},{""}},\r
+               LABEL_PROPERTIES_QTY_BOTTOM_LINE_TYPE,\r
+               _LabelImg_ {{"symbol_icon_port.png","symbol_icon_port.png"}, {"symbol_icon_port.png","symbol_icon_port.png"}, {"symbol_icon_port.png","symbol_icon_port.png"}},\r
+               _BGImg_{{"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_function.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_function.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_function.png","textinput_qwerty_button_nml.png"}},\r
+               1,\r
+               _KeyVal_{{""},{""},{""}},\r
+               _KeyEvt_ {{UD_MVK_SYM},{UD_MVK_SYM},{UD_MVK_SYM}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+\r
+       /* Default SubLayout */\r
+       // {\r
+       {\r
+               USED, /* 4x3 */\r
+               1,\r
+               _Label_{{""},{""},{""}},\r
+               LABEL_PROPERTIES_QTY_SPACE_KEY_TYPE,\r
+               _LabelImg_ {{"textinput_icon_space.png","textinput_icon_space_press.png"}, {"textinput_icon_space.png","textinput_icon_space_press.png"}, {"textinput_icon_space.png","textinput_icon_space_press.png"}},\r
+               _BGImg_{{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_{{""},{""},{""}},\r
+               _KeyEvt_{{MVK_space},{MVK_space},{MVK_space}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 4x4 */\r
+        3,\r
+        _Label_{{".",""}, {".",""}, {".",""}},\r
+               LABEL_PROPERTIES_QTY_BOTTOM_LINE_TYPE,\r
+        _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_{{"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png"}},\r
+               1,\r
+               _KeyVal_{{""},{""},{""}},\r
+        _KeyEvt_ {{MVK_period},{MVK_period},{MVK_period}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       // }\r
+       /* WithVoice SubLayout */\r
+       // {\r
+       {\r
+               USED, /* 4x3 */\r
+               1,\r
+               _Label_{{""},{""},{""}},\r
+               LABEL_PROPERTIES_QTY_BOTTOM_LINE_TYPE,\r
+               _LabelImg_ {{"camera_qwerty_kor-moa_port.png","camera_qwerty_kor-moa_port.png","camera_qwerty_kor-moa_port.png"}, {"camera_qwerty_kor-moa_port.png","camera_qwerty_kor-moa_port.png","camera_qwerty_kor-moa_port.png"}, {"camera_qwerty_kor-moa_port.png","camera_qwerty_kor-moa_port.png","camera_qwerty_kor-moa_port.png"}},\r
+               _BGImg_{{"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_function.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_function.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_function.png"}},\r
+               1,\r
+               _KeyVal_{{""},{""},{""}},\r
+               _KeyEvt_ {{0},{0},{0}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 4x4 */\r
+               1,\r
+               _Label_{{""},{""},{""}},\r
+               LABEL_PROPERTIES_QTY_SPACE_KEY_TYPE,\r
+               _LabelImg_ {{"textinput_icon_space.png","textinput_icon_space_press.png"}, {"textinput_icon_space.png","textinput_icon_space_press.png"}, {"textinput_icon_space.png","textinput_icon_space_press.png"}},\r
+               _BGImg_{{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_{{""},{""},{""}},\r
+               _KeyEvt_{{MVK_space},{MVK_space},{MVK_space}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 4x5 */\r
+               3,\r
+        _Label_{{".",""}, {".",""}, {".",""}},\r
+               LABEL_PROPERTIES_QTY_BOTTOM_LINE_TYPE,\r
+        _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_{{"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png"}},\r
+               1,\r
+               _KeyVal_{{""},{""},{""}},\r
+        _KeyEvt_ {{MVK_period},{MVK_period},{MVK_period}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       // }\r
+       /* URL SubLayout */\r
+       // {\r
+       {\r
+               USED, /* 4x3 */\r
+               1,\r
+               _Label_{{""},{""},{""}},\r
+               LABEL_PROPERTIES_QTY_SPACE_KEY_TYPE,\r
+               _LabelImg_ {{"textinput_icon_space.png","textinput_icon_space_press.png"}, {"textinput_icon_space.png","textinput_icon_space_press.png"}, {"textinput_icon_space.png","textinput_icon_space_press.png"}},\r
+               _BGImg_{{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_{{""},{""},{""}},\r
+               _KeyEvt_{{MVK_space},{MVK_space},{MVK_space}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 4x4 */\r
+               1,\r
+               _Label_{{"/"},{"/"},{"/"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_{{" "," "}, {" "," "}, {" "," "}},\r
+               _BGImg_{{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}},\r
+               1,\r
+               _KeyVal_{{"/"},{"/"},{"/"}},\r
+               _KeyEvt_ {{MVK_slash},{MVK_slash},{MVK_slash}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 4x5 */\r
+               1,\r
+               _Label_{{"www."},{"www."},{"www."}},\r
+               LABEL_PROPERTIES_QTY_WWW_TYPE,\r
+               _LabelImg_{{" "," "}, {" "," "}, {" "," "}},\r
+               _BGImg_{{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}},\r
+               1,\r
+               _KeyVal_{{"www."},{"www."},{"www."}},\r
+               _KeyEvt_ {{0},{0},{0}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 4x6 */\r
+               3,\r
+               _Label_{{".",""}, {".",""}, {".",""}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_{{" "," "}, {" "," "}, {" "," "}},\r
+               _BGImg_{{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}},\r
+               1,\r
+               _KeyVal_{{"."},{"."},{"."}},\r
+               _KeyEvt_ {{MVK_period},{MVK_period},{MVK_period}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       // }\r
+       /* Email SubLayout */\r
+       // {\r
+       {\r
+               USED, /* 4x3 */\r
+               1,\r
+               _Label_{{""},{""},{""}},\r
+               LABEL_PROPERTIES_QTY_SPACE_KEY_TYPE,\r
+               _LabelImg_ {{"textinput_icon_space.png","textinput_icon_space_press.png"}, {"textinput_icon_space.png","textinput_icon_space_press.png"}, {"textinput_icon_space.png","textinput_icon_space_press.png"}},\r
+               _BGImg_{{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_{{""},{""},{""}},\r
+               _KeyEvt_{{MVK_space},{MVK_space},{MVK_space}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 4x4 */\r
+               1,\r
+               _Label_{{"@"},{"@"},{"@"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_{{" "," "}, {" "," "}, {" "," "}},\r
+               _BGImg_{{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}},\r
+               1,\r
+               _KeyVal_{{"@"},{"@"},{"@"}},\r
+               _KeyEvt_ {{MVK_at},{MVK_at},{MVK_at}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 4x5 */\r
+               1,\r
+               _Label_{{".com"},{".com"},{".com"}},\r
+               LABEL_PROPERTIES_QTY_WWW_TYPE,\r
+               _LabelImg_{{" "," "}, {" "," "}, {" "," "}},\r
+               _BGImg_{{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}},\r
+               1,\r
+               _KeyVal_{{".com"},{".com"},{".com"}},\r
+               _KeyEvt_ {{0},{0},{0}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 4x6 */\r
+               3,\r
+               _Label_{{".",""}, {".",""}, {".",""}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_{{" "," "}, {" "," "}, {" "," "}},\r
+               _BGImg_{{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}},\r
+               1,\r
+               _KeyVal_{{"."},{"."},{"."}},\r
+               _KeyEvt_ {{MVK_period},{MVK_period},{MVK_period}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       // }\r
+\r
+       {\r
+               USED, /* 4x5 */\r
+               1,\r
+               _Label_ {{""},{""},{""}},\r
+               LABEL_PROPERTIES_QTY_BOTTOM_LINE_TYPE,\r
+               _LabelImg_ {{"textinput_qwerty_icon_enter.png","textinput_qwerty_icon_enter.png","textinput_qwerty_icon_enter_disabled.png"}, {"textinput_qwerty_icon_enter.png","textinput_qwerty_icon_enter.png","textinput_qwerty_icon_enter_disabled.png"}, {"textinput_qwerty_icon_enter.png","textinput_qwerty_icon_enter.png","textinput_qwerty_icon_enter_disabled.png"}},\r
+               _BGImg_ {{"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_function.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_function.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}},\r
+               1,\r
+               _KeyVal_ {{""},{""},{""}},\r
+               _KeyEvt_{{MVK_Return},{MVK_Return},{MVK_Return}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+\r
+       {NOT_USED,},\r
+}\r
+#endif\r
+\r
+\r
diff --git a/res/mcfresource-port-qty-greek.h b/res/mcfresource-port-qty-greek.h
new file mode 100755 (executable)
index 0000000..78535ff
--- /dev/null
@@ -0,0 +1,774 @@
+/*
+ * Copyright 2012  Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.tizenopensource.org/license
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+\r
+#ifdef KEY_CONFIGURE_PHASE\r
+{\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CONTROL, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CONTROL, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+\r
+\r
+       /*option*/      {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_MODECHANGE, POPUP_TYPE_CONTEXT_POPUP, FALSE, FALSE, TRUE, {NOT_USED,}},\r
+       /*abc*/{USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_MODECHANGE, POPUP_TYPE_BTN_LONGPRESS_POPUP_ONCE, FALSE, FALSE, TRUE, {INPUT_MODE_EMOTICON_POPUP, NOT_USED, NOT_USED, NOT_USED, NOT_USED, NOT_USED, NOT_USED}},\r
+       /* Default SubLayout */\r
+       // {\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CONTROL, POPUP_TYPE_NONE, FALSE, FALSE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_DIRECTION, KEY_TYPE_UNICODE, POPUP_TYPE_BTN_LONGPRESS_POPUP_ONCE, FALSE, FALSE, TRUE, {INPUT_MODE_PUNCTUATION_POPUP, NOT_USED, NOT_USED, NOT_USED, NOT_USED, NOT_USED, NOT_USED}},\r
+       // }\r
+       /* WithVoice SubLayout */\r
+       // {\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CONTROL, POPUP_TYPE_BTN_RELEASE_POPUP_ONCE, FALSE, FALSE, TRUE, {INPUT_MODE_SCENETEXT_POPUP, NOT_USED, NOT_USED, NOT_USED, NOT_USED, NOT_USED, NOT_USED}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CONTROL, POPUP_TYPE_NONE, FALSE, FALSE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_DIRECTION, KEY_TYPE_UNICODE, POPUP_TYPE_BTN_LONGPRESS_POPUP_ONCE, FALSE, FALSE, TRUE, {INPUT_MODE_PUNCTUATION_POPUP, NOT_USED, NOT_USED, NOT_USED, NOT_USED, NOT_USED, NOT_USED}},\r
+       // }\r
+       /* URL SubLayout */\r
+       // {\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CONTROL, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, CUSTOMID_WWWCOM, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_BTN_LONGPRESS_POPUP_ONCE, TRUE, TRUE, TRUE, {INPUT_MODE_URL_POPUP, NOT_USED, NOT_USED, NOT_USED, NOT_USED, NOT_USED, NOT_USED}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       // }\r
+       /* Email SubLayout */\r
+       // {\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CONTROL, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_BTN_LONGPRESS_POPUP_ONCE, TRUE, TRUE, TRUE, {INPUT_MODE_URL_POPUP, NOT_USED, NOT_USED, NOT_USED, NOT_USED, NOT_USED, NOT_USED}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       // }\r
+       /*enter*/{USED, CUSTOMID_ENTER, BUTTON_TYPE_NORMAL, KEY_TYPE_CONTROL, POPUP_TYPE_NONE, FALSE, FALSE, TRUE, {NOT_USED,}},\r
+\r
+       {NOT_USED,},\r
+}\r
+#endif\r
+\r
+#ifdef KEY_PROPERTIES_PHASE\r
+{\r
+       /* fValid, labelCnt, label, labelPropId, imgPath, keyValueCnt, keyValue, keyEvent, longKeyValue, longKeyEvent, userLabel,  userKeyValue,  userKeyEvent, */\r
+       /* Second Line */\r
+       {\r
+               USED, /* 2x1 */\r
+               1,\r
+               _Label_ {{":"},{":"},{":"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{":"},{":"},{":"}},\r
+               _KeyEvt_ {{MVK_q},{MVK_Q},{MVK_Q}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 2x2 */\r
+               1,\r
+               _Label_ {{"\xcf\x82"},{"\xcf\x82"},{"\xcf\x82"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"\xcf\x82"},{"\xce\xa3"},{"\xce\xa3"}},\r
+               _KeyEvt_ {{MVK_w},{MVK_W},{MVK_W}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 2x3 */\r
+               1,\r
+               _Label_ {{"\xce\xb5"},{"\xce\x95"},{"\xce\x95"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"\xce\xb5"},{"\xce\x95"},{"\xce\x95"}},\r
+               _KeyEvt_ {{MVK_e},{MVK_E},{MVK_E}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+               {{"\xce\xb5","\xce\xad"},{"\xce\x95","\xce\x88"},{"\xce\x95","\xce\x88"}},\r
+               FALSE,\r
+               0,\r
+               MCF_MULTI_TOUCH_TYPE_EXCLUSIVE,\r
+               NOT_USED,\r
+               {{"\xce\xb5","..."},{"\xce\x95","..."},{"\xce\x95","..."}},\r
+       },\r
+       {\r
+               USED, /* 2x4 */\r
+               1,\r
+               _Label_ {{"\xcf\x81"},{"\xce\xa1"},{"\xce\xa1"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"\xcf\x81"},{"\xce\xa1"},{"\xce\xa1"}},\r
+               _KeyEvt_ {{MVK_r},{MVK_R},{MVK_R}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 2x5 */\r
+               1,\r
+               _Label_ {{"\xcf\x84"},{"\xce\xa4"},{"\xce\xa4"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"\xcf\x84"},{"\xce\xa4"},{"\xce\xa4"}},\r
+               _KeyEvt_ {{MVK_t},{MVK_T},{MVK_T}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 2x6 */\r
+               1,\r
+               _Label_ {{"\xcf\x85"},{"\xce\xa5"},{"\xce\xa5"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"\xcf\x85"},{"\xce\xa5"},{"\xce\xa5"}},\r
+               _KeyEvt_ {{MVK_y},{MVK_Y},{MVK_Y}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+               {{"\xcf\x8d","\xcf\x8b","\xce\xb0"},{"\xce\xa5","\xce\x8e"},{"\xce\xa5","\xce\x8e"}},\r
+               FALSE,\r
+               0,\r
+               MCF_MULTI_TOUCH_TYPE_EXCLUSIVE,\r
+               NOT_USED,\r
+               {{"\xcf\x85","..."},{"\xce\xa5","..."},{"\xce\xa5","..."}},\r
+       },\r
+       {\r
+               USED, /* 2x7 */\r
+               1,\r
+               _Label_ {{"\xce\xb8"},{"\xce\x98"},{"\xce\x98"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"\xce\xb8"},{"\xce\x98"},{"\xce\x98"}},\r
+               _KeyEvt_ {{MVK_u},{MVK_U},{MVK_U}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 2x8 */\r
+               1,\r
+               _Label_ {{"\xce\xb9"},{"\xce\x99"},{"\xce\x99"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"\xce\xb9"},{"\xce\x99"},{"\xce\x99"}},\r
+               _KeyEvt_ {{MVK_i},{MVK_I},{MVK_I}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+               {{"\xce\xb9","\xce\xaf","\xcf\x8a","\xce\x90"},{"\xce\x99","\xce\x8a","\xce\xaa"},{"\xce\x99","\xce\x8a","\xce\xaa"}},\r
+               FALSE,\r
+               0,\r
+               MCF_MULTI_TOUCH_TYPE_EXCLUSIVE,\r
+               NOT_USED,\r
+               {{"\xce\xb9","..."},{"\xce\x99","..."},{"\xce\x99","..."}},\r
+       },\r
+       {\r
+               USED, /* 2x9 */\r
+               1,\r
+               _Label_ {{"\xce\xbf"},{"\xce\x9f"},{"\xce\x9f"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"\xce\xbf"},{"\xce\x9f"},{"\xce\x9f"}},\r
+               _KeyEvt_ {{MVK_o},{MVK_O},{MVK_O}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+               {{"\xce\xbf","\xc3\xb3"},{"\xce\x9f","\xce\x8c"},{"\xce\x9f","\xce\x8c"}},\r
+               FALSE,\r
+               0,\r
+               MCF_MULTI_TOUCH_TYPE_EXCLUSIVE,\r
+               NOT_USED,\r
+               {{"\xce\xbf","..."},{"\xce\x9f","..."},{"\xce\x9f","..."}},\r
+       },\r
+       {\r
+               USED, /* 2x10 */\r
+               1,\r
+               _Label_ {{"\xcf\x80"},{"\xce\xa0"},{"\xce\xa0"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"\xcf\x80"},{"\xce\xa0"},{"\xce\xa0"}},\r
+               _KeyEvt_ {{MVK_p},{MVK_P},{MVK_P}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+\r
+\r
+       /* Third Line */\r
+       {\r
+               USED, /* 3x1 */\r
+               1,\r
+               _Label_ {{"\xce\xb1"},{"\xce\x91"},{"\xce\x91"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"\xce\xb1"},{"\xce\x91"},{"\xce\x91"}},\r
+               _KeyEvt_ {{MVK_a},{MVK_A},{MVK_A}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+               {{"\xce\xb1","\xce\xac"},{"\xce\x91","\xce\x86"},{"\xce\x91","\xce\x86"}},\r
+               FALSE,\r
+               0,\r
+               MCF_MULTI_TOUCH_TYPE_EXCLUSIVE,\r
+               NOT_USED,\r
+               {{"\xce\xb1","..."},{"\xce\x91","..."},{"\xce\x91","..."}},\r
+       },\r
+       {\r
+               USED, /* 3x2 */\r
+               1,\r
+               _Label_ {{"\xcf\x83"},{"\xce\xa3"},{"\xce\xa3"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"\xcf\x83"},{"\xce\xa3"},{"\xce\xa3"}},\r
+               _KeyEvt_ {{MVK_s},{MVK_S},{MVK_S}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+               {{"\xcf\x83","\xcf\x82"},{""},{""}},\r
+               FALSE,\r
+               0,\r
+               MCF_MULTI_TOUCH_TYPE_EXCLUSIVE,\r
+               NOT_USED,\r
+               {{"\xcf\x83","..."},{"\xce\xa3"},{"\xce\xa3"}},\r
+       },\r
+       {\r
+               USED, /* 3x3 */\r
+               1,\r
+               _Label_ {{"\xce\xb4"},{"\xce\x94"},{"\xce\x94"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"\xce\xb4"},{"\xce\x94"},{"\xce\x94"}},\r
+               _KeyEvt_ {{MVK_d},{MVK_D},{MVK_D}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 3x4 */\r
+               1,\r
+               _Label_ {{"\xcf\x86"},{"\xce\xa6"},{"\xce\xa6"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"\xcf\x86"},{"\xce\xa6"},{"\xce\xa6"}},\r
+               _KeyEvt_ {{MVK_f},{MVK_F},{MVK_F}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 3x5 */\r
+               1,\r
+               _Label_ {{"\xce\xb3"},{"\xce\x93"},{"\xce\x93"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"\xce\xb3"},{"\xce\x93"},{"\xce\x93"}},\r
+               _KeyEvt_ {{MVK_g},{MVK_G},{MVK_G}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 3x6 */\r
+               1,\r
+               _Label_ {{"\xce\xb7"},{"\xce\x97"},{"\xce\x97"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"\xce\xb7"},{"\xce\x97"},{"\xce\x97"}},\r
+               _KeyEvt_ {{MVK_h},{MVK_H},{MVK_H}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+               {{"\xce\xb7","\xce\xae"},{"\xce\x97","\xce\x89"},{"\xce\x97","\xce\x89"}},\r
+               FALSE,\r
+               0,\r
+               MCF_MULTI_TOUCH_TYPE_EXCLUSIVE,\r
+               NOT_USED,\r
+               {{"\xce\xb7","..."},{"\xce\x97","..."},{"\xce\x97","..."}},\r
+       },\r
+       {\r
+               USED, /* 3x7 */\r
+               1,\r
+               _Label_ {{"\xce\xbe"},{"\xce\x9e"},{"\xce\x9e"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"\xce\xbe"},{"\xce\x9e"},{"\xce\x9e"}},\r
+               _KeyEvt_ {{MVK_j},{MVK_J},{MVK_J}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 3x8 */\r
+               1,\r
+               _Label_ {{"\xce\xba"},{"\xce\x9a"},{"\xce\x9a"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"\xce\xba"},{"\xce\x9a"},{"\xce\x9a"}},\r
+               _KeyEvt_ {{MVK_k},{MVK_K},{MVK_K}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 3x9 */\r
+               1,\r
+               _Label_ {{"\xce\xbb"},{"\xce\x9b"},{"\xce\x9b"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"\xce\xbb"},{"\xce\x9b"},{"\xce\x9b"}},\r
+               _KeyEvt_ {{MVK_l},{MVK_L},{MVK_L}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+\r
+       /* Fourth Line */\r
+       {\r
+               USED, /* 4x1 */\r
+               1,\r
+               _Label_ {{""},{""},{""}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"textinput_qwerty_icon_shift_01.png","textinput_qwerty_icon_shift_02.png","textinput_qwerty_icon_shift_01.png"}, {"textinput_qwerty_icon_shift_02.png","textinput_qwerty_icon_shift_01.png","textinput_qwerty_icon_shift_01.png"}, {"textinput_qwerty_icon_shift_03.png","textinput_qwerty_icon_shift_02.png","textinput_qwerty_icon_shift_01.png"}},\r
+               _BGImg_ {{"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_function.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_function.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_function.png","textinput_qwerty_button_nml.png"}},\r
+               1,\r
+               _KeyVal_ {{""},{""},{""}},\r
+               _KeyEvt_ {{UD_MVK_SHIFT},{UD_MVK_SHIFT},{UD_MVK_SHIFT}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 4x2 */\r
+               1,\r
+               _Label_ {{"\xce\xb6"},{"\xce\x96"},{"\xce\x96"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"\xce\xb6"},{"\xce\x96"},{"\xce\x96"}},\r
+               _KeyEvt_ {{MVK_z},{MVK_Z},{MVK_Z}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 4x3 */\r
+               1,\r
+               _Label_ {{"\xcf\x87"},{"\xce\xa7"},{"\xce\xa7"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"\xcf\x87"},{"\xce\xa7"},{"\xce\xa7"}},\r
+               _KeyEvt_ {{MVK_x},{MVK_X},{MVK_X}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 4x4 */\r
+               1,\r
+               _Label_ {{"\xcf\x88"},{"\xce\xa8"},{"\xce\xa8"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"\xcf\x88"},{"\xce\xa8"},{"\xce\xa8"}},\r
+               _KeyEvt_ {{MVK_c},{MVK_C},{MVK_C}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 4x5 */\r
+               1,\r
+               _Label_ {{"\xcf\x89"},{"\xce\xa9"},{"\xce\xa9"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"\xcf\x89"},{"\xce\xa9"},{"\xce\xa9"}},\r
+               _KeyEvt_ {{MVK_v},{MVK_V},{MVK_V}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 4x6 */\r
+               1,\r
+               _Label_ {{"\xce\xb2"},{"\xce\x92"},{"\xce\x92"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"\xce\xb2"},{"\xce\x92"},{"\xce\x92"}},\r
+               _KeyEvt_ {{MVK_b},{MVK_B},{MVK_B}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 4x7 */\r
+               1,\r
+               _Label_ {{"\xce\xbd"},{"\xce\x9d"},{"\xce\x9d"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"\xce\xbd"},{"\xce\x9d"},{"\xce\x9d"}},\r
+               _KeyEvt_ {{MVK_n},{MVK_N},{MVK_N}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 4x8 */\r
+               1,\r
+               _Label_ {{"\xce\xbc"},{"\xce\x9c"},{"\xce\x9c"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"\xce\xbc"},{"\xce\x9c"},{"\xce\x9c"}},\r
+               _KeyEvt_ {{MVK_m},{MVK_M},{MVK_M}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 4x9 */\r
+               1,\r
+               _Label_ {{""},{""},{""}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"textinput_qwerty_icon_clear.png","textinput_qwerty_icon_clear.png"}, {"textinput_qwerty_icon_clear.png","textinput_qwerty_icon_clear.png"}, {"textinput_qwerty_icon_clear.png","textinput_qwerty_icon_clear.png"}},\r
+               _BGImg_ {{"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_function.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_function.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}},\r
+               1,\r
+               _KeyVal_ {{""},{""},{""}},\r
+               _KeyEvt_{{MVK_BackSpace},{MVK_BackSpace},{MVK_BackSpace}},\r
+               "",\r
+               0,\r
+               TRUE,\r
+       },\r
+       /* Fifth line*/\r
+\r
+       {\r
+               USED, /* 5x1 */\r
+               1,\r
+               _Label_{{"GR"},{"GR"},{"GR"}},\r
+               LABEL_PROPERTIES_QTY_BOTTOM_LINE_IMAGE_TYPE,\r
+               _LabelImg_{{"language_icon_port.png","language_icon_port.png"}, {"language_icon_port.png","language_icon_port.png"}, {"language_icon_port.png","language_icon_port.png"}},\r
+               _BGImg_{{"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_function.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_function.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_function.png","textinput_qwerty_button_nml.png"}},\r
+               1,\r
+               _KeyVal_{{""},{""},{""}},\r
+               _KeyEvt_ {{UD_MVK_LANG_CHANGE},{UD_MVK_LANG_CHANGE},{UD_MVK_LANG_CHANGE}},\r
+               "OptionWindow",\r
+               UD_MVK_OPTION_WINDOW,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 5x2 */\r
+               1,\r
+               _Label_{{""},{""},{""}},\r
+               LABEL_PROPERTIES_QTY_BOTTOM_LINE_TYPE,\r
+               _LabelImg_ {{"symbol_icon_port.png","symbol_icon_port.png"}, {"symbol_icon_port.png","symbol_icon_port.png"}, {"symbol_icon_port.png","symbol_icon_port.png"}},\r
+               _BGImg_{{"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_function.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_function.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_function.png","textinput_qwerty_button_nml.png"}},\r
+               1,\r
+               _KeyVal_{{""},{""},{""}},\r
+               _KeyEvt_ {{UD_MVK_SYM},{UD_MVK_SYM},{UD_MVK_SYM}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+\r
+       /* Default SubLayout */\r
+       // {\r
+       {\r
+               USED, /* 4x3 */\r
+               1,\r
+               _Label_{{""},{""},{""}},\r
+               LABEL_PROPERTIES_QTY_SPACE_KEY_TYPE,\r
+               _LabelImg_ {{"textinput_icon_space.png","textinput_icon_space_press.png"}, {"textinput_icon_space.png","textinput_icon_space_press.png"}, {"textinput_icon_space.png","textinput_icon_space_press.png"}},\r
+               _BGImg_{{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_{{""},{""},{""}},\r
+               _KeyEvt_{{MVK_space},{MVK_space},{MVK_space}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 4x4 */\r
+               3,\r
+        _Label_{{".",""}, {".",""}, {".",""}},\r
+               LABEL_PROPERTIES_QTY_BOTTOM_LINE_TYPE,\r
+        _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_{{"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png"}},\r
+               1,\r
+               _KeyVal_{{""},{""},{""}},\r
+        _KeyEvt_ {{MVK_period},{MVK_period},{MVK_period}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       // }\r
+       /* WithVoice SubLayout */\r
+       // {\r
+       {\r
+               USED, /* 4x3 */\r
+               1,\r
+               _Label_{{""},{""},{""}},\r
+               LABEL_PROPERTIES_QTY_BOTTOM_LINE_TYPE,\r
+               _LabelImg_ {{"camera_qwerty_kor-moa_port.png","camera_qwerty_kor-moa_port.png","camera_qwerty_kor-moa_port.png"}, {"camera_qwerty_kor-moa_port.png","camera_qwerty_kor-moa_port.png","camera_qwerty_kor-moa_port.png"}, {"camera_qwerty_kor-moa_port.png","camera_qwerty_kor-moa_port.png","camera_qwerty_kor-moa_port.png"}},\r
+               _BGImg_{{"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_function.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_function.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_function.png"}},\r
+               1,\r
+               _KeyVal_{{""},{""},{""}},\r
+               _KeyEvt_ {{0},{0},{0}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 4x4 */\r
+               1,\r
+               _Label_{{""},{""},{""}},\r
+               LABEL_PROPERTIES_QTY_SPACE_KEY_TYPE,\r
+               _LabelImg_ {{"textinput_icon_space.png","textinput_icon_space_press.png"}, {"textinput_icon_space.png","textinput_icon_space_press.png"}, {"textinput_icon_space.png","textinput_icon_space_press.png"}},\r
+               _BGImg_{{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_{{""},{""},{""}},\r
+               _KeyEvt_{{MVK_space},{MVK_space},{MVK_space}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 4x5 */\r
+               3,\r
+        _Label_{{".",""}, {".",""}, {".",""}},\r
+               LABEL_PROPERTIES_QTY_BOTTOM_LINE_TYPE,\r
+        _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_{{"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png"}},\r
+               1,\r
+               _KeyVal_{{""},{""},{""}},\r
+        _KeyEvt_ {{MVK_period},{MVK_period},{MVK_period}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       // }\r
+       /* URL SubLayout */\r
+       // {\r
+       {\r
+               USED, /* 4x3 */\r
+               1,\r
+               _Label_{{""},{""},{""}},\r
+               LABEL_PROPERTIES_QTY_SPACE_KEY_TYPE,\r
+               _LabelImg_ {{"textinput_icon_space.png","textinput_icon_space_press.png"}, {"textinput_icon_space.png","textinput_icon_space_press.png"}, {"textinput_icon_space.png","textinput_icon_space_press.png"}},\r
+               _BGImg_{{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_{{""},{""},{""}},\r
+               _KeyEvt_{{MVK_space},{MVK_space},{MVK_space}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 4x4 */\r
+               1,\r
+               _Label_{{"/"},{"/"},{"/"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_{{" "," "}, {" "," "}, {" "," "}},\r
+               _BGImg_{{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}},\r
+               1,\r
+               _KeyVal_{{"/"},{"/"},{"/"}},\r
+               _KeyEvt_ {{MVK_slash},{MVK_slash},{MVK_slash}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 4x5 */\r
+               1,\r
+               _Label_{{"www."},{"www."},{"www."}},\r
+               LABEL_PROPERTIES_QTY_WWW_TYPE,\r
+               _LabelImg_{{" "," "}, {" "," "}, {" "," "}},\r
+               _BGImg_{{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}},\r
+               1,\r
+               _KeyVal_{{"www."},{"www."},{"www."}},\r
+               _KeyEvt_ {{0},{0},{0}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 4x6 */\r
+               3,\r
+               _Label_{{".",""}, {".",""}, {".",""}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_{{" "," "}, {" "," "}, {" "," "}},\r
+               _BGImg_{{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}},\r
+               1,\r
+               _KeyVal_{{"."},{"."},{"."}},\r
+               _KeyEvt_ {{MVK_period},{MVK_period},{MVK_period}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       // }\r
+       /* Email SubLayout */\r
+       // {\r
+       {\r
+               USED, /* 4x3 */\r
+               1,\r
+               _Label_{{""},{""},{""}},\r
+               LABEL_PROPERTIES_QTY_SPACE_KEY_TYPE,\r
+               _LabelImg_ {{"textinput_icon_space.png","textinput_icon_space_press.png"}, {"textinput_icon_space.png","textinput_icon_space_press.png"}, {"textinput_icon_space.png","textinput_icon_space_press.png"}},\r
+               _BGImg_{{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_{{""},{""},{""}},\r
+               _KeyEvt_{{MVK_space},{MVK_space},{MVK_space}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 4x4 */\r
+               1,\r
+               _Label_{{"@"},{"@"},{"@"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_{{" "," "}, {" "," "}, {" "," "}},\r
+               _BGImg_{{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}},\r
+               1,\r
+               _KeyVal_{{"@"},{"@"},{"@"}},\r
+               _KeyEvt_ {{MVK_at},{MVK_at},{MVK_at}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 4x5 */\r
+               1,\r
+               _Label_{{".com"},{".com"},{".com"}},\r
+               LABEL_PROPERTIES_QTY_WWW_TYPE,\r
+               _LabelImg_{{" "," "}, {" "," "}, {" "," "}},\r
+               _BGImg_{{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}},\r
+               1,\r
+               _KeyVal_{{".com"},{".com"},{".com"}},\r
+               _KeyEvt_ {{0},{0},{0}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 4x6 */\r
+               3,\r
+               _Label_{{".",""}, {".",""}, {".",""}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_{{" "," "}, {" "," "}, {" "," "}},\r
+               _BGImg_{{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}},\r
+               1,\r
+               _KeyVal_{{"."},{"."},{"."}},\r
+               _KeyEvt_ {{MVK_period},{MVK_period},{MVK_period}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       // }\r
+\r
+       {\r
+               USED, /* 4x5 */\r
+               1,\r
+               _Label_ {{""},{""},{""}},\r
+               LABEL_PROPERTIES_QTY_BOTTOM_LINE_TYPE,\r
+               _LabelImg_ {{"textinput_qwerty_icon_enter.png","textinput_qwerty_icon_enter.png","textinput_qwerty_icon_enter_disabled.png"}, {"textinput_qwerty_icon_enter.png","textinput_qwerty_icon_enter.png","textinput_qwerty_icon_enter_disabled.png"}, {"textinput_qwerty_icon_enter.png","textinput_qwerty_icon_enter.png","textinput_qwerty_icon_enter_disabled.png"}},\r
+               _BGImg_ {{"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_function.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_function.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}},\r
+               1,\r
+               _KeyVal_ {{""},{""},{""}},\r
+               _KeyEvt_{{MVK_Return},{MVK_Return},{MVK_Return}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+\r
+       {NOT_USED,},\r
+}\r
+#endif\r
+\r
+\r
diff --git a/res/mcfresource-port-qty-italian.h b/res/mcfresource-port-qty-italian.h
new file mode 100755 (executable)
index 0000000..88d4d4b
--- /dev/null
@@ -0,0 +1,769 @@
+/*
+ * Copyright 2012  Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.tizenopensource.org/license
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+
+#ifdef KEY_CONFIGURE_PHASE\r
+{\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CONTROL, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CONTROL, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+\r
+\r
+       /*option*/      {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_MODECHANGE, POPUP_TYPE_CONTEXT_POPUP, FALSE, FALSE, TRUE, {NOT_USED,}},\r
+       /*abc*/{USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_MODECHANGE, POPUP_TYPE_BTN_LONGPRESS_POPUP_ONCE, FALSE, FALSE, TRUE, {INPUT_MODE_EMOTICON_POPUP, NOT_USED, NOT_USED, NOT_USED, NOT_USED, NOT_USED, NOT_USED}},\r
+       /* Default SubLayout */\r
+       // {\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CONTROL, POPUP_TYPE_NONE, FALSE, FALSE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_DIRECTION, KEY_TYPE_UNICODE, POPUP_TYPE_BTN_LONGPRESS_POPUP_ONCE, FALSE, FALSE, TRUE, {INPUT_MODE_PUNCTUATION_POPUP, NOT_USED, NOT_USED, NOT_USED, NOT_USED, NOT_USED, NOT_USED}},\r
+       // }\r
+       /* WithVoice SubLayout */\r
+       // {\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CONTROL, POPUP_TYPE_BTN_RELEASE_POPUP_ONCE, FALSE, FALSE, TRUE, {INPUT_MODE_SCENETEXT_POPUP, NOT_USED, NOT_USED, NOT_USED, NOT_USED, NOT_USED, NOT_USED}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CONTROL, POPUP_TYPE_NONE, FALSE, FALSE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_DIRECTION, KEY_TYPE_UNICODE, POPUP_TYPE_BTN_LONGPRESS_POPUP_ONCE, FALSE, FALSE, TRUE, {INPUT_MODE_PUNCTUATION_POPUP, NOT_USED, NOT_USED, NOT_USED, NOT_USED, NOT_USED, NOT_USED}},\r
+       // }\r
+       /* URL SubLayout */\r
+       // {\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CONTROL, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, CUSTOMID_WWWCOM, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_BTN_LONGPRESS_POPUP_ONCE, TRUE, TRUE, TRUE, {INPUT_MODE_URL_POPUP, NOT_USED, NOT_USED, NOT_USED, NOT_USED, NOT_USED, NOT_USED}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       // }\r
+       /* Email SubLayout */\r
+       // {\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CONTROL, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_BTN_LONGPRESS_POPUP_ONCE, TRUE, TRUE, TRUE, {INPUT_MODE_URL_POPUP, NOT_USED, NOT_USED, NOT_USED, NOT_USED, NOT_USED, NOT_USED}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       // }\r
+       /*enter*/{USED, CUSTOMID_ENTER, BUTTON_TYPE_NORMAL, KEY_TYPE_CONTROL, POPUP_TYPE_NONE, FALSE, FALSE, TRUE, {NOT_USED,}},\r
+\r
+       {NOT_USED,},\r
+}\r
+#endif\r
+\r
+#ifdef KEY_PROPERTIES_PHASE\r
+{\r
+       /* fValid, labelCnt, label, labelPropId, imgPath, keyValueCnt, keyValue, keyEvent, longKeyValue, longKeyEvent, userLabel,  userKeyValue,  userKeyEvent, */\r
+       /* Second Line */\r
+       {\r
+               USED, /* 2x1 */\r
+               1,\r
+               _Label_ {{"q"},{"Q"},{"Q"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"q"},{"Q"},{"Q"}},\r
+               _KeyEvt_ {{MVK_q},{MVK_Q},{MVK_Q}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 2x2 */\r
+               1,\r
+               _Label_ {{"w"},{"W"},{"W"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"w"},{"W"},{"W"}},\r
+               _KeyEvt_ {{MVK_w},{MVK_W},{MVK_W}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 2x3 */\r
+               1,\r
+               _Label_ {{"e"},{"E"},{"E"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"e"},{"E"},{"E"}},\r
+               _KeyEvt_ {{MVK_e},{MVK_E},{MVK_E}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+               {{"e","\xc3\xa8","\xc3\xa9"},{"E","\xc3\x88","\xc3\x89"},{"E","\xc3\x88","\xc3\x89"}},\r
+               FALSE,\r
+               0,\r
+               MCF_MULTI_TOUCH_TYPE_EXCLUSIVE,\r
+               NOT_USED,\r
+               {{"e","..."},{"E","..."},{"E","..."}},\r
+       },\r
+       {\r
+               USED, /* 2x4 */\r
+               1,\r
+               _Label_ {{"r"},{"R"},{"R"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"r"},{"R"},{"R"}},\r
+               _KeyEvt_ {{MVK_r},{MVK_R},{MVK_R}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 2x5 */\r
+               1,\r
+               _Label_ {{"t"},{"T"},{"T"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"t"},{"T"},{"T"}},\r
+               _KeyEvt_ {{MVK_t},{MVK_T},{MVK_T}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 2x6 */\r
+               1,\r
+               _Label_ {{"y"},{"Y"},{"Y"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"y"},{"Y"},{"Y"}},\r
+               _KeyEvt_ {{MVK_y},{MVK_Y},{MVK_Y}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 2x7 */\r
+               1,\r
+               _Label_ {{"u"},{"U"},{"U"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"u"},{"U"},{"U"}},\r
+               _KeyEvt_ {{MVK_u},{MVK_U},{MVK_U}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+               {{"u","\xc3\xb9"},{"U","\xc3\x99"},{"U","\xc3\x99"}},\r
+               FALSE,\r
+               0,\r
+               MCF_MULTI_TOUCH_TYPE_EXCLUSIVE,\r
+               NOT_USED,\r
+               {{"u","..."},{"U","..."},{"U","..."}},\r
+       },\r
+       {\r
+               USED, /* 2x8 */\r
+               1,\r
+               _Label_ {{"i"},{"I"},{"I"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"i"},{"I"},{"I"}},\r
+               _KeyEvt_ {{MVK_i},{MVK_I},{MVK_I}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+               {{"i","\xc3\xac"},{"I","\xc3\x8c"},{"I","\xc3\x8c"}},\r
+               FALSE,\r
+               0,\r
+               MCF_MULTI_TOUCH_TYPE_EXCLUSIVE,\r
+               NOT_USED,\r
+               {{"i","..."},{"I","..."},{"I","..."}},\r
+       },\r
+       {\r
+               USED, /* 2x9 */\r
+               1,\r
+               _Label_ {{"o"},{"O"},{"O"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"o"},{"O"},{"O"}},\r
+               _KeyEvt_ {{MVK_o},{MVK_O},{MVK_O}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+               {{"o","\xc3\xb2"},{"O","\xc3\x92"},{"O","\xc3\x92"}},\r
+               FALSE,\r
+               0,\r
+               MCF_MULTI_TOUCH_TYPE_EXCLUSIVE,\r
+               NOT_USED,\r
+               {{"o","..."},{"O","..."},{"O","..."}},\r
+       },\r
+       {\r
+               USED, /* 2x10 */\r
+               1,\r
+               _Label_ {{"p"},{"P"},{"P"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"p"},{"P"},{"P"}},\r
+               _KeyEvt_ {{MVK_p},{MVK_P},{MVK_P}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+\r
+\r
+       /* Third Line */\r
+       {\r
+               USED, /* 3x1 */\r
+               1,\r
+               _Label_ {{"a"},{"A"},{"A"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"a"},{"A"},{"A"}},\r
+               _KeyEvt_ {{MVK_a},{MVK_A},{MVK_A}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+               {{"a","\xc3\xa0"},{"A","\xc3\x80"},{"A","\xc3\x80"}},\r
+               FALSE,\r
+               0,\r
+               MCF_MULTI_TOUCH_TYPE_EXCLUSIVE,\r
+               NOT_USED,\r
+               {{"a","..."},{"A","..."},{"A","..."}},\r
+       },\r
+       {\r
+               USED, /* 3x2 */\r
+               1,\r
+               _Label_ {{"s"},{"S"},{"S"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"s"},{"S"},{"S"}},\r
+               _KeyEvt_ {{MVK_s},{MVK_S},{MVK_S}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 3x3 */\r
+               1,\r
+               _Label_ {{"d"},{"D"},{"D"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"d"},{"D"},{"D"}},\r
+               _KeyEvt_ {{MVK_d},{MVK_D},{MVK_D}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 3x4 */\r
+               1,\r
+               _Label_ {{"f"},{"F"},{"F"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"f"},{"F"},{"F"}},\r
+               _KeyEvt_ {{MVK_f},{MVK_F},{MVK_F}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 3x5 */\r
+               1,\r
+               _Label_ {{"g"},{"G"},{"G"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"g"},{"G"},{"G"}},\r
+               _KeyEvt_ {{MVK_g},{MVK_G},{MVK_G}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 3x6 */\r
+               1,\r
+               _Label_ {{"h"},{"H"},{"H"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"h"},{"H"},{"H"}},\r
+               _KeyEvt_ {{MVK_h},{MVK_H},{MVK_H}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 3x7 */\r
+               1,\r
+               _Label_ {{"j"},{"J"},{"J"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"j"},{"J"},{"J"}},\r
+               _KeyEvt_ {{MVK_j},{MVK_J},{MVK_J}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 3x8 */\r
+               1,\r
+               _Label_ {{"k"},{"K"},{"K"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"k"},{"K"},{"K"}},\r
+               _KeyEvt_ {{MVK_k},{MVK_K},{MVK_K}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 3x9 */\r
+               1,\r
+               _Label_ {{"l"},{"L"},{"L"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"l"},{"L"},{"L"}},\r
+               _KeyEvt_ {{MVK_l},{MVK_L},{MVK_L}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+\r
+       /* Fourth Line */\r
+       {\r
+               USED, /* 4x1 */\r
+               1,\r
+               _Label_ {{""},{""},{""}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"textinput_qwerty_icon_shift_01.png","textinput_qwerty_icon_shift_02.png","textinput_qwerty_icon_shift_01.png"}, {"textinput_qwerty_icon_shift_02.png","textinput_qwerty_icon_shift_01.png","textinput_qwerty_icon_shift_01.png"}, {"textinput_qwerty_icon_shift_03.png","textinput_qwerty_icon_shift_02.png","textinput_qwerty_icon_shift_01.png"}},\r
+               _BGImg_ {{"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_function.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_function.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_function.png","textinput_qwerty_button_nml.png"}},\r
+               1,\r
+               _KeyVal_ {{""},{""},{""}},\r
+               _KeyEvt_ {{UD_MVK_SHIFT},{UD_MVK_SHIFT},{UD_MVK_SHIFT}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 4x2 */\r
+               1,\r
+               _Label_ {{"z"},{"Z"},{"Z"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"z"},{"Z"},{"Z"}},\r
+               _KeyEvt_ {{MVK_z},{MVK_Z},{MVK_Z}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 4x3 */\r
+               1,\r
+               _Label_ {{"x"},{"X"},{"X"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"x"},{"X"},{"X"}},\r
+               _KeyEvt_ {{MVK_x},{MVK_X},{MVK_X}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 4x4 */\r
+               1,\r
+               _Label_ {{"c"},{"C"},{"C"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"c"},{"C"},{"C"}},\r
+               _KeyEvt_ {{MVK_c},{MVK_C},{MVK_C}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+               {{"c","\xc3\xa7"},{"C","\xc3\x87"},{"C","\xc3\x87"}},\r
+               FALSE,\r
+               0,\r
+               MCF_MULTI_TOUCH_TYPE_EXCLUSIVE,\r
+               NOT_USED,\r
+               {{"c","..."},{"C","..."},{"C","..."}},\r
+       },\r
+       {\r
+               USED, /* 4x5 */\r
+               1,\r
+               _Label_ {{"v"},{"V"},{"V"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"v"},{"V"},{"V"}},\r
+               _KeyEvt_ {{MVK_v},{MVK_V},{MVK_V}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 4x6 */\r
+               1,\r
+               _Label_ {{"b"},{"B"},{"B"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"b"},{"B"},{"B"}},\r
+               _KeyEvt_ {{MVK_b},{MVK_B},{MVK_B}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 4x7 */\r
+               1,\r
+               _Label_ {{"n"},{"N"},{"N"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"n"},{"N"},{"N"}},\r
+               _KeyEvt_ {{MVK_n},{MVK_N},{MVK_N}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 4x8 */\r
+               1,\r
+               _Label_ {{"m"},{"M"},{"M"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"m"},{"M"},{"M"}},\r
+               _KeyEvt_ {{MVK_m},{MVK_M},{MVK_M}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 4x9 */\r
+               1,\r
+               _Label_ {{""},{""},{""}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"textinput_qwerty_icon_clear.png","textinput_qwerty_icon_clear.png"}, {"textinput_qwerty_icon_clear.png","textinput_qwerty_icon_clear.png"}, {"textinput_qwerty_icon_clear.png","textinput_qwerty_icon_clear.png"}},\r
+               _BGImg_ {{"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_function.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_function.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}},\r
+               1,\r
+               _KeyVal_ {{""},{""},{""}},\r
+               _KeyEvt_{{MVK_BackSpace},{MVK_BackSpace},{MVK_BackSpace}},\r
+               "",\r
+               0,\r
+               TRUE,\r
+       },\r
+       /* Fifth line*/\r
+\r
+       {\r
+               USED, /* 5x1 */\r
+               1,\r
+               _Label_{{"IT"},{"IT"},{"IT"}},\r
+               LABEL_PROPERTIES_QTY_BOTTOM_LINE_IMAGE_TYPE,\r
+               _LabelImg_{{"language_icon_port.png","language_icon_port.png"}, {"language_icon_port.png","language_icon_port.png"}, {"language_icon_port.png","language_icon_port.png"}},\r
+               _BGImg_{{"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_function.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_function.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_function.png","textinput_qwerty_button_nml.png"}},\r
+               1,\r
+               _KeyVal_{{""},{""},{""}},\r
+               _KeyEvt_ {{UD_MVK_LANG_CHANGE},{UD_MVK_LANG_CHANGE},{UD_MVK_LANG_CHANGE}},\r
+               "OptionWindow",\r
+               UD_MVK_OPTION_WINDOW,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 5x2 */\r
+               1,\r
+               _Label_{{""},{""},{""}},\r
+               LABEL_PROPERTIES_QTY_BOTTOM_LINE_TYPE,\r
+               _LabelImg_ {{"symbol_icon_port.png","symbol_icon_port.png"}, {"symbol_icon_port.png","symbol_icon_port.png"}, {"symbol_icon_port.png","symbol_icon_port.png"}},\r
+               _BGImg_{{"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_function.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_function.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_function.png","textinput_qwerty_button_nml.png"}},\r
+               1,\r
+               _KeyVal_{{""},{""},{""}},\r
+               _KeyEvt_ {{UD_MVK_SYM},{UD_MVK_SYM},{UD_MVK_SYM}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+\r
+       /* Default SubLayout */\r
+       // {\r
+       {\r
+               USED, /* 4x3 */\r
+               1,\r
+               _Label_{{""},{""},{""}},\r
+               LABEL_PROPERTIES_QTY_SPACE_KEY_TYPE,\r
+               _LabelImg_ {{"textinput_icon_space.png","textinput_icon_space_press.png"}, {"textinput_icon_space.png","textinput_icon_space_press.png"}, {"textinput_icon_space.png","textinput_icon_space_press.png"}},\r
+               _BGImg_{{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_{{""},{""},{""}},\r
+               _KeyEvt_{{MVK_space},{MVK_space},{MVK_space}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 4x4 */\r
+               3,\r
+        _Label_{{".",""}, {".",""}, {".",""}},\r
+               LABEL_PROPERTIES_QTY_BOTTOM_LINE_TYPE,\r
+        _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_{{"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png"}},\r
+               1,\r
+               _KeyVal_{{""},{""},{""}},\r
+        _KeyEvt_ {{MVK_period},{MVK_period},{MVK_period}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       // }\r
+       /* WithVoice SubLayout */\r
+       // {\r
+       {\r
+               USED, /* 4x3 */\r
+               1,\r
+               _Label_{{""},{""},{""}},\r
+               LABEL_PROPERTIES_QTY_BOTTOM_LINE_TYPE,\r
+               _LabelImg_ {{"camera_qwerty_kor-moa_port.png","camera_qwerty_kor-moa_port.png","camera_qwerty_kor-moa_port.png"}, {"camera_qwerty_kor-moa_port.png","camera_qwerty_kor-moa_port.png","camera_qwerty_kor-moa_port.png"}, {"camera_qwerty_kor-moa_port.png","camera_qwerty_kor-moa_port.png","camera_qwerty_kor-moa_port.png"}},\r
+               _BGImg_{{"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_function.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_function.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_function.png"}},\r
+               1,\r
+               _KeyVal_{{""},{""},{""}},\r
+               _KeyEvt_ {{0},{0},{0}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 4x4 */\r
+               1,\r
+               _Label_{{""},{""},{""}},\r
+               LABEL_PROPERTIES_QTY_SPACE_KEY_TYPE,\r
+               _LabelImg_ {{"textinput_icon_space.png","textinput_icon_space_press.png"}, {"textinput_icon_space.png","textinput_icon_space_press.png"}, {"textinput_icon_space.png","textinput_icon_space_press.png"}},\r
+               _BGImg_{{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_{{""},{""},{""}},\r
+               _KeyEvt_{{MVK_space},{MVK_space},{MVK_space}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 4x5 */\r
+               3,\r
+        _Label_{{".",""}, {".",""}, {".",""}},\r
+               LABEL_PROPERTIES_QTY_BOTTOM_LINE_TYPE,\r
+        _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_{{"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png"}},\r
+               1,\r
+               _KeyVal_{{""},{""},{""}},\r
+        _KeyEvt_ {{MVK_period},{MVK_period},{MVK_period}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       // }\r
+       /* URL SubLayout */\r
+       // {\r
+       {\r
+               USED, /* 4x3 */\r
+               1,\r
+               _Label_{{""},{""},{""}},\r
+               LABEL_PROPERTIES_QTY_SPACE_KEY_TYPE,\r
+               _LabelImg_ {{"textinput_icon_space.png","textinput_icon_space_press.png"}, {"textinput_icon_space.png","textinput_icon_space_press.png"}, {"textinput_icon_space.png","textinput_icon_space_press.png"}},\r
+               _BGImg_{{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_{{""},{""},{""}},\r
+               _KeyEvt_{{MVK_space},{MVK_space},{MVK_space}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 4x4 */\r
+               1,\r
+               _Label_{{"/"},{"/"},{"/"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_{{" "," "}, {" "," "}, {" "," "}},\r
+               _BGImg_{{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}},\r
+               1,\r
+               _KeyVal_{{"/"},{"/"},{"/"}},\r
+               _KeyEvt_ {{MVK_slash},{MVK_slash},{MVK_slash}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 4x5 */\r
+               1,\r
+               _Label_{{"www."},{"www."},{"www."}},\r
+               LABEL_PROPERTIES_QTY_WWW_TYPE,\r
+               _LabelImg_{{" "," "}, {" "," "}, {" "," "}},\r
+               _BGImg_{{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}},\r
+               1,\r
+               _KeyVal_{{"www."},{"www."},{"www."}},\r
+               _KeyEvt_ {{0},{0},{0}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 4x6 */\r
+               3,\r
+               _Label_{{".",""}, {".",""}, {".",""}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_{{" "," "}, {" "," "}, {" "," "}},\r
+               _BGImg_{{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}},\r
+               1,\r
+               _KeyVal_{{"."},{"."},{"."}},\r
+               _KeyEvt_ {{MVK_period},{MVK_period},{MVK_period}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       // }\r
+       /* Email SubLayout */\r
+       // {\r
+       {\r
+               USED, /* 4x3 */\r
+               1,\r
+               _Label_{{""},{""},{""}},\r
+               LABEL_PROPERTIES_QTY_SPACE_KEY_TYPE,\r
+               _LabelImg_ {{"textinput_icon_space.png","textinput_icon_space_press.png"}, {"textinput_icon_space.png","textinput_icon_space_press.png"}, {"textinput_icon_space.png","textinput_icon_space_press.png"}},\r
+               _BGImg_{{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_{{""},{""},{""}},\r
+               _KeyEvt_{{MVK_space},{MVK_space},{MVK_space}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 4x4 */\r
+               1,\r
+               _Label_{{"@"},{"@"},{"@"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_{{" "," "}, {" "," "}, {" "," "}},\r
+               _BGImg_{{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}},\r
+               1,\r
+               _KeyVal_{{"@"},{"@"},{"@"}},\r
+               _KeyEvt_ {{MVK_at},{MVK_at},{MVK_at}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 4x5 */\r
+               1,\r
+               _Label_{{".com"},{".com"},{".com"}},\r
+               LABEL_PROPERTIES_QTY_WWW_TYPE,\r
+               _LabelImg_{{" "," "}, {" "," "}, {" "," "}},\r
+               _BGImg_{{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}},\r
+               1,\r
+               _KeyVal_{{".com"},{".com"},{".com"}},\r
+               _KeyEvt_ {{0},{0},{0}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 4x6 */\r
+               3,\r
+               _Label_{{".",""}, {".",""}, {".",""}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_{{" "," "}, {" "," "}, {" "," "}},\r
+               _BGImg_{{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}},\r
+               1,\r
+               _KeyVal_{{"."},{"."},{"."}},\r
+               _KeyEvt_ {{MVK_period},{MVK_period},{MVK_period}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       // }\r
+\r
+       {\r
+               USED, /* 4x5 */\r
+               1,\r
+               _Label_ {{""},{""},{""}},\r
+               LABEL_PROPERTIES_QTY_BOTTOM_LINE_TYPE,\r
+               _LabelImg_ {{"textinput_qwerty_icon_enter.png","textinput_qwerty_icon_enter.png","textinput_qwerty_icon_enter_disabled.png"}, {"textinput_qwerty_icon_enter.png","textinput_qwerty_icon_enter.png","textinput_qwerty_icon_enter_disabled.png"}, {"textinput_qwerty_icon_enter.png","textinput_qwerty_icon_enter.png","textinput_qwerty_icon_enter_disabled.png"}},\r
+               _BGImg_ {{"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_function.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_function.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}},\r
+               1,\r
+               _KeyVal_ {{""},{""},{""}},\r
+               _KeyEvt_{{MVK_Return},{MVK_Return},{MVK_Return}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+\r
+       {NOT_USED,},\r
+}\r
+#endif\r
+\r
+\r
+\r
diff --git a/res/mcfresource-port-qty-portuguese.h b/res/mcfresource-port-qty-portuguese.h
new file mode 100755 (executable)
index 0000000..deee1c3
--- /dev/null
@@ -0,0 +1,772 @@
+/*
+ * Copyright 2012  Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.tizenopensource.org/license
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+\r
+\r
+#ifdef KEY_CONFIGURE_PHASE\r
+{\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CONTROL, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CONTROL, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+\r
+\r
+       /*option*/      {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_MODECHANGE, POPUP_TYPE_CONTEXT_POPUP, FALSE, FALSE, TRUE, {NOT_USED,}},\r
+       /*abc*/{USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_MODECHANGE, POPUP_TYPE_BTN_LONGPRESS_POPUP_ONCE, FALSE, FALSE, TRUE, {INPUT_MODE_EMOTICON_POPUP, NOT_USED, NOT_USED, NOT_USED, NOT_USED, NOT_USED, NOT_USED}},\r
+       /* Default SubLayout */\r
+       // {\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CONTROL, POPUP_TYPE_NONE, FALSE, FALSE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_DIRECTION, KEY_TYPE_UNICODE, POPUP_TYPE_BTN_LONGPRESS_POPUP_ONCE, FALSE, FALSE, TRUE, {INPUT_MODE_PUNCTUATION_POPUP, NOT_USED, NOT_USED, NOT_USED, NOT_USED, NOT_USED, NOT_USED}},\r
+       // }\r
+       /* WithVoice SubLayout */\r
+       // {\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CONTROL, POPUP_TYPE_BTN_RELEASE_POPUP_ONCE, FALSE, FALSE, TRUE, {INPUT_MODE_SCENETEXT_POPUP, NOT_USED, NOT_USED, NOT_USED, NOT_USED, NOT_USED, NOT_USED}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CONTROL, POPUP_TYPE_NONE, FALSE, FALSE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_DIRECTION, KEY_TYPE_UNICODE, POPUP_TYPE_BTN_LONGPRESS_POPUP_ONCE, FALSE, FALSE, TRUE, {INPUT_MODE_PUNCTUATION_POPUP, NOT_USED, NOT_USED, NOT_USED, NOT_USED, NOT_USED, NOT_USED}},\r
+       // }\r
+       /* URL SubLayout */\r
+       // {\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CONTROL, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, CUSTOMID_WWWCOM, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_BTN_LONGPRESS_POPUP_ONCE, TRUE, TRUE, TRUE, {INPUT_MODE_URL_POPUP, NOT_USED, NOT_USED, NOT_USED, NOT_USED, NOT_USED, NOT_USED}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       // }\r
+       /* Email SubLayout */\r
+       // {\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CONTROL, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_BTN_LONGPRESS_POPUP_ONCE, TRUE, TRUE, TRUE, {INPUT_MODE_URL_POPUP, NOT_USED, NOT_USED, NOT_USED, NOT_USED, NOT_USED, NOT_USED}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       // }\r
+       /*enter*/{USED, CUSTOMID_ENTER, BUTTON_TYPE_NORMAL, KEY_TYPE_CONTROL, POPUP_TYPE_NONE, FALSE, FALSE, TRUE, {NOT_USED,}},\r
+\r
+       {NOT_USED,},\r
+}\r
+#endif\r
+\r
+#ifdef KEY_PROPERTIES_PHASE\r
+{\r
+       /* fValid, labelCnt, label, labelPropId, imgPath, keyValueCnt, keyValue, keyEvent, longKeyValue, longKeyEvent, userLabel,  userKeyValue,  userKeyEvent, */\r
+       /* Second Line */\r
+       {\r
+               USED, /* 2x1 */\r
+               1,\r
+               _Label_ {{"q"},{"Q"},{"Q"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"q"},{"Q"},{"Q"}},\r
+               _KeyEvt_ {{MVK_q},{MVK_Q},{MVK_Q}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 2x2 */\r
+               1,\r
+               _Label_ {{"w"},{"W"},{"W"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"w"},{"W"},{"W"}},\r
+               _KeyEvt_ {{MVK_w},{MVK_W},{MVK_W}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 2x3 */\r
+               1,\r
+               _Label_ {{"e"},{"E"},{"E"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"e"},{"E"},{"E"}},\r
+               _KeyEvt_ {{MVK_e},{MVK_E},{MVK_E}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+               {{"e","\xc3\xa9","\xc3\xaa"},{"E","\xc3\x89","\xc3\x8a"},{"E","\xc3\x89","\xc3\x8a"}},\r
+               FALSE,\r
+               0,\r
+               MCF_MULTI_TOUCH_TYPE_EXCLUSIVE,\r
+               NOT_USED,\r
+               {{"e","..."},{"E","..."},{"E","..."}},\r
+       },\r
+       {\r
+               USED, /* 2x4 */\r
+               1,\r
+               _Label_ {{"r"},{"R"},{"R"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"r"},{"R"},{"R"}},\r
+               _KeyEvt_ {{MVK_r},{MVK_R},{MVK_R}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 2x5 */\r
+               1,\r
+               _Label_ {{"t"},{"T"},{"T"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"t"},{"T"},{"T"}},\r
+               _KeyEvt_ {{MVK_t},{MVK_T},{MVK_T}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 2x6 */\r
+               1,\r
+               _Label_ {{"y"},{"Y"},{"Y"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"y"},{"Y"},{"Y"}},\r
+               _KeyEvt_ {{MVK_y},{MVK_Y},{MVK_Y}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 2x7 */\r
+               1,\r
+               _Label_ {{"u"},{"U"},{"U"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"u"},{"U"},{"U"}},\r
+               _KeyEvt_ {{MVK_u},{MVK_U},{MVK_U}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+               {{"u","\xc3\xba"},{"U","\xc3\x9a"},{"U","\xc3\x9a"}},\r
+               FALSE,\r
+               0,\r
+               MCF_MULTI_TOUCH_TYPE_EXCLUSIVE,\r
+               NOT_USED,\r
+               {{"u","..."},{"U","..."},{"U","..."}},\r
+       },\r
+       {\r
+               USED, /* 2x8 */\r
+               1,\r
+               _Label_ {{"i"},{"I"},{"I"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"i"},{"I"},{"I"}},\r
+               _KeyEvt_ {{MVK_i},{MVK_I},{MVK_I}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+               {{"i","\xc3\xad"},{"I","\xc3\x8d"},{"I","\xc3\x8d"}},\r
+               FALSE,\r
+               0,\r
+               MCF_MULTI_TOUCH_TYPE_EXCLUSIVE,\r
+               NOT_USED,\r
+               {{"i","..."},{"I","..."},{"I","..."}},\r
+       },\r
+       {\r
+               USED, /* 2x9 */\r
+               1,\r
+               _Label_ {{"o"},{"O"},{"O"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"o"},{"O"},{"O"}},\r
+               _KeyEvt_ {{MVK_o},{MVK_O},{MVK_O}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+               {{"o","\xc3\xb3","\xc3\xb4","\xc3\xb5"},{"O","\xc3\x93","\xc3\x94","\xc3\x95"},{"O","\xc3\x93","\xc3\x94","\xc3\x95"}},\r
+               FALSE,\r
+               0,\r
+               MCF_MULTI_TOUCH_TYPE_EXCLUSIVE,\r
+               NOT_USED,\r
+               {{"o","..."},{"O","..."},{"O","..."}},\r
+       },\r
+       {\r
+               USED, /* 2x10 */\r
+               1,\r
+               _Label_ {{"p"},{"P"},{"P"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"p"},{"P"},{"P"}},\r
+               _KeyEvt_ {{MVK_p},{MVK_P},{MVK_P}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+\r
+\r
+       /* Third Line */\r
+       {\r
+               USED, /* 3x1 */\r
+               1,\r
+               _Label_ {{"a"},{"A"},{"A"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"a"},{"A"},{"A"}},\r
+               _KeyEvt_ {{MVK_a},{MVK_A},{MVK_A}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+               {{"a","\xc3\xa1","\xc3\xa2","\xc3\xa3","\xc3\xa0"},{"A","\xc3\x81","\xc3\x82","\xc3\x83","\xc3\x80"},{"A","\xc3\x81","\xc3\x82","\xc3\x83","\xc3\x80"}},\r
+               FALSE,\r
+               0,\r
+               MCF_MULTI_TOUCH_TYPE_EXCLUSIVE,\r
+               NOT_USED,\r
+               {{"a","..."},{"A","..."},{"A","..."}},\r
+       },\r
+       {\r
+               USED, /* 3x2 */\r
+               1,\r
+               _Label_ {{"s"},{"S"},{"S"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"s"},{"S"},{"S"}},\r
+               _KeyEvt_ {{MVK_s},{MVK_S},{MVK_S}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 3x3 */\r
+               1,\r
+               _Label_ {{"d"},{"D"},{"D"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"d"},{"D"},{"D"}},\r
+               _KeyEvt_ {{MVK_d},{MVK_D},{MVK_D}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 3x4 */\r
+               1,\r
+               _Label_ {{"f"},{"F"},{"F"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"f"},{"F"},{"F"}},\r
+               _KeyEvt_ {{MVK_f},{MVK_F},{MVK_F}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 3x5 */\r
+               1,\r
+               _Label_ {{"g"},{"G"},{"G"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"g"},{"G"},{"G"}},\r
+               _KeyEvt_ {{MVK_g},{MVK_G},{MVK_G}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 3x6 */\r
+               1,\r
+               _Label_ {{"h"},{"H"},{"H"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"h"},{"H"},{"H"}},\r
+               _KeyEvt_ {{MVK_h},{MVK_H},{MVK_H}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 3x7 */\r
+               1,\r
+               _Label_ {{"j"},{"J"},{"J"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"j"},{"J"},{"J"}},\r
+               _KeyEvt_ {{MVK_j},{MVK_J},{MVK_J}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 3x8 */\r
+               1,\r
+               _Label_ {{"k"},{"K"},{"K"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"k"},{"K"},{"K"}},\r
+               _KeyEvt_ {{MVK_k},{MVK_K},{MVK_K}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 3x9 */\r
+               1,\r
+               _Label_ {{"l"},{"L"},{"L"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"l"},{"L"},{"L"}},\r
+               _KeyEvt_ {{MVK_l},{MVK_L},{MVK_L}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+\r
+       /* Fourth Line */\r
+       {\r
+               USED, /* 4x1 */\r
+               1,\r
+               _Label_ {{""},{""},{""}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"textinput_qwerty_icon_shift_01.png","textinput_qwerty_icon_shift_02.png","textinput_qwerty_icon_shift_01.png"}, {"textinput_qwerty_icon_shift_02.png","textinput_qwerty_icon_shift_01.png","textinput_qwerty_icon_shift_01.png"}, {"textinput_qwerty_icon_shift_03.png","textinput_qwerty_icon_shift_02.png","textinput_qwerty_icon_shift_01.png"}},\r
+               _BGImg_ {{"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_function.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_function.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_function.png","textinput_qwerty_button_nml.png"}},\r
+               1,\r
+               _KeyVal_ {{""},{""},{""}},\r
+               _KeyEvt_ {{UD_MVK_SHIFT},{UD_MVK_SHIFT},{UD_MVK_SHIFT}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 4x2 */\r
+               1,\r
+               _Label_ {{"z"},{"Z"},{"Z"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"z"},{"Z"},{"Z"}},\r
+               _KeyEvt_ {{MVK_z},{MVK_Z},{MVK_Z}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 4x3 */\r
+               1,\r
+               _Label_ {{"x"},{"X"},{"X"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"x"},{"X"},{"X"}},\r
+               _KeyEvt_ {{MVK_x},{MVK_X},{MVK_X}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 4x4 */\r
+               1,\r
+               _Label_ {{"c"},{"C"},{"C"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"c"},{"C"},{"C"}},\r
+               _KeyEvt_ {{MVK_c},{MVK_C},{MVK_C}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+               {{"c","\xc3\xa7"},{"C","\xc3\x87"},{"C","\xc3\x87"}},\r
+               FALSE,\r
+               0,\r
+               MCF_MULTI_TOUCH_TYPE_EXCLUSIVE,\r
+               NOT_USED,\r
+               {{"c","..."},{"C","..."},{"C","..."}},\r
+       },\r
+       {\r
+               USED, /* 4x5 */\r
+               1,\r
+               _Label_ {{"v"},{"V"},{"V"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"v"},{"V"},{"V"}},\r
+               _KeyEvt_ {{MVK_v},{MVK_V},{MVK_V}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 4x6 */\r
+               1,\r
+               _Label_ {{"b"},{"B"},{"B"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"b"},{"B"},{"B"}},\r
+               _KeyEvt_ {{MVK_b},{MVK_B},{MVK_B}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 4x7 */\r
+               1,\r
+               _Label_ {{"n"},{"N"},{"N"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"n"},{"N"},{"N"}},\r
+               _KeyEvt_ {{MVK_n},{MVK_N},{MVK_N}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+               {{"n"},{"N","\xc3\x91"},{"N","\xc3\x91"}},\r
+               FALSE,\r
+               0,\r
+               MCF_MULTI_TOUCH_TYPE_EXCLUSIVE,\r
+               NOT_USED,\r
+               {{"n"},{"N","..."},{"N","..."}},\r
+       },\r
+       {\r
+               USED, /* 4x8 */\r
+               1,\r
+               _Label_ {{"m"},{"M"},{"M"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"m"},{"M"},{"M"}},\r
+               _KeyEvt_ {{MVK_m},{MVK_M},{MVK_M}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 4x9 */\r
+               1,\r
+               _Label_ {{""},{""},{""}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"textinput_qwerty_icon_clear.png","textinput_qwerty_icon_clear.png"}, {"textinput_qwerty_icon_clear.png","textinput_qwerty_icon_clear.png"}, {"textinput_qwerty_icon_clear.png","textinput_qwerty_icon_clear.png"}},\r
+               _BGImg_ {{"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_function.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_function.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}},\r
+               1,\r
+               _KeyVal_ {{""},{""},{""}},\r
+               _KeyEvt_{{MVK_BackSpace},{MVK_BackSpace},{MVK_BackSpace}},\r
+               "",\r
+               0,\r
+               TRUE,\r
+       },\r
+       /* Fifth line*/\r
+\r
+       {\r
+               USED, /* 5x1 */\r
+               1,\r
+               _Label_{{"PT"},{"PT"},{"PT"}},\r
+               LABEL_PROPERTIES_QTY_BOTTOM_LINE_IMAGE_TYPE,\r
+               _LabelImg_{{"language_icon_port.png","language_icon_port.png"}, {"language_icon_port.png","language_icon_port.png"}, {"language_icon_port.png","language_icon_port.png"}},\r
+               _BGImg_{{"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_function.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_function.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_function.png","textinput_qwerty_button_nml.png"}},\r
+               1,\r
+               _KeyVal_{{""},{""},{""}},\r
+               _KeyEvt_ {{UD_MVK_LANG_CHANGE},{UD_MVK_LANG_CHANGE},{UD_MVK_LANG_CHANGE}},\r
+               "OptionWindow",\r
+               UD_MVK_OPTION_WINDOW,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 5x2 */\r
+               1,\r
+               _Label_{{""},{""},{""}},\r
+               LABEL_PROPERTIES_QTY_BOTTOM_LINE_TYPE,\r
+               _LabelImg_ {{"symbol_icon_port.png","symbol_icon_port.png"}, {"symbol_icon_port.png","symbol_icon_port.png"}, {"symbol_icon_port.png","symbol_icon_port.png"}},\r
+               _BGImg_{{"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_function.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_function.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_function.png","textinput_qwerty_button_nml.png"}},\r
+               1,\r
+               _KeyVal_{{""},{""},{""}},\r
+               _KeyEvt_ {{UD_MVK_SYM},{UD_MVK_SYM},{UD_MVK_SYM}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+\r
+       /* Default SubLayout */\r
+       // {\r
+       {\r
+               USED, /* 4x3 */\r
+               1,\r
+               _Label_{{""},{""},{""}},\r
+               LABEL_PROPERTIES_QTY_SPACE_KEY_TYPE,\r
+               _LabelImg_ {{"textinput_icon_space.png","textinput_icon_space_press.png"}, {"textinput_icon_space.png","textinput_icon_space_press.png"}, {"textinput_icon_space.png","textinput_icon_space_press.png"}},\r
+               _BGImg_{{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_{{""},{""},{""}},\r
+               _KeyEvt_{{MVK_space},{MVK_space},{MVK_space}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 4x4 */\r
+               3,\r
+        _Label_{{".",""}, {".",""}, {".",""}},\r
+               LABEL_PROPERTIES_QTY_BOTTOM_LINE_TYPE,\r
+        _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_{{"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png"}},\r
+               1,\r
+               _KeyVal_{{""},{""},{""}},\r
+        _KeyEvt_ {{MVK_period},{MVK_period},{MVK_period}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       // }\r
+       /* WithVoice SubLayout */\r
+       // {\r
+       {\r
+               USED, /* 4x3 */\r
+               1,\r
+               _Label_{{""},{""},{""}},\r
+               LABEL_PROPERTIES_QTY_BOTTOM_LINE_TYPE,\r
+               _LabelImg_ {{"camera_qwerty_kor-moa_port.png","camera_qwerty_kor-moa_port.png","camera_qwerty_kor-moa_port.png"}, {"camera_qwerty_kor-moa_port.png","camera_qwerty_kor-moa_port.png","camera_qwerty_kor-moa_port.png"}, {"camera_qwerty_kor-moa_port.png","camera_qwerty_kor-moa_port.png","camera_qwerty_kor-moa_port.png"}},\r
+               _BGImg_{{"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_function.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_function.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_function.png"}},\r
+               1,\r
+               _KeyVal_{{""},{""},{""}},\r
+               _KeyEvt_ {{0},{0},{0}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 4x4 */\r
+               1,\r
+               _Label_{{""},{""},{""}},\r
+               LABEL_PROPERTIES_QTY_SPACE_KEY_TYPE,\r
+               _LabelImg_ {{"textinput_icon_space.png","textinput_icon_space_press.png"}, {"textinput_icon_space.png","textinput_icon_space_press.png"}, {"textinput_icon_space.png","textinput_icon_space_press.png"}},\r
+               _BGImg_{{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_{{""},{""},{""}},\r
+               _KeyEvt_{{MVK_space},{MVK_space},{MVK_space}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 4x5 */\r
+               3,\r
+        _Label_{{".",""}, {".",""}, {".",""}},\r
+               LABEL_PROPERTIES_QTY_BOTTOM_LINE_TYPE,\r
+        _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_{{"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png"}},\r
+               1,\r
+               _KeyVal_{{""},{""},{""}},\r
+        _KeyEvt_ {{MVK_period},{MVK_period},{MVK_period}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       // }\r
+       /* URL SubLayout */\r
+       // {\r
+       {\r
+               USED, /* 4x3 */\r
+               1,\r
+               _Label_{{""},{""},{""}},\r
+               LABEL_PROPERTIES_QTY_SPACE_KEY_TYPE,\r
+               _LabelImg_ {{"textinput_icon_space.png","textinput_icon_space_press.png"}, {"textinput_icon_space.png","textinput_icon_space_press.png"}, {"textinput_icon_space.png","textinput_icon_space_press.png"}},\r
+               _BGImg_{{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_{{""},{""},{""}},\r
+               _KeyEvt_{{MVK_space},{MVK_space},{MVK_space}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 4x4 */\r
+               1,\r
+               _Label_{{"/"},{"/"},{"/"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_{{" "," "}, {" "," "}, {" "," "}},\r
+               _BGImg_{{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}},\r
+               1,\r
+               _KeyVal_{{"/"},{"/"},{"/"}},\r
+               _KeyEvt_ {{MVK_slash},{MVK_slash},{MVK_slash}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 4x5 */\r
+               1,\r
+               _Label_{{"www."},{"www."},{"www."}},\r
+               LABEL_PROPERTIES_QTY_WWW_TYPE,\r
+               _LabelImg_{{" "," "}, {" "," "}, {" "," "}},\r
+               _BGImg_{{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}},\r
+               1,\r
+               _KeyVal_{{"www."},{"www."},{"www."}},\r
+               _KeyEvt_ {{0},{0},{0}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 4x6 */\r
+               3,\r
+               _Label_{{".",""}, {".",""}, {".",""}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_{{" "," "}, {" "," "}, {" "," "}},\r
+               _BGImg_{{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}},\r
+               1,\r
+               _KeyVal_{{"."},{"."},{"."}},\r
+               _KeyEvt_ {{MVK_period},{MVK_period},{MVK_period}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       // }\r
+       /* Email SubLayout */\r
+       // {\r
+       {\r
+               USED, /* 4x3 */\r
+               1,\r
+               _Label_{{""},{""},{""}},\r
+               LABEL_PROPERTIES_QTY_SPACE_KEY_TYPE,\r
+               _LabelImg_ {{"textinput_icon_space.png","textinput_icon_space_press.png"}, {"textinput_icon_space.png","textinput_icon_space_press.png"}, {"textinput_icon_space.png","textinput_icon_space_press.png"}},\r
+               _BGImg_{{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_{{""},{""},{""}},\r
+               _KeyEvt_{{MVK_space},{MVK_space},{MVK_space}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 4x4 */\r
+               1,\r
+               _Label_{{"@"},{"@"},{"@"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_{{" "," "}, {" "," "}, {" "," "}},\r
+               _BGImg_{{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}},\r
+               1,\r
+               _KeyVal_{{"@"},{"@"},{"@"}},\r
+               _KeyEvt_ {{MVK_at},{MVK_at},{MVK_at}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 4x5 */\r
+               1,\r
+               _Label_{{".com"},{".com"},{".com"}},\r
+               LABEL_PROPERTIES_QTY_WWW_TYPE,\r
+               _LabelImg_{{" "," "}, {" "," "}, {" "," "}},\r
+               _BGImg_{{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}},\r
+               1,\r
+               _KeyVal_{{".com"},{".com"},{".com"}},\r
+               _KeyEvt_ {{0},{0},{0}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 4x6 */\r
+               3,\r
+               _Label_{{".",""}, {".",""}, {".",""}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_{{" "," "}, {" "," "}, {" "," "}},\r
+               _BGImg_{{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}},\r
+               1,\r
+               _KeyVal_{{"."},{"."},{"."}},\r
+               _KeyEvt_ {{MVK_period},{MVK_period},{MVK_period}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 4x5 */\r
+               1,\r
+               _Label_ {{""},{""},{""}},\r
+               LABEL_PROPERTIES_QTY_BOTTOM_LINE_TYPE,\r
+               _LabelImg_ {{"textinput_qwerty_icon_enter.png","textinput_qwerty_icon_enter.png","textinput_qwerty_icon_enter_disabled.png"}, {"textinput_qwerty_icon_enter.png","textinput_qwerty_icon_enter.png","textinput_qwerty_icon_enter_disabled.png"}, {"textinput_qwerty_icon_enter.png","textinput_qwerty_icon_enter.png","textinput_qwerty_icon_enter_disabled.png"}},\r
+               _BGImg_ {{"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_function.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_function.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}},\r
+               1,\r
+               _KeyVal_ {{""},{""},{""}},\r
+               _KeyEvt_{{MVK_Return},{MVK_Return},{MVK_Return}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+\r
+       {NOT_USED,},\r
+}\r
+#endif\r
+\r
+\r
diff --git a/res/mcfresource-port-qty-russian.h b/res/mcfresource-port-qty-russian.h
new file mode 100755 (executable)
index 0000000..397b21a
--- /dev/null
@@ -0,0 +1,827 @@
+/*
+ * Copyright 2012  Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.tizenopensource.org/license
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+
+#ifdef KEY_CONFIGURE_PHASE
+{
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},
+
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},
+
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CONTROL, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CONTROL, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},
+
+       /*option*/      {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_MODECHANGE, POPUP_TYPE_CONTEXT_POPUP, FALSE, FALSE, TRUE, {NOT_USED,}},
+       /*abc*/{USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_MODECHANGE, POPUP_TYPE_BTN_LONGPRESS_POPUP_ONCE, FALSE, FALSE, TRUE, {INPUT_MODE_EMOTICON_POPUP, NOT_USED, NOT_USED, NOT_USED, NOT_USED, NOT_USED, NOT_USED}},
+       /* Default SubLayout */
+       // {
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CONTROL, POPUP_TYPE_NONE, FALSE, FALSE, TRUE, {NOT_USED,}},
+       {USED, NOT_USED, BUTTON_TYPE_DIRECTION, KEY_TYPE_UNICODE, POPUP_TYPE_BTN_LONGPRESS_POPUP_ONCE, FALSE, FALSE, TRUE, {INPUT_MODE_PUNCTUATION_POPUP, NOT_USED, NOT_USED, NOT_USED, NOT_USED, NOT_USED, NOT_USED}},
+       // }
+       /* WithVoice SubLayout */
+       // {
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CONTROL, POPUP_TYPE_BTN_RELEASE_POPUP_ONCE, FALSE, FALSE, TRUE, {INPUT_MODE_SCENETEXT_POPUP, NOT_USED, NOT_USED, NOT_USED, NOT_USED, NOT_USED, NOT_USED}},
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CONTROL, POPUP_TYPE_NONE, FALSE, FALSE, TRUE, {NOT_USED,}},
+       {USED, NOT_USED, BUTTON_TYPE_DIRECTION, KEY_TYPE_UNICODE, POPUP_TYPE_BTN_LONGPRESS_POPUP_ONCE, FALSE, FALSE, TRUE, {INPUT_MODE_PUNCTUATION_POPUP, NOT_USED, NOT_USED, NOT_USED, NOT_USED, NOT_USED, NOT_USED}},
+       // }
+       /* URL SubLayout */
+       // {
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CONTROL, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},
+       {USED, CUSTOMID_WWWCOM, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_BTN_LONGPRESS_POPUP_ONCE, TRUE, TRUE, TRUE, {INPUT_MODE_URL_POPUP, NOT_USED, NOT_USED, NOT_USED, NOT_USED, NOT_USED, NOT_USED}},
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},
+       // }
+       /* Email SubLayout */
+       // {
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CONTROL, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_BTN_LONGPRESS_POPUP_ONCE, TRUE, TRUE, TRUE, {INPUT_MODE_URL_POPUP, NOT_USED, NOT_USED, NOT_USED, NOT_USED, NOT_USED, NOT_USED}},
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},
+       // }
+       /*enter*/{USED, CUSTOMID_ENTER, BUTTON_TYPE_NORMAL, KEY_TYPE_CONTROL, POPUP_TYPE_NONE, FALSE, FALSE, TRUE, {NOT_USED,}},
+
+       {NOT_USED,},
+}
+#endif
+
+
+#ifdef KEY_PROPERTIES_PHASE
+{
+               /* fValid, labelCnt, label, labelPropId, imgPath, keyValueCnt, keyValue, keyEvent, longKeyValue, longKeyEvent, userLabel,  userKeyValue,  userKeyEvent, */
+       {
+               USED, /* 1x1 042F 044F*/
+               2,
+               _Label_ {{"\xd1\x8f"},{"\xd0\xaf"},{"\xd0\xaf"}},
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},
+               2,
+               _KeyVal_ {{"\xd1\x8f"},{"\xd0\xaf"},{"\xd0\xaf"}},
+               _KeyEvt_ {{MVK_RUSSIAN_SMALL_YA},{MVK_RUSSIAN_CAPITAL_YA},{MVK_RUSSIAN_CAPITAL_YA}},
+               "",
+               0,
+               FALSE,
+       },
+       {
+               USED, /* 1x2 0436 0416*/
+               2,
+               _Label_ {{"\xd0\xb6"},{"\xd0\x96"},{"\xd0\x96"}},
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},
+               2,
+               _KeyVal_{{"\xd0\xb6"},{"\xd0\x96"},{"\xd0\x96"}},
+               _KeyEvt_ {{MVK_RUSSIAN_SMALL_ZHE},{MVK_RUSSIAN_CAPITAL_ZHE},{MVK_RUSSIAN_CAPITAL_ZHE}},
+               "",
+               0,
+               FALSE,
+       },
+       {
+               USED, /* 1x3 0435 0415*/
+               2,
+               _Label_ {{"\xd0\xb5"},{"\xd0\x95"},{"\xd0\x95"}},
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},
+               2,
+               _KeyVal_ {{"\xd0\xb5"},{"\xd0\x95"},{"\xd0\x95"}},
+               _KeyEvt_ {{MVK_RUSSIAN_SMALL_IE},{MVK_RUSSIAN_CAPITAL_IE},{MVK_RUSSIAN_CAPITAL_IE}},
+               "",
+               0,
+               FALSE,
+       },
+       {
+               USED, /* 1x4 0440 0420*/
+               1,
+               _Label_ {{"\xd1\x80"},{"\xd0\xa0"},{"\xd0\xa0"}},
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},
+               1,
+               _KeyVal_ {{"\xd1\x80"},{"\xd0\xa0"},{"\xd0\xa0"}},
+               _KeyEvt_ {{MVK_RUSSIAN_SMALL_ER},{MVK_RUSSIAN_CAPITAL_ER},{MVK_RUSSIAN_CAPITAL_ER}},
+               "",
+               0,
+               FALSE,
+       },
+       {
+               USED, /* 1x5 0442 0422*/
+               2,
+               _Label_ {{"\xd1\x82"},{"\xd0\xa2"},{"\xd0\xa2"}},
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},
+               1,
+               _KeyVal_ {{"\xd1\x82"},{"\xd0\xa2"},{"\xd0\xa2"}},
+               _KeyEvt_ {{MVK_RUSSIAN_SMALL_TE},{MVK_RUSSIAN_CAPITAL_TE},{MVK_RUSSIAN_CAPITAL_TE}},
+               "",
+               0,
+               FALSE,
+       },
+       {
+               USED, /* 1x6 044B 042B*/
+               2,
+               _Label_ {{"\xd1\x8b"},{"\xd0\xab"},{"\xd0\xab"}},
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},
+               2,
+               _KeyVal_ {{"\xd1\x8b"},{"\xd0\xab"},{"\xd0\xab"}},
+               _KeyEvt_ {{MVK_RUSSIAN_SMALL_YERU},{MVK_RUSSIAN_CAPITAL_YERU},{MVK_RUSSIAN_CAPITAL_YERU}},
+               "",
+               0,
+               FALSE,
+       },
+       {
+               USED, /* 1x7 0443 0423*/
+               2,
+               _Label_ {{"\xd1\x83"},{"\xd0\xa3"},{"\xd0\xa3"}},
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},
+               2,
+               _KeyVal_ {{"\xd1\x83"},{"\xd0\xa3"},{"\xd0\xa3"}},
+               _KeyEvt_ {{MVK_RUSSIAN_SMALL_U},{MVK_RUSSIAN_CAPITAL_U},{MVK_RUSSIAN_CAPITAL_U}},
+               "",
+               0,
+               FALSE,
+       },
+       {
+               USED, /* 1x8 0438 0418*/
+               2,
+               _Label_ {{"\xd0\xb8"},{"\xd0\x98"},{"\xd0\x98"}},
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},
+               2,
+               _KeyVal_ {{"\xd0\xb8"},{"\xd0\x98"},{"\xd0\x98"}},
+               _KeyEvt_ {{MVK_RUSSIAN_SMALL_I},{MVK_RUSSIAN_CAPITAL_I},{MVK_RUSSIAN_CAPITAL_I}},
+               "",
+               0,
+               FALSE,
+       },
+       {
+               USED, /* 1x9 043E 041E*/
+               2,
+               _Label_ {{"\xd0\xbe"},{"\xd0\x9e"},{"\xd0\x9e"}},
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},
+               2,
+               _KeyVal_ {{"\xd0\xbe"},{"\xd0\x9e"},{"\xd0\x9e"}},
+               _KeyEvt_ {{MVK_RUSSIAN_SMALL_O},{MVK_RUSSIAN_CAPITAL_O},{MVK_RUSSIAN_CAPITAL_O}},
+               "",
+               0,
+               FALSE,
+       },
+       {
+               USED, /* 1x10 043F 041F*/
+               2,
+               _Label_ {{"\xd0\xbf"},{"\xd0\x9f"},{"\xd0\x9f"}},
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},
+               2,
+               _KeyVal_ {{"\xd0\xbf"},{"\xd0\x9f"},{"\xd0\x9f"}},
+               _KeyEvt_ {{MVK_RUSSIAN_SMALL_PE},{MVK_RUSSIAN_CAPITAL_PE},{MVK_RUSSIAN_CAPITAL_PE}},
+               "",
+               0,
+               FALSE,
+       },
+       {
+               USED, /* 1x11 0448 0428*/
+               2,
+               _Label_ {{"\xd1\x88"},{"\xd0\xa8"},{"\xd0\xa8"}},
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},
+               2,
+               _KeyVal_ {{"\xd1\x88"},{"\xd0\xa8"},{"\xd0\xa8"}},
+               _KeyEvt_ {{MVK_RUSSIAN_SMALL_SHA},{MVK_RUSSIAN_CAPITAL_SHA},{MVK_RUSSIAN_CAPITAL_SHA}},
+               "",
+               0,
+               FALSE,
+       },
+       {
+               USED, /* 1x12 0449 0429*/
+               2,
+               _Label_ {{"\xd1\x89"},{"\xd0\xa9"},{"\xd0\xa9"}},
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},
+               2,
+               _KeyVal_ {{"\xd1\x89"},{"\xd0\xa9"},{"\xd0\xa9"}},
+               _KeyEvt_ {{MVK_RUSSIAN_SMALL_SHCA},{MVK_RUSSIAN_CAPITAL_SHCA},{MVK_RUSSIAN_CAPITAL_SHCA}},
+               "",
+               0,
+               FALSE,
+       },
+       {
+               USED, /* 1x1 0430 0410*/
+               2,
+               _Label_ {{"\xd0\xb0"},{"\xd0\x90"},{"\xd0\x90"}},
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},
+               2,
+               _KeyVal_ {{"\xd0\xb0"},{"\xd0\x90"},{"\xd0\x90"}},
+               _KeyEvt_ {{MVK_RUSSIAN_SMALL_A},{MVK_RUSSIAN_CAPITAL_A},{MVK_RUSSIAN_CAPITAL_A}},
+               "",
+               0,
+               FALSE,
+       },
+       {
+               USED, /* 1x2 0441 0421*/
+               2,
+               _Label_ {{"\xd1\x81"},{"\xd0\xa1"},{"\xd0\xa1"}},
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},
+               2,
+               _KeyVal_{{"\xd1\x81"},{"\xd0\xa1"},{"\xd0\xa1"}},
+               _KeyEvt_ {{MVK_RUSSIAN_SMALL_ES},{MVK_RUSSIAN_CAPITAL_ES},{MVK_RUSSIAN_CAPITAL_ES}},
+               "",
+               0,
+               FALSE,
+       },
+       {
+               USED, /* 1x3 0434 0414*/
+               2,
+               _Label_ {{"\xd0\xb4"},{"\xd0\x94"},{"\xd0\x94"}},
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},
+               2,
+               _KeyVal_ {{"\xd0\xb4"},{"\xd0\x94"},{"\xd0\x94"}},
+               _KeyEvt_ {{MVK_RUSSIAN_SMALL_DE},{MVK_RUSSIAN_CAPITAL_DE},{MVK_RUSSIAN_CAPITAL_DE}},
+               "",
+               0,
+               FALSE,
+       },
+       {
+               USED, /* 1x4 0444 0424*/
+               1,
+               _Label_ {{"\xd1\x84"},{"\xd0\xa4"},{"\xd0\xa4"}},
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},
+               1,
+               _KeyVal_ {{"\xd1\x84"},{"\xd0\xa4"},{"\xd0\xa4"}},
+               _KeyEvt_ {{MVK_RUSSIAN_SMALL_EF},{MVK_RUSSIAN_CAPITAL_EF},{MVK_RUSSIAN_CAPITAL_EF}},
+               "",
+               0,
+               FALSE,
+       },
+       {
+               USED, /* 1x5 0433 0413*/
+               2,
+               _Label_ {{"\xd0\xb3"},{"\xd0\x93"},{"\xd0\x93"}},
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},
+               1,
+               _KeyVal_ {{"\xd0\xb3"},{"\xd0\x93"},{"\xd0\x93"}},
+               _KeyEvt_ {{MVK_RUSSIAN_SMALL_GHE},{MVK_RUSSIAN_CAPITAL_GHE},{MVK_RUSSIAN_CAPITAL_GHE}},
+               "",
+               0,
+               FALSE,
+       },
+       {
+               USED, /* 1x6 0445 0425*/
+               2,
+               _Label_ {{"\xd1\x85"},{"\xd0\xa5"},{"\xd0\xa5"}},
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},
+               2,
+               _KeyVal_ {{"\xd1\x85"},{"\xd0\xa5"},{"\xd0\xa5"}},
+               _KeyEvt_ {{MVK_RUSSIAN_SMALL_HA},{MVK_RUSSIAN_CAPITAL_HA},{MVK_RUSSIAN_CAPITAL_HA}},
+               "",
+               0,
+               FALSE,
+       },
+       {
+               USED, /* 1x7 0439 0419*/
+               2,
+               _Label_ {{"\xd0\xb9"},{"\xd0\x99"},{"\xd0\x99"}},
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},
+               2,
+               _KeyVal_ {{"\xd0\xb9"},{"\xd0\x99"},{"\xd0\x99"}},
+               _KeyEvt_ {{MVK_RUSSIAN_SMALL_SHRTI},{MVK_RUSSIAN_CAPITAL_SHRTI},{MVK_RUSSIAN_CAPITAL_SHRTI}},
+               "",
+               0,
+               FALSE,
+       },
+       {
+               USED, /* 1x8 043A 041A*/
+               2,
+               _Label_ {{"\xd0\xba"},{"\xd0\x9a"},{"\xd0\x9a"}},
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},
+               2,
+               _KeyVal_ {{"\xd0\xba"},{"\xd0\x9a"},{"\xd0\x9a"}},
+               _KeyEvt_ {{MVK_RUSSIAN_SMALL_KA},{MVK_RUSSIAN_CAPITAL_KA},{MVK_RUSSIAN_CAPITAL_KA}},
+               "",
+               0,
+               FALSE,
+       },
+       {
+               USED, /* 1x9 043B 041B*/
+               2,
+               _Label_ {{"\xd0\xbb"},{"\xd0\x9b"},{"\xd0\x9b"}},
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},
+               2,
+               _KeyVal_ {{"\xd0\xbb"},{"\xd0\x9b"},{"\xd0\x9b"}},
+               _KeyEvt_ {{MVK_RUSSIAN_SMALL_EL},{MVK_RUSSIAN_CAPITAL_EL},{MVK_RUSSIAN_CAPITAL_EL}},
+               "",
+               0,
+               FALSE,
+       },
+       {
+               USED, /* 1x10 0447 0427*/
+               2,
+               _Label_ {{"\xd1\x87"},{"\xd0\xa7"},{"\xd0\xa7"}},
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},
+               2,
+               _KeyVal_ {{"\xd1\x87"},{"\xd0\xa7"},{"\xd0\xa7"}},
+               _KeyEvt_ {{MVK_RUSSIAN_SMALL_CHE},{MVK_RUSSIAN_CAPITAL_CHE},{MVK_RUSSIAN_CAPITAL_CHE}},
+               "",
+               0,
+               FALSE,
+       },
+       {
+               USED, /* 1x11 044D 042D*/
+               2,
+               _Label_ {{"\xd1\x8d"},{"\xd0\xad"},{"\xd0\xad"}},
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},
+               2,
+               _KeyVal_ {{"\xd1\x8d"},{"\xd0\xad"},{"\xd0\xad"}},
+               _KeyEvt_ {{MVK_RUSSIAN_SMALL_E},{MVK_RUSSIAN_CAPITAL_E},{MVK_RUSSIAN_CAPITAL_E}},
+               "",
+               0,
+               FALSE,
+       },
+       /*third line*/
+       {
+               USED, /* 3x1 */
+               1,
+               _Label_ {{""},{""},{""}},
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,
+               _LabelImg_ {{"textinput_qwerty_icon_shift_01.png","textinput_qwerty_icon_shift_02.png","textinput_qwerty_icon_shift_01.png"}, {"textinput_qwerty_icon_shift_02.png","textinput_qwerty_icon_shift_01.png","textinput_qwerty_icon_shift_01.png"}, {"textinput_qwerty_icon_shift_03.png","textinput_qwerty_icon_shift_02.png","textinput_qwerty_icon_shift_01.png"}},
+               _BGImg_ {{"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_function.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_function.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_function.png","textinput_qwerty_button_nml.png"}},
+               1,
+               _KeyVal_ {{""},{""},{""}},
+               _KeyEvt_ {{UD_MVK_SHIFT},{UD_MVK_SHIFT},{UD_MVK_SHIFT}},
+               "",
+               0,
+               FALSE,
+       },
+       {
+               USED, /* 3x2 0437 0417*/
+               2,
+               _Label_ {{"\xd0\xb7"},{"\xd0\x97"},{"\xd0\x97"}},
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},
+               2,
+               _KeyVal_ {{"\xd0\xb7"},{"\xd0\x97"},{"\xd0\x97"}},
+               _KeyEvt_ {{MVK_RUSSIAN_SMALL_ZE},{MVK_RUSSIAN_CAPITAL_ZE},{MVK_RUSSIAN_CAPITAL_ZE}},
+               "",
+               0,
+               FALSE,
+       },
+       {
+               USED, /* 3x3 044C 042C*/
+               2,
+               _Label_ {{"\xd1\x8c"},{"\xd0\xac"},{"\xd0\xac"}},
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},
+               2,
+               _KeyVal_ {{"\xd1\x8c"},{"\xd0\xac"},{"\xd0\xac"}},
+               _KeyEvt_ {{MVK_RUSSIAN_SMALL_SOFT},{MVK_RUSSIAN_CAPITAL_SOFT},{MVK_RUSSIAN_CAPITAL_SOFT}},
+               "",
+               0,
+               FALSE,
+       },
+       {
+               USED, /* 3x4 0446 0426*/
+               2,
+               _Label_ {{"\xd1\x86"},{"\xd0\xa6"},{"\xd0\xa6"}},
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},
+               2,
+               _KeyVal_ {{"\xd1\x86"},{"\xd0\xa6"},{"\xd0\xa6"}},
+               _KeyEvt_ {{MVK_RUSSIAN_SMALL_TSE},{MVK_RUSSIAN_CAPITAL_TSE},{MVK_RUSSIAN_CAPITAL_TSE}},
+               "",
+               0,
+               FALSE,
+       },
+       {
+               USED, /* 3x5 0432 0412*/
+               2,
+               _Label_ {{"\xd0\xb2"},{"\xd0\x92"},{"\xd0\x92"}},
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},
+               2,
+               _KeyVal_ {{"\xd0\xb2"},{"\xd0\x92"},{"\xd0\x92"}},
+               _KeyEvt_ {{MVK_RUSSIAN_SMALL_VE},{MVK_RUSSIAN_CAPITAL_VE},{MVK_RUSSIAN_CAPITAL_VE}},
+               "",
+               0,
+               FALSE,
+       },
+       {
+               USED, /* 3x6 0431 0411*/
+               2,
+               _Label_ {{"\xd0\xb1"},{"\xd0\x91"},{"\xd0\x91"}},
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},
+               2,
+               _KeyVal_ {{"\xd0\xb1"},{"\xd0\x91"},{"\xd0\x91"}},
+               _KeyEvt_ {{MVK_RUSSIAN_SMALL_BE},{MVK_RUSSIAN_CAPITAL_BE},{MVK_RUSSIAN_CAPITAL_BE}},
+               "",
+               0,
+               FALSE,
+       },
+       {
+               USED, /* 3x7 043D 041D*/
+               2,
+               _Label_ {{"\xd0\xbd"},{"\xd0\x9d"},{"\xd0\x9d"}},
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},
+               2,
+               _KeyVal_ {{"\xd0\xbd"},{"\xd0\x9d"},{"\xd0\x9d"}},
+               _KeyEvt_ {{MVK_RUSSIAN_SMALL_EN},{MVK_RUSSIAN_CAPITAL_EN},{MVK_RUSSIAN_CAPITAL_EN}},
+               "",
+               0,
+               FALSE,
+       },
+       {
+               USED, /* 3x8 043C 041C*/
+               2,
+               _Label_ {{"\xd0\xbc"},{"\xd0\x9c"},{"\xd0\x9c"}},
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},
+               2,
+               _KeyVal_ {{"\xd0\xbc"},{"\xd0\x9c"},{"\xd0\x9c"}},
+               _KeyEvt_ {{MVK_RUSSIAN_SMALL_EM},{MVK_RUSSIAN_CAPITAL_EM},{MVK_RUSSIAN_CAPITAL_EM}},
+               "",
+               0,
+               FALSE,
+       },
+       {
+               USED, /* 3x9 044A 042A*/
+               2,
+               _Label_ {{"\xd1\x8a"},{"\xd0\xaa"},{"\xd0\xaa"}},
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},
+               2,
+               _KeyVal_ {{"\xd1\x8a"},{"\xd0\xaa"},{"\xd0\xaa"}},
+               _KeyEvt_ {{MVK_RUSSIAN_SMALL_HARD},{MVK_RUSSIAN_CAPITAL_HARD},{MVK_RUSSIAN_CAPITAL_HARD}},
+               "",
+               0,
+               FALSE,
+       },
+       {
+               USED, /* 3x10 044E 042E*/
+               2,
+               _Label_ {{"\xd1\x8e"},{"\xd0\xae"},{"\xd0\xae"}},
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},
+               2,
+               _KeyVal_ {{"\xd1\x8e"},{"\xd0\xae"},{"\xd0\xae"}},
+               _KeyEvt_ {{MVK_RUSSIAN_SMALL_YU},{MVK_RUSSIAN_CAPITAL_YU},{MVK_RUSSIAN_CAPITAL_YU}},
+               "",
+               0,
+               FALSE,
+       },
+       {
+               USED, /* 3x11 0451 0401*/
+               2,
+               _Label_ {{"\xd1\x91"},{"\xd0\x81"},{"\xd0\x81"}},
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},
+               2,
+               _KeyVal_ {{"\xd1\x91"},{"\xd0\x81"},{"\xd0\x81"}},
+               _KeyEvt_ {{MVK_RUSSIAN_SMALL_IO},{MVK_RUSSIAN_CAPITAL_IO},{MVK_RUSSIAN_CAPITAL_IO}},
+               "",
+               0,
+               FALSE,
+       },
+       {
+               USED, /* 3x12 */
+               1,
+               _Label_ {{""},{""},{""}},
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,
+               _LabelImg_ {{"textinput_qwerty_icon_clear.png","textinput_qwerty_icon_clear.png"}, {"textinput_qwerty_icon_clear.png","textinput_qwerty_icon_clear.png"}, {"textinput_qwerty_icon_clear.png","textinput_qwerty_icon_clear.png"}},
+               _BGImg_ {{"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_function.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_function.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}},
+               1,
+               _KeyVal_ {{""},{""},{""}},
+               _KeyEvt_{{MVK_BackSpace},{MVK_BackSpace},{MVK_BackSpace}},
+               "",
+               0,
+               TRUE,
+       },
+       /*fourth line*/
+
+       {
+               USED, /* 4x1 */
+               1,
+               _Label_{{"RU"},{"RU"},{"RU"}},
+               LABEL_PROPERTIES_QTY_BOTTOM_LINE_IMAGE_TYPE,
+               _LabelImg_{{"language_icon_port.png","language_icon_port.png"}, {"language_icon_port.png","language_icon_port.png"}, {"language_icon_port.png","language_icon_port.png"}},
+               _BGImg_{{"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_function.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_function.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_function.png","textinput_qwerty_button_nml.png"}},
+               1,
+               _KeyVal_{{""},{""},{""}},
+               _KeyEvt_ {{UD_MVK_LANG_CHANGE},{UD_MVK_LANG_CHANGE},{UD_MVK_LANG_CHANGE}},
+               "OptionWindow",
+               UD_MVK_OPTION_WINDOW,
+               FALSE,
+       },
+       {
+               USED, /* 4x2 */
+               1,
+               _Label_{{""},{""},{""}},
+               LABEL_PROPERTIES_QTY_BOTTOM_LINE_TYPE,
+               _LabelImg_ {{"symbol_icon_port.png","symbol_icon_port.png"}, {"symbol_icon_port.png","symbol_icon_port.png"}, {"symbol_icon_port.png","symbol_icon_port.png"}},
+               _BGImg_{{"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_function.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_function.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_function.png","textinput_qwerty_button_nml.png"}},
+               1,
+               _KeyVal_{{""},{""},{""}},
+               _KeyEvt_ {{UD_MVK_SYM},{UD_MVK_SYM},{UD_MVK_SYM}},
+               "",
+               0,
+               FALSE,
+       },
+
+       /* Default SubLayout */
+       {
+               USED, /* 4x3 */
+               1,
+               _Label_{{""},{""},{""}},
+               LABEL_PROPERTIES_QTY_SPACE_KEY_TYPE,
+               _LabelImg_ {{"textinput_icon_space.png","textinput_icon_space_press.png"}, {"textinput_icon_space.png","textinput_icon_space_press.png"}, {"textinput_icon_space.png","textinput_icon_space_press.png"}},
+               _BGImg_{{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},
+               1,
+               _KeyVal_{{""},{""},{""}},
+               _KeyEvt_{{MVK_space},{MVK_space},{MVK_space}},
+               "",
+               0,
+               FALSE,
+       },
+       {
+               USED, /* 4x4 */
+               3,
+        _Label_{{".",""}, {".",""}, {".",""}},
+               LABEL_PROPERTIES_QTY_BOTTOM_LINE_TYPE,
+        _LabelImg_ {{"",""}, {"",""}, {"",""}},
+               _BGImg_{{"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png"}},
+               1,
+               _KeyVal_{{""},{""},{""}},
+        _KeyEvt_ {{MVK_period},{MVK_period},{MVK_period}},
+               "",
+               0,
+               FALSE,
+       },
+       /* WithVoice SubLayout */
+       {
+               USED, /* 4x3 */
+               1,
+               _Label_{{""},{""},{""}},
+               LABEL_PROPERTIES_QTY_BOTTOM_LINE_TYPE,
+               _LabelImg_ {{"camera_qwerty_kor-moa_port.png","camera_qwerty_kor-moa_port.png","camera_qwerty_kor-moa_port.png"}, {"camera_qwerty_kor-moa_port.png","camera_qwerty_kor-moa_port.png","camera_qwerty_kor-moa_port.png"}, {"camera_qwerty_kor-moa_port.png","camera_qwerty_kor-moa_port.png","camera_qwerty_kor-moa_port.png"}},
+               _BGImg_{{"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_function.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_function.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_function.png"}},
+               1,
+               _KeyVal_{{""},{""},{""}},
+               _KeyEvt_ {{0},{0},{0}},
+               "",
+               0,
+               FALSE,
+       },
+       {
+               USED, /* 4x4 */
+               1,
+               _Label_{{""},{""},{""}},
+               LABEL_PROPERTIES_QTY_SPACE_KEY_TYPE,
+               _LabelImg_ {{"textinput_icon_space.png","textinput_icon_space_press.png"}, {"textinput_icon_space.png","textinput_icon_space_press.png"}, {"textinput_icon_space.png","textinput_icon_space_press.png"}},
+               _BGImg_{{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},
+               1,
+               _KeyVal_{{""},{""},{""}},
+               _KeyEvt_{{MVK_space},{MVK_space},{MVK_space}},
+               "",
+               0,
+               FALSE,
+       },
+       {
+               USED, /* 4x5 */
+               3,
+        _Label_{{".",""}, {".",""}, {".",""}},
+               LABEL_PROPERTIES_QTY_BOTTOM_LINE_TYPE,
+        _LabelImg_ {{"",""}, {"",""}, {"",""}},
+               _BGImg_{{"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png"}},
+               1,
+               _KeyVal_{{""},{""},{""}},
+        _KeyEvt_ {{MVK_period},{MVK_period},{MVK_period}},
+               "",
+               0,
+               FALSE,
+       },
+       // }
+       /* URL SubLayout */
+       // {
+       {
+               USED, /* 4x3 */
+               1,
+               _Label_{{""},{""},{""}},
+               LABEL_PROPERTIES_QTY_SPACE_KEY_TYPE,
+               _LabelImg_ {{"textinput_icon_space.png","textinput_icon_space_press.png"}, {"textinput_icon_space.png","textinput_icon_space_press.png"}, {"textinput_icon_space.png","textinput_icon_space_press.png"}},
+               _BGImg_{{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},
+               1,
+               _KeyVal_{{""},{""},{""}},
+               _KeyEvt_{{MVK_space},{MVK_space},{MVK_space}},
+               "",
+               0,
+               FALSE,
+       },
+       {
+               USED, /* 4x4 */
+               1,
+               _Label_{{"/"},{"/"},{"/"}},
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,
+               _LabelImg_{{" "," "}, {" "," "}, {" "," "}},
+               _BGImg_{{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}},
+               1,
+               _KeyVal_{{"/"},{"/"},{"/"}},
+               _KeyEvt_ {{MVK_slash},{MVK_slash},{MVK_slash}},
+               "",
+               0,
+               FALSE,
+       },
+       {
+               USED, /* 4x5 */
+               1,
+               _Label_{{"www."},{"www."},{"www."}},
+               LABEL_PROPERTIES_QTY_WWW_TYPE,
+               _LabelImg_{{" "," "}, {" "," "}, {" "," "}},
+               _BGImg_{{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}},
+               1,
+               _KeyVal_{{"www."},{"www."},{"www."}},
+               _KeyEvt_ {{0},{0},{0}},
+               "",
+               0,
+               FALSE,
+       },
+       {
+               USED, /* 4x6 */
+               3,
+               _Label_{{".",""}, {".",""}, {".",""}},
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,
+               _LabelImg_{{" "," "}, {" "," "}, {" "," "}},
+               _BGImg_{{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}},
+               1,
+               _KeyVal_{{"."},{"."},{"."}},
+               _KeyEvt_ {{MVK_period},{MVK_period},{MVK_period}},
+               "",
+               0,
+               FALSE,
+       },
+       // }
+       /* Email SubLayout */
+       // {
+       {
+               USED, /* 4x3 */
+               1,
+               _Label_{{""},{""},{""}},
+               LABEL_PROPERTIES_QTY_SPACE_KEY_TYPE,
+               _LabelImg_ {{"textinput_icon_space.png","textinput_icon_space_press.png"}, {"textinput_icon_space.png","textinput_icon_space_press.png"}, {"textinput_icon_space.png","textinput_icon_space_press.png"}},
+               _BGImg_{{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},
+               1,
+               _KeyVal_{{""},{""},{""}},
+               _KeyEvt_{{MVK_space},{MVK_space},{MVK_space}},
+               "",
+               0,
+               FALSE,
+       },
+       {
+               USED, /* 4x4 */
+               1,
+               _Label_{{"@"},{"@"},{"@"}},
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,
+               _LabelImg_{{" "," "}, {" "," "}, {" "," "}},
+               _BGImg_{{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}},
+               1,
+               _KeyVal_{{"@"},{"@"},{"@"}},
+               _KeyEvt_ {{MVK_at},{MVK_at},{MVK_at}},
+               "",
+               0,
+               FALSE,
+       },
+       {
+               USED, /* 4x5 */
+               1,
+               _Label_{{".com"},{".com"},{".com"}},
+               LABEL_PROPERTIES_QTY_WWW_TYPE,
+               _LabelImg_{{" "," "}, {" "," "}, {" "," "}},
+               _BGImg_{{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}},
+               1,
+               _KeyVal_{{".com"},{".com"},{".com"}},
+               _KeyEvt_ {{0},{0},{0}},
+               "",
+               0,
+               FALSE,
+       },
+       {
+               USED, /* 4x6 */
+               3,
+               _Label_{{".",""}, {".",""}, {".",""}},
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,
+               _LabelImg_{{" "," "}, {" "," "}, {" "," "}},
+               _BGImg_{{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}},
+               1,
+               _KeyVal_{{"."},{"."},{"."}},
+               _KeyEvt_ {{MVK_period},{MVK_period},{MVK_period}},
+               "",
+               0,
+               FALSE,
+       },
+       {
+               USED, /* 4x5 */
+               1,
+               _Label_ {{""},{""},{""}},
+               LABEL_PROPERTIES_QTY_BOTTOM_LINE_TYPE,
+               _LabelImg_ {{"textinput_qwerty_icon_enter.png","textinput_qwerty_icon_enter.png","textinput_qwerty_icon_enter_disabled.png"}, {"textinput_qwerty_icon_enter.png","textinput_qwerty_icon_enter.png","textinput_qwerty_icon_enter_disabled.png"}, {"textinput_qwerty_icon_enter.png","textinput_qwerty_icon_enter.png","textinput_qwerty_icon_enter_disabled.png"}},
+               _BGImg_ {{"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_function.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_function.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}},
+               1,
+               _KeyVal_ {{""},{""},{""}},
+               _KeyEvt_{{MVK_Return},{MVK_Return},{MVK_Return}},
+               "",
+               0,
+               FALSE,
+       },
+
+       {NOT_USED,},
+}
+#endif
+
+
diff --git a/res/mcfresource-port-qty-spanish.h b/res/mcfresource-port-qty-spanish.h
new file mode 100755 (executable)
index 0000000..1a35deb
--- /dev/null
@@ -0,0 +1,769 @@
+/*
+ * Copyright 2012  Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.tizenopensource.org/license
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+\r
+#ifdef KEY_CONFIGURE_PHASE\r
+{\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CONTROL, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CONTROL, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+\r
+\r
+       /*option*/      {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_MODECHANGE, POPUP_TYPE_CONTEXT_POPUP, FALSE, FALSE, TRUE, {NOT_USED,}},\r
+       /*abc*/{USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_MODECHANGE, POPUP_TYPE_BTN_LONGPRESS_POPUP_ONCE, FALSE, FALSE, TRUE, {INPUT_MODE_EMOTICON_POPUP, NOT_USED, NOT_USED, NOT_USED, NOT_USED, NOT_USED, NOT_USED}},\r
+       /* Default SubLayout */\r
+       // {\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CONTROL, POPUP_TYPE_NONE, FALSE, FALSE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_DIRECTION, KEY_TYPE_UNICODE, POPUP_TYPE_BTN_LONGPRESS_POPUP_ONCE, FALSE, FALSE, TRUE, {INPUT_MODE_PUNCTUATION_POPUP, NOT_USED, NOT_USED, NOT_USED, NOT_USED, NOT_USED, NOT_USED}},\r
+       // }\r
+       /* WithVoice SubLayout */\r
+       // {\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CONTROL, POPUP_TYPE_BTN_RELEASE_POPUP_ONCE, FALSE, FALSE, TRUE, {INPUT_MODE_SCENETEXT_POPUP, NOT_USED, NOT_USED, NOT_USED, NOT_USED, NOT_USED, NOT_USED}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CONTROL, POPUP_TYPE_NONE, FALSE, FALSE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_DIRECTION, KEY_TYPE_UNICODE, POPUP_TYPE_BTN_LONGPRESS_POPUP_ONCE, FALSE, FALSE, TRUE, {INPUT_MODE_PUNCTUATION_POPUP, NOT_USED, NOT_USED, NOT_USED, NOT_USED, NOT_USED, NOT_USED}},\r
+       // }\r
+       /* URL SubLayout */\r
+       // {\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CONTROL, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, CUSTOMID_WWWCOM, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_BTN_LONGPRESS_POPUP_ONCE, TRUE, TRUE, TRUE, {INPUT_MODE_URL_POPUP, NOT_USED, NOT_USED, NOT_USED, NOT_USED, NOT_USED, NOT_USED}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       // }\r
+       /* Email SubLayout */\r
+       // {\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CONTROL, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_BTN_LONGPRESS_POPUP_ONCE, TRUE, TRUE, TRUE, {INPUT_MODE_URL_POPUP, NOT_USED, NOT_USED, NOT_USED, NOT_USED, NOT_USED, NOT_USED}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       // }\r
+       /*enter*/{USED, CUSTOMID_ENTER, BUTTON_TYPE_NORMAL, KEY_TYPE_CONTROL, POPUP_TYPE_NONE, FALSE, FALSE, TRUE, {NOT_USED,}},\r
+\r
+       {NOT_USED,},\r
+}\r
+#endif\r
+\r
+#ifdef KEY_PROPERTIES_PHASE\r
+{\r
+       /* fValid, labelCnt, label, labelPropId, imgPath, keyValueCnt, keyValue, keyEvent, longKeyValue, longKeyEvent, userLabel,  userKeyValue,  userKeyEvent, */\r
+       /* Second Line */\r
+       {\r
+               USED, /* 2x1 */\r
+               1,\r
+               _Label_ {{"q"},{"Q"},{"Q"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"q"},{"Q"},{"Q"}},\r
+               _KeyEvt_ {{MVK_q},{MVK_Q},{MVK_Q}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 2x2 */\r
+               1,\r
+               _Label_ {{"w"},{"W"},{"W"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"w"},{"W"},{"W"}},\r
+               _KeyEvt_ {{MVK_w},{MVK_W},{MVK_W}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 2x3 */\r
+               1,\r
+               _Label_ {{"e"},{"E"},{"E"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"e"},{"E"},{"E"}},\r
+               _KeyEvt_ {{MVK_e},{MVK_E},{MVK_E}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+               {{"e","\xc3\xa9"},{"E","\xc3\x89"}},\r
+               FALSE,\r
+               0,\r
+               MCF_MULTI_TOUCH_TYPE_EXCLUSIVE,\r
+               NOT_USED,\r
+               {{"e","..."},{"E","..."},{"E","..."}},\r
+       },\r
+       {\r
+               USED, /* 2x4 */\r
+               1,\r
+               _Label_ {{"r"},{"R"},{"R"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"r"},{"R"},{"R"}},\r
+               _KeyEvt_ {{MVK_r},{MVK_R},{MVK_R}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 2x5 */\r
+               1,\r
+               _Label_ {{"t"},{"T"},{"T"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"t"},{"T"},{"T"}},\r
+               _KeyEvt_ {{MVK_t},{MVK_T},{MVK_T}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 2x6 */\r
+               1,\r
+               _Label_ {{"y"},{"Y"},{"Y"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"y"},{"Y"},{"Y"}},\r
+               _KeyEvt_ {{MVK_y},{MVK_Y},{MVK_Y}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 2x7 */\r
+               1,\r
+               _Label_ {{"u"},{"U"},{"U"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"u"},{"U"},{"U"}},\r
+               _KeyEvt_ {{MVK_u},{MVK_U},{MVK_U}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+               {{"u","\xc3\xba"},{"U","\xc3\x9a"},{"U","\xc3\x9a"}},\r
+               FALSE,\r
+               0,\r
+               MCF_MULTI_TOUCH_TYPE_EXCLUSIVE,\r
+               NOT_USED,\r
+               {{"u","..."},{"U","..."},{"U","..."}},\r
+       },\r
+       {\r
+               USED, /* 2x8 */\r
+               1,\r
+               _Label_ {{"i"},{"I"},{"I"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"i"},{"I"},{"I"}},\r
+               _KeyEvt_ {{MVK_i},{MVK_I},{MVK_I}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+               {{"i","\xc3\xad"},{"I","\xc3\x8d"},{"I","\xc3\x8d"}},\r
+               FALSE,\r
+               0,\r
+               MCF_MULTI_TOUCH_TYPE_EXCLUSIVE,\r
+               NOT_USED,\r
+               {{"i","..."},{"I","..."},{"I","..."}},\r
+       },\r
+       {\r
+               USED, /* 2x9 */\r
+               1,\r
+               _Label_ {{"o"},{"O"},{"O"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"o"},{"O"},{"O"}},\r
+               _KeyEvt_ {{MVK_o},{MVK_O},{MVK_O}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+               {{"o","\xc3\xb3"},{"O","\xc3\x93"},{"O","\xc3\x93"}},\r
+               FALSE,\r
+               0,\r
+               MCF_MULTI_TOUCH_TYPE_EXCLUSIVE,\r
+               NOT_USED,\r
+               {{"o","..."},{"O","..."},{"O","..."}},\r
+       },\r
+       {\r
+               USED, /* 2x10 */\r
+               1,\r
+               _Label_ {{"p"},{"P"},{"P"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"p"},{"P"},{"P"}},\r
+               _KeyEvt_ {{MVK_p},{MVK_P},{MVK_P}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+\r
+\r
+       /* Third Line */\r
+       {\r
+               USED, /* 3x1 */\r
+               1,\r
+               _Label_ {{"a"},{"A"},{"A"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"a"},{"A"},{"A"}},\r
+               _KeyEvt_ {{MVK_a},{MVK_A},{MVK_A}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+               {{"a","\xc3\xa1"},{"A","\xc3\x81"},{"A","\xc3\x81"}},\r
+               FALSE,\r
+               0,\r
+               MCF_MULTI_TOUCH_TYPE_EXCLUSIVE,\r
+               NOT_USED,\r
+               {{"a","..."},{"A","..."},{"A","..."}},\r
+       },\r
+       {\r
+               USED, /* 3x2 */\r
+               1,\r
+               _Label_ {{"s"},{"S"},{"S"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"s"},{"S"},{"S"}},\r
+               _KeyEvt_ {{MVK_s},{MVK_S},{MVK_S}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 3x3 */\r
+               1,\r
+               _Label_ {{"d"},{"D"},{"D"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"d"},{"D"},{"D"}},\r
+               _KeyEvt_ {{MVK_d},{MVK_D},{MVK_D}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 3x4 */\r
+               1,\r
+               _Label_ {{"f"},{"F"},{"F"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"f"},{"F"},{"F"}},\r
+               _KeyEvt_ {{MVK_f},{MVK_F},{MVK_F}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 3x5 */\r
+               1,\r
+               _Label_ {{"g"},{"G"},{"G"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"g"},{"G"},{"G"}},\r
+               _KeyEvt_ {{MVK_g},{MVK_G},{MVK_G}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 3x6 */\r
+               1,\r
+               _Label_ {{"h"},{"H"},{"H"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"h"},{"H"},{"H"}},\r
+               _KeyEvt_ {{MVK_h},{MVK_H},{MVK_H}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 3x7 */\r
+               1,\r
+               _Label_ {{"j"},{"J"},{"J"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"j"},{"J"},{"J"}},\r
+               _KeyEvt_ {{MVK_j},{MVK_J},{MVK_J}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 3x8 */\r
+               1,\r
+               _Label_ {{"k"},{"K"},{"K"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"k"},{"K"},{"K"}},\r
+               _KeyEvt_ {{MVK_k},{MVK_K},{MVK_K}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 3x9 */\r
+               1,\r
+               _Label_ {{"l"},{"L"},{"L"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"l"},{"L"},{"L"}},\r
+               _KeyEvt_ {{MVK_l},{MVK_L},{MVK_L}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+\r
+       /* Fourth Line */\r
+       {\r
+               USED, /* 4x1 */\r
+               1,\r
+               _Label_ {{""},{""},{""}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"textinput_qwerty_icon_shift_01.png","textinput_qwerty_icon_shift_02.png","textinput_qwerty_icon_shift_01.png"}, {"textinput_qwerty_icon_shift_02.png","textinput_qwerty_icon_shift_01.png","textinput_qwerty_icon_shift_01.png"}, {"textinput_qwerty_icon_shift_03.png","textinput_qwerty_icon_shift_02.png","textinput_qwerty_icon_shift_01.png"}},\r
+               _BGImg_ {{"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_function.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_function.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_function.png","textinput_qwerty_button_nml.png"}},\r
+               1,\r
+               _KeyVal_ {{""},{""},{""}},\r
+               _KeyEvt_ {{UD_MVK_SHIFT},{UD_MVK_SHIFT},{UD_MVK_SHIFT}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 4x2 */\r
+               1,\r
+               _Label_ {{"z"},{"Z"},{"Z"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"z"},{"Z"},{"Z"}},\r
+               _KeyEvt_ {{MVK_z},{MVK_Z},{MVK_Z}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 4x3 */\r
+               1,\r
+               _Label_ {{"x"},{"X"},{"X"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"x"},{"X"},{"X"}},\r
+               _KeyEvt_ {{MVK_x},{MVK_X},{MVK_X}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 4x4 */\r
+               1,\r
+               _Label_ {{"c"},{"C"},{"C"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"c"},{"C"},{"C"}},\r
+               _KeyEvt_ {{MVK_c},{MVK_C},{MVK_C}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 4x5 */\r
+               1,\r
+               _Label_ {{"v"},{"V"},{"V"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"v"},{"V"},{"V"}},\r
+               _KeyEvt_ {{MVK_v},{MVK_V},{MVK_V}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 4x6 */\r
+               1,\r
+               _Label_ {{"b"},{"B"},{"B"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"b"},{"B"},{"B"}},\r
+               _KeyEvt_ {{MVK_b},{MVK_B},{MVK_B}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 4x7 */\r
+               1,\r
+               _Label_ {{"n"},{"N"},{"N"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"n"},{"N"},{"N"}},\r
+               _KeyEvt_ {{MVK_n},{MVK_N},{MVK_N}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+               {{"n","\xc3\xb1"},{"N","\xc3\x91"},{"N","\xc3\x91"}},\r
+               FALSE,\r
+               0,\r
+               MCF_MULTI_TOUCH_TYPE_EXCLUSIVE,\r
+               NOT_USED,\r
+               {{"n","..."},{"N","..."},{"N","..."}},\r
+       },\r
+       {\r
+               USED, /* 4x8 */\r
+               1,\r
+               _Label_ {{"m"},{"M"},{"M"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"m"},{"M"},{"M"}},\r
+               _KeyEvt_ {{MVK_m},{MVK_M},{MVK_M}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 4x9 */\r
+               1,\r
+               _Label_ {{""},{""},{""}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"textinput_qwerty_icon_clear.png","textinput_qwerty_icon_clear.png"}, {"textinput_qwerty_icon_clear.png","textinput_qwerty_icon_clear.png"}, {"textinput_qwerty_icon_clear.png","textinput_qwerty_icon_clear.png"}},\r
+               _BGImg_ {{"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_function.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_function.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}},\r
+               1,\r
+               _KeyVal_ {{""},{""},{""}},\r
+               _KeyEvt_{{MVK_BackSpace},{MVK_BackSpace},{MVK_BackSpace}},\r
+               "",\r
+               0,\r
+               TRUE,\r
+       },\r
+\r
+       /* Fifth line*/\r
+\r
+       {\r
+               USED, /* 5x1 */\r
+               1,\r
+               _Label_{{"ES"},{"ES"},{"ES"}},\r
+               LABEL_PROPERTIES_QTY_BOTTOM_LINE_IMAGE_TYPE,\r
+               _LabelImg_{{"language_icon_port.png","language_icon_port.png"}, {"language_icon_port.png","language_icon_port.png"}, {"language_icon_port.png","language_icon_port.png"}},\r
+               _BGImg_{{"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_function.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_function.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_function.png","textinput_qwerty_button_nml.png"}},\r
+               1,\r
+               _KeyVal_{{""},{""},{""}},\r
+               _KeyEvt_ {{UD_MVK_LANG_CHANGE},{UD_MVK_LANG_CHANGE},{UD_MVK_LANG_CHANGE}},\r
+               "OptionWindow",\r
+               UD_MVK_OPTION_WINDOW,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 5x2 */\r
+               1,\r
+               _Label_{{""},{""},{""}},\r
+               LABEL_PROPERTIES_QTY_BOTTOM_LINE_TYPE,\r
+               _LabelImg_ {{"symbol_icon_port.png","symbol_icon_port.png"}, {"symbol_icon_port.png","symbol_icon_port.png"}, {"symbol_icon_port.png","symbol_icon_port.png"}},\r
+               _BGImg_{{"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_function.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_function.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_function.png","textinput_qwerty_button_nml.png"}},\r
+               1,\r
+               _KeyVal_{{""},{""},{""}},\r
+               _KeyEvt_ {{UD_MVK_SYM},{UD_MVK_SYM},{UD_MVK_SYM}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+\r
+       /* Default SubLayout */\r
+       // {\r
+       {\r
+               USED, /* 4x3 */\r
+               1,\r
+               _Label_{{""},{""},{""}},\r
+               LABEL_PROPERTIES_QTY_SPACE_KEY_TYPE,\r
+               _LabelImg_ {{"textinput_icon_space.png","textinput_icon_space_press.png"}, {"textinput_icon_space.png","textinput_icon_space_press.png"}, {"textinput_icon_space.png","textinput_icon_space_press.png"}},\r
+               _BGImg_{{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_{{""},{""},{""}},\r
+               _KeyEvt_{{MVK_space},{MVK_space},{MVK_space}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 4x4 */\r
+               3,\r
+        _Label_{{".",""}, {".",""}, {".",""}},\r
+               LABEL_PROPERTIES_QTY_BOTTOM_LINE_TYPE,\r
+        _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_{{"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png"}},\r
+               1,\r
+               _KeyVal_{{""},{""},{""}},\r
+        _KeyEvt_ {{MVK_period},{MVK_period},{MVK_period}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       // }\r
+       /* WithVoice SubLayout */\r
+       // {\r
+       {\r
+               USED, /* 4x3 */\r
+               1,\r
+               _Label_{{""},{""},{""}},\r
+               LABEL_PROPERTIES_QTY_BOTTOM_LINE_TYPE,\r
+               _LabelImg_ {{"camera_qwerty_kor-moa_port.png","camera_qwerty_kor-moa_port.png","camera_qwerty_kor-moa_port.png"}, {"camera_qwerty_kor-moa_port.png","camera_qwerty_kor-moa_port.png","camera_qwerty_kor-moa_port.png"}, {"camera_qwerty_kor-moa_port.png","camera_qwerty_kor-moa_port.png","camera_qwerty_kor-moa_port.png"}},\r
+               _BGImg_{{"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_function.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_function.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_function.png"}},\r
+               1,\r
+               _KeyVal_{{""},{""},{""}},\r
+               _KeyEvt_ {{0},{0},{0}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 4x4 */\r
+               1,\r
+               _Label_{{""},{""},{""}},\r
+               LABEL_PROPERTIES_QTY_SPACE_KEY_TYPE,\r
+               _LabelImg_ {{"textinput_icon_space.png","textinput_icon_space_press.png"}, {"textinput_icon_space.png","textinput_icon_space_press.png"}, {"textinput_icon_space.png","textinput_icon_space_press.png"}},\r
+               _BGImg_{{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_{{""},{""},{""}},\r
+               _KeyEvt_{{MVK_space},{MVK_space},{MVK_space}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 4x5 */\r
+               3,\r
+        _Label_{{".",""}, {".",""}, {".",""}},\r
+               LABEL_PROPERTIES_QTY_BOTTOM_LINE_TYPE,\r
+        _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_{{"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png"}},\r
+               1,\r
+               _KeyVal_{{""},{""},{""}},\r
+        _KeyEvt_ {{MVK_period},{MVK_period},{MVK_period}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       // }\r
+       /* URL SubLayout */\r
+       // {\r
+       {\r
+               USED, /* 4x3 */\r
+               1,\r
+               _Label_{{""},{""},{""}},\r
+               LABEL_PROPERTIES_QTY_SPACE_KEY_TYPE,\r
+               _LabelImg_ {{"textinput_icon_space.png","textinput_icon_space_press.png"}, {"textinput_icon_space.png","textinput_icon_space_press.png"}, {"textinput_icon_space.png","textinput_icon_space_press.png"}},\r
+               _BGImg_{{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_{{""},{""},{""}},\r
+               _KeyEvt_{{MVK_space},{MVK_space},{MVK_space}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 4x4 */\r
+               1,\r
+               _Label_{{"/"},{"/"},{"/"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_{{" "," "}, {" "," "}, {" "," "}},\r
+               _BGImg_{{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}},\r
+               1,\r
+               _KeyVal_{{"/"},{"/"},{"/"}},\r
+               _KeyEvt_ {{MVK_slash},{MVK_slash},{MVK_slash}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 4x5 */\r
+               1,\r
+               _Label_{{"www."},{"www."},{"www."}},\r
+               LABEL_PROPERTIES_QTY_WWW_TYPE,\r
+               _LabelImg_{{" "," "}, {" "," "}, {" "," "}},\r
+               _BGImg_{{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}},\r
+               1,\r
+               _KeyVal_{{"www."},{"www."},{"www."}},\r
+               _KeyEvt_ {{0},{0},{0}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 4x6 */\r
+               3,\r
+               _Label_{{".",""}, {".",""}, {".",""}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_{{" "," "}, {" "," "}, {" "," "}},\r
+               _BGImg_{{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}},\r
+               1,\r
+               _KeyVal_{{"."},{"."},{"."}},\r
+               _KeyEvt_ {{MVK_period},{MVK_period},{MVK_period}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       // }\r
+       /* Email SubLayout */\r
+       // {\r
+       {\r
+               USED, /* 4x3 */\r
+               1,\r
+               _Label_{{""},{""},{""}},\r
+               LABEL_PROPERTIES_QTY_SPACE_KEY_TYPE,\r
+               _LabelImg_ {{"textinput_icon_space.png","textinput_icon_space_press.png"}, {"textinput_icon_space.png","textinput_icon_space_press.png"}, {"textinput_icon_space.png","textinput_icon_space_press.png"}},\r
+               _BGImg_{{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_{{""},{""},{""}},\r
+               _KeyEvt_{{MVK_space},{MVK_space},{MVK_space}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 4x4 */\r
+               1,\r
+               _Label_{{"@"},{"@"},{"@"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_{{" "," "}, {" "," "}, {" "," "}},\r
+               _BGImg_{{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}},\r
+               1,\r
+               _KeyVal_{{"@"},{"@"},{"@"}},\r
+               _KeyEvt_ {{MVK_at},{MVK_at},{MVK_at}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 4x5 */\r
+               1,\r
+               _Label_{{".com"},{".com"},{".com"}},\r
+               LABEL_PROPERTIES_QTY_WWW_TYPE,\r
+               _LabelImg_{{" "," "}, {" "," "}, {" "," "}},\r
+               _BGImg_{{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}},\r
+               1,\r
+               _KeyVal_{{".com"},{".com"},{".com"}},\r
+               _KeyEvt_ {{0},{0},{0}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 4x6 */\r
+               3,\r
+               _Label_{{".",""}, {".",""}, {".",""}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_{{" "," "}, {" "," "}, {" "," "}},\r
+               _BGImg_{{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}},\r
+               1,\r
+               _KeyVal_{{"."},{"."},{"."}},\r
+               _KeyEvt_ {{MVK_period},{MVK_period},{MVK_period}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       // }\r
+\r
+       {\r
+               USED, /* 4x5 */\r
+               1,\r
+               _Label_ {{""},{""},{""}},\r
+               LABEL_PROPERTIES_QTY_BOTTOM_LINE_TYPE,\r
+               _LabelImg_ {{"textinput_qwerty_icon_enter.png","textinput_qwerty_icon_enter.png","textinput_qwerty_icon_enter_disabled.png"}, {"textinput_qwerty_icon_enter.png","textinput_qwerty_icon_enter.png","textinput_qwerty_icon_enter_disabled.png"}, {"textinput_qwerty_icon_enter.png","textinput_qwerty_icon_enter.png","textinput_qwerty_icon_enter_disabled.png"}},\r
+               _BGImg_ {{"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_function.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_function.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}},\r
+               1,\r
+               _KeyVal_ {{""},{""},{""}},\r
+               _KeyEvt_{{MVK_Return},{MVK_Return},{MVK_Return}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+\r
+       {NOT_USED,},\r
+}\r
+#endif\r
+\r
+\r
diff --git a/res/mcfresource-port-qty-sym1.h b/res/mcfresource-port-qty-sym1.h
new file mode 100755 (executable)
index 0000000..9b2d5ac
--- /dev/null
@@ -0,0 +1,734 @@
+/*
+ * Copyright 2012  Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.tizenopensource.org/license
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+
+#ifdef KEY_CONFIGURE_PHASE
+{
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},
+
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},
+
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_MODECHANGE, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CONTROL, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},
+
+
+       /*option*/      {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_MODECHANGE, POPUP_TYPE_CONTEXT_POPUP, FALSE, FALSE, TRUE, {NOT_USED,}},
+       /*abc*/{USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_MODECHANGE, POPUP_TYPE_NONE, FALSE, FALSE, TRUE, {NOT_USED,}},
+       /* Default SubLayout */
+       // {
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CONTROL, POPUP_TYPE_NONE, FALSE, FALSE, TRUE, {NOT_USED,}},
+       {USED, NOT_USED, BUTTON_TYPE_DIRECTION, KEY_TYPE_UNICODE, POPUP_TYPE_BTN_LONGPRESS_POPUP_ONCE, FALSE, FALSE, TRUE, {INPUT_MODE_PUNCTUATION_POPUP, NOT_USED, NOT_USED, NOT_USED, NOT_USED, NOT_USED, NOT_USED}},
+       // }
+       /* WithVoice SubLayout */
+       // {
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CONTROL, POPUP_TYPE_BTN_RELEASE_POPUP_ONCE, FALSE, FALSE, TRUE, {INPUT_MODE_SCENETEXT_POPUP, NOT_USED, NOT_USED, NOT_USED, NOT_USED, NOT_USED, NOT_USED}},
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CONTROL, POPUP_TYPE_NONE, FALSE, FALSE, TRUE, {NOT_USED,}},
+       {USED, NOT_USED, BUTTON_TYPE_DIRECTION, KEY_TYPE_UNICODE, POPUP_TYPE_BTN_LONGPRESS_POPUP_ONCE, FALSE, FALSE, TRUE, {INPUT_MODE_PUNCTUATION_POPUP, NOT_USED, NOT_USED, NOT_USED, NOT_USED, NOT_USED, NOT_USED}},
+       // }
+       /* URL SubLayout */
+       // {
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CONTROL, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},
+       {USED, CUSTOMID_WWWCOM, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_BTN_LONGPRESS_POPUP_ONCE, TRUE, TRUE, TRUE, {INPUT_MODE_URL_POPUP, NOT_USED, NOT_USED, NOT_USED, NOT_USED, NOT_USED, NOT_USED}},
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},
+       // }
+       /* Email SubLayout */
+       // {
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CONTROL, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_BTN_LONGPRESS_POPUP_ONCE, TRUE, TRUE, TRUE, {INPUT_MODE_URL_POPUP, NOT_USED, NOT_USED, NOT_USED, NOT_USED, NOT_USED, NOT_USED}},
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},
+       // }
+       /*enter*/{USED, CUSTOMID_ENTER, BUTTON_TYPE_NORMAL, KEY_TYPE_CONTROL, POPUP_TYPE_NONE, FALSE, FALSE, TRUE, {NOT_USED,}},
+
+       {NOT_USED,},
+}
+#endif
+
+#ifdef KEY_PROPERTIES_PHASE
+{
+       /* fValid, labelCnt, label, labelPropId, imgPath, keyValueCnt, keyValue, keyEvent, longKeyValue, longKeyEvent, userLabel,  userKeyValue,  userKeyEvent, */
+       /* Second Line */
+       {
+               USED, /* 2x1 */
+               2,
+               _Label_ {{"1","#"},{"1","#"},{"1","#"}},
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},
+               1,
+               _KeyVal_ {{"1"},{"1"},{"1"}},
+               _KeyEvt_ {{MVK_1},{MVK_1},{MVK_1}},
+               "#",
+               MVK_numbersign,
+               FALSE,
+       },
+       {
+               USED, /* 2x2 */
+               2,
+               _Label_ {{"2","&amp;"},{"2","&amp;"},{"2","&amp;"}},
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},
+               1,
+               _KeyVal_ {{"2"},{"2"},{"2"}},
+               _KeyEvt_ {{MVK_2},{MVK_2},{MVK_2}},
+               "&amp;",
+               MVK_ampersand,
+               FALSE,
+       },
+       {
+               USED, /* 2x3 */
+               2,
+               _Label_ {{"3","%"},{"3","%"},{"3","%"}},
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},
+               1,
+               _KeyVal_ {{"3"},{"3"},{"3"}},
+               _KeyEvt_ {{MVK_3},{MVK_3},{MVK_3}},
+               "%",
+               MVK_percent,
+               FALSE,
+       },
+       {
+               USED, /* 2x4 */
+               2,
+               _Label_ {{"4","+"},{"4","+"},{"4","+"}},
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},
+               1,
+               _KeyVal_ {{"4"},{"4"},{"4"}},
+               _KeyEvt_ {{MVK_4},{MVK_4},{MVK_4}},
+               "+",
+               MVK_plus,
+               FALSE,
+       },
+       {
+               USED, /* 2x5 */
+               2,
+               _Label_ {{"5","="},{"5","="},{"5","="}},
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},
+               1,
+               _KeyVal_ {{"5"},{"5"},{"5"}},
+               _KeyEvt_ {{MVK_5},{MVK_5},{MVK_5}},
+               "=",
+               MVK_equal,
+               FALSE,
+       },
+       {
+               USED, /* 2x6 */
+               2,
+               _Label_ {{"6","_"},{"6","_"},{"6","_"}},
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},
+               1,
+               _KeyVal_ {{"6"},{"6"},{"6"}},
+               _KeyEvt_ {{MVK_6},{MVK_6},{MVK_6}},
+               "_",
+               MVK_underscore,
+               FALSE,
+       },
+       {
+               USED, /* 2x7 */
+               2,
+               _Label_ {{"7","\\"},{"7","\\"},{"7","\\"}},
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},
+               1,
+               _KeyVal_ {{"7"},{"7"},{"7"}},
+               _KeyEvt_ {{MVK_7},{MVK_7},{MVK_7}},
+               "\\",
+               MVK_backslash,
+               FALSE,
+       },
+       {
+               USED, /* 2x8 */
+               2,
+               _Label_ {{"8","|"},{"8","|"},{"8","|"}},
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},
+               1,
+               _KeyVal_ {{"8"},{"8"},{"8"}},
+               _KeyEvt_ {{MVK_8},{MVK_8},{MVK_8}},
+               "|",
+               MVK_bar,
+               FALSE,
+       },
+       {
+               USED, /* 2x9 */
+               2,
+               _Label_ {{"9","&lt;"},{"9","&lt;"},{"9","&lt;"}},
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},
+               1,
+               _KeyVal_ {{"9"},{"9"},{"9"}},
+               _KeyEvt_ {{MVK_9},{MVK_9},{MVK_9}},
+               "&lt;",
+               MVK_less,
+               FALSE,
+       },
+       {
+               USED, /* 2x10 */
+               2,
+               _Label_ {{"0",">"},{"0",">"},{"0",">"}},
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},
+               1,
+               _KeyVal_ {{"0"},{"0"},{"0"}},
+               _KeyEvt_ {{MVK_0},{MVK_0},{MVK_0}},
+               ">",
+               MVK_greater,
+               FALSE,
+       },
+
+
+       /* Third Line */
+       {
+               USED, /* 3x1 */
+               2,
+               _Label_ {{"-","{"},{"-","{"},{"-","{"}},
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},
+               1,
+               _KeyVal_ {{"-"},{"-"},{"-"}},
+               _KeyEvt_ {{MVK_minus},{MVK_minus},{MVK_minus}},
+               "{",
+               MVK_braceleft,
+               FALSE,
+       },
+       {
+               USED, /* 3x2 */
+               2,
+               _Label_ {{"@","}"},{"@","}"},{"@","}"}},
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},
+               1,
+               _KeyVal_ {{"@"},{"@"},{"@"}},
+               _KeyEvt_ {{MVK_at},{MVK_at},{MVK_at}},
+               "}",
+               MVK_braceright,
+               FALSE,
+       },
+       {
+               USED, /* 3x3 */
+               2,
+               _Label_ {{"*","["},{"*","["},{"*","["}},
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},
+               1,
+               _KeyVal_ {{"*"},{"*"},{"*"}},
+               _KeyEvt_ {{MVK_asterisk},{MVK_asterisk},{MVK_asterisk}},
+               "[",
+               MVK_bracketleft,
+               FALSE,
+       },
+       {
+               USED, /* 3x4 */
+               2,
+               _Label_ {{"^","]"},{"^","]"},{"^","]"}},
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},
+               1,
+               _KeyVal_ {{"^"},{"^"},{"^"}},
+               _KeyEvt_ {{MVK_asciicircum},{MVK_asciicircum},{MVK_asciicircum}},
+               "]",
+               MVK_bracketright,
+               FALSE,
+       },
+       {
+               USED, /* 3x5 */
+               2,
+               _Label_ {{":","$"},{":","$"},{":","$"}},
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},
+               1,
+               _KeyVal_ {{":"},{":"},{":"}},
+               _KeyEvt_ {{MVK_colon},{MVK_colon},{MVK_colon}},
+               "$",
+               MVK_dollar,
+               FALSE,
+       },
+       {
+               USED, /* 3x6 */
+               2,
+               _Label_ {{";","\xc2\xa3"},{";","\xc2\xa3"},{";","\xc2\xa3"}},
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},
+               1,
+               _KeyVal_ {{";"},{";"},{";"}},
+               _KeyEvt_ {{MVK_semicolon},{MVK_semicolon},{MVK_semicolon}},
+               "\xc2\xa3",
+               0,
+               FALSE,
+       },
+       {
+               USED, /* 3x7 */
+               2,
+               _Label_ {{"(","\xc2\xa5"},{"(","\xc2\xa5"},{"(","\xc2\xa5"}},
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},
+               1,
+               _KeyVal_ {{"("},{"("},{"("}},
+               _KeyEvt_ {{MVK_parenleft},{MVK_parenleft},{MVK_parenleft}},
+               "\xc2\xa5",
+               0,
+               FALSE,
+       },
+       {
+               USED, /* 3x8 */
+               2,
+               _Label_ {{")","\xe2\x82\xac"},{")","\xe2\x82\xac"},{")","\xe2\x82\xac"}},
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},
+               1,
+               _KeyVal_ {{")"},{")"},{")"}},
+               _KeyEvt_ {{MVK_parenright},{MVK_parenright},{MVK_parenright}},
+               "\xe2\x82\xac",
+               0,
+               FALSE,
+       },
+       {
+               USED, /* 3x9 */
+               2,
+               _Label_ {{"~","\xe2\x82\xa9"},{"~","\xe2\x82\xa9"},{"~","\xe2\x82\xa9"}},
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},
+               1,
+               _KeyVal_ {{"~"},{"~"},{"~"}},
+               _KeyEvt_ {{MVK_asciitilde},{MVK_asciitilde},{MVK_asciitilde}},
+               "\xe2\x82\xa9",
+               0,
+               FALSE,
+       },
+
+       /* Fourth Line */
+       {
+               USED, /* 4x1 */
+               1,
+               _Label_ {{"1/2"},{"1/2"},{"1/2"}},
+               LABEL_PROPERTIES_QTY_BOTTOM_LINE_TYPE,
+               _LabelImg_ {{"",""},{"",""},{"",""}},
+               _BGImg_ {{"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_function.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_function.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_function.png","textinput_qwerty_button_nml.png"}},
+               1,
+               _KeyVal_ {{""},{""},{""}},
+               _KeyEvt_ {{UD_MVK_NEXTSYM},{UD_MVK_NEXTSYM},{UD_MVK_NEXTSYM}},
+               "",
+               0,
+               FALSE,
+       },
+       {
+               USED, /* 4x2 */
+               2,
+               _Label_ {{"/","\xc2\xa2"},{"/","\xc2\xa2"},{"/","\xc2\xa2"}},
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},
+               1,
+               _KeyVal_ {{"/"},{"/"},{"/"}},
+               _KeyEvt_ {{MVK_slash},{MVK_slash},{MVK_slash}},
+               "\xc2\xa2",
+               0,
+               FALSE,
+       },
+       {
+               USED, /* 4x3 */
+               2,
+               _Label_ {{"'","`"},{"'","`"},{"'","`"}},
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},
+               1,
+               _KeyVal_ {{"'"},{"'"},{"'"}},
+               _KeyEvt_ {{MVK_quoteright},{MVK_quoteright},{MVK_quoteright}},
+               "`",
+               MVK_quoteleft,
+               FALSE,
+       },
+       {
+               USED, /* 4x4 */
+               2,
+               _Label_ {{"\"","\xc2\xb0"},{"\"","\xc2\xb0"},{"\"","\xc2\xb0"}},
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},
+               1,
+               _KeyVal_ {{"\""},{"\""},{"\""}},
+               _KeyEvt_ {{MVK_quotedbl},{MVK_quotedbl},{MVK_quotedbl}},
+               "\xc2\xb0",
+               0,
+               FALSE,
+       },
+       {
+               USED, /* 4x5 */
+               2,
+               _Label_ {{".","\xc2\xb7"},{".","\xc2\xb7"},{".","\xc2\xb7"}},
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},
+               1,
+               _KeyVal_ {{"."},{"."},{"."}},
+               _KeyEvt_ {{MVK_period},{MVK_period},{MVK_period}},
+               "\xc2\xb7",
+               0,
+               FALSE,
+       },
+       {
+               USED, /* 4x6 */
+               2,
+               _Label_ {{",","\xc2\xae"},{",","\xc2\xae"},{",","\xc2\xae"}},
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},
+               1,
+               _KeyVal_ {{","},{","},{","}},
+               _KeyEvt_ {{MVK_comma},{MVK_comma},{MVK_comma}},
+               "\xc2\xae",
+               0,
+               FALSE,
+       },
+       {
+               USED, /* 4x7 */
+               2,
+               _Label_ {{"?","\xc2\xa9"},{"?","\xc2\xa9"},{"?","\xc2\xa9"}},
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},
+               1,
+               _KeyVal_ {{"?"},{"?"},{"?"}},
+               _KeyEvt_ {{MVK_question},{MVK_question},{MVK_question}},
+               "\xc2\xa9",
+               0,
+               FALSE,
+       },
+       {
+               USED, /* 4x8 */
+               2,
+               _Label_ {{"!","\xc2\xbf"},{"!","\xc2\xbf"},{"!","\xc2\xbf"}},
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},
+               1,
+               _KeyVal_ {{"!"},{"!"},{"!"}},
+               _KeyEvt_ {{MVK_exclam},{MVK_exclam},{MVK_exclam}},
+               "\xc2\xbf",
+               0,
+               FALSE,
+       },
+       {
+               USED, /* 4x9 */
+               1,
+               _Label_ {{""},{""},{""}},
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,
+               _LabelImg_ {{"textinput_qwerty_icon_clear.png","textinput_qwerty_icon_clear.png"}, {"textinput_qwerty_icon_clear.png","textinput_qwerty_icon_clear.png"}, {"textinput_qwerty_icon_clear.png","textinput_qwerty_icon_clear.png"}},
+               _BGImg_ {{"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_function.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_function.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}},
+               1,
+               _KeyVal_ {{""},{""},{""}},
+               _KeyEvt_{{MVK_BackSpace},{MVK_BackSpace},{MVK_BackSpace}},
+               "",
+               0,
+               TRUE,
+       },
+       /* Fifth line*/
+
+       {
+               USED, /* 5x1 */
+               1,
+               _Label_{{""},{""},{""}},
+               LABEL_PROPERTIES_QTY_BOTTOM_LINE_TYPE,
+               _LabelImg_{{"language_icon_port.png","language_icon_port.png"}, {"language_icon_port.png","language_icon_port.png"}, {"language_icon_port.png","language_icon_port.png"}},
+               _BGImg_{{"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_function.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_function.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_function.png","textinput_qwerty_button_nml.png"}},
+               1,
+               _KeyVal_{{""},{""},{""}},
+               _KeyEvt_ {{UD_MVK_LANG_CHANGE},{UD_MVK_LANG_CHANGE},{UD_MVK_LANG_CHANGE}},
+               "OptionWindow",
+               UD_MVK_OPTION_WINDOW,
+               FALSE,
+       },
+       {
+               USED, /* 5x2 */
+               1,
+               _Label_{{"abc"},{"abc"},{"abc"}},
+               LABEL_PROPERTIES_QTY_BOTTOM_LINE_TYPE,
+               _LabelImg_{{"",""}, {"",""}, {"",""}},
+               _BGImg_{{"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_function.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_function.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_function.png","textinput_qwerty_button_nml.png"}},
+               1,
+               _KeyVal_{{""},{""},{""}},
+               _KeyEvt_ {{UD_MVK_ABC},{UD_MVK_ABC},{UD_MVK_ABC}},
+               "Keypad",
+               UD_MVK_KEYPAD,
+               FALSE,
+       },
+
+       /* Default SubLayout */
+       // {
+       {
+               USED, /* 4x3 */
+               1,
+               _Label_{{""},{""},{""}},
+               LABEL_PROPERTIES_QTY_SPACE_KEY_TYPE,
+               _LabelImg_ {{"textinput_icon_space.png","textinput_icon_space_press.png"}, {"textinput_icon_space.png","textinput_icon_space_press.png"}, {"textinput_icon_space.png","textinput_icon_space_press.png"}},
+               _BGImg_{{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},
+               1,
+               _KeyVal_{{""},{""},{""}},
+               _KeyEvt_{{MVK_space},{MVK_space},{MVK_space}},
+               "",
+               0,
+               FALSE,
+       },
+       {
+               USED, /* 4x4 */
+               3,
+        _Label_{{".",""}, {".",""}, {".",""}},
+               LABEL_PROPERTIES_QTY_BOTTOM_LINE_TYPE,
+        _LabelImg_ {{"",""}, {"",""}, {"",""}},
+               _BGImg_{{"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png"}},
+               1,
+               _KeyVal_{{""},{""},{""}},
+        _KeyEvt_ {{MVK_period},{MVK_period},{MVK_period}},
+               "",
+               0,
+               FALSE,
+       },
+       // }
+       /* WithVoice SubLayout */
+       // {
+       {
+               USED, /* 4x3 */
+               1,
+               _Label_{{""},{""},{""}},
+               LABEL_PROPERTIES_QTY_BOTTOM_LINE_TYPE,
+               _LabelImg_ {{"camera_qwerty_kor-moa_port.png","camera_qwerty_kor-moa_port.png","camera_qwerty_kor-moa_port.png"}, {"camera_qwerty_kor-moa_port.png","camera_qwerty_kor-moa_port.png","camera_qwerty_kor-moa_port.png"}, {"camera_qwerty_kor-moa_port.png","camera_qwerty_kor-moa_port.png","camera_qwerty_kor-moa_port.png"}},
+               _BGImg_{{"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_function.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_function.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_function.png"}},
+               1,
+               _KeyVal_{{""},{""},{""}},
+               _KeyEvt_ {{0},{0},{0}},
+               "",
+               0,
+               FALSE,
+       },
+       {
+               USED, /* 4x4 */
+               1,
+               _Label_{{""},{""},{""}},
+               LABEL_PROPERTIES_QTY_SPACE_KEY_TYPE,
+               _LabelImg_ {{"textinput_icon_space.png","textinput_icon_space_press.png"}, {"textinput_icon_space.png","textinput_icon_space_press.png"}, {"textinput_icon_space.png","textinput_icon_space_press.png"}},
+               _BGImg_{{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},
+               1,
+               _KeyVal_{{""},{""},{""}},
+               _KeyEvt_{{MVK_space},{MVK_space},{MVK_space}},
+               "",
+               0,
+               FALSE,
+       },
+       {
+               USED, /* 4x5 */
+               3,
+        _Label_{{".",""}, {".",""}, {".",""}},
+               LABEL_PROPERTIES_QTY_BOTTOM_LINE_TYPE,
+        _LabelImg_ {{"",""}, {"",""}, {"",""}},
+               _BGImg_{{"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png"}},
+               1,
+               _KeyVal_{{""},{""},{""}},
+        _KeyEvt_ {{MVK_period},{MVK_period},{MVK_period}},
+               "",
+               0,
+               FALSE,
+       },
+       // }
+       /* URL SubLayout */
+       // {
+       {
+               USED, /* 4x3 */
+               1,
+               _Label_{{""},{""},{""}},
+               LABEL_PROPERTIES_QTY_SPACE_KEY_TYPE,
+               _LabelImg_ {{"textinput_icon_space.png","textinput_icon_space_press.png"}, {"textinput_icon_space.png","textinput_icon_space_press.png"}, {"textinput_icon_space.png","textinput_icon_space_press.png"}},
+               _BGImg_{{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},
+               1,
+               _KeyVal_{{""},{""},{""}},
+               _KeyEvt_{{MVK_space},{MVK_space},{MVK_space}},
+               "",
+               0,
+               FALSE,
+       },
+       {
+               USED, /* 4x4 */
+               1,
+               _Label_{{"/"},{"/"},{"/"}},
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,
+               _LabelImg_{{" "," "}, {" "," "}, {" "," "}},
+               _BGImg_{{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}},
+               1,
+               _KeyVal_{{"/"},{"/"},{"/"}},
+               _KeyEvt_ {{MVK_slash},{MVK_slash},{MVK_slash}},
+               "",
+               0,
+               FALSE,
+       },
+       {
+               USED, /* 4x5 */
+               1,
+               _Label_{{"www."},{"www."},{"www."}},
+               LABEL_PROPERTIES_QTY_WWW_TYPE,
+               _LabelImg_{{" "," "}, {" "," "}, {" "," "}},
+               _BGImg_{{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}},
+               1,
+               _KeyVal_{{"www."},{"www."},{"www."}},
+               _KeyEvt_ {{0},{0},{0}},
+               "",
+               0,
+               FALSE,
+       },
+       {
+               USED, /* 4x6 */
+               3,
+               _Label_{{".",""}, {".",""}, {".",""}},
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,
+               _LabelImg_{{" "," "}, {" "," "}, {" "," "}},
+               _BGImg_{{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}},
+               1,
+               _KeyVal_{{"."},{"."},{"."}},
+               _KeyEvt_ {{MVK_period},{MVK_period},{MVK_period}},
+               "",
+               0,
+               FALSE,
+       },
+       // }
+       /* Email SubLayout */
+       // {
+       {
+               USED, /* 4x3 */
+               1,
+               _Label_{{""},{""},{""}},
+               LABEL_PROPERTIES_QTY_SPACE_KEY_TYPE,
+               _LabelImg_ {{"textinput_icon_space.png","textinput_icon_space_press.png"}, {"textinput_icon_space.png","textinput_icon_space_press.png"}, {"textinput_icon_space.png","textinput_icon_space_press.png"}},
+               _BGImg_{{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},
+               1,
+               _KeyVal_{{""},{""},{""}},
+               _KeyEvt_{{MVK_space},{MVK_space},{MVK_space}},
+               "",
+               0,
+               FALSE,
+       },
+       {
+               USED, /* 4x4 */
+               1,
+               _Label_{{"@"},{"@"},{"@"}},
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,
+               _LabelImg_{{" "," "}, {" "," "}, {" "," "}},
+               _BGImg_{{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}},
+               1,
+               _KeyVal_{{"@"},{"@"},{"@"}},
+               _KeyEvt_ {{MVK_at},{MVK_at},{MVK_at}},
+               "",
+               0,
+               FALSE,
+       },
+       {
+               USED, /* 4x5 */
+               1,
+               _Label_{{".com"},{".com"},{".com"}},
+               LABEL_PROPERTIES_QTY_WWW_TYPE,
+               _LabelImg_{{" "," "}, {" "," "}, {" "," "}},
+               _BGImg_{{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}},
+               1,
+               _KeyVal_{{".com"},{".com"},{".com"}},
+               _KeyEvt_ {{0},{0},{0}},
+               "",
+               0,
+               FALSE,
+       },
+       {
+               USED, /* 4x6 */
+               3,
+               _Label_{{".",""}, {".",""}, {".",""}},
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,
+               _LabelImg_{{" "," "}, {" "," "}, {" "," "}},
+               _BGImg_{{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}},
+               1,
+               _KeyVal_{{"."},{"."},{"."}},
+               _KeyEvt_ {{MVK_period},{MVK_period},{MVK_period}},
+               "",
+               0,
+               FALSE,
+       },
+       // }
+
+       {
+               USED, /* 4x5 */
+               1,
+               _Label_ {{""},{""},{""}},
+               LABEL_PROPERTIES_QTY_BOTTOM_LINE_TYPE,
+               _LabelImg_ {{"textinput_qwerty_icon_enter.png","textinput_qwerty_icon_enter.png","textinput_qwerty_icon_enter_disabled.png"}, {"textinput_qwerty_icon_enter.png","textinput_qwerty_icon_enter.png","textinput_qwerty_icon_enter_disabled.png"}, {"textinput_qwerty_icon_enter.png","textinput_qwerty_icon_enter.png","textinput_qwerty_icon_enter_disabled.png"}},
+               _BGImg_ {{"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_function.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_function.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_function.png","textinput_qwerty_button_nml.png"}},
+               1,
+               _KeyVal_ {{""},{""},{""}},
+               _KeyEvt_{{MVK_Return},{MVK_Return},{MVK_Return}},
+               "",
+               0,
+               FALSE,
+       },
+
+       {NOT_USED,},
+}
+#endif
+
+
+
+
diff --git a/res/mcfresource-port-qty-sym2.h b/res/mcfresource-port-qty-sym2.h
new file mode 100755 (executable)
index 0000000..c6903e0
--- /dev/null
@@ -0,0 +1,732 @@
+/*
+ * Copyright 2012  Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.tizenopensource.org/license
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+
+#ifdef KEY_CONFIGURE_PHASE
+{
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},
+
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},
+
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_MODECHANGE, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CONTROL, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},
+
+
+       /*option*/      {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_MODECHANGE, POPUP_TYPE_CONTEXT_POPUP, FALSE, FALSE, TRUE, {NOT_USED,}},
+       /*abc*/{USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_MODECHANGE, POPUP_TYPE_NONE, FALSE, FALSE, TRUE, {NOT_USED,}},
+       /* Default SubLayout */
+       // {
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CONTROL, POPUP_TYPE_NONE, FALSE, FALSE, TRUE, {NOT_USED,}},
+       {USED, NOT_USED, BUTTON_TYPE_DIRECTION, KEY_TYPE_UNICODE, POPUP_TYPE_BTN_LONGPRESS_POPUP_ONCE, FALSE, FALSE, TRUE, {INPUT_MODE_PUNCTUATION_POPUP, NOT_USED, NOT_USED, NOT_USED, NOT_USED, NOT_USED, NOT_USED}},
+       // }
+       /* WithVoice SubLayout */
+       // {
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CONTROL, POPUP_TYPE_BTN_RELEASE_POPUP_ONCE, FALSE, FALSE, TRUE, {INPUT_MODE_SCENETEXT_POPUP, NOT_USED, NOT_USED, NOT_USED, NOT_USED, NOT_USED, NOT_USED}},
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CONTROL, POPUP_TYPE_NONE, FALSE, FALSE, TRUE, {NOT_USED,}},
+       {USED, NOT_USED, BUTTON_TYPE_DIRECTION, KEY_TYPE_UNICODE, POPUP_TYPE_BTN_LONGPRESS_POPUP_ONCE, FALSE, FALSE, TRUE, {INPUT_MODE_PUNCTUATION_POPUP, NOT_USED, NOT_USED, NOT_USED, NOT_USED, NOT_USED, NOT_USED}},
+       // }
+       /* URL SubLayout */
+       // {
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CONTROL, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},
+       {USED, CUSTOMID_WWWCOM, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_BTN_LONGPRESS_POPUP_ONCE, TRUE, TRUE, TRUE, {INPUT_MODE_URL_POPUP, NOT_USED, NOT_USED, NOT_USED, NOT_USED, NOT_USED, NOT_USED}},
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},
+       // }
+       /* Email SubLayout */
+       // {
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CONTROL, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_BTN_LONGPRESS_POPUP_ONCE, TRUE, TRUE, TRUE, {INPUT_MODE_URL_POPUP, NOT_USED, NOT_USED, NOT_USED, NOT_USED, NOT_USED, NOT_USED}},
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},
+       // }
+       /*enter*/{USED, CUSTOMID_ENTER, BUTTON_TYPE_NORMAL, KEY_TYPE_CONTROL, POPUP_TYPE_NONE, FALSE, FALSE, TRUE, {NOT_USED,}},
+
+       {NOT_USED,},
+}
+#endif
+
+#ifdef KEY_PROPERTIES_PHASE
+{
+       /* fValid, labelCnt, label, labelPropId, imgPath, keyValueCnt, keyValue, keyEvent, longKeyValue, longKeyEvent, userLabel,  userKeyValue,  userKeyEvent, */
+       /* Second Line */
+       {
+               USED, /* 2x1 */
+               2,
+               _Label_ {{"#","1"},{"#","1"},{"#","1"}},
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},
+               1,
+               _KeyVal_ {{"#"},{"#"},{"#"}},
+               _KeyEvt_ {{MVK_numbersign},{MVK_numbersign},{MVK_numbersign}},
+               "1",
+               MVK_1,
+               FALSE,
+       },
+       {
+               USED, /* 2x2 */
+               2,
+               _Label_ {{"&amp;","2"},{"&amp;","2"},{"&amp;","2"}},
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},
+               1,
+               _KeyVal_ {{"&"},{"&"},{"&"}},
+               _KeyEvt_ {{MVK_ampersand},{MVK_ampersand},{MVK_ampersand}},
+               "2",
+               MVK_2,
+               FALSE,
+       },
+       {
+               USED, /* 2x3 */
+               2,
+               _Label_ {{"%","3"},{"%","3"},{"%","3"}},
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},
+               1,
+               _KeyVal_ {{"%"},{"%"},{"%"}},
+               _KeyEvt_ {{MVK_percent},{MVK_percent},{MVK_percent}},
+               "3",
+               MVK_3,
+               FALSE,
+       },
+       {
+               USED, /* 2x4 */
+               2,
+               _Label_ {{"+","4"},{"+","4"},{"+","4"}},
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},
+               1,
+               _KeyVal_ {{"+"},{"+"},{"+"}},
+               _KeyEvt_ {{MVK_plus},{MVK_plus},{MVK_plus}},
+               "4",
+               MVK_4,
+               FALSE,
+       },
+       {
+               USED, /* 2x5 */
+               2,
+               _Label_ {{"=","5"},{"=","5"},{"=","5"}},
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},
+               1,
+               _KeyVal_ {{"="},{"="},{"="}},
+               _KeyEvt_ {{MVK_equal},{MVK_equal},{MVK_equal}},
+               "5",
+               MVK_5,
+               FALSE,
+       },
+       {
+               USED, /* 2x6 */
+               2,
+               _Label_ {{"_","6"},{"_","6"},{"_","6"}},
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},
+               1,
+               _KeyVal_ {{"_"},{"_"},{"_"}},
+               _KeyEvt_ {{MVK_underscore},{MVK_underscore},{MVK_underscore}},
+               "6",
+               MVK_6,
+               FALSE,
+       },
+       {
+               USED, /* 2x7 */
+               2,
+               _Label_ {{"\\","7"},{"\\","7"},{"\\","7"}},
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},
+               1,
+               _KeyVal_ {{"\\"},{"\\"},{"\\"}},
+               _KeyEvt_ {{MVK_backslash},{MVK_backslash},{MVK_backslash}},
+               "7",
+               MVK_7,
+               FALSE,
+       },
+       {
+               USED, /* 2x8 */
+               2,
+               _Label_ {{"|","8"},{"|","8"},{"|","8"}},
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},
+               1,
+               _KeyVal_ {{"|"},{"|"},{"|"}},
+               _KeyEvt_ {{MVK_bar},{MVK_bar},{MVK_bar}},
+               "8",
+               MVK_8,
+               FALSE,
+       },
+       {
+               USED, /* 2x9 */
+               2,
+               _Label_ {{"&lt;","9"},{"&lt;","9"},{"&lt;","9"}},
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},
+               1,
+               _KeyVal_ {{"<"},{"<"},{"<"}},
+               _KeyEvt_ {{MVK_less},{MVK_less},{MVK_less}},
+               "9",
+               MVK_9,
+               FALSE,
+       },
+       {
+               USED, /* 2x10 */
+               2,
+               _Label_ {{">","0"},{">","0"},{">","0"}},
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},
+               1,
+               _KeyVal_ {{">"},{">"},{">"}},
+               _KeyEvt_ {{MVK_greater},{MVK_greater},{MVK_greater}},
+               "0",
+               MVK_0,
+               FALSE,
+       },
+
+
+       /* Third Line */
+       {
+               USED, /* 3x1 */
+               2,
+               _Label_ {{"{","-"},{"{","-"},{"{","-"}},
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},
+               1,
+               _KeyVal_ {{"{"},{"{"},{"{"}},
+               _KeyEvt_ {{MVK_braceleft},{MVK_braceleft},{MVK_braceleft}},
+               "-",
+               MVK_minus,
+               FALSE,
+       },
+       {
+               USED, /* 3x2 */
+               2,
+               _Label_ {{"}","@"},{"}","@"},{"}","@"}},
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},
+               1,
+               _KeyVal_ {{"}"},{"}"},{"}"}},
+               _KeyEvt_ {{MVK_braceright},{MVK_braceright},{MVK_braceright}},
+               "@",
+               MVK_at,
+               FALSE,
+       },
+       {
+               USED, /* 3x3 */
+               2,
+               _Label_ {{"[","*"},{"[","*"},{"[","*"}},
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},
+               1,
+               _KeyVal_ {{"["},{"["},{"["}},
+               _KeyEvt_ {{MVK_bracketleft},{MVK_bracketleft},{MVK_bracketleft}},
+               "*",
+               MVK_asterisk,
+               FALSE,
+       },
+       {
+               USED, /* 3x4 */
+               2,
+               _Label_ {{"]","^"},{"]","^"},{"]","^"}},
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},
+               1,
+               _KeyVal_ {{"]"},{"]"},{"]"}},
+               _KeyEvt_ {{MVK_bracketright},{MVK_bracketright},{MVK_bracketright}},
+               "^",
+               MVK_asciicircum,
+               FALSE,
+       },
+       {
+               USED, /* 3x5 */
+               2,
+               _Label_ {{"$",":"},{"$",":"},{"$",":"}},
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},
+               1,
+               _KeyVal_ {{"$"},{"$"},{"$"}},
+               _KeyEvt_ {{MVK_dollar},{MVK_dollar},{MVK_dollar}},
+               ":",
+               MVK_colon,
+               FALSE,
+       },
+       {
+               USED, /* 3x6 */
+               2,
+               _Label_ {{"\xc2\xa3",";"},{"\xc2\xa3",";"},{"\xc2\xa3",";"}},
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},
+               1,
+               _KeyVal_ {{"\xc2\xa3"},{"\xc2\xa3"},{"\xc2\xa3"}},
+               _KeyEvt_ {{0},{0},{0}},
+               ";",
+               MVK_semicolon,
+               FALSE,
+       },
+       {
+               USED, /* 3x7 */
+               2,
+               _Label_ {{"\xc2\xa5","("},{"\xc2\xa5","("},{"\xc2\xa5","("}},
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},
+               1,
+               _KeyVal_ {{"\xc2\xa5"},{"\xc2\xa5"},{"\xc2\xa5"}},
+               _KeyEvt_ {{0},{0},{0}},
+               "(",
+               MVK_parenleft,
+               FALSE,
+       },
+       {
+               USED, /* 3x8 */
+               2,
+               _Label_ {{"\xe2\x82\xac",")"},{"\xe2\x82\xac",")"},{"\xe2\x82\xac",")"}},
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},
+               1,
+               _KeyVal_ {{"\xe2\x82\xac"},{"\xe2\x82\xac"},{"\xe2\x82\xac"}},
+               _KeyEvt_ {{0},{0},{0}},
+               ")",
+               MVK_parenright,
+               FALSE,
+       },
+       {
+               USED, /* 3x9 */
+               2,
+               _Label_ {{"\xe2\x82\xa9","~"},{"\xe2\x82\xa9","~"},{"\xe2\x82\xa9","~"}},
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},
+               1,
+               _KeyVal_ {{"\xe2\x82\xa9"},{"\xe2\x82\xa9"},{"\xe2\x82\xa9"}},
+               _KeyEvt_ {{0},{0},{0}},
+               "~",
+               MVK_asciitilde,
+               FALSE,
+       },
+
+       /* Fourth Line */
+       {
+               USED, /* 4x1 */
+               1,
+               _Label_ {{"2/2"},{"2/2"},{"2/2"}},
+               LABEL_PROPERTIES_QTY_BOTTOM_LINE_TYPE,
+               _LabelImg_ {{"",""},{"",""},{"",""}},
+               _BGImg_ {{"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_function.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_function.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_function.png","textinput_qwerty_button_nml.png"}},
+               1,
+               _KeyVal_ {{""},{""},{""}},
+               _KeyEvt_ {{UD_MVK_NEXTSYM},{UD_MVK_NEXTSYM},{UD_MVK_NEXTSYM}},
+               "",
+               0,
+               FALSE,
+       },
+       {
+               USED, /* 4x2 */
+               2,
+               _Label_ {{"\xc2\xa2","/"},{"\xc2\xa2","/"},{"\xc2\xa2","/"}},
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},
+               1,
+               _KeyVal_ {{"\xc2\xa2"},{"\xc2\xa2"},{"\xc2\xa2"}},
+               _KeyEvt_ {{0},{0},{0}},
+               "/",
+               MVK_slash,
+               FALSE,
+       },
+       {
+               USED, /* 4x3 */
+               2,
+               _Label_ {{"`","'"},{"`","'"},{"`","'"}},
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},
+               1,
+               _KeyVal_ {{"`"},{"`"},{"`"}},
+               _KeyEvt_ {{MVK_quoteleft},{MVK_quoteleft},{MVK_quoteleft}},
+               "'",
+               MVK_quoteright,
+               FALSE,
+       },
+       {
+               USED, /* 4x4 */
+               2,
+               _Label_ {{"\xc2\xb0","\""},{"\xc2\xb0","\""},{"\xc2\xb0","\""}},
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},
+               1,
+               _KeyVal_ {{"\xc2\xb0"},{"\xc2\xb0"},{"\xc2\xb0"}},
+               _KeyEvt_ {{0},{0},{0}},
+               "\"",
+               MVK_quotedbl,
+               FALSE,
+       },
+       {
+               USED, /* 4x5 */
+               2,
+               _Label_ {{"\xc2\xb7","."},{"\xc2\xb7","."},{"\xc2\xb7","."}},
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},
+               1,
+               _KeyVal_ {{"\xc2\xb7"},{"\xc2\xb7"},{"\xc2\xb7"}},
+               _KeyEvt_ {{0},{0},{0}},
+               ".",
+               MVK_period,
+               FALSE,
+       },
+       {
+               USED, /* 4x6 */
+               2,
+               _Label_ {{"\xc2\xae",","},{"\xc2\xae",","},{"\xc2\xae",","}},
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},
+               1,
+               _KeyVal_ {{"\xc2\xae"},{"\xc2\xae"},{"\xc2\xae"}},
+               _KeyEvt_ {{0},{0},{0}},
+               ",",
+               MVK_comma,
+               FALSE,
+       },
+       {
+               USED, /* 4x7 */
+               2,
+               _Label_ {{"\xc2\xa9","?"},{"\xc2\xa9","?"},{"\xc2\xa9","?"}},
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},
+               1,
+               _KeyVal_ {{"\xc2\xa9"},{"\xc2\xa9"},{"\xc2\xa9"}},
+               _KeyEvt_ {{0},{0},{0}},
+               "?",
+               MVK_question,
+               FALSE,
+       },
+       {
+               USED, /* 4x8 */
+               2,
+               _Label_ {{"\xc2\xbf","!"},{"\xc2\xbf","!"},{"\xc2\xbf","!"}},
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},
+               1,
+               _KeyVal_ {{"\xc2\xbf"},{"\xc2\xbf"},{"\xc2\xbf"}},
+               _KeyEvt_ {{0},{0},{0}},
+               "!",
+               MVK_exclam,
+               FALSE,
+       },
+       {
+               USED, /* 4x9 */
+               1,
+               _Label_ {{""},{""},{""}},
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,
+               _LabelImg_ {{"textinput_qwerty_icon_clear.png","textinput_qwerty_icon_clear.png"}, {"textinput_qwerty_icon_clear.png","textinput_qwerty_icon_clear.png"}, {"textinput_qwerty_icon_clear.png","textinput_qwerty_icon_clear.png"}},
+               _BGImg_ {{"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_function.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_function.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}},
+               1,
+               _KeyVal_ {{""},{""},{""}},
+               _KeyEvt_{{MVK_BackSpace},{MVK_BackSpace},{MVK_BackSpace}},
+               "",
+               0,
+               TRUE,
+       },
+       /* Fifth line*/
+
+       {
+               USED, /* 5x1 */
+               1,
+               _Label_{{""},{""},{""}},
+               LABEL_PROPERTIES_QTY_BOTTOM_LINE_TYPE,
+               _LabelImg_{{"language_icon_port.png","language_icon_port.png"}, {"language_icon_port.png","language_icon_port.png"}, {"language_icon_port.png","language_icon_port.png"}},
+               _BGImg_{{"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_function.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_function.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_function.png","textinput_qwerty_button_nml.png"}},
+               1,
+               _KeyVal_{{""},{""},{""}},
+               _KeyEvt_ {{UD_MVK_LANG_CHANGE},{UD_MVK_LANG_CHANGE},{UD_MVK_LANG_CHANGE}},
+               "OptionWindow",
+               UD_MVK_OPTION_WINDOW,
+               FALSE,
+       },
+       {
+               USED, /* 5x2 */
+               1,
+               _Label_{{"abc"},{"abc"},{"abc"}},
+               LABEL_PROPERTIES_QTY_BOTTOM_LINE_TYPE,
+               _LabelImg_{{"",""}, {"",""}, {"",""}},
+               _BGImg_{{"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_function.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_function.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_function.png","textinput_qwerty_button_nml.png"}},
+               1,
+               _KeyVal_{{""},{""},{""}},
+               _KeyEvt_ {{UD_MVK_ABC},{UD_MVK_ABC},{UD_MVK_ABC}},
+               "Keypad",
+               UD_MVK_KEYPAD,
+               FALSE,
+       },
+
+       /* Default SubLayout */
+       // {
+       {
+               USED, /* 4x3 */
+               1,
+               _Label_{{""},{""},{""}},
+               LABEL_PROPERTIES_QTY_SPACE_KEY_TYPE,
+               _LabelImg_ {{"textinput_icon_space.png","textinput_icon_space_press.png"}, {"textinput_icon_space.png","textinput_icon_space_press.png"}, {"textinput_icon_space.png","textinput_icon_space_press.png"}},
+               _BGImg_{{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},
+               1,
+               _KeyVal_{{""},{""},{""}},
+               _KeyEvt_{{MVK_space},{MVK_space},{MVK_space}},
+               "",
+               0,
+               FALSE,
+       },
+       {
+               USED, /* 4x4 */
+               3,
+        _Label_{{".",""}, {".",""}, {".",""}},
+               LABEL_PROPERTIES_QTY_BOTTOM_LINE_TYPE,
+        _LabelImg_ {{"",""}, {"",""}, {"",""}},
+               _BGImg_{{"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png"}},
+               1,
+               _KeyVal_{{""},{""},{""}},
+        _KeyEvt_ {{MVK_period},{MVK_period},{MVK_period}},
+               "",
+               0,
+               FALSE,
+       },
+       // }
+       /* WithVoice SubLayout */
+       // {
+       {
+               USED, /* 4x3 */
+               1,
+               _Label_{{""},{""},{""}},
+               LABEL_PROPERTIES_QTY_BOTTOM_LINE_TYPE,
+               _LabelImg_ {{"camera_qwerty_kor-moa_port.png","camera_qwerty_kor-moa_port.png","camera_qwerty_kor-moa_port.png"}, {"camera_qwerty_kor-moa_port.png","camera_qwerty_kor-moa_port.png","camera_qwerty_kor-moa_port.png"}, {"camera_qwerty_kor-moa_port.png","camera_qwerty_kor-moa_port.png","camera_qwerty_kor-moa_port.png"}},
+               _BGImg_{{"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_function.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_function.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_function.png"}},
+               1,
+               _KeyVal_{{""},{""},{""}},
+               _KeyEvt_ {{0},{0},{0}},
+               "",
+               0,
+               FALSE,
+       },
+       {
+               USED, /* 4x4 */
+               1,
+               _Label_{{""},{""},{""}},
+               LABEL_PROPERTIES_QTY_SPACE_KEY_TYPE,
+               _LabelImg_ {{"textinput_icon_space.png","textinput_icon_space_press.png"}, {"textinput_icon_space.png","textinput_icon_space_press.png"}, {"textinput_icon_space.png","textinput_icon_space_press.png"}},
+               _BGImg_{{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},
+               1,
+               _KeyVal_{{""},{""},{""}},
+               _KeyEvt_{{MVK_space},{MVK_space},{MVK_space}},
+               "",
+               0,
+               FALSE,
+       },
+       {
+               USED, /* 4x5 */
+               3,
+        _Label_{{".",""}, {".",""}, {".",""}},
+               LABEL_PROPERTIES_QTY_BOTTOM_LINE_TYPE,
+        _LabelImg_ {{"",""}, {"",""}, {"",""}},
+               _BGImg_{{"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png"}},
+               1,
+               _KeyVal_{{""},{""},{""}},
+        _KeyEvt_ {{MVK_period},{MVK_period},{MVK_period}},
+               "",
+               0,
+               FALSE,
+       },
+       // }
+       /* URL SubLayout */
+       // {
+       {
+               USED, /* 4x3 */
+               1,
+               _Label_{{""},{""},{""}},
+               LABEL_PROPERTIES_QTY_SPACE_KEY_TYPE,
+               _LabelImg_ {{"textinput_icon_space.png","textinput_icon_space_press.png"}, {"textinput_icon_space.png","textinput_icon_space_press.png"}, {"textinput_icon_space.png","textinput_icon_space_press.png"}},
+               _BGImg_{{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},
+               1,
+               _KeyVal_{{""},{""},{""}},
+               _KeyEvt_{{MVK_space},{MVK_space},{MVK_space}},
+               "",
+               0,
+               FALSE,
+       },
+       {
+               USED, /* 4x4 */
+               1,
+               _Label_{{"/"},{"/"},{"/"}},
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,
+               _LabelImg_{{" "," "}, {" "," "}, {" "," "}},
+               _BGImg_{{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}},
+               1,
+               _KeyVal_{{"/"},{"/"},{"/"}},
+               _KeyEvt_ {{MVK_slash},{MVK_slash},{MVK_slash}},
+               "",
+               0,
+               FALSE,
+       },
+       {
+               USED, /* 4x5 */
+               1,
+               _Label_{{"www."},{"www."},{"www."}},
+               LABEL_PROPERTIES_QTY_WWW_TYPE,
+               _LabelImg_{{" "," "}, {" "," "}, {" "," "}},
+               _BGImg_{{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}},
+               1,
+               _KeyVal_{{"www."},{"www."},{"www."}},
+               _KeyEvt_ {{0},{0},{0}},
+               "",
+               0,
+               FALSE,
+       },
+       {
+               USED, /* 4x6 */
+               3,
+               _Label_{{".",""}, {".",""}, {".",""}},
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,
+               _LabelImg_{{" "," "}, {" "," "}, {" "," "}},
+               _BGImg_{{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}},
+               1,
+               _KeyVal_{{"."},{"."},{"."}},
+               _KeyEvt_ {{MVK_period},{MVK_period},{MVK_period}},
+               "",
+               0,
+               FALSE,
+       },
+       // }
+       /* Email SubLayout */
+       // {
+       {
+               USED, /* 4x3 */
+               1,
+               _Label_{{""},{""},{""}},
+               LABEL_PROPERTIES_QTY_SPACE_KEY_TYPE,
+               _LabelImg_ {{"textinput_icon_space.png","textinput_icon_space_press.png"}, {"textinput_icon_space.png","textinput_icon_space_press.png"}, {"textinput_icon_space.png","textinput_icon_space_press.png"}},
+               _BGImg_{{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},
+               1,
+               _KeyVal_{{""},{""},{""}},
+               _KeyEvt_{{MVK_space},{MVK_space},{MVK_space}},
+               "",
+               0,
+               FALSE,
+       },
+       {
+               USED, /* 4x4 */
+               1,
+               _Label_{{"@"},{"@"},{"@"}},
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,
+               _LabelImg_{{" "," "}, {" "," "}, {" "," "}},
+               _BGImg_{{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}},
+               1,
+               _KeyVal_{{"@"},{"@"},{"@"}},
+               _KeyEvt_ {{MVK_at},{MVK_at},{MVK_at}},
+               "",
+               0,
+               FALSE,
+       },
+       {
+               USED, /* 4x5 */
+               1,
+               _Label_{{".com"},{".com"},{".com"}},
+               LABEL_PROPERTIES_QTY_WWW_TYPE,
+               _LabelImg_{{" "," "}, {" "," "}, {" "," "}},
+               _BGImg_{{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}},
+               1,
+               _KeyVal_{{".com"},{".com"},{".com"}},
+               _KeyEvt_ {{0},{0},{0}},
+               "",
+               0,
+               FALSE,
+       },
+       {
+               USED, /* 4x6 */
+               3,
+               _Label_{{".",""}, {".",""}, {".",""}},
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,
+               _LabelImg_{{" "," "}, {" "," "}, {" "," "}},
+               _BGImg_{{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}},
+               1,
+               _KeyVal_{{"."},{"."},{"."}},
+               _KeyEvt_ {{MVK_period},{MVK_period},{MVK_period}},
+               "",
+               0,
+               FALSE,
+       },
+       // }
+
+       {
+               USED, /* 4x5 */
+               1,
+               _Label_ {{""},{""},{""}},
+               LABEL_PROPERTIES_QTY_BOTTOM_LINE_TYPE,
+               _LabelImg_ {{"textinput_qwerty_icon_enter.png","textinput_qwerty_icon_enter.png","textinput_qwerty_icon_enter_disabled.png"}, {"textinput_qwerty_icon_enter.png","textinput_qwerty_icon_enter.png","textinput_qwerty_icon_enter_disabled.png"}, {"textinput_qwerty_icon_enter.png","textinput_qwerty_icon_enter.png","textinput_qwerty_icon_enter_disabled.png"}},
+               _BGImg_ {{"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_function.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_function.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_function.png","textinput_qwerty_button_nml.png"}},
+               1,
+               _KeyVal_ {{""},{""},{""}},
+               _KeyEvt_{{MVK_Return},{MVK_Return},{MVK_Return}},
+               "",
+               0,
+               FALSE,
+       },
+
+       {NOT_USED,},
+}
+#endif
+
+
diff --git a/res/mcfresource-port-qty-sym3.h b/res/mcfresource-port-qty-sym3.h
new file mode 100755 (executable)
index 0000000..c939f4c
--- /dev/null
@@ -0,0 +1,734 @@
+/*
+ * Copyright 2012  Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.tizenopensource.org/license
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+
+#ifdef KEY_CONFIGURE_PHASE
+{
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},
+
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},
+
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CONTROL, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CONTROL, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},
+
+
+       /*option*/      {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_MODECHANGE, POPUP_TYPE_CONTEXT_POPUP, FALSE, FALSE, TRUE, {NOT_USED,}},
+       /*abc*/{USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_MODECHANGE, POPUP_TYPE_NONE, FALSE, FALSE, TRUE, {NOT_USED,}},
+       /* Default SubLayout */
+       // {
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CONTROL, POPUP_TYPE_NONE, FALSE, FALSE, TRUE, {NOT_USED,}},
+       {USED, NOT_USED, BUTTON_TYPE_DIRECTION, KEY_TYPE_UNICODE, POPUP_TYPE_BTN_LONGPRESS_POPUP_ONCE, FALSE, FALSE, TRUE, {INPUT_MODE_PUNCTUATION_POPUP, NOT_USED, NOT_USED, NOT_USED, NOT_USED, NOT_USED, NOT_USED}},
+       // }
+       /* WithVoice SubLayout */
+       // {
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CONTROL, POPUP_TYPE_BTN_RELEASE_POPUP_ONCE, FALSE, FALSE, TRUE, {INPUT_MODE_SCENETEXT_POPUP, NOT_USED, NOT_USED, NOT_USED, NOT_USED, NOT_USED, NOT_USED}},
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CONTROL, POPUP_TYPE_NONE, FALSE, FALSE, TRUE, {NOT_USED,}},
+       {USED, NOT_USED, BUTTON_TYPE_DIRECTION, KEY_TYPE_UNICODE, POPUP_TYPE_BTN_LONGPRESS_POPUP_ONCE, FALSE, FALSE, TRUE, {INPUT_MODE_PUNCTUATION_POPUP, NOT_USED, NOT_USED, NOT_USED, NOT_USED, NOT_USED, NOT_USED}},
+       // }
+       /* URL SubLayout */
+       // {
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CONTROL, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},
+       {USED, CUSTOMID_WWWCOM, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_BTN_LONGPRESS_POPUP_ONCE, TRUE, TRUE, TRUE, {INPUT_MODE_URL_POPUP, NOT_USED, NOT_USED, NOT_USED, NOT_USED, NOT_USED, NOT_USED}},
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},
+       // }
+       /* Email SubLayout */
+       // {
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CONTROL, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, NOT_USED},
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, NOT_USED},
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_BTN_LONGPRESS_POPUP_ONCE, TRUE, TRUE, TRUE, INPUT_MODE_URL_POPUP},
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, NOT_USED},
+       // }
+       /*enter*/{USED, CUSTOMID_ENTER, BUTTON_TYPE_NORMAL, KEY_TYPE_CONTROL, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, NOT_USED},
+
+       {NOT_USED,},
+}
+#endif
+
+#ifdef KEY_PROPERTIES_PHASE
+{
+       /* fValid, labelCnt, label, labelPropId, imgPath, keyValueCnt, keyValue, keyEvent, longKeyValue, longKeyEvent, userLabel,  userKeyValue,  userKeyEvent, */
+       /* Second Line */
+       {
+               USED, /* 2x1 */
+               1,
+               _Label_ {{"#"},{"#"},{"#"}},
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},
+               1,
+               _KeyVal_ {{"#"},{"#"},{"#"}},
+               _KeyEvt_ {{MVK_1},{MVK_1},{MVK_1}},
+               "",
+               0,
+               FALSE,
+       },
+       {
+               USED, /* 2x2 */
+               1,
+               _Label_ {{"\xc2\xbf"},{"\xc2\xbf"}},
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},
+               1,
+               _KeyVal_ {{"\xc2\xbf"},{"\xc2\xbf"}},
+               _KeyEvt_ {{MVK_2},{MVK_2},{MVK_2}},
+               "",
+               0,
+               FALSE,
+       },
+       {
+               USED, /* 2x3 */
+               1,
+               _Label_ {{"\xc2\xa1"},{"\xc2\xa1"}},
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},
+               1,
+               _KeyVal_ {{"\xc2\xa1"},{"\xc2\xa1"}},
+               _KeyEvt_ {{MVK_3},{MVK_3},{MVK_3}},
+               "",
+               0,
+               FALSE,
+       },
+       {
+               USED, /* 2x4 */
+               1,
+               _Label_ {{"\xc2\xa4"},{"\xc2\xa4"}},
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},
+               1,
+               _KeyVal_ {{"\xc2\xa4"},{"\xc2\xa4"}},
+               _KeyEvt_ {{MVK_4},{MVK_4},{MVK_4}},
+               "",
+               0,
+               FALSE,
+       },
+       {
+               USED, /* 2x5 */
+               1,
+               _Label_ {{"\xc2\xa2"},{"\xc2\xa2"}},
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},
+               1,
+               _KeyVal_ {{"\xc2\xa2"},{"\xc2\xa2"}},
+               _KeyEvt_ {{MVK_5},{MVK_5},{MVK_5}},
+               "",
+               0,
+               FALSE,
+       },
+       {
+               USED, /* 2x6 */
+               1,
+               _Label_ {{"\xc2\xab"},{"\xc2\xab"}},
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},
+               1,
+               _KeyVal_ {{"\xc2\xab"},{"\xc2\xab"}},
+               _KeyEvt_ {{MVK_6},{MVK_6},{MVK_6}},
+               "",
+               0,
+               FALSE,
+       },
+       {
+               USED, /* 2x7 */
+               1,
+               _Label_ {{"\xc2\xbb"},{"\xc2\xbb"}},
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},
+               1,
+               _KeyVal_ {{"\xc2\xbb"},{"\xc2\xbb"}},
+               _KeyEvt_ {{MVK_7},{MVK_7},{MVK_7}},
+               "",
+               0,
+               FALSE,
+       },
+       {
+               USED, /* 2x8 */
+               1,
+               _Label_ {{"\xc2\xae"},{"\xc2\xae"}},
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},
+               1,
+               _KeyVal_ {{"\xc2\xae"},{"\xc2\xae"}},
+               _KeyEvt_ {{MVK_8},{MVK_8},{MVK_8}},
+               "",
+               0,
+               FALSE,
+       },
+       {
+               USED, /* 2x9 */
+               1,
+               _Label_ {{"\xc2\xa9"},{"\xc2\xa9"}},
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},
+               1,
+               _KeyVal_ {{"\xc2\xa9"},{"\xc2\xa9"}},
+               _KeyEvt_ {{MVK_9},{MVK_9},{MVK_9}},
+               "",
+               0,
+               FALSE,
+       },
+       {
+               USED, /* 2x10 */
+               1,
+               _Label_ {{"\xc2\xb0"},{"\xc2\xb0"}},
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},
+               1,
+               _KeyVal_ {{"\xc2\xb0"},{"\xc2\xb0"}},
+               _KeyEvt_ {{MVK_0},{MVK_0},{MVK_0}},
+               "",
+               0,
+               FALSE,
+       },
+
+
+       /* Third Line */
+       {
+               USED, /* 3x1 */
+               1,
+               _Label_ {{""},{""},{""}},
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},
+               1,
+               _KeyVal_ {{""},{""},{""}},
+               _KeyEvt_ {{MVK_exclam},{MVK_exclam}},
+               "",
+               0,
+               FALSE,
+       },
+       {
+               USED, /* 3x2 */
+               1,
+               _Label_ {{""},{""},{""}},
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},
+               1,
+               _KeyVal_ {{""},{""},{""}},
+               _KeyEvt_ {{MVK_at},{MVK_at}},
+               "",
+               0,
+               FALSE,
+       },
+       {
+               USED, /* 3x3 */
+               1,
+               _Label_ {{""},{""},{""}},
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},
+               1,
+               _KeyVal_ {{""},{""},{""}},
+               _KeyEvt_ {{MVK_numbersign},{MVK_numbersign},{MVK_numbersign}},
+               "",
+               0,
+               FALSE,
+       },
+       {
+               USED, /* 3x4 */
+               1,
+               _Label_ {{""},{""},{""}},
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},
+               1,
+               _KeyVal_ {{""},{""},{""}},
+               _KeyEvt_ {{MVK_dollar},{MVK_dollar}},
+               "",
+               0,
+               FALSE,
+       },
+       {
+               USED, /* 3x5 */
+               1,
+               _Label_ {{""},{""},{""}},
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},
+               1,
+               _KeyVal_ {{""},{""},{""}},
+               _KeyEvt_ {{MVK_percent},{MVK_percent}},
+               "",
+               0,
+               FALSE,
+       },
+       {
+               USED, /* 3x6 */
+               1,
+               _Label_ {{""},{""},{""}},
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},
+               1,
+               _KeyVal_ {{""},{""},{""}},
+               _KeyEvt_ {{MVK_asciicircum},{MVK_asciicircum}},
+               "",
+               0,
+               FALSE,
+       },
+       {
+               USED, /* 3x7 */
+               1,
+               _Label_ {{""},{""},{""}},
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},
+               1,
+               _KeyVal_ {{""},{""},{""}},
+               _KeyEvt_ {{MVK_ampersand},{MVK_ampersand}},
+               "",
+               0,
+               FALSE,
+       },
+       {
+               USED, /* 3x8 */
+               1,
+               _Label_ {{""},{""},{""}},
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},
+               1,
+               _KeyVal_ {{""},{""},{""}},
+               _KeyEvt_ {{MVK_asterisk},{MVK_asterisk},{MVK_asterisk}},
+               "",
+               0,
+               FALSE,
+       },
+       {
+               USED, /* 3x9 */
+               1,
+               _Label_ {{""},{""},{""}},
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},
+               1,
+               _KeyVal_ {{""},{""},{""}},
+               _KeyEvt_ {{MVK_minus},{MVK_minus}},
+               "",
+               0,
+               FALSE,
+       },
+
+       /* Fourth Line */
+       {
+               USED, /* 4x1 */
+               1,
+               _Label_ {{"3/3"},{"3/3"}},
+               LABEL_PROPERTIES_QTY_BOTTOM_LINE_TYPE,
+               _LabelImg_ {{"",""},{"",""},{"",""}},
+               _BGImg_ {{"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_function.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_function.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_function.png","textinput_qwerty_button_nml.png"}},
+               1,
+               _KeyVal_ {{""},{""},{""}},
+               _KeyEvt_ {{UD_MVK_NEXTSYM},{UD_MVK_NEXTSYM}},
+               "",
+               0,
+               FALSE,
+       },
+       {
+               USED, /* 4x2 */
+               1,
+               _Label_ {{"="},{"="}},
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},
+               1,
+               _KeyVal_ {{"="},{"="}},
+               _KeyEvt_ {{MVK_parenleft},{MVK_parenleft}},
+               "",
+               0,
+               FALSE,
+       },
+       {
+               USED, /* 4x3 */
+               1,
+               _Label_ {{"!"},{"!"},{"!"}},
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},
+               1,
+               _KeyVal_ {{"!"},{"!"},{"!"}},
+               _KeyEvt_ {{MVK_parenright},{MVK_parenright}},
+               "",
+               0,
+               FALSE,
+       },
+       {
+               USED, /* 4x4 */
+               1,
+               _Label_ {{"'"},{"'"}},
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},
+               1,
+               _KeyVal_ {{"'"},{"'"}},
+               _KeyEvt_ {{MVK_period},{MVK_period},{MVK_period}},
+               "",
+               0,
+               FALSE,
+       },
+       {
+               USED, /* 4x5 */
+               1,
+               _Label_ {{":"},{":"},{":"}},
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},
+               1,
+               _KeyVal_ {{":"},{":"},{":"}},
+               _KeyEvt_ {{MVK_comma},{MVK_comma}},
+               "",
+               0,
+               FALSE,
+       },
+       {
+               USED, /* 4x6 */
+               1,
+               _Label_ {{","},{","},{","}},
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},
+               1,
+               _KeyVal_ {{","},{","},{","}},
+               _KeyEvt_ {{MVK_question},{MVK_question}},
+               "",
+               0,
+               FALSE,
+       },
+       {
+               USED, /* 4x7 */
+               1,
+               _Label_ {{"."},{"."},{"."}},
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},
+               1,
+               _KeyVal_ {{"."},{"."},{"."}},
+               _KeyEvt_ {{MVK_exclam},{MVK_exclam}},
+               "",
+               0,
+               FALSE,
+       },
+       {
+               USED, /* 4x8 */
+               1,
+               _Label_ {{"?"},{"?"},{"?"}},
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},
+               1,
+               _KeyVal_ {{"?"},{"?"},{"?"}},
+               _KeyEvt_ {{MVK_apostrophe},{MVK_apostrophe}},
+               "",
+               0,
+               FALSE,
+       },
+       {
+               USED, /* 4x9 */
+               1,
+               _Label_ {{""},{""},{""}},
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,
+               _LabelImg_ {{"textinput_qwerty_icon_clear.png","textinput_qwerty_icon_clear.png"}, {"textinput_qwerty_icon_clear.png","textinput_qwerty_icon_clear.png"}, {"textinput_qwerty_icon_clear.png","textinput_qwerty_icon_clear.png"}},
+               _BGImg_ {{"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_function.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_function.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}},
+               1,
+               _KeyVal_ {{""},{""},{""}},
+               _KeyEvt_{{MVK_BackSpace},{MVK_BackSpace},{MVK_BackSpace}},
+               "",
+               0,
+               TRUE,
+       },
+       /* Fifth line*/
+
+       {
+               USED, /* 5x2 */
+               1,
+               _Label_{{""},{""},{""}},
+               LABEL_PROPERTIES_QTY_BOTTOM_LINE_TYPE,
+               _LabelImg_{{"language_icon_port.png","language_icon_port.png"}, {"language_icon_port.png","language_icon_port.png"}, {"language_icon_port.png","language_icon_port.png"}},
+               _BGImg_{{"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_function.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_function.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_function.png","textinput_qwerty_button_nml.png"}},
+               1,
+               _KeyVal_{{""},{""},{""}},
+               _KeyEvt_ {{UD_MVK_LANG_CHANGE},{UD_MVK_LANG_CHANGE},{UD_MVK_LANG_CHANGE}},
+               "OptionWindow",
+               UD_MVK_OPTION_WINDOW,
+               FALSE,
+       },
+       {
+               USED, /* 5x1 */
+               1,
+               _Label_{{"abc"},{"abc"},{"abc"}},
+               LABEL_PROPERTIES_QTY_BOTTOM_LINE_TYPE,
+               _LabelImg_{{"",""}, {"",""}, {"",""}},
+               _BGImg_{{"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_function.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_function.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_function.png","textinput_qwerty_button_nml.png"}},
+               1,
+               _KeyVal_{{""},{""},{""}},
+               _KeyEvt_ {{UD_MVK_ABC},{UD_MVK_ABC},{UD_MVK_ABC}},
+               "Keypad",
+               UD_MVK_KEYPAD,
+               FALSE,
+       },
+
+       /* Default SubLayout */
+       // {
+       {
+               USED, /* 4x3 */
+               1,
+               _Label_{{""},{""},{""}},
+               LABEL_PROPERTIES_QTY_SPACE_KEY_TYPE,
+               _LabelImg_ {{"textinput_icon_space.png","textinput_icon_space_press.png"}, {"textinput_icon_space.png","textinput_icon_space_press.png"}, {"textinput_icon_space.png","textinput_icon_space_press.png"}},
+               _BGImg_{{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},
+               1,
+               _KeyVal_{{""},{""},{""}},
+               _KeyEvt_{{MVK_space},{MVK_space},{MVK_space}},
+               "",
+               0,
+               FALSE,
+       },
+       {
+               USED, /* 4x4 */
+               3,
+        _Label_{{".",""}, {".",""}, {".",""}},
+               LABEL_PROPERTIES_QTY_BOTTOM_LINE_TYPE,
+        _LabelImg_ {{"",""}, {"",""}, {"",""}},
+               _BGImg_{{"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png"}},
+               1,
+               _KeyVal_{{""},{""},{""}},
+        _KeyEvt_ {{MVK_period},{MVK_period},{MVK_period}},
+               "",
+               0,
+               FALSE,
+       },
+       // }
+       /* WithVoice SubLayout */
+       // {
+       {
+               USED, /* 4x3 */
+               1,
+               _Label_{{""},{""},{""}},
+               LABEL_PROPERTIES_QTY_BOTTOM_LINE_TYPE,
+               _LabelImg_ {{"camera_qwerty_kor-moa_port.png","camera_qwerty_kor-moa_port.png","camera_qwerty_kor-moa_port.png"}, {"camera_qwerty_kor-moa_port.png","camera_qwerty_kor-moa_port.png","camera_qwerty_kor-moa_port.png"}, {"camera_qwerty_kor-moa_port.png","camera_qwerty_kor-moa_port.png","camera_qwerty_kor-moa_port.png"}},
+               _BGImg_{{"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_function.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_function.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_function.png"}},
+               1,
+               _KeyVal_{{""},{""},{""}},
+               _KeyEvt_ {{0},{0},{0}},
+               "",
+               0,
+               FALSE,
+       },
+       {
+               USED, /* 4x4 */
+               1,
+               _Label_{{""},{""},{""}},
+               LABEL_PROPERTIES_QTY_SPACE_KEY_TYPE,
+               _LabelImg_ {{"textinput_icon_space.png","textinput_icon_space_press.png"}, {"textinput_icon_space.png","textinput_icon_space_press.png"}, {"textinput_icon_space.png","textinput_icon_space_press.png"}},
+               _BGImg_{{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},
+               1,
+               _KeyVal_{{""},{""},{""}},
+               _KeyEvt_{{MVK_space},{MVK_space},{MVK_space}},
+               "",
+               0,
+               FALSE,
+       },
+       {
+               USED, /* 4x5 */
+               3,
+        _Label_{{".",""}, {".",""}, {".",""}},
+               LABEL_PROPERTIES_QTY_BOTTOM_LINE_TYPE,
+        _LabelImg_ {{"",""}, {"",""}, {"",""}},
+               _BGImg_{{"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png"}},
+               1,
+               _KeyVal_{{""},{""},{""}},
+        _KeyEvt_ {{MVK_period},{MVK_period},{MVK_period}},
+               "",
+               0,
+               FALSE,
+       },
+       // }
+       /* URL SubLayout */
+       // {
+       {
+               USED, /* 4x3 */
+               1,
+               _Label_{{""},{""},{""}},
+               LABEL_PROPERTIES_QTY_SPACE_KEY_TYPE,
+               _LabelImg_ {{"textinput_icon_space.png","textinput_icon_space_press.png"}, {"textinput_icon_space.png","textinput_icon_space_press.png"}, {"textinput_icon_space.png","textinput_icon_space_press.png"}},
+               _BGImg_{{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},
+               1,
+               _KeyVal_{{""},{""},{""}},
+               _KeyEvt_{{MVK_space},{MVK_space},{MVK_space}},
+               "",
+               0,
+               FALSE,
+       },
+       {
+               USED, /* 4x4 */
+               1,
+               _Label_{{"/"},{"/"},{"/"}},
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,
+               _LabelImg_{{" "," "}, {" "," "}, {" "," "}},
+               _BGImg_{{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}},
+               1,
+               _KeyVal_{{"/"},{"/"},{"/"}},
+               _KeyEvt_ {{MVK_slash},{MVK_slash},{MVK_slash}},
+               "",
+               0,
+               FALSE,
+       },
+       {
+               USED, /* 4x5 */
+               1,
+               _Label_{{"www."},{"www."},{"www."}},
+               LABEL_PROPERTIES_QTY_WWW_TYPE,
+               _LabelImg_{{" "," "}, {" "," "}, {" "," "}},
+               _BGImg_{{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}},
+               1,
+               _KeyVal_{{"www."},{"www."},{"www."}},
+               _KeyEvt_ {{0},{0},{0}},
+               "",
+               0,
+               FALSE,
+       },
+       {
+               USED, /* 4x6 */
+               3,
+               _Label_{{".",""}, {".",""}, {".",""}},
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,
+               _LabelImg_{{" "," "}, {" "," "}, {" "," "}},
+               _BGImg_{{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}},
+               1,
+               _KeyVal_{{"."},{"."},{"."}},
+               _KeyEvt_ {{MVK_period},{MVK_period},{MVK_period}},
+               "",
+               0,
+               FALSE,
+       },
+       // }
+       /* Email SubLayout */
+       // {
+       {
+               USED, /* 4x3 */
+               1,
+               _Label_{{""},{""},{""}},
+               LABEL_PROPERTIES_QTY_SPACE_KEY_TYPE,
+               _LabelImg_ {{"textinput_icon_space.png","textinput_icon_space_press.png"}, {"textinput_icon_space.png","textinput_icon_space_press.png"}, {"textinput_icon_space.png","textinput_icon_space_press.png"}},
+               _BGImg_{{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},
+               1,
+               _KeyVal_{{""},{""},{""}},
+               _KeyEvt_{{MVK_space},{MVK_space},{MVK_space}},
+               "",
+               0,
+               FALSE,
+       },
+       {
+               USED, /* 4x4 */
+               1,
+               _Label_{{"@"},{"@"},{"@"}},
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,
+               _LabelImg_{{" "," "}, {" "," "}, {" "," "}},
+               _BGImg_{{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}},
+               1,
+               _KeyVal_{{"@"},{"@"},{"@"}},
+               _KeyEvt_ {{MVK_at},{MVK_at},{MVK_at}},
+               "",
+               0,
+               FALSE,
+       },
+       {
+               USED, /* 4x5 */
+               1,
+               _Label_{{".com"},{".com"},{".com"}},
+               LABEL_PROPERTIES_QTY_WWW_TYPE,
+               _LabelImg_{{" "," "}, {" "," "}, {" "," "}},
+               _BGImg_{{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}},
+               1,
+               _KeyVal_{{".com"},{".com"},{".com"}},
+               _KeyEvt_ {{0},{0},{0}},
+               "",
+               0,
+               FALSE,
+       },
+       {
+               USED, /* 4x6 */
+               3,
+               _Label_{{".",""}, {".",""}, {".",""}},
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,
+               _LabelImg_{{" "," "}, {" "," "}, {" "," "}},
+               _BGImg_{{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}},
+               1,
+               _KeyVal_{{"."},{"."},{"."}},
+               _KeyEvt_ {{MVK_period},{MVK_period},{MVK_period}},
+               "",
+               0,
+               FALSE,
+       },
+       // }
+
+       {
+               USED, /* 4x5 */
+               1,
+               _Label_ {{""},{""},{""}},
+               LABEL_PROPERTIES_QTY_BOTTOM_LINE_TYPE,
+               _LabelImg_ {{"textinput_qwerty_icon_enter.png","textinput_qwerty_icon_enter.png","textinput_qwerty_icon_enter_disabled.png"}, {"textinput_qwerty_icon_enter.png","textinput_qwerty_icon_enter.png","textinput_qwerty_icon_enter_disabled.png"}, {"textinput_qwerty_icon_enter.png","textinput_qwerty_icon_enter.png","textinput_qwerty_icon_enter_disabled.png"}},
+               _BGImg_ {{"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_function.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_function.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_function.png","textinput_qwerty_button_nml.png"}},
+               1,
+               _KeyVal_ {{""},{""},{""}},
+               _KeyEvt_{{MVK_Return},{MVK_Return},{MVK_Return}},
+               "",
+               0,
+               FALSE,
+       },
+
+       {NOT_USED,},
+}
+#endif
+
+
+
+
diff --git a/res/mcfresource-port-qty-sym4.h b/res/mcfresource-port-qty-sym4.h
new file mode 100755 (executable)
index 0000000..8228c06
--- /dev/null
@@ -0,0 +1,550 @@
+/*
+ * Copyright 2012  Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.tizenopensource.org/license
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+\r
+#ifdef KEY_CONFIGURE_PHASE\r
+{\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CONTROL, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CONTROL, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+\r
+       /*abc*/{USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_MODECHANGE, POPUP_TYPE_CONTEXT_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       /*option*/      {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_MODECHANGE, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       /*Space*/{USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CONTROL, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       /*.,*/{USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       /*enter*/{USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+\r
+\r
+       {NOT_USED,},\r
+}\r
+#endif\r
+\r
+#ifdef KEY_PROPERTIES_PHASE\r
+{\r
+       /* fValid, labelCnt, label, labelPropId, imgPath, keyValueCnt, keyValue, keyEvent, longKeyValue, longKeyEvent, userLabel,  userKeyValue,  userKeyEvent, */\r
+       /* First Line */\r
+       {\r
+               USED, /* 1x1 */\r
+               0,\r
+               _Label_ {{"\""},{"\""}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"",""}, {"",""}, {"",""}},\r
+               0,\r
+               _KeyVal_ {{"\""},{"\""}},\r
+               _KeyEvt_ {{MVK_1},{MVK_1},{MVK_1}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 1x2 */\r
+               0,\r
+               _Label_ {{"/"},{"/"},{"/"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"",""}, {"",""}, {"",""}},\r
+               0,\r
+               _KeyVal_ {{"/"},{"/"},{"/"}},\r
+               _KeyEvt_ {{MVK_2},{MVK_2},{MVK_2}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 1x3 */\r
+               0,\r
+               _Label_ {{":"},{":"},{":"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"",""}, {"",""}, {"",""}},\r
+               0,\r
+               _KeyVal_ {{":"},{":"},{":"}},\r
+               _KeyEvt_ {{MVK_3},{MVK_3},{MVK_3}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 1x4 */\r
+               0,\r
+               _Label_ {{";"},{";"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"",""}, {"",""}, {"",""}},\r
+               0,\r
+               _KeyVal_ {{";"},{";"}},\r
+               _KeyEvt_ {{MVK_4},{MVK_4},{MVK_4}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 1x5 */\r
+               0,\r
+               _Label_ {{"["},{"["}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"",""}, {"",""}, {"",""}},\r
+               0,\r
+               _KeyVal_ {{"["},{"["}},\r
+               _KeyEvt_ {{MVK_5},{MVK_5},{MVK_5}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 1x6 */\r
+               0,\r
+               _Label_ {{"]"},{"]"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"",""}, {"",""}, {"",""}},\r
+               0,\r
+               _KeyVal_ {{"]"},{"]"}},\r
+               _KeyEvt_ {{MVK_6},{MVK_6},{MVK_6}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 1x7 */\r
+               0,\r
+               _Label_ {{"{"},{"{"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"",""}, {"",""}, {"",""}},\r
+               0,\r
+               _KeyVal_ {{"{"},{"{"}},\r
+               _KeyEvt_ {{MVK_7},{MVK_7},{MVK_7}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 1x8 */\r
+               0,\r
+               _Label_ {{"}"},{"}"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"",""}, {"",""}, {"",""}},\r
+               0,\r
+               _KeyVal_ {{"}"},{"}"}},\r
+               _KeyEvt_ {{MVK_8},{MVK_8},{MVK_8}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 1x9 */\r
+               0,\r
+               _Label_ {{"+"},{"+"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"",""}, {"",""}, {"",""}},\r
+               0,\r
+               _KeyVal_ {{"+"},{"+"}},\r
+               _KeyEvt_ {{MVK_9},{MVK_9},{MVK_9}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 1x10 */\r
+               0,\r
+               _Label_ {{"="},{"="}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"",""}, {"",""}, {"",""}},\r
+               0,\r
+               _KeyVal_ {{"="},{"="}},\r
+               _KeyEvt_ {{MVK_0},{MVK_0},{MVK_0}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+\r
+\r
+       /* Third Line */\r
+       {\r
+               USED, /* 2x1 */\r
+               0,\r
+               _Label_ {{"_"},{"_"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"",""}, {"",""}, {"",""}},\r
+               0,\r
+               _KeyVal_ {{"_"},{"_"}},\r
+               _KeyEvt_ {{MVK_exclam},{MVK_exclam}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 2x2 */\r
+               0,\r
+               _Label_ {{"|"},{"|"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"",""}, {"",""}, {"",""}},\r
+               0,\r
+               _KeyVal_ {{"|"},{"|"}},\r
+               _KeyEvt_ {{MVK_at},{MVK_at}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 2x3 */\r
+               0,\r
+               _Label_ {{"~"},{"~"},{"~"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"",""}, {"",""}, {"",""}},\r
+               0,\r
+               _KeyVal_ {{"~"},{"~"},{"~"}},\r
+               _KeyEvt_ {{MVK_numbersign},{MVK_numbersign},{MVK_numbersign}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 2x4 */\r
+               0,\r
+               _Label_ {{"&lt;"},{"&lt;"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"",""}, {"",""}, {"",""}},\r
+               0,\r
+               _KeyVal_ {{"<"},{"<"}},\r
+               _KeyEvt_ {{MVK_dollar},{MVK_dollar}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 2x5 */\r
+               0,\r
+               _Label_ {{">"},{">"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"",""}, {"",""}, {"",""}},\r
+               0,\r
+               _KeyVal_ {{">"},{">"}},\r
+               _KeyEvt_ {{MVK_percent},{MVK_percent}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 2x6 */\r
+               0,\r
+               _Label_ {{"\xc2\xa3"},{"\xc2\xa3"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"",""}, {"",""}, {"",""}},\r
+               0,\r
+               _KeyVal_ {{"\xc2\xa3"},{"\xc2\xa3"}},\r
+               _KeyEvt_ {{MVK_asciicircum},{MVK_asciicircum}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 2x7 */\r
+               0,\r
+               _Label_ {{"\xc2\xa5"},{"\xc2\xa5"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"",""}, {"",""}, {"",""}},\r
+               0,\r
+               _KeyVal_ {{"\xc2\xa5"},{"\xc2\xa5"}},\r
+               _KeyEvt_ {{MVK_ampersand},{MVK_ampersand}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 2x8 */\r
+               0,\r
+               _Label_ {{"\xe2\x82\xac"},{"\xe2\x82\xac"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"",""}, {"",""}, {"",""}},\r
+               0,\r
+               _KeyVal_ {{"\xe2\x82\xac"},{"\xe2\x82\xac"}},\r
+               _KeyEvt_ {{MVK_asterisk},{MVK_asterisk},{MVK_asterisk}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 2x9 */\r
+               0,\r
+               _Label_ {{"\\"},{"\\"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"",""}, {"",""}, {"",""}},\r
+               0,\r
+               _KeyVal_ {{"\\"},{"\\"}},\r
+               _KeyEvt_ {{MVK_minus},{MVK_minus}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+\r
+\r
+       /* Fourth Line */\r
+       {\r
+               USED, /* 3x1 */\r
+               0,\r
+               _Label_ {{""},{""},{""}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"",""}, {"",""}, {"",""}},\r
+               0,\r
+               _KeyVal_ {{""},{""},{""}},\r
+               _KeyEvt_ {{UD_MVK_PREVSYM},{UD_MVK_PREVSYM}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 3x2 */\r
+               0,\r
+               _Label_ {{""},{""},{""}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"",""}, {"",""}, {"",""}},\r
+               0,\r
+               _KeyVal_ {{""},{""},{""}},\r
+               _KeyEvt_ {{0},{0},{0}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 3x3 */\r
+               0,\r
+               _Label_ {{""},{""},{""}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"",""}, {"",""}, {"",""}},\r
+               0,\r
+               _KeyVal_ {{""},{""},{""}},\r
+               _KeyEvt_ {{0},{0},{0}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 3x4 */\r
+               0,\r
+               _Label_ {{""},{""},{""}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"",""}, {"",""}, {"",""}},\r
+               0,\r
+               _KeyVal_ {{""},{""},{""}},\r
+               _KeyEvt_ {{0},{0},{0}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 3x5 */\r
+               0,\r
+               _Label_ {{""},{""},{""}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"",""}, {"",""}, {"",""}},\r
+               0,\r
+               _KeyVal_ {{""},{""},{""}},\r
+               _KeyEvt_ {{0},{0},{0}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 3x6 */\r
+               0,\r
+               _Label_ {{""},{""},{""}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"",""}, {"",""}, {"",""}},\r
+               0,\r
+               _KeyVal_ {{""},{""},{""}},\r
+               _KeyEvt_ {{0},{0},{0}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 3x7 */\r
+               0,\r
+               _Label_ {{""},{""},{""}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"",""}, {"",""}, {"",""}},\r
+               0,\r
+               _KeyVal_ {{""},{""},{""}},\r
+               _KeyEvt_ {{0},{0},{0}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 3x8 */\r
+               0,\r
+               _Label_ {{""},{""},{""}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"",""}, {"",""}, {"",""}},\r
+               0,\r
+               _KeyVal_ {{""},{""},{""}},\r
+               _KeyEvt_ {{0},{0},{0}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+\r
+       {\r
+               USED, /* 3x9 */\r
+               0,\r
+               _Label_ {{""},{""},{""}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"",""}, {"",""}, {"",""}},\r
+               0,\r
+               _KeyVal_ {{""},{""},{""}},\r
+               _KeyEvt_{{MVK_BackSpace},{MVK_BackSpace},{MVK_BackSpace}},\r
+               "",\r
+               0,\r
+               TRUE,\r
+               },\r
+\r
+               /* Fifth line*/\r
+\r
+               {\r
+               USED, /* 4x1 */\r
+               0,\r
+               _Label_{{"123"},{"123"},{"123"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"",""}, {"",""}, {"",""}},\r
+               0,\r
+               _KeyVal_{{""},{""},{""}},\r
+               _KeyEvt_ {{UD_MVK_ABC},{UD_MVK_ABC},{UD_MVK_ABC}},\r
+               "Keypad",\r
+               UD_MVK_KEYPAD,\r
+               FALSE,\r
+       },\r
+\r
+       {\r
+               USED, /* 4x2 */\r
+               0,\r
+               _Label_{{""},{""},{""}},\r
+               LABEL_PROPERTIES_QTY_BOTTOM_LINE_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"",""}, {"",""}, {"",""}},\r
+               0,\r
+               _KeyVal_{{""},{""},{""}},\r
+               _KeyEvt_ {{UD_MVK_LANG_CHANGE},{UD_MVK_LANG_CHANGE},{UD_MVK_LANG_CHANGE}},\r
+               "OptionWindow",\r
+               UD_MVK_OPTION_WINDOW,\r
+               FALSE,\r
+       },\r
+\r
+       {\r
+               USED, /*4x3 */\r
+               0,\r
+               _Label_{{""},{""},{""}},\r
+               LABEL_PROPERTIES_QTY_BOTTOM_LINE_TYPE,\r
+               _LabelImg_ {{"textinput_icon_space.png","textinput_icon_space_press.png"}, {"textinput_icon_space.png","textinput_icon_space_press.png"}, {"textinput_icon_space.png","textinput_icon_space_press.png"}},\r
+               _BGImg_{{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               0,\r
+               _KeyVal_{{""},{""},{""}},\r
+               _KeyEvt_{{MVK_space},{MVK_space},{MVK_space}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+\r
+       {\r
+               USED, /* 4x4 */\r
+               0,\r
+               _Label_{{"",""},{"",""},{"",""}},\r
+               LABEL_PROPERTIES_4X4_DEFAULT_TYPE,\r
+               _LabelImg_ {{" "," "}, {" "," "}, {" "," "}},\r
+               _BGImg_ {{"",""}, {"",""}, {"",""}},\r
+               4,\r
+               _KeyVal_{{".",","},{".", ","}},\r
+               _KeyEvt_{{MVK_period, MVK_comma},{MVK_period, MVK_comma}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+               {{".",","},{".",","}}\r
+       },\r
+\r
+       {\r
+               USED, /* 4x5 */\r
+               0,\r
+               _Label_ {{""},{""},{""}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"",""}, {"",""}, {"",""}},\r
+               0,\r
+               _KeyVal_ {{""},{""},{""}},\r
+               _KeyEvt_{{MVK_Return},{MVK_Return},{MVK_Return}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+\r
+\r
+       {NOT_USED,},\r
+}\r
+#endif\r
+\r
+\r
diff --git a/res/mcfresource-port-qty-turkish.h b/res/mcfresource-port-qty-turkish.h
new file mode 100755 (executable)
index 0000000..bbb27de
--- /dev/null
@@ -0,0 +1,760 @@
+/*
+ * Copyright 2012  Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.tizenopensource.org/license
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+\r
+#ifdef KEY_CONFIGURE_PHASE\r
+{\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CONTROL, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_AUTO_POPUP, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CONTROL, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+    /*option*/ {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_MODECHANGE, POPUP_TYPE_CONTEXT_POPUP, FALSE, FALSE, TRUE, {NOT_USED,}},\r
+       /*abc*/{USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_MODECHANGE, POPUP_TYPE_BTN_LONGPRESS_POPUP_ONCE, FALSE, FALSE, TRUE, {INPUT_MODE_EMOTICON_POPUP, NOT_USED, NOT_USED, NOT_USED, NOT_USED, NOT_USED, NOT_USED}},\r
+       /* Default SubLayout */\r
+       // {\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CONTROL, POPUP_TYPE_NONE, FALSE, FALSE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_DIRECTION, KEY_TYPE_UNICODE, POPUP_TYPE_BTN_LONGPRESS_POPUP_ONCE, FALSE, FALSE, TRUE, {INPUT_MODE_PUNCTUATION_POPUP, NOT_USED, NOT_USED, NOT_USED, NOT_USED, NOT_USED, NOT_USED}},\r
+       // }\r
+       /* WithVoice SubLayout */\r
+       // {\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CONTROL, POPUP_TYPE_BTN_RELEASE_POPUP_ONCE, FALSE, FALSE, TRUE, {INPUT_MODE_SCENETEXT_POPUP, NOT_USED, NOT_USED, NOT_USED, NOT_USED, NOT_USED, NOT_USED}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CONTROL, POPUP_TYPE_NONE, FALSE, FALSE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_DIRECTION, KEY_TYPE_UNICODE, POPUP_TYPE_BTN_LONGPRESS_POPUP_ONCE, FALSE, FALSE, TRUE, {INPUT_MODE_PUNCTUATION_POPUP, NOT_USED, NOT_USED, NOT_USED, NOT_USED, NOT_USED, NOT_USED}},\r
+       // }\r
+       /* URL SubLayout */\r
+       // {\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CONTROL, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, CUSTOMID_WWWCOM, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_BTN_LONGPRESS_POPUP_ONCE, TRUE, TRUE, TRUE, {INPUT_MODE_URL_POPUP, NOT_USED, NOT_USED, NOT_USED, NOT_USED, NOT_USED, NOT_USED}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       // }\r
+       /* Email SubLayout */\r
+       // {\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CONTROL, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_BTN_LONGPRESS_POPUP_ONCE, TRUE, TRUE, TRUE, {INPUT_MODE_URL_POPUP, NOT_USED, NOT_USED, NOT_USED, NOT_USED, NOT_USED, NOT_USED}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       // }\r
+       /*enter*/{USED, CUSTOMID_ENTER, BUTTON_TYPE_NORMAL, KEY_TYPE_CONTROL, POPUP_TYPE_NONE, FALSE, FALSE, TRUE, {NOT_USED,}},\r
+\r
+       {NOT_USED,},\r
+}\r
+#endif\r
+\r
+#ifdef KEY_PROPERTIES_PHASE\r
+{\r
+       /* fValid, labelCnt, label, labelPropId, imgPath, keyValueCnt, keyValue, keyEvent, longKeyValue, longKeyEvent, userLabel,  userKeyValue,  userKeyEvent, */\r
+       /* Second Line */\r
+       {\r
+               USED, /* 2x1 */\r
+               1,\r
+               _Label_ {{"q"},{"Q"},{"Q"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"q"},{"Q"},{"Q"}},\r
+               _KeyEvt_ {{MVK_q},{MVK_Q},{MVK_Q}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 2x2 */\r
+               1,\r
+               _Label_ {{"w"},{"W"},{"W"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"w"},{"W"},{"W"}},\r
+               _KeyEvt_ {{MVK_w},{MVK_W},{MVK_W}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 2x3 */\r
+               1,\r
+               _Label_ {{"e"},{"E"},{"E"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"e"},{"E"},{"E"}},\r
+               _KeyEvt_ {{MVK_e},{MVK_E},{MVK_E}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 2x4 */\r
+               1,\r
+               _Label_ {{"r"},{"R"},{"R"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"r"},{"R"},{"R"}},\r
+               _KeyEvt_ {{MVK_r},{MVK_R},{MVK_R}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 2x5 */\r
+               1,\r
+               _Label_ {{"t"},{"T"},{"T"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"t"},{"T"},{"T"}},\r
+               _KeyEvt_ {{MVK_t},{MVK_T},{MVK_T}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 2x6 */\r
+               1,\r
+               _Label_ {{"y"},{"Y"},{"Y"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"y"},{"Y"},{"Y"}},\r
+               _KeyEvt_ {{MVK_y},{MVK_Y},{MVK_Y}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 2x7 */\r
+               1,\r
+               _Label_ {{"u"},{"U"},{"U"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"u"},{"U"},{"U"}},\r
+               _KeyEvt_ {{MVK_u},{MVK_U},{MVK_U}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+               {{"u","\xc3\xbc"},{"U","\xc3\x9c"},{"U","\xc3\x9c"}},\r
+               FALSE,\r
+               0,\r
+               MCF_MULTI_TOUCH_TYPE_EXCLUSIVE,\r
+               NOT_USED,\r
+               {{"u","..."},{"U","..."},{"U","..."}},\r
+       },\r
+       {\r
+               USED, /* 2x8 */\r
+               1,\r
+               _Label_ {{"i"},{"I"},{"I"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"i"},{"I"},{"I"}},\r
+               _KeyEvt_ {{MVK_i},{MVK_I},{MVK_I}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 2x9 */\r
+               1,\r
+               _Label_ {{"o"},{"O"},{"O"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"o"},{"O"},{"O"}},\r
+               _KeyEvt_ {{MVK_o},{MVK_O},{MVK_O}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+               {{"o","\xc3\xb6"},{"O","\xc3\x96"},{"O","\xc3\x96"}},\r
+               FALSE,\r
+               0,\r
+               MCF_MULTI_TOUCH_TYPE_EXCLUSIVE,\r
+               NOT_USED,\r
+               {{"o","..."},{"O","..."},{"O","..."}},\r
+       },\r
+       {\r
+               USED, /* 2x10 */\r
+               1,\r
+               _Label_ {{"p"},{"P"},{"P"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"p"},{"P"},{"P"}},\r
+               _KeyEvt_ {{MVK_p},{MVK_P},{MVK_P}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+\r
+\r
+       /* Third Line */\r
+       {\r
+               USED, /* 3x1 */\r
+               1,\r
+               _Label_ {{"a"},{"A"},{"A"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"a"},{"A"},{"A"}},\r
+               _KeyEvt_ {{MVK_a},{MVK_A},{MVK_A}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 3x2 */\r
+               1,\r
+               _Label_ {{"s"},{"S"},{"S"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"s"},{"S"},{"S"}},\r
+               _KeyEvt_ {{MVK_s},{MVK_S},{MVK_S}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+               {{"s","\xc5\x9f"},{"S","\xc5\x9e"},{"S","\xc5\x9e"}},\r
+               FALSE,\r
+               0,\r
+               MCF_MULTI_TOUCH_TYPE_EXCLUSIVE,\r
+               NOT_USED,\r
+               {{"s","..."},{"S","..."},{"S","..."}},\r
+       },\r
+       {\r
+               USED, /* 3x3 */\r
+               1,\r
+               _Label_ {{"d"},{"D"},{"D"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"d"},{"D"},{"D"}},\r
+               _KeyEvt_ {{MVK_d},{MVK_D},{MVK_D}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 3x4 */\r
+               1,\r
+               _Label_ {{"f"},{"F"},{"F"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"f"},{"F"},{"F"}},\r
+               _KeyEvt_ {{MVK_f},{MVK_F},{MVK_F}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 3x5 */\r
+               1,\r
+               _Label_ {{"g"},{"G"},{"G"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"g"},{"G"},{"G"}},\r
+               _KeyEvt_ {{MVK_g},{MVK_G},{MVK_G}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+               {{"g","\xc4\x9f"},{"G","\xc4\x9e"},{"G","\xc4\x9e"}},\r
+               FALSE,\r
+               0,\r
+               MCF_MULTI_TOUCH_TYPE_EXCLUSIVE,\r
+               NOT_USED,\r
+               {{"g","..."},{"G","..."},{"G","..."}},\r
+       },\r
+       {\r
+               USED, /* 3x6 */\r
+               1,\r
+               _Label_ {{"h"},{"H"},{"H"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"h"},{"H"},{"H"}},\r
+               _KeyEvt_ {{MVK_h},{MVK_H},{MVK_H}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 3x7 */\r
+               1,\r
+               _Label_ {{"j"},{"J"},{"J"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"j"},{"J"},{"J"}},\r
+               _KeyEvt_ {{MVK_j},{MVK_J},{MVK_J}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 3x8 */\r
+               1,\r
+               _Label_ {{"k"},{"K"},{"K"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"k"},{"K"},{"K"}},\r
+               _KeyEvt_ {{MVK_k},{MVK_K},{MVK_K}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 3x9 */\r
+               1,\r
+               _Label_ {{"l"},{"L"},{"L"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"l"},{"L"},{"L"}},\r
+               _KeyEvt_ {{MVK_l},{MVK_L},{MVK_L}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+\r
+       /* Fourth Line */\r
+       {\r
+               USED, /* 4x1 */\r
+               1,\r
+               _Label_ {{""},{""},{""}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"textinput_qwerty_icon_shift_01.png","textinput_qwerty_icon_shift_02.png","textinput_qwerty_icon_shift_01.png"}, {"textinput_qwerty_icon_shift_02.png","textinput_qwerty_icon_shift_01.png","textinput_qwerty_icon_shift_01.png"}, {"textinput_qwerty_icon_shift_03.png","textinput_qwerty_icon_shift_02.png","textinput_qwerty_icon_shift_01.png"}},\r
+               _BGImg_ {{"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_function.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_function.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_function.png","textinput_qwerty_button_nml.png"}},\r
+               1,\r
+               _KeyVal_ {{""},{""},{""}},\r
+               _KeyEvt_ {{UD_MVK_SHIFT},{UD_MVK_SHIFT},{UD_MVK_SHIFT}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 4x2 */\r
+               1,\r
+               _Label_ {{"z"},{"Z"},{"Z"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"z"},{"Z"},{"Z"}},\r
+               _KeyEvt_ {{MVK_z},{MVK_Z},{MVK_Z}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 4x3 */\r
+               1,\r
+               _Label_ {{"x"},{"X"},{"X"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"x"},{"X"},{"X"}},\r
+               _KeyEvt_ {{MVK_x},{MVK_X},{MVK_X}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 4x4 */\r
+               1,\r
+               _Label_ {{"c"},{"C"},{"C"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"c"},{"C"},{"C"}},\r
+               _KeyEvt_ {{MVK_c},{MVK_C},{MVK_C}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+               {{"c","\xc3\xa7"},{"C","\xc3\x87"},{"C","\xc3\x87"}},\r
+               FALSE,\r
+               0,\r
+               MCF_MULTI_TOUCH_TYPE_EXCLUSIVE,\r
+               NOT_USED,\r
+               {{"c","..."},{"C","..."},{"C","..."}},\r
+       },\r
+       {\r
+               USED, /* 4x5 */\r
+               1,\r
+               _Label_ {{"v"},{"V"},{"V"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"v"},{"V"},{"V"}},\r
+               _KeyEvt_ {{MVK_v},{MVK_V},{MVK_V}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 4x6 */\r
+               1,\r
+               _Label_ {{"b"},{"B"},{"B"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"b"},{"B"},{"B"}},\r
+               _KeyEvt_ {{MVK_b},{MVK_B},{MVK_B}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 4x7 */\r
+               1,\r
+               _Label_ {{"n"},{"N"},{"N"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"n"},{"N"},{"N"}},\r
+               _KeyEvt_ {{MVK_n},{MVK_N},{MVK_N}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 4x8 */\r
+               1,\r
+               _Label_ {{"m"},{"M"},{"M"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"m"},{"M"},{"M"}},\r
+               _KeyEvt_ {{MVK_m},{MVK_M},{MVK_M}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 4x9 */\r
+               1,\r
+               _Label_ {{""},{""},{""}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"textinput_qwerty_icon_clear.png","textinput_qwerty_icon_clear.png"}, {"textinput_qwerty_icon_clear.png","textinput_qwerty_icon_clear.png"}, {"textinput_qwerty_icon_clear.png","textinput_qwerty_icon_clear.png"}},\r
+               _BGImg_ {{"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_function.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_function.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}},\r
+               1,\r
+               _KeyVal_ {{""},{""},{""}},\r
+               _KeyEvt_{{MVK_BackSpace},{MVK_BackSpace},{MVK_BackSpace}},\r
+               "",\r
+               0,\r
+               TRUE,\r
+       },\r
+       /* Fifth line*/\r
+\r
+       {\r
+               USED, /* 5x1 */\r
+               1,\r
+               _Label_{{"TU"},{"TU"},{"TU"}},\r
+               LABEL_PROPERTIES_QTY_BOTTOM_LINE_IMAGE_TYPE,\r
+               _LabelImg_{{"language_icon_port.png","language_icon_port.png"}, {"language_icon_port.png","language_icon_port.png"}, {"language_icon_port.png","language_icon_port.png"}},\r
+               _BGImg_{{"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_function.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_function.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_function.png","textinput_qwerty_button_nml.png"}},\r
+               1,\r
+               _KeyVal_{{""},{""},{""}},\r
+               _KeyEvt_ {{UD_MVK_LANG_CHANGE},{UD_MVK_LANG_CHANGE},{UD_MVK_LANG_CHANGE}},\r
+               "OptionWindow",\r
+               UD_MVK_OPTION_WINDOW,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 5x2 */\r
+               1,\r
+               _Label_{{""},{""},{""}},\r
+               LABEL_PROPERTIES_QTY_BOTTOM_LINE_TYPE,\r
+               _LabelImg_ {{"symbol_icon_port.png","symbol_icon_port.png"}, {"symbol_icon_port.png","symbol_icon_port.png"}, {"symbol_icon_port.png","symbol_icon_port.png"}},\r
+               _BGImg_{{"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_function.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_function.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_function.png","textinput_qwerty_button_nml.png"}},\r
+               1,\r
+               _KeyVal_{{""},{""},{""}},\r
+               _KeyEvt_ {{UD_MVK_SYM},{UD_MVK_SYM},{UD_MVK_SYM}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+\r
+       /* Default SubLayout */\r
+       // {\r
+       {\r
+               USED, /* 4x3 */\r
+               1,\r
+               _Label_{{""},{""},{""}},\r
+               LABEL_PROPERTIES_QTY_SPACE_KEY_TYPE,\r
+               _LabelImg_ {{"textinput_icon_space.png","textinput_icon_space_press.png"}, {"textinput_icon_space.png","textinput_icon_space_press.png"}, {"textinput_icon_space.png","textinput_icon_space_press.png"}},\r
+               _BGImg_{{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_{{""},{""},{""}},\r
+               _KeyEvt_{{MVK_space},{MVK_space},{MVK_space}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 4x4 */\r
+               3,\r
+        _Label_{{".",""}, {".",""}, {".",""}},\r
+               LABEL_PROPERTIES_QTY_BOTTOM_LINE_TYPE,\r
+        _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_{{"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png"}},\r
+               1,\r
+               _KeyVal_{{""},{""},{""}},\r
+        _KeyEvt_ {{MVK_period},{MVK_period},{MVK_period}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       // }\r
+       /* WithVoice SubLayout */\r
+       // {\r
+       {\r
+               USED, /* 4x3 */\r
+               1,\r
+               _Label_{{""},{""},{""}},\r
+               LABEL_PROPERTIES_QTY_BOTTOM_LINE_TYPE,\r
+               _LabelImg_ {{"camera_qwerty_kor-moa_port.png","camera_qwerty_kor-moa_port.png","camera_qwerty_kor-moa_port.png"}, {"camera_qwerty_kor-moa_port.png","camera_qwerty_kor-moa_port.png","camera_qwerty_kor-moa_port.png"}, {"camera_qwerty_kor-moa_port.png","camera_qwerty_kor-moa_port.png","camera_qwerty_kor-moa_port.png"}},\r
+               _BGImg_{{"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_function.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_function.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_function.png"}},\r
+               1,\r
+               _KeyVal_{{""},{""},{""}},\r
+               _KeyEvt_ {{0},{0},{0}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 4x4 */\r
+               1,\r
+               _Label_{{""},{""},{""}},\r
+               LABEL_PROPERTIES_QTY_SPACE_KEY_TYPE,\r
+               _LabelImg_ {{"textinput_icon_space.png","textinput_icon_space_press.png"}, {"textinput_icon_space.png","textinput_icon_space_press.png"}, {"textinput_icon_space.png","textinput_icon_space_press.png"}},\r
+               _BGImg_{{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_{{""},{""},{""}},\r
+               _KeyEvt_{{MVK_space},{MVK_space},{MVK_space}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 4x5 */\r
+               3,\r
+        _Label_{{".",""}, {".",""}, {".",""}},\r
+               LABEL_PROPERTIES_QTY_BOTTOM_LINE_TYPE,\r
+        _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_{{"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png"}},\r
+               1,\r
+               _KeyVal_{{""},{""},{""}},\r
+        _KeyEvt_ {{MVK_period},{MVK_period},{MVK_period}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       // }\r
+       /* URL SubLayout */\r
+       // {\r
+       {\r
+               USED, /* 4x3 */\r
+               1,\r
+               _Label_{{""},{""},{""}},\r
+               LABEL_PROPERTIES_QTY_SPACE_KEY_TYPE,\r
+               _LabelImg_ {{"textinput_icon_space.png","textinput_icon_space_press.png"}, {"textinput_icon_space.png","textinput_icon_space_press.png"}, {"textinput_icon_space.png","textinput_icon_space_press.png"}},\r
+               _BGImg_{{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_{{""},{""},{""}},\r
+               _KeyEvt_{{MVK_space},{MVK_space},{MVK_space}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 4x4 */\r
+               1,\r
+               _Label_{{"/"},{"/"},{"/"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_{{" "," "}, {" "," "}, {" "," "}},\r
+               _BGImg_{{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}},\r
+               1,\r
+               _KeyVal_{{"/"},{"/"},{"/"}},\r
+               _KeyEvt_ {{MVK_slash},{MVK_slash},{MVK_slash}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 4x5 */\r
+               1,\r
+               _Label_{{"www."},{"www."},{"www."}},\r
+               LABEL_PROPERTIES_QTY_WWW_TYPE,\r
+               _LabelImg_{{" "," "}, {" "," "}, {" "," "}},\r
+               _BGImg_{{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}},\r
+               1,\r
+               _KeyVal_{{"www."},{"www."},{"www."}},\r
+               _KeyEvt_ {{0},{0},{0}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 4x6 */\r
+               3,\r
+               _Label_{{".",""}, {".",""}, {".",""}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_{{" "," "}, {" "," "}, {" "," "}},\r
+               _BGImg_{{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}},\r
+               1,\r
+               _KeyVal_{{"."},{"."},{"."}},\r
+               _KeyEvt_ {{MVK_period},{MVK_period},{MVK_period}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       // }\r
+       /* Email SubLayout */\r
+       // {\r
+       {\r
+               USED, /* 4x3 */\r
+               1,\r
+               _Label_{{""},{""},{""}},\r
+               LABEL_PROPERTIES_QTY_SPACE_KEY_TYPE,\r
+               _LabelImg_ {{"textinput_icon_space.png","textinput_icon_space_press.png"}, {"textinput_icon_space.png","textinput_icon_space_press.png"}, {"textinput_icon_space.png","textinput_icon_space_press.png"}},\r
+               _BGImg_{{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_{{""},{""},{""}},\r
+               _KeyEvt_{{MVK_space},{MVK_space},{MVK_space}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 4x4 */\r
+               1,\r
+               _Label_{{"@"},{"@"},{"@"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_{{" "," "}, {" "," "}, {" "," "}},\r
+               _BGImg_{{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}},\r
+               1,\r
+               _KeyVal_{{"@"},{"@"},{"@"}},\r
+               _KeyEvt_ {{MVK_at},{MVK_at},{MVK_at}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 4x5 */\r
+               1,\r
+               _Label_{{".com"},{".com"},{".com"}},\r
+               LABEL_PROPERTIES_QTY_WWW_TYPE,\r
+               _LabelImg_{{" "," "}, {" "," "}, {" "," "}},\r
+               _BGImg_{{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}},\r
+               1,\r
+               _KeyVal_{{".com"},{".com"},{".com"}},\r
+               _KeyEvt_ {{0},{0},{0}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 4x6 */\r
+               3,\r
+               _Label_{{".",""}, {".",""}, {".",""}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_{{" "," "}, {" "," "}, {" "," "}},\r
+               _BGImg_{{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}},\r
+               1,\r
+               _KeyVal_{{"."},{"."},{"."}},\r
+               _KeyEvt_ {{MVK_period},{MVK_period},{MVK_period}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       // }\r
+\r
+       {\r
+               USED, /* 4x5 */\r
+               1,\r
+               _Label_ {{""},{""},{""}},\r
+               LABEL_PROPERTIES_QTY_BOTTOM_LINE_TYPE,\r
+               _LabelImg_ {{"textinput_qwerty_icon_enter.png","textinput_qwerty_icon_enter.png","textinput_qwerty_icon_enter_disabled.png"}, {"textinput_qwerty_icon_enter.png","textinput_qwerty_icon_enter.png","textinput_qwerty_icon_enter_disabled.png"}, {"textinput_qwerty_icon_enter.png","textinput_qwerty_icon_enter.png","textinput_qwerty_icon_enter_disabled.png"}},\r
+               _BGImg_ {{"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_function.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_function.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}},\r
+               1,\r
+               _KeyVal_ {{""},{""},{""}},\r
+               _KeyEvt_{{MVK_Return},{MVK_Return},{MVK_Return}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+\r
+       {NOT_USED,},\r
+}\r
+#endif\r
+\r
+\r
diff --git a/res/mcfresource-port-qty-url.h b/res/mcfresource-port-qty-url.h
new file mode 100755 (executable)
index 0000000..65a83ae
--- /dev/null
@@ -0,0 +1,582 @@
+/*
+ * Copyright 2012  Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.tizenopensource.org/license
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+\r
+#ifdef KEY_CONFIGURE_PHASE\r
+{\r
+\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, NOT_USED},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, NOT_USED},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, NOT_USED},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, NOT_USED},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, NOT_USED},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, NOT_USED},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, NOT_USED},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, NOT_USED},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, NOT_USED},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, NOT_USED},\r
+\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CONTROL, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CHAR, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CONTROL, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+\r
+\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_MODECHANGE, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_MODECHANGE, POPUP_TYPE_BTN_LONGPRESS_POPUP_ONCE, FALSE, FALSE, TRUE, {INPUT_MODE_EMOTICON_POPUP, NOT_USED, NOT_USED, NOT_USED, NOT_USED, NOT_USED, NOT_USED}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_BTN_LONGPRESS_POPUP_ONCE, TRUE, TRUE, TRUE, {INPUT_MODE_URL_POPUP, NOT_USED, NOT_USED, NOT_USED, NOT_USED, NOT_USED, NOT_USED}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_UNICODE, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+       {USED, NOT_USED, BUTTON_TYPE_NORMAL, KEY_TYPE_CONTROL, POPUP_TYPE_NONE, TRUE, TRUE, TRUE, {NOT_USED,}},\r
+\r
+       {NOT_USED,},\r
+}\r
+#endif\r
+\r
+#ifdef KEY_PROPERTIES_PHASE\r
+{\r
+       /* fValid, labelCnt, label, labelPropId, imgPath, keyValueCnt, keyValue, keyEvent, longKeyValue, longKeyEvent, userLabel,  userKeyValue,  userKeyEvent, */\r
+       /* Second Line */\r
+       {\r
+               USED, /* 2x1 */\r
+               2,\r
+               _Label_ {{"q","1"},{"Q","1"},{"Q","1"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"q"},{"Q"},{"Q"}},\r
+               _KeyEvt_ {{MVK_q},{MVK_Q},{MVK_Q}},\r
+               "1",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 2x2 */\r
+               2,\r
+               _Label_ {{"w","2"},{"W","2"},{"W","2"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"w"},{"W"},{"W"}},\r
+               _KeyEvt_ {{MVK_w},{MVK_W},{MVK_W}},\r
+               "2",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 2x3 */\r
+               2,\r
+               _Label_ {{"e","3"},{"E","3"},{"E","3"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"e"},{"E"},{"E"}},\r
+               _KeyEvt_ {{MVK_e},{MVK_E},{MVK_E}},\r
+               "3",\r
+               0,\r
+               FALSE,\r
+               {{"e","\xc3\xa9","\xc3\xa8","\xc3\xaa","\xc3\xab","3"},{"E","\xc3\x89","\xc3\x88","\xc3\x8a","\xc3\x8b","3"},{"E","\xc3\x89","\xc3\x88","\xc3\x8a","\xc3\x8b","3"}}\r
+       },\r
+       {\r
+               USED, /* 2x4 */\r
+               2,\r
+               _Label_ {{"r","4"},{"R","4"},{"R","4"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"r"},{"R"},{"R"}},\r
+               _KeyEvt_ {{MVK_r},{MVK_R},{MVK_R}},\r
+               "4",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 2x5 */\r
+               2,\r
+               _Label_ {{"t","5"},{"T","5"},{"T","5"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"t"},{"T"},{"T"}},\r
+               _KeyEvt_ {{MVK_t},{MVK_T},{MVK_T}},\r
+               "5",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 2x6 */\r
+               2,\r
+               _Label_ {{"y","6"},{"Y","6"},{"Y","6"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"y"},{"Y"},{"Y"}},\r
+               _KeyEvt_ {{MVK_y},{MVK_Y},{MVK_Y}},\r
+               "6",\r
+               0,\r
+               FALSE,\r
+               {{"y","\xc3\xbf","6"},{"Y","\xc5\xb8","6"},{"Y","\xc5\xb8","6"}}\r
+       },\r
+       {\r
+               USED, /* 2x7 */\r
+               2,\r
+               _Label_ {{"u","7"},{"U","7"},{"U","7"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"u"},{"U"},{"U"}},\r
+               _KeyEvt_ {{MVK_u},{MVK_U},{MVK_U}},\r
+               "7",\r
+               0,\r
+               FALSE,\r
+               {{"u","\xc3\xb9","\xc3\xbb","7"},{"U","\xc3\x99","\xc3\x9b","7"},{"U","\xc3\x99","\xc3\x9b","7"}}\r
+       },\r
+       {\r
+               USED, /* 2x8 */\r
+               2,\r
+               _Label_ {{"i","8"},{"I","8"},{"I","8"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"i"},{"I"},{"I"}},\r
+               _KeyEvt_ {{MVK_i},{MVK_I},{MVK_I}},\r
+               "8",\r
+               0,\r
+               FALSE,\r
+               {{"i","\xc3\xae","\xc3\xaf","8"},{"I","\xc3\x8e","\xc3\x8f","8"},{"I","\xc3\x8e","\xc3\x8f","8"}}\r
+       },\r
+       {\r
+               USED, /* 2x9 */\r
+               2,\r
+               _Label_ {{"o","9"},{"O","9"},{"O","9"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"o"},{"O"},{"O"}},\r
+               _KeyEvt_ {{MVK_o},{MVK_O},{MVK_O}},\r
+               "9",\r
+               0,\r
+               FALSE,\r
+               {{"o","\xc3\xb4","\xc5\x93","9"},{"O","\xc3\x94","\xc5\x92","9"},{"O","\xc3\x94","\xc5\x92","9"}}\r
+       },\r
+       {\r
+               USED, /* 2x10 */\r
+               2,\r
+               _Label_ {{"p","0"},{"P","0"},{"P","0"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"p"},{"P"},{"P"}},\r
+               _KeyEvt_ {{MVK_p},{MVK_P},{MVK_P}},\r
+               "0",\r
+               0,\r
+               FALSE,\r
+       },\r
+\r
+\r
+       /* Third Line */\r
+       {\r
+               USED, /* 3x1 */\r
+               2,\r
+               _Label_ {{"a","-"},{"A","-"},{"A","-"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"a"},{"A"},{"A"}},\r
+               _KeyEvt_ {{MVK_a},{MVK_A},{MVK_A}},\r
+               "-",\r
+               0,\r
+               FALSE,\r
+               {{"a","\xc3\xa0","\xc3\xa2","\xc3\xa6","-"},{"A","\xc3\x80","\xc3\x82","\xc3\x86","-"},{"A","\xc3\x80","\xc3\x82","\xc3\x86","-"}}\r
+       },\r
+       {\r
+               USED, /* 3x2 */\r
+               2,\r
+               _Label_ {{"s","@"},{"S","@"},{"S","@"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"s"},{"S"},{"S"}},\r
+               _KeyEvt_ {{MVK_s},{MVK_S},{MVK_S}},\r
+               "@",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 3x3 */\r
+               2,\r
+               _Label_ {{"d","*"},{"D","*"},{"D","*"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"d"},{"D"},{"D"}},\r
+               _KeyEvt_ {{MVK_d},{MVK_D},{MVK_D}},\r
+               "*",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 3x4 */\r
+               2,\r
+               _Label_ {{"f","^"},{"F","^"},{"F","^"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"f"},{"F"},{"F"}},\r
+               _KeyEvt_ {{MVK_f},{MVK_F},{MVK_F}},\r
+               "^",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 3x5 */\r
+               2,\r
+               _Label_ {{"g",":"},{"G",":"},{"G",":"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"g"},{"G"},{"G"}},\r
+               _KeyEvt_ {{MVK_g},{MVK_G},{MVK_G}},\r
+               ":",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 3x6 */\r
+               2,\r
+               _Label_ {{"h",";"},{"H",";"},{"H",";"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"h"},{"H"},{"H"}},\r
+               _KeyEvt_ {{MVK_h},{MVK_H},{MVK_H}},\r
+               ";",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 3x7 */\r
+               2,\r
+               _Label_ {{"j","("},{"J","("},{"J","("}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"j"},{"J"},{"J"}},\r
+               _KeyEvt_ {{MVK_j},{MVK_J},{MVK_J}},\r
+               "(",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 3x8 */\r
+               2,\r
+               _Label_ {{"k",")"},{"K",")"},{"K",")"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"k"},{"K"},{"K"}},\r
+               _KeyEvt_ {{MVK_k},{MVK_K},{MVK_K}},\r
+               ")",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 3x9 */\r
+               2,\r
+               _Label_ {{"l","~"},{"L","~"},{"L","~"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"l"},{"L"},{"L"}},\r
+               _KeyEvt_ {{MVK_l},{MVK_L},{MVK_L}},\r
+               "~",\r
+               0,\r
+               FALSE,\r
+       },\r
+\r
+       /* Fourth Line */\r
+       {\r
+               USED, /* 4x1 */\r
+               1,\r
+               _Label_ {{""},{""},{""}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"textinput_qwerty_icon_shift_01.png","textinput_qwerty_icon_shift_02.png","textinput_qwerty_icon_shift_01.png"}, {"textinput_qwerty_icon_shift_02.png","textinput_qwerty_icon_shift_01.png","textinput_qwerty_icon_shift_01.png"}, {"textinput_qwerty_icon_shift_03.png","textinput_qwerty_icon_shift_02.png","textinput_qwerty_icon_shift_01.png"}},\r
+               _BGImg_ {{"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_function.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_function.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_function.png","textinput_qwerty_button_nml.png"}},\r
+               1,\r
+               _KeyVal_ {{""},{""},{""}},\r
+               _KeyEvt_ {{UD_MVK_SHIFT},{UD_MVK_SHIFT},{UD_MVK_SHIFT}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 4x2 */\r
+               2,\r
+               _Label_ {{"z","/"},{"Z","/"},{"Z","/"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"z"},{"Z"},{"Z"}},\r
+               _KeyEvt_ {{MVK_z},{MVK_Z},{MVK_Z}},\r
+               "/",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 4x3 */\r
+               2,\r
+               _Label_ {{"x","'"},{"X","'"},{"X","'"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"x"},{"X"},{"X"}},\r
+               _KeyEvt_ {{MVK_x},{MVK_X},{MVK_X}},\r
+               "'",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 4x4 */\r
+               2,\r
+               _Label_ {{"c","\""},{"C","\""},{"C","\""}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"c"},{"C"},{"C"}},\r
+               _KeyEvt_ {{MVK_c},{MVK_C},{MVK_C}},\r
+               "\"",\r
+               0,\r
+               FALSE,\r
+               {{"c","\xc3\xa7","'"},{"C","\xc3\x87","'"},{"C","\xc3\x87","'"}}\r
+       },\r
+       {\r
+               USED, /* 4x5 */\r
+               2,\r
+               _Label_ {{"v","."},{"V","."},{"V","."}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"v"},{"V"},{"V"}},\r
+               _KeyEvt_ {{MVK_v},{MVK_V},{MVK_V}},\r
+               ".",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 4x6 */\r
+               2,\r
+               _Label_ {{"b",","},{"B",","},{"B",","}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"b"},{"B"},{"B"}},\r
+               _KeyEvt_ {{MVK_b},{MVK_B},{MVK_B}},\r
+               ",",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 4x7 */\r
+               2,\r
+               _Label_ {{"n","?"},{"N","?"},{"N","?"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"n"},{"N"},{"N"}},\r
+               _KeyEvt_ {{MVK_n},{MVK_N},{MVK_N}},\r
+               "?",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 4x8 */\r
+               2,\r
+               _Label_ {{"m","!"},{"M","!"},{"M","!"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"",""}, {"",""}, {"",""}},\r
+               _BGImg_ {{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_ {{"m"},{"M"},{"M"}},\r
+               _KeyEvt_ {{MVK_m},{MVK_M},{MVK_M}},\r
+               "!",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 4x9 */\r
+               1,\r
+               _Label_ {{""},{""},{""}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_ {{"textinput_qwerty_icon_clear.png","textinput_qwerty_icon_clear.png"}, {"textinput_qwerty_icon_clear.png","textinput_qwerty_icon_clear.png"}, {"textinput_qwerty_icon_clear.png","textinput_qwerty_icon_clear.png"}},\r
+               _BGImg_ {{"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_function.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_function.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}},\r
+               1,\r
+               _KeyVal_ {{""},{""},{""}},\r
+               _KeyEvt_{{MVK_BackSpace},{MVK_BackSpace},{MVK_BackSpace}},\r
+               "",\r
+               0,\r
+               TRUE,\r
+       },\r
+       /* Fifth line*/\r
+\r
+       {\r
+               USED, /* 5x1 */\r
+               1,\r
+               _Label_{{""},{""},{""}},\r
+               LABEL_PROPERTIES_QTY_BOTTOM_LINE_TYPE,\r
+               _LabelImg_{{"language_icon_port.png","language_icon_port.png"}, {"language_icon_port.png","language_icon_port.png"}, {"language_icon_port.png","language_icon_port.png"}},\r
+               _BGImg_{{"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_function.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_function.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_function.png","textinput_qwerty_button_nml.png"}},\r
+               1,\r
+               _KeyVal_{{""},{""},{""}},\r
+               _KeyEvt_ {{0},{0},{0}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 5x2 */\r
+               1,\r
+               _Label_{{""},{""},{""}},\r
+               LABEL_PROPERTIES_QTY_BOTTOM_LINE_TYPE,\r
+               _LabelImg_ {{"symbol_icon_port.png","symbol_icon_port.png"}, {"symbol_icon_port.png","symbol_icon_port.png"}, {"symbol_icon_port.png","symbol_icon_port.png"}},\r
+               _BGImg_{{"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_function.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_function.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_function.png","textinput_qwerty_button_nml.png"}},\r
+               1,\r
+               _KeyVal_{{""},{""},{""}},\r
+               _KeyEvt_ {{UD_MVK_SYM},{UD_MVK_SYM},{UD_MVK_SYM}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /*5x3 */\r
+               1,\r
+               _Label_{{"/"},{"/"},{"/"}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_{{" "," "}, {" "," "}, {" "," "}},\r
+               _BGImg_{{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_{{"/"},{"/"},{"/"}},\r
+               _KeyEvt_ {{0},{0},{0}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /*5x3 */\r
+               1,\r
+               _Label_{{"www."},{"www."},{"www."}},\r
+               LABEL_PROPERTIES_QTY_WWW_TYPE,\r
+               _LabelImg_{{" "," "}, {" "," "}, {" "," "}},\r
+               _BGImg_{{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_{{"www."},{"www."},{"www."}},\r
+               _KeyEvt_ {{0},{0},{0}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /*5x3 */\r
+               1,\r
+               _Label_{{".com"},{".com"},{".com"}},\r
+               LABEL_PROPERTIES_QTY_WWW_TYPE,\r
+               _LabelImg_{{" "," "}, {" "," "}, {" "," "}},\r
+               _BGImg_{{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_{{".com"},{".com"},{".com"}},\r
+               _KeyEvt_ {{0},{0},{0}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+       {\r
+               USED, /* 5x4 */\r
+               3,\r
+               _Label_{{".",""}, {".",""}, {".",""}},\r
+               LABEL_PROPERTIES_QTY_DEFAULT_TYPE,\r
+               _LabelImg_{{" "," "}, {" "," "}, {" "," "}},\r
+               _BGImg_{{"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}, {"textinput_qwerty_button_nml.png","textinput_qwerty_button_capslock_press.png"}},\r
+               1,\r
+               _KeyVal_{{"."},{"."},{"."}},\r
+               _KeyEvt_ {{0},{0},{0}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+               {{".",",","?","!"},{".",",","?","!"},{".",",","?","!"}}\r
+       },\r
+\r
+       {\r
+               USED, /* 5x5 */\r
+               1,\r
+               _Label_ {{""},{""},{""}},\r
+               LABEL_PROPERTIES_QTY_BOTTOM_LINE_TYPE,\r
+               _LabelImg_ {{"textinput_qwerty_icon_enter.png","textinput_qwerty_icon_enter.png","textinput_qwerty_icon_enter_disabled.png"}, {"textinput_qwerty_icon_enter.png","textinput_qwerty_icon_enter.png","textinput_qwerty_icon_enter_disabled.png"}, {"textinput_qwerty_icon_enter.png","textinput_qwerty_icon_enter.png","textinput_qwerty_icon_enter_disabled.png"}},\r
+               _BGImg_ {{"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_function.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_function.png"}, {"textinput_qwerty_button_function.png","textinput_qwerty_button_press.png","textinput_qwerty_button_nml.png"}},\r
+               1,\r
+               _KeyVal_ {{""},{""},{""}},\r
+               _KeyEvt_{{MVK_Return},{MVK_Return},{MVK_Return}},\r
+               "",\r
+               0,\r
+               FALSE,\r
+       },\r
+\r
+       {NOT_USED,},\r
+}\r
+#endif\r
+\r
+\r
+\r
diff --git a/res/mcfresource.cpp b/res/mcfresource.cpp
new file mode 100755 (executable)
index 0000000..fd3a60e
--- /dev/null
@@ -0,0 +1,252 @@
+/*
+ * Copyright 2012  Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.tizenopensource.org/license
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+
+#include <stdio.h>
+#include "mcftypes.h"
+#include "mcfconfig.h"
+#include "mcfstructs.h"
+#include "mcfresource.h"
+
+McfLayout mcf_layout[MAX_LAYOUT] = {
+    /* base layout */
+    {USED, LAYOUT_STYLE_BASE, "PORTRAIT_4X4_DEFAULT", 0, 0, 480, 360,
+    {PORTRAIT_DEFAULT_BG_IMG, NULL}, FALSE, FALSE, TRUE, FALSE, NOT_USED, MCFDISPLAY_PORTRAIT, FALSE},
+
+    {USED, LAYOUT_STYLE_BASE, "PORTRAIT_4X4_SYM", 0, 0, 480, 360,
+    {PORTRAIT_DEFAULT_BG_IMG, NULL}, FALSE, FALSE, TRUE, FALSE, NOT_USED, MCFDISPLAY_PORTRAIT, FALSE},
+
+    {USED, LAYOUT_STYLE_BASE, "PORTRAIT_4X4_IPv6_123", 0, 0, 480, 360,
+    {PORTRAIT_DEFAULT_BG_IMG, NULL}, FALSE, FALSE, TRUE, FALSE, NOT_USED, MCFDISPLAY_PORTRAIT, FALSE},
+
+    {USED, LAYOUT_STYLE_BASE, "PORTRAIT_4X4_IPv6_ABC", 0, 0, 480, 360,
+    {PORTRAIT_DEFAULT_BG_IMG, NULL}, FALSE, FALSE, TRUE, FALSE, NOT_USED, MCFDISPLAY_PORTRAIT, FALSE},
+
+    {USED, LAYOUT_STYLE_BASE, "PORTRAIT_4X4_NUMONLY", 0, 0, 480, 360,
+    {PORTRAIT_DEFAULT_BG_IMG, NULL}, FALSE, FALSE, TRUE, FALSE, NOT_USED, MCFDISPLAY_PORTRAIT, FALSE},
+
+    {USED, LAYOUT_STYLE_BASE, "PORTRAIT_4X4_MONTH", 0, 0, 480, 360,
+    {PORTRAIT_DEFAULT_BG_IMG, NULL}, FALSE, FALSE, TRUE, FALSE, NOT_USED, MCFDISPLAY_PORTRAIT, FALSE},
+
+    {USED, LAYOUT_STYLE_BASE, "PORTRAIT_QTY_DEFAULT", 0, 0, 480, 360,
+    {PORTRAIT_DEFAULT_BG_IMG, NULL}, FALSE, TRUE, TRUE, FALSE, NOT_USED, MCFDISPLAY_PORTRAIT, FALSE},
+
+    {USED, LAYOUT_STYLE_BASE, "PORTRAIT_AZT_DEFAULT", 0, 0, 480, 360,
+    {PORTRAIT_DEFAULT_BG_IMG, NULL}, FALSE, TRUE, TRUE, FALSE, NOT_USED, MCFDISPLAY_PORTRAIT, FALSE}, 
+
+    {USED, LAYOUT_STYLE_BASE, "PORTRAIT_QTY_URL", 0, 0, 480, 360,
+    {PORTRAIT_DEFAULT_BG_IMG, NULL}, FALSE, TRUE, TRUE, FALSE, NOT_USED, MCFDISPLAY_PORTRAIT, FALSE},
+
+    {USED, LAYOUT_STYLE_BASE, "PORTRAIT_QTY_EMAIL", 0, 0, 480, 360,
+    {PORTRAIT_DEFAULT_BG_IMG, NULL}, FALSE, TRUE, TRUE, FALSE, NOT_USED, MCFDISPLAY_PORTRAIT, FALSE},
+
+    {USED, LAYOUT_STYLE_BASE, "PORTRAIT_QTY_RUSSIAN", 0, 0, 480, 360,
+    {PORTRAIT_DEFAULT_BG_IMG, NULL}, FALSE, TRUE, TRUE, FALSE, NOT_USED, MCFDISPLAY_PORTRAIT, FALSE},
+
+    {USED, LAYOUT_STYLE_BASE, "LANDSCAPE_QTY_RUSSIAN", 0, 0, 800, 288,
+    {LANDSCAPE_DEFAULT_BG_IMG, NULL}, FALSE, TRUE, TRUE, FALSE, NOT_USED, MCFDISPLAY_LANDSCAPE, FALSE},
+
+    {USED, LAYOUT_STYLE_BASE, "LANDSCAPE_QTY_DEFAULT", 0, 0, 800, 288,
+    {LANDSCAPE_DEFAULT_BG_IMG, NULL}, FALSE, TRUE, TRUE, FALSE, NOT_USED, MCFDISPLAY_LANDSCAPE, FALSE},        
+
+    {USED, LAYOUT_STYLE_BASE, "LANDSCAPE_AZT_FRENCH", 0, 0, 800, 288,
+    {LANDSCAPE_DEFAULT_BG_IMG, NULL}, FALSE, TRUE, TRUE, FALSE, NOT_USED, MCFDISPLAY_LANDSCAPE, FALSE},        
+
+    {USED, LAYOUT_STYLE_BASE, "LANDSCAPE_QTY_URL", 0, 0, 800, 288,
+    {LANDSCAPE_DEFAULT_BG_IMG, NULL}, FALSE, TRUE, TRUE, FALSE, NOT_USED, MCFDISPLAY_LANDSCAPE, FALSE},                
+
+    {USED, LAYOUT_STYLE_BASE, "LANDSCAPE_QTY_EMAIL", 0, 0, 800, 288,
+    {LANDSCAPE_DEFAULT_BG_IMG, NULL}, FALSE, TRUE, TRUE, FALSE, NOT_USED, MCFDISPLAY_LANDSCAPE, FALSE},                
+
+    {USED, LAYOUT_STYLE_BASE, "LANDSCAPE_4X4_NUM", 0, 0, 800, 288,
+    {LANDSCAPE_DEFAULT_BG_IMG, NULL}, FALSE, FALSE, TRUE, FALSE, NOT_USED, MCFDISPLAY_LANDSCAPE, FALSE},               
+
+    {USED, LAYOUT_STYLE_BASE, "LANDSCAPE_4X4_PASSWD", 0, 0, 800, 288,
+    {LANDSCAPE_DEFAULT_BG_IMG, NULL}, FALSE, FALSE, TRUE, FALSE, NOT_USED, MCFDISPLAY_LANDSCAPE, FALSE},
+
+    {USED, LAYOUT_STYLE_BASE, "LANDSCAPE_4X4_IPv6_123", 0, 0, 800, 288,
+    {LANDSCAPE_DEFAULT_BG_IMG, NULL}, FALSE, FALSE, TRUE, FALSE, NOT_USED, MCFDISPLAY_LANDSCAPE, FALSE},
+
+    {USED, LAYOUT_STYLE_BASE, "LANDSCAPE_4X4_IPv6_ABC", 0, 0, 800, 288,
+    {LANDSCAPE_DEFAULT_BG_IMG, NULL}, FALSE, FALSE, TRUE, FALSE, NOT_USED, MCFDISPLAY_LANDSCAPE, FALSE},
+
+    {USED, LAYOUT_STYLE_BASE, "LANDSCAPE_4X4_NUMONLY", 0, 0, 800, 288,
+    {LANDSCAPE_DEFAULT_BG_IMG, NULL}, FALSE, FALSE, TRUE, FALSE, NOT_USED, MCFDISPLAY_LANDSCAPE, FALSE},
+
+    {USED, LAYOUT_STYLE_POPUP, "POPUP_4X4_DEFAULT", 0, 0, 126, 410,
+    {LANDSCAPE_DEFAULT_BG_IMG, NULL}, FALSE, FALSE, TRUE, FALSE, NOT_USED, MCFDISPLAY_PORTRAIT, FALSE},
+
+    {USED, LAYOUT_STYLE_POPUP, "POPUP_PUNCTUATION", 0, 0, 358, 268,
+    {POPUP_BG_IMG_1, NULL}, FALSE, FALSE, TRUE, FALSE, NOT_USED, MCFDISPLAY_LANDSCAPE, FALSE},
+
+    {USED, LAYOUT_STYLE_POPUP, "POPUP_EMOTICON", 0, 0, 358, 188,
+    {POPUP_BG_IMG_2, NULL}, FALSE, FALSE, TRUE, FALSE, NOT_USED, MCFDISPLAY_LANDSCAPE, FALSE},
+
+    {USED, LAYOUT_STYLE_POPUP, "POPUP_URL", 0, 0, 290, 252,
+    {POPUP_BG_IMG_3, NULL}, FALSE, FALSE, TRUE, FALSE, NOT_USED, MCFDISPLAY_LANDSCAPE, FALSE},
+};
+
+McfInputModeConfigure mcf_input_mode_configure[MAX_INPUT_MODE] = {
+    /* name, fUseScreenRotation, layoutId[] */
+    /* base input mode */
+    {"ENGLISH_4X4",                    FALSE, {LYT_PORTRAIT_4X4_DEFAULT,               LYT_LANDSCAPE_QTY_DEFAULT}},
+    {"NUM_4X4",                                FALSE, {LYT_PORTRAIT_4X4_DEFAULT,               LYT_LANDSCAPE_4X4_NUM}},
+    {"SYM_4X4_1",                      FALSE, {LYT_PORTRAIT_4X4_SYM,                   LYT_PORTRAIT_4X4_SYM}},
+    {"SYM_4X4_2",                      FALSE, {LYT_PORTRAIT_4X4_SYM,                   LYT_PORTRAIT_4X4_SYM}},
+    {"SYM_4X4_3",                      FALSE, {LYT_PORTRAIT_4X4_SYM,                   LYT_PORTRAIT_4X4_SYM}},
+    {"SYM_4X4_4",                      FALSE, {LYT_PORTRAIT_4X4_SYM,                   LYT_PORTRAIT_4X4_SYM}},
+    {"SYM_4X4_5",                      FALSE, {LYT_PORTRAIT_4X4_SYM,                   LYT_PORTRAIT_4X4_SYM}},
+    {"PHONE_4X4",                      FALSE, {LYT_PORTRAIT_4X4_DEFAULT,               LYT_LANDSCAPE_4X4_NUM}},
+    {"URL_4X4",                                FALSE, {LYT_PORTRAIT_4X4_DEFAULT,               LYT_LANDSCAPE_QTY_URL}},
+    {"EMAIL_4X4",                      FALSE, {LYT_PORTRAIT_4X4_DEFAULT,               LYT_LANDSCAPE_QTY_EMAIL}},
+    {"PASSWD_4X4",                     FALSE, {LYT_PORTRAIT_4X4_DEFAULT,               LYT_LANDSCAPE_4X4_PASSWD}},
+    {"IPv6_4X4_123",           FALSE, {LYT_PORTRAIT_4X4_IPv6_123,              LYT_LANDSCAPE_4X4_IPv6_123}},
+    {"IPv6_4X4_ABC",           FALSE, {LYT_PORTRAIT_4X4_IPv6_ABC,              LYT_LANDSCAPE_4X4_IPv6_ABC}},
+    {"NUMONLY_4X4",                    FALSE, {LYT_PORTRAIT_4X4_NUMONLY,               LYT_LANDSCAPE_4X4_NUMONLY}},
+    {"MONTH_4X4",                      FALSE, {LYT_PORTRAIT_4X4_MONTH,                 LYT_LANDSCAPE_4X4_NUM}},
+
+    {"FRENCH_4X4",                     FALSE, {LYT_PORTRAIT_4X4_DEFAULT,               LYT_LANDSCAPE_AZT_FRENCH}},
+    {"SPANISH_4X4",                    FALSE, {LYT_PORTRAIT_4X4_DEFAULT,               LYT_LANDSCAPE_QTY_DEFAULT}},
+    {"ITALIAN_4X4",                    FALSE, {LYT_PORTRAIT_4X4_DEFAULT,               LYT_LANDSCAPE_QTY_DEFAULT}},
+    {"DUTCH_4X4",                      FALSE, {LYT_PORTRAIT_4X4_DEFAULT,               LYT_LANDSCAPE_QTY_DEFAULT}},
+    {"PORTUGUESE_4X4",         FALSE, {LYT_PORTRAIT_4X4_DEFAULT,               LYT_LANDSCAPE_QTY_DEFAULT}},
+    {"GERMAN_4X4",                     FALSE, {LYT_PORTRAIT_4X4_DEFAULT,               LYT_LANDSCAPE_QTY_DEFAULT}},
+
+    {"TURKISH_4X4",                    FALSE, {LYT_PORTRAIT_4X4_DEFAULT,               LYT_LANDSCAPE_QTY_DEFAULT}},
+    {"GREEK_4X4",                      FALSE, {LYT_PORTRAIT_4X4_DEFAULT,               LYT_LANDSCAPE_QTY_DEFAULT}},
+    {"RUSSIAN_4X4",                    FALSE, {LYT_PORTRAIT_4X4_DEFAULT,               LYT_LANDSCAPE_QTY_RUSSIAN}},
+
+    {"ENGLISH_QTY",                    FALSE, {LYT_PORTRAIT_QTY_DEFAULT,               LYT_LANDSCAPE_QTY_DEFAULT}},
+    {"URL_QTY",                                FALSE, {LYT_PORTRAIT_QTY_URL,                   LYT_LANDSCAPE_QTY_URL}},
+    {"EMAIL_QTY",                      FALSE, {LYT_PORTRAIT_QTY_EMAIL,                 LYT_LANDSCAPE_QTY_EMAIL}},
+    {"SYM_QTY_1",                      FALSE, {LYT_PORTRAIT_QTY_DEFAULT,               LYT_LANDSCAPE_QTY_DEFAULT}},
+    {"SYM_QTY_2",                      FALSE, {LYT_PORTRAIT_QTY_DEFAULT,               LYT_LANDSCAPE_QTY_DEFAULT}},
+    {"SYM_QTY_3",                      FALSE, {LYT_PORTRAIT_QTY_DEFAULT,               LYT_LANDSCAPE_QTY_DEFAULT}},
+    {"SYM_QTY_4",                      FALSE, {LYT_PORTRAIT_QTY_DEFAULT,               LYT_LANDSCAPE_QTY_DEFAULT}},
+
+    {"FRENCH_QTY",                     FALSE, {LYT_PORTRAIT_AZT_DEFAULT,               LYT_LANDSCAPE_AZT_FRENCH}},
+    {"SPANISH_QTY",                    FALSE, {LYT_PORTRAIT_QTY_DEFAULT,               LYT_LANDSCAPE_QTY_DEFAULT}},
+    {"ITALIAN_QTY",                    FALSE, {LYT_PORTRAIT_QTY_DEFAULT,               LYT_LANDSCAPE_QTY_DEFAULT}},
+    {"DUTCH_QTY",                      FALSE, {LYT_PORTRAIT_QTY_DEFAULT,               LYT_LANDSCAPE_QTY_DEFAULT}},
+    {"PORTUGUESE_QTY",         FALSE, {LYT_PORTRAIT_QTY_DEFAULT,               LYT_LANDSCAPE_QTY_DEFAULT}},
+    {"GERMAN_QTY",                     FALSE, {LYT_PORTRAIT_QTY_DEFAULT,               LYT_LANDSCAPE_QTY_DEFAULT}},
+
+    {"TURKISH_QTY",                    FALSE, {LYT_PORTRAIT_QTY_DEFAULT,               LYT_LANDSCAPE_QTY_DEFAULT}},
+    {"GREEK_QTY",                      FALSE, {LYT_PORTRAIT_QTY_DEFAULT,               LYT_LANDSCAPE_QTY_DEFAULT}},
+    {"RUSSIAN_QTY",                    FALSE, {LYT_PORTRAIT_QTY_RUSSIAN,               LYT_LANDSCAPE_QTY_RUSSIAN}},
+};
+
+McfInputModePopupConfigure mcf_input_mode_popup_configure[MAX_INPUT_MODE_POPUP] = {
+    /* name, style, fUseRotation, layoutId[], fUseWindow, fUseDimWindow */
+    /* popup input mode */
+    {"4X4_TEXTMODE_POPUP", LAYOUT_STYLE_POPUP, FALSE, {LYT_PORTRAIT_4X4_TEXTMODE_POPUP, LYT_PORTRAIT_4X4_TEXTMODE_POPUP}, TRUE, TRUE},
+
+    {"PUNCTUATION_POPUP", LAYOUT_STYLE_POPUP, FALSE, {LYT_PUNCTUATION_POPUP, LYT_PUNCTUATION_POPUP}, TRUE, FALSE, 0},
+    {"EMOTICON_POPUP", LAYOUT_STYLE_POPUP, FALSE, {LYT_EMOTICON_POPUP, LYT_EMOTICON_POPUP}, TRUE, FALSE, 0},
+    {"URL_POPUP", LAYOUT_STYLE_POPUP, FALSE, {LYT_URL_POPUP, LYT_URL_POPUP}, TRUE, FALSE, 0},
+};
+
+McfAutoPopupConfigure mcf_autopopup_configure = {
+       "04_textinput_bubble_umlaut_bg.png",
+       {0, 128,0, 255}, /*McfColor bgColor;*/
+       2, /*mcfdouble bgLineWidth;*/
+       {0, 60, 0, 255}, /*McfColor bgLineColor;*/
+       0, /*mcfbyte bgPadding; /* padding amount between the bg border and buttons */
+       //{"08_textinput_alternative_bg_c.png","08_textinput_alternative_bg_c.png"}, /*mcfchar* btnImgPath[MAX_BUTTON_STATE];*/
+       {NULL,NULL}, /*mcfchar* btnImgPath[MAX_BUTTON_STATE];*/
+       SW_BTN_STYLE_A, /*mcfbyte swBtnStyleIdx;*/
+       66, /*mcfshort btnWidth;*/
+       102, /*mcfshort btnHeight;*/
+       0, /*mcfbyte btnSpacing;*/
+       AUTOPOPUP_LABEL_PROP,
+       {
+               NULL,
+               NULL,
+               NULL,
+               NULL,
+               NULL,
+               NULL,
+               NULL,
+               NULL,
+       },
+       0,
+       10,
+       0, // addGrabLeft
+       0, // addGrabRight
+       0, // addGrabTop
+       100 // addGrabBottom
+};
+
+McfDimWndConfigure mcf_dim_window_configure = {
+    TRUE,
+    {0, 0, 0, 128},
+};
+
+McfModifierDecoration mcf_modifier_decoration[MODIFIER_DECORATION_NUM] = {
+    { // DRAG_STATE_DECORATION_NONE
+        FALSE, { { NULL, NULL, NULL, NULL, NULL, NULL, NULL }, { NULL, NULL, NULL, NULL, NULL, NULL, NULL } }
+    },
+};
+
+mcfboolean mcf_sublayout_support_table[MAX_INPUT_MODE][SUBLAYOUTID_MAX] = {
+    // SUBLAYOUTID_DEFAULT,    SUBLAYOUTID_WITH_VOICE, SUBLAYOUTID_URL,        SUBLAYOUTID_EMAIL
+    {  TRUE,                           FALSE,                                  FALSE,                          FALSE,    }, //INPUT_MODE_4X4_ENGLISH,
+    {  TRUE,                           FALSE,                                  FALSE,                          FALSE,    }, //INPUT_MODE_4X4_NUM,
+    {  TRUE,                           FALSE,                                  FALSE,                          FALSE,    }, //INPUT_MODE_4X4_SYM_1,
+    {  TRUE,                           FALSE,                                  FALSE,                          FALSE,    }, //INPUT_MODE_4X4_SYM_2,
+    {  TRUE,                           FALSE,                                  FALSE,                          FALSE,    }, //INPUT_MODE_4X4_SYM_3,
+    {  TRUE,                           FALSE,                                  FALSE,                          FALSE,    }, //INPUT_MODE_4X4_SYM_4,
+    {  TRUE,                           FALSE,                                  FALSE,                          FALSE,    }, //INPUT_MODE_4X4_SYM_5,
+    {  TRUE,                           FALSE,                                  FALSE,                          FALSE,    }, //INPUT_MODE_4X4_TELEPHONE,
+    {  TRUE,                           FALSE,                                  FALSE,                          FALSE,    }, //INPUT_MODE_4X4_URL,
+    {  TRUE,                           FALSE,                                  FALSE,                          FALSE,    }, //INPUT_MODE_4X4_EMAIL,
+    {  TRUE,                           FALSE,                                  FALSE,                          FALSE,    }, //INPUT_MODE_4X4_PASSWD,
+    {  TRUE,                           FALSE,                                  FALSE,                          FALSE,    }, //INPUT_MODE_4X4_IPv6_123,
+    {  TRUE,                           FALSE,                                  FALSE,                          FALSE,    }, //INPUT_MODE_4X4_IPv6_ABC,
+    {  TRUE,                           FALSE,                                  FALSE,                          FALSE,    }, //INPUT_MODE_4X4_NUMONLY,
+    {  TRUE,                           FALSE,                                  FALSE,                          FALSE,    }, //INPUT_MODE_4X4_MONTH,
+
+    {  TRUE,                           FALSE,                                  FALSE,                          FALSE,    }, //INPUT_MODE_4X4_FRENCH,
+    {  TRUE,                           FALSE,                                  FALSE,                          FALSE,    }, //INPUT_MODE_4X4_SPANISH,
+    {  TRUE,                           FALSE,                                  FALSE,                          FALSE,    }, //INPUT_MODE_4X4_ITALIAN,
+    {  TRUE,                           FALSE,                                  FALSE,                          FALSE,    }, //INPUT_MODE_4X4_DUTCH,
+    {  TRUE,                           FALSE,                                  FALSE,                          FALSE,    }, //INPUT_MODE_4X4_PORTUGUESE,
+    {  TRUE,                           FALSE,                                  FALSE,                          FALSE,    }, //INPUT_MODE_4X4_GERMAN,
+
+    {  TRUE,                           FALSE,                                  FALSE,                          FALSE,    }, //INPUT_MODE_4X4_TURKISH,
+    {  TRUE,                           FALSE,                                  FALSE,                          FALSE,    }, //INPUT_MODE_4X4_GREEK,
+    {  TRUE,                           FALSE,                                  FALSE,                          FALSE,    }, //INPUT_MODE_4X4_RUSSIAN,
+
+    {  TRUE,                           FALSE,                                  TRUE,                           TRUE,     }, //INPUT_MODE_QTY_ENGLISH,
+    {  TRUE,                           FALSE,                                  TRUE,                           TRUE,     }, //INPUT_MODE_QTY_URL,
+    {  TRUE,                           FALSE,                                  TRUE,                           TRUE,     }, //INPUT_MODE_QTY_EMAIL,
+    {  TRUE,                           FALSE,                                  TRUE,                           TRUE,     }, //INPUT_MODE_QTY_SYM_1,
+    {  TRUE,                           FALSE,                                  TRUE,                           TRUE,     }, //INPUT_MODE_QTY_SYM_2,
+    {  TRUE,                           FALSE,                                  TRUE,                           TRUE,     }, //INPUT_MODE_QTY_SYM_3,
+    {  TRUE,                           FALSE,                                  FALSE,                          FALSE,    }, //INPUT_MODE_QTY_SYM_4,
+
+    {  TRUE,                           FALSE,                                  TRUE,                           TRUE,     }, //INPUT_MODE_QTY_FRENCH,
+    {  TRUE,                           FALSE,                                  TRUE,                           TRUE,     }, //INPUT_MODE_QTY_SPANISH,
+    {  TRUE,                           FALSE,                                  TRUE,                           TRUE,     }, //INPUT_MODE_QTY_ITALIAN,
+    {  TRUE,                           FALSE,                                  TRUE,                           TRUE,     }, //INPUT_MODE_QTY_DUTCH,
+    {  TRUE,                           FALSE,                                  TRUE,                           TRUE,     }, //INPUT_MODE_QTY_PORTUGUESE,
+    {  TRUE,                           FALSE,                                  TRUE,                           TRUE,     }, //INPUT_MODE_QTY_GERMAN,
+
+    {  TRUE,                           FALSE,                                  TRUE,                           TRUE,     }, //INPUT_MODE_QTY_TURKISH,
+    {  TRUE,                           FALSE,                                  TRUE,                           TRUE,     }, //INPUT_MODE_QTY_GREEK,
+    {  TRUE,                           FALSE,                                  TRUE,                           TRUE,     }, //INPUT_MODE_QTY_RUSSIAN,
+};
diff --git a/res/mcfresource.h b/res/mcfresource.h
new file mode 100755 (executable)
index 0000000..91f0a7a
--- /dev/null
@@ -0,0 +1,962 @@
+/*
+ * Copyright 2012  Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.tizenopensource.org/license
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+
+#include "mcftypes.h"
+#include "mcfconfig.h"
+#include "mcfstructs.h"
+#include "mcfkeydefines.h"
+#include <Ecore_IMF.h>
+
+/* This prevents "deprecated conversion" warnings.. */
+#pragma GCC diagnostic ignored "-Wwrite-strings"
+
+#ifndef __MCF_RESOURCE_H__
+#define __MCF_RESOURCE_H__
+
+#define FONT_PROPERTIES_FILE "fontprop.dat"
+
+#define PORTRAIT_DEFAULT_BG_IMG "textinput_panel_bg.png"
+#define LANDSCAPE_DEFAULT_BG_IMG "textinput_panel_land_bg.png"
+
+#define POPUP_BG_IMG_1 "textinput_popup_bg1.png"
+#define POPUP_BG_IMG_2 "textinput_popup_bg2.png"
+#define POPUP_BG_IMG_3 "textinput_popup_bg3.png"
+
+#define RESOURCE_DATA_LABEL_LEN 10
+#define RESOURCE_DATA_IMG_PATH_LEN 50
+#define RESOURCE_DATA_KEY_VALUE_LEN 8
+#define RESOURCE_DATA_AUTOPOPUP_KEY_LEN 4
+
+/* User defined key list */
+typedef enum _MCFUserDefinedKey {
+       UD_MVK_START = (MVK_RESERVED_KEY + 1), /* KEY_TYPE_CONTROL */
+       /* Add here */
+       UD_MVK_OPTION,
+       UD_MVK_LANGUAGE,
+       UD_MVK_CHANGEISE,
+       UD_MVK_HIDE,
+       UD_MVK_SHIFT,
+       UD_MVK_OK,
+       UD_MVK_MORE,
+       UD_MVK_PREDICTION_ONOFF,
+       UD_MVK_ABC,
+       UD_MVK_123,
+       UD_MVK_SYM,
+       UD_MVK_PREVSYM,
+       UD_MVK_NEXTSYM,
+       UD_MVK_KEYPAD,
+       UD_MVK_KEYPAD_4X4,
+       UD_MVK_KEYPAD_QTY,
+       UD_MVK_COMPLETION_MUL_abc,
+       UD_MVK_COMPLETION_MUL_Abc,
+       UD_MVK_COMPLETION_MUL_ABC,
+       UD_MVK_IPv6,
+       UD_MVK_LANG_CHANGE,
+       UD_MVK_OPTION_WINDOW,
+#ifdef SUPPORTS_VOICE_INPUT
+       UD_MVK_VOICE_WINDOW,
+#endif
+       UD_MVK_END /* End of the user defined key value*/
+}MCFUserDefinedKey;
+
+/* Custom ID for setting private keys */
+enum _MCFCustomID {
+       CUSTOMID_PREDICTION,
+       CUSTOMID_ENTER,
+       CUSTOMID_WWWCOM,
+       CUSTOMID_MAX
+};
+
+enum MCFSubLayoutID {
+       SUBLAYOUTID_NONE = -1,
+       SUBLAYOUTID_DEFAULT = 0,
+       SUBLAYOUTID_WITH_VOICE,
+       SUBLAYOUTID_URL,
+       SUBLAYOUTID_EMAIL,
+
+       SUBLAYOUTID_MAX
+};
+
+#define MAX_KEY 60
+
+/**@brief  Layout definition */
+typedef enum _MCFLayout {
+       /* base layout */
+       LYT_PORTRAIT_4X4_DEFAULT = 0,
+       LYT_PORTRAIT_4X4_SYM,
+       LYT_PORTRAIT_4X4_IPv6_123,
+       LYT_PORTRAIT_4X4_IPv6_ABC,
+       LYT_PORTRAIT_4X4_NUMONLY,
+       LYT_PORTRAIT_4X4_MONTH,
+       LYT_PORTRAIT_QTY_DEFAULT,
+       LYT_PORTRAIT_AZT_DEFAULT,
+       LYT_PORTRAIT_QTY_URL,
+       LYT_PORTRAIT_QTY_EMAIL,
+        /*russian layouts*/
+       LYT_PORTRAIT_QTY_RUSSIAN,
+       LYT_LANDSCAPE_QTY_RUSSIAN,
+       /*Landscape Layouts*/
+       LYT_LANDSCAPE_QTY_DEFAULT,
+       LYT_LANDSCAPE_AZT_FRENCH,
+       LYT_LANDSCAPE_QTY_URL,
+       LYT_LANDSCAPE_QTY_EMAIL,
+       LYT_LANDSCAPE_4X4_NUM,
+       LYT_LANDSCAPE_4X4_PASSWD,
+       LYT_LANDSCAPE_4X4_IPv6_123,
+       LYT_LANDSCAPE_4X4_IPv6_ABC,
+       LYT_LANDSCAPE_4X4_NUMONLY,
+
+       /* popup layout */
+       LYT_PORTRAIT_4X4_TEXTMODE_POPUP,
+
+       LYT_PUNCTUATION_POPUP,
+       LYT_EMOTICON_POPUP,
+       LYT_URL_POPUP,
+
+       MAX_LAYOUT
+}MCFLayout;
+
+extern McfLayout mcf_layout[MAX_LAYOUT];
+
+/**@brief  Input Mode definition */
+typedef enum _MCFInputMode {
+       /* base input mode */
+       INPUT_MODE_4X4_ENGLISH = 0,
+       INPUT_MODE_4X4_NUM,
+       INPUT_MODE_4X4_SYM_1,
+       INPUT_MODE_4X4_SYM_2,
+       INPUT_MODE_4X4_SYM_3,
+       INPUT_MODE_4X4_SYM_4,
+       INPUT_MODE_4X4_SYM_5,
+       INPUT_MODE_4X4_TELEPHONE,
+       INPUT_MODE_4X4_URL,
+       INPUT_MODE_4X4_EMAIL,
+       INPUT_MODE_4X4_PASSWD,
+       INPUT_MODE_4X4_IPv6_123,
+       INPUT_MODE_4X4_IPv6_ABC,
+       INPUT_MODE_4X4_NUMONLY,
+       INPUT_MODE_4X4_MONTH,
+
+       INPUT_MODE_4X4_FRENCH,
+       INPUT_MODE_4X4_SPANISH,
+       INPUT_MODE_4X4_ITALIAN,
+       INPUT_MODE_4X4_DUTCH,
+       INPUT_MODE_4X4_PORTUGUESE,
+       INPUT_MODE_4X4_GERMAN,
+
+       INPUT_MODE_4X4_TURKISH,
+       INPUT_MODE_4X4_GREEK,
+       INPUT_MODE_4X4_RUSSIAN,
+
+       INPUT_MODE_QTY_ENGLISH,
+       INPUT_MODE_QTY_URL,
+       INPUT_MODE_QTY_EMAIL,
+       INPUT_MODE_QTY_SYM_1,
+       INPUT_MODE_QTY_SYM_2,
+       INPUT_MODE_QTY_SYM_3,
+       INPUT_MODE_QTY_SYM_4,
+
+       INPUT_MODE_QTY_FRENCH,
+       /* Below 5 modes are equivalent to english mode */
+       INPUT_MODE_QTY_SPANISH,
+       INPUT_MODE_QTY_ITALIAN,
+       INPUT_MODE_QTY_DUTCH,
+       INPUT_MODE_QTY_PORTUGUESE,
+       INPUT_MODE_QTY_GERMAN,
+
+       INPUT_MODE_QTY_TURKISH,
+       INPUT_MODE_QTY_GREEK,
+       INPUT_MODE_QTY_RUSSIAN,
+
+       MAX_INPUT_MODE
+}MCFInputMode;
+
+extern McfInputModeConfigure mcf_input_mode_configure[MAX_INPUT_MODE];
+
+typedef enum _MCFInputModePopup {
+       /* add popup input mode */
+       INPUT_MODE_4X4_TEXTMODE_POPUP,
+       INPUT_MODE_PUNCTUATION_POPUP,
+       INPUT_MODE_EMOTICON_POPUP,
+       INPUT_MODE_URL_POPUP,
+       INPUT_MODE_SCENETEXT_POPUP,
+       MAX_INPUT_MODE_POPUP
+}MCFInputModePopup;
+
+extern McfInputModePopupConfigure mcf_input_mode_popup_configure[MAX_INPUT_MODE_POPUP];
+extern mcfboolean mcf_sublayout_support_table[MAX_INPUT_MODE][SUBLAYOUTID_MAX];
+
+#define DEFAULT_FONT_NAME "SLP:style=medium"
+#define DEFAULT_FONT_SIZE  40
+
+typedef enum _MCFLabelProperties {
+       LABEL_PROPERTIES_4X4_DEFAULT_TYPE = 0,
+       LABEL_PROPERTIES_4X4_SIDE_BUTTON_TYPE,
+       LABEL_PROPERTIES_4X4_SIDE_UIITEM_TYPE,
+       LABEL_PROPERTIES_4X4_SOFTKEYBAR_TYPE,
+       LABEL_PROPERTIES_4X4_NUM_TYPE,
+       LABEL_PROPERTIES_4X4_SYM_PAGELABEL,
+       LABEL_PROPERTIES_QTY_DEFAULT_TYPE,
+       LABEL_PROPERTIES_QTY_BOTTOM_LINE_TYPE,
+       LABEL_PROPERTIES_QTY_BOTTOM_LINE_IMAGE_TYPE,
+       LABEL_PROPERTIES_TEXTMODE_POPUP_TYPE,
+       LABEL_PROPERTIES_4X4_ASTERISK_TYPE,
+       LABEL_PROPERTIES_QTY_WWW_TYPE,
+       LABEL_PROPERTIES_4x4_WWW_TYPE,
+       LABEL_PROPERTIES_LANGNAME,
+       LABEL_PROPERTIES_LAND_DEFAULT_TYPE,
+       LABEL_PROPERTIES_LAND_DEFAULT_IMAGE_TYPE,
+       LABEL_PROPERTIES_LAND_MODE_CHANGE_LABEL_TYPE,
+       LABEL_PROPERTIES_LAND_SINHALA_TYPE,
+       LABEL_PROPERTIES_LAND_SYMBOL_LABEL_TYPE,
+       LABEL_PROPERTIES_LAND_WWW_TYPE,
+       LABEL_PROPERTIES_4X4_INDIC_TYPE,
+       LABEL_PROPERTIES_4x4_MONTH_TYPE,
+       LABEL_PROPERTIES_LAND_IP_ABC,
+       LABEL_PROPERTIES_LAND_MONTH,
+
+       LABEL_PROPERTIES_PUNTUATION_BUTTON_TYPE,
+       LABEL_PROPERTIES_QTY_SPACE_KEY_TYPE,
+
+       MAX_LABEL_PROPERTIES
+}MCFLabelProperties;
+
+#define COLOR_1 { 255, 255, 255, 255}
+#define COLOR_2 { 0, 0, 0 , 255}
+#define COLOR_25 { 0, 186, 255 , 255}
+#define COLOR_61 { 28, 31, 36 , 255}
+#define COLOR_49 { 36, 36, 36 , 255}
+#define COLOR_18 { 0, 161, 253 , 255}
+#define COLOR_71 { 75, 75, 75, 255}
+
+#define COLOR_242 { 255, 255, 255, 255}
+#define COLOR_PRESSED { 226, 226, 226, 255}
+#define COLOR_LIGHTGRAY { 150, 150, 150, 255}
+#define COLOR_SPACE { 255, 255, 255, 255}
+
+#define COLOR_LABEL_PRESSED { 120, 120, 120, 255 }
+#define COLOR_LABEL_DISABLED { 88, 88, 88, 255 }
+
+#define COLOR_NORMAL {255,255,255,255}
+#define COLOR_NORMAL_LONGKEY {150,150,150,255}
+#define COLOR_SHIFT_STATE_COLOR {255,180,0,255}
+#define COLOR_FUNCTION { 255, 255, 255, 255}
+#define COLOR_PHONENUMBER_TEXT { 150,150,150,255 }
+#define COLOR_DISABLED { 178, 178, 178, 255 }
+
+static McfLabelProperties mcf_key_label_properties[MAX_LABEL_PROPERTIES][MAX_SIZE_OF_LABEL_FOR_ONE] = {
+    /* fValid, fontName, fontSize, normalColor, activeColor, selectedColor, alignment, padding, shadowDistance, shadowDirection, shadowColor  */
+    /* LABEL_PROPERTIES_4X4_DEFAULT_TYPE */
+       {
+       {USED, DEFAULT_FONT_NAME, 30,
+               {
+                       {COLOR_NORMAL, COLOR_PRESSED, COLOR_LABEL_DISABLED},
+                       {COLOR_NORMAL, COLOR_PRESSED, COLOR_LABEL_DISABLED},
+                       {COLOR_NORMAL, COLOR_PRESSED, COLOR_LABEL_DISABLED},
+               },
+       LABEL_ALIGN_CENTER_TOP, 0, 10},
+       {USED, DEFAULT_FONT_NAME, 21,
+               {
+                       {COLOR_PHONENUMBER_TEXT, COLOR_PRESSED, COLOR_LABEL_DISABLED},
+                       {COLOR_PHONENUMBER_TEXT, COLOR_PRESSED, COLOR_LABEL_DISABLED},
+                       {COLOR_PHONENUMBER_TEXT, COLOR_PRESSED, COLOR_LABEL_DISABLED},
+               },LABEL_ALIGN_CENTER_TOP, 0, 42},
+               {FALSE},
+       },
+       /* LABEL_PROPERTIES_4X4_SIDE_BUTTON_TYPE*/
+       {
+               {USED, DEFAULT_FONT_NAME, 35,
+               {
+                       {COLOR_242, COLOR_PRESSED, COLOR_LABEL_DISABLED},
+                       {COLOR_242, COLOR_PRESSED, COLOR_LABEL_DISABLED},
+                       {COLOR_242, COLOR_PRESSED, COLOR_LABEL_DISABLED},
+               },LABEL_ALIGN_CENTER_MIDDLE, 0},
+                       {FALSE},
+       },
+       /* LABEL_PROPERTIES_4X4_SIDE_UIITEM_TYPE*/
+       {
+               {USED, DEFAULT_FONT_NAME, 35,
+               {
+                       {COLOR_DISABLED, COLOR_DISABLED, COLOR_DISABLED},
+                       {COLOR_DISABLED, COLOR_DISABLED, COLOR_DISABLED},
+                       {COLOR_DISABLED, COLOR_DISABLED, COLOR_DISABLED},
+               },
+               LABEL_ALIGN_CENTER_MIDDLE, 0},
+               {FALSE},
+       },
+       /* LABEL_PROPERTIES_4X4_SOFTKEYBAR_TYPE*/
+       {
+               {USED, DEFAULT_FONT_NAME, 24,
+               {
+                       {COLOR_242, COLOR_PRESSED, COLOR_LABEL_DISABLED},
+                       {COLOR_242, COLOR_PRESSED, COLOR_LABEL_DISABLED},
+                       {COLOR_242, COLOR_PRESSED, COLOR_LABEL_DISABLED},
+               },LABEL_ALIGN_CENTER_MIDDLE, 0},
+               {FALSE},
+       },
+       /* LABEL_PROPERTIES_4X4_NUM_TYPE*/
+       {
+               {USED, DEFAULT_FONT_NAME, 44,
+               {
+                       {COLOR_NORMAL, COLOR_PRESSED, COLOR_LABEL_DISABLED},
+                       {COLOR_NORMAL, COLOR_PRESSED, COLOR_LABEL_DISABLED},
+                       {COLOR_NORMAL, COLOR_PRESSED, COLOR_LABEL_DISABLED},
+               },LABEL_ALIGN_CENTER_MIDDLE, 0},
+               {FALSE},
+       },
+       /* LABEL_PROPERTIES_4X4_SYM_PAGELABEL*/
+       {
+               {USED, DEFAULT_FONT_NAME, 30,
+               {
+                       {COLOR_242, COLOR_242, COLOR_LABEL_DISABLED},
+                       {COLOR_242, COLOR_242, COLOR_LABEL_DISABLED},
+                       {COLOR_242, COLOR_242, COLOR_LABEL_DISABLED},
+                       },LABEL_ALIGN_CENTER_MIDDLE, 0},
+               {FALSE},
+       },
+       /* LABEL_PROPERTIES_QTY_DEFAULT_TYPE */
+       {
+       {USED, DEFAULT_FONT_NAME, 36,
+               {
+                       {COLOR_NORMAL, COLOR_PRESSED, COLOR_LABEL_DISABLED},
+                       {COLOR_NORMAL, COLOR_PRESSED, COLOR_LABEL_DISABLED},
+                       {COLOR_NORMAL, COLOR_PRESSED, COLOR_LABEL_DISABLED},
+               },
+               LABEL_ALIGN_CENTER_MIDDLE, 0},
+       {USED, DEFAULT_FONT_NAME, 17,
+               {
+                       {COLOR_NORMAL_LONGKEY, COLOR_PRESSED, COLOR_LABEL_DISABLED},
+                       {COLOR_NORMAL_LONGKEY, COLOR_PRESSED, COLOR_LABEL_DISABLED},
+                       {COLOR_NORMAL_LONGKEY, COLOR_PRESSED, COLOR_LABEL_DISABLED},
+               },
+               LABEL_ALIGN_RIGHT_TOP, 8, 2},
+               {FALSE},
+       },
+       /* LABEL_PROPERTIES_QTY_BOTTOM_LINE_TYPE */
+       {
+       {USED, DEFAULT_FONT_NAME, 26,
+               {
+                       {COLOR_242, COLOR_PRESSED, COLOR_LABEL_DISABLED},
+                       {COLOR_242, COLOR_PRESSED, COLOR_LABEL_DISABLED},
+                       {COLOR_242, COLOR_PRESSED, COLOR_LABEL_DISABLED},
+               },LABEL_ALIGN_CENTER_MIDDLE, 0},
+       {USED, DEFAULT_FONT_NAME, 28,
+               {
+                       {COLOR_LIGHTGRAY, COLOR_PRESSED, COLOR_LABEL_DISABLED},
+                       {COLOR_LIGHTGRAY, COLOR_PRESSED, COLOR_LABEL_DISABLED},
+                       {COLOR_LIGHTGRAY, COLOR_PRESSED, COLOR_LABEL_DISABLED},
+               },LABEL_ALIGN_CENTER_TOP, 0, 10},
+       {USED, DEFAULT_FONT_NAME, 42,
+               {
+                       {COLOR_242, COLOR_PRESSED, COLOR_LABEL_DISABLED},
+                       {COLOR_242, COLOR_PRESSED, COLOR_LABEL_DISABLED},
+                       {COLOR_242, COLOR_PRESSED, COLOR_LABEL_DISABLED},
+               },LABEL_ALIGN_CENTER_BOTTOM, 0, 10},
+               {FALSE},
+       },
+       /* LABEL_PROPERTIES_QTY_BOTTOM_LINE_IMAGE_TYPE */
+       {
+               {USED, DEFAULT_FONT_NAME, 15,
+               {
+                       {COLOR_242, COLOR_PRESSED, COLOR_LABEL_DISABLED},
+                       {COLOR_242, COLOR_PRESSED, COLOR_LABEL_DISABLED},
+                       {COLOR_242, COLOR_PRESSED, COLOR_LABEL_DISABLED},
+               },LABEL_ALIGN_RIGHT_TOP, 5, 5},
+               {FALSE},
+       },
+       /* LABEL_PROPERTIES_TEXTMODE_POPUP_TYPE */
+       {
+       {USED, DEFAULT_FONT_NAME, 22,
+               {
+                       {COLOR_49, COLOR_PRESSED, COLOR_LABEL_DISABLED},
+                       {COLOR_49, COLOR_PRESSED, COLOR_LABEL_DISABLED},
+                       {COLOR_49, COLOR_PRESSED, COLOR_LABEL_DISABLED},
+               },LABEL_ALIGN_CENTER_MIDDLE, 0},
+               {FALSE},
+       },
+       /* LABEL_PROPERTIES_4X4_ASTERISK_TYPE */
+       {
+               {USED, DEFAULT_FONT_NAME, 34,
+               {
+                       {COLOR_NORMAL, COLOR_PRESSED, COLOR_LABEL_DISABLED},
+                       {COLOR_NORMAL, COLOR_PRESSED, COLOR_LABEL_DISABLED},
+                       {COLOR_NORMAL, COLOR_PRESSED, COLOR_LABEL_DISABLED},
+               },LABEL_ALIGN_CENTER_MIDDLE, 0},
+       {USED, DEFAULT_FONT_NAME, 34,
+               {
+                       {COLOR_NORMAL, COLOR_PRESSED, COLOR_LABEL_DISABLED},
+                       {COLOR_NORMAL, COLOR_PRESSED, COLOR_LABEL_DISABLED},
+                       {COLOR_NORMAL, COLOR_PRESSED, COLOR_LABEL_DISABLED},
+               },LABEL_ALIGN_LEFT_MIDDLE, 30, 5},
+       {USED, DEFAULT_FONT_NAME, 34,
+               {
+                       {COLOR_NORMAL, COLOR_PRESSED, COLOR_LABEL_DISABLED},
+                       {COLOR_NORMAL, COLOR_PRESSED, COLOR_LABEL_DISABLED},
+                       {COLOR_NORMAL, COLOR_PRESSED, COLOR_LABEL_DISABLED},
+               },LABEL_ALIGN_CENTER_MIDDLE, 15, 0},
+               {FALSE},
+       },
+       /* LABEL_PROPERTIES_QTY_WWW_TYPE */
+       {
+       {USED, DEFAULT_FONT_NAME, 15,
+               {
+                       {COLOR_NORMAL, COLOR_PRESSED, COLOR_LABEL_DISABLED},
+                       {COLOR_NORMAL, COLOR_PRESSED, COLOR_LABEL_DISABLED},
+                       {COLOR_NORMAL, COLOR_PRESSED, COLOR_LABEL_DISABLED},
+               },LABEL_ALIGN_CENTER_MIDDLE, 0},
+               {FALSE},
+       },
+
+       /* LABEL_PROPERTIES_4x4_WWW_TYPE */
+       {
+       {USED, DEFAULT_FONT_NAME, 32,
+               {
+                       {COLOR_NORMAL, COLOR_PRESSED, COLOR_LABEL_DISABLED},
+                       {COLOR_NORMAL, COLOR_PRESSED, COLOR_LABEL_DISABLED},
+                       {COLOR_NORMAL, COLOR_PRESSED, COLOR_LABEL_DISABLED},
+               },LABEL_ALIGN_CENTER_MIDDLE, 0},
+               {FALSE},
+       },
+       /* LABEL_PROPERTIES_LANGNAME */
+       {
+       {USED, DEFAULT_FONT_NAME, 20,
+               {
+                       {COLOR_LABEL_PRESSED, COLOR_PRESSED, COLOR_LABEL_DISABLED},
+                       {COLOR_LABEL_PRESSED, COLOR_PRESSED, COLOR_LABEL_DISABLED},
+                       {COLOR_LABEL_PRESSED, COLOR_PRESSED, COLOR_LABEL_DISABLED},
+               },LABEL_ALIGN_LEFT_MIDDLE, 0},
+               {FALSE},
+       },
+
+       /*LABEL_PROPERTIES_LAND_DEFAULT_TYPE*/
+       {
+       {USED, DEFAULT_FONT_NAME, 35,
+               {
+                       {COLOR_NORMAL, COLOR_PRESSED, COLOR_LABEL_DISABLED},
+                       {COLOR_NORMAL, COLOR_PRESSED, COLOR_LABEL_DISABLED},
+                       {COLOR_NORMAL, COLOR_PRESSED, COLOR_LABEL_DISABLED},
+               }, LABEL_ALIGN_CENTER_MIDDLE, 0},
+       {USED, DEFAULT_FONT_NAME, 17,
+               {
+                       {COLOR_LIGHTGRAY, COLOR_PRESSED, COLOR_LABEL_DISABLED},
+                       {COLOR_LIGHTGRAY, COLOR_PRESSED, COLOR_LABEL_DISABLED},
+                       {COLOR_LIGHTGRAY, COLOR_PRESSED, COLOR_LABEL_DISABLED},
+               },LABEL_ALIGN_RIGHT_TOP, 7, 2},
+               {FALSE},
+       },
+
+
+       /*LABEL_PROPERTIES_LAND_DEFAULT_IMAGE_TYPE*/
+       {
+       {USED, DEFAULT_FONT_NAME, 20,
+               {
+                       {COLOR_242, COLOR_PRESSED, COLOR_LABEL_DISABLED},
+                       {COLOR_242, COLOR_PRESSED, COLOR_LABEL_DISABLED},
+                       {COLOR_242, COLOR_PRESSED, COLOR_LABEL_DISABLED},
+               },LABEL_ALIGN_RIGHT_TOP, 5, 5},
+       {FALSE},
+       },
+
+       /*LABEL_PROPERTIES_LAND_MODE_CHANGE_LABEL_TYPE*/
+       {
+       {USED, DEFAULT_FONT_NAME, 32,
+               {
+                       {COLOR_242, COLOR_PRESSED, COLOR_LABEL_DISABLED},
+                       {COLOR_242, COLOR_PRESSED, COLOR_LABEL_DISABLED},
+                       {COLOR_242, COLOR_PRESSED, COLOR_LABEL_DISABLED},
+               }, LABEL_ALIGN_CENTER_MIDDLE, 0},
+       {FALSE},
+       },
+
+       /*LABEL_PROPERTIES_LAND_SINHALA_TYPE*/
+       {
+       {USED, DEFAULT_FONT_NAME, 35,
+               {
+                       {COLOR_NORMAL, COLOR_PRESSED, COLOR_LABEL_DISABLED},
+                       {COLOR_NORMAL, COLOR_PRESSED, COLOR_LABEL_DISABLED},
+                       {COLOR_NORMAL, COLOR_PRESSED, COLOR_LABEL_DISABLED},
+               }, LABEL_ALIGN_CENTER_MIDDLE, 0, 7},
+       {USED, DEFAULT_FONT_NAME, 24,
+               {
+                       {COLOR_LIGHTGRAY, COLOR_PRESSED, COLOR_LABEL_DISABLED},
+                       {COLOR_LIGHTGRAY, COLOR_PRESSED, COLOR_LABEL_DISABLED},
+                       {COLOR_LIGHTGRAY, COLOR_PRESSED, COLOR_LABEL_DISABLED},
+               },LABEL_ALIGN_CENTER_TOP, 0, 0},
+       {FALSE},
+       },
+
+       /*LABEL_PROPERTIES_LAND_SYMBOL_LABEL_TYPE*/
+       {
+       {USED, DEFAULT_FONT_NAME, 42,
+               {
+                       {COLOR_242, COLOR_PRESSED, COLOR_LABEL_DISABLED},
+                       {COLOR_242, COLOR_PRESSED, COLOR_LABEL_DISABLED},
+                       {COLOR_242, COLOR_PRESSED, COLOR_LABEL_DISABLED},
+               },LABEL_ALIGN_CENTER_BOTTOM, 0, 5},
+       {USED, DEFAULT_FONT_NAME, 28,
+               {
+                       {COLOR_LIGHTGRAY, COLOR_PRESSED, COLOR_LABEL_DISABLED},
+                       {COLOR_LIGHTGRAY, COLOR_PRESSED, COLOR_LABEL_DISABLED},
+                       {COLOR_LIGHTGRAY, COLOR_PRESSED, COLOR_LABEL_DISABLED},
+               },LABEL_ALIGN_CENTER_TOP, 0, 5},
+       {USED, DEFAULT_FONT_NAME, 42,
+               {
+                       {COLOR_242, COLOR_PRESSED, COLOR_LABEL_DISABLED},
+                       {COLOR_242, COLOR_PRESSED, COLOR_LABEL_DISABLED},
+                       {COLOR_242, COLOR_PRESSED, COLOR_LABEL_DISABLED},
+               },LABEL_ALIGN_CENTER_BOTTOM, 0, 5},
+       {FALSE},
+
+       },
+       /* LABEL_PROPERTIES_LAND_WWW_TYPE */
+       {
+       {USED, DEFAULT_FONT_NAME, 30,
+               {
+                       {COLOR_NORMAL, COLOR_PRESSED, COLOR_LABEL_DISABLED},
+                       {COLOR_NORMAL, COLOR_PRESSED, COLOR_LABEL_DISABLED},
+                       {COLOR_NORMAL, COLOR_PRESSED, COLOR_LABEL_DISABLED},
+               }, LABEL_ALIGN_CENTER_MIDDLE, 0},
+       {FALSE},
+       },
+       /* LABEL_PROPERTIES_4X4_INDIC_TYPE */
+       {
+       {USED, DEFAULT_FONT_NAME, 30,
+               {
+                       {COLOR_NORMAL, COLOR_PRESSED, COLOR_LABEL_DISABLED},
+                       {COLOR_NORMAL, COLOR_PRESSED, COLOR_LABEL_DISABLED},
+                       {COLOR_NORMAL, COLOR_PRESSED, COLOR_LABEL_DISABLED},
+               },
+       LABEL_ALIGN_CENTER_TOP, 0, 10},
+       {USED, DEFAULT_FONT_NAME, 21,
+               {
+                       {COLOR_PHONENUMBER_TEXT, COLOR_PRESSED, COLOR_LABEL_DISABLED},
+                       {COLOR_PHONENUMBER_TEXT, COLOR_PRESSED, COLOR_LABEL_DISABLED},
+                       {COLOR_PHONENUMBER_TEXT, COLOR_PRESSED, COLOR_LABEL_DISABLED},
+               },LABEL_ALIGN_CENTER_TOP, 0, 42},
+       {FALSE},
+       },
+       /* LABEL_PROPERTIES_4X4_MONTH_TYPE */
+       {
+       {USED, DEFAULT_FONT_NAME, 32,
+               {
+                       {COLOR_NORMAL, COLOR_PRESSED, COLOR_LABEL_DISABLED},
+                       {COLOR_NORMAL, COLOR_PRESSED, COLOR_LABEL_DISABLED},
+                       {COLOR_NORMAL, COLOR_PRESSED, COLOR_LABEL_DISABLED},
+               },
+       LABEL_ALIGN_CENTER_MIDDLE, 0},
+       {FALSE},
+       },
+       /* LABEL_PROPERTIES_LAND_IP_ABC */
+       {
+       {USED, DEFAULT_FONT_NAME, 44,
+               {
+                       {COLOR_FUNCTION, COLOR_PRESSED, COLOR_LABEL_DISABLED},
+                       {COLOR_FUNCTION, COLOR_PRESSED, COLOR_LABEL_DISABLED},
+                       {COLOR_FUNCTION, COLOR_PRESSED, COLOR_LABEL_DISABLED},
+               },
+       LABEL_ALIGN_CENTER_MIDDLE, 0},
+       {FALSE},
+       },
+       /* LABEL_PROPERTIES_LAND_MONTH */
+       {
+       {USED, DEFAULT_FONT_NAME, 32,
+               {
+                       {COLOR_NORMAL, COLOR_PRESSED, COLOR_LABEL_DISABLED},
+                       {COLOR_NORMAL, COLOR_PRESSED, COLOR_LABEL_DISABLED},
+                       {COLOR_NORMAL, COLOR_PRESSED, COLOR_LABEL_DISABLED},
+               },
+       LABEL_ALIGN_CENTER_MIDDLE, 0},
+       {FALSE},
+       },
+       /* LABEL_PROPERTIES_PUNTUATION_BUTTON_TYPE*/
+       {
+       {USED, DEFAULT_FONT_NAME, 36,
+               {
+                       {COLOR_NORMAL, COLOR_PRESSED, COLOR_LABEL_DISABLED},
+                       {COLOR_NORMAL, COLOR_PRESSED, COLOR_LABEL_DISABLED},
+                       {COLOR_NORMAL, COLOR_PRESSED, COLOR_LABEL_DISABLED},
+               }, LABEL_ALIGN_CENTER_BOTTOM, 0, 12},
+       {FALSE},
+       },
+       /* LABEL_PROPERTIES_QTY_SPACE_KEY_TYPE */
+       {
+       {TRUE, DEFAULT_FONT_NAME, 25,
+               {
+                       {COLOR_SPACE, COLOR_PRESSED, COLOR_DISABLED},
+                       {COLOR_SPACE, COLOR_PRESSED, COLOR_DISABLED},
+                       {COLOR_SPACE, COLOR_PRESSED, COLOR_DISABLED},
+               },
+       LABEL_ALIGN_CENTER_MIDDLE, 0},
+       {TRUE, DEFAULT_FONT_NAME, 25,
+               {
+                       {COLOR_SPACE, COLOR_PRESSED, COLOR_DISABLED},
+                       {COLOR_SPACE, COLOR_PRESSED, COLOR_DISABLED},
+                       {COLOR_SPACE, COLOR_PRESSED, COLOR_DISABLED},
+               },
+       LABEL_ALIGN_LEFT_TOP, 9, 0},
+       {TRUE, DEFAULT_FONT_NAME, 25,
+               {
+                       {COLOR_SPACE, COLOR_PRESSED, COLOR_DISABLED},
+                       {COLOR_SPACE, COLOR_PRESSED, COLOR_DISABLED},
+                       {COLOR_SPACE, COLOR_PRESSED, COLOR_DISABLED},
+               },
+       LABEL_ALIGN_RIGHT_TOP, 9, 0},
+       {FALSE},
+       },
+};
+
+typedef enum _McfKeyset {
+       /* BASE */
+       KEYSET_PORTRAIT_4X4_ENGLISH = 0,
+       KEYSET_PORTRAIT_4X4_NUM,
+       KEYSET_PORTRAIT_4X4_SYM_1,
+       KEYSET_PORTRAIT_4X4_SYM_2,
+       KEYSET_PORTRAIT_4X4_SYM_3,
+       KEYSET_PORTRAIT_4X4_SYM_4,
+       KEYSET_PORTRAIT_4X4_SYM_5,
+       KEYSET_PORTRAIT_4x4_TELEPHONE,
+       KEYSET_PORTRAIT_4X4_URL,
+       KEYSET_PORTRAIT_4X4_EMAIL,
+       KEYSET_PORTRAIT_4X4_PASSWD,
+       KEYSET_PORTRAIT_4X4_IPv6_123,
+       KEYSET_PORTRAIT_4X4_IPv6_ABC,
+       KEYSET_PORTRAIT_4X4_NUMONLY,
+       KEYSET_PORTRAIT_4X4_MONTH,
+
+       KEYSET_PORTRAIT_4X4_FRENCH,
+       KEYSET_PORTRAIT_4X4_SPANISH,
+       KEYSET_PORTRAIT_4X4_ITALIAN,
+       KEYSET_PORTRAIT_4X4_DUTCH,
+       KEYSET_PORTRAIT_4X4_PORTUGUESE,
+       KEYSET_PORTRAIT_4X4_GERMAN,
+
+       KEYSET_PORTRAIT_4X4_TURKISH,
+       KEYSET_PORTRAIT_4X4_GREEK,
+       KEYSET_PORTRAIT_4X4_RUSSIAN,
+
+       KEYSET_PORTRAIT_QTY_ENGLISH,
+       KEYSET_PORTRAIT_QTY_URL,
+       KEYSET_PORTRAIT_QTY_EMAIL,
+       KEYSET_PORTRAIT_QTY_SYM_1,
+       KEYSET_PORTRAIT_QTY_SYM_2,
+       KEYSET_PORTRAIT_QTY_SYM_3,
+       KEYSET_PORTRAIT_QTY_SYM_4,
+
+       KEYSET_PORTRAIT_QTY_FRENCH,
+       KEYSET_PORTRAIT_QTY_SPANISH,
+       KEYSET_PORTRAIT_QTY_ITALIAN,
+       KEYSET_PORTRAIT_QTY_DUTCH,
+       KEYSET_PORTRAIT_QTY_PORTUGUESE,
+       KEYSET_PORTRAIT_QTY_GERMAN,
+
+       KEYSET_PORTRAIT_QTY_TURKISH,
+       KEYSET_PORTRAIT_QTY_GREEK,
+       KEYSET_PORTRAIT_QTY_RUSSIAN,
+
+       KEYSET_LANDSCAPE_QTY_ENGLISH,
+       KEYSET_LANDSCAPE_QTY_URL,
+       KEYSET_LANDSCAPE_QTY_EMAIL,
+
+       KEYSET_LANDSCAPE_QTY_FRENCH,
+       KEYSET_LANDSCAPE_QTY_SPANISH,
+       KEYSET_LANDSCAPE_QTY_ITALIAN,
+       KEYSET_LANDSCAPE_QTY_DUTCH,
+       KEYSET_LANDSCAPE_QTY_PORTUGUESE,
+       KEYSET_LANDSCAPE_QTY_GERMAN,
+
+       KEYSET_LANDSCAPE_QTY_TURKISH,
+       KEYSET_LANDSCAPE_QTY_GREEK,
+       KEYSET_LANDSCAPE_QTY_RUSSIAN,
+
+       KEYSET_LANDSCAPE_4X4_NUM,
+       KEYSET_LANDSCAPE_4X4_PASSWD,
+       KEYSET_LANDSCAPE_4X4_IPv6_123,
+       KEYSET_LANDSCAPE_4X4_IPv6_ABC,
+       KEYSET_LANDSCAPE_4X4_NUMONLY,
+       KEYSET_LANDSCAPE_4X4_MONTH,
+
+       KEYSET_EMOTICON_POPUP,
+       KEYSET_PUNCTUATION_POPUP,
+       KEYSET_URL_POPUP,
+       KEYSET_PORTRAIT_TEXTMODEPOPUP_4X4,
+
+       MAX_KEYSET,
+}McfKeyset;
+
+static McfLayoutKeyset mcf_layout_keyset[] = {
+       /* BASE */
+       {INPUT_MODE_4X4_ENGLISH,                LYT_PORTRAIT_4X4_DEFAULT,                       KEYSET_PORTRAIT_4X4_ENGLISH},
+       {INPUT_MODE_4X4_NUM,                    LYT_PORTRAIT_4X4_DEFAULT,                       KEYSET_PORTRAIT_4X4_NUM},
+       {INPUT_MODE_4X4_SYM_1,                  LYT_PORTRAIT_4X4_SYM,                           KEYSET_PORTRAIT_4X4_SYM_1},
+       {INPUT_MODE_4X4_SYM_2,                  LYT_PORTRAIT_4X4_SYM,                           KEYSET_PORTRAIT_4X4_SYM_2},
+       {INPUT_MODE_4X4_SYM_3,                  LYT_PORTRAIT_4X4_SYM,                           KEYSET_PORTRAIT_4X4_SYM_3},
+       {INPUT_MODE_4X4_SYM_4,                  LYT_PORTRAIT_4X4_SYM,                           KEYSET_PORTRAIT_4X4_SYM_4},
+       {INPUT_MODE_4X4_SYM_5,                  LYT_PORTRAIT_4X4_SYM,                           KEYSET_PORTRAIT_4X4_SYM_5},
+       {INPUT_MODE_4X4_TELEPHONE,              LYT_PORTRAIT_4X4_DEFAULT,                       KEYSET_PORTRAIT_4x4_TELEPHONE},
+       {INPUT_MODE_4X4_URL,                    LYT_PORTRAIT_4X4_DEFAULT,                       KEYSET_PORTRAIT_4X4_URL},
+       {INPUT_MODE_4X4_EMAIL,                  LYT_PORTRAIT_4X4_DEFAULT,                       KEYSET_PORTRAIT_4X4_EMAIL},
+       {INPUT_MODE_4X4_PASSWD,                 LYT_PORTRAIT_4X4_DEFAULT,                       KEYSET_PORTRAIT_4X4_PASSWD},
+       {INPUT_MODE_4X4_IPv6_123,               LYT_PORTRAIT_4X4_IPv6_123,                      KEYSET_PORTRAIT_4X4_IPv6_123},
+       {INPUT_MODE_4X4_IPv6_ABC,               LYT_PORTRAIT_4X4_IPv6_ABC,                      KEYSET_PORTRAIT_4X4_IPv6_ABC},
+       {INPUT_MODE_4X4_NUMONLY,                LYT_PORTRAIT_4X4_NUMONLY,                       KEYSET_PORTRAIT_4X4_NUMONLY},
+       {INPUT_MODE_4X4_MONTH,                  LYT_PORTRAIT_4X4_MONTH,                         KEYSET_PORTRAIT_4X4_MONTH},
+
+       {INPUT_MODE_4X4_FRENCH,                 LYT_PORTRAIT_4X4_DEFAULT,                       KEYSET_PORTRAIT_4X4_FRENCH},
+       {INPUT_MODE_4X4_SPANISH,                LYT_PORTRAIT_4X4_DEFAULT,                       KEYSET_PORTRAIT_4X4_SPANISH},
+       {INPUT_MODE_4X4_ITALIAN,                LYT_PORTRAIT_4X4_DEFAULT,                       KEYSET_PORTRAIT_4X4_ITALIAN},
+       {INPUT_MODE_4X4_DUTCH,                  LYT_PORTRAIT_4X4_DEFAULT,                       KEYSET_PORTRAIT_4X4_DUTCH},
+       {INPUT_MODE_4X4_PORTUGUESE,             LYT_PORTRAIT_4X4_DEFAULT,                       KEYSET_PORTRAIT_4X4_PORTUGUESE},
+       {INPUT_MODE_4X4_GERMAN,                 LYT_PORTRAIT_4X4_DEFAULT,                       KEYSET_PORTRAIT_4X4_GERMAN},
+
+       {INPUT_MODE_4X4_TURKISH,                LYT_PORTRAIT_4X4_DEFAULT,                       KEYSET_PORTRAIT_4X4_TURKISH},
+       {INPUT_MODE_4X4_GREEK,                  LYT_PORTRAIT_4X4_DEFAULT,                       KEYSET_PORTRAIT_4X4_GREEK},
+       {INPUT_MODE_4X4_RUSSIAN,                LYT_PORTRAIT_4X4_DEFAULT,                       KEYSET_PORTRAIT_4X4_RUSSIAN},
+
+
+       {INPUT_MODE_QTY_ENGLISH,                LYT_PORTRAIT_QTY_DEFAULT,                       KEYSET_PORTRAIT_QTY_ENGLISH},
+       {INPUT_MODE_QTY_URL,                    LYT_PORTRAIT_QTY_URL,                           KEYSET_PORTRAIT_QTY_URL},
+       {INPUT_MODE_QTY_EMAIL,                  LYT_PORTRAIT_QTY_EMAIL,                         KEYSET_PORTRAIT_QTY_EMAIL},
+       {INPUT_MODE_QTY_SYM_1,                  LYT_PORTRAIT_QTY_DEFAULT,                       KEYSET_PORTRAIT_QTY_SYM_1},
+       {INPUT_MODE_QTY_SYM_2,                  LYT_PORTRAIT_QTY_DEFAULT,                       KEYSET_PORTRAIT_QTY_SYM_2},
+       {INPUT_MODE_QTY_SYM_3,                  LYT_PORTRAIT_QTY_DEFAULT,                       KEYSET_PORTRAIT_QTY_SYM_3},
+       {INPUT_MODE_QTY_SYM_4,                  LYT_PORTRAIT_QTY_DEFAULT,                       KEYSET_PORTRAIT_QTY_SYM_4},
+
+       {INPUT_MODE_QTY_FRENCH,                 LYT_PORTRAIT_AZT_DEFAULT,                       KEYSET_PORTRAIT_QTY_FRENCH},
+       {INPUT_MODE_QTY_SPANISH,                LYT_PORTRAIT_QTY_DEFAULT,                       KEYSET_PORTRAIT_QTY_SPANISH},
+       {INPUT_MODE_QTY_ITALIAN,                LYT_PORTRAIT_QTY_DEFAULT,                       KEYSET_PORTRAIT_QTY_ITALIAN},
+       {INPUT_MODE_QTY_DUTCH,                  LYT_PORTRAIT_QTY_DEFAULT,                       KEYSET_PORTRAIT_QTY_DUTCH},
+       {INPUT_MODE_QTY_PORTUGUESE,             LYT_PORTRAIT_QTY_DEFAULT,                       KEYSET_PORTRAIT_QTY_PORTUGUESE},
+       {INPUT_MODE_QTY_GERMAN,                 LYT_PORTRAIT_QTY_DEFAULT,                       KEYSET_PORTRAIT_QTY_GERMAN},
+
+       {INPUT_MODE_QTY_TURKISH,                LYT_PORTRAIT_QTY_DEFAULT,                       KEYSET_PORTRAIT_QTY_TURKISH},
+       {INPUT_MODE_QTY_GREEK,                  LYT_PORTRAIT_QTY_DEFAULT,                       KEYSET_PORTRAIT_QTY_GREEK},
+       {INPUT_MODE_QTY_RUSSIAN,                LYT_PORTRAIT_QTY_RUSSIAN,                       KEYSET_PORTRAIT_QTY_RUSSIAN},
+
+       /*Landscape*/
+       {INPUT_MODE_4X4_ENGLISH,                LYT_LANDSCAPE_QTY_DEFAULT,                      KEYSET_LANDSCAPE_QTY_ENGLISH},
+
+       {INPUT_MODE_4X4_FRENCH,                 LYT_LANDSCAPE_QTY_DEFAULT,                      KEYSET_LANDSCAPE_QTY_FRENCH},
+       {INPUT_MODE_4X4_SPANISH,                LYT_LANDSCAPE_QTY_DEFAULT,                      KEYSET_LANDSCAPE_QTY_SPANISH},
+       {INPUT_MODE_4X4_ITALIAN,                LYT_LANDSCAPE_QTY_DEFAULT,                      KEYSET_LANDSCAPE_QTY_ITALIAN},
+       {INPUT_MODE_4X4_DUTCH,                  LYT_LANDSCAPE_QTY_DEFAULT,                      KEYSET_LANDSCAPE_QTY_DUTCH},
+       {INPUT_MODE_4X4_PORTUGUESE,             LYT_LANDSCAPE_QTY_DEFAULT,                      KEYSET_LANDSCAPE_QTY_PORTUGUESE},
+       {INPUT_MODE_4X4_GERMAN,                 LYT_LANDSCAPE_QTY_DEFAULT,                      KEYSET_LANDSCAPE_QTY_GERMAN},
+
+       {INPUT_MODE_4X4_TURKISH,                LYT_LANDSCAPE_QTY_DEFAULT,                      KEYSET_LANDSCAPE_QTY_TURKISH},
+       {INPUT_MODE_4X4_GREEK,                  LYT_LANDSCAPE_QTY_DEFAULT,                      KEYSET_LANDSCAPE_QTY_GREEK},
+       {INPUT_MODE_4X4_RUSSIAN,                LYT_LANDSCAPE_QTY_RUSSIAN,                      KEYSET_LANDSCAPE_QTY_RUSSIAN},
+
+       {INPUT_MODE_4X4_NUM,                    LYT_LANDSCAPE_4X4_NUM,                          KEYSET_LANDSCAPE_4X4_NUM},
+       {INPUT_MODE_4X4_TELEPHONE,              LYT_LANDSCAPE_4X4_NUM,                          KEYSET_LANDSCAPE_4X4_NUM},
+
+       {INPUT_MODE_4X4_SYM_1,                  LYT_LANDSCAPE_QTY_DEFAULT,                      KEYSET_PORTRAIT_QTY_SYM_1},
+       {INPUT_MODE_4X4_SYM_2,                  LYT_LANDSCAPE_QTY_DEFAULT,                      KEYSET_PORTRAIT_QTY_SYM_1},
+       {INPUT_MODE_4X4_SYM_3,                  LYT_LANDSCAPE_QTY_DEFAULT,                      KEYSET_PORTRAIT_QTY_SYM_1},
+       {INPUT_MODE_4X4_SYM_4,                  LYT_LANDSCAPE_QTY_DEFAULT,                      KEYSET_PORTRAIT_QTY_SYM_1},
+       {INPUT_MODE_4X4_SYM_5,                  LYT_LANDSCAPE_QTY_DEFAULT,                      KEYSET_PORTRAIT_QTY_SYM_1},
+
+       {INPUT_MODE_4X4_URL,                    LYT_LANDSCAPE_QTY_URL,                          KEYSET_LANDSCAPE_QTY_URL},
+       {INPUT_MODE_4X4_EMAIL,                  LYT_LANDSCAPE_QTY_URL,                          KEYSET_LANDSCAPE_QTY_EMAIL},
+       {INPUT_MODE_4X4_PASSWD,                 LYT_LANDSCAPE_4X4_PASSWD,                       KEYSET_LANDSCAPE_4X4_PASSWD},
+       {INPUT_MODE_4X4_IPv6_123,               LYT_LANDSCAPE_4X4_IPv6_123,                     KEYSET_LANDSCAPE_4X4_IPv6_123},
+       {INPUT_MODE_4X4_IPv6_ABC,               LYT_LANDSCAPE_4X4_IPv6_ABC,                     KEYSET_LANDSCAPE_4X4_IPv6_ABC},
+       {INPUT_MODE_4X4_NUMONLY,                LYT_LANDSCAPE_4X4_NUMONLY,                      KEYSET_LANDSCAPE_4X4_NUMONLY},
+       {INPUT_MODE_4X4_MONTH,                  LYT_LANDSCAPE_4X4_NUM,                          KEYSET_LANDSCAPE_4X4_MONTH},
+
+       {INPUT_MODE_QTY_ENGLISH,                LYT_LANDSCAPE_QTY_DEFAULT,                      KEYSET_LANDSCAPE_QTY_ENGLISH},
+       {INPUT_MODE_QTY_URL,                    LYT_LANDSCAPE_QTY_URL,                          KEYSET_LANDSCAPE_QTY_URL},
+       {INPUT_MODE_QTY_EMAIL,                  LYT_LANDSCAPE_QTY_EMAIL,                        KEYSET_LANDSCAPE_QTY_EMAIL},
+
+       {INPUT_MODE_QTY_FRENCH,                 LYT_LANDSCAPE_AZT_FRENCH,                       KEYSET_LANDSCAPE_QTY_FRENCH},
+       {INPUT_MODE_QTY_SPANISH,                LYT_LANDSCAPE_QTY_DEFAULT,                      KEYSET_LANDSCAPE_QTY_SPANISH},
+       {INPUT_MODE_QTY_ITALIAN,                LYT_LANDSCAPE_QTY_DEFAULT,                      KEYSET_LANDSCAPE_QTY_ITALIAN},
+       {INPUT_MODE_QTY_DUTCH,                  LYT_LANDSCAPE_QTY_DEFAULT,                      KEYSET_LANDSCAPE_QTY_DUTCH},
+       {INPUT_MODE_QTY_PORTUGUESE,             LYT_LANDSCAPE_QTY_DEFAULT,                      KEYSET_LANDSCAPE_QTY_PORTUGUESE},
+       {INPUT_MODE_QTY_GERMAN,                 LYT_LANDSCAPE_QTY_DEFAULT,                      KEYSET_LANDSCAPE_QTY_GERMAN},
+
+       {INPUT_MODE_QTY_TURKISH,                LYT_LANDSCAPE_QTY_DEFAULT,                      KEYSET_LANDSCAPE_QTY_TURKISH},
+       {INPUT_MODE_QTY_GREEK,                  LYT_LANDSCAPE_QTY_DEFAULT,                      KEYSET_LANDSCAPE_QTY_GREEK},
+       {INPUT_MODE_QTY_RUSSIAN,                LYT_LANDSCAPE_QTY_RUSSIAN,                      KEYSET_LANDSCAPE_QTY_RUSSIAN},
+
+
+       {INPUT_MODE_QTY_SYM_1,                  LYT_LANDSCAPE_QTY_DEFAULT,                      KEYSET_PORTRAIT_QTY_SYM_1},
+       {INPUT_MODE_QTY_SYM_2,                  LYT_LANDSCAPE_QTY_DEFAULT,                      KEYSET_PORTRAIT_QTY_SYM_2},
+       {INPUT_MODE_QTY_SYM_3,                  LYT_LANDSCAPE_QTY_DEFAULT,                      KEYSET_PORTRAIT_QTY_SYM_3},
+       {INPUT_MODE_QTY_SYM_4,                  LYT_LANDSCAPE_QTY_DEFAULT,                      KEYSET_PORTRAIT_QTY_SYM_4},
+
+       /*Popup*/
+       {INPUT_MODE_4X4_ENGLISH,                LYT_PORTRAIT_4X4_TEXTMODE_POPUP,        KEYSET_PORTRAIT_TEXTMODEPOPUP_4X4},
+
+       {INPUT_MODE_4X4_NUM,                    LYT_PORTRAIT_4X4_TEXTMODE_POPUP,        KEYSET_PORTRAIT_TEXTMODEPOPUP_4X4},
+
+       {INPUT_MODE_4X4_FRENCH,                 LYT_PORTRAIT_4X4_TEXTMODE_POPUP,        KEYSET_PORTRAIT_TEXTMODEPOPUP_4X4},
+       {INPUT_MODE_4X4_SPANISH,                LYT_PORTRAIT_4X4_TEXTMODE_POPUP,        KEYSET_PORTRAIT_TEXTMODEPOPUP_4X4},
+       {INPUT_MODE_4X4_ITALIAN,                LYT_PORTRAIT_4X4_TEXTMODE_POPUP,        KEYSET_PORTRAIT_TEXTMODEPOPUP_4X4},
+       {INPUT_MODE_4X4_DUTCH,                  LYT_PORTRAIT_4X4_TEXTMODE_POPUP,        KEYSET_PORTRAIT_TEXTMODEPOPUP_4X4},
+       {INPUT_MODE_4X4_PORTUGUESE,             LYT_PORTRAIT_4X4_TEXTMODE_POPUP,        KEYSET_PORTRAIT_TEXTMODEPOPUP_4X4},
+       {INPUT_MODE_4X4_GERMAN,                 LYT_PORTRAIT_4X4_TEXTMODE_POPUP,        KEYSET_PORTRAIT_TEXTMODEPOPUP_4X4},
+
+       {INPUT_MODE_4X4_TURKISH,                LYT_PORTRAIT_4X4_TEXTMODE_POPUP,        KEYSET_PORTRAIT_TEXTMODEPOPUP_4X4},
+       {INPUT_MODE_4X4_GREEK,                  LYT_PORTRAIT_4X4_TEXTMODE_POPUP,        KEYSET_PORTRAIT_TEXTMODEPOPUP_4X4},
+       {INPUT_MODE_4X4_RUSSIAN,                LYT_PORTRAIT_4X4_TEXTMODE_POPUP,        KEYSET_PORTRAIT_TEXTMODEPOPUP_4X4},
+
+       {INPUT_MODE_QTY_ENGLISH,                LYT_PUNCTUATION_POPUP,                          KEYSET_PUNCTUATION_POPUP},
+       {INPUT_MODE_QTY_FRENCH,         LYT_PUNCTUATION_POPUP,                          KEYSET_PUNCTUATION_POPUP},
+       {INPUT_MODE_QTY_SPANISH,                LYT_PUNCTUATION_POPUP,                          KEYSET_PUNCTUATION_POPUP},
+       {INPUT_MODE_QTY_ITALIAN,                LYT_PUNCTUATION_POPUP,                          KEYSET_PUNCTUATION_POPUP},
+       {INPUT_MODE_QTY_DUTCH,          LYT_PUNCTUATION_POPUP,                          KEYSET_PUNCTUATION_POPUP},
+       {INPUT_MODE_QTY_PORTUGUESE,             LYT_PUNCTUATION_POPUP,                          KEYSET_PUNCTUATION_POPUP},
+       {INPUT_MODE_QTY_GERMAN,         LYT_PUNCTUATION_POPUP,                          KEYSET_PUNCTUATION_POPUP},
+       {INPUT_MODE_QTY_TURKISH,                LYT_PUNCTUATION_POPUP,                          KEYSET_PUNCTUATION_POPUP},
+       {INPUT_MODE_QTY_GREEK,          LYT_PUNCTUATION_POPUP,                          KEYSET_PUNCTUATION_POPUP},
+       {INPUT_MODE_QTY_RUSSIAN,                LYT_PUNCTUATION_POPUP,                          KEYSET_PUNCTUATION_POPUP},
+
+       {INPUT_MODE_QTY_ENGLISH,                LYT_EMOTICON_POPUP,                             KEYSET_EMOTICON_POPUP},
+       {INPUT_MODE_QTY_FRENCH,                 LYT_EMOTICON_POPUP,                             KEYSET_EMOTICON_POPUP},
+       {INPUT_MODE_QTY_SPANISH,                LYT_EMOTICON_POPUP,                             KEYSET_EMOTICON_POPUP},
+       {INPUT_MODE_QTY_ITALIAN,                LYT_EMOTICON_POPUP,                             KEYSET_EMOTICON_POPUP},
+       {INPUT_MODE_QTY_DUTCH,                  LYT_EMOTICON_POPUP,                             KEYSET_EMOTICON_POPUP},
+       {INPUT_MODE_QTY_PORTUGUESE,             LYT_EMOTICON_POPUP,                             KEYSET_EMOTICON_POPUP},
+       {INPUT_MODE_QTY_GERMAN,                 LYT_EMOTICON_POPUP,                             KEYSET_EMOTICON_POPUP},
+       {INPUT_MODE_QTY_TURKISH,                LYT_EMOTICON_POPUP,                             KEYSET_EMOTICON_POPUP},
+       {INPUT_MODE_QTY_GREEK,                  LYT_EMOTICON_POPUP,                             KEYSET_EMOTICON_POPUP},
+       {INPUT_MODE_QTY_RUSSIAN,                LYT_EMOTICON_POPUP,                             KEYSET_EMOTICON_POPUP},
+
+       {INPUT_MODE_QTY_URL,                    LYT_PUNCTUATION_POPUP,                          KEYSET_PUNCTUATION_POPUP},
+       {INPUT_MODE_QTY_EMAIL,                  LYT_PUNCTUATION_POPUP,                          KEYSET_PUNCTUATION_POPUP},
+       {INPUT_MODE_QTY_SYM_1,                  LYT_PUNCTUATION_POPUP,                          KEYSET_PUNCTUATION_POPUP},
+       {INPUT_MODE_QTY_SYM_2,                  LYT_PUNCTUATION_POPUP,                          KEYSET_PUNCTUATION_POPUP},
+       {INPUT_MODE_QTY_SYM_3,                  LYT_PUNCTUATION_POPUP,                          KEYSET_PUNCTUATION_POPUP},
+       {INPUT_MODE_QTY_SYM_4,                  LYT_PUNCTUATION_POPUP,                          KEYSET_PUNCTUATION_POPUP},
+
+       {INPUT_MODE_QTY_URL,                    LYT_EMOTICON_POPUP,                             KEYSET_EMOTICON_POPUP},
+       {INPUT_MODE_QTY_EMAIL,                  LYT_EMOTICON_POPUP,                             KEYSET_EMOTICON_POPUP},
+
+       {INPUT_MODE_QTY_URL,                    LYT_URL_POPUP,                                  KEYSET_URL_POPUP},
+       {INPUT_MODE_QTY_EMAIL,                  LYT_URL_POPUP,                                  KEYSET_URL_POPUP},
+       {INPUT_MODE_QTY_ENGLISH,                LYT_URL_POPUP,                                  KEYSET_URL_POPUP},
+       {INPUT_MODE_QTY_SYM_1,                  LYT_URL_POPUP,                                  KEYSET_URL_POPUP},
+       {INPUT_MODE_QTY_SYM_2,                  LYT_URL_POPUP,                                  KEYSET_URL_POPUP},
+       {INPUT_MODE_QTY_SYM_3,                  LYT_URL_POPUP,                                  KEYSET_URL_POPUP},
+       {INPUT_MODE_QTY_SYM_4,                  LYT_URL_POPUP,                                  KEYSET_URL_POPUP},
+       {INPUT_MODE_QTY_FRENCH,                 LYT_URL_POPUP,                                  KEYSET_URL_POPUP},
+       {INPUT_MODE_QTY_SPANISH,                LYT_URL_POPUP,                                  KEYSET_URL_POPUP},
+       {INPUT_MODE_QTY_ITALIAN,                LYT_URL_POPUP,                                  KEYSET_URL_POPUP},
+       {INPUT_MODE_QTY_DUTCH,                  LYT_URL_POPUP,                                  KEYSET_URL_POPUP},
+       {INPUT_MODE_QTY_PORTUGUESE,             LYT_URL_POPUP,                                  KEYSET_URL_POPUP},
+       {INPUT_MODE_QTY_GERMAN,                 LYT_URL_POPUP,                                  KEYSET_URL_POPUP},
+       {INPUT_MODE_QTY_TURKISH,                LYT_URL_POPUP,                                  KEYSET_URL_POPUP},
+       {INPUT_MODE_QTY_GREEK,                  LYT_URL_POPUP,                                  KEYSET_URL_POPUP},
+       {INPUT_MODE_QTY_RUSSIAN,                LYT_URL_POPUP,                                  KEYSET_URL_POPUP},
+
+};
+
+
+static McfSWButtonStyle mcf_swbutton_style[] = {
+       {
+               {5, 5},
+               {{255, 255, 255},{255, 255, 255}},
+               {{155, 155, 155},{255, 0, 0}},
+               0,
+               1.0
+       },
+};
+
+typedef enum _McfSWButtonStyleSet {
+       SW_BTN_STYLE_A,
+}McfSWButtonStyleSet;
+
+const McfDefaultConfigure mcf_default_configure = {
+       MCFDISPLAY_PORTRAIT,
+       INPUT_MODE_QTY_ENGLISH,
+       TRUE,
+       TRUE,
+       TRUE,
+       TRUE,
+       FALSE,
+       SW_BTN_STYLE_A,
+       {TOUCH_OFFSET_LEVEL_1,TOUCH_OFFSET_LEVEL_2},
+       {{0, 0},{0, 0}}
+};
+
+static McfLabelProperties CAND_LABEL_PROP = {
+       USED, DEFAULT_FONT_NAME, DEFAULT_FONT_SIZE, {{0 , 0, 0, 255}, {0, 0, 255, 255}}, LABEL_ALIGN_CENTER_MIDDLE
+};
+
+static McfLabelProperties ZOOMING_LABEL_PROP = {
+       USED, DEFAULT_FONT_NAME, 80, {{0 , 0, 0, 255}, {0, 0, 255, 255}}, LABEL_ALIGN_CENTER_MIDDLE
+};
+
+static McfLabelProperties AUTOPOPUP_LABEL_PROP = {
+       USED, DEFAULT_FONT_NAME, 54,     {
+                       {{255, 255, 255, 255}, COLOR_SHIFT_STATE_COLOR},
+                       {COLOR_SHIFT_STATE_COLOR, { 255, 255, 255, 255}},
+                       {COLOR_SHIFT_STATE_COLOR, { 255, 255, 255, 255}},
+       }, LABEL_ALIGN_CENTER_MIDDLE, 0, 0
+ };
+
+extern McfAutoPopupConfigure mcf_autopopup_configure;
+extern McfDimWndConfigure mcf_dim_window_configure;
+
+#define MAX_PRELOAD_IMG_CNT 0
+static const mcfchar* mcf_preload_image[MAX_PRELOAD_IMG_CNT] = {
+};
+
+static const McfNinePatchInfo mcf_nine_patch_info[] = {
+       {"textinput_moa_button1_nml.png", 3, 3, 3, 3},
+       {"textinput_moa_button1_function.png", 3, 3, 3, 3},
+       {"textinput_moa_button1_press.png", 3, 3, 3, 3},
+       {"textinput_moa_button1_press_drag.png", 3, 3, 3, 3},
+       {"textinput_moa_button1_press_drag_back.png", 3, 3, 3, 3},
+       {"textinput_moa_button1_press_drag_back_Diagonal.png", 3, 3, 3, 3},
+       {"textinput_moa_button2_nml.png", 3, 3, 3, 3},
+       {"textinput_moa_button2_press.png", 3, 3, 3, 3},
+       {"textinput_moa_button2_press_drag.png", 3, 3, 3, 3},
+       {"textinput_moa_button2_press_drag_back.png", 3, 3, 3, 3},
+       {"textinput_qwerty_button_nml.png", 3, 3, 3, 3},
+       {"textinput_qwerty_button_function.png", 3, 3, 3, 3},
+       {"textinput_qwerty_button_press.png", 3, 3, 3, 3},
+       {"textinput_qwerty_button_capslock_press.png", 3, 3, 3, 3},
+       {"textinput_bottom_button_nml.png", 3, 3, 3, 3},
+       {"textinput_bottom_button_function.png", 3, 3, 3, 3},
+       {"textinput_bottom_button_press.png", 3, 3, 3, 3},
+       {"textinput_popup_button_nml.png", 3, 3, 3, 3},
+       {"textinput_popup_button_press.png", 3, 3, 3, 3},
+       {"textinput_3x4_button_nml.png", 3, 3, 3, 3},
+       {"textinput_3x4_button_function.png", 3, 3, 3, 3},
+       {"textinput_3x4_button_press.png", 3, 3, 3, 3},
+       {"textinput_land_button_nml.png", 3, 3, 3, 3},
+       {"textinput_land_button_function.png", 3, 3, 3, 3},
+       {"textinput_land_button_press.png", 3, 3, 3, 3},
+       {"textinput_land_button_capslock_press.png", 3, 3, 3, 3},
+       {"textinput_land_button_press_drag.png", 3, 3, 3, 3},
+       {"textinput_land_button_press_drag_back.png", 3, 3, 3, 3},
+};
+
+typedef enum _MCFModifierDecoration {
+       MODIFIER_DECORATION_NONE = 0, // The 0 value decoration will never be drawn
+       MODIFIER_DECORATION_NUM
+}MCFModifierDecoration;
+
+extern McfModifierDecoration mcf_modifier_decoration[MODIFIER_DECORATION_NUM];
+
+const mcfdouble DEFAULT_SW_BTN_RECTANGLE_RADIUS = 10;
+
+
+//MCF_END_DECLS
+#endif
diff --git a/res/mcfresourcekeys.h b/res/mcfresourcekeys.h
new file mode 100755 (executable)
index 0000000..b7b9ed9
--- /dev/null
@@ -0,0 +1,1147 @@
+/*
+ * Copyright 2012  Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.tizenopensource.org/license
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+
+#ifndef __MCF_RESOURCEKEYS_H__
+#define __MCF_RESOURCEKEYS_H__
+
+/* Key properties(coordination, properties, ) definition */
+
+static McfLayoutKeyCoordination mcf_layout_key_coordination[MAX_LAYOUT][MAX_KEY] = {
+       /* fValid, x, y, width, height, addHitX, addHitY, popXOffset, popYOffset, popX, popY, popXWidth, popYHeight */
+       /* BASE */
+       /* LYT_PORTRAIT_4X4_DEFAULT */
+       {
+               {USED, 0, 443 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 48, 443 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 96, 443 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 144, 443 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 192, 443 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 240, 443 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 288, 443 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 336, 443 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 384, 443 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 432, 443 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+
+               {USED, 24, 537 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 72, 537 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 120, 537 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 168, 537 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 216, 537 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 264, 537 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 312, 537 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 360, 537 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 408, 537 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+
+               {USED, 0, 631 - 440, 72, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 72, 631 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 120, 631 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 168, 631 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 216, 631 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 264, 631 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 312, 631 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 360, 631 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 408, 631 - 440, 72, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+
+               {USED, 0, 725 - 440, 96, 75, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 96, 725 - 440, 72, 75, 0, 0, 0, 0, -208, -190, 0, 0, SUBLAYOUTID_NONE},
+
+               {USED, 168, 725 - 440, 144, 75, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_DEFAULT},
+               {USED, 312, 725 - 440, 72, 75, 0, 0, 0, 0, -208, -262, 0, 0, SUBLAYOUTID_DEFAULT},
+
+               {USED, 168, 725 - 440, 48, 75, 0, 0, 0, 0, -90, -137, 0, 0, SUBLAYOUTID_WITH_VOICE},
+               {USED, 216, 725 - 440, 96, 75, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_WITH_VOICE},
+               {USED, 312, 725 - 440, 72, 75, 0, 0, 0, 0, -208, -262, 0, 0, SUBLAYOUTID_WITH_VOICE},
+
+               {USED, 168, 725 - 440, 72, 75, 0, 0, 0, 0, -163, -305, 0, 0, SUBLAYOUTID_URL},
+               {USED, 240, 725 - 440, 48, 75, 0, 0, 0, 0, -163, -305, 0, 0, SUBLAYOUTID_URL},
+               {USED, 288, 725 - 440, 48, 75, 0, 0, 0, 0, -138, -243, 0, 0, SUBLAYOUTID_URL},
+               {USED, 336, 725 - 440, 48, 75, 0, 0, 0, 0, -208, -262, 0, 0, SUBLAYOUTID_URL},
+
+               {USED, 168, 725 - 440, 72, 75, 0, 0, 0, 0, -163, -305, 0, 0, SUBLAYOUTID_EMAIL},
+               {USED, 240, 725 - 440, 48, 75, 0, 0, 0, 0, -163, -305, 0, 0, SUBLAYOUTID_EMAIL},
+               {USED, 288, 725 - 440, 48, 75, 0, 0, 0, 0, -138, -243, 0, 0, SUBLAYOUTID_EMAIL},
+               {USED, 336, 725 - 440, 48, 75, 0, 0, 0, 0, -208, -262, 0, 0, SUBLAYOUTID_EMAIL},
+
+               {USED, 384, 725 - 440, 96, 75, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+
+               {NOT_USED,},
+       },
+
+       /* LYT_PORTRAIT_4X4_SYM */
+       {
+               {USED, 0, 443 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 48, 443 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 96, 443 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 144, 443 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 192, 443 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 240, 443 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 288, 443 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 336, 443 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 384, 443 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 432, 443 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+
+               {USED, 24, 537 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 72, 537 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 120, 537 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 168, 537 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 216, 537 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 264, 537 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 312, 537 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 360, 537 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 408, 537 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+
+               {USED, 0, 631 - 440, 72, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 72, 631 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 120, 631 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 168, 631 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 216, 631 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 264, 631 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 312, 631 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 360, 631 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 408, 631 - 440, 72, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+
+               {USED, 0, 725 - 440, 96, 75, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 96, 725 - 440, 72, 75, 0, 0, 0, 0, -208, -190, 0, 0, SUBLAYOUTID_NONE},
+
+               {USED, 168, 725 - 440, 144, 75, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_DEFAULT},
+               {USED, 312, 725 - 440, 72, 75, 0, 0, 0, 0, -208, -262, 0, 0, SUBLAYOUTID_DEFAULT},
+
+               {USED, 168, 725 - 440, 48, 75, 0, 0, 0, 0, -90, -137, 0, 0, SUBLAYOUTID_WITH_VOICE},
+               {USED, 216, 725 - 440, 96, 75, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_WITH_VOICE},
+               {USED, 312, 725 - 440, 72, 75, 0, 0, 0, 0, -208, -262, 0, 0, SUBLAYOUTID_WITH_VOICE},
+
+               {USED, 168, 725 - 440, 72, 75, 0, 0, 0, 0, -163, -305, 0, 0, SUBLAYOUTID_URL},
+               {USED, 240, 725 - 440, 48, 75, 0, 0, 0, 0, -163, -305, 0, 0, SUBLAYOUTID_URL},
+               {USED, 288, 725 - 440, 48, 75, 0, 0, 0, 0, -138, -243, 0, 0, SUBLAYOUTID_URL},
+               {USED, 336, 725 - 440, 48, 75, 0, 0, 0, 0, -208, -262, 0, 0, SUBLAYOUTID_URL},
+
+               {USED, 168, 725 - 440, 72, 75, 0, 0, 0, 0, -163, -305, 0, 0, SUBLAYOUTID_EMAIL},
+               {USED, 240, 725 - 440, 48, 75, 0, 0, 0, 0, -163, -305, 0, 0, SUBLAYOUTID_EMAIL},
+               {USED, 288, 725 - 440, 48, 75, 0, 0, 0, 0, -138, -243, 0, 0, SUBLAYOUTID_EMAIL},
+               {USED, 336, 725 - 440, 48, 75, 0, 0, 0, 0, -208, -262, 0, 0, SUBLAYOUTID_EMAIL},
+
+               {USED, 384, 725 - 440, 96, 75, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+
+               {NOT_USED,},
+       },
+
+       /* LYT_PORTRAIT_4X4_IPv6_123 */
+       {
+               {USED, 0, 443 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 48, 443 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 96, 443 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 144, 443 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 192, 443 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 240, 443 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 288, 443 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 336, 443 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 384, 443 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 432, 443 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+
+               {USED, 24, 537 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 72, 537 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 120, 537 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 168, 537 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 216, 537 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 264, 537 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 312, 537 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 360, 537 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 408, 537 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+
+               {USED, 0, 631 - 440, 72, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 72, 631 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 120, 631 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 168, 631 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 216, 631 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 264, 631 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 312, 631 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 360, 631 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 408, 631 - 440, 72, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+
+               {USED, 0, 725 - 440, 96, 75, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 96, 725 - 440, 72, 75, 0, 0, 0, 0, -208, -190, 0, 0, SUBLAYOUTID_NONE},
+
+               {USED, 168, 725 - 440, 144, 75, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_DEFAULT},
+               {USED, 312, 725 - 440, 72, 75, 0, 0, 0, 0, -208, -262, 0, 0, SUBLAYOUTID_DEFAULT},
+
+               {USED, 168, 725 - 440, 48, 75, 0, 0, 0, 0, -90, -137, 0, 0, SUBLAYOUTID_WITH_VOICE},
+               {USED, 216, 725 - 440, 96, 75, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_WITH_VOICE},
+               {USED, 312, 725 - 440, 72, 75, 0, 0, 0, 0, -208, -262, 0, 0, SUBLAYOUTID_WITH_VOICE},
+
+               {USED, 168, 725 - 440, 72, 75, 0, 0, 0, 0, -163, -305, 0, 0, SUBLAYOUTID_URL},
+               {USED, 240, 725 - 440, 48, 75, 0, 0, 0, 0, -163, -305, 0, 0, SUBLAYOUTID_URL},
+               {USED, 288, 725 - 440, 48, 75, 0, 0, 0, 0, -138, -243, 0, 0, SUBLAYOUTID_URL},
+               {USED, 336, 725 - 440, 48, 75, 0, 0, 0, 0, -208, -262, 0, 0, SUBLAYOUTID_URL},
+
+               {USED, 168, 725 - 440, 72, 75, 0, 0, 0, 0, -163, -305, 0, 0, SUBLAYOUTID_EMAIL},
+               {USED, 240, 725 - 440, 48, 75, 0, 0, 0, 0, -163, -305, 0, 0, SUBLAYOUTID_EMAIL},
+               {USED, 288, 725 - 440, 48, 75, 0, 0, 0, 0, -138, -243, 0, 0, SUBLAYOUTID_EMAIL},
+               {USED, 336, 725 - 440, 48, 75, 0, 0, 0, 0, -208, -262, 0, 0, SUBLAYOUTID_EMAIL},
+
+               {USED, 384, 725 - 440, 96, 75, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+
+               {NOT_USED,},
+       },
+
+       /* LYT_PORTRAIT_4X4_IPv6_ABC */
+       {
+               {USED, 0, 443 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 48, 443 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 96, 443 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 144, 443 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 192, 443 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 240, 443 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 288, 443 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 336, 443 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 384, 443 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 432, 443 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+
+               {USED, 24, 537 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 72, 537 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 120, 537 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 168, 537 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 216, 537 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 264, 537 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 312, 537 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 360, 537 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 408, 537 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+
+               {USED, 0, 631 - 440, 72, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 72, 631 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 120, 631 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 168, 631 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 216, 631 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 264, 631 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 312, 631 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 360, 631 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 408, 631 - 440, 72, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+
+               {USED, 0, 725 - 440, 96, 75, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 96, 725 - 440, 72, 75, 0, 0, 0, 0, -208, -190, 0, 0, SUBLAYOUTID_NONE},
+
+               {USED, 168, 725 - 440, 144, 75, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_DEFAULT},
+               {USED, 312, 725 - 440, 72, 75, 0, 0, 0, 0, -208, -262, 0, 0, SUBLAYOUTID_DEFAULT},
+
+               {USED, 168, 725 - 440, 48, 75, 0, 0, 0, 0, -90, -137, 0, 0, SUBLAYOUTID_WITH_VOICE},
+               {USED, 216, 725 - 440, 96, 75, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_WITH_VOICE},
+               {USED, 312, 725 - 440, 72, 75, 0, 0, 0, 0, -208, -262, 0, 0, SUBLAYOUTID_WITH_VOICE},
+
+               {USED, 168, 725 - 440, 72, 75, 0, 0, 0, 0, -163, -305, 0, 0, SUBLAYOUTID_URL},
+               {USED, 240, 725 - 440, 48, 75, 0, 0, 0, 0, -163, -305, 0, 0, SUBLAYOUTID_URL},
+               {USED, 288, 725 - 440, 48, 75, 0, 0, 0, 0, -138, -243, 0, 0, SUBLAYOUTID_URL},
+               {USED, 336, 725 - 440, 48, 75, 0, 0, 0, 0, -208, -262, 0, 0, SUBLAYOUTID_URL},
+
+               {USED, 168, 725 - 440, 72, 75, 0, 0, 0, 0, -163, -305, 0, 0, SUBLAYOUTID_EMAIL},
+               {USED, 240, 725 - 440, 48, 75, 0, 0, 0, 0, -163, -305, 0, 0, SUBLAYOUTID_EMAIL},
+               {USED, 288, 725 - 440, 48, 75, 0, 0, 0, 0, -138, -243, 0, 0, SUBLAYOUTID_EMAIL},
+               {USED, 336, 725 - 440, 48, 75, 0, 0, 0, 0, -208, -262, 0, 0, SUBLAYOUTID_EMAIL},
+
+               {USED, 384, 725 - 440, 96, 75, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+
+               {NOT_USED,},
+       },
+
+       /* LYT_PORTRAIT_4X4_NUMONLY */
+       {
+               {USED, 0, 443 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 48, 443 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 96, 443 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 144, 443 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 192, 443 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 240, 443 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 288, 443 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 336, 443 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 384, 443 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 432, 443 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+
+               {USED, 24, 537 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 72, 537 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 120, 537 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 168, 537 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 216, 537 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 264, 537 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 312, 537 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 360, 537 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 408, 537 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+
+               {USED, 0, 631 - 440, 72, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 72, 631 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 120, 631 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 168, 631 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 216, 631 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 264, 631 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 312, 631 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 360, 631 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 408, 631 - 440, 72, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+
+               {USED, 0, 725 - 440, 96, 75, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 96, 725 - 440, 72, 75, 0, 0, 0, 0, -208, -190, 0, 0, SUBLAYOUTID_NONE},
+
+               {USED, 168, 725 - 440, 144, 75, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_DEFAULT},
+               {USED, 312, 725 - 440, 72, 75, 0, 0, 0, 0, -208, -262, 0, 0, SUBLAYOUTID_DEFAULT},
+
+               {USED, 168, 725 - 440, 48, 75, 0, 0, 0, 0, -90, -137, 0, 0, SUBLAYOUTID_WITH_VOICE},
+               {USED, 216, 725 - 440, 96, 75, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_WITH_VOICE},
+               {USED, 312, 725 - 440, 72, 75, 0, 0, 0, 0, -208, -262, 0, 0, SUBLAYOUTID_WITH_VOICE},
+
+               {USED, 168, 725 - 440, 72, 75, 0, 0, 0, 0, -163, -305, 0, 0, SUBLAYOUTID_URL},
+               {USED, 240, 725 - 440, 48, 75, 0, 0, 0, 0, -163, -305, 0, 0, SUBLAYOUTID_URL},
+               {USED, 288, 725 - 440, 48, 75, 0, 0, 0, 0, -138, -243, 0, 0, SUBLAYOUTID_URL},
+               {USED, 336, 725 - 440, 48, 75, 0, 0, 0, 0, -208, -262, 0, 0, SUBLAYOUTID_URL},
+
+               {USED, 168, 725 - 440, 72, 75, 0, 0, 0, 0, -163, -305, 0, 0, SUBLAYOUTID_EMAIL},
+               {USED, 240, 725 - 440, 48, 75, 0, 0, 0, 0, -163, -305, 0, 0, SUBLAYOUTID_EMAIL},
+               {USED, 288, 725 - 440, 48, 75, 0, 0, 0, 0, -138, -243, 0, 0, SUBLAYOUTID_EMAIL},
+               {USED, 336, 725 - 440, 48, 75, 0, 0, 0, 0, -208, -262, 0, 0, SUBLAYOUTID_EMAIL},
+
+               {USED, 384, 725 - 440, 96, 75, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+
+               {NOT_USED,},
+       },
+
+       /* LYT_PORTRAIT_4X4_MONTH */
+       {
+               {USED, 0, 443 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 48, 443 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 96, 443 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 144, 443 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 192, 443 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 240, 443 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 288, 443 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 336, 443 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 384, 443 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 432, 443 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+
+               {USED, 24, 537 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 72, 537 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 120, 537 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 168, 537 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 216, 537 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 264, 537 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 312, 537 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 360, 537 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 408, 537 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+
+               {USED, 0, 631 - 440, 72, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 72, 631 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 120, 631 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 168, 631 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 216, 631 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 264, 631 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 312, 631 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 360, 631 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 408, 631 - 440, 72, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+
+               {USED, 0, 725 - 440, 96, 75, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 96, 725 - 440, 72, 75, 0, 0, 0, 0, -208, -190, 0, 0, SUBLAYOUTID_NONE},
+
+               {USED, 168, 725 - 440, 144, 75, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_DEFAULT},
+               {USED, 312, 725 - 440, 72, 75, 0, 0, 0, 0, -208, -262, 0, 0, SUBLAYOUTID_DEFAULT},
+
+               {USED, 168, 725 - 440, 48, 75, 0, 0, 0, 0, -90, -137, 0, 0, SUBLAYOUTID_WITH_VOICE},
+               {USED, 216, 725 - 440, 96, 75, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_WITH_VOICE},
+               {USED, 312, 725 - 440, 72, 75, 0, 0, 0, 0, -208, -262, 0, 0, SUBLAYOUTID_WITH_VOICE},
+
+               {USED, 168, 725 - 440, 72, 75, 0, 0, 0, 0, -163, -305, 0, 0, SUBLAYOUTID_URL},
+               {USED, 240, 725 - 440, 48, 75, 0, 0, 0, 0, -163, -305, 0, 0, SUBLAYOUTID_URL},
+               {USED, 288, 725 - 440, 48, 75, 0, 0, 0, 0, -138, -243, 0, 0, SUBLAYOUTID_URL},
+               {USED, 336, 725 - 440, 48, 75, 0, 0, 0, 0, -208, -262, 0, 0, SUBLAYOUTID_URL},
+
+               {USED, 168, 725 - 440, 72, 75, 0, 0, 0, 0, -163, -305, 0, 0, SUBLAYOUTID_EMAIL},
+               {USED, 240, 725 - 440, 48, 75, 0, 0, 0, 0, -163, -305, 0, 0, SUBLAYOUTID_EMAIL},
+               {USED, 288, 725 - 440, 48, 75, 0, 0, 0, 0, -138, -243, 0, 0, SUBLAYOUTID_EMAIL},
+               {USED, 336, 725 - 440, 48, 75, 0, 0, 0, 0, -208, -262, 0, 0, SUBLAYOUTID_EMAIL},
+
+               {USED, 384, 725 - 440, 96, 75, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+
+               {NOT_USED,},
+       },
+
+       /* LYT_PORTRAIT_QTY_DEFAULT */
+       {
+               {USED, 0, 443 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 48, 443 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 96, 443 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 144, 443 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 192, 443 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 240, 443 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 288, 443 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 336, 443 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 384, 443 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 432, 443 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+
+               {USED, 24, 537 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 72, 537 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 120, 537 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 168, 537 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 216, 537 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 264, 537 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 312, 537 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 360, 537 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 408, 537 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+
+               {USED, 0, 631 - 440, 72, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 72, 631 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 120, 631 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 168, 631 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 216, 631 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 264, 631 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 312, 631 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 360, 631 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 408, 631 - 440, 72, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+
+               {USED, 0, 725 - 440, 96, 75, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 96, 725 - 440, 72, 75, 0, 0, 0, 0, -108, -190, 0, 0, SUBLAYOUTID_NONE},
+
+               {USED, 168, 725 - 440, 144, 75, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_DEFAULT},
+               {USED, 312, 725 - 440, 72, 75, 0, 0, 0, 0, -208, -262, 0, 0, SUBLAYOUTID_DEFAULT},
+
+               {USED, 168, 725 - 440, 48, 75, 0, 0, 0, 0, -90, -137, 0, 0, SUBLAYOUTID_WITH_VOICE},
+               {USED, 216, 725 - 440, 96, 75, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_WITH_VOICE},
+               {USED, 312, 725 - 440, 72, 75, 0, 0, 0, 0, -208, -262, 0, 0, SUBLAYOUTID_WITH_VOICE},
+
+               {USED, 168, 725 - 440, 72, 75, 0, 0, 0, 0, -163, -305, 0, 0, SUBLAYOUTID_URL},
+               {USED, 240, 725 - 440, 48, 75, 0, 0, 0, 0, -163, -305, 0, 0, SUBLAYOUTID_URL},
+               {USED, 288, 725 - 440, 48, 75, 0, 0, 0, 0, -138, -243, 0, 0, SUBLAYOUTID_URL},
+               {USED, 336, 725 - 440, 48, 75, 0, 0, 0, 0, -208, -262, 0, 0, SUBLAYOUTID_URL},
+
+               {USED, 168, 725 - 440, 72, 75, 0, 0, 0, 0, -163, -305, 0, 0, SUBLAYOUTID_EMAIL},
+               {USED, 240, 725 - 440, 48, 75, 0, 0, 0, 0, -163, -305, 0, 0, SUBLAYOUTID_EMAIL},
+               {USED, 288, 725 - 440, 48, 75, 0, 0, 0, 0, -138, -243, 0, 0, SUBLAYOUTID_EMAIL},
+               {USED, 336, 725 - 440, 48, 75, 0, 0, 0, 0, -208, -262, 0, 0, SUBLAYOUTID_EMAIL},
+
+               {USED, 384, 725 - 440, 96, 75, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+
+               {NOT_USED,},
+       },
+
+       /* LYT_PORTRAIT_AZT_DEFAULT */
+       {
+               {USED, 0, 443 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 48, 443 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 96, 443 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 144, 443 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 192, 443 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 240, 443 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 288, 443 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 336, 443 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 384, 443 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 432, 443 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+
+               {USED, 0,  537 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 48, 537 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 96, 537 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 144, 537 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 192, 537 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 240, 537 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 288, 537 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 336, 537 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 384, 537 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 432, 537 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+
+               {USED, 0, 631 - 440, 96, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 96, 631 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 144, 631 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 192, 631 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 240, 631 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 288, 631 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 336, 631 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 384, 631 - 440, 96, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+
+               {USED, 0, 725 - 440, 96, 75, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 96, 725 - 440, 72, 75, 0, 0, 0, 0, -108, -190, 0, 0, SUBLAYOUTID_NONE},
+
+               {USED, 168, 725 - 440, 144, 75, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_DEFAULT},
+               {USED, 312, 725 - 440, 72, 75, 0, 0, 0, 0, -208, -262, 0, 0, SUBLAYOUTID_DEFAULT},
+
+               {USED, 168, 725 - 440, 48, 75, 0, 0, 0, 0, -90, -137, 0, 0, SUBLAYOUTID_WITH_VOICE},
+               {USED, 216, 725 - 440, 96, 75, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_WITH_VOICE},
+               {USED, 312, 725 - 440, 72, 75, 0, 0, 0, 0, -208, -262, 0, 0, SUBLAYOUTID_WITH_VOICE},
+
+               {USED, 168, 725 - 440, 72, 75, 0, 0, 0, 0, -163, -305, 0, 0, SUBLAYOUTID_URL},
+               {USED, 240, 725 - 440, 48, 75, 0, 0, 0, 0, -163, -305, 0, 0, SUBLAYOUTID_URL},
+               {USED, 288, 725 - 440, 48, 75, 0, 0, 0, 0, -138, -243, 0, 0, SUBLAYOUTID_URL},
+               {USED, 336, 725 - 440, 48, 75, 0, 0, 0, 0, -208, -262, 0, 0, SUBLAYOUTID_URL},
+
+               {USED, 168, 725 - 440, 72, 75, 0, 0, 0, 0, -163, -305, 0, 0, SUBLAYOUTID_EMAIL},
+               {USED, 240, 725 - 440, 48, 75, 0, 0, 0, 0, -163, -305, 0, 0, SUBLAYOUTID_EMAIL},
+               {USED, 288, 725 - 440, 48, 75, 0, 0, 0, 0, -138, -243, 0, 0, SUBLAYOUTID_EMAIL},
+               {USED, 336, 725 - 440, 48, 75, 0, 0, 0, 0, -208, -262, 0, 0, SUBLAYOUTID_EMAIL},
+
+               {USED, 384, 725 - 440, 96, 75, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+
+               {NOT_USED,},
+       },
+
+       /* LYT_PORTRAIT_QTY_URL */
+       {
+               {USED, 0, 443 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 48, 443 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 96, 443 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 144, 443 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 192, 443 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 240, 443 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 288, 443 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 336, 443 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 384, 443 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 432, 443 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+
+               {USED, 24, 537 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 72, 537 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 120, 537 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 168, 537 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 216, 537 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 264, 537 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 312, 537 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 360, 537 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 408, 537 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+
+               {USED, 0, 631 - 440, 72, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 72, 631 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 120, 631 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 168, 631 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 216, 631 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 264, 631 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 312, 631 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 360, 631 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 408, 631 - 440, 72, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+
+               {USED, 0, 725 - 440, 96, 75, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 96, 725 - 440, 72, 75, 0, 0, 0, 0, -108, -190, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 168, 725 - 440, 54, 75, 0, 0, 0, 0, -163, -305, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 222, 725 - 440, 54, 75, 0, 0, 0, 0, -163, -305, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 276, 725 - 440, 54, 75, 0, 0, 0, 0, -138, -243, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 330, 725 - 440, 54, 75, 0, 0, 0, 0, -208, -262, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 384, 725 - 440, 96, 75, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+
+               {NOT_USED,},
+       },
+
+       /* LYT_PORTRAIT_QTY_EMAIL */
+       {
+               {USED, 0, 443 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 48, 443 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 96, 443 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 144, 443 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 192, 443 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 240, 443 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 288, 443 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 336, 443 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 384, 443 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 432, 443 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+
+               {USED, 24, 537 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 72, 537 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 120, 537 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 168, 537 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 216, 537 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 264, 537 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 312, 537 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 360, 537 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 408, 537 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+
+               {USED, 0, 631 - 440, 72, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 72, 631 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 120, 631 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 168, 631 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 216, 631 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 264, 631 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 312, 631 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 360, 631 - 440, 48, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 408, 631 - 440, 72, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+
+               {USED, 0, 725 - 440, 96, 75, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 96, 725 - 440, 72, 75, 0, 0, 0, 0, -108, -190, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 168, 725 - 440, 72, 75, 0, 0, 0, 0, -163, -305, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 240, 725 - 440, 48, 75, 0, 0, 0, 0, -163, -305, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 288, 725 - 440, 48, 75, 0, 0, 0, 0, -138, -243, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 336, 725 - 440, 48, 75, 0, 0, 0, 0, -208, -262, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 384, 725 - 440, 96, 75, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+
+               {NOT_USED,},
+       },
+
+       /* LYT_PORTRAIT_QTY_RUSSIAN */
+       {
+               {USED, 0,   443 - 440, 40, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 40,  443 - 440, 40, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 80,  443 - 440, 40, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 120, 443 - 440, 40, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 160, 443 - 440, 40, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 200, 443 - 440, 40, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 240, 443 - 440, 40, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 280, 443 - 440, 40, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 320, 443 - 440, 40, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 360, 443 - 440, 40, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 400, 443 - 440, 40, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 440, 443 - 440, 40, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+
+               {USED, 20,  537 - 440, 40, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 60,  537 - 440, 40, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 100, 537 - 440, 40, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 140, 537 - 440, 40, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 180, 537 - 440, 40, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 220, 537 - 440, 40, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 260, 537 - 440, 40, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 300, 537 - 440, 40, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 340, 537 - 440, 40, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 380, 537 - 440, 40, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 420, 537 - 440, 40, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+
+               {USED, 0,   631 - 440, 40, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 40,  631 - 440, 40, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 80,  631 - 440, 40, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 120, 631 - 440, 40, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 160, 631 - 440, 40, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 200, 631 - 440, 40, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 240, 631 - 440, 40, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 280, 631 - 440, 40, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 320, 631 - 440, 40, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 360, 631 - 440, 40, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 400, 631 - 440, 40, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 440, 631 - 440, 40, 93, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+
+               {USED, 0,   725 - 440, 96, 75, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 96, 725 - 440, 72, 75, 0, 0, 0, 0, -108, -190, 0, 0, SUBLAYOUTID_NONE},
+
+               {USED, 168, 725 - 440, 144, 75, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_DEFAULT},
+               {USED, 312, 725 - 440, 72, 75, 0, 0, 0, 0, -208, -262, 0, 0, SUBLAYOUTID_DEFAULT},
+
+               {USED, 168, 725 - 440, 48, 75, 0, 0, 0, 0, -90, -137, 0, 0, SUBLAYOUTID_WITH_VOICE},
+               {USED, 216, 725 - 440, 96, 75, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_WITH_VOICE},
+               {USED, 312, 725 - 440, 72, 75, 0, 0, 0, 0, -208, -262, 0, 0, SUBLAYOUTID_WITH_VOICE},
+
+               {USED, 168, 725 - 440, 72, 75, 0, 0, 0, 0, -163, -305, 0, 0, SUBLAYOUTID_URL},
+               {USED, 240, 725 - 440, 48, 75, 0, 0, 0, 0, -163, -305, 0, 0, SUBLAYOUTID_URL},
+               {USED, 288, 725 - 440, 48, 75, 0, 0, 0, 0, -138, -243, 0, 0, SUBLAYOUTID_URL},
+               {USED, 336, 725 - 440, 48, 75, 0, 0, 0, 0, -208, -262, 0, 0, SUBLAYOUTID_URL},
+
+               {USED, 168, 725 - 440, 72, 75, 0, 0, 0, 0, -163, -305, 0, 0, SUBLAYOUTID_EMAIL},
+               {USED, 240, 725 - 440, 48, 75, 0, 0, 0, 0, -163, -305, 0, 0, SUBLAYOUTID_EMAIL},
+               {USED, 288, 725 - 440, 48, 75, 0, 0, 0, 0, -138, -243, 0, 0, SUBLAYOUTID_EMAIL},
+               {USED, 336, 725 - 440, 48, 75, 0, 0, 0, 0, -208, -262, 0, 0, SUBLAYOUTID_EMAIL},
+
+               {USED, 384, 725 - 440, 96, 75, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+
+               {NOT_USED,},
+       },
+
+       /* LYT_LANDSCAPE_QTY_RUSSIAN */
+       { NULL},
+
+       /* LYT_LANDSCAPE_QTY_DEFAULT */
+       { NULL},
+
+       /* LYT_LANDSCAPE_AZT_FRENCH */
+       { NULL},
+
+       /* LYT_LANDSCAPE_QTY_URL */
+       { NULL},
+
+       /* LYT_LANDSCAPE_QTY_EMAIL */
+       { NULL},
+
+       /* LYT_LANDSCAPE_4X4_NUM */
+       { NULL},
+
+       /* LYT_LANDSCAPE_4X4_PASSWD */
+       { NULL},
+
+       /* LYT_LANDSCAPE_4X4_IPv6_123 */
+       { NULL},
+
+       /* LYT_LANDSCAPE_4X4_IPv6_ABC */
+       { NULL},
+
+       /* LYT_LANDSCAPE_4X4_NUMONLY */
+       { NULL},
+
+       /*POPUP*/
+       {
+               {USED, 4, 10, 118, 80, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 4, 90, 118, 80, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 4, 170, 118, 80, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 4, 250, 118, 80, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 4, 330, 118, 80, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+
+               {NOT_USED,},
+       },
+
+       /* POPUP_PUNCTUATION */
+       {
+               {USED, 112 - 107, 464 - 459, 58, 80, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 170 - 107, 464 - 459, 58, 80, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 228 - 107, 464 - 459, 58, 80, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 286 - 107, 464 - 459, 58, 80, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 344 - 107, 464 - 459, 58, 80, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 402 - 107, 464 - 459, 58, 80, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 112 - 107, 544 - 459, 58, 80, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 170 - 107, 544 - 459, 58, 80, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 228 - 107, 544 - 459, 58 * 2, 80, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 344 - 107, 544 - 459, 58 * 2, 80, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 112 - 107, 624 - 459, 87, 80, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 199 - 107, 624 - 459, 87, 80, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 286 - 107, 624 - 459, 87, 80, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 373 - 107, 624 - 459, 87, 80, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+
+               {NOT_USED,},
+       },
+
+       /* POPUP_EMOTICON */
+       {
+               {USED, 4, 4, 70, 80, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 74, 4, 70, 80, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 144, 4, 70, 80, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 214, 4, 70, 80, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 284, 4, 70, 80, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 4, 84, 70, 80, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 74,  84, 70, 80, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 144, 84, 70, 80, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 214, 84, 70, 80, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 284, 84, 70, 80, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+
+               {NOT_USED,},
+       },
+
+       /* POPUP_URL */
+       {
+               {USED, 135 - 130, 480 - 475, 140, 56, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 275 - 130, 480 - 475, 140, 56, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 135 - 130, 536 - 475, 140, 56, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 275 - 130, 536 - 475, 140, 56, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 135 - 130, 592 - 475, 140, 56, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 275 - 130, 592 - 475, 140, 56, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 135 - 130, 648 - 475, 140, 56, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+               {USED, 275 - 130, 648 - 475, 140, 56, 0, 0, 0, 0, 0, 0, 0, 0, SUBLAYOUTID_NONE},
+
+               {NOT_USED,},
+       },
+};
+
+#define KEY_CONFIGURE_PHASE
+static McfLayoutKeyConfigure mcf_layout_key_configure[MAX_KEYSET][MAX_KEY] = {
+       /* fValid, buttonType, keyType, popupType, fUsePreviewZoom, fChangable, fEnable, popupNum */
+
+       /* KEYSET_PORTRAIT_4X4_ENGLISH */
+{NULL}
+       ,
+       /* KEYSET_PORTRAIT_4X4_NUM */
+#include "mcfresource-port-qty-sym1.h"
+       ,
+       /* KEYSET_PORTRAIT_4X4_SYM_1 */
+#include "mcfresource-port-qty-sym1.h"
+       ,
+       /* KEYSET_PORTRAIT_4X4_SYM_2 */
+#include "mcfresource-port-qty-sym2.h"
+       ,
+       /* KEYSET_PORTRAIT_4X4_SYM_3 */
+#include "mcfresource-port-qty-sym3.h"
+       ,
+       /* KEYSET_PORTRAIT_4X4_SYM_4 */
+#include "mcfresource-port-qty-sym4.h"
+       ,
+       /* KEYSET_PORTRAIT_4X4_SYM_5 */
+#include "mcfresource-port-qty-sym1.h"
+       ,
+       /* KEYSET_PORTRAIT_4X4_TELEPHONE */
+#include "mcfresource-port-qty-sym1.h"
+       ,
+       /* KEYSET_PORTRAIT_4X4_URL */
+#include "mcfresource-port-qty-sym1.h"
+       ,
+       /* KEYSET_PORTRAIT_4X4_EMAIL */
+{NULL}
+       ,
+       /* KEYSET_PORTRAIT_4X4_PASSWD */
+#include "mcfresource-port-qty-sym1.h"
+       ,
+       /* KEYSET_PORTRAIT_4X4_IPv6_123 */
+#include "mcfresource-port-qty-sym1.h"
+       ,
+       /* KEYSET_PORTRAIT_4X4_IPv6_ABC */
+#include "mcfresource-port-qty-sym1.h"
+       ,
+       /* KEYSET_PORTRAIT_4X4_NUMONLY */
+#include "mcfresource-port-qty-sym1.h"
+       ,
+       /* KEYSET_PORTRAIT_4X4_MONTH */
+#include "mcfresource-port-qty-sym1.h"
+       ,
+       /* KEYSET_PORTRAIT_4X4_FRENCH */
+{NULL}
+       ,
+       /* KEYSET_PORTRAIT_4X4_SPANISH */
+{NULL}
+       ,
+       /* KEYSET_PORTRAIT_4X4_ITALIAN */
+{NULL}
+       ,
+       /* KEYSET_PORTRAIT_4X4_DUTCH */
+{NULL}
+       ,
+
+       /* KEYSET_PORTRAIT_4X4_PORTUGUESE */
+       /*10*/
+{NULL}
+       ,
+
+       /* KEYSET_PORTRAIT_4X4_GERMAN*/
+{NULL}
+       ,
+
+       /* KEYSET_PORTRAIT_4X4_TURKISH*/
+{NULL}
+       ,
+    /* KEYSET_PORTRAIT_4X4_GREEK*/
+{NULL}
+       ,
+    /* KEYSET_PORTRAIT_4X4_RUSSIAN*/
+{NULL}
+       ,
+
+       /* KEYSET_PORTRAIT_QTY_ENGLISH */
+#include "mcfresource-port-qty-english.h"
+       ,
+
+       /*KEYSET_PORTRAIT_QTY_URL*/
+#include "mcfresource-port-qty-url.h"
+       ,
+       /*KEYSET_PORTRAIT_QTY_EMAIL*/
+#include "mcfresource-port-qty-email.h"
+       ,
+       /*KEYSET_PORTRAIT_QTY_SYM_1*/
+#include "mcfresource-port-qty-sym1.h"
+       ,
+       /*KEYSET_PORTRAIT_QTY_SYM_2*/
+#include "mcfresource-port-qty-sym2.h"
+       ,
+       /*KEYSET_PORTRAIT_QTY_SYM_3*/
+#include "mcfresource-port-qty-sym3.h"
+       ,
+       /*KEYSET_PORTRAIT_QTY_SYM_4*/
+#include "mcfresource-port-qty-sym4.h"
+       ,
+       /* KEYSET_PORTRAIT_QTY_FRENCH */
+#include "mcfresource-port-qty-french.h"
+       ,
+
+       /* KEYSET_PORTRAIT_QTY_SPANISH */
+#include "mcfresource-port-qty-spanish.h"
+       ,
+
+       /* KEYSET_PORTRAIT_QTY_ITALIAN */
+#include "mcfresource-port-qty-italian.h"
+       ,
+
+       /* KEYSET_PORTRAIT_QTY_DUTCH */
+#include "mcfresource-port-qty-dutch.h"
+       ,
+
+       /* KEYSET_PORTRAIT_QTY_PORTUGUESE */
+#include "mcfresource-port-qty-portuguese.h"
+       ,
+
+       /* KEYSET_PORTRAIT_QTY_GERMAN */
+#include "mcfresource-port-qty-german.h"
+       ,
+
+       /* KEYSET_PORTRAIT_QTY_TURKISH*/
+#include "mcfresource-port-qty-turkish.h"
+       ,
+       /* KEYSET_PORTRAIT_QTY_GREEK*/
+#include "mcfresource-port-qty-greek.h"
+       ,
+       /* KEYSET_PORTRAIT_QTY_RUSSIAN*/
+#include "mcfresource-port-qty-russian.h"
+       ,
+
+       /* KEYSET_LANDSCAPE_QTY_ENGLISH */
+{NULL}
+       ,
+
+       /* KEYSET_LANDSCAPE_QTY_URL */
+{NULL}
+       ,
+       /* KEYSET_LANDSCAPE_QTY_EMAIL */
+{NULL}
+       ,
+       /* KEYSET_LANDSCAPE_QTY_FRENCH */
+{NULL}
+       ,
+
+
+       /* KEYSET_LANDSCAPE_QTY_SPANNISH */
+{NULL}
+       ,
+
+       /* KEYSET_LANDSCAPE_QTY_ITALIAN */
+{NULL}
+       ,
+
+       /* KEYSET_LANDSCAPE_QTY_DUTCH */
+{NULL}
+       ,
+
+       /* KEYSET_LANDSCAPE_QTY_PORTYGUESE*/
+{NULL}
+       ,
+
+    /* KEYSET_LANDSCAPE_QTY_GERMAN */
+{NULL}
+       ,
+
+       /* KEYSET_LANDSCAPE_QTY_TURKISH*/
+{NULL}
+       ,
+       /* KEYSET_LANDSCAPE_QTY_GREEK*/
+{NULL}
+       ,
+       /* KEYSET_LANDSCAPE_QTY_RUSSIAN*/
+{NULL}
+       ,
+       /* KEYSET_LANDSCAPE_4X4_NUM*/
+{NULL}
+       ,
+       /* KEYSET_LANDSCAPE_4X4_PASSWD*/
+{NULL}
+       ,
+       /* KEYSET_LANDSCAPE_4X4_IPv6_123*/
+{NULL}
+       ,
+       /* KEYSET_LANDSCAPE_4X4_IPv6_ABC*/
+{NULL}
+       ,
+       /* KEYSET_LANDSCAPE_4X4_NUMONLY*/
+{NULL}
+       ,
+       /* KEYSET_LANDSCAPE_4X4_MONTH*/
+{NULL}
+       ,
+       /* KEYSET_EMOTICON_POPUP*/
+#include "mcfresource-emoticon-popup.h"
+       ,
+       /*KEYSET_PORTRAIT_4x4_POPUP*/
+#include "mcfresource-popup.h"
+
+};
+
+#undef KEY_CONFIGURE_PHASE
+
+#define KEY_PROPERTIES_PHASE
+static McfLayoutKeyProperties mcf_layout_key_properties[MAX_KEYSET][MAX_KEY] = {
+       /* fValid, labelCnt, label, labelPropId, imgPath, keyValueCnt, keyValue, keyEvent, longKeyValue, longKeyEvent, userLabel,  userKeyValue,  userKeyEvent, */
+       /* KEYSET_PORTRAIT_4X4_ENGLISH */
+{NULL}
+       ,
+       /* KEYSET_PORTRAIT_4X4_NUM */
+#include "mcfresource-port-qty-sym1.h"
+       ,
+       /* KEYSET_PORTRAIT_4X4_SYM_1 */
+#include "mcfresource-port-qty-sym1.h"
+       ,
+       /* KEYSET_PORTRAIT_4X4_SYM_2 */
+#include "mcfresource-port-qty-sym2.h"
+       ,
+       /* KEYSET_PORTRAIT_4X4_SYM_3 */
+#include "mcfresource-port-qty-sym3.h"
+       ,
+       /* KEYSET_PORTRAIT_4X4_SYM_4 */
+#include "mcfresource-port-qty-sym4.h"
+       ,
+       /* KEYSET_PORTRAIT_4X4_SYM_5 */
+#include "mcfresource-port-qty-sym1.h"
+       ,
+       /* KEYSET_PORTRAIT_4X4_TELEPHONE */
+#include "mcfresource-port-qty-sym1.h"
+       ,
+       /* KEYSET_PORTRAIT_4X4_URL */
+#include "mcfresource-port-qty-sym1.h"
+       ,
+       /* KEYSET_PORTRAIT_4X4_EMAIL */
+{NULL}
+       ,
+       /* KEYSET_PORTRAIT_4X4_PASSWD */
+#include "mcfresource-port-qty-sym1.h"
+       ,
+       /* KEYSET_PORTRAIT_4X4_IPv6_123 */
+#include "mcfresource-port-qty-sym1.h"
+       ,
+       /* KEYSET_PORTRAIT_4X4_IPv6_ABC */
+#include "mcfresource-port-qty-sym1.h"
+       ,
+       /* KEYSET_PORTRAIT_4X4_NUMONLY */
+#include "mcfresource-port-qty-sym1.h"
+       ,
+       /* KEYSET_PORTRAIT_4X4_MONTH */
+#include "mcfresource-port-qty-sym1.h"
+       ,
+       /* KEYSET_PORTRAIT_4X4_FRENCH */
+{NULL}
+       ,
+       /* KEYSET_PORTRAIT_4X4_SPANISH */
+{NULL}
+       ,
+       /* KEYSET_PORTRAIT_4X4_ITALIAN */
+{NULL}
+       ,
+       /* KEYSET_PORTRAIT_4X4_DUTCH */
+{NULL}
+       ,
+
+       /* KEYSET_PORTRAIT_4X4_PORTUGUESE */
+{NULL}
+       ,
+
+       /* KEYSET_PORTRAIT_4X4_GERMAN*/
+{NULL}
+       ,
+
+       /* KEYSET_PORTRAIT_4X4_TURKISH*/
+{NULL}
+       ,
+       /* KEYSET_PORTRAIT_4X4_GREEK*/
+{NULL}
+       ,
+       /* KEYSET_PORTRAIT_4X4_RUSSIAN*/
+{NULL}
+       ,
+       /* KEYSET_PORTRAIT_QTY_SYM */
+#include "mcfresource-port-qty-english.h"
+       ,
+       /*KEYSET_PORTRAIT_QTY_URL*/
+#include "mcfresource-port-qty-url.h"
+       ,
+
+       /*KEYSET_PORTRAIT_QTY_EMAIL*/
+#include "mcfresource-port-qty-email.h"
+       ,
+       /*KEYSET_PORTRAIT_QTY_SYM_1*/
+#include "mcfresource-port-qty-sym1.h"
+       ,
+       /*KEYSET_PORTRAIT_QTY_SYM_2*/
+#include "mcfresource-port-qty-sym2.h"
+       ,
+       /*KEYSET_PORTRAIT_QTY_SYM_3*/
+#include "mcfresource-port-qty-sym3.h"
+       ,
+       /*KEYSET_PORTRAIT_QTY_SYM_4*/
+#include "mcfresource-port-qty-sym4.h"
+       ,
+       /* KEYSET_PORTRAIT_QTY_FRENCH */
+#include "mcfresource-port-qty-french.h"
+       ,
+
+       /* KEYSET_PORTRAIT_QTY_SPANISH */
+#include "mcfresource-port-qty-spanish.h"
+       ,
+
+       /* KEYSET_PORTRAIT_QTY_ITALIAN */
+#include "mcfresource-port-qty-italian.h"
+       ,
+
+       /* KEYSET_PORTRAIT_QTY_DUTCH */
+#include "mcfresource-port-qty-dutch.h"
+       ,
+
+       /* KEYSET_PORTRAIT_QTY_PORTUGUESE */
+#include "mcfresource-port-qty-portuguese.h"
+       ,
+
+       /* KEYSET_PORTRAIT_QTY_GERMAN */
+#include "mcfresource-port-qty-german.h"
+       ,
+
+       /* KEYSET_PORTRAIT_QTY_TURKISH*/
+#include "mcfresource-port-qty-turkish.h"
+       ,
+       /* KEYSET_PORTRAIT_QTY_GREEK*/
+#include "mcfresource-port-qty-greek.h"
+       ,
+       /* KEYSET_PORTRAIT_QTY_RUSSIAN*/
+#include "mcfresource-port-qty-russian.h"
+       ,
+       /* KEYSET_LANDSCAPE_QTY_ENGLISH */
+{NULL}
+       ,
+
+       /* KEYSET_LANDSCAPE_QTY_URL */
+{NULL}
+       ,
+
+       /* KEYSET_LANDSCAPE_QTY_EMAIL */
+{NULL}
+       ,
+       /* KEYSET_LANDSCAPE_QTY_FRENCH */
+{NULL}
+       ,
+
+       /* KEYSET_LANDSCAPE_QTY_SPANNISH */
+{NULL}
+       ,
+
+       /* KEYSET_LANDSCAPE_QTY_ITALIAN */
+{NULL}
+       ,
+
+       /* KEYSET_LANDSCAPE_QTY_DUTCH */
+{NULL}
+       ,
+
+       /* KEYSET_LANDSCAPE_QTY_PORTYGUESE*/
+{NULL}
+       ,
+
+       /* KEYSET_LANDSCAPE_QTY_GERMAN */
+{NULL}
+       ,
+
+       /* KEYSET_LANDSCAPE_QTY_TURKISH*/
+{NULL}
+       ,
+       /* KEYSET_LANDSCAPE_QTY_GREEK*/
+{NULL}
+       ,
+       /* KEYSET_LANDSCAPE_QTY_RUSSIAN*/
+{NULL}
+       ,
+
+       /* KEYSET_LANDSCAPE_4X4_NUM*/
+{NULL}
+       ,
+       /* KEYSET_LANDSCAPE_4X4_PASSWD*/
+{NULL}
+       ,
+       /* KEYSET_LANDSCAPE_4X4_IPv6_123*/
+{NULL}
+       ,
+       /* KEYSET_LANDSCAPE_4X4_IPv6_ABC*/
+{NULL}
+       ,
+       /* KEYSET_LANDSCAPE_4X4_NUMONLY*/
+{NULL}
+       ,
+       /* KEYSET_LANDSCAPE_4X4_MONTH*/
+{NULL}
+       ,
+       /* KEYSET_EMOTICON_POPUP*/
+#include "mcfresource-emoticon-popup.h"
+       ,
+#include "mcfresource-popup.h"
+};
+#undef KEY_PROPERTIES_PHASE
+#endif
diff --git a/src/Makefile.am b/src/Makefile.am
new file mode 100755 (executable)
index 0000000..e330e8c
--- /dev/null
@@ -0,0 +1,115 @@
+## Makefile.am -- Process this file with automake to produce Makefile.in
+## Copyright (C) 2008 SAMSUNG Electronics
+##
+
+MAINTAINERCLEANFILES   = Makefile.in
+CLEANFILES             = *.bak
+
+INCLUDES               = -I$(top_builddir) \
+                          -I$(top_srcdir) \
+                                  -I$(top_srcdir)/src/include \
+                                  -I$(top_srcdir)/src \
+                                       -I$(top_srcdir)/mcf \
+                                   -I$(top_srcdir)/mcf/include \
+    -I$(top_srcdir)/mcf/gwes \
+    -I$(top_srcdir)/mcf/gwes/gtk \
+    -I$(top_srcdir)/mcf/gwes/win32 \
+    -I$(top_srcdir)/mcf/gwes/efl \
+    -I$(top_srcdir)/res \
+                                  -I@ISF_INCLUDEDIR@ \
+                                  -DISF_ICONDIR=\"@ISF_ICONDIR@\" \
+                                  -DISF_DEFAULT_DATADIR=\"@ISF_DEFAULT_DATADIR@\" \
+                                  -DFACTORYFS=\"@FACTORYFS_DIR@\" \
+                                  -DPREFIX=\"@PREFIX_DIR@\" \
+                                  -DISE_NAME=\"@ISE_NAME@\" \
+                                  -DX1_PROF \
+                                  -DX1_DEBUG \
+                                  -DDEFAULT_THEME=\"default\"\
+                                  -DIMG_PATH_PREFIX=\"/usr/share/isf/ise/@ISE_NAME@\"\
+                                  -D__EFL__ 
+                         
+noinst_HEADERS         =
+
+moduledir              = @ISF_MODULEDIR@/Helper
+
+module_LTLIBRARIES     = ise-default.la
+
+setupmoduledir           = @ISF_MODULEDIR@/SetupUI
+setupmodule_LTLIBRARIES  = ise-default-setup.la
+
+ise_default_la_SOURCES = isemain.cpp ise.cpp ise-default-setting.cpp languagesetting.cpp window_slide_animator.cpp \
+                                        ../mcf/mcferroradjustment.cpp \
+                                   ../mcf/utils/win32/mcfutils-win32.cpp \
+                                ../mcf/utils/linux/mcfutils-linux.cpp \
+                                   ../mcf/mcfdebug.cpp \
+                                ../mcf/mcfutils.cpp \
+                                   ../mcf/mcfcontroller.cpp \
+                                ../mcf/mcfgwes.cpp \
+                                   ../mcf/mcfevents.cpp \
+                                ../mcf/gwes/win32/mcfgraphics-win32.cpp \
+                                   ../mcf/gwes/efl/mcfwindows-efl.cpp \
+                                ../mcf/gwes/efl/mcfgraphics-efl.cpp \
+                                ../mcf/gwes/efl/mcfevents-efl.cpp \
+                                   ../mcf/gwes/win32/mcfevents-win32.cpp \
+                                ../mcf/mcffeedback.cpp \
+                                   ../mcf/mcfuibuilder.cpp \
+                                ../mcf/mcfcore.cpp \
+                                ../mcf/mcfwindows.cpp \
+                                   ../mcf/mcfgraphics.cpp \
+                                ../mcf/mcfimageproxy.cpp \
+                                   ../mcf/mcffontproxy.cpp \
+                                ../mcf/mcfcontext.cpp \
+                                   ../mcf/mcfactionstate.cpp \
+                                ../mcf/mcfresourcecache.cpp \
+                                ../res/mcfresource.cpp
+
+
+ise_default_la_CXXFLAGS = -I$(top_srcdir)/res/ \
+                                                       @ELM_CFLAGS@ @SLP_UTILX_CFLAGS@ @HEYNOTI_CFLAGS@ @IMF_CFLAGS@ @GLIB_CFLAGS@ @VCONF_CFLAGS@ @AUL_CFLAGS@ @ISF_CFLAGS@ @ECOREX_CFLAGS@ @X11_CFLAGS@ @UIGADGET_CFLAGS@
+
+ise_default_la_LDFLAGS = -avoid-version \
+                                                  -rpath $(moduledir) \
+                                                  -module \
+                                                  -L$(top_srcdir)/data \
+                                                  @ELM_LIBS@ \
+                                                  @SLP_UTILX_LIBS@ \
+                                                  @HEYNOTI_LIBS@ \
+                                                  @IMF_LIBS@ \
+                                                  @VCONF_LIBS@ \
+                                                   @GLIB_LIBS@ \
+                                                   @AUL_LIBS@ \
+                                                  @ISF_LIBS@ \
+                                                  @ECOREX_LIBS@ \
+                                                  @X11_LIBS@ \
+                                                  @UIGADGET_LIBS@
+               
+ise_default_la_LIBADD  = \
+                                                                       @ELM_LIBS@ @SLP_UTILX_LIBS@ @HEYNOTI_LIBS@ @IMF_LIBS@ @VCONF_LIBS@ \
+                                                                       @UIGADGET_LIBS@ @AUL_LIBS@ 
+
+                               
+ise_default_setup_la_SOURCES  = efl_ise_setup.cpp languagesetting.cpp
+
+ise_default_setup_la_CXXFLAGS = \
+                                                                       -I$(top_srcdir)/src/include \
+                                                                       -I$(top_srcdir)/res \
+                                                                       -DISE_NAME=\"ise-default\" \
+                                                                       -DIMG_PATH_PREFIX=\"@PREFIX_DIR@/share/isf/ise/ise-default\" \
+                                                                       @ELM_CFLAGS@ @SLP_UTILX_CFLAGS@ @HEYNOTI_CFLAGS@ @IMF_CFLAGS@ \
+                                                                       @GLIB_CFLAGS@ @VCONF_CFLAGS@ @AUL_CFLAGS@ \
+                                                                       @UIGADGET_CFLAGS@ \
+                                                                       -DSETUP_BUILD
+
+
+ise_default_setup_la_LDFLAGS  = \
+                                                                       -avoid-version -rpath $(moduledir) -module \
+                                                                       @LIBTOOL_EXPORT_OPTIONS@ @LTLIBINTL@ -L$(top_srcdir)/data 
+
+ise_default_setup_la_LIBADD  = \
+                                                                       @ELM_LIBS@ @SLP_UTILX_LIBS@ @HEYNOTI_LIBS@ @IMF_LIBS@ @VCONF_LIBS@ \
+                                                                       @UIGADGET_LIBS@ @AUL_LIBS@
+
+
+
+
diff --git a/src/efl_ise_setup.cpp b/src/efl_ise_setup.cpp
new file mode 100755 (executable)
index 0000000..7a47d3f
--- /dev/null
@@ -0,0 +1,136 @@
+/*
+ * Copyright 2012  Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.tizenopensource.org/license
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+
+#define Uses_SCIM_CONFIG_BASE
+
+#include <X11/Xlib.h>
+#include <Elementary.h>
+#include <scim.h>
+#include "isedata.h"
+#include "languagesetting.h"
+#include <Ecore_IMF.h>
+
+using namespace scim;
+
+SETTING_INFO _setup_info;
+std::vector < int >v_lang_list;
+int g_currentLanguage = 0;
+ConfigPointer _scim_config;
+
+static Evas_Object *_setup_genlist = NULL;
+
+static void load_config(const ConfigPointer & config);
+static void save_config(const ConfigPointer & config);
+static void reset_config (const ConfigPointer &config);
+static bool query_changed(void);
+
+Evas_Object *main_window = NULL;
+
+extern "C" {
+       void scim_module_init(void) {
+       }
+
+        void scim_module_exit(void) {
+       }
+
+       Evas_Object *scim_setup_module_create_ui(Evas_Object * parent,
+                                                Evas_Object * layout) {
+               if (_setup_genlist == NULL)
+                       _setup_genlist =
+                           create_setup_genlist(parent, layout, _setup_info);
+
+               return _setup_genlist;
+       }
+
+       String scim_setup_module_get_category(void) {
+               return String("Helper");
+       }
+
+       String scim_setup_module_get_name(void) {
+               return String(ISE_NAME);
+       }
+
+       String scim_setup_module_get_description(void) {
+               return String("Setup Module of" ISE_NAME ".");
+       }
+
+       void scim_setup_module_load_config(const ConfigPointer & config) {
+               load_config(config);
+
+               if (_setup_genlist != NULL)
+                       set_keyboard_option(true, _setup_info);
+       }
+
+       void scim_setup_module_save_config(const ConfigPointer & config) {
+               _setup_info = get_keyboard_option();
+               save_config(config);
+       }
+
+       bool scim_setup_module_query_changed(void) {
+               return query_changed();
+       }
+
+       bool scim_setup_module_key_proceeding(int key_type) {
+               return false;
+       }
+    bool scim_setup_module_option_reset(const ConfigPointer &config)
+    {
+        reset_config(config);
+        return true;
+    }
+}                              /* extern "C" */
+
+static void load_config(const ConfigPointer & config)
+{
+       if (!config.null()) {
+
+               _setup_info.flag = config->read(CONFIG_SETTING_FLAG, 0x000);
+               config->read(CONFIG_LANGUAGE_LIST, &v_lang_list);
+               _setup_info.current_language = config->read(CONFIG_CURRENT_LANGUAGE, 0);
+               _setup_info.lang_count = config->read(CONFIG_LANGUAGE_COUNT, 1);
+               g_currentLanguage = _setup_info.current_language;
+               _scim_config = config;
+       }
+}
+
+static void save_config(const ConfigPointer & config)
+{
+       if (!config.null()) {
+               config->write(CONFIG_SETTING_FLAG, _setup_info.flag);
+               config->write(CONFIG_LANGUAGE_LIST, v_lang_list);
+               config->write(CONFIG_CURRENT_LANGUAGE, _setup_info.current_language);
+               config->write(CONFIG_LANGUAGE_COUNT, _setup_info.lang_count);
+               config->flush();
+       }
+}
+
+static void reset_config (const ConfigPointer &config)
+{
+    if (!config.null ())
+    {
+        config->erase (CONFIG_SETTING_FLAG);
+        config->erase (CONFIG_LANGUAGE_LIST);
+        config->erase (CONFIG_CURRENT_LANGUAGE);
+        config->erase (CONFIG_LANGUAGE_COUNT);
+        config->flush ();
+    }
+}
+static bool query_changed(void)
+{
+       return FALSE;
+}
diff --git a/src/include/eflimdebug.h b/src/include/eflimdebug.h
new file mode 100755 (executable)
index 0000000..479bfde
--- /dev/null
@@ -0,0 +1,39 @@
+/*
+ * Copyright 2012  Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.tizenopensource.org/license
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+
+/* Definition for debug message trace */
+#define mzsc(m_code)                                           "\x1b[" # m_code
+#define mzs_sync()                                                     (void)fflush(stdout)
+#define mzs_puts(m_code)                                       (void)fputs(m_code,stdout)
+#define mzs_clear_screen()                                     mzs_puts(mzsc(H) mzsc(J))
+#define mzs_move(m_x,m_y)                                      mzs_puts(mzsc(m_y;m_x ## H))
+#define mzs_move_x(m_y)                                        mzs_puts(mzsc(;m_y ## H))
+#define mzs_move_y(m_y)                                        mzs_puts(mzsc(m_y ## d))
+#define mzs_puts_xy(m_x,m_y,m_message) mzs_puts(mzsc(m_y;m_x ## H) m_message)
+#define mzc_normal             mzsc(0m)
+#define mzc_black              mzsc(1;30m)
+#define mzc_red                        mzsc(1;31m)
+#define mzc_green              mzsc(1;32m)
+#define mzc_yellow             mzsc(1;33m)
+#define mzc_blue                       mzsc(1;34m)
+#define mzc_magenta            mzsc(1;35m)
+#define mzc_cyan               mzsc(1;36m)
+#define mzc_white              mzsc(1;37m)
+
+#define DEBUG() printf("%04d" mzc_blue " %s" mzc_normal ".\n", __LINE__, __FUNCTION__ );
+//#define DEBUG()
diff --git a/src/include/ise-default-setting.h b/src/include/ise-default-setting.h
new file mode 100755 (executable)
index 0000000..a79d53c
--- /dev/null
@@ -0,0 +1,214 @@
+/*
+ * Copyright 2012  Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.tizenopensource.org/license
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+
+#include "ise.h"
+#include "mcf.h"
+
+#ifndef __ISE_SETTING_H__
+#define __ISE_SETTING_H__
+
+
+#ifdef __cplusplus
+MCF_BEGIN_DECLS
+#endif
+
+using namespace mcf;
+
+/**
+*@brief  context
+*/
+typedef struct _Context {
+       mcf8 mcfInputMode;
+       mcf8 KeypadMode;
+       mcf8 InputMode;
+       mcf8 ShiftMode;
+       mcf8 OnOff;
+       mcf8 CompletionMode;
+       mcf8 Language;
+       mcf8 SingleCommit;
+}Context;
+
+static const int CMD_KEYPAD    = 0x10; /* 16 */
+static const int CMD_LANGUAGE  = 0x20;  /* 32 */
+static const int CMD_SHIFTMODE = 0x30; /* 48 */
+static const int CMD_STATE   = 0x40;  /* 64 */
+static const int CMD_INPUTMODE = 0x50; /* 80 */
+static const int CMD_COMPLETION  = 0x60; /* 96 */
+static const int CMD_SINGLECOMMIT = 0x70; /* 112 */
+static const int CMD_FLUSH = 0x90; /* 144 */
+
+
+
+typedef enum _KEYPADMODE {
+       KEYPAD_QWRTY_REGIONAL, /* Regional Qwerty */
+       KEYPAD_QWERTY, /* Descrite Qwerty */
+       KEYPAD_3X4, /* 3x4 keypad */
+       KEYPAD_5X4, /* 5x4 keypad */
+       MAX_KEYPAD
+}KEYPADMODE;
+
+typedef enum _INPUTMODE {
+       INPUTMODE_AMBIGUOUS,
+       INPUTMODE_MULTITAB,
+       MAX_INPUTMODE
+}INPUTMODE;
+
+typedef enum _SHIFTMODE {
+       SHIFTMODE_OFF,
+       SHIFTMODE_ON,
+       SHIFTMODE_LOCK,
+       MAX_SHIFTMODE
+}SHIFTMODE;
+
+/**@brief  Keyboard database options */
+typedef enum _CompletionMode {
+       COMPLETION_MULTITAB_LOWERCASE_STRING, /* abc */
+       COMPLETION_MULTITAB_CAMELCASE_STRING, /* Abc */
+       COMPLETION_MULTITAB_UPPERCASE_STRING, /* ABC */
+       COMPLETION_AMBIGUOUS_LOWERCASE_STRING, /* abc */
+       COMPLETION_AMBIGUOUS_CAMELCASE_STRING, /* Abc */
+       COMPLETION_AMBIGUOUS_UPPERCASE_STRING, /* ABC */
+       COMPLETION_NUMERIC_STRING,
+       COMPLETION_3x4_STRING,
+       COMPLETION_5x4_STRING,
+       COMPLETION_QWERTY_STRING,
+       COMPLETION_HWR_STRING,
+       MAX_COMPLETION
+}CompletionMode;
+
+typedef enum _LDBLanguage {
+       ISE_DEFAULT_LANGUAGE_ENGLISH = 0,
+       ISE_DEFAULT_LANGUAGE_FRENCH,
+       ISE_DEFAULT_LANGUAGE_SPANISH,
+       ISE_DEFAULT_LANGUAGE_DUTCH,
+       ISE_DEFAULT_LANGUAGE_GERMAN,
+       ISE_DEFAULT_LANGUAGE_GREEK,
+       ISE_DEFAULT_LANGUAGE_ITALIAN,
+       ISE_DEFAULT_LANGUAGE_PORTUGUESE,
+       ISE_DEFAULT_LANGUAGE_TURKISH,
+       ISE_DEFAULT_LANGUAGE_ARABIC,
+       ISE_DEFAULT_LANGUAGE_RUSSIAN,
+       ISE_DEFAULT_LANGUAGE_AFRIKAANS,
+       //ISE_DEFAULT_LANGUAGE_ALBANIAN,
+       ISE_DEFAULT_LANGUAGE_ASSAMESE,
+       ISE_DEFAULT_LANGUAGE_AZERBAIJANI,
+       ISE_DEFAULT_LANGUAGE_BASQUE,
+       ISE_DEFAULT_LANGUAGE_BENGALI,
+       ISE_DEFAULT_LANGUAGE_BULGARIAN,
+       ISE_DEFAULT_LANGUAGE_CATALAN,
+       ISE_DEFAULT_LANGUAGE_CZECH,
+       ISE_DEFAULT_LANGUAGE_DANISH,
+       ISE_DEFAULT_LANGUAGE_ESTONIAN,
+       ISE_DEFAULT_LANGUAGE_FINNISH,
+       ISE_DEFAULT_LANGUAGE_GALICIAN,
+       ISE_DEFAULT_LANGUAGE_GEORGIAN,
+       ISE_DEFAULT_LANGUAGE_GUJARATI,
+       ISE_DEFAULT_LANGUAGE_HAUSA,
+       ISE_DEFAULT_LANGUAGE_HEBREW,
+       ISE_DEFAULT_LANGUAGE_HINDI,
+       ISE_DEFAULT_LANGUAGE_HUNGARIAN,
+       ISE_DEFAULT_LANGUAGE_ICELANDIC,
+       ISE_DEFAULT_LANGUAGE_IRISH,
+       ISE_DEFAULT_LANGUAGE_KANNADA,
+       ISE_DEFAULT_LANGUAGE_KAZAKH,
+       ISE_DEFAULT_LANGUAGE_LATVIAN,
+       ISE_DEFAULT_LANGUAGE_LITHUANIAN,
+       ISE_DEFAULT_LANGUAGE_MACEDONIAN,
+       ISE_DEFAULT_LANGUAGE_MALAYALAM,
+       ISE_DEFAULT_LANGUAGE_MALAY,
+       ISE_DEFAULT_LANGUAGE_MARATHI,
+       ISE_DEFAULT_LANGUAGE_MONGOLIAN,
+       ISE_DEFAULT_LANGUAGE_NEPALI,
+       ISE_DEFAULT_LANGUAGE_NORWEGIAN,
+       ISE_DEFAULT_LANGUAGE_POLISH,
+       ISE_DEFAULT_LANGUAGE_PUNJABI,
+       ISE_DEFAULT_LANGUAGE_ROMANIAN,
+       ISE_DEFAULT_LANGUAGE_SERBIAN,
+       ISE_DEFAULT_LANGUAGE_SINHALA,
+       ISE_DEFAULT_LANGUAGE_SLOVAK,
+       ISE_DEFAULT_LANGUAGE_SLOVENIAN,
+       ISE_DEFAULT_LANGUAGE_SWEDISH,
+       ISE_DEFAULT_LANGUAGE_TAMIL,
+       ISE_DEFAULT_LANGUAGE_TELUGU,
+       ISE_DEFAULT_LANGUAGE_THAI,
+       ISE_DEFAULT_LANGUAGE_UKRAINIAN,
+       ISE_DEFAULT_LANGUAGE_URDU,
+       ISE_DEFAULT_LANGUAGE_UZBEK,
+       ISE_DEFAULT_LANGUAGE_VIETNAMESE,
+       ISE_DEFAULT_LANGUAGE_WELSH,
+       ISE_DEFAULT_LANGUAGE_XHOSA,
+       ISE_DEFAULT_LANGUAGE_YORUBA,
+       ISE_DEFAULT_LANGUAGE_ZULU,
+    MAX_LANGUAGE
+}LDBLanguage;
+
+typedef enum _ONOFF {
+       OFF = 0,
+       ON,
+       MAX_ONOFF
+}ONOFF;
+
+typedef enum _SingleCommitONOFF {
+       SINGLE_COMMIT_OFF = 0,
+       SINGLE_COMMIT_ON,
+       MAX_SINGLE_COMMIT_ONOFF
+}SingleCommitONOFF;
+
+void
+hide();
+
+void
+reset();
+
+void
+change_completion_option(unsigned int kdbMode);
+
+void
+change_ldb_option(unsigned int ldbLanguage);
+
+void
+change_prediction_onoff(bool fEnable);
+
+void
+change_inputmode(unsigned int inputMode);
+
+void
+set_shiftmode(unsigned int shiftMode);
+
+void
+change_shiftmode(unsigned int shiftMode);
+
+void
+change_keypad(unsigned int keypad);
+
+void
+set_single_commit(unsigned int single);
+
+Context
+get_Ise_default_context();
+
+void send_flush (void);
+
+void
+mode_syncronize();
+
+#ifdef __cplusplus
+MCF_END_DECLS
+#endif
+
+#endif
diff --git a/src/include/ise.h b/src/include/ise.h
new file mode 100755 (executable)
index 0000000..53480ef
--- /dev/null
@@ -0,0 +1,153 @@
+/*
+ * Copyright 2012  Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.tizenopensource.org/license
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+
+#ifndef _DEFAULTISE_H_
+#define _DEFAULTISE_H_
+
+#include <Ecore.h>
+#include <Evas.h>
+#include <Ecore_Evas.h>
+#include "perf_test.h"
+#include "mcf.h"
+#include "ise-default-setting.h"
+#include "languagesetting.h"
+#include <Ecore_IMF.h>
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif  /*  */
+
+/*#define DEBUG_MODE*/
+
+/*#define PACKAGE                                      ISE_NAME*/
+#define LOCALEDIR                                      "/usr/share/locale"
+
+#define CONFIG_SETTING_FLAG            ISE_NAME "/setting_flag"
+#define CONFIG_LANGUAGE_LIST           ISE_NAME "/language_list"
+#define CONFIG_CURRENT_LANGUAGE        ISE_NAME "/current_language"
+#define CONFIG_LANGUAGE_COUNT          ISE_NAME "/lang_count"
+
+
+#define INPUT_MODE_NATIVE      MAX_INPUT_MODE /* Native mode. It will distinguish to the current user language */
+
+#define ISE_RELEASE_AUTOCOMMIT_BLOCK_INTERVAL  1300
+#define ISE_RELEASE_AUTOCOMMIT_BLOCK_INTERVAL_FOR_SHIFT        1
+
+#define WWWCOM_BUTTON_WWW_STR          "www."
+#define WWWCOM_BUTTON_COM_STR          ".com"
+
+#ifndef DBG
+#define DBG printf
+#endif
+
+typedef enum _IseLayout {
+       ISE_LAYOUT_STYLE_NORMAL = 0,
+       ISE_LAYOUT_STYLE_NUMBER,
+       ISE_LAYOUT_STYLE_EMAIL,
+       ISE_LAYOUT_STYLE_URL,
+       ISE_LAYOUT_STYLE_PHONENUMBER,
+       ISE_LAYOUT_STYLE_IP,
+       ISE_LAYOUT_STYLE_MONTH,
+       ISE_LAYOUT_STYLE_NUMBERONLY,
+       MAX_ISE_LAYOUT_CNT
+}IseLayout;
+
+#ifdef HAVE_CONFORMANT_AUTOSCROLL
+typedef enum _Virtual_Keyboard_State
+{
+       KEYPAD_STATE_UNKNOWN = 0,
+       KEYPAD_STATE_OFF,
+       KEYPAD_STATE_ON,
+} Virtual_Keyboard_State;
+
+void _send_keypad_geom_atom_info(Evas_Object *window, Virtual_Keyboard_State kbd_state);
+#endif
+
+/**
+*@brief ISE Default value case by ISE layout
+*/
+typedef struct _ISEDefaultValueTable {
+       IseLayout iseLayout;
+       mcfu8 mcfInputMode;
+       mcf8 KeypadMode;
+       mcf8 InputMode;
+       mcf8 ShiftMode;
+       mcf8 OnOff;
+       mcf8 CompletionMode;
+       mcf8 SingleCommit;
+       mcfboolean resetOnModeChange;
+    mcfint subLayoutID;
+}ISEDefaultValueTable;
+
+#define ISE_PRIVATE_KEY_BUFFER_SIZE 16
+#define ISE_PRIVATE_KEY_LABEL_LEN 16
+#define ISE_PRIVATE_KEY_VALUE_LEN 16
+#define ISE_PRIVATE_KEY_IMAGE_LEN 256
+
+typedef struct _ISEPrivateKeyBuffer {
+       mcfboolean used;
+       mcfchar label[ISE_PRIVATE_KEY_LABEL_LEN];
+       mcfint valueIdx;
+       mcfchar valueStr[ISE_PRIVATE_KEY_VALUE_LEN];
+       mcfchar ImgPath[ISE_PRIVATE_KEY_IMAGE_LEN];
+       mcfchar *imgPathArr[MCF_BUTTON_STATE_MAX];
+       mcfint privateId;
+       mcfint layoutIdx;
+       mcfint keyIdx;
+}ISEPrivateKeyBuffer;
+
+
+typedef struct _ISELastInputContext {
+       mcfchar *keyValue;
+       mcfulong keyEvent;
+       MCFKeyType keyType;
+}ISELastInputContext;
+
+typedef struct {
+    const char *language_string;
+    const int language_code;
+}ISELanguageTable;
+
+void ise_show(int ic);
+void ise_set_mode();
+void ise_hide(bool fCallHided);
+void ise_set_language(unsigned int language);
+void ise_set_lang_to_vconf(unsigned int language);
+void ise_focus_in();
+void ise_new();
+void ise_set_mode(unsigned int mode);
+void ise_explicitly_set_language(unsigned int language);
+void ise_reset_context();
+void ise_reset_input_context();
+void ise_focus_out();
+bool process_option_key_window_events(char *Str);
+void ise_set_private_key(int keyIdx, char* label, char* ImgPath, int valueIdx, char* value );
+void ise_set_disable_key(int keyIdx, int disabled );
+unsigned int ise_get_language();
+unsigned int ise_get_mode();
+void ise_set_layout(mcfu32 layoutIdx);
+mcfu32 ise_get_layout();
+void ise_get_size(int *x, int *y, int *width, int *height);
+void ise_update_cursor_position(int position);
+void ise_update_spot_location(int x, int y);
+void ise_set_caps_mode(unsigned int mode);
+void ise_set_return_key_type(unsigned int type);
+void ise_set_return_key_disable(unsigned int disabled);
+void ise_get_language_locale(char **locale);
+void _show_language_popup(mcfshort x, mcfshort y);
+SETTING_INFO ise_setting_update_on_reload_config(SETTING_INFO _setup_info);
+#endif
diff --git a/src/include/isedata.h b/src/include/isedata.h
new file mode 100755 (executable)
index 0000000..5b69bea
--- /dev/null
@@ -0,0 +1,407 @@
+/*
+ * Copyright 2012  Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.tizenopensource.org/license
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+
+#ifndef __ISEDATA_H_INCLUDED__
+#define __ISEDATA_H_INCLUDED__
+
+#include "ise.h"
+#include "ise-default-setting.h"
+#include <libintl.h>
+
+#define ISEUUID "12aa3425-f88d-45f4-a509-cee8dfe904e3"
+#define ISENAME "Tizen keyboard"
+#define KEYBD_ISE_UUID "d75857a5-4148-4745-89e2-1da7ddaf7999"
+
+#define INITIAL_KEYPAD_MODE FALSE
+
+#define SUPPORTS_MULTIPLE_LANGUAGE_SELECTION
+
+#define SUPPORTS_LAYOUT_STYLE_NORMAL
+#define SUPPORTS_LAYOUT_STYLE_NUMBER
+#define SUPPORTS_LAYOUT_STYLE_EMAIL
+#define SUPPORTS_LAYOUT_STYLE_URL
+#define SUPPORTS_LAYOUT_STYLE_PHONENUMBER
+#define SUPPORTS_LAYOUT_STYLE_IP
+#define SUPPORTS_LAYOUT_STYLE_MONTH
+#define SUPPORTS_LAYOUT_STYLE_NUMBERONLY
+
+#ifdef SUPPORTS_HELP_PAGE
+#undef SUPPORTS_HELP_PAGE
+#endif
+
+#define SUPPORTED_LANGUAGES "nl_NL,en_US,fr_FR,de_DE,it_IT,pt_PT,es_ES,tr_TR,el_GR,ru_RU"
+
+#define LANGUAGE_ENGLISH_UNITED_STATES         "en_US"
+#define LANGUAGE_DUTCH_STANDARD                        "nl_NL"
+#define LANGUAGE_FRENCH_STANDARD               "fr_FR"
+#define LANGUAGE_GERMAN_STANDARD               "de_DE"
+#define LANGUAGE_ITALIAN_STANDARD              "it_IT"
+#define LANGUAGE_PORTUGUESE_STANDARD           "pt_PT"
+#define LANGUAGE_SPANISH                       "es_ES"
+#define LANGUAGE_TURKISH                       "tr_TR"
+#define LANGUAGE_GREEK                         "el_GR"
+#define LANGUAGE_RUSSIAN                       "ru_RU"
+
+
+#define MAX_LANG_NUM 10
+typedef enum {
+    LANGUAGE_ID_ENGLISH,
+    LANGUAGE_ID_DUTCH,
+    LANGUAGE_ID_FRENCH,
+    LANGUAGE_ID_GERMAN,
+    LANGUAGE_ID_ITALIAN,
+    LANGUAGE_ID_PORTUGUESE,
+    LANGUAGE_ID_SPANISH,
+    LANGUAGE_ID_TURKISH,
+    LANGUAGE_ID_GREEK,
+    LANGUAGE_ID_RUSSIAN,
+    MAX_NUM
+} ISE_LANGUAGES;
+#define PRIMARY_LANGUAGE_INDEX 0
+
+static const ISEDefaultValueTable IseDefaultValue[MAX_ISE_LAYOUT_CNT]  = {
+       {ISE_LAYOUT_STYLE_NORMAL,                       INPUT_MODE_NATIVE,                      KEYPAD_QWERTY,  INPUTMODE_AMBIGUOUS,    SHIFTMODE_OFF,  OFF,    COMPLETION_MULTITAB_LOWERCASE_STRING, SINGLE_COMMIT_OFF,FALSE, SUBLAYOUTID_DEFAULT},
+       {ISE_LAYOUT_STYLE_NUMBER,                       INPUT_MODE_QTY_SYM_1,                   KEYPAD_QWERTY,  INPUTMODE_AMBIGUOUS,    SHIFTMODE_OFF,  OFF,    COMPLETION_NUMERIC_STRING,SINGLE_COMMIT_OFF, FALSE, SUBLAYOUTID_DEFAULT},
+       {ISE_LAYOUT_STYLE_EMAIL,                        INPUT_MODE_QTY_EMAIL,                   KEYPAD_QWERTY,  INPUTMODE_AMBIGUOUS ,   SHIFTMODE_OFF,  OFF,    COMPLETION_QWERTY_STRING, SINGLE_COMMIT_ON,TRUE, SUBLAYOUTID_EMAIL},
+       {ISE_LAYOUT_STYLE_URL,                          INPUT_MODE_QTY_URL,                     KEYPAD_QWERTY,  INPUTMODE_AMBIGUOUS,    SHIFTMODE_OFF,  OFF,    COMPLETION_QWERTY_STRING,SINGLE_COMMIT_ON, TRUE, SUBLAYOUTID_URL},
+       {ISE_LAYOUT_STYLE_PHONENUMBER,                  INPUT_MODE_QTY_SYM_1,                   KEYPAD_QWERTY,  INPUTMODE_AMBIGUOUS,    SHIFTMODE_OFF,  OFF,    COMPLETION_NUMERIC_STRING, SINGLE_COMMIT_OFF,FALSE, SUBLAYOUTID_DEFAULT},
+       {ISE_LAYOUT_STYLE_IP,                           INPUT_MODE_QTY_SYM_1,                   KEYPAD_QWERTY,  INPUTMODE_AMBIGUOUS,    SHIFTMODE_OFF,  OFF,    COMPLETION_NUMERIC_STRING,SINGLE_COMMIT_OFF, FALSE, SUBLAYOUTID_DEFAULT},
+       {ISE_LAYOUT_STYLE_MONTH,                        INPUT_MODE_QTY_SYM_1,                   KEYPAD_QWERTY,  INPUTMODE_AMBIGUOUS,    SHIFTMODE_OFF,  OFF,    COMPLETION_NUMERIC_STRING,SINGLE_COMMIT_OFF, FALSE, SUBLAYOUTID_DEFAULT},
+       {ISE_LAYOUT_STYLE_NUMBERONLY,                   INPUT_MODE_QTY_SYM_1,                   KEYPAD_QWERTY,  INPUTMODE_AMBIGUOUS,    SHIFTMODE_OFF,  OFF,    COMPLETION_NUMERIC_STRING,SINGLE_COMMIT_OFF, FALSE, SUBLAYOUTID_DEFAULT},
+};
+
+static const mcf8 internalLangToLang[MAX_LANG_NUM] = {
+       ISE_DEFAULT_LANGUAGE_ENGLISH, /* English_United_States*/
+       ISE_DEFAULT_LANGUAGE_DUTCH, /* Dutch_Standard*/
+       ISE_DEFAULT_LANGUAGE_FRENCH, /* French_Standard*/
+       ISE_DEFAULT_LANGUAGE_GERMAN, /* German_Standard*/
+       ISE_DEFAULT_LANGUAGE_ITALIAN, /* Italian_Standard*/
+       ISE_DEFAULT_LANGUAGE_PORTUGUESE, /* Portuguese_Standard*/
+       ISE_DEFAULT_LANGUAGE_SPANISH, /* Spanish*/
+       ISE_DEFAULT_LANGUAGE_TURKISH, /* Turkish*/
+       ISE_DEFAULT_LANGUAGE_GREEK, /* Greek*/
+       ISE_DEFAULT_LANGUAGE_RUSSIAN/*russian*/
+};
+static const char *language_text_name[MAX_LANG_NUM] = {
+       "IDS_IME_OPT_LANG_ENGLISH",
+       "IDS_IME_OPT_LANG_DUTCH",
+       "IDS_IME_OPT_LANG_FRENCH",
+       "IDS_IME_OPT_LANG_GERMAN",
+       "IDS_IME_POP_LANG_ITALIAN",
+       "IDS_IME_POP_LANG_PORTUGUESE",
+       "IDS_IME_OPT_LANG_SPANISH",
+       "IDS_IME_OPT_LANG_TURKISH",
+       "IDS_IME_OPT_LANG_GREEK",
+       "IDS_IME_OPT_LANG_RUSSIAN"
+};
+static ISELanguageTable lang_table[] = {
+    {LANGUAGE_ENGLISH_UNITED_STATES, LANGUAGE_ID_ENGLISH},
+    {LANGUAGE_DUTCH_STANDARD, LANGUAGE_ID_DUTCH},
+    {LANGUAGE_FRENCH_STANDARD, LANGUAGE_ID_FRENCH},
+    {LANGUAGE_GERMAN_STANDARD, LANGUAGE_ID_GERMAN},
+    {LANGUAGE_ITALIAN_STANDARD, LANGUAGE_ID_ITALIAN},
+    {LANGUAGE_PORTUGUESE_STANDARD, LANGUAGE_ID_PORTUGUESE},
+    {LANGUAGE_SPANISH, LANGUAGE_ID_SPANISH},
+    {LANGUAGE_TURKISH, LANGUAGE_ID_TURKISH},
+    {LANGUAGE_GREEK, LANGUAGE_ID_GREEK},
+    {LANGUAGE_RUSSIAN, LANGUAGE_ID_RUSSIAN},
+};
+
+/**
+*@brief Language<->Input mode table
+*/
+static const mcf8 mcfInputModeByLanguage[MAX_KEYPAD][MAX_LANG_NUM] = {
+       /*Qwerty Regional*/
+       {},
+       /*Qwerty*/
+       {
+               INPUT_MODE_QTY_ENGLISH, /* English_United_States*/
+               INPUT_MODE_QTY_DUTCH, /* Dutch_Standard*/
+               INPUT_MODE_QTY_FRENCH, /* French_Standard*/
+               INPUT_MODE_QTY_GERMAN, /* German_Standard*/
+               INPUT_MODE_QTY_ITALIAN, /* Italian_Standard*/
+               INPUT_MODE_QTY_PORTUGUESE, /* Portuguese_Standard*/
+               INPUT_MODE_QTY_SPANISH, /* Spanish*/
+               INPUT_MODE_QTY_TURKISH, /* Turkish*/
+               INPUT_MODE_QTY_GREEK, /* Greek*/
+               INPUT_MODE_QTY_RUSSIAN,
+       },
+       /*3x4*/
+       {
+               INPUT_MODE_4X4_ENGLISH, /* English_United_States*/
+               INPUT_MODE_4X4_DUTCH, /* Dutch_Standard*/
+               INPUT_MODE_4X4_FRENCH, /* French_Standard*/
+               INPUT_MODE_4X4_GERMAN, /* German_Standard*/
+               INPUT_MODE_4X4_ITALIAN, /* Italian_Standard*/
+               INPUT_MODE_4X4_PORTUGUESE, /* Portuguese_Standard*/
+               INPUT_MODE_4X4_SPANISH, /* Spanish*/
+               INPUT_MODE_4X4_TURKISH, /* Turkish*/
+               INPUT_MODE_4X4_GREEK, /* Greek*/
+               INPUT_MODE_4X4_RUSSIAN, /* russian*/
+       },
+       /*5x4*/
+       {}
+};
+
+/**
+*@brief Language<->Input mode table
+*/
+static const mcf8 mcfLanguageByInputMode[MAX_INPUT_MODE] = {
+       ISE_DEFAULT_LANGUAGE_ENGLISH,           /* INPUT_MODE_3X4_ENGLISH */
+       NOT_USED,                                       /* INPUT_MODE_4X4_NUM */
+       NOT_USED,                                       /* INPUT_MODE_4X4_SYM_1 */
+       NOT_USED,                                       /* INPUT_MODE_4X4_SYM_2 */
+       NOT_USED,                                       /* INPUT_MODE_4X4_SYM_3 */
+       NOT_USED,                                       /* INPUT_MODE_4X4_SYM_4 */
+       NOT_USED,                                       /* INPUT_MODE_4X4_SYM_5 */
+       NOT_USED,                                       /* INPUT_MODE_4X4_TELEPHONE */
+       ISE_DEFAULT_LANGUAGE_ENGLISH,           /* INPUT_MODE_4X4_URL */
+       ISE_DEFAULT_LANGUAGE_ENGLISH,           /* INPUT_MODE_4X4_EMAIL */
+       NOT_USED,                                       /* INPUT_MODE_4X4_PASSWD */
+       NOT_USED,                                       /* INPUT_MODE_4X4_IPv6_123 */
+       NOT_USED,                                       /* INPUT_MODE_4X4_IPv6_ABC */
+       NOT_USED,                                       /* INPUT_MODE_4X4_NUMONLY */
+       NOT_USED,                                       /* INPUT_MODE_4X4_MONTH */
+
+       ISE_DEFAULT_LANGUAGE_FRENCH,            /* INPUT_MODE_3X4_FRENCH */
+       ISE_DEFAULT_LANGUAGE_SPANISH,           /* INPUT_MODE_3X4_SPANISH */
+       ISE_DEFAULT_LANGUAGE_ITALIAN,           /* INPUT_MODE_3X4_ITALIAN */
+       ISE_DEFAULT_LANGUAGE_DUTCH,                     /* INPUT_MODE_3X4_DUTCH */
+       ISE_DEFAULT_LANGUAGE_PORTUGUESE,        /* INPUT_MODE_3X4_PORTUGUESE */
+       ISE_DEFAULT_LANGUAGE_GERMAN,            /* INPUT_MODE_3X4_GERMAN */
+
+       ISE_DEFAULT_LANGUAGE_TURKISH,           /* INPUT_MODE_3X4_TURKISH */
+       ISE_DEFAULT_LANGUAGE_GREEK,                     /* INPUT_MODE_3X4_GREEK */
+       ISE_DEFAULT_LANGUAGE_RUSSIAN,           /* INPUT_MODE_3X4_RUSSIAN */
+
+       ISE_DEFAULT_LANGUAGE_ENGLISH,           /* INPUT_MODE_QTY_ENGLISH */
+       ISE_DEFAULT_LANGUAGE_ENGLISH,           /* INPUT_MODE_QTY_URL */
+       ISE_DEFAULT_LANGUAGE_ENGLISH,           /* INPUT_MODE_QTY_EMAIL */
+       NOT_USED,                                       /* INPUT_MODE_QTY_SYM_1 */
+       NOT_USED,                                       /* INPUT_MODE_QTY_SYM_2 */
+       NOT_USED,                                       /* INPUT_MODE_QTY_SYM_3 */
+       NOT_USED,                                       /* INPUT_MODE_QTY_SYM_4 */
+
+
+       ISE_DEFAULT_LANGUAGE_FRENCH,            /* INPUT_MODE_AZT_FRENCH */
+       ISE_DEFAULT_LANGUAGE_SPANISH,           /* INPUT_MODE_QTY_SPANISH */
+       ISE_DEFAULT_LANGUAGE_ITALIAN,           /* INPUT_MODE_QTY_ITALIAN */
+       ISE_DEFAULT_LANGUAGE_DUTCH,                     /* INPUT_MODE_QTY_DUTCH */
+       ISE_DEFAULT_LANGUAGE_PORTUGUESE,        /* INPUT_MODE_QTY_PORTUGUESE */
+       ISE_DEFAULT_LANGUAGE_GERMAN,            /* INPUT_MODE_QTY_GERMAN */
+
+       ISE_DEFAULT_LANGUAGE_TURKISH,           /* INPUT_MODE_QTY_TURKISH */
+       ISE_DEFAULT_LANGUAGE_GREEK,                     /* INPUT_MODE_QTY_GREEK */
+       ISE_DEFAULT_LANGUAGE_RUSSIAN,           /* INPUT_MODE_QTY_RUSSIAN */
+};
+
+static CompletionMode IseInitialCompletionMode[MAX_INPUT_MODE][2] = { /* On and Off cases each */
+       { COMPLETION_MULTITAB_LOWERCASE_STRING, COMPLETION_AMBIGUOUS_LOWERCASE_STRING },        /* INPUT_MODE_3X4_ENGLISH */
+       { COMPLETION_MULTITAB_LOWERCASE_STRING, COMPLETION_MULTITAB_LOWERCASE_STRING },         /* INPUT_MODE_4X4_NUM */
+       { COMPLETION_MULTITAB_LOWERCASE_STRING, COMPLETION_MULTITAB_LOWERCASE_STRING },         /* INPUT_MODE_4X4_SYM_1 */
+       { COMPLETION_MULTITAB_LOWERCASE_STRING, COMPLETION_MULTITAB_LOWERCASE_STRING },         /* INPUT_MODE_4X4_SYM_2 */
+       { COMPLETION_MULTITAB_LOWERCASE_STRING, COMPLETION_MULTITAB_LOWERCASE_STRING },         /* INPUT_MODE_4X4_SYM_3 */
+       { COMPLETION_MULTITAB_LOWERCASE_STRING, COMPLETION_MULTITAB_LOWERCASE_STRING },         /* INPUT_MODE_4X4_SYM_4 */
+       { COMPLETION_MULTITAB_LOWERCASE_STRING, COMPLETION_MULTITAB_LOWERCASE_STRING },         /* INPUT_MODE_4X4_SYM_5 */
+       { COMPLETION_MULTITAB_LOWERCASE_STRING, COMPLETION_MULTITAB_LOWERCASE_STRING },         /* INPUT_MODE_4X4_PHONENUMBER */
+       { COMPLETION_MULTITAB_LOWERCASE_STRING, COMPLETION_MULTITAB_LOWERCASE_STRING },         /* INPUT_MODE_QTY_URL */
+       { COMPLETION_MULTITAB_LOWERCASE_STRING, COMPLETION_MULTITAB_LOWERCASE_STRING },         /* INPUT_MODE_QTY_EMAIL*/
+       { COMPLETION_MULTITAB_LOWERCASE_STRING, COMPLETION_MULTITAB_LOWERCASE_STRING },         /* INPUT_MODE_4X4_PASSWD*/
+       { COMPLETION_MULTITAB_LOWERCASE_STRING, COMPLETION_MULTITAB_LOWERCASE_STRING },         /* INPUT_MODE_4X4_IPv6_123*/
+       { COMPLETION_MULTITAB_LOWERCASE_STRING, COMPLETION_MULTITAB_LOWERCASE_STRING },         /* INPUT_MODE_4X4_IPv6_ABC*/
+       { COMPLETION_MULTITAB_LOWERCASE_STRING, COMPLETION_MULTITAB_LOWERCASE_STRING },         /* INPUT_MODE_4X4_NUMONLY*/
+       { COMPLETION_MULTITAB_LOWERCASE_STRING, COMPLETION_MULTITAB_LOWERCASE_STRING },         /* INPUT_MODE_4X4_MONTH*/
+
+       { COMPLETION_MULTITAB_LOWERCASE_STRING, COMPLETION_AMBIGUOUS_LOWERCASE_STRING },        /* INPUT_MODE_3X4_FRENCH */
+       { COMPLETION_MULTITAB_LOWERCASE_STRING, COMPLETION_AMBIGUOUS_LOWERCASE_STRING },        /* INPUT_MODE_3X4_SPANISH */
+       { COMPLETION_MULTITAB_LOWERCASE_STRING, COMPLETION_AMBIGUOUS_LOWERCASE_STRING },        /* INPUT_MODE_3X4_ITALIAN */
+       { COMPLETION_MULTITAB_LOWERCASE_STRING, COMPLETION_AMBIGUOUS_LOWERCASE_STRING },        /* INPUT_MODE_3X4_DUTCH */
+       { COMPLETION_MULTITAB_LOWERCASE_STRING, COMPLETION_AMBIGUOUS_LOWERCASE_STRING },        /* INPUT_MODE_3X4_PORTUGUESE */
+       { COMPLETION_MULTITAB_LOWERCASE_STRING, COMPLETION_AMBIGUOUS_LOWERCASE_STRING },        /* INPUT_MODE_3X4_GERMAN */
+
+       { COMPLETION_MULTITAB_LOWERCASE_STRING, COMPLETION_AMBIGUOUS_LOWERCASE_STRING },        /* INPUT_MODE_3X4_TURKEY */
+       { COMPLETION_MULTITAB_LOWERCASE_STRING, COMPLETION_AMBIGUOUS_LOWERCASE_STRING },        /* INPUT_MODE_3X4_GREEK */
+       { COMPLETION_MULTITAB_LOWERCASE_STRING, COMPLETION_AMBIGUOUS_LOWERCASE_STRING },        /* INPUT_MODE_3X4_RUSSIAN */
+
+       { COMPLETION_MULTITAB_LOWERCASE_STRING, COMPLETION_AMBIGUOUS_LOWERCASE_STRING },        /* INPUT_MODE_QTY_ENGLISH */
+       { COMPLETION_MULTITAB_LOWERCASE_STRING, COMPLETION_MULTITAB_LOWERCASE_STRING },         /* INPUT_MODE_QTY_URL */
+       { COMPLETION_MULTITAB_LOWERCASE_STRING, COMPLETION_MULTITAB_LOWERCASE_STRING },         /* INPUT_MODE_QTY_EMAIL*/
+       { COMPLETION_MULTITAB_LOWERCASE_STRING, COMPLETION_MULTITAB_LOWERCASE_STRING },         /* INPUT_MODE_QTY_SYM1 */
+       { COMPLETION_MULTITAB_LOWERCASE_STRING, COMPLETION_MULTITAB_LOWERCASE_STRING },         /* INPUT_MODE_QTY_SYM2 */
+       { COMPLETION_MULTITAB_LOWERCASE_STRING, COMPLETION_MULTITAB_LOWERCASE_STRING },         /* INPUT_MODE_QTY_SYM3 */
+       { COMPLETION_MULTITAB_LOWERCASE_STRING, COMPLETION_MULTITAB_LOWERCASE_STRING },         /* INPUT_MODE_QTY_SYM4 */
+
+       { COMPLETION_MULTITAB_LOWERCASE_STRING, COMPLETION_AMBIGUOUS_LOWERCASE_STRING },        /* INPUT_MODE_AZT_FRENCH */
+
+       { COMPLETION_MULTITAB_LOWERCASE_STRING, COMPLETION_AMBIGUOUS_LOWERCASE_STRING },        /* INPUT_MODE_QTY_SPANISH */
+       { COMPLETION_MULTITAB_LOWERCASE_STRING, COMPLETION_AMBIGUOUS_LOWERCASE_STRING },        /* INPUT_MODE_QTY_ITALIAN */
+       { COMPLETION_MULTITAB_LOWERCASE_STRING, COMPLETION_AMBIGUOUS_LOWERCASE_STRING },        /* INPUT_MODE_QTY_DUTCH */
+       { COMPLETION_MULTITAB_LOWERCASE_STRING, COMPLETION_AMBIGUOUS_LOWERCASE_STRING },        /* INPUT_MODE_QTY_PORTUGUESE */
+       { COMPLETION_MULTITAB_LOWERCASE_STRING, COMPLETION_AMBIGUOUS_LOWERCASE_STRING },        /* INPUT_MODE_QTY_GERMAN */
+
+       { COMPLETION_MULTITAB_LOWERCASE_STRING, COMPLETION_AMBIGUOUS_LOWERCASE_STRING },        /* INPUT_MODE_QTY_TURKISH */
+       { COMPLETION_MULTITAB_LOWERCASE_STRING, COMPLETION_AMBIGUOUS_LOWERCASE_STRING },        /* INPUT_MODE_QTY_GREEK */
+       { COMPLETION_MULTITAB_LOWERCASE_STRING, COMPLETION_AMBIGUOUS_LOWERCASE_STRING },        /* INPUT_MODE_QTY_RUSSIAN */
+};
+
+static mcf8 IseDefaultInputModes[MAX_INPUT_MODE][3] = { /* 3x4, QTY, NUM */
+       { INPUT_MODE_4X4_ENGLISH,               INPUT_MODE_QTY_ENGLISH,         INPUT_MODE_4X4_NUM },   /* INPUT_MODE_3X4_ENGLISH */
+       { NOT_USED,                                             NOT_USED,                                       INPUT_MODE_4X4_NUM },   /* INPUT_MODE_4X4_NUM */
+       { NOT_USED,                                             NOT_USED,                                       INPUT_MODE_4X4_NUM },   /* INPUT_MODE_4X4_SYM_1 */
+       { NOT_USED,                                             NOT_USED,                                       INPUT_MODE_4X4_NUM },   /* INPUT_MODE_4X4_SYM_2 */
+       { NOT_USED,                                             NOT_USED,                                       INPUT_MODE_4X4_NUM },   /* INPUT_MODE_4X4_SYM_3 */
+       { NOT_USED,                                             NOT_USED,                                       INPUT_MODE_4X4_NUM },   /* INPUT_MODE_4X4_SYM_4 */
+       { NOT_USED,                                             NOT_USED,                                       INPUT_MODE_4X4_NUM },   /* INPUT_MODE_4X4_SYM_5 */
+       { INPUT_MODE_4X4_TELEPHONE,             INPUT_MODE_4X4_TELEPHONE,       NOT_USED },                             /* INPUT_MODE_4X4_TELEPHONE */
+       { INPUT_MODE_4X4_URL,                   INPUT_MODE_QTY_URL,                     INPUT_MODE_4X4_NUM },   /* INPUT_MODE_4x4_URL */
+       { INPUT_MODE_4X4_EMAIL,                 INPUT_MODE_QTY_EMAIL,           INPUT_MODE_4X4_NUM },   /* INPUT_MODE_4x4_EMAIL */
+       { INPUT_MODE_4X4_PASSWD,                INPUT_MODE_4X4_PASSWD,                  INPUT_MODE_4X4_NUM},    /* INPUT_MODE_4X4_PASSWD */
+       { INPUT_MODE_4X4_IPv6_123,              INPUT_MODE_4X4_IPv6_123,                        INPUT_MODE_4X4_IPv6_123},       /* INPUT_MODE_4X4_IPv6_123 */
+       { INPUT_MODE_4X4_IPv6_ABC,              INPUT_MODE_4X4_IPv6_ABC,                        INPUT_MODE_4X4_IPv6_123},       /* INPUT_MODE_4X4_IPv6_ABC */
+       { INPUT_MODE_4X4_NUMONLY,               INPUT_MODE_4X4_NUMONLY,         INPUT_MODE_4X4_NUMONLY},        /* INPUT_MODE_4X4_NUMONLY */
+       { INPUT_MODE_4X4_MONTH,                 INPUT_MODE_4X4_MONTH,           INPUT_MODE_4X4_MONTH},  /* INPUT_MODE_4X4_MONTH */
+
+       { INPUT_MODE_4X4_FRENCH,                INPUT_MODE_QTY_FRENCH,          INPUT_MODE_4X4_NUM },   /* INPUT_MODE_3X4_FRENCH */
+       { INPUT_MODE_4X4_SPANISH,               INPUT_MODE_QTY_SPANISH,         INPUT_MODE_4X4_NUM },   /* INPUT_MODE_3X4_SPANISH */
+       { INPUT_MODE_4X4_ITALIAN,               INPUT_MODE_QTY_ITALIAN,         INPUT_MODE_4X4_NUM },   /* INPUT_MODE_3X4_ITALIAN */
+       { INPUT_MODE_4X4_DUTCH,                 INPUT_MODE_QTY_DUTCH,           INPUT_MODE_4X4_NUM },   /* INPUT_MODE_3X4_DUTCH */
+       { INPUT_MODE_4X4_PORTUGUESE,    INPUT_MODE_QTY_PORTUGUESE,      INPUT_MODE_4X4_NUM },   /* INPUT_MODE_3X4_PORTUGUESE */
+       { INPUT_MODE_4X4_GERMAN,                INPUT_MODE_QTY_GERMAN,          INPUT_MODE_4X4_NUM },   /* INPUT_MODE_3X4_GERMAN */
+
+       { INPUT_MODE_4X4_TURKISH,               INPUT_MODE_QTY_TURKISH,         INPUT_MODE_4X4_NUM },   /* INPUT_MODE_3X4_TURKISH */
+       { INPUT_MODE_4X4_GREEK,                 INPUT_MODE_QTY_GREEK,           INPUT_MODE_4X4_NUM },   /* INPUT_MODE_3X4_GREEK */
+       { INPUT_MODE_4X4_RUSSIAN,               INPUT_MODE_QTY_RUSSIAN,         INPUT_MODE_4X4_NUM },   /* INPUT_MODE_3X4_RUSSIAN */
+
+
+       { INPUT_MODE_4X4_ENGLISH,               INPUT_MODE_QTY_ENGLISH,         INPUT_MODE_4X4_NUM },   /* INPUT_MODE_QTY_ENGLISH */
+       { INPUT_MODE_4X4_URL,                   INPUT_MODE_QTY_URL,                     INPUT_MODE_4X4_NUM },   /* INPUT_MODE_QTY_URL */
+       { INPUT_MODE_4X4_EMAIL,                 INPUT_MODE_QTY_EMAIL,           INPUT_MODE_4X4_NUM },   /* INPUT_MODE_QTY_URL */
+       { NOT_USED,                                             NOT_USED,                                       INPUT_MODE_4X4_NUM },   /* INPUT_MODE_QTY_SYM_1 */
+       { NOT_USED,                                             NOT_USED,                                       INPUT_MODE_4X4_NUM },   /* INPUT_MODE_QTY_SYM_2 */
+       { NOT_USED,                                             NOT_USED,                                       INPUT_MODE_4X4_NUM },   /* INPUT_MODE_QTY_SYM_3 */
+       { NOT_USED,                                             NOT_USED,                                       INPUT_MODE_4X4_NUM },   /* INPUT_MODE_QTY_SYM_4 */
+
+
+       { INPUT_MODE_4X4_FRENCH,                INPUT_MODE_QTY_FRENCH,          INPUT_MODE_4X4_NUM },   /* INPUT_MODE_AZT_FRENCH */
+       { INPUT_MODE_4X4_SPANISH,               INPUT_MODE_QTY_SPANISH,         INPUT_MODE_4X4_NUM },   /* INPUT_MODE_QTY_SPANISH */
+       { INPUT_MODE_4X4_ITALIAN,               INPUT_MODE_QTY_ITALIAN,         INPUT_MODE_4X4_NUM },   /* INPUT_MODE_QTY_ITALIAN */
+       { INPUT_MODE_4X4_DUTCH,                 INPUT_MODE_QTY_DUTCH,           INPUT_MODE_4X4_NUM },   /* INPUT_MODE_QTY_DUTCH */
+       { INPUT_MODE_4X4_PORTUGUESE,    INPUT_MODE_QTY_PORTUGUESE,      INPUT_MODE_4X4_NUM },   /* INPUT_MODE_QTY_PORTUGUESE */
+       { INPUT_MODE_4X4_GERMAN,                INPUT_MODE_QTY_GERMAN,          INPUT_MODE_4X4_NUM },   /* INPUT_MODE_QTY_GERMAN */
+
+       { INPUT_MODE_4X4_TURKISH,               INPUT_MODE_QTY_TURKISH,         INPUT_MODE_4X4_NUM },   /* INPUT_MODE_3X4_TURKISH */
+       { INPUT_MODE_4X4_GREEK,                 INPUT_MODE_QTY_GREEK,           INPUT_MODE_4X4_NUM },   /* INPUT_MODE_3X4_GREEK */
+       { INPUT_MODE_4X4_RUSSIAN,               INPUT_MODE_QTY_RUSSIAN,         INPUT_MODE_4X4_NUM },   /* INPUT_MODE_3X4_RUSSIAN */
+};
+
+static KEYPADMODE IseKeypadMode[MAX_INPUT_MODE][2] = { /* PORTRAIT, LANDSCAPE*/
+       {KEYPAD_3X4,            KEYPAD_QWERTY}, /*ENGLISH_4X4*/
+       {KEYPAD_3X4,            KEYPAD_3X4}, /*NUM_4X4*/
+       {KEYPAD_3X4,                    KEYPAD_3X4}, /*SYM_4X4_1*/
+       {KEYPAD_3X4,                    KEYPAD_3X4}, /*SYM_4X4_2*/
+       {KEYPAD_3X4,                    KEYPAD_3X4}, /*SYM_4X4_3*/
+       {KEYPAD_3X4,                    KEYPAD_3X4}, /*SYM_4X4_4*/
+       {KEYPAD_3X4,                    KEYPAD_3X4}, /*SYM_4X4_5*/
+       {KEYPAD_3X4,            KEYPAD_3X4}, /*PHONE_4X4*/
+       {KEYPAD_3X4,            KEYPAD_QWERTY}, /*URL_4X4*/
+       {KEYPAD_3X4,            KEYPAD_QWERTY}, /*EMAIL_4X4*/
+       {KEYPAD_3X4,            KEYPAD_3X4}, /*PASSWD_4X4*/
+       {KEYPAD_3X4,            KEYPAD_3X4}, /*IPv6_4X4_123*/
+       {KEYPAD_3X4,            KEYPAD_3X4}, /*IPv6_4X4_ABC*/
+       {KEYPAD_3X4,            KEYPAD_3X4}, /*NUMONLY_4X4*/
+       {KEYPAD_3X4,                    KEYPAD_3X4}, /*MONTH_4X4*/
+
+       {KEYPAD_3X4,            KEYPAD_QWERTY}, /*FRENCH_4X4*/
+       {KEYPAD_3X4,            KEYPAD_QWERTY}, /*SPANISH_4X4*/
+       {KEYPAD_3X4,            KEYPAD_QWERTY}, /*ITALIAN_4X4*/
+       {KEYPAD_3X4,            KEYPAD_QWERTY}, /*DUTCH_4X4*/
+       {KEYPAD_3X4,            KEYPAD_QWERTY}, /*PORTUGUESE_4X4*/
+       {KEYPAD_3X4,            KEYPAD_QWERTY}, /*GERMAN_4X4*/
+
+       {KEYPAD_3X4,            KEYPAD_QWERTY}, /*TURKISH_4X4*/
+       {KEYPAD_3X4,            KEYPAD_QWERTY}, /*GREEK_4X4*/
+       {KEYPAD_3X4,            KEYPAD_QWERTY}, /*RUSSIAN_4X4*/
+
+       {KEYPAD_QWERTY,         KEYPAD_QWERTY}, /*ENGLISH_QTY*/
+       {KEYPAD_QWERTY,                 KEYPAD_QWERTY}, /*URL_QTY*/
+       {KEYPAD_QWERTY,                 KEYPAD_QWERTY}, /*EMAIL_QTY*/
+       {KEYPAD_QWERTY,         KEYPAD_QWERTY}, /*SYM_QTY_1*/
+       {KEYPAD_QWERTY,         KEYPAD_QWERTY}, /*SYM_QTY_2*/
+       {KEYPAD_QWERTY,         KEYPAD_QWERTY}, /*SYM_QTY_3*/
+       {KEYPAD_QWERTY,         KEYPAD_QWERTY}, /*SYM_QTY_4*/
+
+       {KEYPAD_QWERTY,         KEYPAD_QWERTY}, /*FRENCH_QTY*/
+       {KEYPAD_QWERTY,         KEYPAD_QWERTY}, /*SPANISH_QTY*/
+       {KEYPAD_QWERTY,         KEYPAD_QWERTY}, /*ITALIAN_QTY*/
+       {KEYPAD_QWERTY,         KEYPAD_QWERTY}, /*DUTCH_QTY*/
+       {KEYPAD_QWERTY,         KEYPAD_QWERTY}, /*PORTUGUESE_QTY*/
+       {KEYPAD_QWERTY,         KEYPAD_QWERTY}, /*GERMAN_QTY*/
+
+       {KEYPAD_QWERTY,         KEYPAD_QWERTY}, /*TURKISH_QTY*/
+       {KEYPAD_QWERTY,         KEYPAD_QWERTY}, /*GREEK_QTY*/
+       {KEYPAD_QWERTY,         KEYPAD_QWERTY}, /*RUSSIAN_QTY*/
+};
+
+
+/**
+*@brief Keypad<->NumSym mode table
+*/
+static const mcf8 mcfInputSymModeKeypad[1][MAX_KEYPAD] = { /* as of now only one symbol modes are available */
+       {
+               INPUT_MODE_QTY_SYM_1,   /* KEYPAD_QWRTY_REGIONAL, Regional Qwerty */
+               INPUT_MODE_QTY_SYM_1,   /* KEYPAD_QWERTY,  Descrite Qwerty */
+               INPUT_MODE_4X4_SYM_1,   /* KEYPAD_3X4,  3x4 keypad */
+               INPUT_MODE_QTY_SYM_1    /* KEYPAD_5X4,  5x4 keypad */
+       }
+};
+
+
+static ISELangData IseLangData[MAX_KEYPAD][MAX_LANG_NUM] = {
+    /*KEYPAD_QWRTY_REGIONAL*/
+       {},
+    /*KEYPAD_QWERTY*/
+       {
+               {LANGUAGE_ENGLISH_UNITED_STATES                 ,NULL, NULL , INPUT_MODE_QTY_ENGLISH},
+               {LANGUAGE_DUTCH_STANDARD                                ,NULL, NULL , INPUT_MODE_QTY_DUTCH},
+               {LANGUAGE_FRENCH_STANDARD                               ,NULL, NULL , INPUT_MODE_QTY_FRENCH},
+               {LANGUAGE_GERMAN_STANDARD                               ,NULL, NULL , INPUT_MODE_QTY_GERMAN},
+               {LANGUAGE_ITALIAN_STANDARD                              ,NULL, NULL , INPUT_MODE_QTY_ITALIAN},
+               {LANGUAGE_PORTUGUESE_STANDARD                   ,NULL, NULL , INPUT_MODE_QTY_PORTUGUESE},
+               {LANGUAGE_SPANISH                                               ,NULL, NULL , INPUT_MODE_QTY_SPANISH},
+               {LANGUAGE_TURKISH                                   ,NULL, NULL , INPUT_MODE_QTY_TURKISH},
+               {LANGUAGE_GREEK                                 ,NULL, NULL , INPUT_MODE_QTY_GREEK},
+               {LANGUAGE_RUSSIAN                                   ,NULL, NULL , INPUT_MODE_QTY_RUSSIAN},
+       },
+    /*KEYPAD_3X4*/
+       {
+               {LANGUAGE_ENGLISH_UNITED_STATES                 ,NULL, NULL , INPUT_MODE_4X4_ENGLISH},
+               {LANGUAGE_DUTCH_STANDARD                                ,NULL, NULL , INPUT_MODE_4X4_DUTCH},
+               {LANGUAGE_FRENCH_STANDARD                               ,NULL, NULL , INPUT_MODE_4X4_FRENCH},
+               {LANGUAGE_GERMAN_STANDARD                               ,NULL, NULL , INPUT_MODE_4X4_GERMAN},
+               {LANGUAGE_ITALIAN_STANDARD                              ,NULL, NULL , INPUT_MODE_4X4_ITALIAN},
+               {LANGUAGE_PORTUGUESE_STANDARD                   ,NULL, NULL , INPUT_MODE_4X4_PORTUGUESE},
+               {LANGUAGE_SPANISH                                               ,NULL, NULL , INPUT_MODE_4X4_SPANISH},
+               {LANGUAGE_TURKISH                                   ,NULL, NULL , INPUT_MODE_4X4_TURKISH},
+               {LANGUAGE_GREEK                                 ,NULL, NULL , INPUT_MODE_4X4_GREEK},
+               {LANGUAGE_RUSSIAN                                   ,NULL, NULL , INPUT_MODE_4X4_RUSSIAN},
+       },
+        /*KEYPAD_5X4*/
+       {}
+};
+
+#endif
diff --git a/src/include/languagesetting.h b/src/include/languagesetting.h
new file mode 100755 (executable)
index 0000000..111b0de
--- /dev/null
@@ -0,0 +1,121 @@
+/*
+ * Copyright 2012  Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.tizenopensource.org/license
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+
+#include "ise.h"
+#include "mcf.h"
+#include "ise-default-setting.h"
+#include <gmodule.h>
+
+#define Uses_SCIM_UTILITY
+#define Uses_SCIM_OBJECT
+#define Uses_SCIM_POINTER
+#define Uses_SCIM_EVENT
+#define Uses_SCIM_HELPER
+#define Uses_SCIM_CONFIG_BASE
+
+#ifndef __ISE_LANGUAGESETTING_H__
+#define __ISE_LANGUAGESETTING_H__
+
+#ifdef __cplusplus
+MCF_BEGIN_DECLS
+#endif
+
+#define _EDJ(x) elm_layout_edje_get(x)
+
+#define LANGUAGE       dgettext(GETTEXT_PACKAGE, "IDS_IME_BODY_KEYBOARD_LANGUAGES")    //gettext("IDS_IME_BODY_KEYBOARD_LANGUAGES")
+#define OPTIONS                dgettext(GETTEXT_PACKAGE, "IDS_IME_BODY_KEYBOARD_SETTINGS")     //gettext("IDS_IME_BODY_KEYBOARD_SETTINGS")
+
+#define BASE_THEME_WIDTH 720.0f
+#define BASE_THEME_HEIGHT 1280.0f
+
+typedef struct _SETTING_INFO
+{
+       unsigned char flag;
+       int current_language;
+       int lang_count;
+} SETTING_INFO;
+
+typedef enum _SoftKeyOptions {
+       OPTIONS_WINDOW_BACK,
+       LANG_WINDOW_SET,
+       LANG_WINDOW_CANCEL,
+       KEYBOARD_TYPES_WINDOW_SET,
+       KEYBOARD_TYPES_WINDOW_CANCEL,
+       MAX_SOFTKEY
+}SoftKeyOptions;
+
+typedef struct _ISELangData {
+       char* name;
+       char* imgPath;
+       char* imgPath_for_language_settings;
+       int inputMode;
+       char displayname[256];
+}ISELangData;
+
+SETTING_INFO get_keyboard_option (void);
+
+void set_keyboard_option (bool isEuropeanMode, const SETTING_INFO &info);
+
+
+/**
+ * Create setup genlist when options key is pressed in setting menu.
+       @param[in] layout_main   Main layout
+       @param[in] navi_bar      Navigation bar
+       @param[in] info                  Setting options
+       @return                                 Nothing.
+ *
+ **/
+Evas_Object *create_setup_genlist (Evas_Object *layout_main, Evas_Object *navi_bar, SETTING_INFO info);
+
+
+/**
+ * Shows the options window when options key is pressed in setting menu.
+       @param[in] parentWidget          Mainwindow refernce
+       @return                                 Nothing.
+ *
+ **/
+void
+_show_option_window(Evas_Object * parentWidget);
+
+
+/**
+ * Shows the options window when options key is pressed in keypad.
+       @param[in] parentWidget          Mainwindow refernce
+       @param[in] info                  Setting options
+       @param[in] callback      Keyboard setting callback
+       @return                                 Nothing.
+ *
+ **/
+void
+_show_option_window_ise(Evas_Object *parentWidget, SETTING_INFO info, void mainback(SETTING_INFO currentInfo));
+
+
+/**
+ * clean the selection window.
+       @return                                 Nothing.
+ *
+ **/
+void
+clean_up();
+
+
+#ifdef __cplusplus
+MCF_END_DECLS
+#endif
+
+#endif
diff --git a/src/include/perf_test.h b/src/include/perf_test.h
new file mode 100755 (executable)
index 0000000..e22d747
--- /dev/null
@@ -0,0 +1,62 @@
+/*
+ * Copyright 2012  Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.tizenopensource.org/license
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+
+#ifndef __DEF_perf_test_H_
+#define __DEF_perf_test_H_
+
+#include <Ecore.h>
+
+/* performance evaluation code */
+#define PERF_TEST_DEBUG
+#ifdef PERF_TEST_DEBUG
+#define PERF_TEST_START(szFunc) \
+       static double time1, time2, diff, acc_time;\
+       printf("%s start\n", szFunc); \
+       time1=ecore_time_get();\
+       acc_time = 0;
+
+#define PERF_TEST_MID(szFunc) \
+       time2 = ecore_time_get();\
+       diff=time2-time1;\
+       acc_time+=diff;\
+       printf("%s: Time: %15.3lf\n", szFunc, diff); \
+       time1=ecore_time_get();
+
+#define PERF_TEST_END(szFunc) \
+       time2 = ecore_time_get();\
+       diff = time2-time1;\
+       acc_time += diff;\
+       printf("%s end: Time: %15.3lf\n", szFunc, acc_time);
+
+#define MEASURE_LINK_LOAD_TIME() \
+{ \
+       struct timeval timev;\
+       gettimeofday(&timev, NULL);\
+       printf("Main Entry   : %d.%d\n", timev.tv_sec, timev.tv_usec);\
+       fflush(stdout);\
+}
+
+#else
+#define PERF_TEST_START(szFunc)
+#define PERF_TEST_MID(szFunc)
+#define PERF_TEST_END(szFunc)
+#define MEASURE_LINK_LOAD_TIME()
+#endif /* End of PERF_TEST_DEBUG */
+
+#endif /* __DEF_perf_test_H__ */
+
diff --git a/src/include/strtbl.h b/src/include/strtbl.h
new file mode 100755 (executable)
index 0000000..0610c02
--- /dev/null
@@ -0,0 +1,38 @@
+/*
+ * Copyright 2012  Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.tizenopensource.org/license
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+
+#ifndef __STRING_TABLE_H__
+#define __STRING_TABLE_H__
+
+#include <libintl.h>
+
+#define _(str) gettext(str)
+#define gettext_noop(str) (str)
+#define N_(str) gettext_noop(str)
+
+struct _tc { /* text class */
+       char *name; /* text class name */
+       int size; /* font size */
+};
+
+struct _ts { /* text set */
+       char *name; /* part name */
+       char *msgid; /* message ID */
+};
+
+#endif /* __STRING_TABLE_H__ */
diff --git a/src/include/window_slide_animator.h b/src/include/window_slide_animator.h
new file mode 100755 (executable)
index 0000000..be991da
--- /dev/null
@@ -0,0 +1,110 @@
+/*
+ * Copyright 2012  Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.tizenopensource.org/license
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+
+#include <Ecore_X.h>
+#include <Ecore_IMF.h>
+#include <Elementary.h>
+#include <mcf.h>
+
+#define CLOSE_WINDOW_HEIGHT 40
+
+class CKesslerISEDecorator;
+
+class CWindowSlideAnimator
+{
+       friend class CKesslerISEDecorator;
+public:
+       CWindowSlideAnimator();
+       ~CWindowSlideAnimator();
+
+       void                    set_decorator(CKesslerISEDecorator *decorator) { mDecorator = decorator; }
+       CKesslerISEDecorator*   get_decorator() { return mDecorator; }
+
+       void                    set_target_window(Evas_Object *window);
+       void                    set_start_position(int startx, int starty);
+       void                    set_end_position(int endx, int endy);
+
+       Evas_Object*    get_target_window()                     { return mTargetWindow; }
+       McfPoint                get_start_position()            { return mStartPt; }
+       McfPoint                get_end_position()                      { return mEndPt; }
+
+       void                    start_animation();
+       void                    stop_animation();
+
+       static void             get_window_position(int width, int height, int *showx, int *showy, int *hidex, int *hidey);
+
+protected:
+       static Eina_Bool timer_event(void *data);
+
+       void                    set_timer_handle(Ecore_Timer *handle)   { mTimer = handle; }
+       Ecore_Timer*    get_timer_handle()                      { return mTimer; }
+
+       struct timeval* get_start_time()                        { return &mStartTime; }
+       float                   get_elapsed_time();
+
+protected:
+       static const mcffloat ANIM_TIME = 0.30f;
+       static const mcffloat ANIM_INTERVAL = (1.0f / 60); // Aiming for 30 fps
+
+       Evas_Object* mTargetWindow;
+       McfPoint mStartPt, mEndPt;
+
+       struct timeval mStartTime;
+       Ecore_Timer *mTimer;
+
+       CKesslerISEDecorator *mDecorator;
+};
+
+class CKesslerISEDecorator
+{
+public:
+       CKesslerISEDecorator();
+       ~CKesslerISEDecorator();
+
+       void                    create();
+       void                    destroy();
+
+       void                    set_target_window(Evas_Object *window);
+
+       void                    start_show_animation(int width, int height);
+       void                    start_hide_animation(int width, int height);
+       void                    finish_show_animation(int width, int height);
+
+       void                    animation_timer_cb();
+
+protected:
+       static Eina_Bool timer_event(void *data);
+
+       void                    set_timer_handle(Ecore_Timer *handle)   { mTimer = handle; }
+       Ecore_Timer*    get_timer_handle()                      { return mTimer; }
+
+protected:
+       static const mcffloat CLOSE_TIME = 2.0f;
+       static const int CLOSE_BAR_HEIGHT = CLOSE_WINDOW_HEIGHT;
+
+       enum ANIMATION_TYPE {
+               ANIMATION_TYPE_SHOW,
+               ANIMATION_TYPE_HIDE,
+       };
+       ANIMATION_TYPE mAnimationType;
+
+       CWindowSlideAnimator mAnimator;
+
+       struct timeval mStartTime;
+       Ecore_Timer *mTimer;
+};
diff --git a/src/ise-default-setting.cpp b/src/ise-default-setting.cpp
new file mode 100755 (executable)
index 0000000..39d30ee
--- /dev/null
@@ -0,0 +1,188 @@
+/*
+ * Copyright 2012  Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.tizenopensource.org/license
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+
+#include "mcfdebug.h"
+#include "ise-default-setting.h"
+
+/* For ISE Interface. The below defines should be included in the file
+for processing a controlling data between active appl and this ISE  */
+#define Uses_SCIM_UTILITY
+#define Uses_SCIM_OBJECT
+#define Uses_SCIM_POINTER
+#define Uses_SCIM_EVENT
+#define Uses_SCIM_HELPER
+#define Uses_SCIM_CONFIG_BASE
+#include <scim.h>
+
+using namespace scim;
+
+extern HelperAgent helper_agent;
+static const char *UUID = "d75857a5-4148-4745-89e2-1da7ddaf7999";
+
+static Context Ise_default_context;
+
+static void _send_command(int cmd, uint32 value);
+
+static void _send_command(int cmd, uint32 value)
+{
+       MCF_DEBUG();
+       Transaction trans;
+       trans.put_command(cmd);
+       trans.put_data(value);
+       helper_agent.send_imengine_event(-1, UUID, trans);
+}
+
+/**
+ * @brief Send flush command to keyboard engine.
+ *
+ * @return void
+ */
+
+void send_flush (void)
+{
+       Transaction trans;
+       trans.put_command (CMD_FLUSH);
+       helper_agent.send_imengine_event (-1, UUID, trans);
+}
+
+
+void hide()
+{
+       MCF_DEBUG();
+       KeyEvent key(SCIM_KEY_Cancel, 0);
+       KeyEvent key_release(SCIM_KEY_Cancel, SCIM_KEY_ReleaseMask);
+       helper_agent.send_key_event(-1, "", key);
+       helper_agent.send_key_event(-1, "", key_release);
+}
+
+void reset()
+{
+       MCF_DEBUG();
+       memset(&Ise_default_context, 0x00, sizeof(Ise_default_context));
+}
+
+Context get_Ise_default_context()
+{
+       return Ise_default_context;
+}
+
+void change_completion_option(uint32 completionMode)
+{
+       MCF_DEBUG();
+       _send_command(CMD_COMPLETION, completionMode);
+       Ise_default_context.CompletionMode = completionMode;
+}
+
+void change_ldb_option(uint32 ldbLanguage)
+{
+       MCF_DEBUG();
+       _send_command(CMD_LANGUAGE, ldbLanguage);
+       Ise_default_context.Language = ldbLanguage;
+}
+
+void change_prediction_onoff(bool fEnable)
+{
+       DBG(" on/off fEnable=%d \n", fEnable);
+       MCF_DEBUG();
+       if (fEnable) {
+               _send_command(CMD_STATE, ON);
+       } else {
+               _send_command(CMD_STATE, OFF);
+       }
+       Ise_default_context.OnOff = fEnable;
+}
+
+void change_inputmode(uint32 inputMode)
+{
+       MCF_DEBUG();
+       _send_command(CMD_INPUTMODE, inputMode);
+       Ise_default_context.InputMode = inputMode;
+}
+
+void change_shiftmode(uint32 shiftMode)
+{
+       MCF_DEBUG();
+       _send_command(CMD_SHIFTMODE, shiftMode);
+       Ise_default_context.ShiftMode = shiftMode;
+}
+
+void set_shiftmode(uint32 shiftMode)
+{
+       MCF_DEBUG();
+       Ise_default_context.ShiftMode = shiftMode;
+}
+
+void change_keypad(uint32 keypad)
+{
+       DBG("\n\n  change_keypad keypad=%d\n\n", keypad);
+       MCF_DEBUG();
+       _send_command(CMD_KEYPAD, keypad);
+       Ise_default_context.KeypadMode = keypad;
+}
+
+void mode_syncronize()
+{
+       MCF_DEBUG();
+       /*this is a temp solution, beacause slot_focus_in is
+        * evoked twice at the first mcf-now shown */
+       if (0 == Ise_default_context.Language &&
+           0 == Ise_default_context.KeypadMode &&
+           0 == Ise_default_context.InputMode &&
+           0 == Ise_default_context.OnOff &&
+           0 == Ise_default_context.CompletionMode &&
+           0 == Ise_default_context.SingleCommit)
+
+               return;
+       _send_command(CMD_LANGUAGE, Ise_default_context.Language);
+       _send_command(CMD_KEYPAD, Ise_default_context.KeypadMode);
+       _send_command(CMD_INPUTMODE, Ise_default_context.InputMode);
+       _send_command(CMD_STATE, Ise_default_context.OnOff);
+       _send_command(CMD_COMPLETION, Ise_default_context.CompletionMode);
+       _send_command(CMD_SHIFTMODE, Ise_default_context.ShiftMode);
+
+       if (Ise_default_context.KeypadMode == KEYPAD_3X4) {
+               _send_command(CMD_SINGLECOMMIT,
+                             Ise_default_context.SingleCommit);
+       } else {
+               _send_command(CMD_SINGLECOMMIT, SINGLE_COMMIT_OFF);
+       }
+}
+
+void set_single_commit(uint32 single)
+{
+       MCF_DEBUG();
+       _send_command(CMD_SINGLECOMMIT, single);
+       Ise_default_context.SingleCommit = single;
+       if (single == SINGLE_COMMIT_ON) {
+               change_prediction_onoff(OFF);
+               switch (Ise_default_context.CompletionMode) {
+               case COMPLETION_AMBIGUOUS_LOWERCASE_STRING:
+                       change_completion_option
+                           (COMPLETION_MULTITAB_LOWERCASE_STRING);
+                       break;
+               case COMPLETION_AMBIGUOUS_CAMELCASE_STRING:
+                       change_completion_option
+                           (COMPLETION_MULTITAB_CAMELCASE_STRING);
+                       break;
+               case COMPLETION_AMBIGUOUS_UPPERCASE_STRING:
+                       change_completion_option
+                           (COMPLETION_MULTITAB_UPPERCASE_STRING);
+                       break;
+               }
+       }
+}
diff --git a/src/ise.cpp b/src/ise.cpp
new file mode 100755 (executable)
index 0000000..bc94b50
--- /dev/null
@@ -0,0 +1,1571 @@
+/*
+ * Copyright 2012  Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.tizenopensource.org/license
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+
+#define Uses_SCIM_UTILITY
+#define Uses_SCIM_OBJECT
+#define Uses_SCIM_POINTER
+#define Uses_SCIM_EVENT
+#define Uses_SCIM_HELPER
+#define Uses_SCIM_CONFIG_BASE
+
+#define USE_EFL
+
+/* use EFL*/
+#include <stdlib.h>
+#include <sys/types.h>
+#include <unistd.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <scim.h>
+
+#include <Ecore_X.h>
+#include <Ecore_IMF.h>
+#include <Elementary.h>
+#include <mcf.h>
+
+#include <X11/XF86keysym.h>
+
+#include <vconf.h>
+#include <vconf-keys.h>
+#include <ui-gadget.h>
+
+#include "ise.h"
+#include "isedata.h"
+#include "ise-default-setting.h"
+#include "languagesetting.h"
+#include "include/strtbl.h"
+
+#include "mcfcore.h"
+#include "mcfresource.h"
+#include "include/window_slide_animator.h"
+
+using namespace scim;
+using namespace mcf;
+
+#ifndef SETUP_BUILD
+SETTING_INFO _setup_info;
+std::vector < int >v_lang_list;
+#endif
+
+struct ui_gadget *ug = NULL;
+Evas_Object *ug_box = NULL;
+Evas_Object *box = NULL;
+
+ConfigPointer _scim_config;
+
+Evas_Object *main_window = NULL;
+HelperAgent helper_agent;
+
+CMCFCore *gCore = NULL;
+
+static mcf8 gFKeypadMode = INITIAL_KEYPAD_MODE;
+static mcf8 gInitialInputMode = NOT_USED;
+static mcf32 gPrevInputContext = -1;
+static bool gFLayoutChanged = FALSE;
+static bool gFPrivateKeySet = FALSE;
+static mcfu32 gIseLayout;
+static bool gFLayoutSetting = FALSE;
+static mcfu32 gLastIseLayout = -1;
+static mcfulong prevKeyEvent = NOT_USED;
+static Ecore_Timer *release_block_timer_id;
+int gExplicitLanguageSetting = NOT_USED;
+static ISEPrivateKeyBuffer gPrivateKeyBuffer[ISE_PRIVATE_KEY_BUFFER_SIZE];
+int gDisableKeyBuffer[MAX_KEY];
+static ISELastInputContext gLatestInputContext;
+static mcfboolean gFInputContextSet = FALSE;
+bool gFHiddenState = TRUE;
+bool gFEffectEnabled = TRUE;
+static int prevInputMode = NOT_USED;
+static int prevDispMode = MCFDISPLAY_MAX;
+static bool prevPrivkeySet = FALSE;
+int gExternalShiftLockMode = FALSE;
+MCFKeyModifier gPrevModifier = KEY_MODIFIER_NONE;
+mcfchar *gPrevMultitapValue = NULL;
+Ecore_Timer *release_block_timer_id_for_shift = NULL;
+mcfint privateId = FALSE;
+
+bool email_app_check = FALSE;
+Evas_Object* ctxspopup = NULL;
+
+#ifdef HAVE_CONFORMANT_AUTOSCROLL
+Virtual_Keyboard_State g_virt_keybd_state = KEYPAD_STATE_UNKNOWN;
+#endif
+
+static int create_main_window();
+
+int g_currentLanguage = 0;
+int g_cursor_position = 0;
+
+extern bool IseLangDataSelectState[MAX_LANG_NUM];
+
+/**
+*  * This callback class will receive all response events from MCF
+*   * So you should perform desired tasks in this class.
+*    */
+class CEventCallback:public IMCFEventCallback {
+ public:mcfboolean on_event_key_clicked(McfKeyEventDesc keyEventDesc);
+       mcfboolean on_event_drag_state_changed(McfKeyEventDesc keyEventDesc) {
+               return FALSE;
+       }
+       mcfboolean on_event_notification(MCFNotiType notiType, mcfint etcInfo);
+};
+
+CKesslerISEDecorator decorator;
+
+static CEventCallback callback;
+
+static void _on_input_mode_changed(mcfchar * keyValue, mcfulong keyEvent, MCFKeyType keyType);
+
+static void _on_process_user_defined_keys(mcfchar * keyValue, mcfulong keyEvent, MCFKeyType keyType);
+
+static void ise_send_string(mcfchar * keyValue);
+static void ise_update_preedit_string(mcfchar * str);
+static void ise_send_event(mcfulong keyEvent, mcfulong keyMask = 0);
+static void ise_forward_key_event(mcfulong keyEvent);
+
+static void _set_prediction_private_key();
+static void _set_shift_private_key();
+
+static void ise_set_screen_position();
+
+static void write_config(void)
+{
+       _scim_config->write(CONFIG_SETTING_FLAG, _setup_info.flag);
+       _scim_config->write(CONFIG_LANGUAGE_LIST, v_lang_list);
+       _scim_config->write(CONFIG_CURRENT_LANGUAGE, _setup_info.current_language);
+       _scim_config->write(CONFIG_LANGUAGE_COUNT, _setup_info.lang_count);
+       _scim_config->flush();
+}
+
+static void setting_window_cb(SETTING_INFO info)
+{
+#ifdef SUPPORTS_MULTIPLE_LANGUAGE_SELECTION
+       int current_index = g_currentLanguage;
+       int count = 0;
+       while (!IseLangDataSelectState[current_index] && count < MAX_LANG_NUM) {
+               current_index++;
+               if (current_index >= MAX_LANG_NUM) {
+                       current_index = 0;
+               }
+               count++;
+       }
+
+       if (current_index != g_currentLanguage) {
+               ise_set_language(current_index);
+       }
+#endif
+
+       _setup_info.current_language = g_currentLanguage;
+
+       write_config();
+
+}
+
+#ifdef HAVE_CONFORMANT_AUTOSCROLL
+static void _ise_get_size(struct rectinfo &info)
+{
+       int x, y, width, height;
+
+       info.pos_x = 0;
+       info.pos_y = 0;
+       info.width = 0;
+       info.height = 0;
+       if (main_window) {
+               ecore_evas_geometry_get(ecore_evas_ecore_evas_get
+                                       (evas_object_evas_get(main_window)), &x,
+                                       &y, NULL, NULL);
+               gCore->get_window_size(&width, &height);
+
+               mcfint win_w, win_h;
+               if (gCore) {
+                       gCore->get_screen_resolution(&win_w, &win_h);
+               }
+
+               info.pos_x = (win_w - width) / 2;
+
+               if (gFHiddenState) {
+                       info.pos_y = win_h;
+               } else {
+                       info.pos_y = win_h - (height);
+               }
+
+               info.width = width;
+               info.height = (height);
+       }
+}
+
+void _send_keypad_geom_atom_info(Evas_Object * window, Virtual_Keyboard_State kbd_state)
+{
+       Ecore_X_Window zone, xwin;
+       struct rectinfo info;
+
+       if ((kbd_state == KEYPAD_STATE_UNKNOWN) || (kbd_state == g_virt_keybd_state))
+               return;
+
+       g_virt_keybd_state = kbd_state;
+       xwin = elm_win_xwindow_get(window);
+       zone = ecore_x_e_illume_zone_get(xwin);
+       memset(&info, 0, sizeof(struct rectinfo));
+
+       _ise_get_size(info);
+       if (kbd_state == KEYPAD_STATE_ON) {
+               ecore_x_e_virtual_keyboard_state_set(zone,
+                                                       ECORE_X_VIRTUAL_KEYBOARD_STATE_ON);
+               ecore_x_e_illume_keyboard_geometry_set(zone, info.pos_x,
+                                                       info.pos_y, info.width,
+                                                       info.height);
+       } else {
+               ecore_x_e_virtual_keyboard_state_set(zone,
+                                                       ECORE_X_VIRTUAL_KEYBOARD_STATE_OFF);
+               ecore_x_e_illume_keyboard_geometry_set(zone, info.pos_x,
+                                                       info.pos_y, 0, 0);
+       }
+}
+#endif
+
+static Eina_Bool release_block_timer_event(void *data)
+{
+       send_flush();
+       return ECORE_CALLBACK_CANCEL;
+}
+
+/* For adding delay in Abc Mode */
+static Eina_Bool release_block_timer_event_for_shift(void *data)
+{
+       gCore->set_shift_state(MCF_SHIFT_STATE_OFF);
+       change_shiftmode(SHIFTMODE_OFF);
+       prevKeyEvent = NOT_USED;
+       return 0;
+}
+
+mcfboolean CEventCallback::on_event_notification(MCFNotiType notiType,
+                                                mcfint etcInfo)
+{
+       if (notiType == NOTITYPE_GESTURE_FLICK) {
+               if (etcInfo == DRAG_DOWN) {
+                       {
+                               if (gCore->get_debug_mode() != DEBUGMODE_AUTOTEST) {
+                                       ise_hide(TRUE);
+                               }
+                       }
+               }
+       }
+}
+
+mcfboolean CEventCallback::on_event_key_clicked(McfKeyEventDesc keyEventDesc)
+{
+#ifdef DEBUG_MODE
+       static bool autotest = FALSE;
+       static mcfulong keySeq[3];
+
+       keySeq[0] = keySeq[1];
+       keySeq[1] = keySeq[2];
+       keySeq[2] = keyEventDesc.keyEvent;
+
+       if (autotest) {
+               if (gCore->get_debug_mode() != DEBUGMODE_AUTOTEST) {
+                       autotest = FALSE;
+               }
+       } else if (keySeq[0] == MVK_D && keySeq[1] == MVK_B && keySeq[2] == MVK_G) {
+               gCore->set_debug_mode(DEBUGMODE_AUTOTEST);
+               autotest = TRUE;
+       }
+#endif
+
+       if (keyEventDesc.keyModifier == KEY_MODIFIER_MULTITAP_START) {
+               if (gPrevMultitapValue)
+                       ise_send_string(gPrevMultitapValue);
+
+               ise_update_preedit_string(keyEventDesc.keyValue);
+               gPrevMultitapValue = keyEventDesc.keyValue;
+       } else if (keyEventDesc.keyModifier == KEY_MODIFIER_MULTITAP_REPEAT) {
+               ise_update_preedit_string(keyEventDesc.keyValue);
+               gPrevMultitapValue = keyEventDesc.keyValue;
+       } else if (gPrevModifier == KEY_MODIFIER_MULTITAP_START
+                       || gPrevModifier == KEY_MODIFIER_MULTITAP_REPEAT) {
+               if (gPrevMultitapValue)
+                       ise_send_string(gPrevMultitapValue);
+
+               ise_update_preedit_string("");
+               gPrevMultitapValue = NULL;
+       }
+       gPrevModifier = keyEventDesc.keyModifier;
+
+       if (keyEventDesc.keyEvent == MVK_space) {
+               if (keyEventDesc.keyModifier == KEY_MODIFIER_DIRECTION_LEFT ||
+                                               keyEventDesc.keyModifier == KEY_MODIFIER_DIRECTION_LEFT_RETURN) {
+                       keyEventDesc.keyEvent = MVK_KP_Left;
+               }
+
+               if (keyEventDesc.keyModifier == KEY_MODIFIER_DIRECTION_RIGHT ||
+                                               keyEventDesc.keyModifier == KEY_MODIFIER_DIRECTION_RIGHT_RETURN) {
+                       keyEventDesc.keyEvent = MVK_KP_Right;
+               }
+       }
+
+       static mcfchar *prevLongKeySym = 0;
+       static mcfint prevLongKeyCode = 0;
+
+       DBG("\non_event_key_clicked : %d\n", keyEventDesc.keyModifier);
+
+       if (keyEventDesc.keyModifier == KEY_MODIFIER_LONGKEY) {
+               if (keyEventDesc.keyType == KEY_TYPE_CHAR) {
+                       keyEventDesc.keyType = KEY_TYPE_UNICODE;
+               }
+       }
+
+       switch (keyEventDesc.keyType) {
+       case KEY_TYPE_UNICODE:
+       case KEY_TYPE_SYMBOL:
+               if ((gLatestInputContext.keyType == KEY_TYPE_CHAR)
+                   || (keyEventDesc.keyEvent == MVK_at)
+                   || (keyEventDesc.keyEvent == MVK_slash)) {
+                       /* It will request flush processing to  ise if the user type
+                        * UNICODE after typing CHAR(Composing style) */
+                       DBG("\n\n Last input context is key type char \n\n");
+                       send_flush();
+               }
+
+        if (keyEventDesc.keyEvent == MVK_period) {
+          if (keyEventDesc.keyModifier == KEY_MODIFIER_DIRECTION_LEFT) {
+            ise_send_string(",");
+          } else if (keyEventDesc.keyModifier == KEY_MODIFIER_DIRECTION_RIGHT) {
+            ise_send_string("!");
+          } else if (keyEventDesc.keyModifier == KEY_MODIFIER_DIRECTION_UP) {
+            ise_send_string("?");
+          } else if (keyEventDesc.keyModifier == KEY_MODIFIER_LONGKEY){
+            send_flush();
+          } else {
+            ise_send_string(".");
+             }
+        }
+        else if (keyEventDesc.keyModifier != KEY_MODIFIER_MULTITAP_START &&
+                   keyEventDesc.keyModifier != KEY_MODIFIER_MULTITAP_REPEAT) {
+                       if (keyEventDesc.keyEvent) {
+                               ise_forward_key_event(keyEventDesc.keyEvent);
+                       } else {
+                               ise_send_string(keyEventDesc.keyValue);
+                       }
+               }
+               break;
+       case KEY_TYPE_CHAR:
+       case KEY_TYPE_CONTROL:
+               if (keyEventDesc.keyEvent > UD_MVK_START
+                   && keyEventDesc.keyEvent < UD_MVK_END) {
+                       _on_process_user_defined_keys(keyEventDesc.keyValue,
+                                                                               keyEventDesc.keyEvent,
+                                                                               keyEventDesc.keyType);
+               } else {
+                       if(keyEventDesc.keyType == KEY_TYPE_CHAR) {
+                               ise_send_string(keyEventDesc.keyValue);
+                       }
+                       else {
+                               ise_send_event(keyEventDesc.keyEvent);
+                       }
+               }
+               break;
+       case KEY_TYPE_MODECHANGE:
+               if ((keyEventDesc.keyModifier == KEY_MODIFIER_LONGKEY) &&
+                               (keyEventDesc.keyEvent != UD_MVK_KEYPAD)) {
+                       /* Take care of menu for longpress for QTY keyboard only */
+                       _on_process_user_defined_keys(keyEventDesc.keyValue,
+                                                                               keyEventDesc.keyEvent,
+                                                                               keyEventDesc.keyType);
+               } else {        /* Take care of change-language in short press */
+                       _on_input_mode_changed(keyEventDesc.keyValue,
+                                                                               keyEventDesc.keyEvent,
+                                                                               keyEventDesc.keyType);
+               }
+               break;
+       default:
+               break;
+       }
+
+       if (keyEventDesc.keyEvent != UD_MVK_SHIFT) {
+               if (get_Ise_default_context().KeypadMode == KEYPAD_QWERTY) {
+                       if (get_Ise_default_context().ShiftMode == SHIFTMODE_ON) {
+                               /* Even when a key was pressed, do not turn off
+                                * shift mode if external CAPS_MODE is set */
+                               if (!gExternalShiftLockMode) {
+                                       gCore->set_shift_state(MCF_SHIFT_STATE_OFF);
+                                       helper_agent.update_input_context(ECORE_IMF_INPUT_PANEL_SHIFT_MODE_EVENT,
+                                                                                                       ECORE_IMF_INPUT_PANEL_SHIFT_MODE_OFF);
+                                       change_shiftmode(SHIFTMODE_OFF);
+                               }
+                       }
+               }
+       }
+
+       /* Saves the latest context */
+       gLatestInputContext.keyValue = keyEventDesc.keyValue;
+       gLatestInputContext.keyEvent = keyEventDesc.keyEvent;
+       gLatestInputContext.keyType = keyEventDesc.keyType;
+
+       return TRUE;
+}
+
+void _on_input_mode_changed(mcfchar * keyValue, mcfulong keyEvent, MCFKeyType keyType)
+{
+       mcfboolean bShowCloseWindow = TRUE;
+       mcf8 mode = NOT_USED;
+       static int email_flag = 0;
+
+       int current_index = g_currentLanguage;
+
+       int count = 0;
+       mcfint prevWinWidth, prevWinHeight;
+       gCore->get_window_size(&prevWinWidth, &prevWinHeight);
+
+       gCore->set_update_pending(TRUE);
+
+       switch (keyEvent) {
+       case UD_MVK_OPTION_WINDOW:
+               send_flush();
+               if (gCore->get_debug_mode() != DEBUGMODE_AUTOTEST) {
+                       _setup_info.current_language = g_currentLanguage;
+                       _show_option_window_ise(main_window, _setup_info, setting_window_cb);
+               }
+               break;
+       case UD_MVK_LANG_CHANGE:
+                if(_setup_info.lang_count == 1)
+                  _show_option_window_ise(main_window, _setup_info, setting_window_cb);
+                else if(_setup_info.lang_count == 2) {
+                  send_flush();
+                  do {
+                        count++;
+                        current_index++;
+                        if (current_index >= MAX_LANG_NUM) {
+                                /*IseLangDataSelectState[0] = true;*/
+                                current_index = 0;
+                        }
+                  } while((!IseLangDataSelectState[current_index]) && (count < MAX_LANG_NUM));
+
+                  if(current_index != g_currentLanguage) {
+                    ise_set_language(current_index);
+                    g_currentLanguage = current_index;
+                 }
+                }
+                helper_agent.update_input_context(ECORE_IMF_INPUT_PANEL_LANGUAGE_EVENT, 0);
+               break;
+       case UD_MVK_123:
+               send_flush();
+               ise_send_string(keyValue);
+               mode = INPUT_MODE_4X4_NUM;
+               if (mcf_check_arrindex(gInitialInputMode, MAX_INPUT_MODE)) {
+                       if (IseDefaultInputModes[gInitialInputMode][2] != NOT_USED) {
+                               mode = IseDefaultInputModes[gInitialInputMode][2];
+                       }
+               }
+               gCore->set_input_mode(mode);
+               break;
+       case UD_MVK_SYM:
+               ise_send_event(MVK_FLUSH);
+               gCore->set_input_mode(mcfInputSymModeKeypad[0][get_Ise_default_context().KeypadMode]);
+               break;
+       case UD_MVK_ABC:
+               send_flush();
+               mode = mcfInputModeByLanguage[KEYPAD_QWERTY][g_currentLanguage];
+               gCore->set_input_mode(mode);
+               break;
+       case UD_MVK_NEXTSYM:{
+
+                       mcf8 inputmode = gCore->get_input_mode();
+
+                       /*removed symbol page 3 according to latest spec*/
+                       if (inputmode == INPUT_MODE_QTY_SYM_1)
+                               gCore->set_input_mode(INPUT_MODE_QTY_SYM_2);
+                       if (inputmode == INPUT_MODE_QTY_SYM_2)
+                               gCore->set_input_mode(INPUT_MODE_QTY_SYM_1);
+               }
+               break;
+       case UD_MVK_PREVSYM:{
+
+                       mcf8 inputmode = gCore->get_input_mode();
+
+                       /*removed symbol page 3 according to latest spec*/
+                       if (inputmode == INPUT_MODE_QTY_SYM_1)
+                               gCore->set_input_mode(INPUT_MODE_QTY_SYM_2);
+                       if (inputmode == INPUT_MODE_QTY_SYM_2)
+                               gCore->set_input_mode(INPUT_MODE_QTY_SYM_1);
+               }
+               break;
+       }
+
+       mcf8 language = NOT_USED;
+       if (mode >= 0 && mode < MAX_INPUT_MODE) {
+               language = mcfLanguageByInputMode[mode];
+       }
+
+       if (get_Ise_default_context().Language != language && language != NOT_USED) {
+               change_ldb_option(language);
+       }
+
+       if (gExternalShiftLockMode) {
+               if (gCore->get_input_mode() == INPUT_MODE_QTY_ENGLISH ||
+                       gCore->get_input_mode() == INPUT_MODE_QTY_URL ||
+                       gCore->get_input_mode() == INPUT_MODE_QTY_EMAIL) {
+                               change_shiftmode(SHIFTMODE_LOCK);
+               }
+       }
+
+       mcfboolean forceShiftOff = FALSE;
+
+       if (get_Ise_default_context().ShiftMode == SHIFTMODE_ON && !forceShiftOff) {
+               gCore->set_shift_state(MCF_SHIFT_STATE_ON);
+               helper_agent.update_input_context(ECORE_IMF_INPUT_PANEL_SHIFT_MODE_EVENT,
+                                                               ECORE_IMF_INPUT_PANEL_SHIFT_MODE_ON);
+       } else if (get_Ise_default_context().ShiftMode == SHIFTMODE_LOCK && !forceShiftOff) {
+               gCore->set_shift_state(MCF_SHIFT_STATE_LOCK);
+               helper_agent.update_input_context(ECORE_IMF_INPUT_PANEL_SHIFT_MODE_EVENT,
+                                                               ECORE_IMF_INPUT_PANEL_SHIFT_MODE_ON);
+       } else {
+               if (!forceShiftOff)
+                       change_shiftmode(SHIFTMODE_OFF);
+               gCore->set_shift_state(MCF_SHIFT_STATE_OFF);
+               helper_agent.update_input_context(ECORE_IMF_INPUT_PANEL_SHIFT_MODE_EVENT,
+                                                               ECORE_IMF_INPUT_PANEL_SHIFT_MODE_OFF);
+       }
+
+       gCore->set_update_pending(FALSE);
+       prevInputMode = gCore->get_input_mode();
+       prevDispMode = gCore->get_display_mode();
+
+       if (bShowCloseWindow) {
+               int width, height;
+               gCore->get_window_size(&width, &height);
+               decorator.finish_show_animation(width, height);
+       }
+
+       ise_update_cursor_position(g_cursor_position);
+
+       for (int loop = 0; loop < MAX_KEY; loop++) {
+               if (gDisableKeyBuffer[loop] != NOT_USED) {
+                       gCore->disable_button(gCore->find_keyidx_by_customid(-1, -1, gDisableKeyBuffer[loop]));
+               }
+       }
+
+       mcfint winWidth, winHeight;
+       gCore->get_window_size(&winWidth, &winHeight);
+
+       if (prevWinWidth != winWidth || prevWinHeight != winHeight) {
+               helper_agent.update_input_context(ECORE_IMF_INPUT_PANEL_GEOMETRY_EVENT, 0);
+#ifdef HAVE_CONFORMANT_AUTOSCROLL
+               _send_keypad_geom_atom_info(main_window, KEYPAD_STATE_ON);
+#endif
+       }
+}
+
+void _on_process_user_defined_keys(mcfchar * keyValue, mcfulong keyEvent,
+                             MCFKeyType keyType)
+{
+       mcf8 curInputMode = MAX_INPUT_MODE;
+       if (gCore) {
+               curInputMode = gCore->get_input_mode();
+       }
+
+       int current_index = (g_currentLanguage + 1) % MAX_LANG_NUM;
+       int count = 0;
+       CMCFUtils *utils = CMCFUtils::get_instance();
+
+       switch (keyEvent) {
+       case UD_MVK_OPTION_WINDOW:
+               send_flush();
+               if (gCore->get_debug_mode() != DEBUGMODE_AUTOTEST) {
+                       _setup_info.current_language = g_currentLanguage;
+                       _show_option_window_ise(main_window, _setup_info, setting_window_cb);
+               }
+               break;
+       case UD_MVK_SHIFT:
+               gCore->set_update_pending(TRUE);
+
+               if (get_Ise_default_context().ShiftMode == SHIFTMODE_OFF) {
+                       change_shiftmode(SHIFTMODE_ON);
+                       gCore->set_shift_state(MCF_SHIFT_STATE_ON);
+                       helper_agent.update_input_context(ECORE_IMF_INPUT_PANEL_SHIFT_MODE_EVENT,
+                                                               ECORE_IMF_INPUT_PANEL_SHIFT_MODE_ON);
+               } else if (get_Ise_default_context().ShiftMode == SHIFTMODE_ON) {
+                       change_shiftmode(SHIFTMODE_LOCK);
+                       gCore->set_shift_state(MCF_SHIFT_STATE_LOCK);
+                       helper_agent.update_input_context(ECORE_IMF_INPUT_PANEL_SHIFT_MODE_EVENT,
+                                                               ECORE_IMF_INPUT_PANEL_SHIFT_MODE_ON);
+                       if (get_Ise_default_context().CompletionMode == COMPLETION_AMBIGUOUS_LOWERCASE_STRING
+                               || get_Ise_default_context().CompletionMode == COMPLETION_AMBIGUOUS_CAMELCASE_STRING)
+                                       change_completion_option(COMPLETION_AMBIGUOUS_UPPERCASE_STRING);
+
+                       if (get_Ise_default_context().CompletionMode == COMPLETION_MULTITAB_LOWERCASE_STRING
+                           || get_Ise_default_context().CompletionMode == COMPLETION_MULTITAB_CAMELCASE_STRING)
+                               change_completion_option(COMPLETION_MULTITAB_UPPERCASE_STRING);
+               } else {
+                       change_shiftmode(SHIFTMODE_OFF);
+                       gCore->set_shift_state(MCF_SHIFT_STATE_OFF);
+                       helper_agent.update_input_context(ECORE_IMF_INPUT_PANEL_SHIFT_MODE_EVENT,
+                                                               ECORE_IMF_INPUT_PANEL_SHIFT_MODE_OFF);
+                       if (get_Ise_default_context().CompletionMode == COMPLETION_AMBIGUOUS_UPPERCASE_STRING)
+                               change_completion_option(COMPLETION_AMBIGUOUS_LOWERCASE_STRING);
+
+                       if (get_Ise_default_context().CompletionMode == COMPLETION_MULTITAB_UPPERCASE_STRING)
+                               change_completion_option(COMPLETION_MULTITAB_LOWERCASE_STRING);
+               }
+
+               gCore->set_update_pending(FALSE, TRUE);
+               break;
+       case UD_MVK_LANG_CHANGE:
+               send_flush();
+               while (!IseLangDataSelectState[current_index]
+                       && count < MAX_LANG_NUM) {
+                       current_index++;
+
+                       if (current_index >= MAX_LANG_NUM) {
+                               current_index = 0;
+                       }
+               }
+
+               if (current_index != g_currentLanguage) {
+                       ise_set_language(current_index);
+               }
+               break;
+       case UD_MVK_OK:
+               /*ise_forward_key_event(keyEvent);*/
+               ise_forward_key_event(XF86XK_UserPB);
+               break;
+       case UD_MVK_MORE:
+               /*ise_forward_key_event(keyEvent);*/
+               ise_forward_key_event(XF86XK_User1KB);
+               break;
+       case UD_MVK_HIDE:
+               ise_forward_key_event(XF86XK_User2KB);
+               ise_hide(TRUE);
+               break;
+       case UD_MVK_CHANGEISE:
+               uint32 withUI = 1;
+               break;
+       }
+}
+
+static void _set_prediction_private_key()
+{
+       mcf8 mode = gCore->get_input_mode();
+       mcf8 layout = -1;
+       if (gCore->get_display_mode() == MCFDISPLAY_PORTRAIT) {
+               layout = mcf_input_mode_configure[mode].layoutId[0];
+       } else {
+               layout = mcf_input_mode_configure[mode].layoutId[1];
+       }
+
+       /* Make sure prediction option is set off */
+       if (get_Ise_default_context().OnOff == OFF) {
+               change_prediction_onoff(FALSE);
+       } else {
+               change_prediction_onoff(TRUE);
+       }
+}
+
+/*
+*      _setup_info update on exit of setting menu
+*      It will be called before launching of keyboard
+*/
+SETTING_INFO ise_setting_update_on_reload_config(SETTING_INFO _setup_info)
+{
+       CMCFUtils *utils = CMCFUtils::get_instance();
+       SETTING_INFO info;
+       info = _setup_info;
+       return info;
+}
+
+/**
+* Send the given string to input framework
+*/
+static void ise_send_string(mcfchar * keyValue)
+{
+       helper_agent.commit_string(-1, "", scim::utf8_mbstowcs(keyValue));
+}
+
+/**
+* Send the preedit string to input framework
+*/
+static void ise_update_preedit_string(mcfchar * str)
+{
+       AttributeList temp;
+       helper_agent.update_preedit_string(-1, "", scim::utf8_mbstowcs(str), temp);
+       if (strlen(str) == 0) {
+               helper_agent.hide_preedit_string(-1, "");
+       } else {
+               helper_agent.show_preedit_string(-1, "");
+       }
+}
+
+/**
+* Send the given event to input framework
+*/
+static void ise_send_event(mcfulong keyEvent, mcfulong keyMask)
+{
+       KeyEvent key(keyEvent, keyMask);
+       KeyEvent key_release(keyEvent, SCIM_KEY_ReleaseMask);
+       helper_agent.send_key_event(-1, "", key);
+       helper_agent.send_key_event(-1, "", key_release);
+}
+
+static void ise_forward_key_event(mcfulong keyEvent)
+{
+       KeyEvent key(keyEvent, 0);
+       KeyEvent key_release(keyEvent, SCIM_KEY_ReleaseMask);
+       helper_agent.forward_key_event(-1, "", key);
+       helper_agent.forward_key_event(-1, "", key_release);
+}
+
+/**
+* At ISE show, it will be called
+* In this func,  related variable will set to default for layout
+* See header file
+*/
+void ise_set_layout(mcfu32 layoutIdx)
+{
+       MCF_DEBUG();
+       /* Check if the layoutIdx is in the valid range */
+       if (layoutIdx >= MAX_ISE_LAYOUT_CNT)
+               layoutIdx = 0;
+
+       if (gLastIseLayout != layoutIdx) {
+               gFLayoutChanged = TRUE;
+       } else {
+               gFLayoutChanged = FALSE;
+       }
+       gIseLayout = layoutIdx;
+       gFLayoutSetting = TRUE;
+}
+
+mcfu32 ise_get_layout()
+{
+       return gIseLayout;
+}
+
+static int create_main_window()
+{
+       PERF_TEST_START("create_main_window()");
+       mcfint win_w, win_h;
+
+       /* Create window and set the attribute of window */
+       main_window = elm_win_add(NULL, "ISE_WINDOW", ELM_WIN_BASIC);
+       elm_win_alpha_set(main_window, EINA_TRUE);
+
+       elm_win_borderless_set(main_window, EINA_TRUE);
+
+       elm_win_keyboard_win_set(main_window, EINA_TRUE);
+
+       /* Set font
+       evas = evas_object_evas_get(main_window);
+       evas_font_path_prepend(evas, "/usr/share/SLP/fonts");*/
+
+       box = elm_box_add(main_window);
+       evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       elm_win_resize_object_add(main_window, box);
+
+       decorator.create();
+       decorator.set_target_window(main_window);
+
+       /* get window size */
+       if (gCore) {
+               gCore->get_screen_resolution(&win_w, &win_h);
+       }
+
+       PERF_TEST_END("create_main_window()");
+
+       return EXIT_SUCCESS;
+}
+
+void render_flush_post_cb(void *data, Evas * e, void *event_info)
+{
+       mcfint width = -1;
+       mcfint height = -1;
+       gCore->get_window_size(&width, &height);
+
+       if (gFEffectEnabled) {
+               decorator.start_show_animation(width, height);
+       } else {
+               int posx, posy;
+
+               CWindowSlideAnimator::get_window_position(width, height,
+                                                                                                       &posx, &posy,
+                                                                                                       NULL, NULL);
+               evas_object_move(main_window, posx, posy);
+
+               helper_agent.update_input_context(ECORE_IMF_INPUT_PANEL_STATE_EVENT,
+                                                                               ECORE_IMF_INPUT_PANEL_STATE_SHOW);
+#ifdef HAVE_CONFORMANT_AUTOSCROLL
+               _send_keypad_geom_atom_info(main_window, KEYPAD_STATE_ON);
+#endif
+       }
+       evas_object_show(main_window);
+
+       evas_event_callback_del(e, EVAS_CALLBACK_RENDER_FLUSH_POST, render_flush_post_cb);
+}
+
+void ise_show(int ic)
+{
+       mcfboolean bShouldUpdate = FALSE;
+
+       mcfint width = -1;
+       mcfint height = -1;
+
+       if (gCore == NULL)
+               ise_new();
+
+       mcf_assert_return(gCore);
+
+       if (ise_get_layout() == ISE_LAYOUT_STYLE_EMAIL) {
+               email_app_check = TRUE;
+       }
+
+       if (!gFLayoutSetting) {
+               gIseLayout = ISE_LAYOUT_STYLE_NORMAL;
+               ise_set_layout(gIseLayout);
+       }
+
+       gLastIseLayout = gIseLayout;
+       mcf8 mcfInputMode = gCore->get_input_mode();
+       mcf32 langID = PRIMARY_LANGUAGE_INDEX;
+       mcf8 newInputMode = NOT_USED;
+       mcf8 language = NOT_USED;
+
+       if (mcf_check_arrindex(gExplicitLanguageSetting, MAX_LANG_NUM)) {
+               langID = gExplicitLanguageSetting;
+       }
+
+       gCore->set_update_pending(TRUE);
+
+       if (ic != gPrevInputContext || gFLayoutChanged || !gFInputContextSet
+               || (g_currentLanguage != gExplicitLanguageSetting
+               && gExplicitLanguageSetting != NOT_USED)) {
+                       set_single_commit(IseDefaultValue[gIseLayout].SingleCommit);
+                       change_inputmode(IseDefaultValue[gIseLayout].InputMode);
+
+               if (IseDefaultValue[gIseLayout].mcfInputMode == INPUT_MODE_NATIVE) {
+                       mcfInputMode = mcfInputModeByLanguage[IseDefaultValue[gIseLayout].KeypadMode][langID];
+               } else if (gIseLayout ==  ISE_LAYOUT_STYLE_URL) {
+                       mcfInputMode = mcfInputModeByLanguage[IseDefaultValue[gIseLayout].KeypadMode][langID];
+               } else if (gIseLayout ==  ISE_LAYOUT_STYLE_EMAIL) {
+                       mcfInputMode = mcfInputModeByLanguage[IseDefaultValue[gIseLayout].KeypadMode][langID];
+               } else {
+                       mcfInputMode = IseDefaultValue[gIseLayout].mcfInputMode;
+               }
+
+               if (gFKeypadMode) {
+                               newInputMode = IseDefaultInputModes[mcfInputMode][0];
+               } else {
+                               newInputMode = IseDefaultInputModes[mcfInputMode][1];
+               }
+               if (newInputMode != NOT_USED) {
+                       mcfInputMode = newInputMode;
+               }
+               if (mcfInputMode >= 0 && mcfInputMode < MAX_INPUT_MODE) {
+                       g_currentLanguage = langID;
+                       IseLangDataSelectState[g_currentLanguage] = true;
+                       change_ldb_option(internalLangToLang[langID]);
+                       change_keypad((uint32)IseKeypadMode[mcfInputMode][1]);
+
+                       if (ic != gPrevInputContext) {
+                               change_completion_option(IseInitialCompletionMode[mcfInputMode][get_Ise_default_context().OnOff]);
+                       }
+
+                       gCore->set_input_mode(mcfInputMode, TRUE);
+
+                       mcf8 subLayoutID = IseDefaultValue[gIseLayout].subLayoutID;
+                       if(gCore->get_cur_sublayout_id() != subLayoutID)
+                       {
+                               gCore->set_cur_sublayout_id(subLayoutID);
+                               bShouldUpdate = TRUE;
+                       }
+
+                       if (ic != gPrevInputContext) {
+                               gInitialInputMode = mcfInputMode;
+                       }
+
+                       language = mcfLanguageByInputMode[mcfInputMode];
+               }
+
+               if (get_Ise_default_context().Language != language
+                       && language != NOT_USED) {
+                               change_ldb_option(language);
+               }
+
+               if (TRUE &&
+#ifdef SUPPORTS_LAYOUT_STYLE_MONTH
+                       gCore->get_input_mode() != INPUT_MODE_4X4_MONTH &&
+#endif
+#ifdef SUPPORTS_LAYOUT_STYLE_NUMBERONLY
+                       gCore->get_input_mode() != INPUT_MODE_4X4_NUMONLY &&
+#endif
+#ifdef SUPPORTS_LAYOUT_STYLE_IP
+                       gCore->get_input_mode() != INPUT_MODE_4X4_IPv6_123 &&
+#endif
+                       TRUE) {
+                               _set_prediction_private_key();
+               }
+
+               if(gExternalShiftLockMode) {
+                       change_shiftmode(SHIFTMODE_LOCK);
+                       helper_agent.update_input_context(ECORE_IMF_INPUT_PANEL_SHIFT_MODE_EVENT,
+                                       ECORE_IMF_INPUT_PANEL_SHIFT_MODE_ON);
+                       if (gCore->get_shift_state() != MCF_SHIFT_STATE_LOCK) {
+                               gCore->set_shift_state(MCF_SHIFT_STATE_LOCK);
+                               bShouldUpdate = TRUE;
+                       }
+               } else {
+                       change_shiftmode(IseDefaultValue[gIseLayout].ShiftMode);
+                       helper_agent.update_input_context(ECORE_IMF_INPUT_PANEL_SHIFT_MODE_EVENT,
+                                       (IseDefaultValue[gIseLayout].ShiftMode == SHIFTMODE_OFF)
+                                       ? ECORE_IMF_INPUT_PANEL_SHIFT_MODE_OFF : ECORE_IMF_INPUT_PANEL_SHIFT_MODE_ON);
+                       if (IseDefaultValue[gIseLayout].ShiftMode != gCore->get_shift_state()) {
+                               gCore->set_shift_state((MCFShiftState)IseDefaultValue[gIseLayout].ShiftMode);
+                               bShouldUpdate = TRUE;
+                       }
+               }
+       }
+
+       gCore->show();
+       gCore->disable_input_events(FALSE);
+
+       ise_update_cursor_position(g_cursor_position);
+
+       for (int loop = 0; loop < MAX_KEY; loop++) {
+               if (gDisableKeyBuffer[loop] != NOT_USED) {
+                       gCore->disable_button(gCore->find_keyidx_by_customid(-1, -1, gDisableKeyBuffer[loop]));
+               }
+       }
+
+       static int prevDispModeBackup;
+       prevDispModeBackup = prevDispMode;
+       if (prevInputMode != gCore->get_input_mode()
+               || prevDispMode != gCore->get_display_mode() || gFPrivateKeySet
+               || prevPrivkeySet || bShouldUpdate) {
+                       prevInputMode = gCore->get_input_mode();
+                       prevDispMode = gCore->get_display_mode();
+                       gCore->set_update_pending(FALSE);
+       } else {
+                       gCore->set_update_pending(FALSE, FALSE);
+       }
+
+       /* Postpone window showing until first frame has been fully flushed */
+       if (1) {
+               gCore->get_window_size(&width, &height);
+
+               if (gFEffectEnabled) {
+                       if (gFHiddenState || prevDispModeBackup != gCore->get_display_mode()) {
+                               decorator.start_show_animation(width, height);
+                       } else {
+                               decorator.finish_show_animation(width, height);
+                       }
+               } else {
+                       int posx, posy;
+
+                       CWindowSlideAnimator::get_window_position(width,
+                                                                                                               height,
+                                                                                                               &posx,
+                                                                                                               &posy,
+                                                                                                               NULL,
+                                                                                                               NULL);
+                       evas_object_move(main_window, posx, posy);
+
+                       helper_agent.update_input_context(ECORE_IMF_INPUT_PANEL_STATE_EVENT,
+                                                                                       ECORE_IMF_INPUT_PANEL_STATE_SHOW);
+#ifdef HAVE_CONFORMANT_AUTOSCROLL
+                       _send_keypad_geom_atom_info(main_window, KEYPAD_STATE_ON);
+#endif
+               }
+
+               evas_object_show(main_window);
+       } else {
+               Evas *evas = evas_object_evas_get(main_window);
+               evas_event_callback_add(evas, EVAS_CALLBACK_RENDER_FLUSH_POST,
+                                                       render_flush_post_cb, NULL);
+       }
+
+       evas_object_show(main_window);
+
+       gFLayoutChanged = FALSE;
+       gPrevInputContext = ic;
+       gFInputContextSet = TRUE;
+       gFHiddenState = FALSE;
+
+       gPrevModifier = KEY_MODIFIER_NONE;
+
+       prevPrivkeySet = gFPrivateKeySet;
+}
+
+/**
+* Sets screen position
+*/
+static void ise_set_screen_position()
+{
+       mcfint width = -1;
+       mcfint height = -1;
+
+       if (gCore == NULL)
+               ise_new();
+       mcf_assert_return(gCore);
+
+       gCore->get_window_size(&width, &height);
+       evas_object_resize(main_window, width, height);
+}
+
+void ise_hide(bool fCallHided)
+{
+
+       if (gCore) {
+               gCore->hide();
+               gCore->disable_input_events(TRUE);
+       }
+
+       helper_agent.candidate_hide();
+       send_flush();
+
+       mcfint width = -1;
+       mcfint height = -1;
+
+       gCore->get_window_size(&width, &height);
+       if (gFEffectEnabled) {
+               helper_agent.update_input_context(ECORE_IMF_INPUT_PANEL_STATE_EVENT,
+                                                                               ECORE_IMF_INPUT_PANEL_STATE_HIDE);
+               DBG("-=-=-= update_input_context :\
+                       ECORE_IMF_INPUT_PANEL_STATE_HIDE\n");
+               decorator.start_hide_animation(width, height);
+       } else {
+               if (main_window)
+                       evas_object_move(main_window, -10000, -10000);
+
+               helper_agent.update_input_context(ECORE_IMF_INPUT_PANEL_STATE_EVENT,
+                                                                               ECORE_IMF_INPUT_PANEL_STATE_HIDE);
+       }
+
+       if (email_app_check)
+               email_app_check = FALSE;
+
+       gFHiddenState = TRUE;
+#ifdef HAVE_CONFORMANT_AUTOSCROLL
+       _send_keypad_geom_atom_info(main_window, KEYPAD_STATE_OFF);
+#endif
+}
+
+/**
+* Set  mode
+**/
+void ise_set_mode()
+{
+       mode_syncronize();
+}
+
+void ise_set_language(unsigned int language)
+{
+       mcfint prevWinWidth, prevWinHeight;
+       gCore->get_window_size(&prevWinWidth, &prevWinHeight);
+
+       if (mcf_check_arrindex(language, MAX_LANG_NUM)) {
+               change_ldb_option(internalLangToLang[language]);
+               change_shiftmode(SHIFTMODE_OFF);
+               mcf8 mode = IseLangData[get_Ise_default_context().KeypadMode][language].inputMode;
+               gCore->set_input_mode(mode);
+
+               if (IseDefaultValue[gIseLayout].mcfInputMode == INPUT_MODE_NATIVE) {
+                       gInitialInputMode = gCore->get_input_mode();
+               }
+
+               /* Save current language setting so that this
+                * language will be displayed next time ISE_SHOW is called */
+               gExplicitLanguageSetting = language;
+
+               g_currentLanguage = language;
+               _setup_info.current_language = g_currentLanguage;
+
+               write_config();
+
+               IseLangDataSelectState[g_currentLanguage] = true;
+               _set_prediction_private_key();
+       }
+
+       mcfint winWidth, winHeight;
+       gCore->get_window_size(&winWidth, &winHeight);
+
+       if (prevWinWidth != winWidth || prevWinHeight != winHeight) {
+               helper_agent.update_input_context(ECORE_IMF_INPUT_PANEL_GEOMETRY_EVENT, 0);
+#ifdef HAVE_CONFORMANT_AUTOSCROLL
+               _send_keypad_geom_atom_info(main_window, KEYPAD_STATE_ON);
+#endif
+
+       }
+
+       for (int loop = 0; loop < MAX_KEY; loop++) {
+               if (gDisableKeyBuffer[loop] != NOT_USED) {
+                       gCore->disable_button(gCore->find_keyidx_by_customid(-1, -1, gDisableKeyBuffer[loop]));
+               }
+       }
+       helper_agent.update_input_context(ECORE_IMF_INPUT_PANEL_LANGUAGE_EVENT, 0);
+}
+
+static void get_screen_size(int &width, int &height)
+{
+       Display *d = (Display *) ecore_x_display_get();
+       if (d == NULL) {
+               DBG("ecore_x_display_get () is failed!!!\n");;
+               return;
+       }
+       int screen_num = DefaultScreen(d);
+       width = DisplayWidth(d, screen_num);
+       height = DisplayHeight(d, screen_num);
+       DBG("\n\n width=%d   height=%d \n\n", width, height);
+}
+
+static void _dismissed_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       evas_object_del(obj);
+       CMCFWindows *windows = CMCFWindows::get_instance();
+       windows->destroy_context_popup();
+       obj = NULL;
+}
+
+static void _ctxpopup_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       int curLang = (int)data;
+       evas_object_del(obj);
+       CMCFWindows *windows = CMCFWindows::get_instance();
+       windows->destroy_context_popup();
+       obj = NULL;
+       ise_set_language(curLang);
+}
+
+void _show_language_popup(mcfshort x, mcfshort y) {
+       CMCFWindows *windows = CMCFWindows::get_instance();
+       int width,height;
+       Evas_Object* win = windows->get_context_popup();
+       ctxspopup = elm_ctxpopup_add(win);
+       elm_object_scroll_freeze_push(ctxspopup);
+       evas_object_smart_callback_add(ctxspopup,"dismissed", _dismissed_cb, (void*)win);
+       for (unsigned int loop = 0; loop < MAX_LANG_NUM; loop++) {
+               if (IseLangData[KEYPAD_QWERTY][loop].name) {
+                       scim::String str = scim::scim_get_language_name_english(IseLangData[KEYPAD_QWERTY][loop].name);
+                       strncpy(IseLangData[KEYPAD_QWERTY][loop].displayname, dgettext(GETTEXT_PACKAGE, language_text_name[loop]), 255);
+               }
+       }
+       for (unsigned int loop = 0; loop < MAX_LANG_NUM; loop++) {
+               if (IseLangDataSelectState[loop]) {
+                       elm_ctxpopup_item_append(ctxspopup,IseLangData[1][loop].displayname, NULL, _ctxpopup_cb, (void*)loop);
+               }
+       }
+       get_screen_size(width,height);
+       evas_object_size_hint_max_set(ctxspopup, height, width/2);
+       evas_object_move(ctxspopup,x,y);
+       evas_object_show(win);
+       evas_object_show(ctxspopup);
+}
+
+void ise_set_lang_to_vconf(unsigned int language)
+{
+       if (mcf_check_arrindex(language, MAX_LANG_NUM)) {
+               change_ldb_option(internalLangToLang[language]);
+               g_currentLanguage = language;
+               IseLangDataSelectState[g_currentLanguage] = true;
+
+       }
+}
+
+void ise_focus_in()
+{
+       if (gCore == NULL)
+               ise_new();
+
+       mcf_assert_return(gCore);
+}
+
+void ise_new()
+{
+       if (gCore == NULL) {
+               if (main_window) {
+                       gCore = new CMCFCore((void *)main_window);
+                       gCore->set_event_callback(&callback);
+                       float timeout = elm_config_longpress_timeout_get();
+
+                       /* convert timeout second value to milisecond value;*/
+                       timeout *= 1000;
+                       gCore->set_longkey_duration(timeout);
+               }
+       }
+}
+
+/**
+* It will call when the current ISE lose focus
+*/
+void ise_focus_out()
+{
+       if (gCore == NULL)
+               ise_new();
+       mcf_assert_return(gCore);
+       if (main_window != NULL) {
+                 send_flush();
+       }
+       //memset(gPrivateKeyBuffer, 0x00, sizeof(gPrivateKeyBuffer));
+
+       if (gPrevMultitapValue) {
+               gPrevMultitapValue = NULL;
+       }
+}
+
+void ise_set_caps_mode(unsigned int mode)
+{
+       mcf8 inputmode = gCore->get_input_mode();
+       if (gCore == NULL)
+               ise_new();
+       mcf_assert_return(gCore);
+
+       if (mode) {
+               gExternalShiftLockMode = TRUE;
+       } else {
+               gExternalShiftLockMode = FALSE;
+       }
+
+       if (inputmode == INPUT_MODE_QTY_ENGLISH ||
+        inputmode >= INPUT_MODE_QTY_FRENCH && inputmode <= INPUT_MODE_QTY_RUSSIAN ||
+        inputmode == INPUT_MODE_QTY_URL ||
+        inputmode == INPUT_MODE_QTY_EMAIL) {
+                       change_shiftmode(mode ? SHIFTMODE_LOCK : SHIFTMODE_OFF);
+                       gCore->set_shift_state(mode ? MCF_SHIFT_STATE_LOCK : MCF_SHIFT_STATE_OFF);
+                       helper_agent.update_input_context(ECORE_IMF_INPUT_PANEL_SHIFT_MODE_EVENT,
+                                               mode ? ECORE_IMF_INPUT_PANEL_SHIFT_MODE_ON : ECORE_IMF_INPUT_PANEL_SHIFT_MODE_OFF);
+       }
+}
+
+void ise_explicitly_set_language(unsigned int language)
+{
+       if (language == ECORE_IMF_INPUT_PANEL_LANG_ALPHABET) {
+               /* Force to show PRIMARY_LANGUAGE_INDEX mode*/
+               gExplicitLanguageSetting = PRIMARY_LANGUAGE_INDEX;
+       }
+}
+
+void ise_get_language_locale(char **locale)
+{
+    if(locale) {
+        for(int index = 0;index < (sizeof(lang_table) / sizeof(ISELanguageTable));index++) {
+            if(lang_table[index].language_code == g_currentLanguage) {
+                *locale = strdup(lang_table[index].language_string);
+            }
+        }
+    }
+}
+unsigned int ise_get_language()
+{
+       mcf8 language = 0;
+       if (gCore == NULL)
+               ise_new();
+       mcf_assert_return_false(gCore);
+
+       return language;
+}
+
+/**
+* Sets the current context to default context
+*/
+void ise_reset_context()
+{
+       if (gCore == NULL)
+               ise_new();
+       mcf_assert_return(gCore);
+       send_flush();
+
+       int loop;
+       for (loop = 0; loop < ISE_PRIVATE_KEY_BUFFER_SIZE; loop++) {
+               if (gPrivateKeyBuffer[loop].used) {
+                       gCore->unset_private_key(gPrivateKeyBuffer[loop].privateId);
+               }
+       }
+
+       gCore->set_update_pending(TRUE);
+       memset(gPrivateKeyBuffer, 0x00, sizeof(gPrivateKeyBuffer));
+       gIseLayout = ISE_LAYOUT_STYLE_NORMAL;
+       ise_set_layout(gIseLayout);
+
+       for (loop = 0; loop < MAX_KEY; loop++) {
+               gDisableKeyBuffer[loop] = NOT_USED;
+       }
+
+       gExternalShiftLockMode = FALSE;
+       gFPrivateKeySet = FALSE;
+       gCore->set_update_pending(FALSE, FALSE);
+}
+
+void ise_reset_input_context()
+{
+       if (gCore == NULL)
+               ise_new();
+       mcf_assert_return(gCore);
+       send_flush();
+
+       if (gCore) {
+               gCore->close_all_popups();
+       }
+}
+
+void ise_set_private_key(int keyIdx, char *label, char *imgPath, int valueIdx, char *valueStr)
+{
+       if (gCore == NULL)
+               ise_new();
+
+       mcf_assert_return(gCore);
+
+       mcf_assert_return(valueStr);
+
+       mcf8 pkIndex = -1;
+       mcfint loop;
+
+       for (loop = 0; loop < ISE_PRIVATE_KEY_BUFFER_SIZE; loop++) {
+               /* Overwrite the buffer if the given key is already in the buffer list */
+               if (gPrivateKeyBuffer[loop].keyIdx == keyIdx) {
+                       pkIndex = loop;
+               }
+               if(pkIndex == -1 && !gPrivateKeyBuffer[loop].used) {
+                       pkIndex = loop;
+               }
+       }
+
+       if(pkIndex != -1) {
+               gPrivateKeyBuffer[pkIndex].used = TRUE;
+               gPrivateKeyBuffer[pkIndex].keyIdx = keyIdx;
+
+               if (label) {
+                       strncpy(gPrivateKeyBuffer[pkIndex].label, label, ISE_PRIVATE_KEY_LABEL_LEN - 1);
+                       gPrivateKeyBuffer[pkIndex].label[ISE_PRIVATE_KEY_LABEL_LEN - 1] = '\0';
+               } else {
+                       strcpy(gPrivateKeyBuffer[pkIndex].label, "");
+               }
+
+               if (valueStr) {
+                       strncpy(gPrivateKeyBuffer[pkIndex].valueStr, valueStr, ISE_PRIVATE_KEY_VALUE_LEN - 1);
+                       gPrivateKeyBuffer[pkIndex].valueStr[ISE_PRIVATE_KEY_VALUE_LEN- 1] = '\0';
+               } else {
+                       strcpy(gPrivateKeyBuffer[pkIndex].valueStr, "");
+               }
+
+               if (imgPath) {
+                       strncpy(gPrivateKeyBuffer[pkIndex].ImgPath, imgPath, ISE_PRIVATE_KEY_IMAGE_LEN - 1);
+                       gPrivateKeyBuffer[pkIndex].ImgPath[ISE_PRIVATE_KEY_IMAGE_LEN - 1] = '\0';
+               } else {
+                       strcpy(gPrivateKeyBuffer[pkIndex].ImgPath,"");
+               }
+
+               for(loop = 0; loop < MCF_BUTTON_STATE_MAX; loop++) {
+                       gPrivateKeyBuffer[pkIndex].imgPathArr[loop] = gPrivateKeyBuffer[pkIndex].ImgPath;
+               }
+
+               gCore->set_private_key(-1, -1, gCore->find_keyidx_by_customid(-1, -1, keyIdx),
+                       gPrivateKeyBuffer[pkIndex].label, gPrivateKeyBuffer[pkIndex].imgPathArr, NULL,
+                       valueIdx, gPrivateKeyBuffer[pkIndex].valueStr, TRUE);
+
+               gFPrivateKeySet = TRUE;
+       }
+}
+
+#ifdef SLP_PROF
+inline static double cur_time_get(void)
+{
+       struct timeval timev;
+
+       gettimeofday(&timev, NULL);
+       return (double)timev.tv_sec + (((double)timev.tv_usec) / 1000000);
+}
+#endif
+
+void ise_set_disable_key(int keyIdx, int disabled)
+{
+       if (gCore == NULL)
+               ise_new();
+       mcf_assert_return(gCore);
+       /* Key index */
+       int actualKeyIdx = gCore->find_keyidx_by_customid(-1, -1, keyIdx);
+       if (disabled) {
+               gCore->disable_button(actualKeyIdx);
+       } else {
+               gCore->enable_button(actualKeyIdx);
+       }
+
+       if (disabled) {
+               int iIndex = NOT_USED;
+               for (int loop = 0; loop < MAX_KEY; loop++) {
+                       if (gDisableKeyBuffer[loop] == keyIdx)
+                               return;
+                       if (gDisableKeyBuffer[loop] == NOT_USED) {
+                               iIndex = loop;
+                       }
+               }
+
+               if (iIndex != NOT_USED) {
+                       gDisableKeyBuffer[iIndex] = keyIdx;
+               }
+       } else {
+               for (int loop = 0; loop < MAX_KEY; loop++) {
+                       if (gDisableKeyBuffer[loop] == keyIdx) {
+                               gDisableKeyBuffer[loop] = NOT_USED;
+                       }
+               }
+       }
+
+       gFPrivateKeySet = TRUE;
+}
+
+void ise_update_cursor_position(int position)
+{
+       if (gCore == NULL)
+               ise_new();
+       mcf_assert_return(gCore);
+
+       g_cursor_position = position;
+
+       if (gCore) {
+               if(position > 0) {
+                       ise_set_private_key(CUSTOMID_WWWCOM, WWWCOM_BUTTON_COM_STR, NULL, 0, WWWCOM_BUTTON_COM_STR);
+               } else {
+                       ise_set_private_key(CUSTOMID_WWWCOM, WWWCOM_BUTTON_WWW_STR, NULL, 0, WWWCOM_BUTTON_WWW_STR);
+               }
+       }
+}
+
+void ise_set_return_key_type(unsigned int type)
+{
+       char buf[64];
+
+       switch (type)
+       {
+               case ECORE_IMF_INPUT_PANEL_RETURN_KEY_TYPE_DONE:
+                       sprintf(buf, _("Done"));
+               break;
+               case ECORE_IMF_INPUT_PANEL_RETURN_KEY_TYPE_GO:
+                       sprintf(buf, _("Go"));
+               break;
+               case ECORE_IMF_INPUT_PANEL_RETURN_KEY_TYPE_JOIN:
+                       sprintf(buf, _("Join"));
+               break;
+               case ECORE_IMF_INPUT_PANEL_RETURN_KEY_TYPE_LOGIN:
+                       sprintf(buf, _("Login"));
+               break;
+               case ECORE_IMF_INPUT_PANEL_RETURN_KEY_TYPE_NEXT:
+                       sprintf(buf, _("Next"));
+               break;
+               case ECORE_IMF_INPUT_PANEL_RETURN_KEY_TYPE_SEARCH:
+                       sprintf(buf, _("Search"));
+               break;
+               case ECORE_IMF_INPUT_PANEL_RETURN_KEY_TYPE_SEND:
+                       sprintf(buf, _("Send"));
+               break;
+       }
+
+       if (type != ECORE_IMF_INPUT_PANEL_RETURN_KEY_TYPE_DEFAULT)
+               ise_set_private_key(CUSTOMID_ENTER, buf, NULL, -1, NULL);
+}
+
+void ise_set_return_key_disable(unsigned int disabled)
+{
+       ise_set_disable_key(CUSTOMID_ENTER, disabled);
+}
+
+/**
+* Update spot location
+*/
+void ise_update_spot_location(int x, int y)
+{
+
+}
+
+int init_i18n(const char *domain, const char *dir)
+{
+       if (setlocale(LC_ALL, "") == NULL)
+               return -1;
+
+       if (bindtextdomain(domain, dir) == NULL)
+               return -1;
+
+       if (textdomain(domain) == NULL)
+               return -1;
+
+       return 0;
+}
+
+/**
+* initialize the variables
+*/
+int init(const String & display)
+{
+       PERF_TEST_START("\tinit()");
+
+       char **argv = new char*[4];
+       int argc = 3;
+       int ret;
+
+       main_window = NULL;
+
+       argv[0] = (char *)ISE_NAME;
+       argv[1] = (char *)"--display";
+       argv[2] = const_cast<char *>(display.c_str());
+       argv[3] = 0;
+
+#ifdef SLP_PROF
+       start_time = cur_time_get();
+#endif
+
+       setenv("DISPLAY", display.c_str(), 1);
+
+       elm_init(argc, argv);
+       PERF_TEST_MID("\t\telm_init()");
+
+       ret = init_i18n(PACKAGE, LOCALEDIR);
+
+       create_main_window();
+
+       PERF_TEST_END("\tinit()");
+       return EXIT_SUCCESS;
+}
+
+int fini_cnt = 0;
+
+void fini()
+{
+       if (gCore)
+               delete(gCore);
+       gCore = NULL;
+
+       elm_shutdown();
+}
+
+void ise_get_size(int *x, int *y, int *width, int *height)
+{
+       if (x && y && width && height) {
+               *x = 0;
+               *y = 0;
+               *width = 0;
+               *height = 0;
+
+               mcfint win_w, win_h;
+               if (gCore) {
+                       gCore->get_window_size(width, height);
+                       gCore->get_screen_resolution(&win_w, &win_h);
+
+                       *x = (win_w - *width) / 2;
+                       if (gFHiddenState) {
+                               *y = win_h;
+                       } else {
+                               *y = win_h - (*height);
+                       }
+               }
+       }
+}
diff --git a/src/isemain.cpp b/src/isemain.cpp
new file mode 100755 (executable)
index 0000000..731bff0
--- /dev/null
@@ -0,0 +1,770 @@
+/*
+ * Copyright 2012  Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.tizenopensource.org/license
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+
+#define Uses_SCIM_UTILITY
+#define Uses_SCIM_OBJECT
+#define Uses_SCIM_POINTER
+#define Uses_SCIM_EVENT
+#define Uses_SCIM_HELPER
+#define Uses_SCIM_CONFIG_BASE
+
+#define USE_EFL
+
+#include <stdlib.h>
+#include <sys/types.h>
+#include <unistd.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <scim.h>
+#include <X11/Xlib.h>
+
+#include <glib.h>
+
+#include <Elementary.h>
+
+#include "ise.h"
+#include "isedata.h"
+#include "strtbl.h"
+#include "window_slide_animator.h"
+
+using namespace scim;
+
+#include <Ecore_X.h>
+#include <Ecore_IMF.h>
+#include <Elementary.h>
+
+#include <heynoti.h>
+#include <vconf.h>
+#include <vconf-keys.h>
+#include <ise_context.h>
+
+#define SETTING_LANG                   "file/menu_widget/language"
+
+extern ConfigPointer _scim_config;
+extern SETTING_INFO _setup_info;
+extern std::vector < int >v_lang_list;
+extern mcfint privateId;
+extern Evas_Object* ctxspopup;
+/* Function declaration */
+static void run(const String &display);
+
+static int main_window_xpos = 0;
+static int main_window_ypos = 0;
+static int screen_width;
+static int screen_height;
+
+static int candidate_height = 79;
+static int ise_height = 410;
+
+/* Global variables */
+extern Evas_Object *main_window;
+extern HelperAgent helper_agent;
+extern unsigned int gExplicitLanguageSetting;
+extern bool gFHiddenState;
+static int gLastIC = 0;
+extern bool IseLangDataSelectState[MAX_LANG_NUM];
+
+extern int init(const String &display);
+extern void fini();
+
+static HelperInfo helper_info(String(ISEUUID), ISENAME, "", "",
+#ifndef DEBUG_MODE
+                             SCIM_HELPER_STAND_ALONE |
+                             SCIM_HELPER_NEED_SCREEN_INFO |
+                             SCIM_HELPER_AUTO_RESTART);
+#else
+                             SCIM_HELPER_STAND_ALONE |
+                             SCIM_HELPER_NEED_SCREEN_INFO);
+#endif
+
+void save_config_ise(const ConfigPointer &config);
+
+extern "C" {
+#ifndef SETUP_BUILD
+       void scim_module_init(void)
+       {
+               DBG("%s\n", __func__);
+               helper_info.name = String(ISENAME);
+               helper_info.description =
+                   String("An on-screen ise to input characters.");
+       }
+       void scim_module_exit(void)
+       {
+               DBG("%s\n", __func__);
+       }
+#endif
+       unsigned int scim_helper_module_number_of_helpers(void)
+       {
+               DBG("%s\n", __func__);
+               return 1;
+       }
+
+       bool scim_helper_module_get_helper_info(unsigned int idx,
+                                               HelperInfo &info)
+       {
+               DBG("%s\n", __func__);
+               if (idx == 0) {
+                       info = helper_info;
+                       return true;
+               }
+               return false;
+       }
+
+       String scim_helper_module_get_helper_language(unsigned int idx)
+       {
+               DBG("%s\n", __func__);
+               std::vector < String > langlist;
+               langlist.push_back(SUPPORTED_LANGUAGES);
+               return scim_combine_string_list(langlist);
+       }
+
+       void scim_helper_module_run_helper(const String &uuid,
+                                          const ConfigPointer &config,
+                                          const String &display)
+       {
+               DBG("%s\n", __func__);
+
+               if (!config.null()) {
+                       _scim_config = config;
+                       _setup_info.flag = config->read(CONFIG_SETTING_FLAG, 0);
+                       config->read(CONFIG_LANGUAGE_LIST, &v_lang_list);
+                       _setup_info.current_language = config->read(CONFIG_CURRENT_LANGUAGE, 0);
+                       _setup_info.lang_count = config->read(CONFIG_LANGUAGE_COUNT, 1);
+
+                       for (unsigned int loop = 0; loop < MAX_LANG_NUM; loop++) {
+                               IseLangDataSelectState[loop] = false;
+                       }
+
+                       for (unsigned int i = 0; i < v_lang_list.size(); i++)
+                               IseLangDataSelectState[v_lang_list[i]] = true;
+               }
+               DBG("ise:>>>> Done with assigning scim config \n\n");
+
+               if (uuid == ISEUUID) {
+                       run(display);
+               }
+       }
+}
+
+static void set_transient_for_app_window(Evas_Object *keypad_win)
+{
+       /* Set a transient window for window stack */
+       /* Gets the current XID of the active window into the
+        * root window property  */
+       Atom type_return;
+       unsigned long nitems_return;
+       unsigned long bytes_after_return;
+       int format_return;
+       unsigned char *data;
+       Ecore_X_Window xAppWindow;
+       Ecore_X_Window xKeypadWin = elm_win_xwindow_get(keypad_win);
+       gint ret = 0;
+
+       ret = XGetWindowProperty((Display *) ecore_x_display_get(),
+                                       ecore_x_window_root_get(xKeypadWin),
+                                       ecore_x_atom_get("_ISF_ACTIVE_WINDOW"), 0,
+                                       G_MAXLONG, False, ((Atom) 33), &type_return,
+                                       &format_return, &nitems_return,
+                                       &bytes_after_return, &data);
+
+       if (ret == Success) {
+               if ((type_return == ((Atom) 33)) && (format_return == 32) && (data)) {
+                       xAppWindow = *(Window *) data;
+                       ecore_x_icccm_transient_for_set(xKeypadWin, xAppWindow);
+                       if (data)
+                               XFree(data);
+               }
+       }
+}
+
+static void slot_exit(const HelperAgent *, int ic, const String &uuid)
+{
+       DBG("%s\n", __func__);
+
+       ise_hide(TRUE);
+
+       elm_exit();
+}
+
+static void
+slot_update_screen(const HelperAgent *, int ic,
+               const String &uuid, int screen)
+{
+       DBG("%s\n", __func__);
+       return;
+}
+
+static void
+slot_trigger_property(const HelperAgent *agent, int ic, const String &uuid,
+                     const String &property)
+{
+       DBG("%s\n", __func__);
+}
+
+static bool bind_ise_window_to_im()
+{
+       DBG("%s\n", __func__);
+       if (main_window == NULL) {
+               scim_global_config_update();
+               int socId = scim_global_config_read("/IMWindowSocketID", socId);
+       }
+       return TRUE;
+}
+
+static void slot_focus_out(const HelperAgent *, int ic, const String &uuid)
+{
+       DBG("isemain.cpp  slot_focus_out \n\n");
+       ise_focus_out();
+}
+
+static void slot_focus_in(const HelperAgent *, int ic, const String &uuid)
+{
+       DBG("\n================\n%s\n============\n", __func__);
+
+       ise_set_mode();
+       ise_focus_in();
+}
+
+static int get_root_window_degree()
+{
+       Atom type_return;
+       unsigned long nitems_return;
+       unsigned long bytes_after_return;
+       int format_return;
+       unsigned char *data;
+       gint ret = 0;
+       int retVal = 0;
+       ret =
+           XGetWindowProperty((Display *) ecore_x_display_get(),
+                               ecore_x_window_root_get(elm_win_xwindow_get(main_window)),
+                               ecore_x_atom_get("_E_ILLUME_ROTATE_ROOT_ANGLE"),
+                               0, G_MAXLONG, False, ((Atom) 6), &type_return,
+                               &format_return, &nitems_return,
+                               &bytes_after_return, &data);
+
+       if (ret == Success) {
+               if ((type_return == ((Atom) 6)) && (format_return == 32)
+                       && (data)) {
+                       retVal = *(unsigned int *)data;
+                       if (data)
+                               XFree(data);
+               }
+       }
+
+       return retVal;
+}
+
+static void slot_ise_show(const HelperAgent *, int ic, char *buf, size_t &len)
+{
+       DBG("\n-------------------\n%s\n-------------------, %d\n",
+                  __func__, ic);
+       unsigned int i;
+
+       if (main_window) {
+               evas_object_show(main_window);
+               /*elm_win_raise (main_window);*/
+       }
+
+       /* Set a transient window for window stack */
+       set_transient_for_app_window(main_window);
+
+       static const char *UUID = KEYBD_ISE_UUID;
+       helper_agent.set_keyboard_ise_by_uuid(UUID);
+
+       /* Check if effect is enabled */
+       static Ise_Context iseContext;
+
+       if (len >= sizeof(Ise_Context)) {
+               /* for EFL application*/
+               memcpy(&iseContext, buf, sizeof(iseContext));
+
+               ise_reset_context();    /* reset ISE*/
+
+               ise_explicitly_set_language(iseContext.language);
+
+               ise_set_layout(iseContext.layout);
+
+               ise_set_return_key_type(iseContext.return_key_type);
+
+               ise_set_return_key_disable(iseContext.return_key_disabled);
+
+               ise_set_caps_mode(iseContext.caps_mode);
+
+       } else {
+               DBG("\n-=-=-=-=-=-=-= WARNING WARNING WARNING  - slot_ise_show :\
+                               buf %p len %d size %d =-=-=-=-=-=-=-=-=-=-\n",
+               buf, len, sizeof(iseContext));
+       }
+
+       ise_show(ic);
+       gLastIC = ic;
+}
+
+static void slot_ise_hide(const HelperAgent *, int ic, const String &uuid)
+{
+       DBG("%s\n", __func__);
+       CMCFWindows *windows = CMCFWindows::get_instance();
+       Evas_Object* win = windows->get_context_popup();
+       if(win == NULL)
+         ise_hide(TRUE);
+}
+
+static void slot_get_size(const HelperAgent *, struct rectinfo &info)
+{
+       DBG("%s\n", __func__);
+
+       int x, y, width, height;
+       ise_get_size(&x, &y, &width, &height);
+
+       info.pos_x = x;
+       info.pos_y = y;
+       info.width = width;
+       info.height = height;
+}
+
+static void slot_set_caps_mode(const HelperAgent *, uint32 &mode)
+{
+       ise_set_caps_mode(mode);
+}
+
+static void slot_set_language(const HelperAgent *, uint32 &language)
+{
+       ise_explicitly_set_language(language);
+}
+
+static void slot_set_layout(const HelperAgent *, uint32 &layout)
+{
+       ise_set_layout(layout);
+}
+
+static void slot_get_layout(const HelperAgent *, uint32 &layout)
+{
+       layout = ise_get_layout();
+}
+
+static void slot_update_cursor_position(const HelperAgent *, int ic, const String &uuid, int position)
+{
+       ise_update_cursor_position(position);
+}
+
+static void slot_get_language_locale(const HelperAgent *, int ic, char **locale)
+{
+    ise_get_language_locale(locale);
+}
+static void slot_get_layout_list(const HelperAgent *,
+                                std::vector < uint32 > &list)
+{
+       list.clear();
+#ifdef SUPPORTS_LAYOUT_STYLE_NORMAL
+       list.push_back(ISE_LAYOUT_STYLE_NORMAL);
+#endif
+#ifdef SUPPORTS_LAYOUT_STYLE_NUMBER
+       list.push_back(ISE_LAYOUT_STYLE_NUMBER);
+#endif
+#ifdef SUPPORTS_LAYOUT_STYLE_EMAIL
+       list.push_back(ISE_LAYOUT_STYLE_EMAIL);
+#endif
+#ifdef SUPPORTS_LAYOUT_STYLE_URL
+       list.push_back(ISE_LAYOUT_STYLE_URL);
+#endif
+#ifdef SUPPORTS_LAYOUT_STYLE_PHONENUMBER
+       list.push_back(ISE_LAYOUT_STYLE_PHONENUMBER);
+#endif
+#ifdef SUPPORTS_LAYOUT_STYLE_IP
+       list.push_back(ISE_LAYOUT_STYLE_IP);
+#endif
+#ifdef SUPPORTS_LAYOUT_STYLE_MONTH
+       list.push_back(ISE_LAYOUT_STYLE_MONTH);
+#endif
+#ifdef SUPPORTS_LAYOUT_STYLE_NUMBERONLY
+       list.push_back(ISE_LAYOUT_STYLE_NUMBERONLY);
+#endif
+}
+
+static void slot_set_imdata(const HelperAgent *, char *buf, size_t &len)
+{
+
+}
+
+static void slot_get_imdata(const HelperAgent *, char **buf, size_t &len)
+{
+
+}
+
+/**
+* @brief Set return key type slot function for HelperAgent.
+*
+* @param type The type of return key.
+*
+* @return void
+*/
+static void slot_set_return_key_type (const HelperAgent *, uint32 &type)
+{
+       ise_set_return_key_type(type);
+}
+
+/**
+* @brief Set return key disable slot function for HelperAgent.
+*
+* @param disabled The disable flag of return key.
+*
+* @return void
+*/
+static void slot_set_return_key_disable (const HelperAgent *, uint32 &disabled)
+{
+       ise_set_return_key_disable(disabled);
+}
+
+static void slot_set_private_key_by_label(const HelperAgent *,
+                                                       uint32 &layout_idx,
+                                                       uint32 &key_idx,
+                                                       char *label, char *value)
+{
+       std::cout << "<now> slot_set_private_key_by_label \n";
+       std::cout << "\tlayout_idx = " << layout_idx << "\n";
+       std::cout << "\tkey_idx = " << key_idx << "\n";
+       std::cout << "\tlabel = " << label << "\n";
+       std::cout << "\tvalue = " << value << "\n";
+       ise_set_private_key(key_idx, label, NULL, -1, value);
+}
+
+static void slot_set_private_key_by_image(const HelperAgent *,
+                                                       uint32 &layout_idx,
+                                                       uint32 &key_idx,
+                                                       char *img_path, char *value)
+{
+       std::cout << "<now> slot_set_private_key_by_imagel \n";
+       std::cout << "\tlayout_idx = " << layout_idx << "\n";
+       std::cout << "\tkey_idx = " << key_idx << "\n";
+       std::cout << "\tlabel = " << img_path << "\n";
+       std::cout << "\tvalue = " << value << "\n";
+       ise_set_private_key(key_idx, NULL, img_path, -1, value);
+}
+
+static void slot_set_disable_key(const HelperAgent *,
+                                                       uint32 &layout_idx,
+                                                       uint32 &key_idx, uint32 &disabled)
+{
+       std::cout << "<now> slot_set_disable_key \n";
+       std::cout << "\tlayout_idx = " << layout_idx << "\n";
+       std::cout << "\tkey_idx = " << key_idx << "\n";
+       std::cout << "\tdisabled = " << disabled << "\n";
+
+       ise_set_disable_key(key_idx, disabled);
+}
+
+static void slot_reset_ise_context(const HelperAgent *, int ic,
+                                  const String &uuid)
+{
+       DBG("%s\n", __func__);
+       ise_reset_context();
+}
+
+static void slot_reset_ise_input_context(const HelperAgent *, int ic,
+                                               const String &uuid)
+{
+       std::cout << "<now> slot_reset_ise_input_context\n";
+       ise_reset_input_context();
+}
+
+static void slot_set_screen_direction(const HelperAgent *, uint32 &mode)
+{
+       std::cout << "<now> slot_set_screen_direction" << mode << " \n";
+       return;
+}
+
+static void slot_update_keyboard_ise(const HelperAgent *, int ic,
+                                               const String &uuid,
+                                               const String &ise_name,
+                                               const String &ise_uuid)
+{
+       static int failnum = 0;
+       static const char *UUID = KEYBD_ISE_UUID;
+
+       if (uuid != UUID) {
+               failnum++;
+               if (failnum < 5) {
+                       DBG("***Warning : KEYBOARDISE is not  ISE!!! Retrying ... %d\n", failnum);
+                       helper_agent.set_keyboard_ise_by_uuid(UUID);
+               } else {
+                       DBG("***Warning : KEYBOARDISE is not  ISE!!! Giving up\n");
+               }
+       } else {
+               failnum = 0;
+       }
+}
+
+static void slot_update_keyboard_ise_list(const HelperAgent *, int ic,
+                                               const String &uuid,
+                                               const std::vector < String >
+                                               &ise_list)
+{
+
+}
+
+static void slot_update_candidate_rect(const HelperAgent *, int ic,
+                                               const String &uuid,
+                                               const rectinfo &info)
+{
+
+       std::cout << "    x=" << info.pos_x << " y=" << info.
+               pos_y << " width=" << info.width << " height=" << info.
+               height << "\n";
+       candidate_height = info.height;
+}
+
+static void slot_update_spot_location(const HelperAgent *agent, int ic,
+                                     const String &ic_uuid, int x, int y)
+{
+       DBG("%s\n", __func__);
+}
+
+static Eina_Bool helper_agent_input_handler(void *data,
+                                           Ecore_Fd_Handler *fd_handler)
+{
+       DBG("%s\n", __func__);
+
+       if (helper_agent.has_pending_event()) {
+               if (!helper_agent.filter_event()) {
+                       std::cerr <<"helper_agent.filter_event () is failed!!!\n";
+                       elm_exit();
+               }
+       } else {
+               std::cerr << "helper_agent.has_pending_event () is failed!!!\n";
+               elm_exit();
+       }
+
+       return ECORE_CALLBACK_RENEW;
+}
+
+static void get_screen_size(int &width, int &height)
+{
+       Display *d = (Display *) ecore_x_display_get();
+       if (d == NULL) {
+               DBG("ecore_x_display_get () is failed!!!\n");;
+               return;
+       }
+
+       int screen_num = DefaultScreen(d);
+       width = DisplayWidth(d, screen_num);
+       height = DisplayHeight(d, screen_num);
+       DBG("\n\n width=%d   height=%d \n\n", width, height);
+}
+
+static void slot_reload_config_callback(const HelperAgent *, int ic,
+                                       const String &uuid)
+{
+       CMCFCore *gCore = NULL;
+
+       if (!_scim_config.null()) {
+               _setup_info.flag = _scim_config->read(CONFIG_SETTING_FLAG, _setup_info.flag);
+               _scim_config->read(CONFIG_LANGUAGE_LIST, &v_lang_list);
+               _setup_info.current_language = _scim_config->read(CONFIG_CURRENT_LANGUAGE,
+                                      _setup_info.current_language);
+               _setup_info.lang_count = _scim_config->read(CONFIG_LANGUAGE_COUNT, _setup_info.lang_count);
+
+               for (unsigned int loop = 0; loop < MAX_LANG_NUM; loop++) {
+                       IseLangDataSelectState[loop] = false;
+               }
+
+               for (unsigned int i = 0; i < v_lang_list.size(); i++)
+                       IseLangDataSelectState[v_lang_list[i]] = true;
+
+               ise_set_language(_setup_info.current_language);
+               /* for updating _setup_info before launching
+                * keyboard from any application
+                  if the values are changed through keyboard further
+                  , it will be written through setting_window_cb */
+               _setup_info = ise_setting_update_on_reload_config(_setup_info);
+       }
+}
+
+extern int init_i18n(const char *domain, const char *dir);
+
+void isf_setting_language_changed_cb(keynode_t *key, void *data)
+{
+       DBG("###################### ISE listen that language\
+                       changed ###########################\n");
+       char clang[256] = { 0 };
+       snprintf(clang, sizeof(clang), "%s", vconf_get_str(VCONFKEY_LANGSET));
+       DBG("###################### current language is %s \
+                       ##############################\n",clang);
+
+       if (clang[0]) {
+               setenv("LANG", clang, 1);
+               setlocale(LC_MESSAGES, clang);
+               init_i18n(PACKAGE, LOCALEDIR);
+       } else {
+               setenv("LANG", "en_US.utf8", 1);
+               setlocale(LC_MESSAGES, "en_US.utf8");
+               init_i18n(PACKAGE, LOCALEDIR);
+       }
+}
+
+void signalhandler(int sig)
+{
+       std::cerr << "    Signal=" << sig << "\n";
+       elm_exit();
+}
+
+static Eina_Bool _client_message_cb(void *data, int type, void *event)
+{
+       Ecore_X_Event_Client_Message *ev = (Ecore_X_Event_Client_Message *) event;
+
+       int angle;
+
+       if (ev->message_type == ECORE_X_ATOM_E_ILLUME_ROTATE_ROOT_ANGLE) {
+               if (!gFHiddenState) {
+            CMCFWindows *windows = CMCFWindows::get_instance();
+            Evas_Object* win = windows->get_context_popup();
+            if(win != NULL) {
+              evas_object_del(win);
+              evas_object_del(ctxspopup);
+            }
+                       angle = ev->data.l[0];
+                       Ecore_X_Window activeWin = ev->data.l[1];
+                       if (activeWin ==
+                               ecore_x_icccm_transient_for_get(elm_win_xwindow_get(main_window))) {
+                               ise_show(gLastIC);
+                       }
+               }
+       }
+
+       return ECORE_CALLBACK_RENEW;
+}
+
+void hibernation_enter_callback(void *data)
+{
+       vconf_ignore_key_changed(VCONFKEY_LANGSET,
+                               isf_setting_language_changed_cb);
+}
+
+void hibernation_leave_callback(void *data)
+{
+       vconf_notify_key_changed(VCONFKEY_LANGSET,
+                               isf_setting_language_changed_cb, NULL);
+}
+
+void run(const String &display)
+{
+#ifdef SLP_PROF
+       DBG("[%s] current time : %10.3f\n", __func__, cur_time_get());
+#endif
+
+       DBG("DBG : %s\n", __func__);
+       PERF_TEST_START("run()");
+       char clang[256] = { 0 };
+       int slp_fd;
+       int ret1;
+       int id = helper_agent.open_connection(helper_info, display);
+
+       if (!id) {
+               DBG("\n ERROR: helper_agent open_connection id invalid \n");
+       }
+
+       init(display);
+       ise_new();
+       PERF_TEST_MID("\tinit()");
+
+       get_screen_size(screen_width, screen_height);
+       isf_setting_language_changed_cb(NULL, NULL);
+
+       slp_fd = heynoti_init();
+       heynoti_subscribe(slp_fd, "HIBERNATION_ENTER",
+                         hibernation_enter_callback, NULL);
+       heynoti_subscribe(slp_fd, "HIBERNATION_LEAVE",
+                         hibernation_leave_callback, NULL);
+
+       vconf_notify_key_changed(VCONFKEY_LANGSET,
+                                isf_setting_language_changed_cb, NULL);
+
+       snprintf(clang, sizeof(clang), "%s", vconf_get_str(VCONFKEY_LANGSET));
+
+       for (int loop = 0; loop < MAX_LANG_NUM; loop++) {
+               if (!strcmp(clang, scim::scim_get_language_name_english(IseLangData[1][loop].
+                                                                       name).c_str())) {
+                       gExplicitLanguageSetting = loop;
+                       break;
+               }
+       }
+
+       ret1 = heynoti_attach_handler(slp_fd);
+
+       helper_agent.signal_connect_exit(slot(slot_exit));
+       helper_agent.signal_connect_update_screen(slot(slot_update_screen));
+       helper_agent.signal_connect_trigger_property(slot(slot_trigger_property));
+       helper_agent.signal_connect_focus_out(slot(slot_focus_out));
+       helper_agent.signal_connect_focus_in(slot(slot_focus_in));
+       helper_agent.signal_connect_ise_show(slot(slot_ise_show));
+       helper_agent.signal_connect_ise_hide(slot(slot_ise_hide));
+       helper_agent.signal_connect_get_geometry(slot(slot_get_size));
+       helper_agent.signal_connect_set_language(slot(slot_set_language));
+       helper_agent.signal_connect_set_imdata(slot(slot_set_imdata));
+       helper_agent.signal_connect_get_imdata(slot(slot_get_imdata));
+       helper_agent.signal_connect_set_layout(slot(slot_set_layout));
+       helper_agent.signal_connect_get_layout(slot(slot_get_layout));
+       helper_agent.signal_connect_reset_input_context(slot(slot_reset_ise_input_context));
+       helper_agent.signal_connect_update_keyboard_ise(slot(slot_update_keyboard_ise));
+       helper_agent.signal_connect_update_keyboard_ise_list(slot(slot_update_keyboard_ise_list));
+       helper_agent.signal_connect_update_candidate_geometry(slot(slot_update_candidate_rect));
+       helper_agent.signal_connect_update_spot_location(slot(slot_update_spot_location));
+       helper_agent.signal_connect_set_caps_mode(slot(slot_set_caps_mode));
+       helper_agent.signal_connect_update_cursor_position( slot (slot_update_cursor_position));
+       helper_agent.signal_connect_get_language_locale( slot (slot_get_language_locale));
+       helper_agent.signal_connect_reload_config(slot(slot_reload_config_callback));
+       helper_agent.signal_connect_set_return_key_type (slot (slot_set_return_key_type));
+       helper_agent.signal_connect_set_return_key_disable (slot (slot_set_return_key_disable));
+#ifndef USE_EFL
+       helper_agent.signal_connect_get_geometry(slot(slot_get_size));
+#endif
+
+       helper_agent.set_candidate_position(-1, -1);
+
+       int fd = helper_agent.get_connection_number();
+       if (fd >= 0) {
+               Property prop("/EuropeanISE", "EuropeanISE", "",
+                               "Show/Hide EuropeanISE.");
+               PropertyList props;
+               props.push_back(prop);
+               helper_agent.register_properties(props);
+               ecore_main_fd_handler_add(fd, ECORE_FD_READ,
+                                       helper_agent_input_handler, NULL,
+                                       NULL, NULL);
+       }
+
+       Ecore_Event_Handler *XClientMsgHandler =
+                                       ecore_event_handler_add(ECORE_X_EVENT_CLIENT_MESSAGE,
+                                       _client_message_cb, NULL);
+
+       PERF_TEST_MID("\tbegin elm_run()");
+
+       PERF_TEST_END("run()");
+
+       signal(SIGQUIT, signalhandler);
+       signal(SIGTERM, signalhandler);
+       signal(SIGINT, signalhandler);
+       signal(SIGHUP, signalhandler);
+       elm_run();
+
+       vconf_ignore_key_changed(VCONFKEY_LANGSET,
+                                       isf_setting_language_changed_cb);
+       ecore_event_handler_del(XClientMsgHandler);
+       heynoti_close(slp_fd);
+       DBG("shutdown\n");
+       fini();
+}
diff --git a/src/languagesetting.cpp b/src/languagesetting.cpp
new file mode 100755 (executable)
index 0000000..55f9cc5
--- /dev/null
@@ -0,0 +1,902 @@
+/*
+ * Copyright 2012  Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.tizenopensource.org/license
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+
+#include "mcfdebug.h"
+#include "isedata.h"
+#include "ise-default-setting.h"
+#include "languagesetting.h"
+#include <Elementary.h>
+#include <Ecore_X.h>
+#include <Ecore_IMF.h>
+#include <gmodule.h>
+#include <stdlib.h>
+#include <string.h>
+#include <ui-gadget.h>
+#include <aul.h>
+
+/* For ISE Interface. The below defines should be included in the file
+   for processing a controlling data between active appl and this ISE  */
+#define Uses_SCIM_UTILITY
+#define Uses_SCIM_OBJECT
+#define Uses_SCIM_POINTER
+#define Uses_SCIM_EVENT
+#define Uses_SCIM_HELPER
+#define Uses_SCIM_CONFIG_BASE
+
+#include <scim.h>
+#include <scim_config_path.h>
+
+#define ISF_UUID "ff110940-b8f0-4062-9ff6-a84f4f3setup"
+#define ISF_DISPLAY ":13"
+
+using namespace scim;
+
+typedef struct _Keypad_Data {
+       Elm_Object_Item *keypad_item;
+       Elm_Object_Item *lang_item;
+       Evas_Object *keypad_rdg;
+} Keypad_Data;
+
+#define ITEM_DATA_STRING_LEN 32
+
+#define LANGUAGE_ID                            0
+#define KEYBOARD_ID                            1
+#define MAX_ID                                         2
+
+#define LAYOUT_EDJ_PATH "/usr/share/isf/ise/"ISE_NAME"/edje"
+#define LAYOUT_EDJ_NAME LAYOUT_EDJ_PATH"/"ISE_NAME"_layout.edj"
+
+struct ItemData {
+       char text[ITEM_DATA_STRING_LEN];
+       char sub_text[ITEM_DATA_STRING_LEN];
+       int mode;
+};
+
+ItemData itemdata[MAX_ID] = { 0 };
+
+extern int g_currentLanguage;
+extern SETTING_INFO _setup_info;
+extern std::vector < int >v_lang_list;
+static Keypad_Data keypad_subdata;
+
+Evas_Object *option_list = NULL;
+
+
+static char *Lang_count_List[] =
+       { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10",
+               "11", "12", "13","14", "15", "16", "17", "18", "19",
+               "20", "21", "22", "23", "24", "25", "26", "27", "28",
+               "29","30", "31", "32", "33", "34", "35"
+};
+
+void (*callback) (SETTING_INFO) = NULL;
+
+static mcfu32 lang_num_index;
+
+typedef struct _IseSettings Ise_Settings;
+
+/*Array to keep track of the current selected languages*/
+bool IseLangDataSelectState[MAX_LANG_NUM] = { false };
+
+struct _IseSettings {
+       Evas_Object *parent;
+       Evas_Object *option_window;
+       Evas_Object *option_layout;
+       Elm_Object_Item *First_item;
+       Evas_Object *naviframe;
+       Evas_Object *effect_ly;
+       struct ui_gadget *ug;
+       char *SelLang;
+       int SelKeypad;
+       bool openedViaGadget;
+};
+
+
+
+static Ise_Settings ad;
+extern ConfigPointer _scim_config;
+extern Evas_Object *main_window;
+static Ecore_Event_Handler *evtHandler = NULL;
+
+static Evas_Object *create_main_window();
+static Evas_Object *create_bg(Evas_Object *window);
+static Evas_Object *create_option_mainview(Evas_Object *parent);
+static Evas_Object *create_scroller(Evas_Object *parent);
+static Evas_Object *create_naviframe(Evas_Object *ly);
+static Evas_Object *create_layout(Evas_Object *parent);
+static Evas_Object *create_dialogue_layout(Evas_Object *parent);
+static Evas_Object *create_list_view(Evas_Object *parent);
+Evas_Object *create_radio_item(Evas_Object *parent, Evas_Object **RadioButton, const char *Title);
+static Evas_Object *create_radio_button(Evas_Object *parent);
+static Evas_Object *create_check_button(Evas_Object *parent);
+
+static Evas_Object *gl4_onoff_get(void *data, Evas_Object *obj,const char *part);
+static Eina_Bool gl4_state_get(void *data, Evas_Object *obj, const char *part);
+
+static void gl4_del(void *data, Evas_Object *obj);
+static void gl4_sel(void *data, Evas_Object *obj, void *event_info);
+
+static void option_list_clicked(void *data, Evas_Object *obj,  void *event_info);
+static void _show_language_selection_view(Evas_Object *window);
+static void list_selected(void *data, Evas_Object *obj, void *event_info);
+static void set_the_selected_language(Evas_Object *obj);
+static void softkey_clicked    (void *data, Evas_Object *obj, void *event_info);
+static Eina_Bool _ise_keydown_exit_cb(void *data, int type, void *event);
+static void _lang_cancel_cb(void *data, Evas_Object *obj, void *event_info);
+static void _lang_set_cb(void *data, Evas_Object *obj, void *event_info);
+static void _option_cancel_cb(void *data, Evas_Object *obj, void *event_info);
+static void _option_done_cb(void *data, Evas_Object *obj, void *event_info);
+
+Evas_Object *create_setup_genlist(Evas_Object *layout_main,
+                                 Evas_Object *naviframe, SETTING_INFO info)
+{
+       Evas_Object *genlist = NULL;
+       Evas_Object *window = NULL;
+       Evas_Object *layout = NULL;
+
+       memset(&ad,0x0,sizeof(Ise_Settings));
+       ad.option_layout = layout_main;
+       ad.naviframe = naviframe;
+       ad.parent = NULL;
+       ad.openedViaGadget = TRUE;
+
+       for (unsigned int loop = 0; loop < MAX_LANG_NUM; loop++) {
+               if (IseLangData[KEYPAD_QWERTY][loop].name) {
+                       scim::String str =      scim::scim_get_language_name_english(IseLangData
+                                                                       [KEYPAD_QWERTY]
+                                                                       [loop].name);
+                       //strncpy(IseLangData[KEYPAD_QWERTY][loop].displayname, str.c_str(), 255);
+                       strncpy(IseLangData[KEYPAD_QWERTY][loop].displayname, dgettext(GETTEXT_PACKAGE, language_text_name[loop]), 255);
+               }
+       }
+
+       genlist = create_option_mainview(layout_main);
+       option_list = genlist;
+
+       return genlist;
+}
+
+SETTING_INFO get_keyboard_option(void)
+{
+       return _setup_info;
+}
+
+void set_keyboard_option(bool isEuropeanMode, const SETTING_INFO &info)
+{
+       _setup_info = info;
+
+       /*display language  set state */
+       if (isEuropeanMode) {
+               if (keypad_subdata.lang_item != NULL)
+                       strncpy(itemdata[LANGUAGE_ID].sub_text,
+                               gettext(Lang_count_List
+                                       [_setup_info.lang_count]),
+                                       ITEM_DATA_STRING_LEN - 1);
+       }
+
+       /*resetting all language state before filling again */
+       memset(IseLangDataSelectState, false, MAX_LANG_NUM);
+
+       IseLangDataSelectState[g_currentLanguage] = true;
+
+       /*filling selected language */
+       for (unsigned int i = 0; i < v_lang_list.size(); i++)
+               IseLangDataSelectState[v_lang_list[i]] = true;
+
+       if (keypad_subdata.lang_item) {
+               elm_genlist_item_update(keypad_subdata.lang_item);
+       }
+
+       if (keypad_subdata.keypad_item) {
+               elm_genlist_item_update(keypad_subdata.keypad_item);
+       }
+}
+
+static Evas_Object *create_main_window()
+{
+       Evas_Object *window = NULL;
+       Evas_Coord win_w, win_h;
+
+       window = elm_win_add(NULL, "Option window", ELM_WIN_BASIC);
+       ecore_x_icccm_name_class_set(elm_win_xwindow_get
+                                    (static_cast<Evas_Object *>(window)),
+                                    "Setting Window", "ISF");
+       ecore_x_window_size_get(ecore_x_window_root_first_get(), &win_w,
+                               &win_h);
+       evas_object_move(window, 0, 0);
+
+       evas_object_resize(window, win_w, win_h);
+
+       elm_win_borderless_set(window, 1);
+       evas_object_show(window);
+
+       return window;
+}
+
+static Evas_Object *create_bg(Evas_Object *window)
+{
+       Evas_Object *bg=NULL;
+
+       bg = elm_bg_add(window);
+       evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       elm_win_resize_object_add(window, bg);
+       evas_object_show(bg);
+
+       return bg;
+}
+
+static Evas_Object *create_scroller(Evas_Object *parent)
+{
+       for (unsigned int loop = 0; loop < MAX_LANG_NUM; loop++) {
+               if (IseLangData[KEYPAD_QWERTY][loop].name) {
+                       scim::String str = scim::scim_get_language_name_english(IseLangData
+                                                                               [KEYPAD_QWERTY]
+                                                                               [loop].name);
+                       //strncpy(IseLangData[KEYPAD_QWERTY][loop].displayname, str.c_str(), 255);
+                       strncpy(IseLangData[KEYPAD_QWERTY][loop].displayname, dgettext(GETTEXT_PACKAGE, language_text_name[loop]), 255);
+               }
+       }
+
+       Evas_Object *scroller = elm_scroller_add(parent);
+       elm_scroller_bounce_set(scroller, EINA_FALSE, EINA_TRUE);
+       elm_scroller_policy_set(scroller, ELM_SCROLLER_POLICY_OFF,
+                                       ELM_SCROLLER_POLICY_AUTO);
+       evas_object_show(scroller);
+
+       return scroller;
+}
+
+static char *_gl_text_get(void *data, Evas_Object *obj, const char *part)
+{
+       ItemData *item_data = (ItemData *) data;
+       if (!strcmp(part, "elm.text")) {
+               return strdup(item_data->text);
+       }
+       if (!strcmp(part, "elm.text.1")) {
+               return strdup(item_data->text);
+       }
+       if (!strcmp(part, "elm.text.2")) {
+               return strdup(item_data->sub_text);
+       }
+}
+
+static Evas_Object *_gl_content_get(void *data, Evas_Object *obj,
+                                const char *part)
+{
+       Evas_Object *item = NULL;
+       ItemData *item_data = (ItemData *) data;
+       return item;
+}
+
+static void _gl_sel(void *data, Evas_Object *obj, void *event_info)
+{
+
+       Elm_Object_Item *item = (Elm_Object_Item *) event_info;
+
+       int id = (int)(data);
+
+       switch (id) {
+       case LANGUAGE_ID:{
+                       elm_genlist_item_selected_set(item, EINA_FALSE);
+                       option_list_clicked((void *)LANGUAGE, NULL, NULL);
+               }
+               break;
+       }
+}
+
+static Eina_Bool _gl_state_get(void *data, Evas_Object *obj, const char *part)
+{
+       return EINA_FALSE;
+}
+
+static void _gl_del(void *data, Evas_Object *obj)
+{
+       return;
+}
+
+static void _gl_con(void *data, Evas_Object *obj, void *event_info)
+{
+}
+
+static void _gl_selected(void *data, Evas_Object *obj, void *event_info)
+{
+}
+
+static void _gl_exp(void *data, Evas_Object *obj, void *event_info)
+{
+}
+
+static Evas_Object *create_option_mainview(Evas_Object *parent)
+{
+       ad.option_layout = parent;
+       memset(&keypad_subdata, 0x00, sizeof(keypad_subdata));
+       static Elm_Genlist_Item_Class itcSeparator;
+
+       Evas_Object *genlist = elm_genlist_add(ad.naviframe);
+
+       static Elm_Genlist_Item_Class itcOnOff;
+       static Elm_Genlist_Item_Class itcOnOff2;
+       static Elm_Genlist_Item_Class itcTextOnly;
+
+       itcTextOnly.item_style = "dialogue/2text.3";
+       itcTextOnly.func.text_get = _gl_text_get;
+       itcTextOnly.func.content_get = _gl_content_get;
+       itcTextOnly.func.state_get = _gl_state_get;
+       itcTextOnly.func.del = _gl_del;
+
+       /* Set item class for dialogue seperator*/
+       itcSeparator.item_style = "dialogue/seperator";
+       itcSeparator.func.text_get = NULL;
+       itcSeparator.func.content_get = NULL;
+       itcSeparator.func.state_get = NULL;
+       itcSeparator.func.del = NULL;
+
+       Elm_Object_Item *separator = elm_genlist_item_append(genlist, &itcSeparator, NULL, NULL,
+                                                                                               ELM_GENLIST_ITEM_NONE, NULL, NULL);
+       elm_genlist_item_select_mode_set(separator, ELM_OBJECT_SELECT_MODE_NONE);
+
+#if MAX_LANG_NUM > 2
+       strncpy(itemdata[LANGUAGE_ID].text, LANGUAGE, ITEM_DATA_STRING_LEN - 1);
+       strncpy(itemdata[LANGUAGE_ID].sub_text,
+               gettext(Lang_count_List[_setup_info.lang_count]),
+               ITEM_DATA_STRING_LEN - 1);
+       itemdata[LANGUAGE_ID].mode = LANGUAGE_ID;
+       keypad_subdata.lang_item = elm_genlist_item_append(genlist, &itcTextOnly,
+                                                                                               &itemdata[LANGUAGE_ID], NULL,
+                                                                                               ELM_GENLIST_ITEM_NONE, _gl_sel,
+                                                                                               (void *)(itemdata[LANGUAGE_ID].mode));
+#endif
+
+       evas_object_smart_callback_add(genlist, "selected", _gl_selected, genlist);
+       evas_object_smart_callback_add(genlist, "expanded", _gl_exp, genlist);
+       evas_object_smart_callback_add(genlist, "contracted", _gl_con, genlist);
+
+       return genlist;
+}
+
+static Evas_Object *create_layout(Evas_Object *parent)
+{
+       Evas_Object *ly;
+
+       /* create a main layout */
+       ly = elm_layout_add( parent );
+       elm_layout_theme_set( ly, "layout", "application", "default" );
+       evas_object_size_hint_weight_set( ly, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       elm_win_resize_object_add( parent, ly );
+       evas_object_show( ly );
+
+       return ly;
+}
+
+static Evas_Object *create_dialogue_layout(Evas_Object *parent)
+{
+       Evas_Object *ly;
+
+       /* create a main layout */
+       ly = elm_layout_add(parent);
+       elm_layout_theme_set(ly, "standard", "window", "integration");
+       evas_object_size_hint_weight_set(ly, EVAS_HINT_EXPAND,
+                                        EVAS_HINT_EXPAND);
+       elm_win_resize_object_add(parent, ly);
+       evas_object_show(ly);
+
+       edje_object_signal_emit(_EDJ(ly), "elm,state,show,content", "elm");
+       edje_object_signal_emit(_EDJ(ly), "elm,bg,show,group_list", "elm");
+
+       return ly;
+}
+
+static Evas_Object *create_list_view(Evas_Object *parent)
+{
+       Evas_Object *lang_list = NULL;
+
+       lang_list = elm_list_add(parent);
+       elm_list_mode_set(lang_list, ELM_LIST_COMPRESS);
+       evas_object_smart_callback_add(lang_list, "selected", list_selected, NULL);
+       return lang_list;
+}
+
+Evas_Object *create_radio_item(Evas_Object *parent,
+                                                                       Evas_Object **RadioButton,
+                                                                       const char *Title)
+{
+       Evas_Object *rd=NULL;
+
+       rd = elm_radio_add(parent);
+       evas_object_show(rd);
+       return rd;
+}
+
+static Evas_Object *create_radio_button(Evas_Object *parent)
+{
+       Evas_Object *rd = NULL;
+
+       rd = elm_radio_add(parent);
+       evas_object_show(rd);
+       return rd;
+}
+
+static Evas_Object *create_check_button(Evas_Object *parent)
+{
+       Evas_Object *ck = NULL;
+
+       ck = elm_check_add(parent);
+       evas_object_show(ck);
+       return ck;
+}
+
+static Evas_Object *create_naviframe(Evas_Object *ly)
+{
+       Evas_Object *naviframe = NULL;
+
+       naviframe = elm_naviframe_add(ly);
+       evas_object_show(naviframe);
+
+       return naviframe;
+}
+
+void clean_up()
+{
+       if (!ad.openedViaGadget && ad.option_window) {
+               if (ad.naviframe)
+                       ad.naviframe = NULL;
+               evas_object_del(ad.option_layout);
+               ad.option_layout = NULL;
+               evas_object_hide(ad.option_window);
+       } else {
+               ad.openedViaGadget = FALSE;
+       }
+
+       if (ad.parent) {
+               evas_object_show(ad.parent);
+               evas_object_raise(ad.parent);
+       }
+
+       if (evtHandler)
+               ecore_event_handler_del(evtHandler);
+       evtHandler = NULL;
+
+}
+
+static void list_selected(void *data, Evas_Object *obj, void *event_info)
+{
+       Elm_Object_Item *it = (Elm_Object_Item *) elm_list_selected_item_get(obj);
+       if (it)
+               elm_list_item_selected_set(it, 0);
+}
+
+static void set_the_selected_language(Evas_Object *obj)
+{
+       unsigned int loop = 0, order = 0;
+       bool state;
+       Elm_Object_Item *NextItem = NULL, *Item = NULL;
+
+#ifdef SUPPORTS_MULTIPLE_LANGUAGE_SELECTION
+       Evas_Object *check = NULL;
+       if (ad.First_item) {
+               NextItem = elm_list_item_next(ad.First_item);
+               check = elm_object_item_part_content_get(ad.First_item, "start");
+               if (check) {
+                       state = elm_check_state_get(check);
+                       IseLangDataSelectState[order] = state;
+               }
+       }
+       do {
+               order++;
+               if (NextItem) {
+                       Item = NextItem;
+                       NextItem = elm_list_item_next(Item);
+                       check = elm_object_item_part_content_get(Item, "start");
+                       if (check) {
+                               state = elm_check_state_get(check);
+                               IseLangDataSelectState[order] = state;
+                       }
+               }
+       } while (NextItem);
+
+       /* saving current values into global structure */
+       _setup_info.current_language = g_currentLanguage;
+
+       /* If hard key is pressed for saving current values into global structure
+          and no language is selected update lang_count to 1 */
+       if (_setup_info.lang_count == 0)
+               _setup_info.lang_count = 1;
+
+       v_lang_list.clear();
+
+       for (unsigned int loop = 0; loop < MAX_LANG_NUM; loop++) {
+               if (IseLangDataSelectState[loop]) {
+                       v_lang_list.push_back(loop);
+               }
+       }
+#else
+       Evas_Object *radio = NULL;
+       if (ad.First_item) {
+               NextItem = elm_list_item_next(ad.First_item);
+               radio = elm_list_item_icon_get(ad.First_item);
+               if (radio) {
+                       int selected = elm_radio_value_get(radio);
+                       if (selected >= 0 && selected < MAX_LANG_NUM) {
+                               ise_set_language(selected);
+                               g_currentLanguage = selected;
+                               /* saving current values into global structure */
+                               _setup_info.current_language = g_currentLanguage;
+
+                               v_lang_list.clear();
+                               v_lang_list.push_back(g_currentLanguage);
+                       }
+               }
+       }
+#endif
+
+       if (callback) {
+               callback(_setup_info);
+               _setup_info.current_language = g_currentLanguage;
+
+       }
+#ifdef SUPPORTS_MULTIPLE_LANGUAGE_SELECTION
+       else {
+               int current_index = g_currentLanguage;
+               int count = 0;
+
+               while (!IseLangDataSelectState[current_index]
+                       && count < MAX_LANG_NUM) {
+                       current_index++;
+
+                       if (current_index >= MAX_LANG_NUM) {
+                               current_index = 0;
+                       }
+
+                       count++;
+               }
+
+               _setup_info.current_language = current_index;
+               g_currentLanguage = current_index;
+       }
+#else
+       clean_up();
+#endif
+       /* This is necessary to update keyboard options
+        * when options update is made from the settings window */
+       set_keyboard_option(true, _setup_info);
+}
+
+static void __response_cb(void *data, Evas_Object * obj, void *event_info)
+{
+       if(!data) return ;
+               _scim_config->write(CONFIG_LANGUAGE_COUNT, _setup_info.lang_count);
+       if (obj)
+               evas_object_del(obj);
+}
+static int _check_selected_language_count(Evas_Object *list)
+{
+       const Eina_List *items, *l;
+       Evas_Object *check;
+       void *it;
+       int count = 0;
+
+       items = elm_list_items_get(list);
+       EINA_LIST_FOREACH(items, l, it) {
+                check = elm_object_item_part_content_get((Elm_Object_Item *)it, "start");
+               if (elm_check_state_get(check))
+                       count++;
+       }
+       return count;
+}
+
+static void _lang_check_button_toggled(void *data, Evas_Object *obj,
+                                      void *event_info)
+{
+       Evas_Object *list = (Evas_Object *) data;
+       Evas_Object *button = (Evas_Object *) evas_object_data_get(list, "back_button");
+       Evas_Object *lang_popup = NULL;
+       _setup_info.lang_count = _check_selected_language_count(list);
+
+       if (_setup_info.lang_count > 0)
+               elm_object_disabled_set(button, EINA_FALSE);
+       else {
+               lang_popup = elm_popup_add(list);
+               elm_check_state_set(obj,1);
+               _setup_info.lang_count = 1;
+               elm_object_text_set(lang_popup, dgettext(GETTEXT_PACKAGE, "IDS_IME_BODY_YOU_MUST_SELECT_AT_LEAST_ONE_LANGUAGE_IN_KEYBOARD_SETTINGS"));
+               elm_popup_timeout_set(lang_popup, 3.0);
+               evas_object_smart_callback_add(lang_popup, "block,clicked", __response_cb, list);
+               evas_object_show(lang_popup);
+       }
+}
+
+static void _lang_list_sel(void *data, Evas_Object *obj, void *event_info)
+{
+       Elm_Object_Item *it = (Elm_Object_Item *) event_info;
+       Evas_Object *list = (Evas_Object *) data;
+       Evas_Object *button = (Evas_Object *) evas_object_data_get(list, "back_button");
+       Evas_Object *check;
+       Evas_Object *lang_popup = NULL;
+
+       check = elm_object_item_part_content_get(it, "start");
+       elm_check_state_set(check, !elm_check_state_get(check));
+
+       _setup_info.lang_count = _check_selected_language_count(list);
+       if (_setup_info.lang_count > 0)
+               elm_object_disabled_set(button, EINA_FALSE);
+       else {
+               lang_popup = elm_popup_add(list);
+               elm_check_state_set(check,1);
+               _setup_info.lang_count = 1;
+               elm_object_text_set(lang_popup, dgettext(GETTEXT_PACKAGE, "IDS_IME_BODY_YOU_MUST_SELECT_AT_LEAST_ONE_LANGUAGE_IN_KEYBOARD_SETTINGS"));
+               elm_popup_timeout_set(lang_popup, 3.0);
+               evas_object_smart_callback_add(lang_popup, "block,clicked", __response_cb, list);
+               evas_object_show(lang_popup);
+       }
+}
+
+static void _lang_cancel_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       elm_naviframe_item_pop(ad.naviframe);
+}
+
+static void _lang_set_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       set_the_selected_language(obj);
+
+       _scim_config->write(CONFIG_CURRENT_LANGUAGE, _setup_info.current_language);
+       _scim_config->write(CONFIG_LANGUAGE_COUNT, _setup_info.lang_count);
+       _scim_config->write(CONFIG_LANGUAGE_LIST, v_lang_list);
+       _scim_config->reload();
+
+       String display_name = String(ISF_DISPLAY);
+       const char *p = getenv("DISPLAY");
+       if (p != NULL)
+               display_name = String(p);
+
+       HelperAgent helper_agent;
+       HelperInfo helper_info(ISF_UUID, "ISF Setting", "", "", SCIM_HELPER_STAND_ALONE);
+       int id = helper_agent.open_connection(helper_info, display_name);
+
+       if (id == -1) {
+               std::cerr << "    open_connection failed!!!!!!\n";
+       } else {
+               helper_agent.reload_config();
+               helper_agent.close_connection();
+       }
+
+       strncpy(itemdata[LANGUAGE_ID].text, LANGUAGE, ITEM_DATA_STRING_LEN - 1);
+       strncpy(itemdata[LANGUAGE_ID].sub_text,
+               gettext(Lang_count_List[_setup_info.lang_count]),
+               ITEM_DATA_STRING_LEN - 1);
+       if (keypad_subdata.lang_item) {
+               elm_genlist_item_update(keypad_subdata.lang_item);
+       }
+
+       ad.First_item = NULL;
+}
+
+static void _show_language_selection_view(Evas_Object *navi_frame)
+{
+       /* selecting writing language */
+       Evas_Object *lang_list = NULL;
+       Elm_Object_Item *list_item = NULL;
+       Evas_Object *rdg = NULL;
+       Evas_Object *item = NULL;
+       Evas_Object *back_btn = NULL;
+
+
+       ad.First_item = NULL;
+       lang_list = create_list_view(ad.naviframe);
+
+       for (unsigned int loop = 0; loop < MAX_LANG_NUM; loop++) {
+               item = create_check_button(lang_list);
+               evas_object_propagate_events_set(item, EINA_FALSE);
+
+               if (IseLangDataSelectState[loop])
+                       elm_check_state_set(item, 1);
+               else
+                       elm_check_state_set(item, 0);
+               evas_object_smart_callback_add(item, "changed",
+                                                                       _lang_check_button_toggled,
+                                                                       (void *)lang_list);
+
+               list_item = elm_list_item_append(lang_list,
+                                                                       IseLangData
+                                                                       [KEYPAD_QWERTY]
+                                                                       [loop].displayname, item, NULL,
+                                                                       _lang_list_sel,
+                                                                       (void *)lang_list);
+
+               if (loop == 0)
+                       ad.First_item = list_item;
+       }
+
+       elm_list_go(lang_list);
+       evas_object_show(lang_list);
+
+       Elm_Object_Item *navi_it = elm_naviframe_item_push(ad.naviframe, LANGUAGE, NULL, NULL, lang_list, NULL);
+       back_btn = elm_object_item_part_content_get(navi_it, "elm.swallow.prev_btn");
+
+       evas_object_smart_callback_add(back_btn, "clicked", _lang_set_cb, NULL);
+       evas_object_data_set(lang_list, "back_button", back_btn);
+}
+
+static void option_list_clicked(void *data, Evas_Object *obj, void *event_info)
+{
+       char *str = (char *)data;
+       Evas_Event_Mouse_Up *ev = (Evas_Event_Mouse_Up *) event_info;
+       if (ev && ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD) {
+               return;
+       }
+
+       if (!strcmp(str, LANGUAGE))
+               _show_language_selection_view(ad.naviframe);
+}
+
+static Eina_Bool _ise_keydown_exit_cb(void *data, int type, void *event)
+{
+       Ecore_Event_Key *hard_key = (Ecore_Event_Key *) event;
+
+       if (hard_key) {
+               if (strcmp(hard_key->keyname, "XF86Phone") == 0
+                   || strcmp(hard_key->keyname, "XF86Stop") == 0) {
+                       set_the_selected_language(NULL);
+                       clean_up();
+               }
+       }
+       return ECORE_CALLBACK_CANCEL;
+}
+
+static void _option_cancel_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       clean_up();
+}
+
+static void _option_done_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       set_the_selected_language(obj);
+
+       clean_up();
+}
+
+void _show_option_window(Evas_Object *parentWidget)
+{
+       Evas_Object *window = NULL;
+       Evas_Object *layout = NULL;
+       bool indicator = FALSE;
+       Evas_Object *cancel_btn, *done_btn;
+
+       ad.parent = NULL;
+       ad.openedViaGadget = TRUE;
+
+       /* push into naviframe */
+       cancel_btn = elm_button_add(ad.naviframe);
+       evas_object_smart_callback_add(cancel_btn, "clicked", _option_done_cb, NULL);
+
+       elm_naviframe_item_push(ad.naviframe, OPTIONS, cancel_btn, NULL, option_list, NULL);
+       elm_object_style_set(cancel_btn, "naviframe/back_btn/default");
+
+       return;
+}
+
+static Ecore_X_Window get_isf_active_window()
+{
+       /* Set a transient window for window stack */
+       /* Gets the current XID of the active window into the root window property  */
+       Atom type_return;
+       unsigned long nitems_return;
+       unsigned long bytes_after_return;
+       int format_return;
+       unsigned char *data;
+       Ecore_X_Window xAppWindow = NULL;
+       gint ret = 0;
+
+       ret = XGetWindowProperty((Display *) ecore_x_display_get(),
+                                                       ecore_x_window_root_get(elm_win_xwindow_get(main_window)),
+                                                       ecore_x_atom_get("_ISF_ACTIVE_WINDOW"), 0,
+                                                       G_MAXLONG, False, ((Atom) 33), &type_return,
+                                                       &format_return, &nitems_return,
+                                                       &bytes_after_return, &data);
+
+       if (ret == Success) {
+               if ((type_return == ((Atom) 33)) && (format_return == 32)
+                   && (data)) {
+                       xAppWindow = *(Window *) data;
+                       if (data)
+                               XFree(data);
+               }
+       }
+       return xAppWindow;
+}
+
+static void set_transient_for_app_window(Evas_Object *option_win)
+{
+       Ecore_X_Window xOptionWin = elm_win_xwindow_get(option_win);
+       ecore_x_icccm_transient_for_set(xOptionWin, get_isf_active_window());
+}
+
+void
+_show_option_window_ise(Evas_Object *parentWidget,
+                                                               SETTING_INFO previnfo,
+                                                               void mainback(SETTING_INFO currentInfo))
+{
+       Evas_Object *option_list = NULL, *window = NULL;
+       Evas_Object *layout = NULL, *bg = NULL;
+       bool indicator = FALSE;
+       callback = mainback;
+       ad.openedViaGadget = FALSE;
+       _setup_info = previnfo;
+
+       for (unsigned int loop = 0; loop < MAX_LANG_NUM; loop++) {
+               if (IseLangData[KEYPAD_QWERTY][loop].name) {
+                       scim::String str =
+                           scim::scim_get_language_name_english(IseLangData
+                                                                [KEYPAD_QWERTY]
+                                                                [loop].name);
+                       //strncpy(IseLangData[KEYPAD_QWERTY][loop].displayname, str.c_str(), 255);
+                       strncpy(IseLangData[KEYPAD_QWERTY][loop].displayname, dgettext(GETTEXT_PACKAGE, language_text_name[loop]), 255);
+               }
+       }
+
+       if (ad.option_window) {
+               window = ad.option_window;
+               evas_object_show(ad.option_window);
+               indicator = TRUE;
+       } else {
+               memset(&ad, 0x0, sizeof(Ise_Settings));
+               /* create option window */
+               window = create_main_window();
+               ad.option_window = window;
+               elm_win_indicator_mode_set(window, ELM_WIN_INDICATOR_SHOW);
+               indicator = FALSE;
+               Evas_Coord win_w = 0, win_h = 0;
+               ecore_x_window_size_get(ecore_x_window_root_first_get(), &win_w, &win_h);
+               if(win_w) {
+                       elm_config_scale_set(win_w / BASE_THEME_WIDTH);
+               }
+       }
+
+       /* create main layout */
+       ad.parent = parentWidget;
+       bg = create_bg(window);
+       layout = create_layout(window);
+       ad.option_layout = layout;
+       evas_object_show(layout);
+       set_transient_for_app_window(window);
+       if(window)
+               elm_win_raise (window);
+
+       ad.naviframe = create_naviframe(layout);
+       elm_object_part_content_set(layout, "elm.swallow.content", ad.naviframe);
+       option_list = create_option_mainview(layout);
+       /* push into naviframe */
+       Evas_Object *cancel_btn;
+
+       cancel_btn = elm_button_add(ad.naviframe);
+       evas_object_smart_callback_add(cancel_btn, "clicked", _option_done_cb,
+                                      NULL);
+
+       elm_naviframe_item_push(ad.naviframe, OPTIONS, cancel_btn, NULL, option_list, NULL);
+       elm_object_style_set(cancel_btn, "naviframe/back_btn/default");
+
+       /*For center hard key */
+       evtHandler =
+           ecore_event_handler_add(ECORE_EVENT_KEY_DOWN, _ise_keydown_exit_cb,
+                                   NULL);
+
+       /* This is necessary to update keyboard options when
+        * keboard layout is changed by long press 123 button */
+       set_keyboard_option(true, _setup_info);
+}
+
diff --git a/src/window_slide_animator.cpp b/src/window_slide_animator.cpp
new file mode 100755 (executable)
index 0000000..ce4208a
--- /dev/null
@@ -0,0 +1,324 @@
+/*
+ * Copyright 2012  Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.tizenopensource.org/license
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+
+#define Uses_SCIM_HELPER
+
+#include <scim.h>
+#include <mcf.h>
+#include "ise.h"
+#include "include/window_slide_animator.h"
+#include <ui-gadget.h>
+
+using namespace mcf;
+extern struct ui_gadget *ug;
+extern Evas_Object *box;
+extern Evas_Object *main_window;
+
+CWindowSlideAnimator::CWindowSlideAnimator()
+{
+       mTargetWindow = NULL;
+       mTimer = NULL;
+}
+
+CWindowSlideAnimator::~CWindowSlideAnimator()
+{
+       mTargetWindow = NULL;
+       if (mTimer) {
+               ecore_timer_del(mTimer);
+               mTimer = NULL;
+       }
+}
+
+void CWindowSlideAnimator::set_target_window(Evas_Object *window)
+{
+       mTargetWindow = window;
+}
+
+void CWindowSlideAnimator::set_start_position(int startx, int starty)
+{
+       mStartPt.x = startx;
+       mStartPt.y = starty;
+}
+
+void CWindowSlideAnimator::set_end_position(int endx, int endy)
+{
+       mEndPt.x = endx;
+       mEndPt.y = endy;
+}
+
+void CWindowSlideAnimator::start_animation()
+{
+       if (mTimer) {
+               ecore_timer_del(mTimer);
+               mTimer = NULL;
+       }
+       gettimeofday(&mStartTime, NULL);
+       mTimer = ecore_timer_add(ANIM_INTERVAL,
+                        CWindowSlideAnimator::timer_event, this);
+       evas_object_move(mTargetWindow, mStartPt.x, mStartPt.y);
+}
+
+void CWindowSlideAnimator::stop_animation()
+{
+       if (mTimer) {
+               ecore_timer_del(mTimer);
+               mTimer = NULL;
+       }
+       evas_object_move(mTargetWindow, mEndPt.x, mEndPt.y);
+}
+
+Eina_Bool CWindowSlideAnimator::timer_event(void *data)
+{
+       MCF_DEBUG();
+       int retVal = false;
+
+       CWindowSlideAnimator *pAnimator =
+           static_cast<CWindowSlideAnimator *>(data);
+       if (pAnimator) {
+               mcffloat fElapsedTime = pAnimator->get_elapsed_time();
+
+               if (fElapsedTime < ANIM_TIME && fElapsedTime > 0) {
+                       int posx = pAnimator->get_start_position().x
+                                          + ((float)(pAnimator->get_end_position().x -
+                                                                 pAnimator->get_start_position().x)) *
+                                                (fElapsedTime / ANIM_TIME);
+                       int posy = pAnimator->get_start_position().y +
+                                          ((float)(pAnimator->get_end_position().y -
+                                                               pAnimator->get_start_position().y)) *
+                                          (fElapsedTime / ANIM_TIME);
+                       Evas_Object *window = pAnimator->get_target_window();
+                       evas_object_move(pAnimator->get_target_window(), posx,
+                                        posy);
+                       retVal = true;
+
+               } else {
+                       evas_object_move(pAnimator->get_target_window(),
+                                        pAnimator->get_end_position().x,
+                                        pAnimator->get_end_position().y);
+                       ecore_timer_del(pAnimator->get_timer_handle());
+                       pAnimator->set_timer_handle(NULL);
+                       if (pAnimator->get_decorator()) {
+                               pAnimator->
+                                   get_decorator()->animation_timer_cb();
+                       }
+                       if (ug) {
+                               ug_destroy(ug);
+                               ug = NULL;
+                       }
+                       if (box) {
+                               elm_win_resize_object_del(main_window, box);
+                               evas_object_del(box);
+                               box = NULL;
+                       }
+
+               }
+       }
+
+       return TRUE;
+}
+
+void CWindowSlideAnimator::get_window_position(int width, int height,
+                                                     int *showx,
+                                                     int *showy, int *hidex,
+                                                     int *hidey)
+{
+       int lshowx, lshowy;
+       int lhidex, lhidey;
+
+       Evas_Coord win_w, win_h;
+       ecore_x_window_size_get(ecore_x_window_root_first_get(), &win_w,
+                               &win_h);
+       lshowx = (win_w - width) / 2;
+       lshowy = win_h - height;
+       lhidex = lshowx;
+       lhidey = win_h;
+
+       if (showx)
+               *showx = lshowx;
+       if (showy)
+               *showy = lshowy;
+       if (hidex)
+               *hidex = lhidex;
+       if (hidey)
+               *hidey = lhidey;
+}
+
+mcffloat CWindowSlideAnimator::get_elapsed_time()
+{
+       struct timeval tCurrentTime;
+       struct timeval tDelta;
+
+       gettimeofday(&tCurrentTime, NULL);
+       timersub(&tCurrentTime, &mStartTime, &tDelta);
+
+       return (tDelta.tv_sec) + (tDelta.tv_usec / 1000000.0f);
+}
+
+extern scim::HelperAgent helper_agent;
+
+CKesslerISEDecorator::CKesslerISEDecorator()
+{
+       mTimer = NULL;
+}
+
+CKesslerISEDecorator::~CKesslerISEDecorator()
+{
+       destroy();
+}
+
+void CKesslerISEDecorator::create()
+{
+       destroy();
+
+       mAnimator.set_decorator(this);
+}
+
+void CKesslerISEDecorator::destroy()
+{
+       if (mTimer) {
+               ecore_timer_del(mTimer);
+               mTimer = NULL;
+       }
+}
+
+void CKesslerISEDecorator::set_target_window(Evas_Object *window)
+{
+       mAnimator.set_target_window(window);
+}
+
+void CKesslerISEDecorator::start_show_animation(int width, int height)
+{
+       int startx, starty;
+       int endx, endy;
+
+       CWindowSlideAnimator::get_window_position(width, height,
+                                                        &endx, &endy, &startx,
+                                                        &starty);
+
+       if (startx != mAnimator.get_start_position().x ||
+           starty != mAnimator.get_start_position().y ||
+           endx != mAnimator.get_end_position().x ||
+           endy != mAnimator.get_end_position().y ||
+           ecore_timer_pending_get(mAnimator.get_timer_handle()) == 0 ||
+           mAnimator.get_timer_handle() == NULL) {
+               mAnimator.set_start_position(startx, starty);
+               mAnimator.set_end_position(endx, endy);
+               mAnimator.start_animation();
+               mAnimationType = ANIMATION_TYPE_SHOW;
+               helper_agent.update_input_context(ECORE_IMF_INPUT_PANEL_STATE_EVENT,
+                                                               ECORE_IMF_INPUT_PANEL_STATE_WILL_SHOW);
+       }
+}
+
+#include <X11/Xlib.h>
+void CKesslerISEDecorator::start_hide_animation(int width, int height)
+{
+       int startx, starty;
+       int endx, endy;
+
+       CWindowSlideAnimator::get_window_position(width, height,
+                                                        &startx, &starty,
+                                                        &endx, &endy);
+
+       McfRectangle rect;
+       Window junkwin;
+       Ecore_X_Window_Attributes attrs;
+       CMCFWindows *windows = CMCFWindows::get_instance();
+       ecore_x_window_geometry_get(elm_win_xwindow_get
+                                   (static_cast <
+                                    Evas_Object *
+                                    >(windows->get_base_window())), &(rect.x),
+                                   &(rect.y), &(rect.width), &(rect.height));
+       ecore_x_window_attributes_get(elm_win_xwindow_get
+                                     (static_cast <
+                                      Evas_Object *
+                                      >(windows->get_base_window())), &attrs);
+       XTranslateCoordinates((Display *) ecore_x_display_get(),
+                             (Drawable) elm_win_xwindow_get(static_cast <
+                                                            Evas_Object *
+                                                            >
+                                                            (windows->get_base_window
+                                                             ())), attrs.root,
+                             -attrs.border, -attrs.border, &(rect.x),
+                             &(rect.y), &junkwin);
+
+       /* Do not start animation again if the same animation is currently playing */
+       if (mAnimator.get_end_position().x != endx
+           || mAnimator.get_end_position().y != endy
+           || mAnimator.get_timer_handle() == NULL) {
+               mAnimator.set_start_position(rect.x, rect.y);
+               mAnimator.set_end_position(endx, endy);
+               mAnimator.start_animation();
+               mAnimationType = ANIMATION_TYPE_HIDE;
+       }
+}
+
+void CKesslerISEDecorator::finish_show_animation(int width, int height)
+{
+       int startx, starty;
+       int endx, endy;
+
+       CWindowSlideAnimator::get_window_position(width, height,
+                                                        &endx, &endy, &startx,
+                                                        &starty);
+
+       if ((startx != mAnimator.get_start_position().x ||
+            starty != mAnimator.get_start_position().y ||
+            endx != mAnimator.get_end_position().x ||
+            endy != mAnimator.get_end_position().y)
+           || mAnimator.get_timer_handle() == NULL) {
+               mAnimator.set_start_position(startx, starty);
+               mAnimator.set_end_position(endx, endy);
+               mAnimator.stop_animation();
+#ifdef HAVE_CONFORMANT_AUTOSCROLL
+               _send_keypad_geom_atom_info(main_window, KEYPAD_STATE_ON);
+#endif
+       }
+}
+
+Eina_Bool CKesslerISEDecorator::timer_event(void *data)
+{
+       CKesslerISEDecorator *decorator =
+               static_cast<CKesslerISEDecorator *>(data);
+       printf("CKesslerISEDecorator::timer_event : %p\n", decorator);
+
+       if (decorator) {
+               decorator->set_timer_handle(NULL);
+       }
+
+       return false;
+}
+
+void CKesslerISEDecorator::animation_timer_cb()
+{
+       if (mAnimationType == ANIMATION_TYPE_SHOW) {
+               helper_agent.update_input_context
+                   (ECORE_IMF_INPUT_PANEL_STATE_EVENT,
+                    ECORE_IMF_INPUT_PANEL_STATE_SHOW);
+#ifdef HAVE_CONFORMANT_AUTOSCROLL
+               _send_keypad_geom_atom_info(main_window, KEYPAD_STATE_ON);
+#endif
+
+       } else {
+               helper_agent.update_input_context
+                   (ECORE_IMF_INPUT_PANEL_STATE_EVENT,
+                    ECORE_IMF_INPUT_PANEL_STATE_HIDE);
+               // Memory optimization */
+               elm_cache_all_flush();
+       }
+}